@scalar/types 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/legacy/reference-config.d.ts +7 -30
- package/dist/legacy/reference-config.d.ts.map +1 -1
- package/dist/legacy/reference-config.js.map +1 -1
- package/dist/snippetz/snippetz.d.ts +1 -1
- package/dist/snippetz/snippetz.d.ts.map +1 -1
- package/dist/snippetz/snippetz.js +2 -0
- package/dist/snippetz/snippetz.js.map +2 -2
- package/package.json +3 -3
- package/dist/api-reference/api-reference-configuration.test.js +0 -224
- package/dist/api-reference/api-reference-configuration.test.js.map +0 -7
- package/dist/entities/security-scheme.test.js +0 -318
- package/dist/entities/security-scheme.test.js.map +0 -7
- package/dist/utils/nanoid.test.js +0 -29
- package/dist/utils/nanoid.test.js.map +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @scalar/types
|
|
2
2
|
|
|
3
|
+
## 0.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 221e35f: feat: added webhooks
|
|
8
|
+
- Updated dependencies [221e35f]
|
|
9
|
+
- @scalar/openapi-types@0.3.3
|
|
10
|
+
|
|
11
|
+
## 0.2.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [05c22c7]
|
|
16
|
+
- @scalar/openapi-types@0.3.2
|
|
17
|
+
|
|
3
18
|
## 0.2.1
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -61,39 +61,16 @@ export declare enum XScalarStability {
|
|
|
61
61
|
Experimental = "experimental",
|
|
62
62
|
Stable = "stable"
|
|
63
63
|
}
|
|
64
|
-
export type Information = {
|
|
65
|
-
'description'?: string;
|
|
66
|
-
'operationId'?: string | number;
|
|
67
|
-
'parameters'?: Parameters[];
|
|
68
|
-
'responses'?: Record<string, OpenAPI.ResponseObject>;
|
|
69
|
-
'security'?: OpenAPIV3.SecurityRequirementObject[];
|
|
70
|
-
'requestBody'?: RequestBody;
|
|
71
|
-
'summary'?: string;
|
|
72
|
-
'tags'?: string[];
|
|
73
|
-
'deprecated'?: boolean;
|
|
74
|
-
'servers'?: OpenAPIV3_1.ServerObject[];
|
|
75
|
-
/**
|
|
76
|
-
* Scalar
|
|
77
|
-
*/
|
|
78
|
-
'x-custom-examples'?: CustomRequestExample[];
|
|
79
|
-
'x-scalar-stability'?: XScalarStability;
|
|
80
|
-
/**
|
|
81
|
-
* Redocly, current
|
|
82
|
-
*/
|
|
83
|
-
'x-codeSamples'?: CustomRequestExample[];
|
|
84
|
-
/**
|
|
85
|
-
* Redocly, deprecated
|
|
86
|
-
*/
|
|
87
|
-
'x-code-samples'?: CustomRequestExample[];
|
|
88
|
-
};
|
|
89
64
|
export type Operation = {
|
|
90
|
-
|
|
65
|
+
id: string;
|
|
66
|
+
httpVerb: OpenAPIV3_1.HttpMethods;
|
|
91
67
|
path: string;
|
|
92
|
-
|
|
93
|
-
|
|
68
|
+
name: string;
|
|
69
|
+
isWebhook: boolean;
|
|
94
70
|
description?: string;
|
|
95
|
-
information
|
|
71
|
+
information: OpenAPIV3_1.OperationObject;
|
|
96
72
|
servers?: OpenAPIV3_1.ServerObject[];
|
|
73
|
+
pathParameters?: OpenAPIV3_1.ParameterObject[];
|
|
97
74
|
};
|
|
98
75
|
/**
|
|
99
76
|
* @deprecated Use Parameter instead
|
|
@@ -242,7 +219,7 @@ export type Spec = {
|
|
|
242
219
|
};
|
|
243
220
|
'servers'?: OpenAPIV3.Document['servers'] | OpenAPIV3_1.Document['servers'];
|
|
244
221
|
'components'?: OpenAPIV3.ComponentsObject | OpenAPIV3_1.ComponentsObject;
|
|
245
|
-
'webhooks'?:
|
|
222
|
+
'webhooks'?: TransformedOperation[];
|
|
246
223
|
'definitions'?: Definitions;
|
|
247
224
|
'swagger'?: OpenAPIV2.Document['swagger'];
|
|
248
225
|
'openapi'?: OpenAPIV3.Document['openapi'] | OpenAPIV3_1.Document['openapi'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-config.d.ts","sourceRoot":"","sources":["../../src/legacy/reference-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEvF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;GAGG;AACH,YAAY,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,QAAQ,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,IAAI,MAAM,EAAE,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAErB,IAAI,GAEJ,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAEjE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;AAEvB,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAA;AAEvE,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,KAAK,eAAe,GAAG,MAAM,GAAG,IAAI,CAAA;AAEpC,MAAM,MAAM,WAAW,GACnB,mBAAmB,eAAe,EAAE,GACpC,kBAAkB,eAAe,EAAE,GACnC,aAAa,eAAe,EAAE,GAC9B,YAAY,eAAe,EAAE,GAC7B,2BAA2B,eAAe,EAAE,GAC5C,oCAAoC,eAAe,EAAE,GACrD,sBAAsB,eAAe,EAAE,GACvC,MAAM,eAAe,EAAE,GACvB,mBAAmB,MAAM,QAAQ,eAAe,EAAE,CAAA;AAEtD,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"reference-config.d.ts","sourceRoot":"","sources":["../../src/legacy/reference-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/legacy/reference-config.ts"],
|
|
4
|
-
"sourcesContent": ["import type { OpenAPI, OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from '@scalar/openapi-types'\n\nimport type { ApiReferenceConfiguration } from '../api-reference/index'\nimport type { TargetId } from '../snippetz/index'\n\n/**\n * This re-export is needed due to a typescript issue\n * @see https://github.com/microsoft/TypeScript/issues/42873\n */\nexport type {\n OpenAPI,\n OpenAPIV2,\n OpenAPIV3,\n OpenAPIV3_1,\n} from '@scalar/openapi-types'\n\nexport type ClientInfo = {\n key: string\n title: string\n link: string\n description: string\n}\n\n/**\n * Alias for the OpenAPI 3.1 ServerObject type\n *\n * @deprecated Use OpenAPIV3_1.ServerObject instead\n */\nexport type Server = OpenAPIV3_1.ServerObject\n\nexport type TargetInfo = {\n key: TargetId\n title: string\n extname: `.${string}` | null\n default: string\n}\n\nexport type HiddenClients =\n // Just hide all\n | true\n // Exclude whole targets or just specific clients\n | Partial<Record<TargetInfo['key'], boolean | ClientInfo['key'][]>>\n // Backwards compatibility with the previous behavior ['fetch', 'xhr']\n | ClientInfo['key'][]\n\nexport type PathRouting = {\n basePath: string\n}\n\n/**\n * @deprecated Use ApiReferenceConfiguration instead\n *\n * @example import type { ApiReferenceConfiguration } from '@scalar/types/api-reference'\n */\nexport type ReferenceConfiguration = Partial<ApiReferenceConfiguration>\n\nexport type BaseParameter = {\n name: string\n description?: string | null\n value: string | number | Record<string, any>\n required?: boolean\n enabled: boolean\n}\n\ntype OptionalCharset = string | null\n\nexport type ContentType =\n | `application/json${OptionalCharset}`\n | `application/xml${OptionalCharset}`\n | `text/plain${OptionalCharset}`\n | `text/html${OptionalCharset}`\n | `application/octet-stream${OptionalCharset}`\n | `application/x-www-form-urlencoded${OptionalCharset}`\n | `multipart/form-data${OptionalCharset}`\n | `*/*${OptionalCharset}`\n | `application/vnd.${string}+json${OptionalCharset}`\n\nexport type Cookie = {\n name: string\n value: string\n}\n\nexport type CustomRequestExample = {\n lang: string\n label: string\n source: string\n}\n\nexport type Header = {\n name: string\n value: string\n}\n\nexport enum XScalarStability {\n Deprecated = 'deprecated',\n Experimental = 'experimental',\n Stable = 'stable',\n}\n\nexport type
|
|
4
|
+
"sourcesContent": ["import type { OpenAPI, OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from '@scalar/openapi-types'\n\nimport type { ApiReferenceConfiguration } from '../api-reference/index'\nimport type { TargetId } from '../snippetz/index'\n\n/**\n * This re-export is needed due to a typescript issue\n * @see https://github.com/microsoft/TypeScript/issues/42873\n */\nexport type {\n OpenAPI,\n OpenAPIV2,\n OpenAPIV3,\n OpenAPIV3_1,\n} from '@scalar/openapi-types'\n\nexport type ClientInfo = {\n key: string\n title: string\n link: string\n description: string\n}\n\n/**\n * Alias for the OpenAPI 3.1 ServerObject type\n *\n * @deprecated Use OpenAPIV3_1.ServerObject instead\n */\nexport type Server = OpenAPIV3_1.ServerObject\n\nexport type TargetInfo = {\n key: TargetId\n title: string\n extname: `.${string}` | null\n default: string\n}\n\nexport type HiddenClients =\n // Just hide all\n | true\n // Exclude whole targets or just specific clients\n | Partial<Record<TargetInfo['key'], boolean | ClientInfo['key'][]>>\n // Backwards compatibility with the previous behavior ['fetch', 'xhr']\n | ClientInfo['key'][]\n\nexport type PathRouting = {\n basePath: string\n}\n\n/**\n * @deprecated Use ApiReferenceConfiguration instead\n *\n * @example import type { ApiReferenceConfiguration } from '@scalar/types/api-reference'\n */\nexport type ReferenceConfiguration = Partial<ApiReferenceConfiguration>\n\nexport type BaseParameter = {\n name: string\n description?: string | null\n value: string | number | Record<string, any>\n required?: boolean\n enabled: boolean\n}\n\ntype OptionalCharset = string | null\n\nexport type ContentType =\n | `application/json${OptionalCharset}`\n | `application/xml${OptionalCharset}`\n | `text/plain${OptionalCharset}`\n | `text/html${OptionalCharset}`\n | `application/octet-stream${OptionalCharset}`\n | `application/x-www-form-urlencoded${OptionalCharset}`\n | `multipart/form-data${OptionalCharset}`\n | `*/*${OptionalCharset}`\n | `application/vnd.${string}+json${OptionalCharset}`\n\nexport type Cookie = {\n name: string\n value: string\n}\n\nexport type CustomRequestExample = {\n lang: string\n label: string\n source: string\n}\n\nexport type Header = {\n name: string\n value: string\n}\n\nexport enum XScalarStability {\n Deprecated = 'deprecated',\n Experimental = 'experimental',\n Stable = 'stable',\n}\n\nexport type Operation = {\n id: string\n httpVerb: OpenAPIV3_1.HttpMethods\n path: string\n name: string\n isWebhook: boolean\n description?: string\n information: OpenAPIV3_1.OperationObject\n servers?: OpenAPIV3_1.ServerObject[]\n pathParameters?: OpenAPIV3_1.ParameterObject[]\n}\n\n/**\n * @deprecated Use Parameter instead\n */\nexport type Parameters = Parameter\n\nexport type Parameter = {\n // Fixed Fields\n name: string\n in?: string\n description?: string\n required?: boolean\n deprecated?: boolean\n allowEmptyValue?: boolean\n // Other\n style?: 'form' | 'simple'\n explode?: boolean\n allowReserved?: boolean\n schema?: Schema\n example?: any\n examples?: Map<string, any>\n content?: RequestBodyMimeTypes\n headers?: { [key: string]: OpenAPI.HeaderObject }\n}\n\nexport type Query = {\n name: string\n value: string\n}\n\n// Create a mapped type to ensure keys are a subset of ContentType\nexport type RequestBodyMimeTypes = {\n [K in ContentType]?: {\n schema?: any\n example?: any\n examples?: any\n }\n}\n\nexport type RequestBody = {\n description?: string\n required?: boolean\n content?: RequestBodyMimeTypes\n}\n\nexport type Schema = {\n type: string\n name?: string\n example?: any\n default?: any\n format?: string\n description?: string\n properties?: Record<string, Schema>\n}\n\n/**\n * This is a very strange and custom way to represent the operation object.\n * It\u2019s the outcome of the `parse` helper.\n *\n * @deprecated This is evil. Stop using it. We\u2019ll transition to use the new store.\n */\nexport type TransformedOperation = Operation & {\n pathParameters?: Parameter[]\n}\n\nexport type CollapsedSidebarItems = Record<string, boolean>\n\nexport type AuthenticationState = {\n customSecurity?: boolean\n /** You can pre-select a single security scheme, multiple, or complex security using an array of arrays */\n preferredSecurityScheme?: string | (string | string[])[] | null\n securitySchemes?:\n | OpenAPIV2.SecurityDefinitionsObject\n | OpenAPIV3.ComponentsObject['securitySchemes']\n | OpenAPIV3_1.ComponentsObject['securitySchemes']\n http?: {\n basic?: {\n username?: string\n password?: string\n }\n bearer?: {\n token?: string\n }\n }\n apiKey?: {\n token?: string\n }\n oAuth2?: {\n clientId?: string\n scopes?: string[]\n accessToken?: string\n state?: string\n username?: string\n password?: string\n }\n}\n\nexport type Heading = {\n depth: number\n value: string\n slug?: string\n}\n\nexport type CodeBlockSSRKey = `components-scalar-code-block${number}`\nexport type DescriptionSectionSSRKey = `components-Content-Introduction-Description-sections${number}`\n\nexport type ScalarState = {\n 'hash'?: string\n 'useGlobalStore-authentication'?: AuthenticationState\n 'useSidebarContent-collapsedSidebarItems'?: CollapsedSidebarItems\n [key: CodeBlockSSRKey]: string\n [key: DescriptionSectionSSRKey]: {\n heading: Heading\n content: string\n }[]\n}\n\nexport type SSRState = {\n payload: {\n data: ScalarState\n }\n url: string\n}\n\nexport type Tag = {\n 'name': string\n 'description': string\n 'operations': TransformedOperation[]\n 'x-displayName'?: string\n}\n\nexport type TagGroup = {\n name: string\n tags: string[]\n}\n\nexport type Definitions = OpenAPIV2.DefinitionsObject\n\n/**\n * Webhook (after our super custom transformation process)\n *\n * @deprecated Let\u2019s get rid of those super custom transformed entities and use the store instead.\n */\nexport type Webhooks = Record<\n string,\n Record<\n OpenAPIV3_1.HttpMethods,\n TransformedOperation & {\n 'x-internal'?: boolean\n }\n >\n>\n\n/**\n * The native OpenAPI Webhook object, but with the x-internal and x-scalar-ignore properties\n */\nexport type Webhook = (OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject) & {\n 'x-internal'?: boolean\n 'x-scalar-ignore'?: boolean\n}\n\n/**\n * @deprecated Use `@scalar/openapi-types` instead\n */\nexport type Spec = {\n 'tags'?: Tag[]\n 'info':\n | Partial<OpenAPIV2.Document['info']>\n | Partial<OpenAPIV3.Document['info']>\n | Partial<OpenAPIV3_1.Document['info']>\n 'host'?: OpenAPIV2.Document['host']\n 'basePath'?: OpenAPIV2.Document['basePath']\n 'schemes'?: OpenAPIV2.Document['schemes']\n 'externalDocs'?: {\n url: string\n description?: string\n }\n 'servers'?: OpenAPIV3.Document['servers'] | OpenAPIV3_1.Document['servers']\n 'components'?: OpenAPIV3.ComponentsObject | OpenAPIV3_1.ComponentsObject\n 'webhooks'?: TransformedOperation[]\n 'definitions'?: Definitions\n 'swagger'?: OpenAPIV2.Document['swagger']\n 'openapi'?: OpenAPIV3.Document['openapi'] | OpenAPIV3_1.Document['openapi']\n 'x-tagGroups'?: TagGroup[]\n 'security'?: OpenAPIV3.SecurityRequirementObject[]\n}\n"],
|
|
5
5
|
"mappings": "AA6FO,IAAK,mBAAL,kBAAKA,sBAAL;AACL,EAAAA,kBAAA,gBAAa;AACb,EAAAA,kBAAA,kBAAe;AACf,EAAAA,kBAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;",
|
|
6
6
|
"names": ["XScalarStability"]
|
|
7
7
|
}
|
|
@@ -3,7 +3,7 @@ export type { Request as HarRequest, Param as FormDataParam } from 'har-format';
|
|
|
3
3
|
/**
|
|
4
4
|
* List of available clients
|
|
5
5
|
*/
|
|
6
|
-
export declare const AVAILABLE_CLIENTS: readonly ["c/libcurl", "clojure/clj_http", "csharp/httpclient", "csharp/restsharp", "go/native", "http/http1.1", "java/asynchttp", "java/nethttp", "java/okhttp", "java/unirest", "js/axios", "js/fetch", "js/jquery", "js/ofetch", "js/xhr", "kotlin/okhttp", "node/axios", "node/fetch", "node/ofetch", "node/undici", "objc/nsurlsession", "ocaml/cohttp", "php/curl", "php/guzzle", "powershell/restmethod", "powershell/webrequest", "python/python3", "python/requests", "r/httr", "ruby/native", "shell/curl", "shell/httpie", "shell/wget", "swift/nsurlsession", "dart/http"];
|
|
6
|
+
export declare const AVAILABLE_CLIENTS: readonly ["c/libcurl", "clojure/clj_http", "csharp/httpclient", "csharp/restsharp", "go/native", "http/http1.1", "java/asynchttp", "java/nethttp", "java/okhttp", "java/unirest", "js/axios", "js/fetch", "js/jquery", "js/ofetch", "js/xhr", "kotlin/okhttp", "node/axios", "node/fetch", "node/ofetch", "node/undici", "objc/nsurlsession", "ocaml/cohttp", "php/curl", "php/guzzle", "powershell/restmethod", "powershell/webrequest", "python/python3", "python/requests", "python/httpx_sync", "python/httpx_async", "r/httr", "ruby/native", "shell/curl", "shell/httpie", "shell/wget", "swift/nsurlsession", "dart/http"];
|
|
7
7
|
export type AvailableClients = typeof AVAILABLE_CLIENTS;
|
|
8
8
|
/** Programming language */
|
|
9
9
|
export type TargetId = AvailableClients[number] extends `${infer T}/${string}` ? T : never;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snippetz.d.ts","sourceRoot":"","sources":["../../src/snippetz/snippetz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvD,YAAY,EAAE,OAAO,IAAI,UAAU,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/E;;GAEG;AACH,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"snippetz.d.ts","sourceRoot":"","sources":["../../src/snippetz/snippetz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvD,YAAY,EAAE,OAAO,IAAI,UAAU,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/E;;GAEG;AACH,eAAO,MAAM,iBAAiB,mmBAsCpB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,OAAO,iBAAiB,CAAA;AAEvD,2BAA2B;AAC3B,MAAM,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;AAE1F,iCAAiC;AACjC,MAAM,MAAM,MAAM,GAAG;KAClB,CAAC,IAAI,QAAQ,GAAG;QACf,GAAG,EAAE,CAAC,CAAA;QACN,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB;CACF,CAAC,QAAQ,CAAC,CAAA;AAEX,kBAAkB;AAClB,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,QAAQ,GACvD,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,GAC3E,CAAC,GACD,KAAK,GACP,KAAK,CAAA;AAET,uCAAuC;AACvC,MAAM,MAAM,MAAM,GAAG;IACnB,mCAAmC;IACnC,MAAM,EAAE,QAAQ,CAAA;IAChB,oCAAoC;IACpC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC1B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,8BAA8B;IAC9B,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,EAAE,mBAAmB,KAAK,MAAM,CAAA;CACzF,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,mDAAmD;IACnD,IAAI,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9C,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/snippetz/snippetz.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Request as HarRequest } from 'har-format'\n\nexport type { Request as HarRequest, Param as FormDataParam } from 'har-format'\n\n/**\n * List of available clients\n */\nexport const AVAILABLE_CLIENTS = [\n 'c/libcurl',\n 'clojure/clj_http',\n 'csharp/httpclient',\n 'csharp/restsharp',\n 'go/native',\n 'http/http1.1',\n 'java/asynchttp',\n 'java/nethttp',\n 'java/okhttp',\n 'java/unirest',\n 'js/axios',\n 'js/fetch',\n 'js/jquery',\n 'js/ofetch',\n 'js/xhr',\n 'kotlin/okhttp',\n 'node/axios',\n 'node/fetch',\n 'node/ofetch',\n 'node/undici',\n 'objc/nsurlsession',\n 'ocaml/cohttp',\n 'php/curl',\n 'php/guzzle',\n 'powershell/restmethod',\n 'powershell/webrequest',\n 'python/python3',\n 'python/requests',\n 'r/httr',\n 'ruby/native',\n 'shell/curl',\n 'shell/httpie',\n 'shell/wget',\n 'swift/nsurlsession',\n 'dart/http',\n] as const\n\nexport type AvailableClients = typeof AVAILABLE_CLIENTS\n\n/** Programming language */\nexport type TargetId = AvailableClients[number] extends `${infer T}/${string}` ? T : never\n\n/** Configuration for a target */\nexport type Target = {\n [K in TargetId]: {\n key: K\n title: string\n default: ClientId<K>\n clients: Plugin[]\n }\n}[TargetId]\n\n/** HTTP client */\nexport type ClientId<T extends string> = T extends TargetId\n ? Extract<AvailableClients[number], `${T}/${string}`> extends `${T}/${infer C}`\n ? C\n : never\n : never\n\n/** What any plugins needs to return */\nexport type Plugin = {\n /** The language or environment. */\n target: TargetId\n /** The identifier of the client. */\n client: ClientId<TargetId>\n /** The title of the client. */\n title: string\n /** The actual source code. */\n generate: (request?: Partial<HarRequest>, configuration?: PluginConfiguration) => string\n}\n\n/**\n * Optional configuration for any plugin\n */\nexport type PluginConfiguration = {\n /** Credentials to add HTTP Basic Authentication */\n auth?: { username: string; password: string }\n}\n"],
|
|
5
|
-
"mappings": "AAOO,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
4
|
+
"sourcesContent": ["import type { Request as HarRequest } from 'har-format'\n\nexport type { Request as HarRequest, Param as FormDataParam } from 'har-format'\n\n/**\n * List of available clients\n */\nexport const AVAILABLE_CLIENTS = [\n 'c/libcurl',\n 'clojure/clj_http',\n 'csharp/httpclient',\n 'csharp/restsharp',\n 'go/native',\n 'http/http1.1',\n 'java/asynchttp',\n 'java/nethttp',\n 'java/okhttp',\n 'java/unirest',\n 'js/axios',\n 'js/fetch',\n 'js/jquery',\n 'js/ofetch',\n 'js/xhr',\n 'kotlin/okhttp',\n 'node/axios',\n 'node/fetch',\n 'node/ofetch',\n 'node/undici',\n 'objc/nsurlsession',\n 'ocaml/cohttp',\n 'php/curl',\n 'php/guzzle',\n 'powershell/restmethod',\n 'powershell/webrequest',\n 'python/python3',\n 'python/requests',\n 'python/httpx_sync',\n 'python/httpx_async',\n 'r/httr',\n 'ruby/native',\n 'shell/curl',\n 'shell/httpie',\n 'shell/wget',\n 'swift/nsurlsession',\n 'dart/http',\n] as const\n\nexport type AvailableClients = typeof AVAILABLE_CLIENTS\n\n/** Programming language */\nexport type TargetId = AvailableClients[number] extends `${infer T}/${string}` ? T : never\n\n/** Configuration for a target */\nexport type Target = {\n [K in TargetId]: {\n key: K\n title: string\n default: ClientId<K>\n clients: Plugin[]\n }\n}[TargetId]\n\n/** HTTP client */\nexport type ClientId<T extends string> = T extends TargetId\n ? Extract<AvailableClients[number], `${T}/${string}`> extends `${T}/${infer C}`\n ? C\n : never\n : never\n\n/** What any plugins needs to return */\nexport type Plugin = {\n /** The language or environment. */\n target: TargetId\n /** The identifier of the client. */\n client: ClientId<TargetId>\n /** The title of the client. */\n title: string\n /** The actual source code. */\n generate: (request?: Partial<HarRequest>, configuration?: PluginConfiguration) => string\n}\n\n/**\n * Optional configuration for any plugin\n */\nexport type PluginConfiguration = {\n /** Credentials to add HTTP Basic Authentication */\n auth?: { username: string; password: string }\n}\n"],
|
|
5
|
+
"mappings": "AAOO,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"scalar",
|
|
17
17
|
"references"
|
|
18
18
|
],
|
|
19
|
-
"version": "0.2.
|
|
19
|
+
"version": "0.2.3",
|
|
20
20
|
"engines": {
|
|
21
21
|
"node": ">=20"
|
|
22
22
|
},
|
|
@@ -66,13 +66,13 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"nanoid": "^5.1.5",
|
|
68
68
|
"zod": "3.24.1",
|
|
69
|
-
"@scalar/openapi-types": "0.3.
|
|
69
|
+
"@scalar/openapi-types": "0.3.3"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/har-format": "^1.2.15",
|
|
73
73
|
"type-fest": "^4.20.0",
|
|
74
74
|
"vite": "5.4.19",
|
|
75
|
-
"@scalar/build-tooling": "0.2.
|
|
75
|
+
"@scalar/build-tooling": "0.2.3"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
78
78
|
"build": "scalar-build-esbuild",
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { apiReferenceConfigurationSchema } from "./api-reference-configuration.js";
|
|
3
|
-
describe("api-reference-configuration", () => {
|
|
4
|
-
describe("schema", () => {
|
|
5
|
-
it("validates a minimal configuration", () => {
|
|
6
|
-
const minimalConfig = {};
|
|
7
|
-
expect(() => apiReferenceConfigurationSchema.parse(minimalConfig)).not.toThrow();
|
|
8
|
-
});
|
|
9
|
-
it("validates a complete configuration", () => {
|
|
10
|
-
const completeConfig = {
|
|
11
|
-
theme: "default",
|
|
12
|
-
layout: "modern",
|
|
13
|
-
url: "https://example.com/openapi.json",
|
|
14
|
-
content: '{"openapi": "3.1.0"}',
|
|
15
|
-
proxyUrl: "https://proxy.example.com",
|
|
16
|
-
isEditable: true,
|
|
17
|
-
showSidebar: true,
|
|
18
|
-
hideModels: false,
|
|
19
|
-
hideDownloadButton: false,
|
|
20
|
-
hideTestRequestButton: false,
|
|
21
|
-
hideSearch: false,
|
|
22
|
-
darkMode: true,
|
|
23
|
-
forceDarkModeState: "dark",
|
|
24
|
-
hideDarkModeToggle: false,
|
|
25
|
-
searchHotKey: "k",
|
|
26
|
-
favicon: "/favicon.ico",
|
|
27
|
-
hiddenClients: ["fetch", "xhr"],
|
|
28
|
-
defaultHttpClient: {
|
|
29
|
-
targetKey: "target1",
|
|
30
|
-
clientKey: "client1"
|
|
31
|
-
},
|
|
32
|
-
customCss: ".custom { color: red; }",
|
|
33
|
-
pathRouting: {
|
|
34
|
-
basePath: "/api"
|
|
35
|
-
},
|
|
36
|
-
baseServerURL: "https://api.example.com",
|
|
37
|
-
withDefaultFonts: true,
|
|
38
|
-
defaultOpenAllTags: false,
|
|
39
|
-
tagsSorter: "alpha",
|
|
40
|
-
operationsSorter: "method",
|
|
41
|
-
_integration: "nextjs",
|
|
42
|
-
hideClientButton: false
|
|
43
|
-
};
|
|
44
|
-
expect(() => apiReferenceConfigurationSchema.parse(completeConfig)).not.toThrow();
|
|
45
|
-
});
|
|
46
|
-
it("validates hiddenClients true", () => {
|
|
47
|
-
const config = { hiddenClients: true };
|
|
48
|
-
expect(apiReferenceConfigurationSchema.parse(config)).toMatchObject({ hiddenClients: true });
|
|
49
|
-
});
|
|
50
|
-
it("validates theme enum values", () => {
|
|
51
|
-
const config = { theme: "invalid-theme" };
|
|
52
|
-
expect(apiReferenceConfigurationSchema.parse(config)).toMatchObject({ theme: "default" });
|
|
53
|
-
const validThemes = [
|
|
54
|
-
"alternate",
|
|
55
|
-
"default",
|
|
56
|
-
"moon",
|
|
57
|
-
"purple",
|
|
58
|
-
"solarized",
|
|
59
|
-
"bluePlanet",
|
|
60
|
-
"deepSpace",
|
|
61
|
-
"saturn",
|
|
62
|
-
"kepler",
|
|
63
|
-
"elysiajs",
|
|
64
|
-
"fastify",
|
|
65
|
-
"mars",
|
|
66
|
-
"none"
|
|
67
|
-
];
|
|
68
|
-
validThemes.forEach((theme) => {
|
|
69
|
-
expect(apiReferenceConfigurationSchema.parse({ theme })).toMatchObject({ theme });
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
it("validates layout enum values", () => {
|
|
73
|
-
const config = { layout: "invalid-layout" };
|
|
74
|
-
expect(apiReferenceConfigurationSchema.parse(config)).toMatchObject({ layout: "modern" });
|
|
75
|
-
const validLayouts = ["modern", "classic"];
|
|
76
|
-
validLayouts.forEach((layout) => {
|
|
77
|
-
expect(apiReferenceConfigurationSchema.parse({ layout })).toMatchObject({ layout });
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
it("validates content and url configuration", () => {
|
|
81
|
-
const validConfigs = [
|
|
82
|
-
{ url: "https://example.com/openapi.json" },
|
|
83
|
-
{ content: '{"openapi": "3.1.0"}' },
|
|
84
|
-
{ content: { openapi: "3.1.0" } },
|
|
85
|
-
{ content: () => ({ openapi: "3.1.0" }) },
|
|
86
|
-
{ content: null }
|
|
87
|
-
];
|
|
88
|
-
validConfigs.forEach((config) => {
|
|
89
|
-
expect(() => apiReferenceConfigurationSchema.parse(config)).not.toThrow();
|
|
90
|
-
});
|
|
91
|
-
const invalidConfigs = [{ url: 999 }, { content: 123 }];
|
|
92
|
-
invalidConfigs.forEach((config) => {
|
|
93
|
-
expect(() => apiReferenceConfigurationSchema.parse(config)).toThrow();
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
it("validates function parameters", () => {
|
|
97
|
-
const config = {
|
|
98
|
-
generateHeadingSlug: (heading) => `#${heading.slug}`,
|
|
99
|
-
generateModelSlug: (model) => `model-${model.name}`,
|
|
100
|
-
generateTagSlug: (tag) => `tag-${tag.name}`,
|
|
101
|
-
generateOperationSlug: (operation) => `${operation.method}-${operation.path}`,
|
|
102
|
-
generateWebhookSlug: (webhook) => `webhook-${webhook.name}`,
|
|
103
|
-
onLoaded: () => console.log("loaded"),
|
|
104
|
-
onSpecUpdate: (spec) => console.log("spec updated", spec)
|
|
105
|
-
};
|
|
106
|
-
expect(() => apiReferenceConfigurationSchema.parse(config)).not.toThrow();
|
|
107
|
-
});
|
|
108
|
-
it("validates integration enum values", () => {
|
|
109
|
-
const validIntegrations = [
|
|
110
|
-
"adonisjs",
|
|
111
|
-
"docusaurus",
|
|
112
|
-
"dotnet",
|
|
113
|
-
"elysiajs",
|
|
114
|
-
"express",
|
|
115
|
-
"fastapi",
|
|
116
|
-
"fastify",
|
|
117
|
-
"go",
|
|
118
|
-
"hono",
|
|
119
|
-
"html",
|
|
120
|
-
"laravel",
|
|
121
|
-
"litestar",
|
|
122
|
-
"nestjs",
|
|
123
|
-
"nextjs",
|
|
124
|
-
"nitro",
|
|
125
|
-
"nuxt",
|
|
126
|
-
"platformatic",
|
|
127
|
-
"react",
|
|
128
|
-
"rust",
|
|
129
|
-
"svelte",
|
|
130
|
-
"vue",
|
|
131
|
-
null
|
|
132
|
-
];
|
|
133
|
-
validIntegrations.forEach((integration) => {
|
|
134
|
-
expect(() => apiReferenceConfigurationSchema.parse({ _integration: integration })).not.toThrow();
|
|
135
|
-
});
|
|
136
|
-
expect(() => apiReferenceConfigurationSchema.parse({ _integration: "invalid-integration" })).toThrow();
|
|
137
|
-
});
|
|
138
|
-
it("validates sorter configurations", () => {
|
|
139
|
-
const validConfigs = [
|
|
140
|
-
{ tagsSorter: "alpha" },
|
|
141
|
-
{ tagsSorter: (a, b) => a.name.localeCompare(b.name) },
|
|
142
|
-
{ operationsSorter: "alpha" },
|
|
143
|
-
{ operationsSorter: "method" },
|
|
144
|
-
{ operationsSorter: (a, b) => a.path.localeCompare(b.path) }
|
|
145
|
-
];
|
|
146
|
-
validConfigs.forEach((config) => {
|
|
147
|
-
expect(() => apiReferenceConfigurationSchema.parse(config)).not.toThrow();
|
|
148
|
-
});
|
|
149
|
-
const invalidConfigs = [{ tagsSorter: "invalid" }, { operationsSorter: "invalid" }];
|
|
150
|
-
invalidConfigs.forEach((config) => {
|
|
151
|
-
expect(() => apiReferenceConfigurationSchema.parse(config)).toThrow();
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
describe("migrations", () => {
|
|
156
|
-
it("migrates proxy to proxyUrl", () => {
|
|
157
|
-
const config = {
|
|
158
|
-
proxy: "https://proxy.example.com"
|
|
159
|
-
};
|
|
160
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
161
|
-
expect(migratedConfig.proxyUrl).toBe("https://proxy.example.com");
|
|
162
|
-
expect(migratedConfig.proxy).toBeUndefined();
|
|
163
|
-
});
|
|
164
|
-
it("keeps proxyUrl if both proxy and proxyUrl are set", () => {
|
|
165
|
-
const config = {
|
|
166
|
-
proxy: "https://proxy.example.com",
|
|
167
|
-
proxyUrl: "https://existing.example.com"
|
|
168
|
-
};
|
|
169
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
170
|
-
expect(migratedConfig.proxyUrl).toBe("https://existing.example.com");
|
|
171
|
-
expect(migratedConfig.proxy).toBeUndefined();
|
|
172
|
-
});
|
|
173
|
-
it("migrates the old proxy URL to the new one", () => {
|
|
174
|
-
const config = {
|
|
175
|
-
proxyUrl: "https://api.scalar.com/request-proxy"
|
|
176
|
-
};
|
|
177
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
178
|
-
expect(migratedConfig.proxyUrl).toBe("https://proxy.scalar.com");
|
|
179
|
-
expect(migratedConfig.proxy).toBeUndefined();
|
|
180
|
-
});
|
|
181
|
-
it("migrates spec.url to url", () => {
|
|
182
|
-
const config = {
|
|
183
|
-
spec: {
|
|
184
|
-
url: "https://example.com/openapi.json"
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
188
|
-
expect(migratedConfig.spec).toBeUndefined();
|
|
189
|
-
expect(migratedConfig.url).toBe("https://example.com/openapi.json");
|
|
190
|
-
});
|
|
191
|
-
it("migrates spec.content to content", () => {
|
|
192
|
-
const config = {
|
|
193
|
-
spec: {
|
|
194
|
-
content: '{"openapi": "3.1.0"}'
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
198
|
-
expect(migratedConfig.spec).toBeUndefined();
|
|
199
|
-
expect(migratedConfig.content).toBe('{"openapi": "3.1.0"}');
|
|
200
|
-
});
|
|
201
|
-
it("allows a function as onDocumentSelect", () => {
|
|
202
|
-
const config = {
|
|
203
|
-
onDocumentSelect: () => console.log("selected")
|
|
204
|
-
};
|
|
205
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
206
|
-
expect(migratedConfig.onDocumentSelect).toBeInstanceOf(Function);
|
|
207
|
-
});
|
|
208
|
-
it("allows a function as onDocumentSelect", () => {
|
|
209
|
-
const config = {
|
|
210
|
-
onDocumentSelect: () => console.log("selected")
|
|
211
|
-
};
|
|
212
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
213
|
-
expect(migratedConfig.onDocumentSelect).toBeInstanceOf(Function);
|
|
214
|
-
});
|
|
215
|
-
it("allows an async function as onDocumentSelect", async () => {
|
|
216
|
-
const config = {
|
|
217
|
-
onDocumentSelect: async () => console.log("selected")
|
|
218
|
-
};
|
|
219
|
-
const migratedConfig = apiReferenceConfigurationSchema.parse(config);
|
|
220
|
-
expect(migratedConfig.onDocumentSelect?.()).toBeInstanceOf(Promise);
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
//# sourceMappingURL=api-reference-configuration.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/api-reference/api-reference-configuration.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { describe, expect, it } from 'vitest'\nimport { type ApiReferenceConfiguration, apiReferenceConfigurationSchema } from './api-reference-configuration'\n\ndescribe('api-reference-configuration', () => {\n describe('schema', () => {\n it('validates a minimal configuration', () => {\n const minimalConfig = {}\n expect(() => apiReferenceConfigurationSchema.parse(minimalConfig)).not.toThrow()\n })\n\n it('validates a complete configuration', () => {\n const completeConfig = {\n theme: 'default',\n layout: 'modern',\n url: 'https://example.com/openapi.json',\n content: '{\"openapi\": \"3.1.0\"}',\n proxyUrl: 'https://proxy.example.com',\n isEditable: true,\n showSidebar: true,\n hideModels: false,\n hideDownloadButton: false,\n hideTestRequestButton: false,\n hideSearch: false,\n darkMode: true,\n forceDarkModeState: 'dark',\n hideDarkModeToggle: false,\n searchHotKey: 'k',\n favicon: '/favicon.ico',\n hiddenClients: ['fetch', 'xhr'],\n defaultHttpClient: {\n targetKey: 'target1',\n clientKey: 'client1',\n },\n customCss: '.custom { color: red; }',\n pathRouting: {\n basePath: '/api',\n },\n baseServerURL: 'https://api.example.com',\n withDefaultFonts: true,\n defaultOpenAllTags: false,\n tagsSorter: 'alpha',\n operationsSorter: 'method',\n _integration: 'nextjs',\n hideClientButton: false,\n }\n\n expect(() => apiReferenceConfigurationSchema.parse(completeConfig)).not.toThrow()\n })\n\n it('validates hiddenClients true', () => {\n const config = { hiddenClients: true }\n\n expect(apiReferenceConfigurationSchema.parse(config)).toMatchObject({ hiddenClients: true })\n })\n\n it('validates theme enum values', () => {\n const config = { theme: 'invalid-theme' }\n\n expect(apiReferenceConfigurationSchema.parse(config)).toMatchObject({ theme: 'default' })\n\n const validThemes = [\n 'alternate',\n 'default',\n 'moon',\n 'purple',\n 'solarized',\n 'bluePlanet',\n 'deepSpace',\n 'saturn',\n 'kepler',\n 'elysiajs',\n 'fastify',\n 'mars',\n 'none',\n ]\n\n validThemes.forEach((theme) => {\n expect(apiReferenceConfigurationSchema.parse({ theme })).toMatchObject({ theme })\n })\n })\n\n it('validates layout enum values', () => {\n const config = { layout: 'invalid-layout' }\n expect(apiReferenceConfigurationSchema.parse(config)).toMatchObject({ layout: 'modern' })\n\n const validLayouts = ['modern', 'classic']\n validLayouts.forEach((layout) => {\n expect(apiReferenceConfigurationSchema.parse({ layout })).toMatchObject({ layout })\n })\n })\n\n it('validates content and url configuration', () => {\n const validConfigs = [\n { url: 'https://example.com/openapi.json' },\n { content: '{\"openapi\": \"3.1.0\"}' },\n { content: { openapi: '3.1.0' } },\n { content: () => ({ openapi: '3.1.0' }) },\n { content: null },\n ]\n\n validConfigs.forEach((config) => {\n expect(() => apiReferenceConfigurationSchema.parse(config)).not.toThrow()\n })\n\n const invalidConfigs = [{ url: 999 }, { content: 123 }]\n\n invalidConfigs.forEach((config) => {\n expect(() => apiReferenceConfigurationSchema.parse(config)).toThrow()\n })\n })\n\n it('validates function parameters', () => {\n const config = {\n generateHeadingSlug: (heading: any) => `#${heading.slug}`,\n generateModelSlug: (model: { name: string }) => `model-${model.name}`,\n generateTagSlug: (tag: any) => `tag-${tag.name}`,\n generateOperationSlug: (operation: { path: string; method: string }) => `${operation.method}-${operation.path}`,\n generateWebhookSlug: (webhook: { name: string }) => `webhook-${webhook.name}`,\n onLoaded: () => console.log('loaded'),\n onSpecUpdate: (spec: string) => console.log('spec updated', spec),\n }\n\n expect(() => apiReferenceConfigurationSchema.parse(config)).not.toThrow()\n })\n\n it('validates integration enum values', () => {\n const validIntegrations = [\n 'adonisjs',\n 'docusaurus',\n 'dotnet',\n 'elysiajs',\n 'express',\n 'fastapi',\n 'fastify',\n 'go',\n 'hono',\n 'html',\n 'laravel',\n 'litestar',\n 'nestjs',\n 'nextjs',\n 'nitro',\n 'nuxt',\n 'platformatic',\n 'react',\n 'rust',\n 'svelte',\n 'vue',\n null,\n ]\n\n validIntegrations.forEach((integration) => {\n expect(() => apiReferenceConfigurationSchema.parse({ _integration: integration })).not.toThrow()\n })\n\n expect(() => apiReferenceConfigurationSchema.parse({ _integration: 'invalid-integration' })).toThrow()\n })\n\n it('validates sorter configurations', () => {\n const validConfigs = [\n { tagsSorter: 'alpha' },\n { tagsSorter: (a: any, b: any) => a.name.localeCompare(b.name) },\n { operationsSorter: 'alpha' },\n { operationsSorter: 'method' },\n { operationsSorter: (a: any, b: any) => a.path.localeCompare(b.path) },\n ]\n\n validConfigs.forEach((config) => {\n expect(() => apiReferenceConfigurationSchema.parse(config)).not.toThrow()\n })\n\n const invalidConfigs = [{ tagsSorter: 'invalid' }, { operationsSorter: 'invalid' }]\n\n invalidConfigs.forEach((config) => {\n expect(() => apiReferenceConfigurationSchema.parse(config)).toThrow()\n })\n })\n })\n\n describe('migrations', () => {\n it('migrates proxy to proxyUrl', () => {\n const config = {\n proxy: 'https://proxy.example.com',\n }\n\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n\n expect(migratedConfig.proxyUrl).toBe('https://proxy.example.com')\n expect(migratedConfig.proxy).toBeUndefined()\n })\n\n it('keeps proxyUrl if both proxy and proxyUrl are set', () => {\n const config = {\n proxy: 'https://proxy.example.com',\n proxyUrl: 'https://existing.example.com',\n }\n\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n expect(migratedConfig.proxyUrl).toBe('https://existing.example.com')\n expect(migratedConfig.proxy).toBeUndefined()\n })\n\n it('migrates the old proxy URL to the new one', () => {\n const config = {\n proxyUrl: 'https://api.scalar.com/request-proxy',\n }\n\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n expect(migratedConfig.proxyUrl).toBe('https://proxy.scalar.com')\n expect(migratedConfig.proxy).toBeUndefined()\n })\n\n it('migrates spec.url to url', () => {\n const config = {\n spec: {\n url: 'https://example.com/openapi.json',\n },\n }\n\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n\n expect(migratedConfig.spec).toBeUndefined()\n expect(migratedConfig.url).toBe('https://example.com/openapi.json')\n })\n\n it('migrates spec.content to content', () => {\n const config = {\n spec: {\n content: '{\"openapi\": \"3.1.0\"}',\n },\n }\n\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n\n expect(migratedConfig.spec).toBeUndefined()\n expect(migratedConfig.content).toBe('{\"openapi\": \"3.1.0\"}')\n })\n\n it('allows a function as onDocumentSelect', () => {\n const config = {\n onDocumentSelect: () => console.log('selected'),\n }\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n expect(migratedConfig.onDocumentSelect).toBeInstanceOf(Function)\n })\n\n it('allows a function as onDocumentSelect', () => {\n const config = {\n onDocumentSelect: () => console.log('selected'),\n } satisfies Partial<ApiReferenceConfiguration>\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n expect(migratedConfig.onDocumentSelect).toBeInstanceOf(Function)\n })\n\n it('allows an async function as onDocumentSelect', async () => {\n const config = {\n onDocumentSelect: async () => console.log('selected'),\n } satisfies Partial<ApiReferenceConfiguration>\n const migratedConfig = apiReferenceConfigurationSchema.parse(config)\n\n expect(migratedConfig.onDocumentSelect?.()).toBeInstanceOf(Promise)\n })\n })\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
3
|
-
oasSecurityRequirementSchema,
|
|
4
|
-
pkceOptions,
|
|
5
|
-
securityApiKeySchema,
|
|
6
|
-
securityHttpSchema,
|
|
7
|
-
securityOauthSchema,
|
|
8
|
-
securityOpenIdSchema,
|
|
9
|
-
securitySchemeSchema
|
|
10
|
-
} from "./security-scheme.js";
|
|
11
|
-
describe("Security Schemas", () => {
|
|
12
|
-
describe("API Key Schema", () => {
|
|
13
|
-
it("should validate a valid API key schema", () => {
|
|
14
|
-
const apiKey = {
|
|
15
|
-
type: "apiKey",
|
|
16
|
-
name: "api_key",
|
|
17
|
-
in: "header",
|
|
18
|
-
description: "API Key Authentication",
|
|
19
|
-
uid: "apikey123",
|
|
20
|
-
nameKey: "x-api-key",
|
|
21
|
-
value: "test-api-key"
|
|
22
|
-
};
|
|
23
|
-
const result = securityApiKeySchema.safeParse(apiKey);
|
|
24
|
-
expect(result.success).toBe(true);
|
|
25
|
-
});
|
|
26
|
-
it("should apply default values", () => {
|
|
27
|
-
const minimalApiKey = {
|
|
28
|
-
type: "apiKey",
|
|
29
|
-
uid: "apikey123"
|
|
30
|
-
};
|
|
31
|
-
const result = securityApiKeySchema.parse(minimalApiKey);
|
|
32
|
-
expect(result).toEqual({
|
|
33
|
-
type: "apiKey",
|
|
34
|
-
uid: "apikey123",
|
|
35
|
-
name: "",
|
|
36
|
-
in: "header",
|
|
37
|
-
nameKey: "",
|
|
38
|
-
value: ""
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe("HTTP Schema", () => {
|
|
43
|
-
it("should validate a valid HTTP basic schema", () => {
|
|
44
|
-
const httpBasic = {
|
|
45
|
-
type: "http",
|
|
46
|
-
scheme: "basic",
|
|
47
|
-
description: "Basic HTTP Authentication",
|
|
48
|
-
uid: "http123",
|
|
49
|
-
username: "user",
|
|
50
|
-
password: "pass"
|
|
51
|
-
};
|
|
52
|
-
const result = securityHttpSchema.safeParse(httpBasic);
|
|
53
|
-
expect(result.success).toBe(true);
|
|
54
|
-
});
|
|
55
|
-
it("should validate a valid HTTP bearer schema", () => {
|
|
56
|
-
const httpBearer = {
|
|
57
|
-
type: "http",
|
|
58
|
-
scheme: "bearer",
|
|
59
|
-
bearerFormat: "JWT",
|
|
60
|
-
description: "Bearer Authentication",
|
|
61
|
-
uid: "http456",
|
|
62
|
-
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
|
|
63
|
-
};
|
|
64
|
-
const result = securityHttpSchema.safeParse(httpBearer);
|
|
65
|
-
expect(result.success).toBe(true);
|
|
66
|
-
});
|
|
67
|
-
it("should apply default values", () => {
|
|
68
|
-
const minimalHttp = {
|
|
69
|
-
type: "http",
|
|
70
|
-
uid: "http123"
|
|
71
|
-
};
|
|
72
|
-
const result = securityHttpSchema.parse(minimalHttp);
|
|
73
|
-
expect(result).toEqual({
|
|
74
|
-
type: "http",
|
|
75
|
-
uid: "http123",
|
|
76
|
-
scheme: "basic",
|
|
77
|
-
bearerFormat: "JWT",
|
|
78
|
-
nameKey: "",
|
|
79
|
-
username: "",
|
|
80
|
-
password: "",
|
|
81
|
-
token: ""
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
it("should reject invalid scheme values", () => {
|
|
85
|
-
const invalidHttp = {
|
|
86
|
-
type: "http",
|
|
87
|
-
scheme: "digest",
|
|
88
|
-
uid: "http123"
|
|
89
|
-
};
|
|
90
|
-
const result = securityHttpSchema.safeParse(invalidHttp);
|
|
91
|
-
expect(result.success).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe("OpenID Connect Schema", () => {
|
|
95
|
-
it("should validate a valid OpenID schema", () => {
|
|
96
|
-
const openId = {
|
|
97
|
-
type: "openIdConnect",
|
|
98
|
-
openIdConnectUrl: "https://example.com/.well-known/openid-configuration",
|
|
99
|
-
description: "OpenID Connect",
|
|
100
|
-
uid: "openid123",
|
|
101
|
-
nameKey: "openid"
|
|
102
|
-
};
|
|
103
|
-
const result = securityOpenIdSchema.safeParse(openId);
|
|
104
|
-
expect(result.success).toBe(true);
|
|
105
|
-
});
|
|
106
|
-
it("should apply default values", () => {
|
|
107
|
-
const minimalOpenId = {
|
|
108
|
-
type: "openIdConnect",
|
|
109
|
-
uid: "openid123"
|
|
110
|
-
};
|
|
111
|
-
const result = securityOpenIdSchema.parse(minimalOpenId);
|
|
112
|
-
expect(result).toEqual({
|
|
113
|
-
type: "openIdConnect",
|
|
114
|
-
uid: "openid123",
|
|
115
|
-
openIdConnectUrl: "",
|
|
116
|
-
nameKey: ""
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
describe("OAuth2 Schema", () => {
|
|
121
|
-
it("should validate a valid OAuth2 implicit flow schema", () => {
|
|
122
|
-
const oauth2Implicit = {
|
|
123
|
-
type: "oauth2",
|
|
124
|
-
description: "OAuth2 Implicit Flow",
|
|
125
|
-
uid: "oauth123",
|
|
126
|
-
flows: {
|
|
127
|
-
implicit: {
|
|
128
|
-
type: "implicit",
|
|
129
|
-
authorizationUrl: "https://example.com/oauth/authorize",
|
|
130
|
-
scopes: {
|
|
131
|
-
"read:api": "Read access",
|
|
132
|
-
"write:api": "Write access"
|
|
133
|
-
},
|
|
134
|
-
selectedScopes: ["read:api"],
|
|
135
|
-
token: "access-token-123"
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
const result = securityOauthSchema.safeParse(oauth2Implicit);
|
|
140
|
-
expect(result.success).toBe(true);
|
|
141
|
-
});
|
|
142
|
-
it("should validate a valid OAuth2 with missing scopes", () => {
|
|
143
|
-
const oauth2Implicit = {
|
|
144
|
-
type: "oauth2",
|
|
145
|
-
description: "OAuth2 Implicit Flow",
|
|
146
|
-
uid: "oauth123",
|
|
147
|
-
flows: {
|
|
148
|
-
implicit: {
|
|
149
|
-
type: "implicit",
|
|
150
|
-
authorizationUrl: "https://example.com/oauth/authorize",
|
|
151
|
-
scopes: null,
|
|
152
|
-
selectedScopes: ["read:api"],
|
|
153
|
-
token: "access-token-123"
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
const result = securityOauthSchema.safeParse(oauth2Implicit);
|
|
158
|
-
expect(result.success).toBe(true);
|
|
159
|
-
});
|
|
160
|
-
it("should validate a valid OAuth2 authorization code flow schema", () => {
|
|
161
|
-
const oauth2AuthCode = {
|
|
162
|
-
type: "oauth2",
|
|
163
|
-
description: "OAuth2 Authorization Code Flow",
|
|
164
|
-
uid: "oauth456",
|
|
165
|
-
flows: {
|
|
166
|
-
authorizationCode: {
|
|
167
|
-
type: "authorizationCode",
|
|
168
|
-
authorizationUrl: "https://example.com/oauth/authorize",
|
|
169
|
-
tokenUrl: "https://example.com/oauth/token",
|
|
170
|
-
"x-usePkce": "SHA-256",
|
|
171
|
-
scopes: {
|
|
172
|
-
"read:api": "Read access",
|
|
173
|
-
"write:api": "Write access"
|
|
174
|
-
},
|
|
175
|
-
clientSecret: "client-secret",
|
|
176
|
-
token: "access-token-456",
|
|
177
|
-
"x-scalar-security-query": {
|
|
178
|
-
prompt: "consent"
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
const result = securityOauthSchema.safeParse(oauth2AuthCode);
|
|
184
|
-
expect(result.success).toBe(true);
|
|
185
|
-
});
|
|
186
|
-
it("should validate a valid OAuth2 client credentials flow schema", () => {
|
|
187
|
-
const oauth2ClientCreds = {
|
|
188
|
-
type: "oauth2",
|
|
189
|
-
description: "OAuth2 Client Credentials Flow",
|
|
190
|
-
uid: "oauth789",
|
|
191
|
-
flows: {
|
|
192
|
-
clientCredentials: {
|
|
193
|
-
type: "clientCredentials",
|
|
194
|
-
tokenUrl: "https://example.com/oauth/token",
|
|
195
|
-
scopes: {},
|
|
196
|
-
clientSecret: "client-secret",
|
|
197
|
-
token: "access-token-789"
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
const result = securityOauthSchema.safeParse(oauth2ClientCreds);
|
|
202
|
-
expect(result.success).toBe(true);
|
|
203
|
-
});
|
|
204
|
-
it("should validate a valid OAuth2 password flow schema", () => {
|
|
205
|
-
const oauth2Password = {
|
|
206
|
-
type: "oauth2",
|
|
207
|
-
description: "OAuth2 Password Flow",
|
|
208
|
-
uid: "oauth101",
|
|
209
|
-
flows: {
|
|
210
|
-
password: {
|
|
211
|
-
type: "password",
|
|
212
|
-
tokenUrl: "https://example.com/oauth/token",
|
|
213
|
-
scopes: {},
|
|
214
|
-
username: "testuser",
|
|
215
|
-
password: "testpass",
|
|
216
|
-
clientSecret: "client-secret",
|
|
217
|
-
token: "access-token-101",
|
|
218
|
-
"x-scalar-security-query": {
|
|
219
|
-
prompt: "consent",
|
|
220
|
-
audience: "scalar"
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
const result = securityOauthSchema.safeParse(oauth2Password);
|
|
226
|
-
expect(result.success).toBe(true);
|
|
227
|
-
});
|
|
228
|
-
it("should apply default values", () => {
|
|
229
|
-
const minimalOauth2 = {
|
|
230
|
-
type: "oauth2",
|
|
231
|
-
uid: "oauth123"
|
|
232
|
-
};
|
|
233
|
-
const result = securityOauthSchema.parse(minimalOauth2);
|
|
234
|
-
expect(result.flows.implicit).toBeDefined();
|
|
235
|
-
expect(result.flows.implicit?.authorizationUrl).toBe("http://localhost:8080");
|
|
236
|
-
expect(result.flows.implicit?.scopes).toEqual({});
|
|
237
|
-
expect(result.flows.implicit?.selectedScopes).toEqual([]);
|
|
238
|
-
expect(result.flows.implicit?.token).toBe("");
|
|
239
|
-
expect(result.nameKey).toBe("");
|
|
240
|
-
});
|
|
241
|
-
it("should validate PKCE options", () => {
|
|
242
|
-
expect(pkceOptions).toContain("SHA-256");
|
|
243
|
-
expect(pkceOptions).toContain("plain");
|
|
244
|
-
expect(pkceOptions).toContain("no");
|
|
245
|
-
});
|
|
246
|
-
it("should apply x-default-scopes", () => {
|
|
247
|
-
const oauth2 = {
|
|
248
|
-
type: "oauth2",
|
|
249
|
-
uid: "oauth123",
|
|
250
|
-
"x-default-scopes": ["read:api", "write:api"]
|
|
251
|
-
};
|
|
252
|
-
const result = securitySchemeSchema.parse(oauth2);
|
|
253
|
-
if (result.type !== "oauth2") {
|
|
254
|
-
throw new Error("Expected oauth2 schema");
|
|
255
|
-
}
|
|
256
|
-
expect(result["x-default-scopes"]).toEqual(["read:api", "write:api"]);
|
|
257
|
-
expect(result.flows.implicit?.selectedScopes).toEqual(["read:api", "write:api"]);
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
describe("Security Requirement Schema", () => {
|
|
261
|
-
it("should validate a valid security requirement", () => {
|
|
262
|
-
const securityRequirement = {
|
|
263
|
-
"api_key": [],
|
|
264
|
-
"oauth2": ["read:api", "write:api"]
|
|
265
|
-
};
|
|
266
|
-
const result = oasSecurityRequirementSchema.safeParse(securityRequirement);
|
|
267
|
-
expect(result.success).toBe(true);
|
|
268
|
-
});
|
|
269
|
-
it("should apply default values for empty scopes", () => {
|
|
270
|
-
const securityRequirement = {
|
|
271
|
-
"api_key": void 0
|
|
272
|
-
};
|
|
273
|
-
const result = oasSecurityRequirementSchema.parse(securityRequirement);
|
|
274
|
-
expect(result).toEqual({
|
|
275
|
-
"api_key": []
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
});
|
|
279
|
-
describe("Combined Security Scheme", () => {
|
|
280
|
-
it("should validate all security scheme types", () => {
|
|
281
|
-
const apiKey = {
|
|
282
|
-
type: "apiKey",
|
|
283
|
-
name: "api_key",
|
|
284
|
-
in: "header",
|
|
285
|
-
uid: "apikey123",
|
|
286
|
-
value: "test-api-key"
|
|
287
|
-
};
|
|
288
|
-
const http = {
|
|
289
|
-
type: "http",
|
|
290
|
-
scheme: "bearer",
|
|
291
|
-
uid: "http123",
|
|
292
|
-
token: "bearer-token"
|
|
293
|
-
};
|
|
294
|
-
const openId = {
|
|
295
|
-
type: "openIdConnect",
|
|
296
|
-
openIdConnectUrl: "https://example.com/.well-known/openid-configuration",
|
|
297
|
-
uid: "openid123"
|
|
298
|
-
};
|
|
299
|
-
const oauth2 = {
|
|
300
|
-
type: "oauth2",
|
|
301
|
-
uid: "oauth123",
|
|
302
|
-
flows: {
|
|
303
|
-
implicit: {
|
|
304
|
-
type: "implicit",
|
|
305
|
-
authorizationUrl: "https://example.com/oauth/authorize",
|
|
306
|
-
scopes: {},
|
|
307
|
-
token: ""
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
};
|
|
311
|
-
expect(securitySchemeSchema.safeParse(apiKey).success).toBe(true);
|
|
312
|
-
expect(securitySchemeSchema.safeParse(http).success).toBe(true);
|
|
313
|
-
expect(securitySchemeSchema.safeParse(openId).success).toBe(true);
|
|
314
|
-
expect(securitySchemeSchema.safeParse(oauth2).success).toBe(true);
|
|
315
|
-
});
|
|
316
|
-
});
|
|
317
|
-
});
|
|
318
|
-
//# sourceMappingURL=security-scheme.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/entities/security-scheme.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { describe, expect, it } from 'vitest'\nimport {\n oasSecurityRequirementSchema,\n pkceOptions,\n securityApiKeySchema,\n securityHttpSchema,\n securityOauthSchema,\n securityOpenIdSchema,\n securitySchemeSchema,\n} from './security-scheme'\n\ndescribe('Security Schemas', () => {\n describe('API Key Schema', () => {\n it('should validate a valid API key schema', () => {\n const apiKey = {\n type: 'apiKey',\n name: 'api_key',\n in: 'header',\n description: 'API Key Authentication',\n uid: 'apikey123',\n nameKey: 'x-api-key',\n value: 'test-api-key',\n }\n\n const result = securityApiKeySchema.safeParse(apiKey)\n expect(result.success).toBe(true)\n })\n\n it('should apply default values', () => {\n const minimalApiKey = {\n type: 'apiKey',\n uid: 'apikey123',\n }\n\n const result = securityApiKeySchema.parse(minimalApiKey)\n expect(result).toEqual({\n type: 'apiKey',\n uid: 'apikey123',\n name: '',\n in: 'header',\n nameKey: '',\n value: '',\n })\n })\n })\n\n describe('HTTP Schema', () => {\n it('should validate a valid HTTP basic schema', () => {\n const httpBasic = {\n type: 'http',\n scheme: 'basic',\n description: 'Basic HTTP Authentication',\n uid: 'http123',\n username: 'user',\n password: 'pass',\n }\n\n const result = securityHttpSchema.safeParse(httpBasic)\n expect(result.success).toBe(true)\n })\n\n it('should validate a valid HTTP bearer schema', () => {\n const httpBearer = {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n description: 'Bearer Authentication',\n uid: 'http456',\n token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',\n }\n\n const result = securityHttpSchema.safeParse(httpBearer)\n expect(result.success).toBe(true)\n })\n\n it('should apply default values', () => {\n const minimalHttp = {\n type: 'http',\n uid: 'http123',\n }\n\n const result = securityHttpSchema.parse(minimalHttp)\n expect(result).toEqual({\n type: 'http',\n uid: 'http123',\n scheme: 'basic',\n bearerFormat: 'JWT',\n nameKey: '',\n username: '',\n password: '',\n token: '',\n })\n })\n\n it('should reject invalid scheme values', () => {\n const invalidHttp = {\n type: 'http',\n scheme: 'digest',\n uid: 'http123',\n }\n\n const result = securityHttpSchema.safeParse(invalidHttp)\n expect(result.success).toBe(false)\n })\n })\n\n describe('OpenID Connect Schema', () => {\n it('should validate a valid OpenID schema', () => {\n const openId = {\n type: 'openIdConnect',\n openIdConnectUrl: 'https://example.com/.well-known/openid-configuration',\n description: 'OpenID Connect',\n uid: 'openid123',\n nameKey: 'openid',\n }\n\n const result = securityOpenIdSchema.safeParse(openId)\n expect(result.success).toBe(true)\n })\n\n it('should apply default values', () => {\n const minimalOpenId = {\n type: 'openIdConnect',\n uid: 'openid123',\n }\n\n const result = securityOpenIdSchema.parse(minimalOpenId)\n expect(result).toEqual({\n type: 'openIdConnect',\n uid: 'openid123',\n openIdConnectUrl: '',\n nameKey: '',\n })\n })\n })\n\n describe('OAuth2 Schema', () => {\n it('should validate a valid OAuth2 implicit flow schema', () => {\n const oauth2Implicit = {\n type: 'oauth2',\n description: 'OAuth2 Implicit Flow',\n uid: 'oauth123',\n flows: {\n implicit: {\n type: 'implicit',\n authorizationUrl: 'https://example.com/oauth/authorize',\n scopes: {\n 'read:api': 'Read access',\n 'write:api': 'Write access',\n },\n selectedScopes: ['read:api'],\n token: 'access-token-123',\n },\n },\n }\n\n const result = securityOauthSchema.safeParse(oauth2Implicit)\n expect(result.success).toBe(true)\n })\n\n it('should validate a valid OAuth2 with missing scopes', () => {\n const oauth2Implicit = {\n type: 'oauth2',\n description: 'OAuth2 Implicit Flow',\n uid: 'oauth123',\n flows: {\n implicit: {\n type: 'implicit',\n authorizationUrl: 'https://example.com/oauth/authorize',\n scopes: null,\n selectedScopes: ['read:api'],\n token: 'access-token-123',\n },\n },\n }\n\n const result = securityOauthSchema.safeParse(oauth2Implicit)\n expect(result.success).toBe(true)\n })\n\n it('should validate a valid OAuth2 authorization code flow schema', () => {\n const oauth2AuthCode = {\n type: 'oauth2',\n description: 'OAuth2 Authorization Code Flow',\n uid: 'oauth456',\n flows: {\n authorizationCode: {\n type: 'authorizationCode',\n authorizationUrl: 'https://example.com/oauth/authorize',\n tokenUrl: 'https://example.com/oauth/token',\n 'x-usePkce': 'SHA-256',\n scopes: {\n 'read:api': 'Read access',\n 'write:api': 'Write access',\n },\n clientSecret: 'client-secret',\n token: 'access-token-456',\n 'x-scalar-security-query': {\n prompt: 'consent',\n },\n },\n },\n }\n\n const result = securityOauthSchema.safeParse(oauth2AuthCode)\n expect(result.success).toBe(true)\n })\n\n it('should validate a valid OAuth2 client credentials flow schema', () => {\n const oauth2ClientCreds = {\n type: 'oauth2',\n description: 'OAuth2 Client Credentials Flow',\n uid: 'oauth789',\n flows: {\n clientCredentials: {\n type: 'clientCredentials',\n tokenUrl: 'https://example.com/oauth/token',\n scopes: {},\n clientSecret: 'client-secret',\n token: 'access-token-789',\n },\n },\n }\n\n const result = securityOauthSchema.safeParse(oauth2ClientCreds)\n expect(result.success).toBe(true)\n })\n\n it('should validate a valid OAuth2 password flow schema', () => {\n const oauth2Password = {\n type: 'oauth2',\n description: 'OAuth2 Password Flow',\n uid: 'oauth101',\n flows: {\n password: {\n type: 'password',\n tokenUrl: 'https://example.com/oauth/token',\n scopes: {},\n username: 'testuser',\n password: 'testpass',\n clientSecret: 'client-secret',\n token: 'access-token-101',\n 'x-scalar-security-query': {\n prompt: 'consent',\n audience: 'scalar',\n },\n },\n },\n }\n\n const result = securityOauthSchema.safeParse(oauth2Password)\n expect(result.success).toBe(true)\n })\n\n it('should apply default values', () => {\n const minimalOauth2 = {\n type: 'oauth2',\n uid: 'oauth123',\n }\n\n const result = securityOauthSchema.parse(minimalOauth2)\n expect(result.flows.implicit).toBeDefined()\n expect(result.flows.implicit?.authorizationUrl).toBe('http://localhost:8080')\n expect(result.flows.implicit?.scopes).toEqual({})\n expect(result.flows.implicit?.selectedScopes).toEqual([])\n expect(result.flows.implicit?.token).toBe('')\n expect(result.nameKey).toBe('')\n })\n\n it('should validate PKCE options', () => {\n expect(pkceOptions).toContain('SHA-256')\n expect(pkceOptions).toContain('plain')\n expect(pkceOptions).toContain('no')\n })\n\n it('should apply x-default-scopes', () => {\n const oauth2 = {\n type: 'oauth2',\n uid: 'oauth123',\n 'x-default-scopes': ['read:api', 'write:api'],\n }\n\n const result = securitySchemeSchema.parse(oauth2)\n if (result.type !== 'oauth2') {\n throw new Error('Expected oauth2 schema')\n }\n expect(result['x-default-scopes']).toEqual(['read:api', 'write:api'])\n expect(result.flows.implicit?.selectedScopes).toEqual(['read:api', 'write:api'])\n })\n })\n\n describe('Security Requirement Schema', () => {\n it('should validate a valid security requirement', () => {\n const securityRequirement = {\n 'api_key': [],\n 'oauth2': ['read:api', 'write:api'],\n }\n\n const result = oasSecurityRequirementSchema.safeParse(securityRequirement)\n expect(result.success).toBe(true)\n })\n\n it('should apply default values for empty scopes', () => {\n const securityRequirement = {\n 'api_key': undefined,\n }\n\n const result = oasSecurityRequirementSchema.parse(securityRequirement)\n expect(result).toEqual({\n 'api_key': [],\n })\n })\n })\n\n describe('Combined Security Scheme', () => {\n it('should validate all security scheme types', () => {\n const apiKey = {\n type: 'apiKey',\n name: 'api_key',\n in: 'header',\n uid: 'apikey123',\n value: 'test-api-key',\n }\n\n const http = {\n type: 'http',\n scheme: 'bearer',\n uid: 'http123',\n token: 'bearer-token',\n }\n\n const openId = {\n type: 'openIdConnect',\n openIdConnectUrl: 'https://example.com/.well-known/openid-configuration',\n uid: 'openid123',\n }\n\n const oauth2 = {\n type: 'oauth2',\n uid: 'oauth123',\n flows: {\n implicit: {\n type: 'implicit',\n authorizationUrl: 'https://example.com/oauth/authorize',\n scopes: {},\n token: '',\n },\n },\n }\n\n expect(securitySchemeSchema.safeParse(apiKey).success).toBe(true)\n expect(securitySchemeSchema.safeParse(http).success).toBe(true)\n expect(securitySchemeSchema.safeParse(openId).success).toBe(true)\n expect(securitySchemeSchema.safeParse(oauth2).success).toBe(true)\n })\n })\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,QAAQ,UAAU;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,oBAAoB,MAAM;AACjC,WAAS,kBAAkB,MAAM;AAC/B,OAAG,0CAA0C,MAAM;AACjD,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,KAAK;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAEA,YAAM,SAAS,qBAAqB,UAAU,MAAM;AACpD,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,+BAA+B,MAAM;AACtC,YAAM,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAEA,YAAM,SAAS,qBAAqB,MAAM,aAAa;AACvD,aAAO,MAAM,EAAE,QAAQ;AAAA,QACrB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAC5B,OAAG,6CAA6C,MAAM;AACpD,YAAM,YAAY;AAAA,QAChB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAEA,YAAM,SAAS,mBAAmB,UAAU,SAAS;AACrD,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,8CAA8C,MAAM;AACrD,YAAM,aAAa;AAAA,QACjB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,aAAa;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAEA,YAAM,SAAS,mBAAmB,UAAU,UAAU;AACtD,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,+BAA+B,MAAM;AACtC,YAAM,cAAc;AAAA,QAClB,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAEA,YAAM,SAAS,mBAAmB,MAAM,WAAW;AACnD,aAAO,MAAM,EAAE,QAAQ;AAAA,QACrB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAED,OAAG,uCAAuC,MAAM;AAC9C,YAAM,cAAc;AAAA,QAClB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,MACP;AAEA,YAAM,SAAS,mBAAmB,UAAU,WAAW;AACvD,aAAO,OAAO,OAAO,EAAE,KAAK,KAAK;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,WAAS,yBAAyB,MAAM;AACtC,OAAG,yCAAyC,MAAM;AAChD,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,KAAK;AAAA,QACL,SAAS;AAAA,MACX;AAEA,YAAM,SAAS,qBAAqB,UAAU,MAAM;AACpD,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,+BAA+B,MAAM;AACtC,YAAM,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAEA,YAAM,SAAS,qBAAqB,MAAM,aAAa;AACvD,aAAO,MAAM,EAAE,QAAQ;AAAA,QACrB,MAAM;AAAA,QACN,KAAK;AAAA,QACL,kBAAkB;AAAA,QAClB,SAAS;AAAA,MACX,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAED,WAAS,iBAAiB,MAAM;AAC9B,OAAG,uDAAuD,MAAM;AAC9D,YAAM,iBAAiB;AAAA,QACrB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,YACR,MAAM;AAAA,YACN,kBAAkB;AAAA,YAClB,QAAQ;AAAA,cACN,YAAY;AAAA,cACZ,aAAa;AAAA,YACf;AAAA,YACA,gBAAgB,CAAC,UAAU;AAAA,YAC3B,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,oBAAoB,UAAU,cAAc;AAC3D,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,sDAAsD,MAAM;AAC7D,YAAM,iBAAiB;AAAA,QACrB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,YACR,MAAM;AAAA,YACN,kBAAkB;AAAA,YAClB,QAAQ;AAAA,YACR,gBAAgB,CAAC,UAAU;AAAA,YAC3B,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,oBAAoB,UAAU,cAAc;AAC3D,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,iEAAiE,MAAM;AACxE,YAAM,iBAAiB;AAAA,QACrB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,UACL,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,kBAAkB;AAAA,YAClB,UAAU;AAAA,YACV,aAAa;AAAA,YACb,QAAQ;AAAA,cACN,YAAY;AAAA,cACZ,aAAa;AAAA,YACf;AAAA,YACA,cAAc;AAAA,YACd,OAAO;AAAA,YACP,2BAA2B;AAAA,cACzB,QAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,oBAAoB,UAAU,cAAc;AAC3D,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,iEAAiE,MAAM;AACxE,YAAM,oBAAoB;AAAA,QACxB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,UACL,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,UAAU;AAAA,YACV,QAAQ,CAAC;AAAA,YACT,cAAc;AAAA,YACd,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,oBAAoB,UAAU,iBAAiB;AAC9D,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,uDAAuD,MAAM;AAC9D,YAAM,iBAAiB;AAAA,QACrB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,KAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,YACR,MAAM;AAAA,YACN,UAAU;AAAA,YACV,QAAQ,CAAC;AAAA,YACT,UAAU;AAAA,YACV,UAAU;AAAA,YACV,cAAc;AAAA,YACd,OAAO;AAAA,YACP,2BAA2B;AAAA,cACzB,QAAQ;AAAA,cACR,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,oBAAoB,UAAU,cAAc;AAC3D,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,+BAA+B,MAAM;AACtC,YAAM,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAEA,YAAM,SAAS,oBAAoB,MAAM,aAAa;AACtD,aAAO,OAAO,MAAM,QAAQ,EAAE,YAAY;AAC1C,aAAO,OAAO,MAAM,UAAU,gBAAgB,EAAE,KAAK,uBAAuB;AAC5E,aAAO,OAAO,MAAM,UAAU,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChD,aAAO,OAAO,MAAM,UAAU,cAAc,EAAE,QAAQ,CAAC,CAAC;AACxD,aAAO,OAAO,MAAM,UAAU,KAAK,EAAE,KAAK,EAAE;AAC5C,aAAO,OAAO,OAAO,EAAE,KAAK,EAAE;AAAA,IAChC,CAAC;AAED,OAAG,gCAAgC,MAAM;AACvC,aAAO,WAAW,EAAE,UAAU,SAAS;AACvC,aAAO,WAAW,EAAE,UAAU,OAAO;AACrC,aAAO,WAAW,EAAE,UAAU,IAAI;AAAA,IACpC,CAAC;AAED,OAAG,iCAAiC,MAAM;AACxC,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN,KAAK;AAAA,QACL,oBAAoB,CAAC,YAAY,WAAW;AAAA,MAC9C;AAEA,YAAM,SAAS,qBAAqB,MAAM,MAAM;AAChD,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AACA,aAAO,OAAO,kBAAkB,CAAC,EAAE,QAAQ,CAAC,YAAY,WAAW,CAAC;AACpE,aAAO,OAAO,MAAM,UAAU,cAAc,EAAE,QAAQ,CAAC,YAAY,WAAW,CAAC;AAAA,IACjF,CAAC;AAAA,EACH,CAAC;AAED,WAAS,+BAA+B,MAAM;AAC5C,OAAG,gDAAgD,MAAM;AACvD,YAAM,sBAAsB;AAAA,QAC1B,WAAW,CAAC;AAAA,QACZ,UAAU,CAAC,YAAY,WAAW;AAAA,MACpC;AAEA,YAAM,SAAS,6BAA6B,UAAU,mBAAmB;AACzE,aAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IAClC,CAAC;AAED,OAAG,gDAAgD,MAAM;AACvD,YAAM,sBAAsB;AAAA,QAC1B,WAAW;AAAA,MACb;AAEA,YAAM,SAAS,6BAA6B,MAAM,mBAAmB;AACrE,aAAO,MAAM,EAAE,QAAQ;AAAA,QACrB,WAAW,CAAC;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAED,WAAS,4BAA4B,MAAM;AACzC,OAAG,6CAA6C,MAAM;AACpD,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAEA,YAAM,OAAO;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAEA,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN,kBAAkB;AAAA,QAClB,KAAK;AAAA,MACP;AAEA,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,YACR,MAAM;AAAA,YACN,kBAAkB;AAAA,YAClB,QAAQ,CAAC;AAAA,YACT,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,aAAO,qBAAqB,UAAU,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI;AAChE,aAAO,qBAAqB,UAAU,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI;AAC9D,aAAO,qBAAqB,UAAU,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI;AAChE,aAAO,qBAAqB,UAAU,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI;AAAA,IAClE,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { nanoidSchema } from "./nanoid.js";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
describe("nanoidSchema", () => {
|
|
5
|
-
it("should generate a string with minimum length of 7 characters when no value is provided", () => {
|
|
6
|
-
const result = nanoidSchema.parse(void 0);
|
|
7
|
-
expect(typeof result).toBe("string");
|
|
8
|
-
expect(result.length).toBeGreaterThanOrEqual(7);
|
|
9
|
-
});
|
|
10
|
-
it("should accept valid strings with length >= 7", () => {
|
|
11
|
-
const validString = "1234567";
|
|
12
|
-
const result = nanoidSchema.parse(validString);
|
|
13
|
-
expect(result).toBe(validString);
|
|
14
|
-
});
|
|
15
|
-
it("should reject strings shorter than 7 characters", () => {
|
|
16
|
-
const invalidString = "123456";
|
|
17
|
-
expect(() => nanoidSchema.parse(invalidString)).toThrow(z.ZodError);
|
|
18
|
-
});
|
|
19
|
-
it("should generate different IDs for multiple calls", () => {
|
|
20
|
-
const id1 = nanoidSchema.parse(void 0);
|
|
21
|
-
const id2 = nanoidSchema.parse(void 0);
|
|
22
|
-
expect(id1).not.toBe(id2);
|
|
23
|
-
});
|
|
24
|
-
it("should properly type the generated ID as Nanoid", () => {
|
|
25
|
-
const id = nanoidSchema.parse(void 0);
|
|
26
|
-
expect(typeof id).toBe("string");
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
//# sourceMappingURL=nanoid.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/nanoid.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { describe, it, expect } from 'vitest'\nimport { nanoidSchema, type Nanoid } from './nanoid'\nimport { z } from 'zod'\n\ndescribe('nanoidSchema', () => {\n it('should generate a string with minimum length of 7 characters when no value is provided', () => {\n const result = nanoidSchema.parse(undefined)\n expect(typeof result).toBe('string')\n expect(result.length).toBeGreaterThanOrEqual(7)\n })\n\n it('should accept valid strings with length >= 7', () => {\n const validString = '1234567'\n const result = nanoidSchema.parse(validString)\n expect(result).toBe(validString)\n })\n\n it('should reject strings shorter than 7 characters', () => {\n const invalidString = '123456'\n expect(() => nanoidSchema.parse(invalidString)).toThrow(z.ZodError)\n })\n\n it('should generate different IDs for multiple calls', () => {\n const id1 = nanoidSchema.parse(undefined)\n const id2 = nanoidSchema.parse(undefined)\n expect(id1).not.toBe(id2)\n })\n\n it('should properly type the generated ID as Nanoid', () => {\n const id: Nanoid = nanoidSchema.parse(undefined)\n expect(typeof id).toBe('string')\n })\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,IAAI,cAAc;AACrC,SAAS,oBAAiC;AAC1C,SAAS,SAAS;AAElB,SAAS,gBAAgB,MAAM;AAC7B,KAAG,0FAA0F,MAAM;AACjG,UAAM,SAAS,aAAa,MAAM,MAAS;AAC3C,WAAO,OAAO,MAAM,EAAE,KAAK,QAAQ;AACnC,WAAO,OAAO,MAAM,EAAE,uBAAuB,CAAC;AAAA,EAChD,CAAC;AAED,KAAG,gDAAgD,MAAM;AACvD,UAAM,cAAc;AACpB,UAAM,SAAS,aAAa,MAAM,WAAW;AAC7C,WAAO,MAAM,EAAE,KAAK,WAAW;AAAA,EACjC,CAAC;AAED,KAAG,mDAAmD,MAAM;AAC1D,UAAM,gBAAgB;AACtB,WAAO,MAAM,aAAa,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ;AAAA,EACpE,CAAC;AAED,KAAG,oDAAoD,MAAM;AAC3D,UAAM,MAAM,aAAa,MAAM,MAAS;AACxC,UAAM,MAAM,aAAa,MAAM,MAAS;AACxC,WAAO,GAAG,EAAE,IAAI,KAAK,GAAG;AAAA,EAC1B,CAAC;AAED,KAAG,mDAAmD,MAAM;AAC1D,UAAM,KAAa,aAAa,MAAM,MAAS;AAC/C,WAAO,OAAO,EAAE,EAAE,KAAK,QAAQ;AAAA,EACjC,CAAC;AACH,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|