@kubb/plugin-oas 2.26.3 → 2.26.5
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/dist/{OperationGenerator-BV6QRtkW.d.cts → OperationGenerator-8tADySO6.d.cts} +1 -1
- package/dist/{OperationGenerator-DO5tNGuT.d.ts → OperationGenerator-DvyNt6Xi.d.ts} +1 -1
- package/dist/{Schema-CkGDfE-r.d.ts → Schema-BCe0nBHJ.d.ts} +1 -1
- package/dist/{Schema-CxKiczSe.d.cts → Schema-tJWinW5z.d.cts} +1 -1
- package/dist/{SchemaMapper-BLcXlDBz.d.cts → SchemaMapper-CAEI86qj.d.cts} +4 -4
- package/dist/{SchemaMapper-BLcXlDBz.d.ts → SchemaMapper-CAEI86qj.d.ts} +4 -4
- package/dist/{chunk-P42X362U.cjs → chunk-2BGY3BRC.cjs} +3 -3
- package/dist/{chunk-P42X362U.cjs.map → chunk-2BGY3BRC.cjs.map} +1 -1
- package/dist/{chunk-UB552H4J.js → chunk-2YX4XBMY.js} +3 -3
- package/dist/{chunk-UB552H4J.js.map → chunk-2YX4XBMY.js.map} +1 -1
- package/dist/{chunk-Y4V7HHX7.js → chunk-B3QCCJ62.js} +9 -9
- package/dist/chunk-B3QCCJ62.js.map +1 -0
- package/dist/{chunk-QLJIL3U5.cjs → chunk-HUFRXC4N.cjs} +9 -9
- package/dist/chunk-HUFRXC4N.cjs.map +1 -0
- package/dist/{chunk-LZQCNTEQ.js → chunk-NLKNZBXU.js} +30 -2
- package/dist/chunk-NLKNZBXU.js.map +1 -0
- package/dist/{chunk-MCFS76QE.cjs → chunk-OV72HOID.cjs} +23 -23
- package/dist/{chunk-MCFS76QE.cjs.map → chunk-OV72HOID.cjs.map} +1 -1
- package/dist/{chunk-7667TDWD.js → chunk-U3JET6VT.js} +3 -3
- package/dist/{chunk-YQ6GIIKL.cjs → chunk-WF523MBA.cjs} +49 -21
- package/dist/chunk-WF523MBA.cjs.map +1 -0
- package/dist/components.cjs +5 -5
- package/dist/components.d.cts +4 -5
- package/dist/components.d.ts +4 -5
- package/dist/components.js +3 -3
- package/dist/hooks.cjs +13 -13
- package/dist/hooks.d.cts +3 -4
- package/dist/hooks.d.ts +3 -4
- package/dist/hooks.js +3 -3
- package/dist/index.cjs +25 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -6
- package/dist/index.d.ts +5 -6
- package/dist/index.js +11 -23
- package/dist/index.js.map +1 -1
- package/dist/{types-Db0qp8u-.d.cts → types-RVAPVtNi.d.cts} +1 -4
- package/dist/{types-Db0qp8u-.d.ts → types-RVAPVtNi.d.ts} +1 -4
- package/dist/utils.cjs +8 -8
- package/dist/utils.d.cts +3 -4
- package/dist/utils.d.ts +3 -4
- package/dist/utils.js +3 -3
- package/package.json +13 -13
- package/src/SchemaGenerator.ts +29 -0
- package/src/SchemaMapper.ts +4 -4
- package/src/plugin.ts +7 -20
- package/src/types.ts +1 -4
- package/src/utils/parseFromConfig.ts +7 -7
- package/dist/chunk-LZQCNTEQ.js.map +0 -1
- package/dist/chunk-QLJIL3U5.cjs.map +0 -1
- package/dist/chunk-Y4V7HHX7.js.map +0 -1
- package/dist/chunk-YQ6GIIKL.cjs.map +0 -1
- /package/dist/{chunk-7667TDWD.js.map → chunk-U3JET6VT.js.map} +0 -0
package/dist/utils.d.cts
CHANGED
|
@@ -4,9 +4,8 @@ import { Logger } from '@kubb/core/logger';
|
|
|
4
4
|
import * as KubbFile from '@kubb/fs/types';
|
|
5
5
|
import { FunctionParamsAST } from '@kubb/core/utils';
|
|
6
6
|
import { Params } from '@kubb/react';
|
|
7
|
-
import { a as OperationSchema, R as Refs } from './types-
|
|
8
|
-
export { G as GetSchemasProps, h as getSchemas } from './types-
|
|
9
|
-
import { FormatOptions } from '@kubb/oas/parser';
|
|
7
|
+
import { a as OperationSchema, R as Refs } from './types-RVAPVtNi.cjs';
|
|
8
|
+
export { G as GetSchemasProps, h as getSchemas } from './types-RVAPVtNi.cjs';
|
|
10
9
|
|
|
11
10
|
declare function getComments(operation: Operation): string[];
|
|
12
11
|
|
|
@@ -76,6 +75,6 @@ type Generated = {
|
|
|
76
75
|
};
|
|
77
76
|
declare function refsSorter<T extends Generated>(a: T, b: T): number;
|
|
78
77
|
|
|
79
|
-
declare function parseFromConfig(config: Config,
|
|
78
|
+
declare function parseFromConfig(config: Config, oasClass?: typeof Oas): Promise<Oas>;
|
|
80
79
|
|
|
81
80
|
export { getASTParams, getComments, getGroupedByTagFiles, getPathParams, getSchemaFactory, parseFromConfig, refsSorter };
|
package/dist/utils.d.ts
CHANGED
|
@@ -4,9 +4,8 @@ import { Logger } from '@kubb/core/logger';
|
|
|
4
4
|
import * as KubbFile from '@kubb/fs/types';
|
|
5
5
|
import { FunctionParamsAST } from '@kubb/core/utils';
|
|
6
6
|
import { Params } from '@kubb/react';
|
|
7
|
-
import { a as OperationSchema, R as Refs } from './types-
|
|
8
|
-
export { G as GetSchemasProps, h as getSchemas } from './types-
|
|
9
|
-
import { FormatOptions } from '@kubb/oas/parser';
|
|
7
|
+
import { a as OperationSchema, R as Refs } from './types-RVAPVtNi.js';
|
|
8
|
+
export { G as GetSchemasProps, h as getSchemas } from './types-RVAPVtNi.js';
|
|
10
9
|
|
|
11
10
|
declare function getComments(operation: Operation): string[];
|
|
12
11
|
|
|
@@ -76,6 +75,6 @@ type Generated = {
|
|
|
76
75
|
};
|
|
77
76
|
declare function refsSorter<T extends Generated>(a: T, b: T): number;
|
|
78
77
|
|
|
79
|
-
declare function parseFromConfig(config: Config,
|
|
78
|
+
declare function parseFromConfig(config: Config, oasClass?: typeof Oas): Promise<Oas>;
|
|
80
79
|
|
|
81
80
|
export { getASTParams, getComments, getGroupedByTagFiles, getPathParams, getSchemaFactory, parseFromConfig, refsSorter };
|
package/dist/utils.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseFromConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-B3QCCJ62.js";
|
|
4
4
|
import {
|
|
5
5
|
getSchemaFactory,
|
|
6
6
|
getSchemas,
|
|
7
7
|
init_esm_shims
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2YX4XBMY.js";
|
|
9
9
|
|
|
10
10
|
// src/utils/index.ts
|
|
11
11
|
init_esm_shims();
|
|
@@ -25,7 +25,7 @@ function getComments(operation) {
|
|
|
25
25
|
|
|
26
26
|
// src/utils/getGroupedByTagFiles.ts
|
|
27
27
|
init_esm_shims();
|
|
28
|
-
import { resolve } from "path";
|
|
28
|
+
import { resolve } from "node:path";
|
|
29
29
|
import { FileManager } from "@kubb/core";
|
|
30
30
|
import transformers2 from "@kubb/core/transformers";
|
|
31
31
|
import { renderTemplate } from "@kubb/core/utils";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/plugin-oas",
|
|
3
|
-
"version": "2.26.
|
|
3
|
+
"version": "2.26.5",
|
|
4
4
|
"description": "Generator swagger",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -67,24 +67,24 @@
|
|
|
67
67
|
],
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"@stoplight/yaml": "^4.3.0",
|
|
70
|
-
"remeda": "^2.
|
|
71
|
-
"@kubb/core": "2.26.
|
|
72
|
-
"@kubb/fs": "2.26.
|
|
73
|
-
"@kubb/oas": "2.26.
|
|
74
|
-
"@kubb/react": "2.26.
|
|
70
|
+
"remeda": "^2.14.0",
|
|
71
|
+
"@kubb/core": "2.26.5",
|
|
72
|
+
"@kubb/fs": "2.26.5",
|
|
73
|
+
"@kubb/oas": "2.26.5",
|
|
74
|
+
"@kubb/react": "2.26.5"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@types/react": "^18.3.
|
|
77
|
+
"@types/react": "^18.3.8",
|
|
78
78
|
"@types/react-dom": "^18.3.0",
|
|
79
79
|
"react": "^18.3.1",
|
|
80
|
-
"tsup": "^8.
|
|
81
|
-
"typescript": "^5.
|
|
82
|
-
"@kubb/config-biome": "2.26.
|
|
83
|
-
"@kubb/config-ts": "2.26.
|
|
84
|
-
"@kubb/config-tsup": "2.26.
|
|
80
|
+
"tsup": "^8.3.0",
|
|
81
|
+
"typescript": "^5.6.2",
|
|
82
|
+
"@kubb/config-biome": "2.26.5",
|
|
83
|
+
"@kubb/config-ts": "2.26.5",
|
|
84
|
+
"@kubb/config-tsup": "2.26.5"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"@kubb/react": "2.26.
|
|
87
|
+
"@kubb/react": "2.26.5"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
90
|
"node": ">=18"
|
package/src/SchemaGenerator.ts
CHANGED
|
@@ -617,6 +617,35 @@ export abstract class SchemaGenerator<
|
|
|
617
617
|
]
|
|
618
618
|
}
|
|
619
619
|
|
|
620
|
+
if (schema.type === 'boolean') {
|
|
621
|
+
// we cannot use z.enum when enum type is boolean
|
|
622
|
+
const enumNames = extensionEnums[0]?.find((item) => isKeyword(item, schemaKeywords.enum)) as unknown as SchemaKeywordMapper['enum']
|
|
623
|
+
return [
|
|
624
|
+
{
|
|
625
|
+
keyword: schemaKeywords.enum,
|
|
626
|
+
args: {
|
|
627
|
+
name: enumName,
|
|
628
|
+
typeName,
|
|
629
|
+
asConst: true,
|
|
630
|
+
items: enumNames?.args?.items
|
|
631
|
+
? [...new Set(enumNames.args.items)].map(({ name, value }) => ({
|
|
632
|
+
name,
|
|
633
|
+
value,
|
|
634
|
+
format: 'boolean',
|
|
635
|
+
}))
|
|
636
|
+
: [...new Set(filteredValues)].map((value: string) => {
|
|
637
|
+
return {
|
|
638
|
+
name: value,
|
|
639
|
+
value,
|
|
640
|
+
format: 'boolean',
|
|
641
|
+
}
|
|
642
|
+
}),
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
...baseItems.filter((item) => item.keyword !== schemaKeywords.matches),
|
|
646
|
+
]
|
|
647
|
+
}
|
|
648
|
+
|
|
620
649
|
if (extensionEnums.length > 0 && extensionEnums[0]) {
|
|
621
650
|
return extensionEnums[0]
|
|
622
651
|
}
|
package/src/SchemaMapper.ts
CHANGED
|
@@ -34,8 +34,8 @@ export type SchemaKeywordMapper = {
|
|
|
34
34
|
asConst: boolean
|
|
35
35
|
items: Array<{
|
|
36
36
|
name: string | number
|
|
37
|
-
format: 'string' | 'number'
|
|
38
|
-
value?: string | number
|
|
37
|
+
format: 'string' | 'number' | 'boolean'
|
|
38
|
+
value?: string | number | boolean
|
|
39
39
|
}>
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -44,8 +44,8 @@ export type SchemaKeywordMapper = {
|
|
|
44
44
|
keyword: 'const'
|
|
45
45
|
args: {
|
|
46
46
|
name: string | number
|
|
47
|
-
format: 'string' | 'number'
|
|
48
|
-
value?: string | number
|
|
47
|
+
format: 'string' | 'number' | 'boolean'
|
|
48
|
+
value?: string | number | boolean
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
union: { keyword: 'union'; args: Schema[] }
|
package/src/plugin.ts
CHANGED
|
@@ -8,27 +8,18 @@ import { getSchemas } from './utils/getSchemas.ts'
|
|
|
8
8
|
import type { Config } from '@kubb/core'
|
|
9
9
|
import type { Logger } from '@kubb/core/logger'
|
|
10
10
|
import type { Oas, OasTypes } from '@kubb/oas'
|
|
11
|
-
import type { FormatOptions } from '@kubb/oas/parser'
|
|
12
11
|
import type { PluginOas } from './types.ts'
|
|
13
12
|
import { parseFromConfig } from './utils/parseFromConfig.ts'
|
|
14
13
|
|
|
15
14
|
export const pluginOasName = 'plugin-oas' satisfies PluginOas['name']
|
|
16
15
|
|
|
17
16
|
export const pluginOas = createPlugin<PluginOas>((options) => {
|
|
18
|
-
const {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
experimentalSort: sort,
|
|
22
|
-
validate = true,
|
|
23
|
-
serverIndex = 0,
|
|
24
|
-
contentType,
|
|
25
|
-
oasClass,
|
|
26
|
-
} = options
|
|
27
|
-
|
|
28
|
-
const getOas = async ({ config, logger, formatOptions }: { config: Config; logger: Logger; formatOptions?: FormatOptions }): Promise<Oas> => {
|
|
17
|
+
const { output = { path: 'schemas', export: false }, validate = true, serverIndex = 0, contentType, oasClass } = options
|
|
18
|
+
|
|
19
|
+
const getOas = async ({ config, logger }: { config: Config; logger: Logger }): Promise<Oas> => {
|
|
29
20
|
try {
|
|
30
21
|
// needs to be in a different variable or the catch here will not work(return of a promise instead)
|
|
31
|
-
const oas = await parseFromConfig(config,
|
|
22
|
+
const oas = await parseFromConfig(config, oasClass)
|
|
32
23
|
|
|
33
24
|
if (validate) {
|
|
34
25
|
await oas.valdiate()
|
|
@@ -39,7 +30,7 @@ export const pluginOas = createPlugin<PluginOas>((options) => {
|
|
|
39
30
|
const error = e as Error
|
|
40
31
|
|
|
41
32
|
logger.emit('warning', error?.message)
|
|
42
|
-
return parseFromConfig(config,
|
|
33
|
+
return parseFromConfig(config, oasClass)
|
|
43
34
|
}
|
|
44
35
|
}
|
|
45
36
|
|
|
@@ -51,8 +42,8 @@ export const pluginOas = createPlugin<PluginOas>((options) => {
|
|
|
51
42
|
const { config, logger } = this
|
|
52
43
|
|
|
53
44
|
return {
|
|
54
|
-
getOas(
|
|
55
|
-
return getOas({ config, logger
|
|
45
|
+
getOas() {
|
|
46
|
+
return getOas({ config, logger })
|
|
56
47
|
},
|
|
57
48
|
async getSchemas({ includes } = {}) {
|
|
58
49
|
const oas = await this.getOas()
|
|
@@ -93,10 +84,6 @@ export const pluginOas = createPlugin<PluginOas>((options) => {
|
|
|
93
84
|
const oas = await getOas({
|
|
94
85
|
config: this.config,
|
|
95
86
|
logger: this.logger,
|
|
96
|
-
formatOptions: {
|
|
97
|
-
filterSet: filter,
|
|
98
|
-
sortSet: sort,
|
|
99
|
-
},
|
|
100
87
|
})
|
|
101
88
|
await oas.dereference()
|
|
102
89
|
const schemas = getSchemas({ oas, contentType })
|
package/src/types.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { PluginFactoryOptions, ResolveNameParams } from '@kubb/core'
|
|
|
3
3
|
import type * as KubbFile from '@kubb/fs/types'
|
|
4
4
|
|
|
5
5
|
import type { HttpMethod, Oas, Operation, SchemaObject, contentType } from '@kubb/oas'
|
|
6
|
-
import type { FormatOptions } from '@kubb/oas/parser'
|
|
7
6
|
import type { GetSchemasProps } from './utils/getSchemas.ts'
|
|
8
7
|
|
|
9
8
|
export type ResolvePathOptions = {
|
|
@@ -13,7 +12,7 @@ export type ResolvePathOptions = {
|
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
export type API = {
|
|
16
|
-
getOas: (
|
|
15
|
+
getOas: () => Promise<Oas>
|
|
17
16
|
getSchemas: (options?: Pick<GetSchemasProps, 'includes'>) => Promise<Record<string, SchemaObject>>
|
|
18
17
|
getBaseURL: () => Promise<string | undefined>
|
|
19
18
|
contentType?: contentType
|
|
@@ -48,8 +47,6 @@ export type Options = {
|
|
|
48
47
|
* By default, this is set based on the first used contentType..
|
|
49
48
|
*/
|
|
50
49
|
contentType?: contentType
|
|
51
|
-
experimentalFilter?: FormatOptions['filterSet']
|
|
52
|
-
experimentalSort?: FormatOptions['sortSet']
|
|
53
50
|
oasClass?: typeof Oas
|
|
54
51
|
}
|
|
55
52
|
|
|
@@ -2,35 +2,35 @@ import { resolve } from 'node:path'
|
|
|
2
2
|
|
|
3
3
|
import { URLPath } from '@kubb/core/utils'
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { parse } from '@kubb/oas/parser'
|
|
6
6
|
|
|
7
7
|
import type { Config } from '@kubb/core'
|
|
8
8
|
import { Oas, type OasTypes } from '@kubb/oas'
|
|
9
9
|
import yaml from '@stoplight/yaml'
|
|
10
10
|
|
|
11
|
-
export function parseFromConfig(config: Config,
|
|
11
|
+
export function parseFromConfig(config: Config, oasClass: typeof Oas = Oas): Promise<Oas> {
|
|
12
12
|
if ('data' in config.input) {
|
|
13
13
|
if (typeof config.input.data === 'object') {
|
|
14
14
|
const api: OasTypes.OASDocument = JSON.parse(JSON.stringify(config.input.data)) as OasTypes.OASDocument
|
|
15
|
-
return parse(api,
|
|
15
|
+
return parse(api, oasClass)
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
try {
|
|
19
19
|
const api: string = yaml.parse(config.input.data as string) as string
|
|
20
20
|
|
|
21
|
-
return parse(api,
|
|
21
|
+
return parse(api, oasClass)
|
|
22
22
|
} catch (e) {
|
|
23
23
|
/* empty */
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const api: OasTypes.OASDocument = JSON.parse(JSON.stringify(config.input.data)) as OasTypes.OASDocument
|
|
27
27
|
|
|
28
|
-
return parse(api,
|
|
28
|
+
return parse(api, oasClass)
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
if (new URLPath(config.input.path).isURL) {
|
|
32
|
-
return parse(config.input.path,
|
|
32
|
+
return parse(config.input.path, oasClass)
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
return parse(resolve(config.root, config.input.path),
|
|
35
|
+
return parse(resolve(config.root, config.input.path), oasClass)
|
|
36
36
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"sourcesContent":["import type * as KubbFile from '@kubb/fs/types'\n\nexport type SchemaKeywordMapper = {\n object: {\n keyword: 'object'\n args: {\n properties: { [x: string]: Schema[] }\n additionalProperties: Schema[]\n strict?: boolean\n }\n }\n strict: { keyword: 'strict' }\n url: { keyword: 'url' }\n readOnly: { keyword: 'readOnly' }\n uuid: { keyword: 'uuid' }\n email: { keyword: 'email' }\n firstName: { keyword: 'firstName' }\n lastName: { keyword: 'lastName' }\n phone: { keyword: 'phone' }\n password: { keyword: 'password' }\n date: { keyword: 'date'; args: { type?: 'date' | 'string' } }\n time: { keyword: 'time'; args: { type?: 'date' | 'string' } }\n datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }\n tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number } }\n array: {\n keyword: 'array'\n args: { items: Schema[]; min?: number; max?: number }\n }\n enum: {\n keyword: 'enum'\n args: {\n name: string\n typeName: string\n asConst: boolean\n items: Array<{\n name: string | number\n format: 'string' | 'number'\n value?: string | number\n }>\n }\n }\n and: { keyword: 'and'; args: Schema[] }\n const: {\n keyword: 'const'\n args: {\n name: string | number\n format: 'string' | 'number'\n value?: string | number\n }\n }\n union: { keyword: 'union'; args: Schema[] }\n ref: {\n keyword: 'ref'\n args: { name: string; path: KubbFile.OptionalPath }\n }\n matches: { keyword: 'matches'; args?: string }\n boolean: { keyword: 'boolean' }\n default: { keyword: 'default'; args: string | number | boolean }\n string: { keyword: 'string' }\n integer: { keyword: 'integer' }\n number: { keyword: 'number' }\n max: { keyword: 'max'; args: number }\n min: { keyword: 'min'; args: number }\n describe: { keyword: 'describe'; args: string }\n example: { keyword: 'example'; args: string }\n deprecated: { keyword: 'deprecated' }\n optional: { keyword: 'optional' }\n undefined: { keyword: 'undefined' }\n nullish: { keyword: 'nullish' }\n nullable: { keyword: 'nullable' }\n null: { keyword: 'null' }\n any: { keyword: 'any' }\n unknown: { keyword: 'unknown' }\n blob: { keyword: 'blob' }\n schema: { keyword: 'schema'; args: { type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'; format?: string } }\n name: { keyword: 'name'; args: string }\n catchall: { keyword: 'catchall' }\n}\n\nexport const schemaKeywords = {\n any: 'any',\n strict: 'strict',\n unknown: 'unknown',\n number: 'number',\n integer: 'integer',\n string: 'string',\n boolean: 'boolean',\n undefined: 'undefined',\n nullable: 'nullable',\n null: 'null',\n nullish: 'nullish',\n array: 'array',\n tuple: 'tuple',\n enum: 'enum',\n union: 'union',\n datetime: 'datetime',\n date: 'date',\n email: 'email',\n uuid: 'uuid',\n url: 'url',\n /* intersection */\n default: 'default',\n const: 'const',\n and: 'and',\n describe: 'describe',\n min: 'min',\n max: 'max',\n optional: 'optional',\n readOnly: 'readOnly',\n\n // custom ones\n object: 'object',\n ref: 'ref',\n matches: 'matches',\n firstName: 'firstName',\n lastName: 'lastName',\n password: 'password',\n phone: 'phone',\n blob: 'blob',\n deprecated: 'deprecated',\n example: 'example',\n schema: 'schema',\n catchall: 'catchall',\n time: 'time',\n name: 'name',\n} satisfies {\n [K in keyof SchemaKeywordMapper]: SchemaKeywordMapper[K]['keyword']\n}\n\nexport type SchemaKeyword = keyof SchemaKeywordMapper\n\nexport type SchemaMapper<T = string | null | undefined> = {\n [K in keyof SchemaKeywordMapper]: (() => T | undefined) | undefined\n}\n\nexport type SchemaKeywordBase<T> = {\n keyword: SchemaKeyword\n args: T\n}\n\nexport type Schema = { keyword: string } | SchemaKeywordMapper[keyof SchemaKeywordMapper]\n\nexport function isKeyword<T extends Schema, K extends keyof SchemaKeywordMapper>(meta: T, keyword: K): meta is Extract<T, SchemaKeywordMapper[K]> {\n return meta.keyword === keyword\n}\n","import { type FileMetaBase, Generator } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\n\nimport { isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\n\nimport type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { Oas, OpenAPIV3, SchemaObject, contentType } from '@kubb/oas'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport type { OperationSchema, Override, Refs } from './types.ts'\n\nexport type GetSchemaGeneratorOptions<T extends SchemaGenerator<any, any, any>> = T extends SchemaGenerator<infer Options, any, any> ? Options : never\n\nexport type SchemaMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>\n\ntype Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {\n oas: Oas\n pluginManager: PluginManager\n /**\n * Current plugin\n */\n plugin: Plugin<TPluginOptions>\n mode: KubbFile.Mode\n include?: Array<'schemas' | 'responses' | 'requestBodies'>\n override: Array<Override<TOptions>> | undefined\n contentType?: contentType\n output?: string\n}\n\nexport type SchemaGeneratorOptions = {\n dateType: false | 'string' | 'stringOffset' | 'stringLocal' | 'date'\n unknownType: 'any' | 'unknown'\n enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n enumSuffix?: string\n usedEnumNames?: Record<string, number>\n mapper?: Record<string, string>\n typed?: boolean\n transformers: {\n /**\n * Customize the names based on the type that is provided by the plugin.\n */\n name?: (name: ResolveNameParams['name'], type?: ResolveNameParams['type']) => string\n /**\n * Receive schema and name(propertName) and return FakerMeta array\n * TODO TODO add docs\n * @beta\n */\n schema?: (schemaProps: SchemaProps, defaultSchemas: Schema[]) => Schema[] | undefined\n }\n}\n\nexport type SchemaGeneratorBuildOptions = Omit<OperationSchema, 'name' | 'schema'>\n\ntype SchemaProps = {\n schema?: SchemaObject\n name?: string\n parentName?: string\n}\n\nexport abstract class SchemaGenerator<\n TOptions extends SchemaGeneratorOptions = SchemaGeneratorOptions,\n TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n TFileMeta extends FileMetaBase = FileMetaBase,\n> extends Generator<TOptions, Context<TOptions, TPluginOptions>> {\n // Collect the types of all referenced schemas, so we can export them later\n refs: Refs = {}\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n parse(props: SchemaProps): Schema[] {\n const options = this.#getOptions(props)\n\n const defaultSchemas = this.#parseSchemaObject(props)\n const schemas = options.transformers?.schema?.(props, defaultSchemas) || defaultSchemas || []\n\n return uniqueWith(schemas, isDeepEqual)\n }\n\n deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T][] {\n return SchemaGenerator.deepSearch<T>(tree, keyword)\n }\n\n find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n return SchemaGenerator.find<T>(tree, keyword)\n }\n\n static deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T][] {\n const foundItems: SchemaKeywordMapper[T][] = []\n\n tree?.forEach((schema) => {\n if (schema.keyword === keyword) {\n foundItems.push(schema as SchemaKeywordMapper[T])\n }\n\n if (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>(entrySchema, keyword))\n })\n\n Object.values(subItem.args?.additionalProperties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n })\n\n return foundItems\n }\n\n static findInObject<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = undefined\n\n tree?.forEach((schema) => {\n if (!foundItem && schema.keyword === keyword) {\n foundItem = schema as SchemaKeywordMapper[T]\n }\n\n if (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(subItem.args?.additionalProperties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = undefined\n\n tree?.forEach((schema) => {\n if (!foundItem && schema.keyword === keyword) {\n foundItem = schema as SchemaKeywordMapper[T]\n }\n\n if (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n #getUsedEnumNames(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n return options.usedEnumNames || {}\n }\n\n #getOptions({ name }: SchemaProps): Partial<TOptions> {\n const { override = [] } = this.context\n\n return {\n ...this.options,\n ...(override.find(({ pattern, type }) => {\n if (name && type === 'schemaName') {\n return !!name.match(pattern)\n }\n\n return false\n })?.options || {}),\n }\n }\n\n #getUnknownReturn(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n if (options.unknownType === 'any') {\n return schemaKeywords.any\n }\n\n return schemaKeywords.unknown\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #parseProperties({ schema, name }: SchemaProps): Schema[] {\n const properties = schema?.properties || {}\n const additionalProperties = schema?.additionalProperties\n const required = schema?.required\n\n const propertiesSchemas = Object.keys(properties)\n .map((propertyName) => {\n const validationFunctions: Schema[] = []\n const propertySchema = properties[propertyName] as SchemaObject\n\n const isRequired = Array.isArray(required) ? required?.includes(propertyName) : !!required\n const nullable = propertySchema.nullable ?? propertySchema['x-nullable'] ?? false\n\n validationFunctions.push(...this.parse({ schema: propertySchema, name: propertyName, parentName: name }))\n\n validationFunctions.push({\n keyword: schemaKeywords.name,\n args: propertyName,\n })\n\n if (!isRequired && nullable) {\n validationFunctions.push({ keyword: schemaKeywords.nullish })\n } else if (!isRequired) {\n validationFunctions.push({ keyword: schemaKeywords.optional })\n }\n\n return {\n [propertyName]: validationFunctions,\n }\n })\n .reduce((acc, curr) => ({ ...acc, ...curr }), {})\n let additionalPropertiesSchemas: Schema[] = []\n\n if (additionalProperties) {\n additionalPropertiesSchemas =\n additionalProperties === true\n ? [{ keyword: this.#getUnknownReturn({ schema, name }) }]\n : this.parse({ schema: additionalProperties as SchemaObject, parentName: name })\n }\n\n return [\n {\n keyword: schemaKeywords.object,\n args: {\n properties: propertiesSchemas,\n additionalProperties: additionalPropertiesSchemas,\n },\n },\n ]\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(obj: OpenAPIV3.ReferenceObject): Schema[] {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({\n name: originalName,\n pluginKey: this.context.plugin.key,\n type: 'function',\n })\n\n if (ref) {\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref.path },\n },\n ]\n }\n\n const fileName = this.context.pluginManager.resolveName({\n name: originalName,\n pluginKey: this.context.plugin.key,\n type: 'file',\n })\n const file = this.context.pluginManager.getFile({\n name: fileName,\n pluginKey: this.context.plugin.key,\n extName: '.ts',\n })\n\n ref = this.refs[$ref] = {\n propertyName,\n originalName,\n path: file.path,\n }\n\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref?.path },\n },\n ]\n }\n\n #getParsedSchemaObject(schema?: SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #parseSchemaObject({ schema: _schema, name, parentName }: SchemaProps): Schema[] {\n const options = this.#getOptions({ schema: _schema, name })\n const unknownReturn = this.#getUnknownReturn({ schema: _schema, name })\n const { schema, version } = this.#getParsedSchemaObject(_schema)\n if (!schema) {\n return [{ keyword: unknownReturn }]\n }\n\n const baseItems: Schema[] = [\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const nullable = schema.nullable ?? schema['x-nullable'] ?? false\n\n if (schema.default !== undefined && !Array.isArray(schema.default)) {\n if (typeof schema.default === 'string') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: transformers.stringify(schema.default),\n })\n } else if (typeof schema.default === 'boolean') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default ?? false,\n })\n } else {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default,\n })\n }\n }\n\n if (schema.description) {\n baseItems.push({\n keyword: schemaKeywords.describe,\n args: schema.description,\n })\n }\n\n if (schema.pattern) {\n baseItems.unshift({\n keyword: schemaKeywords.matches,\n args: schema.pattern,\n })\n }\n\n if (max !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n\n if (min !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\n\n if (nullable) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n\n if (schema.type && Array.isArray(schema.type)) {\n const [_schema, nullable] = schema.type\n\n if (nullable === 'null') {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n }\n\n if (schema.readOnly) {\n baseItems.push({ keyword: schemaKeywords.readOnly })\n }\n\n if (isReference(schema)) {\n return [\n ...this.#getRefAlias(schema),\n nullable && { keyword: schemaKeywords.nullable },\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ].filter(Boolean)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.oneOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n if (schemaWithoutOneOf.properties) {\n return [...this.parse({ schema: schemaWithoutOneOf, name, parentName }), union, ...baseItems]\n }\n\n return [union, ...baseItems]\n }\n\n if (schema.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.anyOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n })\n .map((item) => {\n if (isKeyword(item, schemaKeywords.object)) {\n return {\n ...item,\n args: {\n ...item.args,\n strict: true,\n },\n }\n }\n return item\n }),\n }\n if (schemaWithoutAnyOf.properties) {\n return [...this.parse({ schema: schemaWithoutAnyOf, name, parentName }), union, ...baseItems]\n }\n\n return [union, ...baseItems]\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n const and: Schema = {\n keyword: schemaKeywords.and,\n args: schema.allOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n\n if (schemaWithoutAllOf.properties) {\n return [\n {\n ...and,\n args: [...(and.args || []), ...this.parse({ schema: schemaWithoutAllOf, name, parentName })],\n },\n ...baseItems,\n ]\n }\n\n return [and, ...baseItems]\n }\n\n if (schema.enum) {\n const enumName = getUniqueName(pascalCase([parentName, name, options.enumSuffix].join(' ')), this.#getUsedEnumNames({ schema, name }))\n const typeName = this.context.pluginManager.resolveName({\n name: enumName,\n pluginKey: this.context.plugin.key,\n type: 'type',\n })\n\n const nullableEnum = schema.enum.includes(null)\n if (nullableEnum) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n const filteredValues = schema.enum.filter((value) => value !== null)\n\n // x-enumNames has priority\n const extensionEnums = ['x-enumNames', 'x-enum-varnames']\n .filter((extensionKey) => extensionKey in schema)\n .map((extensionKey) => {\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name,\n typeName,\n asConst: false,\n items: [...new Set(schema[extensionKey as keyof typeof schema] as string[])].map((name: string | number, index) => ({\n name: transformers.stringify(name),\n value: schema.enum?.[index] as string | number,\n format: isNumber(schema.enum?.[index]) ? 'number' : 'string',\n })),\n },\n },\n ...baseItems.filter(\n (item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches,\n ),\n ]\n })\n\n if (schema.type === 'number' || schema.type === 'integer') {\n // we cannot use z.enum when enum type is number/integer\n const enumNames = extensionEnums[0]?.find((item) => isKeyword(item, schemaKeywords.enum)) as unknown as SchemaKeywordMapper['enum']\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name: enumName,\n typeName,\n asConst: true,\n items: enumNames?.args?.items\n ? [...new Set(enumNames.args.items)].map(({ name, value }) => ({\n name,\n value,\n format: 'number',\n }))\n : [...new Set(filteredValues)].map((value: string) => {\n return {\n name: value,\n value,\n format: 'number',\n }\n }),\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches),\n ]\n }\n\n if (extensionEnums.length > 0 && extensionEnums[0]) {\n return extensionEnums[0]\n }\n\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name: enumName,\n typeName,\n asConst: false,\n items: [...new Set(filteredValues)].map((value: string) => ({\n name: transformers.stringify(value),\n value,\n format: isNumber(value) ? 'number' : 'string',\n })),\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches),\n ]\n }\n\n if ('prefixItems' in schema) {\n const prefixItems = schema.prefixItems as SchemaObject[]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n\n return [\n {\n keyword: schemaKeywords.tuple,\n args: {\n min,\n max,\n items: prefixItems\n .map((item) => {\n return this.parse({ schema: item, name, parentName })[0]\n })\n .filter(Boolean),\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (version === '3.1' && 'const' in schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schema['const'],\n format: typeof schema['const'] === 'number' ? 'number' : 'string',\n value: schema['const'],\n },\n },\n ...baseItems,\n ]\n }\n return [{ keyword: schemaKeywords.null }]\n }\n\n /**\n * > Structural validation alone may be insufficient to allow an application to correctly utilize certain values. The \"format\"\n * > annotation keyword is defined to allow schema authors to convey semantic information for a fixed subset of values which are\n * > accurately described by authoritative resources, be they RFCs or other external specifications.\n *\n * In other words: format is more specific than type alone, hence it should override the type value, if possible.\n *\n * see also https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.7\n */\n if (schema.format) {\n switch (schema.format) {\n case 'binary':\n baseItems.push({ keyword: schemaKeywords.blob })\n return baseItems\n case 'date-time':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n return baseItems\n }\n\n if (options.dateType === 'stringOffset') {\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: true } })\n return baseItems\n }\n\n if (options.dateType === 'stringLocal') {\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { local: true } })\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: false } })\n\n return baseItems\n }\n break\n case 'date':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'string' } })\n\n return baseItems\n }\n break\n case 'time':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'date' } })\n\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'string' } })\n\n return baseItems\n }\n break\n case 'uuid':\n baseItems.unshift({ keyword: schemaKeywords.uuid })\n break\n case 'email':\n case 'idn-email':\n baseItems.unshift({ keyword: schemaKeywords.email })\n break\n case 'uri':\n case 'ipv4':\n case 'ipv6':\n case 'uri-reference':\n case 'hostname':\n case 'idn-hostname':\n baseItems.unshift({ keyword: schemaKeywords.url })\n break\n // case 'duration':\n // case 'json-pointer':\n // case 'relative-json-pointer':\n default:\n // formats not yet implemented: ignore.\n break\n }\n }\n\n // type based logic\n if ('items' in schema || schema.type === ('array' as 'string')) {\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const items = this.parse({ schema: 'items' in schema ? (schema.items as SchemaObject) : [], name, parentName })\n\n return [\n {\n keyword: schemaKeywords.array,\n args: {\n items,\n min,\n max,\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (schema.properties || schema.additionalProperties) {\n return [...this.#parseProperties({ schema, name }), ...baseItems]\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type] = schema.type as Array<OpenAPIV3.NonArraySchemaObjectType>\n\n return [\n ...this.parse({\n schema: {\n ...schema,\n type,\n },\n name,\n parentName,\n }),\n ...baseItems,\n ].filter(Boolean)\n }\n\n if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(schema.type)) {\n this.context.pluginManager.logger.emit('warning', `Schema type '${schema.type}' is not valid for schema ${parentName}.${name}`)\n }\n\n // 'string' | 'number' | 'integer' | 'boolean'\n return [{ keyword: schema.type }, ...baseItems]\n }\n\n return [{ keyword: unknownReturn }]\n }\n\n async build(): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n const schemas = getSchemas({ oas, contentType, includes: include })\n\n const promises = Object.entries(schemas).reduce((acc, [name, schema]) => {\n const options = this.#getOptions({ name })\n const promiseOperation = this.schema.call(this, name, schema, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n return acc\n }, [] as SchemaMethodResult<TFileMeta>[])\n\n const files = await Promise.all(promises)\n\n // using .flat because schemaGenerator[method] can return a array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Schema\n */\n abstract schema(name: string, object: SchemaObject, options: TOptions): SchemaMethodResult<TFileMeta>\n}\n"],"mappings":"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","names":["_schema","nullable","name","min","max"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/kubb/kubb/packages/plugin-oas/dist/chunk-QLJIL3U5.cjs","../src/utils/parseFromConfig.ts"],"names":["api"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,8CAAA,CAAA;AAAA,4BAAwB;AAExB,yCAAwB;AAExB,0CAA0C;AAG1C,gCAAmC;AACnC,mFAAiB;AAEV,SAAS,eAAA,CAAgB,MAAA,EAAgB,QAAA,EAAyB,CAAC,CAAA,EAAG,SAAA,EAAuB,QAAA,EAAmB;AACrH,EAAA,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,KAAA,EAAO;AAC1B,IAAA,GAAA,CAAI,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,QAAA,EAAU;AACzC,MAAA,MAAMA,KAAAA,EAA4B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAC9E,MAAA,OAAO,2BAAA,IAAMA,EAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,IACrC;AAEA,IAAA,IAAI;AACF,MAAA,MAAMA,KAAAA,EAAc,cAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,IAAc,CAAA;AAE1D,MAAA,OAAO,2BAAA,IAAMA,EAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,IACrC,EAAA,MAAA,CAAS,CAAA,EAAG;AAAA,IAEZ;AAEA,IAAA,MAAM,IAAA,EAA4B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAE9E,IAAA,OAAO,2BAAA,GAAM,EAAK,OAAA,EAAS,QAAQ,CAAA;AAAA,EACrC;AAEA,EAAA,GAAA,CAAI,IAAI,mBAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,KAAA,EAAO;AACxC,IAAA,OAAO,2BAAA,MAAM,CAAO,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,2BAAA,2BAAM,MAAQ,CAAO,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,OAAA,EAAS,QAAQ,CAAA;AACzE;ADLA;AACA;AACE;AACF,0CAAC","file":"/home/runner/work/kubb/kubb/packages/plugin-oas/dist/chunk-QLJIL3U5.cjs","sourcesContent":[null,"import { resolve } from 'node:path'\n\nimport { URLPath } from '@kubb/core/utils'\n\nimport { type FormatOptions, parse } from '@kubb/oas/parser'\n\nimport type { Config } from '@kubb/core'\nimport { Oas, type OasTypes } from '@kubb/oas'\nimport yaml from '@stoplight/yaml'\n\nexport function parseFromConfig(config: Config, options: FormatOptions = {}, oasClass: typeof Oas = Oas): Promise<Oas> {\n if ('data' in config.input) {\n if (typeof config.input.data === 'object') {\n const api: OasTypes.OASDocument = JSON.parse(JSON.stringify(config.input.data)) as OasTypes.OASDocument\n return parse(api, options, oasClass)\n }\n\n try {\n const api: string = yaml.parse(config.input.data as string) as string\n\n return parse(api, options, oasClass)\n } catch (e) {\n /* empty */\n }\n\n const api: OasTypes.OASDocument = JSON.parse(JSON.stringify(config.input.data)) as OasTypes.OASDocument\n\n return parse(api, options, oasClass)\n }\n\n if (new URLPath(config.input.path).isURL) {\n return parse(config.input.path, options, oasClass)\n }\n\n return parse(resolve(config.root, config.input.path), options, oasClass)\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/parseFromConfig.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport { URLPath } from '@kubb/core/utils'\n\nimport { type FormatOptions, parse } from '@kubb/oas/parser'\n\nimport type { Config } from '@kubb/core'\nimport { Oas, type OasTypes } from '@kubb/oas'\nimport yaml from '@stoplight/yaml'\n\nexport function parseFromConfig(config: Config, options: FormatOptions = {}, oasClass: typeof Oas = Oas): Promise<Oas> {\n if ('data' in config.input) {\n if (typeof config.input.data === 'object') {\n const api: OasTypes.OASDocument = JSON.parse(JSON.stringify(config.input.data)) as OasTypes.OASDocument\n return parse(api, options, oasClass)\n }\n\n try {\n const api: string = yaml.parse(config.input.data as string) as string\n\n return parse(api, options, oasClass)\n } catch (e) {\n /* empty */\n }\n\n const api: OasTypes.OASDocument = JSON.parse(JSON.stringify(config.input.data)) as OasTypes.OASDocument\n\n return parse(api, options, oasClass)\n }\n\n if (new URLPath(config.input.path).isURL) {\n return parse(config.input.path, options, oasClass)\n }\n\n return parse(resolve(config.root, config.input.path), options, oasClass)\n}\n"],"mappings":";;;;;AAAA;AAAA,SAAS,eAAe;AAExB,SAAS,eAAe;AAExB,SAA6B,aAAa;AAG1C,SAAS,WAA0B;AACnC,OAAO,UAAU;AAEV,SAAS,gBAAgB,QAAgB,UAAyB,CAAC,GAAG,WAAuB,KAAmB;AACrH,MAAI,UAAU,OAAO,OAAO;AAC1B,QAAI,OAAO,OAAO,MAAM,SAAS,UAAU;AACzC,YAAMA,OAA4B,KAAK,MAAM,KAAK,UAAU,OAAO,MAAM,IAAI,CAAC;AAC9E,aAAO,MAAMA,MAAK,SAAS,QAAQ;AAAA,IACrC;AAEA,QAAI;AACF,YAAMA,OAAc,KAAK,MAAM,OAAO,MAAM,IAAc;AAE1D,aAAO,MAAMA,MAAK,SAAS,QAAQ;AAAA,IACrC,SAAS,GAAG;AAAA,IAEZ;AAEA,UAAM,MAA4B,KAAK,MAAM,KAAK,UAAU,OAAO,MAAM,IAAI,CAAC;AAE9E,WAAO,MAAM,KAAK,SAAS,QAAQ;AAAA,EACrC;AAEA,MAAI,IAAI,QAAQ,OAAO,MAAM,IAAI,EAAE,OAAO;AACxC,WAAO,MAAM,OAAO,MAAM,MAAM,SAAS,QAAQ;AAAA,EACnD;AAEA,SAAO,MAAM,QAAQ,OAAO,MAAM,OAAO,MAAM,IAAI,GAAG,SAAS,QAAQ;AACzE;","names":["api"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/kubb/kubb/packages/plugin-oas/dist/chunk-YQ6GIIKL.cjs","../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["_schema","nullable","name","min","max"],"mappings":"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","file":"/home/runner/work/kubb/kubb/packages/plugin-oas/dist/chunk-YQ6GIIKL.cjs","sourcesContent":[null,"import type * as KubbFile from '@kubb/fs/types'\n\nexport type SchemaKeywordMapper = {\n object: {\n keyword: 'object'\n args: {\n properties: { [x: string]: Schema[] }\n additionalProperties: Schema[]\n strict?: boolean\n }\n }\n strict: { keyword: 'strict' }\n url: { keyword: 'url' }\n readOnly: { keyword: 'readOnly' }\n uuid: { keyword: 'uuid' }\n email: { keyword: 'email' }\n firstName: { keyword: 'firstName' }\n lastName: { keyword: 'lastName' }\n phone: { keyword: 'phone' }\n password: { keyword: 'password' }\n date: { keyword: 'date'; args: { type?: 'date' | 'string' } }\n time: { keyword: 'time'; args: { type?: 'date' | 'string' } }\n datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }\n tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number } }\n array: {\n keyword: 'array'\n args: { items: Schema[]; min?: number; max?: number }\n }\n enum: {\n keyword: 'enum'\n args: {\n name: string\n typeName: string\n asConst: boolean\n items: Array<{\n name: string | number\n format: 'string' | 'number'\n value?: string | number\n }>\n }\n }\n and: { keyword: 'and'; args: Schema[] }\n const: {\n keyword: 'const'\n args: {\n name: string | number\n format: 'string' | 'number'\n value?: string | number\n }\n }\n union: { keyword: 'union'; args: Schema[] }\n ref: {\n keyword: 'ref'\n args: { name: string; path: KubbFile.OptionalPath }\n }\n matches: { keyword: 'matches'; args?: string }\n boolean: { keyword: 'boolean' }\n default: { keyword: 'default'; args: string | number | boolean }\n string: { keyword: 'string' }\n integer: { keyword: 'integer' }\n number: { keyword: 'number' }\n max: { keyword: 'max'; args: number }\n min: { keyword: 'min'; args: number }\n describe: { keyword: 'describe'; args: string }\n example: { keyword: 'example'; args: string }\n deprecated: { keyword: 'deprecated' }\n optional: { keyword: 'optional' }\n undefined: { keyword: 'undefined' }\n nullish: { keyword: 'nullish' }\n nullable: { keyword: 'nullable' }\n null: { keyword: 'null' }\n any: { keyword: 'any' }\n unknown: { keyword: 'unknown' }\n blob: { keyword: 'blob' }\n schema: { keyword: 'schema'; args: { type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'; format?: string } }\n name: { keyword: 'name'; args: string }\n catchall: { keyword: 'catchall' }\n}\n\nexport const schemaKeywords = {\n any: 'any',\n strict: 'strict',\n unknown: 'unknown',\n number: 'number',\n integer: 'integer',\n string: 'string',\n boolean: 'boolean',\n undefined: 'undefined',\n nullable: 'nullable',\n null: 'null',\n nullish: 'nullish',\n array: 'array',\n tuple: 'tuple',\n enum: 'enum',\n union: 'union',\n datetime: 'datetime',\n date: 'date',\n email: 'email',\n uuid: 'uuid',\n url: 'url',\n /* intersection */\n default: 'default',\n const: 'const',\n and: 'and',\n describe: 'describe',\n min: 'min',\n max: 'max',\n optional: 'optional',\n readOnly: 'readOnly',\n\n // custom ones\n object: 'object',\n ref: 'ref',\n matches: 'matches',\n firstName: 'firstName',\n lastName: 'lastName',\n password: 'password',\n phone: 'phone',\n blob: 'blob',\n deprecated: 'deprecated',\n example: 'example',\n schema: 'schema',\n catchall: 'catchall',\n time: 'time',\n name: 'name',\n} satisfies {\n [K in keyof SchemaKeywordMapper]: SchemaKeywordMapper[K]['keyword']\n}\n\nexport type SchemaKeyword = keyof SchemaKeywordMapper\n\nexport type SchemaMapper<T = string | null | undefined> = {\n [K in keyof SchemaKeywordMapper]: (() => T | undefined) | undefined\n}\n\nexport type SchemaKeywordBase<T> = {\n keyword: SchemaKeyword\n args: T\n}\n\nexport type Schema = { keyword: string } | SchemaKeywordMapper[keyof SchemaKeywordMapper]\n\nexport function isKeyword<T extends Schema, K extends keyof SchemaKeywordMapper>(meta: T, keyword: K): meta is Extract<T, SchemaKeywordMapper[K]> {\n return meta.keyword === keyword\n}\n","import { type FileMetaBase, Generator } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\n\nimport { isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\n\nimport type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { Oas, OpenAPIV3, SchemaObject, contentType } from '@kubb/oas'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport type { OperationSchema, Override, Refs } from './types.ts'\n\nexport type GetSchemaGeneratorOptions<T extends SchemaGenerator<any, any, any>> = T extends SchemaGenerator<infer Options, any, any> ? Options : never\n\nexport type SchemaMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>\n\ntype Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {\n oas: Oas\n pluginManager: PluginManager\n /**\n * Current plugin\n */\n plugin: Plugin<TPluginOptions>\n mode: KubbFile.Mode\n include?: Array<'schemas' | 'responses' | 'requestBodies'>\n override: Array<Override<TOptions>> | undefined\n contentType?: contentType\n output?: string\n}\n\nexport type SchemaGeneratorOptions = {\n dateType: false | 'string' | 'stringOffset' | 'stringLocal' | 'date'\n unknownType: 'any' | 'unknown'\n enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n enumSuffix?: string\n usedEnumNames?: Record<string, number>\n mapper?: Record<string, string>\n typed?: boolean\n transformers: {\n /**\n * Customize the names based on the type that is provided by the plugin.\n */\n name?: (name: ResolveNameParams['name'], type?: ResolveNameParams['type']) => string\n /**\n * Receive schema and name(propertName) and return FakerMeta array\n * TODO TODO add docs\n * @beta\n */\n schema?: (schemaProps: SchemaProps, defaultSchemas: Schema[]) => Schema[] | undefined\n }\n}\n\nexport type SchemaGeneratorBuildOptions = Omit<OperationSchema, 'name' | 'schema'>\n\ntype SchemaProps = {\n schema?: SchemaObject\n name?: string\n parentName?: string\n}\n\nexport abstract class SchemaGenerator<\n TOptions extends SchemaGeneratorOptions = SchemaGeneratorOptions,\n TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n TFileMeta extends FileMetaBase = FileMetaBase,\n> extends Generator<TOptions, Context<TOptions, TPluginOptions>> {\n // Collect the types of all referenced schemas, so we can export them later\n refs: Refs = {}\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n parse(props: SchemaProps): Schema[] {\n const options = this.#getOptions(props)\n\n const defaultSchemas = this.#parseSchemaObject(props)\n const schemas = options.transformers?.schema?.(props, defaultSchemas) || defaultSchemas || []\n\n return uniqueWith(schemas, isDeepEqual)\n }\n\n deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T][] {\n return SchemaGenerator.deepSearch<T>(tree, keyword)\n }\n\n find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n return SchemaGenerator.find<T>(tree, keyword)\n }\n\n static deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T][] {\n const foundItems: SchemaKeywordMapper[T][] = []\n\n tree?.forEach((schema) => {\n if (schema.keyword === keyword) {\n foundItems.push(schema as SchemaKeywordMapper[T])\n }\n\n if (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>(entrySchema, keyword))\n })\n\n Object.values(subItem.args?.additionalProperties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n })\n\n return foundItems\n }\n\n static findInObject<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = undefined\n\n tree?.forEach((schema) => {\n if (!foundItem && schema.keyword === keyword) {\n foundItem = schema as SchemaKeywordMapper[T]\n }\n\n if (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(subItem.args?.additionalProperties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = undefined\n\n tree?.forEach((schema) => {\n if (!foundItem && schema.keyword === keyword) {\n foundItem = schema as SchemaKeywordMapper[T]\n }\n\n if (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n #getUsedEnumNames(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n return options.usedEnumNames || {}\n }\n\n #getOptions({ name }: SchemaProps): Partial<TOptions> {\n const { override = [] } = this.context\n\n return {\n ...this.options,\n ...(override.find(({ pattern, type }) => {\n if (name && type === 'schemaName') {\n return !!name.match(pattern)\n }\n\n return false\n })?.options || {}),\n }\n }\n\n #getUnknownReturn(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n if (options.unknownType === 'any') {\n return schemaKeywords.any\n }\n\n return schemaKeywords.unknown\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #parseProperties({ schema, name }: SchemaProps): Schema[] {\n const properties = schema?.properties || {}\n const additionalProperties = schema?.additionalProperties\n const required = schema?.required\n\n const propertiesSchemas = Object.keys(properties)\n .map((propertyName) => {\n const validationFunctions: Schema[] = []\n const propertySchema = properties[propertyName] as SchemaObject\n\n const isRequired = Array.isArray(required) ? required?.includes(propertyName) : !!required\n const nullable = propertySchema.nullable ?? propertySchema['x-nullable'] ?? false\n\n validationFunctions.push(...this.parse({ schema: propertySchema, name: propertyName, parentName: name }))\n\n validationFunctions.push({\n keyword: schemaKeywords.name,\n args: propertyName,\n })\n\n if (!isRequired && nullable) {\n validationFunctions.push({ keyword: schemaKeywords.nullish })\n } else if (!isRequired) {\n validationFunctions.push({ keyword: schemaKeywords.optional })\n }\n\n return {\n [propertyName]: validationFunctions,\n }\n })\n .reduce((acc, curr) => ({ ...acc, ...curr }), {})\n let additionalPropertiesSchemas: Schema[] = []\n\n if (additionalProperties) {\n additionalPropertiesSchemas =\n additionalProperties === true\n ? [{ keyword: this.#getUnknownReturn({ schema, name }) }]\n : this.parse({ schema: additionalProperties as SchemaObject, parentName: name })\n }\n\n return [\n {\n keyword: schemaKeywords.object,\n args: {\n properties: propertiesSchemas,\n additionalProperties: additionalPropertiesSchemas,\n },\n },\n ]\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(obj: OpenAPIV3.ReferenceObject): Schema[] {\n const { $ref } = obj\n let ref = this.refs[$ref]\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({\n name: originalName,\n pluginKey: this.context.plugin.key,\n type: 'function',\n })\n\n if (ref) {\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref.path },\n },\n ]\n }\n\n const fileName = this.context.pluginManager.resolveName({\n name: originalName,\n pluginKey: this.context.plugin.key,\n type: 'file',\n })\n const file = this.context.pluginManager.getFile({\n name: fileName,\n pluginKey: this.context.plugin.key,\n extName: '.ts',\n })\n\n ref = this.refs[$ref] = {\n propertyName,\n originalName,\n path: file.path,\n }\n\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref?.path },\n },\n ]\n }\n\n #getParsedSchemaObject(schema?: SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #parseSchemaObject({ schema: _schema, name, parentName }: SchemaProps): Schema[] {\n const options = this.#getOptions({ schema: _schema, name })\n const unknownReturn = this.#getUnknownReturn({ schema: _schema, name })\n const { schema, version } = this.#getParsedSchemaObject(_schema)\n if (!schema) {\n return [{ keyword: unknownReturn }]\n }\n\n const baseItems: Schema[] = [\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const nullable = schema.nullable ?? schema['x-nullable'] ?? false\n\n if (schema.default !== undefined && !Array.isArray(schema.default)) {\n if (typeof schema.default === 'string') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: transformers.stringify(schema.default),\n })\n } else if (typeof schema.default === 'boolean') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default ?? false,\n })\n } else {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default,\n })\n }\n }\n\n if (schema.description) {\n baseItems.push({\n keyword: schemaKeywords.describe,\n args: schema.description,\n })\n }\n\n if (schema.pattern) {\n baseItems.unshift({\n keyword: schemaKeywords.matches,\n args: schema.pattern,\n })\n }\n\n if (max !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n\n if (min !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\n\n if (nullable) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n\n if (schema.type && Array.isArray(schema.type)) {\n const [_schema, nullable] = schema.type\n\n if (nullable === 'null') {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n }\n\n if (schema.readOnly) {\n baseItems.push({ keyword: schemaKeywords.readOnly })\n }\n\n if (isReference(schema)) {\n return [\n ...this.#getRefAlias(schema),\n nullable && { keyword: schemaKeywords.nullable },\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ].filter(Boolean)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.oneOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n if (schemaWithoutOneOf.properties) {\n return [...this.parse({ schema: schemaWithoutOneOf, name, parentName }), union, ...baseItems]\n }\n\n return [union, ...baseItems]\n }\n\n if (schema.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.anyOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n })\n .map((item) => {\n if (isKeyword(item, schemaKeywords.object)) {\n return {\n ...item,\n args: {\n ...item.args,\n strict: true,\n },\n }\n }\n return item\n }),\n }\n if (schemaWithoutAnyOf.properties) {\n return [...this.parse({ schema: schemaWithoutAnyOf, name, parentName }), union, ...baseItems]\n }\n\n return [union, ...baseItems]\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n const and: Schema = {\n keyword: schemaKeywords.and,\n args: schema.allOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n\n if (schemaWithoutAllOf.properties) {\n return [\n {\n ...and,\n args: [...(and.args || []), ...this.parse({ schema: schemaWithoutAllOf, name, parentName })],\n },\n ...baseItems,\n ]\n }\n\n return [and, ...baseItems]\n }\n\n if (schema.enum) {\n const enumName = getUniqueName(pascalCase([parentName, name, options.enumSuffix].join(' ')), this.#getUsedEnumNames({ schema, name }))\n const typeName = this.context.pluginManager.resolveName({\n name: enumName,\n pluginKey: this.context.plugin.key,\n type: 'type',\n })\n\n const nullableEnum = schema.enum.includes(null)\n if (nullableEnum) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n const filteredValues = schema.enum.filter((value) => value !== null)\n\n // x-enumNames has priority\n const extensionEnums = ['x-enumNames', 'x-enum-varnames']\n .filter((extensionKey) => extensionKey in schema)\n .map((extensionKey) => {\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name,\n typeName,\n asConst: false,\n items: [...new Set(schema[extensionKey as keyof typeof schema] as string[])].map((name: string | number, index) => ({\n name: transformers.stringify(name),\n value: schema.enum?.[index] as string | number,\n format: isNumber(schema.enum?.[index]) ? 'number' : 'string',\n })),\n },\n },\n ...baseItems.filter(\n (item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches,\n ),\n ]\n })\n\n if (schema.type === 'number' || schema.type === 'integer') {\n // we cannot use z.enum when enum type is number/integer\n const enumNames = extensionEnums[0]?.find((item) => isKeyword(item, schemaKeywords.enum)) as unknown as SchemaKeywordMapper['enum']\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name: enumName,\n typeName,\n asConst: true,\n items: enumNames?.args?.items\n ? [...new Set(enumNames.args.items)].map(({ name, value }) => ({\n name,\n value,\n format: 'number',\n }))\n : [...new Set(filteredValues)].map((value: string) => {\n return {\n name: value,\n value,\n format: 'number',\n }\n }),\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches),\n ]\n }\n\n if (extensionEnums.length > 0 && extensionEnums[0]) {\n return extensionEnums[0]\n }\n\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name: enumName,\n typeName,\n asConst: false,\n items: [...new Set(filteredValues)].map((value: string) => ({\n name: transformers.stringify(value),\n value,\n format: isNumber(value) ? 'number' : 'string',\n })),\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches),\n ]\n }\n\n if ('prefixItems' in schema) {\n const prefixItems = schema.prefixItems as SchemaObject[]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n\n return [\n {\n keyword: schemaKeywords.tuple,\n args: {\n min,\n max,\n items: prefixItems\n .map((item) => {\n return this.parse({ schema: item, name, parentName })[0]\n })\n .filter(Boolean),\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (version === '3.1' && 'const' in schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schema['const'],\n format: typeof schema['const'] === 'number' ? 'number' : 'string',\n value: schema['const'],\n },\n },\n ...baseItems,\n ]\n }\n return [{ keyword: schemaKeywords.null }]\n }\n\n /**\n * > Structural validation alone may be insufficient to allow an application to correctly utilize certain values. The \"format\"\n * > annotation keyword is defined to allow schema authors to convey semantic information for a fixed subset of values which are\n * > accurately described by authoritative resources, be they RFCs or other external specifications.\n *\n * In other words: format is more specific than type alone, hence it should override the type value, if possible.\n *\n * see also https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.7\n */\n if (schema.format) {\n switch (schema.format) {\n case 'binary':\n baseItems.push({ keyword: schemaKeywords.blob })\n return baseItems\n case 'date-time':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n return baseItems\n }\n\n if (options.dateType === 'stringOffset') {\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: true } })\n return baseItems\n }\n\n if (options.dateType === 'stringLocal') {\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { local: true } })\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: false } })\n\n return baseItems\n }\n break\n case 'date':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'string' } })\n\n return baseItems\n }\n break\n case 'time':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'date' } })\n\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'string' } })\n\n return baseItems\n }\n break\n case 'uuid':\n baseItems.unshift({ keyword: schemaKeywords.uuid })\n break\n case 'email':\n case 'idn-email':\n baseItems.unshift({ keyword: schemaKeywords.email })\n break\n case 'uri':\n case 'ipv4':\n case 'ipv6':\n case 'uri-reference':\n case 'hostname':\n case 'idn-hostname':\n baseItems.unshift({ keyword: schemaKeywords.url })\n break\n // case 'duration':\n // case 'json-pointer':\n // case 'relative-json-pointer':\n default:\n // formats not yet implemented: ignore.\n break\n }\n }\n\n // type based logic\n if ('items' in schema || schema.type === ('array' as 'string')) {\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const items = this.parse({ schema: 'items' in schema ? (schema.items as SchemaObject) : [], name, parentName })\n\n return [\n {\n keyword: schemaKeywords.array,\n args: {\n items,\n min,\n max,\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (schema.properties || schema.additionalProperties) {\n return [...this.#parseProperties({ schema, name }), ...baseItems]\n }\n\n if (schema.type) {\n if (Array.isArray(schema.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const [type] = schema.type as Array<OpenAPIV3.NonArraySchemaObjectType>\n\n return [\n ...this.parse({\n schema: {\n ...schema,\n type,\n },\n name,\n parentName,\n }),\n ...baseItems,\n ].filter(Boolean)\n }\n\n if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(schema.type)) {\n this.context.pluginManager.logger.emit('warning', `Schema type '${schema.type}' is not valid for schema ${parentName}.${name}`)\n }\n\n // 'string' | 'number' | 'integer' | 'boolean'\n return [{ keyword: schema.type }, ...baseItems]\n }\n\n return [{ keyword: unknownReturn }]\n }\n\n async build(): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n const schemas = getSchemas({ oas, contentType, includes: include })\n\n const promises = Object.entries(schemas).reduce((acc, [name, schema]) => {\n const options = this.#getOptions({ name })\n const promiseOperation = this.schema.call(this, name, schema, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n return acc\n }, [] as SchemaMethodResult<TFileMeta>[])\n\n const files = await Promise.all(promises)\n\n // using .flat because schemaGenerator[method] can return a array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Schema\n */\n abstract schema(name: string, object: SchemaObject, options: TOptions): SchemaMethodResult<TFileMeta>\n}\n"]}
|
|
File without changes
|