@openmeter/sdk 1.0.0-beta.227 → 1.0.0-beta.228
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/Makefile +0 -1
- package/dist/cjs/src/client/customers.d.cts +3 -0
- package/dist/cjs/src/client/features.d.cts +3 -0
- package/dist/cjs/src/client/meters.cjs +10 -10
- package/dist/cjs/src/client/meters.d.cts +83 -14
- package/dist/cjs/src/client/plans.d.cts +5 -0
- package/dist/cjs/src/client/schemas.d.cts +283 -3
- package/dist/cjs/src/client/subscriptions.d.cts +5 -0
- package/dist/cjs/src/zod/index.cjs +714 -159
- package/dist/cjs/src/zod/index.cjs.map +1 -1
- package/dist/cjs/src/zod/index.d.cts +769 -648
- package/dist/src/client/customers.d.ts +3 -0
- package/dist/src/client/features.d.ts +3 -0
- package/dist/src/client/meters.d.ts +83 -14
- package/dist/src/client/meters.js +11 -11
- package/dist/src/client/meters.js.map +1 -1
- package/dist/src/client/plans.d.ts +5 -0
- package/dist/src/client/schemas.d.ts +283 -3
- package/dist/src/client/subscriptions.d.ts +5 -0
- package/dist/src/zod/index.d.ts +769 -648
- package/dist/src/zod/index.js +686 -132
- package/dist/src/zod/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/orval.config.ts +1 -1
- package/package.json +13 -14
- package/patches/openapi-typescript.patch +901 -828
- package/pnpm-workspace.yaml +3 -0
|
@@ -1,563 +1,363 @@
|
|
|
1
|
-
diff --git a/
|
|
2
|
-
index
|
|
3
|
-
--- a/
|
|
4
|
-
+++ b/
|
|
5
|
-
@@ -
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
diff --git a/bin/cli.js b/bin/cli.js
|
|
2
|
+
index e07ff7b33d0b867c9a4719c1e2d98b0a88c66c58..31be6e7958e2ce66d79d9926181696c1895cb2c8 100755
|
|
3
|
+
--- a/bin/cli.js
|
|
4
|
+
+++ b/bin/cli.js
|
|
5
|
+
@@ -4,6 +4,7 @@ import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { performance } from "node:perf_hooks";
|
|
8
|
+
import { createConfig, findConfig, loadConfig } from "@redocly/openapi-core";
|
|
9
|
+
+import { kebabCase } from "scule";
|
|
10
|
+
import parser from "yargs-parser";
|
|
11
|
+
import openapiTS, { astToString, COMMENT_HEADER, c, error, formatTime, warn } from "../dist/index.mjs";
|
|
12
|
+
|
|
13
|
+
@@ -31,8 +32,8 @@ Options
|
|
14
|
+
--path-params-as-types Convert paths to template literal types
|
|
15
|
+
--alphabetize Sort object keys alphabetically
|
|
16
|
+
--exclude-deprecated Exclude deprecated types
|
|
17
|
+
- --root-types (optional) Export schemas types at root level
|
|
18
|
+
- --root-types-no-schema-prefix (optional)
|
|
19
|
+
+ --root-types Export schemas types at root level
|
|
20
|
+
+ --root-types-no-schema-prefix
|
|
21
|
+
Do not add "Schema" prefix to types at the root level (should only be used with --root-types)
|
|
22
|
+
--root-types-keep-casing Keep casing of root types (should only be used with --root-types)
|
|
23
|
+
--make-paths-enum Generate ApiPaths enum for all paths
|
|
24
|
+
@@ -71,32 +72,34 @@ if (args.includes("--root-types-keep-casing") && !args.includes("--root-types"))
|
|
25
|
+
console.warn("--root-types-keep-casing has no effect without --root-types flag");
|
|
15
26
|
}
|
|
16
|
-
declare function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void;
|
|
17
|
-
type OapiRefResolved = Referenced<ParameterObject>;
|
|
18
|
-
-declare function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode;
|
|
19
|
-
+declare function oapiRef(path: string, resolved?: OapiRefResolved, deep?: boolean): ts.TypeNode;
|
|
20
|
-
interface AstToStringOptions {
|
|
21
|
-
fileName?: string;
|
|
22
|
-
sourceText?: string;
|
|
23
|
-
@@ -495,8 +495,8 @@ declare function transformResponseObject(responseObject: ResponseObject, options
|
|
24
27
|
|
|
25
|
-
|
|
28
|
+
+const BOOLEAN_FLAGS = [
|
|
29
|
+
+ "additionalProperties",
|
|
30
|
+
+ "alphabetize",
|
|
31
|
+
+ "arrayLength",
|
|
32
|
+
+ "check",
|
|
33
|
+
+ "conditionalEnums",
|
|
34
|
+
+ "contentNever",
|
|
35
|
+
+ "dedupeEnums",
|
|
36
|
+
+ "defaultNonNullable",
|
|
37
|
+
+ "emptyObjectsUnknown",
|
|
38
|
+
+ "enum",
|
|
39
|
+
+ "enumValues",
|
|
40
|
+
+ "excludeDeprecated",
|
|
41
|
+
+ "exportType",
|
|
42
|
+
+ "generatePathParams",
|
|
43
|
+
+ "help",
|
|
44
|
+
+ "immutable",
|
|
45
|
+
+ "makePathsEnum",
|
|
46
|
+
+ "pathParamsAsTypes",
|
|
47
|
+
+ "propertiesRequiredByDefault",
|
|
48
|
+
+ "readWriteMarkers",
|
|
49
|
+
+ "rootTypes",
|
|
50
|
+
+ "rootTypesKeepCasing",
|
|
51
|
+
+ "rootTypesNoSchemaPrefix",
|
|
52
|
+
+];
|
|
53
|
+
+
|
|
54
|
+
const flags = parser(args, {
|
|
55
|
+
- boolean: [
|
|
56
|
+
- "additionalProperties",
|
|
57
|
+
- "alphabetize",
|
|
58
|
+
- "arrayLength",
|
|
59
|
+
- "contentNever",
|
|
60
|
+
- "defaultNonNullable",
|
|
61
|
+
- "propertiesRequiredByDefault",
|
|
62
|
+
- "emptyObjectsUnknown",
|
|
63
|
+
- "enum",
|
|
64
|
+
- "enumValues",
|
|
65
|
+
- "conditionalEnums",
|
|
66
|
+
- "dedupeEnums",
|
|
67
|
+
- "check",
|
|
68
|
+
- "excludeDeprecated",
|
|
69
|
+
- "exportType",
|
|
70
|
+
- "help",
|
|
71
|
+
- "immutable",
|
|
72
|
+
- "pathParamsAsTypes",
|
|
73
|
+
- "rootTypes",
|
|
74
|
+
- "rootTypesNoSchemaPrefix",
|
|
75
|
+
- "rootTypesKeepCasing",
|
|
76
|
+
- "makePathsEnum",
|
|
77
|
+
- "generatePathParams",
|
|
78
|
+
- "readWriteMarkers",
|
|
79
|
+
- ],
|
|
80
|
+
+ boolean: BOOLEAN_FLAGS,
|
|
81
|
+
string: ["output", "redocly"],
|
|
82
|
+
alias: {
|
|
83
|
+
redocly: ["c"],
|
|
84
|
+
@@ -136,36 +139,10 @@ function checkStaleOutput(current, outputPath) {
|
|
26
85
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
+
|
|
86
|
+
/**
|
|
87
|
+
* @param {string | URL} schema
|
|
88
|
+
- * @param {@type import('@redocly/openapi-core').Config} redocly
|
|
89
|
+
+ * @param {@type import('@redocly/openapi-core').Config} config
|
|
90
|
+
*/
|
|
91
|
+
-async function generateSchema(schema, { redocly, silent = false }) {
|
|
92
|
+
- return `${COMMENT_HEADER}${astToString(
|
|
93
|
+
- await openapiTS(schema, {
|
|
94
|
+
- additionalProperties: flags.additionalProperties,
|
|
95
|
+
- alphabetize: flags.alphabetize,
|
|
96
|
+
- arrayLength: flags.arrayLength,
|
|
97
|
+
- contentNever: flags.contentNever,
|
|
98
|
+
- propertiesRequiredByDefault: flags.propertiesRequiredByDefault,
|
|
99
|
+
- defaultNonNullable: flags.defaultNonNullable,
|
|
100
|
+
- emptyObjectsUnknown: flags.emptyObjectsUnknown,
|
|
101
|
+
- enum: flags.enum,
|
|
102
|
+
- enumValues: flags.enumValues,
|
|
103
|
+
- conditionalEnums: flags.conditionalEnums,
|
|
104
|
+
- dedupeEnums: flags.dedupeEnums,
|
|
105
|
+
- excludeDeprecated: flags.excludeDeprecated,
|
|
106
|
+
- exportType: flags.exportType,
|
|
107
|
+
- immutable: flags.immutable,
|
|
108
|
+
- pathParamsAsTypes: flags.pathParamsAsTypes,
|
|
109
|
+
- rootTypes: flags.rootTypes,
|
|
110
|
+
- rootTypesNoSchemaPrefix: flags.rootTypesNoSchemaPrefix,
|
|
111
|
+
- rootTypesKeepCasing: flags.rootTypesKeepCasing,
|
|
112
|
+
- makePathsEnum: flags.makePathsEnum,
|
|
113
|
+
- generatePathParams: flags.generatePathParams,
|
|
114
|
+
- readWriteMarkers: flags.readWriteMarkers,
|
|
115
|
+
- redocly,
|
|
116
|
+
- silent,
|
|
117
|
+
- }),
|
|
118
|
+
- )}`;
|
|
119
|
+
+async function generateSchema(schema, config) {
|
|
120
|
+
+ return `${COMMENT_HEADER}${astToString(await openapiTS(schema, config))}`;
|
|
121
|
+
}
|
|
31
122
|
|
|
32
|
-
|
|
33
|
-
|
|
123
|
+
/** pretty-format error message but also throw */
|
|
124
|
+
@@ -230,6 +207,8 @@ async function main() {
|
|
125
|
+
await Promise.all(
|
|
126
|
+
Object.entries(redocly.apis).map(async ([name, api]) => {
|
|
127
|
+
let configRoot = CWD;
|
|
128
|
+
+
|
|
129
|
+
+ const config = { ...flags, redocly };
|
|
130
|
+
if (redocly.configFile) {
|
|
131
|
+
// note: this will be absolute if --redoc is passed; otherwise, relative
|
|
132
|
+
configRoot = path.isAbsolute(redocly.configFile)
|
|
133
|
+
@@ -241,7 +220,18 @@ async function main() {
|
|
134
|
+
`API ${name} is missing an \`${REDOC_CONFIG_KEY}.output\` key. See https://openapi-ts.dev/cli/#multiple-schemas.`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
- const result = await generateSchema(new URL(api.root, configRoot), { redocly });
|
|
138
|
+
+
|
|
139
|
+
+ if (api[REDOC_CONFIG_KEY]) {
|
|
140
|
+
+ for (const name of BOOLEAN_FLAGS) {
|
|
141
|
+
+ if (typeof api[REDOC_CONFIG_KEY][name] === "boolean") {
|
|
142
|
+
+ config[name] = api[REDOC_CONFIG_KEY][name];
|
|
143
|
+
+ } else if (typeof api[REDOC_CONFIG_KEY][kebabCase(name)] === "boolean") {
|
|
144
|
+
+ config[name] = api[REDOC_CONFIG_KEY][kebabCase(name)];
|
|
145
|
+
+ }
|
|
146
|
+
+ }
|
|
147
|
+
+ }
|
|
148
|
+
+ const result = await generateSchema(new URL(api.root, configRoot), config);
|
|
149
|
+
+
|
|
150
|
+
const outFile = new URL(api[REDOC_CONFIG_KEY].output, configRoot);
|
|
151
|
+
checkStaleOutput(result, outFile);
|
|
152
|
+
fs.mkdirSync(new URL(".", outFile), { recursive: true });
|
|
153
|
+
@@ -254,6 +244,7 @@ async function main() {
|
|
154
|
+
// handle stdin
|
|
155
|
+
else if (!input) {
|
|
156
|
+
const result = await generateSchema(process.stdin, {
|
|
157
|
+
+ ...flags,
|
|
158
|
+
redocly,
|
|
159
|
+
silent: outputType === OUTPUT_STDOUT,
|
|
160
|
+
});
|
|
161
|
+
@@ -278,6 +269,7 @@ async function main() {
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
const result = await generateSchema(new URL(input, CWD), {
|
|
165
|
+
+ ...flags,
|
|
166
|
+
redocly,
|
|
167
|
+
silent: outputType === OUTPUT_STDOUT,
|
|
168
|
+
});
|
|
169
|
+
diff --git a/dist/index.d.cts b/dist/index.d.cts
|
|
170
|
+
index be9d8f0f771cbe5e77dd36e5b90c952800e12060..a038dd93ee68e5cd291f22ca7ef2cd2e45c105db 100644
|
|
171
|
+
--- a/dist/index.d.cts
|
|
172
|
+
+++ b/dist/index.d.cts
|
|
173
|
+
@@ -206,6 +206,7 @@ type SchemaObject = {
|
|
174
|
+
const?: unknown;
|
|
175
|
+
default?: unknown;
|
|
176
|
+
format?: string;
|
|
177
|
+
+ additionalProperties?: boolean | Record<string, never> | SchemaObject | ReferenceObject;
|
|
178
|
+
nullable?: boolean;
|
|
179
|
+
oneOf?: (SchemaObject | ReferenceObject)[];
|
|
180
|
+
allOf?: (SchemaObject | ReferenceObject)[];
|
|
34
181
|
diff --git a/dist/index.d.mts b/dist/index.d.mts
|
|
35
|
-
index
|
|
182
|
+
index 2af2cee65dfe6973f592e6e9dc3399de1a641cbf..6729248654aaedf683747a9f98a3829d38266c4a 100644
|
|
36
183
|
--- a/dist/index.d.mts
|
|
37
184
|
+++ b/dist/index.d.mts
|
|
38
|
-
@@ -
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
sourceText?: string;
|
|
47
|
-
@@ -495,8 +495,8 @@ declare function transformResponseObject(responseObject: ResponseObject, options
|
|
48
|
-
|
|
49
|
-
declare function transformResponsesObject(responsesObject: ResponsesObject, options: TransformNodeOptions): ts.TypeNode;
|
|
50
|
-
|
|
51
|
-
-declare function transformSchemaObject(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions): ts.TypeNode;
|
|
52
|
-
-declare function transformSchemaObjectWithComposition(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions): ts.TypeNode;
|
|
53
|
-
+declare function transformSchemaObject(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions, fromAdditionalProperties?: boolean): ts.TypeNode;
|
|
54
|
-
+declare function transformSchemaObjectWithComposition(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions, fromAdditionalProperties?: boolean): ts.TypeNode;
|
|
55
|
-
|
|
56
|
-
declare const COMMENT_HEADER = "/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\n";
|
|
57
|
-
declare function openapiTS(source: string | URL | OpenAPI3 | Buffer | Readable, options?: OpenAPITSOptions): Promise<ts.Node[]>;
|
|
185
|
+
@@ -206,6 +206,7 @@ type SchemaObject = {
|
|
186
|
+
const?: unknown;
|
|
187
|
+
default?: unknown;
|
|
188
|
+
format?: string;
|
|
189
|
+
+ additionalProperties?: boolean | Record<string, never> | SchemaObject | ReferenceObject;
|
|
190
|
+
nullable?: boolean;
|
|
191
|
+
oneOf?: (SchemaObject | ReferenceObject)[];
|
|
192
|
+
allOf?: (SchemaObject | ReferenceObject)[];
|
|
58
193
|
diff --git a/dist/index.d.ts b/dist/index.d.ts
|
|
59
|
-
index
|
|
194
|
+
index be9d8f0f771cbe5e77dd36e5b90c952800e12060..a038dd93ee68e5cd291f22ca7ef2cd2e45c105db 100644
|
|
60
195
|
--- a/dist/index.d.ts
|
|
61
196
|
+++ b/dist/index.d.ts
|
|
62
|
-
@@ -
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
sourceText?: string;
|
|
71
|
-
@@ -495,8 +495,8 @@ declare function transformResponseObject(responseObject: ResponseObject, options
|
|
72
|
-
|
|
73
|
-
declare function transformResponsesObject(responsesObject: ResponsesObject, options: TransformNodeOptions): ts.TypeNode;
|
|
74
|
-
|
|
75
|
-
-declare function transformSchemaObject(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions): ts.TypeNode;
|
|
76
|
-
-declare function transformSchemaObjectWithComposition(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions): ts.TypeNode;
|
|
77
|
-
+declare function transformSchemaObject(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions, fromAdditionalProperties?: boolean): ts.TypeNode;
|
|
78
|
-
+declare function transformSchemaObjectWithComposition(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions, fromAdditionalProperties?: boolean): ts.TypeNode;
|
|
79
|
-
|
|
80
|
-
declare const COMMENT_HEADER = "/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\n";
|
|
81
|
-
declare function openapiTS(source: string | URL | OpenAPI3 | Buffer | Readable, options?: OpenAPITSOptions): Promise<ts.Node[]>;
|
|
82
|
-
diff --git a/dist/index.mjs.map b/dist/index.mjs.map
|
|
83
|
-
index 964062295b5a943edc730d636155fe899d722b36..e869d3dc2a3a89d4192f06c4c90c9c14ae2bef08 100644
|
|
84
|
-
--- a/dist/index.mjs.map
|
|
85
|
-
+++ b/dist/index.mjs.map
|
|
86
|
-
@@ -1 +1 @@
|
|
87
|
-
-{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport type { Readable } from \"node:stream\";\nimport { createConfig } from \"@redocly/openapi-core\";\nimport type ts from \"typescript\";\nimport { validateAndBundle } from \"./lib/redoc.js\";\nimport { debug, resolveRef, scanDiscriminators } from \"./lib/utils.js\";\nimport transformSchema from \"./transform/index.js\";\nimport type { GlobalContext, OpenAPI3, OpenAPITSOptions } from \"./types.js\";\n\nexport * from \"./lib/ts.js\";\nexport * from \"./lib/utils.js\";\nexport { default as transformComponentsObject } from \"./transform/components-object.js\";\nexport { default as transformHeaderObject } from \"./transform/header-object.js\";\nexport { default as transformSchema } from \"./transform/index.js\";\nexport { default as transformMediaTypeObject } from \"./transform/media-type-object.js\";\nexport * from \"./transform/operation-object.js\";\nexport { default as transformOperationObject } from \"./transform/operation-object.js\";\nexport { default as transformParameterObject } from \"./transform/parameter-object.js\";\nexport * from \"./transform/path-item-object.js\";\nexport { default as transformPathItemObject } from \"./transform/path-item-object.js\";\nexport { default as transformPathsObject } from \"./transform/paths-object.js\";\nexport { default as transformRequestBodyObject } from \"./transform/request-body-object.js\";\nexport { default as transformResponseObject } from \"./transform/response-object.js\";\nexport { default as transformResponsesObject } from \"./transform/responses-object.js\";\nexport * from \"./transform/schema-object.js\";\nexport { default as transformSchemaObject } from \"./transform/schema-object.js\";\nexport * from \"./types.js\";\n\nexport const COMMENT_HEADER = `/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\n`;\n\n/**\n * Convert an OpenAPI schema to TypesScript AST\n * @param {string|URL|object|Readable} source OpenAPI schema source:\n * - YAML: string\n * - JSON: parsed object\n * - URL: URL to a YAML or JSON file (local or remote)\n * - Readable: Readable stream of YAML or JSON\n */\nexport default async function openapiTS(\n source: string | URL | OpenAPI3 | Buffer | Readable,\n options: OpenAPITSOptions = {} as Partial<OpenAPITSOptions>,\n): Promise<ts.Node[]> {\n if (!source) {\n throw new Error(\"Empty schema. Please specify a URL, file path, or Redocly Config\");\n }\n\n const redoc =\n options.redocly ??\n (await createConfig(\n {\n rules: {\n \"operation-operationId-unique\": { severity: \"error\" }, // throw error on duplicate operationIDs\n },\n },\n { extends: [\"minimal\"] },\n ));\n\n const schema = await validateAndBundle(source, {\n redoc,\n cwd: options.cwd instanceof URL ? options.cwd : new URL(`file://${options.cwd ?? process.cwd()}/`),\n silent: options.silent ?? false,\n });\n\n const ctx: GlobalContext = {\n additionalProperties: options.additionalProperties ?? false,\n alphabetize: options.alphabetize ?? false,\n arrayLength: options.arrayLength ?? false,\n defaultNonNullable: options.defaultNonNullable ?? true,\n discriminators: scanDiscriminators(schema, options),\n emptyObjectsUnknown: options.emptyObjectsUnknown ?? false,\n enum: options.enum ?? false,\n enumValues: options.enumValues ?? false,\n dedupeEnums: options.dedupeEnums ?? false,\n excludeDeprecated: options.excludeDeprecated ?? false,\n exportType: options.exportType ?? false,\n immutable: options.immutable ?? false,\n rootTypes: options.rootTypes ?? false,\n rootTypesNoSchemaPrefix: options.rootTypesNoSchemaPrefix ?? false,\n injectFooter: [],\n pathParamsAsTypes: options.pathParamsAsTypes ?? false,\n postTransform: typeof options.postTransform === \"function\" ? options.postTransform : undefined,\n propertiesRequiredByDefault: options.propertiesRequiredByDefault ?? false,\n redoc,\n silent: options.silent ?? false,\n inject: options.inject ?? undefined,\n transform: typeof options.transform === \"function\" ? options.transform : undefined,\n transformProperty: typeof options.transformProperty === \"function\" ? options.transformProperty : undefined,\n makePathsEnum: options.makePathsEnum ?? false,\n generatePathParams: options.generatePathParams ?? false,\n resolve($ref) {\n return resolveRef(schema, $ref, { silent: options.silent ?? false });\n },\n };\n\n const transformT = performance.now();\n const result = transformSchema(schema, ctx);\n debug(\"Completed AST transformation for entire document\", \"ts\", performance.now() - transformT);\n\n return result;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,cAAA,GAAiB,CAAA;AAAA;AAAA;AAAA;;AAAA;AAe9B,eAA8B,SAAA,CAC5B,MAAA,EACA,OAAA,GAA4B,EAAC,EACT;AACpB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,EACpF;AAEA,EAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,OAAA,IACP,MAAM,YAAA;AAAA,IACL;AAAA,MACE,KAAA,EAAO;AAAA,QACL,8BAAA,EAAgC,EAAE,QAAA,EAAU,OAAA;AAAQ;AAAA;AACtD,KACF;AAAA,IACA,EAAE,OAAA,EAAS,CAAC,SAAS,CAAA;AAAE,GACzB;AAEF,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,MAAA,EAAQ;AAAA,IAC7C,KAAA;AAAA,IACA,GAAA,EAAK,OAAA,CAAQ,GAAA,YAAe,GAAA,GAAM,QAAQ,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,OAAA,EAAU,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IACjG,MAAA,EAAQ,QAAQ,MAAA,IAAU;AAAA,GAC3B,CAAA;AAED,EAAA,MAAM,GAAA,GAAqB;AAAA,IACzB,oBAAA,EAAsB,QAAQ,oBAAA,IAAwB,KAAA;AAAA,IACtD,WAAA,EAAa,QAAQ,WAAA,IAAe,KAAA;AAAA,IACpC,WAAA,EAAa,QAAQ,WAAA,IAAe,KAAA;AAAA,IACpC,kBAAA,EAAoB,QAAQ,kBAAA,IAAsB,IAAA;AAAA,IAClD,cAAA,EAAgB,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAA;AAAA,IAClD,mBAAA,EAAqB,QAAQ,mBAAA,IAAuB,KAAA;AAAA,IACpD,IAAA,EAAM,QAAQ,IAAA,IAAQ,KAAA;AAAA,IACtB,UAAA,EAAY,QAAQ,UAAA,IAAc,KAAA;AAAA,IAClC,WAAA,EAAa,QAAQ,WAAA,IAAe,KAAA;AAAA,IACpC,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB,KAAA;AAAA,IAChD,UAAA,EAAY,QAAQ,UAAA,IAAc,KAAA;AAAA,IAClC,SAAA,EAAW,QAAQ,SAAA,IAAa,KAAA;AAAA,IAChC,SAAA,EAAW,QAAQ,SAAA,IAAa,KAAA;AAAA,IAChC,uBAAA,EAAyB,QAAQ,uBAAA,IAA2B,KAAA;AAAA,IAC5D,cAAc,EAAC;AAAA,IACf,iBAAA,EAAmB,QAAQ,iBAAA,IAAqB,KAAA;AAAA,IAChD,eAAe,OAAO,OAAA,CAAQ,aAAA,KAAkB,UAAA,GAAa,QAAQ,aAAA,GAAgB,MAAA;AAAA,IACrF,2BAAA,EAA6B,QAAQ,2BAAA,IAA+B,KAAA;AAAA,IACpE,KAAA;AAAA,IACA,MAAA,EAAQ,QAAQ,MAAA,IAAU,KAAA;AAAA,IAC1B,MAAA,EAAQ,QAAQ,MAAA,IAAU,MAAA;AAAA,IAC1B,WAAW,OAAO,OAAA,CAAQ,SAAA,KAAc,UAAA,GAAa,QAAQ,SAAA,GAAY,MAAA;AAAA,IACzE,mBAAmB,OAAO,OAAA,CAAQ,iBAAA,KAAsB,UAAA,GAAa,QAAQ,iBAAA,GAAoB,MAAA;AAAA,IACjG,aAAA,EAAe,QAAQ,aAAA,IAAiB,KAAA;AAAA,IACxC,kBAAA,EAAoB,QAAQ,kBAAA,IAAsB,KAAA;AAAA,IAClD,QAAQ,IAAA,EAAM;AACZ,MAAA,OAAO,UAAA,CAAW,QAAQ,IAAA,EAAM,EAAE,QAAQ,OAAA,CAAQ,MAAA,IAAU,OAAO,CAAA;AAAA,IACrE;AAAA,GACF;AAEA,EAAA,MAAM,UAAA,GAAa,YAAY,GAAA,EAAI;AACnC,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,MAAA,EAAQ,GAAG,CAAA;AAC1C,EAAA,KAAA,CAAM,kDAAA,EAAoD,IAAA,EAAM,WAAA,CAAY,GAAA,KAAQ,UAAU,CAAA;AAE9F,EAAA,OAAO,MAAA;AACT;;;;"}
|
|
88
|
-
|
|
89
|
-
+{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport type { Readable } from \"node:stream\";\nimport { createConfig } from \"@redocly/openapi-core\";\nimport type ts from \"typescript\";\nimport { validateAndBundle } from \"./lib/redoc.js\";\nimport { debug, resolveRef, scanDiscriminators } from \"./lib/utils.js\";\nimport transformSchema from \"./transform/index.js\";\nimport type { GlobalContext, OpenAPI3, OpenAPITSOptions } from \"./types.js\";\n\nexport * from \"./lib/ts.js\";\nexport * from \"./lib/utils.js\";\nexport { default as transformComponentsObject } from \"./transform/components-object.js\";\nexport { default as transformHeaderObject } from \"./transform/header-object.js\";\nexport { default as transformSchema } from \"./transform/index.js\";\nexport { default as transformMediaTypeObject } from \"./transform/media-type-object.js\";\nexport * from \"./transform/operation-object.js\";\nexport { default as transformOperationObject } from \"./transform/operation-object.js\";\nexport { default as transformParameterObject } from \"./transform/parameter-object.js\";\nexport * from \"./transform/path-item-object.js\";\nexport { default as transformPathItemObject } from \"./transform/path-item-object.js\";\nexport { default as transformPathsObject } from \"./transform/paths-object.js\";\nexport { default as transformRequestBodyObject } from \"./transform/request-body-object.js\";\nexport { default as transformResponseObject } from \"./transform/response-object.js\";\nexport { default as transformResponsesObject } from \"./transform/responses-object.js\";\nexport * from \"./transform/schema-object.js\";\nexport { default as transformSchemaObject } from \"./transform/schema-object.js\";\nexport * from \"./types.js\";\n\nexport const COMMENT_HEADER = `/**\n * This file was auto-generated by openapi-typescript.\n * Do not make direct changes to the file.\n */\n\n`;\n\n/**\n * Convert an OpenAPI schema to TypesScript AST\n * @param {string|URL|object|Readable} source OpenAPI schema source:\n * - YAML: string\n * - JSON: parsed object\n * - URL: URL to a YAML or JSON file (local or remote)\n * - Readable: Readable stream of YAML or JSON\n */\nexport default async function openapiTS(\n source: string | URL | OpenAPI3 | Buffer | Readable,\n options: OpenAPITSOptions = {} as Partial<OpenAPITSOptions>,\n): Promise<ts.Node[]> {\n if (!source) {\n throw new Error(\"Empty schema. Please specify a URL, file path, or Redocly Config\");\n }\n\n const redoc =\n options.redocly ??\n (await createConfig(\n {\n rules: {\n \"operation-operationId-unique\": { severity: \"error\" }, // throw error on duplicate operationIDs\n },\n },\n { extends: [\"minimal\"] },\n ));\n\n const schema = await validateAndBundle(source, {\n redoc,\n cwd: options.cwd instanceof URL ? options.cwd : new URL(`file://${options.cwd ?? process.cwd()}/`),\n silent: options.silent ?? false,\n });\n\n const ctx: GlobalContext = {\n additionalProperties: options.additionalProperties ?? false,\n alphabetize: options.alphabetize ?? false,\n arrayLength: options.arrayLength ?? false,\n defaultNonNullable: options.defaultNonNullable ?? true,\n discriminators: scanDiscriminators(schema, options),\n emptyObjectsUnknown: options.emptyObjectsUnknown ?? false,\n enum: options.enum ?? false,\n enumValues: options.enumValues ?? false,\n dedupeEnums: options.dedupeEnums ?? false,\n excludeDeprecated: options.excludeDeprecated ?? false,\n exportType: options.exportType ?? false,\n immutable: options.immutable ?? false,\n rootTypes: options.rootTypes ?? false,\n rootTypesNoSchemaPrefix: options.rootTypesNoSchemaPrefix ?? false,\n injectFooter: [],\n pathParamsAsTypes: options.pathParamsAsTypes ?? false,\n postTransform: typeof options.postTransform === \"function\" ? options.postTransform : undefined,\n propertiesRequiredByDefault: options.propertiesRequiredByDefault ?? false,\n redoc,\n silent: options.silent ?? false,\n inject: options.inject ?? undefined,\n transform: typeof options.transform === \"function\" ? options.transform : undefined,\n transformProperty: typeof options.transformProperty === \"function\" ? options.transformProperty : undefined,\n makePathsEnum: options.makePathsEnum ?? false,\n generatePathParams: options.generatePathParams ?? false,\n resolve($ref) {\n return resolveRef(schema, $ref, { silent: options.silent ?? false });\n },\n };\n\n const transformT = performance.now();\n const result = transformSchema(schema, ctx);\n debug(\"Completed AST transformation for entire document\", \"ts\", performance.now() - transformT);\n\n return result;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,cAAiB,GAAA,CAAA;AAAA;AAAA;AAAA;;AAAA;AAe9B,eAA8B,SAC5B,CAAA,MAAA,EACA,OAA4B,GAAA,EACR,EAAA;AACpB,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAM,MAAA,IAAI,MAAM,kEAAkE,CAAA;AAAA;AAGpF,EAAM,MAAA,KAAA,GACJ,OAAQ,CAAA,OAAA,IACP,MAAM,YAAA;AAAA,IACL;AAAA,MACE,KAAO,EAAA;AAAA,QACL,8BAAA,EAAgC,EAAE,QAAA,EAAU,OAAQ;AAAA;AAAA;AACtD,KACF;AAAA,IACA,EAAE,OAAA,EAAS,CAAC,SAAS,CAAE;AAAA,GACzB;AAEF,EAAM,MAAA,MAAA,GAAS,MAAM,iBAAA,CAAkB,MAAQ,EAAA;AAAA,IAC7C,KAAA;AAAA,IACA,GAAK,EAAA,OAAA,CAAQ,GAAe,YAAA,GAAA,GAAM,QAAQ,GAAM,GAAA,IAAI,GAAI,CAAA,CAAA,OAAA,EAAU,OAAQ,CAAA,GAAA,IAAO,OAAQ,CAAA,GAAA,EAAK,CAAG,CAAA,CAAA,CAAA;AAAA,IACjG,MAAA,EAAQ,QAAQ,MAAU,IAAA;AAAA,GAC3B,CAAA;AAED,EAAA,MAAM,GAAqB,GAAA;AAAA,IACzB,oBAAA,EAAsB,QAAQ,oBAAwB,IAAA,KAAA;AAAA,IACtD,WAAA,EAAa,QAAQ,WAAe,IAAA,KAAA;AAAA,IACpC,WAAA,EAAa,QAAQ,WAAe,IAAA,KAAA;AAAA,IACpC,kBAAA,EAAoB,QAAQ,kBAAsB,IAAA,IAAA;AAAA,IAClD,cAAA,EAAgB,kBAAmB,CAAA,MAAA,EAAQ,OAAO,CAAA;AAAA,IAClD,mBAAA,EAAqB,QAAQ,mBAAuB,IAAA,KAAA;AAAA,IACpD,IAAA,EAAM,QAAQ,IAAQ,IAAA,KAAA;AAAA,IACtB,UAAA,EAAY,QAAQ,UAAc,IAAA,KAAA;AAAA,IAClC,WAAA,EAAa,QAAQ,WAAe,IAAA,KAAA;AAAA,IACpC,iBAAA,EAAmB,QAAQ,iBAAqB,IAAA,KAAA;AAAA,IAChD,UAAA,EAAY,QAAQ,UAAc,IAAA,KAAA;AAAA,IAClC,SAAA,EAAW,QAAQ,SAAa,IAAA,KAAA;AAAA,IAChC,SAAA,EAAW,QAAQ,SAAa,IAAA,KAAA;AAAA,IAChC,uBAAA,EAAyB,QAAQ,uBAA2B,IAAA,KAAA;AAAA,IAC5D,cAAc,EAAC;AAAA,IACf,iBAAA,EAAmB,QAAQ,iBAAqB,IAAA,KAAA;AAAA,IAChD,eAAe,OAAO,OAAA,CAAQ,aAAkB,KAAA,UAAA,GAAa,QAAQ,aAAgB,GAAA,MAAA;AAAA,IACrF,2BAAA,EAA6B,QAAQ,2BAA+B,IAAA,KAAA;AAAA,IACpE,KAAA;AAAA,IACA,MAAA,EAAQ,QAAQ,MAAU,IAAA,KAAA;AAAA,IAC1B,MAAA,EAAQ,QAAQ,MAAU,IAAA,MAAA;AAAA,IAC1B,WAAW,OAAO,OAAA,CAAQ,SAAc,KAAA,UAAA,GAAa,QAAQ,SAAY,GAAA,MAAA;AAAA,IACzE,mBAAmB,OAAO,OAAA,CAAQ,iBAAsB,KAAA,UAAA,GAAa,QAAQ,iBAAoB,GAAA,MAAA;AAAA,IACjG,aAAA,EAAe,QAAQ,aAAiB,IAAA,KAAA;AAAA,IACxC,kBAAA,EAAoB,QAAQ,kBAAsB,IAAA,KAAA;AAAA,IAClD,QAAQ,IAAM,EAAA;AACZ,MAAO,OAAA,UAAA,CAAW,QAAQ,IAAM,EAAA,EAAE,QAAQ,OAAQ,CAAA,MAAA,IAAU,OAAO,CAAA;AAAA;AACrE,GACF;AAEA,EAAM,MAAA,UAAA,GAAa,YAAY,GAAI,EAAA;AACnC,EAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,MAAA,EAAQ,GAAG,CAAA;AAC1C,EAAA,KAAA,CAAM,kDAAoD,EAAA,IAAA,EAAM,WAAY,CAAA,GAAA,KAAQ,UAAU,CAAA;AAE9F,EAAO,OAAA,MAAA;AACT;;;;"}
|
|
90
|
-
|
|
91
|
-
diff --git a/dist/lib/redoc.cjs.map b/dist/lib/redoc.cjs.map
|
|
92
|
-
index a2a2787140353f0c03c92da35ff821b38e8c63c1..58e029d34c204a4778645cbcfc8c6a921d498412 100644
|
|
93
|
-
--- a/dist/lib/redoc.cjs.map
|
|
94
|
-
+++ b/dist/lib/redoc.cjs.map
|
|
95
|
-
@@ -1 +1 @@
|
|
96
|
-
-{"version":3,"file":"redoc.cjs","sources":["../../src/lib/redoc.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport { Readable } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n BaseResolver,\n bundle,\n type Document,\n lintDocument,\n makeDocumentFromString,\n type NormalizedProblem,\n type Config as RedoclyConfig,\n Source,\n} from \"@redocly/openapi-core\";\nimport parseJson from \"parse-json\";\nimport type { OpenAPI3 } from \"../types.js\";\nimport { debug, error, warn } from \"./utils.js\";\n\nexport interface ValidateAndBundleOptions {\n redoc: RedoclyConfig;\n silent: boolean;\n cwd?: URL;\n}\n\ninterface ParseSchemaOptions {\n absoluteRef: string;\n resolver: BaseResolver;\n}\n\nexport async function parseSchema(schema: unknown, { absoluteRef, resolver }: ParseSchemaOptions): Promise<Document> {\n if (!schema) {\n throw new Error(\"Can’t parse empty schema\");\n }\n if (schema instanceof URL) {\n const result = await resolver.resolveDocument(null, absoluteRef, true);\n if (\"parsed\" in result) {\n return result;\n }\n throw result.originalError;\n }\n if (schema instanceof Readable) {\n const contents = await new Promise<string>((resolve) => {\n schema.resume();\n schema.setEncoding(\"utf8\");\n let content = \"\";\n schema.on(\"data\", (chunk: string) => {\n content += chunk;\n });\n schema.on(\"end\", () => {\n resolve(content.trim());\n });\n });\n return parseSchema(contents, { absoluteRef, resolver });\n }\n if (schema instanceof Buffer) {\n return parseSchema(schema.toString(\"utf8\"), { absoluteRef, resolver });\n }\n if (typeof schema === \"string\") {\n // URL\n if (schema.startsWith(\"http://\") || schema.startsWith(\"https://\") || schema.startsWith(\"file://\")) {\n const url = new URL(schema);\n return parseSchema(url, {\n absoluteRef: url.protocol === \"file:\" ? fileURLToPath(url) : url.href,\n resolver,\n });\n }\n // JSON\n if (schema[0] === \"{\") {\n return {\n source: new Source(absoluteRef, schema, \"application/json\"),\n parsed: parseJson(schema),\n };\n }\n // YAML\n return makeDocumentFromString(schema, absoluteRef);\n }\n if (typeof schema === \"object\" && !Array.isArray(schema)) {\n return {\n source: new Source(absoluteRef, JSON.stringify(schema), \"application/json\"),\n parsed: schema,\n };\n }\n throw new Error(`Expected string, object, or Buffer. Got ${Array.isArray(schema) ? \"Array\" : typeof schema}`);\n}\n\nfunction _processProblems(problems: NormalizedProblem[], options: { silent: boolean }) {\n if (problems.length) {\n let errorMessage: string | undefined = undefined;\n for (const problem of problems) {\n const problemLocation = problem.location?.[0].pointer;\n const problemMessage = problemLocation ? `${problem.message} at ${problemLocation}` : problem.message;\n if (problem.severity === \"error\") {\n errorMessage = problemMessage;\n error(problemMessage);\n } else {\n warn(problemMessage, options.silent);\n }\n }\n if (errorMessage) {\n throw new Error(errorMessage);\n }\n }\n}\n\n/**\n * Validate an OpenAPI schema and flatten into a single schema using Redocly CLI\n */\nexport async function validateAndBundle(\n source: string | URL | OpenAPI3 | Readable | Buffer,\n options: ValidateAndBundleOptions,\n) {\n const redocConfigT = performance.now();\n debug(\"Loaded Redoc config\", \"redoc\", performance.now() - redocConfigT);\n const redocParseT = performance.now();\n let absoluteRef = fileURLToPath(new URL(options?.cwd ?? `file://${process.cwd()}/`));\n if (source instanceof URL) {\n absoluteRef = source.protocol === \"file:\" ? fileURLToPath(source) : source.href;\n }\n const resolver = new BaseResolver(options.redoc.resolve);\n const document = await parseSchema(source, {\n absoluteRef,\n resolver,\n });\n debug(\"Parsed schema\", \"redoc\", performance.now() - redocParseT);\n\n // 1. check for OpenAPI 3 or greater\n const openapiVersion = Number.parseFloat(document.parsed.openapi);\n if (\n document.parsed.swagger ||\n !document.parsed.openapi ||\n Number.isNaN(openapiVersion) ||\n openapiVersion < 3 ||\n openapiVersion >= 4\n ) {\n if (document.parsed.swagger) {\n throw new Error(\"Unsupported Swagger version: 2.x. Use OpenAPI 3.x instead.\");\n }\n if (document.parsed.openapi || openapiVersion < 3 || openapiVersion >= 4) {\n throw new Error(`Unsupported OpenAPI version: ${document.parsed.openapi}`);\n }\n throw new Error(\"Unsupported schema format, expected `openapi: 3.x`\");\n }\n\n // 2. lint\n const redocLintT = performance.now();\n const problems = await lintDocument({\n document,\n config: options.redoc.styleguide,\n externalRefResolver: resolver,\n });\n _processProblems(problems, options);\n debug(\"Linted schema\", \"lint\", performance.now() - redocLintT);\n\n // 3. bundle\n const redocBundleT = performance.now();\n const bundled = await bundle({\n config: options.redoc,\n dereference: false,\n doc: document,\n });\n _processProblems(bundled.problems, options);\n debug(\"Bundled schema\", \"bundle\", performance.now() - redocBundleT);\n\n return bundled.bundle.parsed;\n}\n"],"names":["Readable","fileURLToPath","Source","parseJson","makeDocumentFromString","error","warn","performance","debug","BaseResolver","lintDocument","bundle"],"mappings":"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"}
|
|
97
|
-
|
|
98
|
-
+{"version":3,"file":"redoc.cjs","sources":["../../src/lib/redoc.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport { Readable } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n BaseResolver,\n bundle,\n type Document,\n lintDocument,\n makeDocumentFromString,\n type NormalizedProblem,\n type Config as RedoclyConfig,\n Source,\n} from \"@redocly/openapi-core\";\nimport parseJson from \"parse-json\";\nimport type { OpenAPI3 } from \"../types.js\";\nimport { debug, error, warn } from \"./utils.js\";\n\nexport interface ValidateAndBundleOptions {\n redoc: RedoclyConfig;\n silent: boolean;\n cwd?: URL;\n}\n\ninterface ParseSchemaOptions {\n absoluteRef: string;\n resolver: BaseResolver;\n}\n\nexport async function parseSchema(schema: unknown, { absoluteRef, resolver }: ParseSchemaOptions): Promise<Document> {\n if (!schema) {\n throw new Error(\"Can’t parse empty schema\");\n }\n if (schema instanceof URL) {\n const result = await resolver.resolveDocument(null, absoluteRef, true);\n if (\"parsed\" in result) {\n return result;\n }\n throw result.originalError;\n }\n if (schema instanceof Readable) {\n const contents = await new Promise<string>((resolve) => {\n schema.resume();\n schema.setEncoding(\"utf8\");\n let content = \"\";\n schema.on(\"data\", (chunk: string) => {\n content += chunk;\n });\n schema.on(\"end\", () => {\n resolve(content.trim());\n });\n });\n return parseSchema(contents, { absoluteRef, resolver });\n }\n if (schema instanceof Buffer) {\n return parseSchema(schema.toString(\"utf8\"), { absoluteRef, resolver });\n }\n if (typeof schema === \"string\") {\n // URL\n if (schema.startsWith(\"http://\") || schema.startsWith(\"https://\") || schema.startsWith(\"file://\")) {\n const url = new URL(schema);\n return parseSchema(url, {\n absoluteRef: url.protocol === \"file:\" ? fileURLToPath(url) : url.href,\n resolver,\n });\n }\n // JSON\n if (schema[0] === \"{\") {\n return {\n source: new Source(absoluteRef, schema, \"application/json\"),\n parsed: parseJson(schema),\n };\n }\n // YAML\n return makeDocumentFromString(schema, absoluteRef);\n }\n if (typeof schema === \"object\" && !Array.isArray(schema)) {\n return {\n source: new Source(absoluteRef, JSON.stringify(schema), \"application/json\"),\n parsed: schema,\n };\n }\n throw new Error(`Expected string, object, or Buffer. Got ${Array.isArray(schema) ? \"Array\" : typeof schema}`);\n}\n\nfunction _processProblems(problems: NormalizedProblem[], options: { silent: boolean }) {\n if (problems.length) {\n let errorMessage: string | undefined = undefined;\n for (const problem of problems) {\n const problemLocation = problem.location?.[0].pointer;\n const problemMessage = problemLocation ? `${problem.message} at ${problemLocation}` : problem.message;\n if (problem.severity === \"error\") {\n errorMessage = problemMessage;\n error(problemMessage);\n } else {\n warn(problemMessage, options.silent);\n }\n }\n if (errorMessage) {\n throw new Error(errorMessage);\n }\n }\n}\n\n/**\n * Validate an OpenAPI schema and flatten into a single schema using Redocly CLI\n */\nexport async function validateAndBundle(\n source: string | URL | OpenAPI3 | Readable | Buffer,\n options: ValidateAndBundleOptions,\n) {\n const redocConfigT = performance.now();\n debug(\"Loaded Redoc config\", \"redoc\", performance.now() - redocConfigT);\n const redocParseT = performance.now();\n let absoluteRef = fileURLToPath(new URL(options?.cwd ?? `file://${process.cwd()}/`));\n if (source instanceof URL) {\n absoluteRef = source.protocol === \"file:\" ? fileURLToPath(source) : source.href;\n }\n const resolver = new BaseResolver(options.redoc.resolve);\n const document = await parseSchema(source, {\n absoluteRef,\n resolver,\n });\n debug(\"Parsed schema\", \"redoc\", performance.now() - redocParseT);\n\n // 1. check for OpenAPI 3 or greater\n const openapiVersion = Number.parseFloat(document.parsed.openapi);\n if (\n document.parsed.swagger ||\n !document.parsed.openapi ||\n Number.isNaN(openapiVersion) ||\n openapiVersion < 3 ||\n openapiVersion >= 4\n ) {\n if (document.parsed.swagger) {\n throw new Error(\"Unsupported Swagger version: 2.x. Use OpenAPI 3.x instead.\");\n }\n if (document.parsed.openapi || openapiVersion < 3 || openapiVersion >= 4) {\n throw new Error(`Unsupported OpenAPI version: ${document.parsed.openapi}`);\n }\n throw new Error(\"Unsupported schema format, expected `openapi: 3.x`\");\n }\n\n // 2. lint\n const redocLintT = performance.now();\n const problems = await lintDocument({\n document,\n config: options.redoc.styleguide,\n externalRefResolver: resolver,\n });\n _processProblems(problems, options);\n debug(\"Linted schema\", \"lint\", performance.now() - redocLintT);\n\n // 3. bundle\n const redocBundleT = performance.now();\n const bundled = await bundle({\n config: options.redoc,\n dereference: false,\n doc: document,\n });\n _processProblems(bundled.problems, options);\n debug(\"Bundled schema\", \"bundle\", performance.now() - redocBundleT);\n\n return bundled.bundle.parsed;\n}\n"],"names":["Readable","fileURLToPath","Source","parseJson","makeDocumentFromString","error","warn","performance","debug","BaseResolver","lintDocument","bundle"],"mappings":"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"}
|
|
99
|
-
|
|
100
|
-
diff --git a/dist/lib/redoc.mjs.map b/dist/lib/redoc.mjs.map
|
|
101
|
-
index 3128ca75d0205067f3410850e47b210dd7480311..bcf6103014f1916e96a4cfc36a8efa3a445cdd11 100644
|
|
102
|
-
--- a/dist/lib/redoc.mjs.map
|
|
103
|
-
+++ b/dist/lib/redoc.mjs.map
|
|
104
|
-
@@ -1 +1 @@
|
|
105
|
-
-{"version":3,"file":"redoc.mjs","sources":["../../src/lib/redoc.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport { Readable } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n BaseResolver,\n bundle,\n type Document,\n lintDocument,\n makeDocumentFromString,\n type NormalizedProblem,\n type Config as RedoclyConfig,\n Source,\n} from \"@redocly/openapi-core\";\nimport parseJson from \"parse-json\";\nimport type { OpenAPI3 } from \"../types.js\";\nimport { debug, error, warn } from \"./utils.js\";\n\nexport interface ValidateAndBundleOptions {\n redoc: RedoclyConfig;\n silent: boolean;\n cwd?: URL;\n}\n\ninterface ParseSchemaOptions {\n absoluteRef: string;\n resolver: BaseResolver;\n}\n\nexport async function parseSchema(schema: unknown, { absoluteRef, resolver }: ParseSchemaOptions): Promise<Document> {\n if (!schema) {\n throw new Error(\"Can’t parse empty schema\");\n }\n if (schema instanceof URL) {\n const result = await resolver.resolveDocument(null, absoluteRef, true);\n if (\"parsed\" in result) {\n return result;\n }\n throw result.originalError;\n }\n if (schema instanceof Readable) {\n const contents = await new Promise<string>((resolve) => {\n schema.resume();\n schema.setEncoding(\"utf8\");\n let content = \"\";\n schema.on(\"data\", (chunk: string) => {\n content += chunk;\n });\n schema.on(\"end\", () => {\n resolve(content.trim());\n });\n });\n return parseSchema(contents, { absoluteRef, resolver });\n }\n if (schema instanceof Buffer) {\n return parseSchema(schema.toString(\"utf8\"), { absoluteRef, resolver });\n }\n if (typeof schema === \"string\") {\n // URL\n if (schema.startsWith(\"http://\") || schema.startsWith(\"https://\") || schema.startsWith(\"file://\")) {\n const url = new URL(schema);\n return parseSchema(url, {\n absoluteRef: url.protocol === \"file:\" ? fileURLToPath(url) : url.href,\n resolver,\n });\n }\n // JSON\n if (schema[0] === \"{\") {\n return {\n source: new Source(absoluteRef, schema, \"application/json\"),\n parsed: parseJson(schema),\n };\n }\n // YAML\n return makeDocumentFromString(schema, absoluteRef);\n }\n if (typeof schema === \"object\" && !Array.isArray(schema)) {\n return {\n source: new Source(absoluteRef, JSON.stringify(schema), \"application/json\"),\n parsed: schema,\n };\n }\n throw new Error(`Expected string, object, or Buffer. Got ${Array.isArray(schema) ? \"Array\" : typeof schema}`);\n}\n\nfunction _processProblems(problems: NormalizedProblem[], options: { silent: boolean }) {\n if (problems.length) {\n let errorMessage: string | undefined = undefined;\n for (const problem of problems) {\n const problemLocation = problem.location?.[0].pointer;\n const problemMessage = problemLocation ? `${problem.message} at ${problemLocation}` : problem.message;\n if (problem.severity === \"error\") {\n errorMessage = problemMessage;\n error(problemMessage);\n } else {\n warn(problemMessage, options.silent);\n }\n }\n if (errorMessage) {\n throw new Error(errorMessage);\n }\n }\n}\n\n/**\n * Validate an OpenAPI schema and flatten into a single schema using Redocly CLI\n */\nexport async function validateAndBundle(\n source: string | URL | OpenAPI3 | Readable | Buffer,\n options: ValidateAndBundleOptions,\n) {\n const redocConfigT = performance.now();\n debug(\"Loaded Redoc config\", \"redoc\", performance.now() - redocConfigT);\n const redocParseT = performance.now();\n let absoluteRef = fileURLToPath(new URL(options?.cwd ?? `file://${process.cwd()}/`));\n if (source instanceof URL) {\n absoluteRef = source.protocol === \"file:\" ? fileURLToPath(source) : source.href;\n }\n const resolver = new BaseResolver(options.redoc.resolve);\n const document = await parseSchema(source, {\n absoluteRef,\n resolver,\n });\n debug(\"Parsed schema\", \"redoc\", performance.now() - redocParseT);\n\n // 1. check for OpenAPI 3 or greater\n const openapiVersion = Number.parseFloat(document.parsed.openapi);\n if (\n document.parsed.swagger ||\n !document.parsed.openapi ||\n Number.isNaN(openapiVersion) ||\n openapiVersion < 3 ||\n openapiVersion >= 4\n ) {\n if (document.parsed.swagger) {\n throw new Error(\"Unsupported Swagger version: 2.x. Use OpenAPI 3.x instead.\");\n }\n if (document.parsed.openapi || openapiVersion < 3 || openapiVersion >= 4) {\n throw new Error(`Unsupported OpenAPI version: ${document.parsed.openapi}`);\n }\n throw new Error(\"Unsupported schema format, expected `openapi: 3.x`\");\n }\n\n // 2. lint\n const redocLintT = performance.now();\n const problems = await lintDocument({\n document,\n config: options.redoc.styleguide,\n externalRefResolver: resolver,\n });\n _processProblems(problems, options);\n debug(\"Linted schema\", \"lint\", performance.now() - redocLintT);\n\n // 3. bundle\n const redocBundleT = performance.now();\n const bundled = await bundle({\n config: options.redoc,\n dereference: false,\n doc: document,\n });\n _processProblems(bundled.problems, options);\n debug(\"Bundled schema\", \"bundle\", performance.now() - redocBundleT);\n\n return bundled.bundle.parsed;\n}\n"],"names":[],"mappings":"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"}
|
|
106
|
-
|
|
107
|
-
+{"version":3,"file":"redoc.mjs","sources":["../../src/lib/redoc.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport { Readable } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n BaseResolver,\n bundle,\n type Document,\n lintDocument,\n makeDocumentFromString,\n type NormalizedProblem,\n type Config as RedoclyConfig,\n Source,\n} from \"@redocly/openapi-core\";\nimport parseJson from \"parse-json\";\nimport type { OpenAPI3 } from \"../types.js\";\nimport { debug, error, warn } from \"./utils.js\";\n\nexport interface ValidateAndBundleOptions {\n redoc: RedoclyConfig;\n silent: boolean;\n cwd?: URL;\n}\n\ninterface ParseSchemaOptions {\n absoluteRef: string;\n resolver: BaseResolver;\n}\n\nexport async function parseSchema(schema: unknown, { absoluteRef, resolver }: ParseSchemaOptions): Promise<Document> {\n if (!schema) {\n throw new Error(\"Can’t parse empty schema\");\n }\n if (schema instanceof URL) {\n const result = await resolver.resolveDocument(null, absoluteRef, true);\n if (\"parsed\" in result) {\n return result;\n }\n throw result.originalError;\n }\n if (schema instanceof Readable) {\n const contents = await new Promise<string>((resolve) => {\n schema.resume();\n schema.setEncoding(\"utf8\");\n let content = \"\";\n schema.on(\"data\", (chunk: string) => {\n content += chunk;\n });\n schema.on(\"end\", () => {\n resolve(content.trim());\n });\n });\n return parseSchema(contents, { absoluteRef, resolver });\n }\n if (schema instanceof Buffer) {\n return parseSchema(schema.toString(\"utf8\"), { absoluteRef, resolver });\n }\n if (typeof schema === \"string\") {\n // URL\n if (schema.startsWith(\"http://\") || schema.startsWith(\"https://\") || schema.startsWith(\"file://\")) {\n const url = new URL(schema);\n return parseSchema(url, {\n absoluteRef: url.protocol === \"file:\" ? fileURLToPath(url) : url.href,\n resolver,\n });\n }\n // JSON\n if (schema[0] === \"{\") {\n return {\n source: new Source(absoluteRef, schema, \"application/json\"),\n parsed: parseJson(schema),\n };\n }\n // YAML\n return makeDocumentFromString(schema, absoluteRef);\n }\n if (typeof schema === \"object\" && !Array.isArray(schema)) {\n return {\n source: new Source(absoluteRef, JSON.stringify(schema), \"application/json\"),\n parsed: schema,\n };\n }\n throw new Error(`Expected string, object, or Buffer. Got ${Array.isArray(schema) ? \"Array\" : typeof schema}`);\n}\n\nfunction _processProblems(problems: NormalizedProblem[], options: { silent: boolean }) {\n if (problems.length) {\n let errorMessage: string | undefined = undefined;\n for (const problem of problems) {\n const problemLocation = problem.location?.[0].pointer;\n const problemMessage = problemLocation ? `${problem.message} at ${problemLocation}` : problem.message;\n if (problem.severity === \"error\") {\n errorMessage = problemMessage;\n error(problemMessage);\n } else {\n warn(problemMessage, options.silent);\n }\n }\n if (errorMessage) {\n throw new Error(errorMessage);\n }\n }\n}\n\n/**\n * Validate an OpenAPI schema and flatten into a single schema using Redocly CLI\n */\nexport async function validateAndBundle(\n source: string | URL | OpenAPI3 | Readable | Buffer,\n options: ValidateAndBundleOptions,\n) {\n const redocConfigT = performance.now();\n debug(\"Loaded Redoc config\", \"redoc\", performance.now() - redocConfigT);\n const redocParseT = performance.now();\n let absoluteRef = fileURLToPath(new URL(options?.cwd ?? `file://${process.cwd()}/`));\n if (source instanceof URL) {\n absoluteRef = source.protocol === \"file:\" ? fileURLToPath(source) : source.href;\n }\n const resolver = new BaseResolver(options.redoc.resolve);\n const document = await parseSchema(source, {\n absoluteRef,\n resolver,\n });\n debug(\"Parsed schema\", \"redoc\", performance.now() - redocParseT);\n\n // 1. check for OpenAPI 3 or greater\n const openapiVersion = Number.parseFloat(document.parsed.openapi);\n if (\n document.parsed.swagger ||\n !document.parsed.openapi ||\n Number.isNaN(openapiVersion) ||\n openapiVersion < 3 ||\n openapiVersion >= 4\n ) {\n if (document.parsed.swagger) {\n throw new Error(\"Unsupported Swagger version: 2.x. Use OpenAPI 3.x instead.\");\n }\n if (document.parsed.openapi || openapiVersion < 3 || openapiVersion >= 4) {\n throw new Error(`Unsupported OpenAPI version: ${document.parsed.openapi}`);\n }\n throw new Error(\"Unsupported schema format, expected `openapi: 3.x`\");\n }\n\n // 2. lint\n const redocLintT = performance.now();\n const problems = await lintDocument({\n document,\n config: options.redoc.styleguide,\n externalRefResolver: resolver,\n });\n _processProblems(problems, options);\n debug(\"Linted schema\", \"lint\", performance.now() - redocLintT);\n\n // 3. bundle\n const redocBundleT = performance.now();\n const bundled = await bundle({\n config: options.redoc,\n dereference: false,\n doc: document,\n });\n _processProblems(bundled.problems, options);\n debug(\"Bundled schema\", \"bundle\", performance.now() - redocBundleT);\n\n return bundled.bundle.parsed;\n}\n"],"names":[],"mappings":"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"}
|
|
108
|
-
|
|
109
|
-
diff --git a/dist/lib/ts.cjs b/dist/lib/ts.cjs
|
|
110
|
-
index f82d2112011268c636186732d8f6418fae037e78..7c7e8349cdf13fa046e013878f707ad76ae55a23 100644
|
|
111
|
-
--- a/dist/lib/ts.cjs
|
|
112
|
-
+++ b/dist/lib/ts.cjs
|
|
113
|
-
@@ -108,7 +108,7 @@ function addIndexedAccess(node, ...segments) {
|
|
114
|
-
);
|
|
115
|
-
}, node);
|
|
116
|
-
}
|
|
117
|
-
-function oapiRef(path, resolved) {
|
|
118
|
-
+function oapiRef(path, resolved, deep = false) {
|
|
119
|
-
const { pointer } = refUtils_js.parseRef(path);
|
|
120
|
-
if (pointer.length === 0) {
|
|
121
|
-
throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);
|
|
122
|
-
@@ -118,7 +118,9 @@ function oapiRef(path, resolved) {
|
|
123
|
-
const leadingSegments = pointer.slice(1, 3);
|
|
124
|
-
const restSegments = pointer.slice(3);
|
|
125
|
-
const leadingType = addIndexedAccess(
|
|
126
|
-
- ts__default.factory.createTypeReferenceNode(ts__default.factory.createIdentifier(String(initialSegment))),
|
|
127
|
-
+ ts__default.factory.createTypeReferenceNode(
|
|
128
|
-
+ ts__default.factory.createIdentifier(deep ? `FlattenedDeepRequired<${String(initialSegment)}>` : String(initialSegment))
|
|
129
|
-
+ ),
|
|
130
|
-
...leadingSegments
|
|
131
|
-
);
|
|
132
|
-
return restSegments.reduce((acc, segment, index, original) => {
|
|
133
|
-
@@ -205,6 +207,14 @@ function tsEnum(name, members, metadata, options) {
|
|
134
|
-
function tsArrayLiteralExpression(name, elementType, values, options) {
|
|
135
|
-
let variableName = sanitizeMemberName(name);
|
|
136
|
-
variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;
|
|
137
|
-
+ if (options?.injectFooter && !options.injectFooter.some(
|
|
138
|
-
+ (node) => ts__default.isTypeAliasDeclaration(node) && node?.name?.escapedText === "FlattenedDeepRequired"
|
|
139
|
-
+ )) {
|
|
140
|
-
+ const helper = stringToAST(
|
|
141
|
-
+ "type FlattenedDeepRequired<T> = { [K in keyof T]-?: FlattenedDeepRequired<T[K] extends unknown[] | undefined | null ? Extract<T[K], unknown[]>[number] : T[K]>; };"
|
|
142
|
-
+ )[0];
|
|
143
|
-
+ options.injectFooter.push(helper);
|
|
144
|
-
+ }
|
|
145
|
-
const arrayType = options?.readonly ? tsReadonlyArray(elementType, options.injectFooter) : ts__default.factory.createArrayTypeNode(elementType);
|
|
146
|
-
return ts__default.factory.createVariableStatement(
|
|
147
|
-
options ? tsModifiers({ export: options.export ?? false }) : void 0,
|
|
148
|
-
diff --git a/dist/lib/ts.cjs.map b/dist/lib/ts.cjs.map
|
|
149
|
-
index abbfe7849fcbc2f8452f27bf4af9afb3260690ab..a26704d602db405d817b068aef1c44b10eee2267 100644
|
|
150
|
-
--- a/dist/lib/ts.cjs.map
|
|
151
|
-
+++ b/dist/lib/ts.cjs.map
|
|
152
|
-
@@ -1 +1 @@
|
|
153
|
-
-{"version":3,"file":"ts.cjs","sources":["../../src/lib/ts.ts"],"sourcesContent":["import type { OasRef, Referenced } from \"@redocly/openapi-core\";\nimport { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts, { type LiteralTypeNode, type TypeLiteralNode } from \"typescript\";\nimport type { ParameterObject } from \"../types.js\";\n\nexport const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;\nexport const JS_ENUM_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+(.)?/g;\nexport const JS_PROPERTY_INDEX_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+/g;\nexport const SPECIAL_CHARACTER_MAP: Record<string, string> = {\n \"+\": \"Plus\",\n // Add more mappings as needed\n};\n\nexport const BOOLEAN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);\nexport const FALSE = ts.factory.createLiteralTypeNode(ts.factory.createFalse());\nexport const NEVER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);\nexport const NULL = ts.factory.createLiteralTypeNode(ts.factory.createNull());\nexport const NUMBER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);\nexport const QUESTION_TOKEN = ts.factory.createToken(ts.SyntaxKind.QuestionToken);\nexport const STRING = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);\nexport const TRUE = ts.factory.createLiteralTypeNode(ts.factory.createTrue());\nexport const UNDEFINED = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword);\nexport const UNKNOWN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n\nconst LB_RE = /\\r?\\n/g;\nconst COMMENT_RE = /\\*\\//g;\n\nexport interface AnnotatedSchemaObject {\n const?: unknown; // jsdoc without value\n default?: unknown; // jsdoc with value\n deprecated?: boolean; // jsdoc without value\n description?: string; // jsdoc with value\n enum?: unknown[]; // jsdoc without value\n example?: string; // jsdoc with value\n examples?: unknown;\n format?: string; // not jsdoc\n nullable?: boolean; // Node information\n summary?: string; // not jsdoc\n title?: string; // not jsdoc\n type?: string | string[]; // Type of node\n}\n\n/**\n * Preparing comments from fields\n * @see {comment} for output examples\n * @returns void if not comments or jsdoc format comment string\n */\nexport function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void {\n if (!schemaObject || typeof schemaObject !== \"object\" || Array.isArray(schemaObject)) {\n return;\n }\n const output: string[] = [];\n\n // Not JSDoc tags: [title, format]\n if (schemaObject.title) {\n output.push(schemaObject.title.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.summary) {\n output.push(schemaObject.summary.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.format) {\n output.push(`Format: ${schemaObject.format}`);\n }\n\n // JSDoc tags without value\n // 'Deprecated' without value\n if (schemaObject.deprecated) {\n output.push(\"@deprecated\");\n }\n\n // JSDoc tags with value\n const supportedJsDocTags = [\"description\", \"default\", \"example\"] as const;\n for (const field of supportedJsDocTags) {\n const allowEmptyString = field === \"default\" || field === \"example\";\n if (schemaObject[field] === undefined) {\n continue;\n }\n if (schemaObject[field] === \"\" && !allowEmptyString) {\n continue;\n }\n const serialized =\n typeof schemaObject[field] === \"object\" ? JSON.stringify(schemaObject[field], null, 2) : schemaObject[field];\n output.push(`@${field} ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n\n if (Array.isArray(schemaObject.examples)) {\n for (const example of schemaObject.examples) {\n const serialized = typeof example === \"object\" ? JSON.stringify(example, null, 2) : example;\n output.push(`@example ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n }\n\n // JSDoc 'Constant' without value\n if (\"const\" in schemaObject) {\n output.push(\"@constant\");\n }\n\n // JSDoc 'Enum' with type\n if (schemaObject.enum) {\n let type = \"unknown\";\n if (Array.isArray(schemaObject.type)) {\n type = schemaObject.type.join(\"|\");\n } else if (typeof schemaObject.type === \"string\") {\n type = schemaObject.type;\n }\n output.push(`@enum {${type}${schemaObject.nullable ? \"|null\" : \"\"}}`);\n }\n\n // attach comment if it has content\n\n if (output.length) {\n // Check if any output item contains multi-line content (has internal line breaks)\n const hasMultiLineContent = output.some((item) => item.includes(\"\\n\"));\n\n let text =\n output.length === 1 && !hasMultiLineContent ? `* ${output.join(\"\\n\")} ` : `*\\n * ${output.join(\"\\n * \")}\\n `;\n text = text.replace(COMMENT_RE, \"*\\\\/\"); // prevent inner comments from leaking\n\n ts.addSyntheticLeadingComment(\n /* node */ node,\n /* kind */ ts.SyntaxKind.MultiLineCommentTrivia, // note: MultiLine just refers to a \"/* */\" comment\n /* text */ text,\n /* hasTrailingNewLine */ true,\n );\n }\n}\n\nfunction isOasRef<T>(obj: Referenced<T>): obj is OasRef {\n return Boolean((obj as OasRef).$ref);\n}\ntype OapiRefResolved = Referenced<ParameterObject>;\n\nfunction isParameterObject(obj: OapiRefResolved | undefined): obj is ParameterObject {\n return Boolean(obj && !isOasRef(obj) && obj.in);\n}\n\nfunction addIndexedAccess(node: ts.TypeReferenceNode | ts.IndexedAccessTypeNode, ...segments: readonly string[]) {\n return segments.reduce((acc, segment) => {\n return ts.factory.createIndexedAccessTypeNode(\n acc,\n ts.factory.createLiteralTypeNode(\n typeof segment === \"number\"\n ? ts.factory.createNumericLiteral(segment)\n : ts.factory.createStringLiteral(segment),\n ),\n );\n }, node);\n}\n\n/**\n * Convert OpenAPI ref into TS indexed access node (ex: `components[\"schemas\"][\"Foo\"]`)\n * `path` is a JSON Pointer to a location within an OpenAPI document.\n * Transform it into a TypeScript type reference into the generated types.\n *\n * In most cases the structures of the openapi-typescript generated types and the\n * JSON Pointer paths into the OpenAPI document are the same. However, in some cases\n * special transformations are necessary to account for the ways they differ.\n * * Object schemas\n * $refs into the `properties` of object schemas are valid, but openapi-typescript\n * flattens these objects, so we omit so the index into the schema skips [\"properties\"]\n * * Parameters\n * $refs into the `parameters` of paths are valid, but openapi-ts represents\n * them according to their type; path, query, header, etc… so in these cases we\n * must check the parameter definition to determine the how to index into\n * the openapi-typescript type.\n **/\nexport function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode {\n const { pointer } = parseRef(path);\n if (pointer.length === 0) {\n throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);\n }\n\n const parametersObject = isParameterObject(resolved);\n\n // Initial segments are handled in a fixed , then remaining segments are treated\n // according to heuristics based on the initial segments\n const initialSegment = pointer[0];\n const leadingSegments = pointer.slice(1, 3);\n const restSegments = pointer.slice(3);\n\n const leadingType = addIndexedAccess(\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(String(initialSegment))),\n ...leadingSegments,\n );\n\n return restSegments.reduce<ts.TypeReferenceNode | ts.IndexedAccessTypeNode>((acc, segment, index, original) => {\n // Skip `properties` items when in the middle of the pointer\n // See: https://github.com/openapi-ts/openapi-typescript/issues/1742\n if (segment === \"properties\") {\n return acc;\n }\n\n if (parametersObject && index === original.length - 1) {\n return addIndexedAccess(acc, resolved.in, resolved.name);\n }\n\n return addIndexedAccess(acc, segment);\n }, leadingType);\n}\n\nexport interface AstToStringOptions {\n fileName?: string;\n sourceText?: string;\n formatOptions?: ts.PrinterOptions;\n}\n\n/** Convert TypeScript AST to string */\nexport function astToString(\n ast: ts.Node | ts.Node[] | ts.TypeElement | ts.TypeElement[],\n options?: AstToStringOptions,\n): string {\n const sourceFile = ts.createSourceFile(\n options?.fileName ?? \"openapi-ts.ts\",\n options?.sourceText ?? \"\",\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n\n // @ts-expect-error it’s OK to overwrite statements once\n sourceFile.statements = ts.factory.createNodeArray(Array.isArray(ast) ? ast : [ast]);\n\n const printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n ...options?.formatOptions,\n });\n return printer.printFile(sourceFile);\n}\n\n/** Convert an arbitrary string to TS (assuming it’s valid) */\nexport function stringToAST(source: string): unknown[] {\n return ts.createSourceFile(\n /* fileName */ \"stringInput\",\n /* sourceText */ source,\n /* languageVersion */ ts.ScriptTarget.ESNext,\n /* setParentNodes */ undefined,\n /* scriptKind */ undefined,\n ).statements as any;\n}\n\n/**\n * Deduplicate simple primitive types from an array of nodes\n * Note: won’t deduplicate complex types like objects\n */\nexport function tsDedupe(types: ts.TypeNode[]): ts.TypeNode[] {\n const encounteredTypes = new Set<number>();\n const filteredTypes: ts.TypeNode[] = [];\n for (const t of types) {\n // only mark for deduplication if this is not a const (\"text\" means it is a const)\n if (!(\"text\" in ((t as LiteralTypeNode).literal ?? t))) {\n const { kind } = (t as LiteralTypeNode).literal ?? t;\n if (encounteredTypes.has(kind)) {\n continue;\n }\n if (tsIsPrimitive(t)) {\n encounteredTypes.add(kind);\n }\n }\n filteredTypes.push(t);\n }\n return filteredTypes;\n}\n\nexport const enumCache = new Map<string, ts.EnumDeclaration>();\n\n/** Create a TS enum (with sanitized name and members) */\nexport function tsEnum(\n name: string,\n members: (string | number)[],\n metadata?: { name?: string; description?: string | null }[],\n options?: { export?: boolean; shouldCache?: boolean },\n) {\n let enumName = sanitizeMemberName(name);\n enumName = `${enumName[0].toUpperCase()}${enumName.substring(1)}`;\n let key = \"\";\n if (options?.shouldCache) {\n key = `${members\n .slice(0)\n .sort()\n .map((v, i) => {\n return `${metadata?.[i]?.name ?? String(v)}:${metadata?.[i]?.description || \"\"}`;\n })\n .join(\",\")}`;\n if (enumCache.has(key)) {\n return enumCache.get(key) as ts.EnumDeclaration;\n }\n }\n const enumDeclaration = ts.factory.createEnumDeclaration(\n /* modifiers */ options ? tsModifiers({ export: options.export ?? false }) : undefined,\n /* name */ enumName,\n /* members */ members.map((value, i) => tsEnumMember(value, metadata?.[i])),\n );\n options?.shouldCache && enumCache.set(key, enumDeclaration);\n return enumDeclaration;\n}\n\n/** Create an exported TS array literal expression */\nexport function tsArrayLiteralExpression(\n name: string,\n elementType: ts.TypeNode,\n values: (string | number)[],\n options?: { export?: boolean; readonly?: boolean; injectFooter?: ts.Node[] },\n) {\n let variableName = sanitizeMemberName(name);\n variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;\n\n const arrayType = options?.readonly\n ? tsReadonlyArray(elementType, options.injectFooter)\n : ts.factory.createArrayTypeNode(elementType);\n\n return ts.factory.createVariableStatement(\n options ? tsModifiers({ export: options.export ?? false }) : undefined,\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n variableName,\n undefined,\n arrayType,\n ts.factory.createArrayLiteralExpression(\n values.map((value) => {\n if (typeof value === \"number\") {\n if (value < 0) {\n return ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n );\n } else {\n return ts.factory.createNumericLiteral(value);\n }\n } else {\n return ts.factory.createStringLiteral(value);\n }\n }),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n}\n\nfunction sanitizeMemberName(name: string) {\n let sanitizedName = name.replace(JS_ENUM_INVALID_CHARS_RE, (c) => {\n const last = c[c.length - 1];\n return JS_PROPERTY_INDEX_INVALID_CHARS_RE.test(last) ? \"\" : last.toUpperCase();\n });\n if (Number(name[0]) >= 0) {\n sanitizedName = `Value${name}`;\n }\n return sanitizedName;\n}\n\n/** Sanitize TS enum member expression */\nexport function tsEnumMember(value: string | number, metadata: { name?: string; description?: string | null } = {}) {\n let name = metadata.name ?? String(value);\n if (!JS_PROPERTY_INDEX_RE.test(name)) {\n if (Number(name[0]) >= 0) {\n name = `Value${name}`.replace(\".\", \"_\"); // don't forged decimals;\n } else if (name[0] === \"-\") {\n name = `ValueMinus${name.slice(1)}`;\n }\n\n const invalidCharMatch = name.match(JS_PROPERTY_INDEX_INVALID_CHARS_RE);\n if (invalidCharMatch) {\n if (invalidCharMatch[0] === name) {\n name = `\"${name}\"`;\n } else {\n name = name.replace(JS_PROPERTY_INDEX_INVALID_CHARS_RE, (s) => {\n return s in SPECIAL_CHARACTER_MAP ? SPECIAL_CHARACTER_MAP[s] : \"_\";\n });\n }\n }\n }\n\n let member: ts.EnumMember;\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n\n member = ts.factory.createEnumMember(name, literal);\n } else {\n member = ts.factory.createEnumMember(name, ts.factory.createStringLiteral(value));\n }\n\n const trimmedDescription = metadata.description?.trim();\n if (trimmedDescription === undefined || trimmedDescription === null || trimmedDescription === \"\") {\n return member;\n }\n\n return ts.addSyntheticLeadingComment(member, ts.SyntaxKind.SingleLineCommentTrivia, ` ${trimmedDescription}`, true);\n}\n\n/** Create an intersection type */\nexport function tsIntersection(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createIntersectionTypeNode(tsDedupe(types));\n}\n\n/** Is this a primitive type (string, number, boolean, null, undefined)? */\nexport function tsIsPrimitive(type: ts.TypeNode): boolean {\n if (!type) {\n return true;\n }\n return (\n ts.SyntaxKind[type.kind] === \"BooleanKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NeverKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NullKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NumberKeyword\" ||\n ts.SyntaxKind[type.kind] === \"StringKeyword\" ||\n ts.SyntaxKind[type.kind] === \"UndefinedKeyword\" ||\n (\"literal\" in type && tsIsPrimitive(type.literal as TypeLiteralNode))\n );\n}\n\n/** Create a literal type */\nexport function tsLiteral(value: unknown): ts.TypeNode {\n if (typeof value === \"string\") {\n // workaround for UTF-8: https://github.com/microsoft/TypeScript/issues/36174\n return ts.factory.createIdentifier(JSON.stringify(value)) as unknown as ts.TypeNode;\n }\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n return ts.factory.createLiteralTypeNode(literal);\n }\n if (typeof value === \"boolean\") {\n return value === true ? TRUE : FALSE;\n }\n if (value === null) {\n return NULL;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return ts.factory.createArrayTypeNode(NEVER);\n }\n return ts.factory.createTupleTypeNode(value.map((v: unknown) => tsLiteral(v)));\n }\n if (typeof value === \"object\") {\n const keys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(value)) {\n keys.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ tsLiteral(v),\n ),\n );\n }\n return keys.length ? ts.factory.createTypeLiteralNode(keys) : tsRecord(STRING, NEVER);\n }\n return UNKNOWN;\n}\n\n/** Modifiers (readonly) */\nexport function tsModifiers(modifiers: { readonly?: boolean; export?: boolean }): ts.Modifier[] {\n const typeMods: ts.Modifier[] = [];\n if (modifiers.export) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ExportKeyword));\n }\n if (modifiers.readonly) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword));\n }\n return typeMods;\n}\n\n/** Create a T | null union */\nexport function tsNullable(types: ts.TypeNode[]): ts.TypeNode {\n return ts.factory.createUnionTypeNode([...types, NULL]);\n}\n\n/** Create a TS Omit<X, Y> type */\nexport function tsOmit(type: ts.TypeNode, keys: string[]): ts.TypeNode {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Omit\"), [\n type,\n ts.factory.createUnionTypeNode(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/** Create a TS Record<X, Y> type */\nexport function tsRecord(key: ts.TypeNode, value: ts.TypeNode) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Record\"), [key, value]);\n}\n\n/** Create a valid property index */\nexport function tsPropertyIndex(index: string | number) {\n if (\n (typeof index === \"number\" && !(index < 0)) ||\n (typeof index === \"string\" && String(Number(index)) === index && index[0] !== \"-\")\n ) {\n return ts.factory.createNumericLiteral(index);\n }\n return typeof index === \"string\" && JS_PROPERTY_INDEX_RE.test(index)\n ? ts.factory.createIdentifier(index)\n : ts.factory.createStringLiteral(String(index));\n}\n\n/** Create a union type */\nexport function tsUnion(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createUnionTypeNode(tsDedupe(types));\n}\n\n/** Create a WithRequired<X, Y> type */\nexport function tsWithRequired(\n type: ts.TypeNode,\n keys: string[],\n injectFooter: ts.Node[], // needed to inject type helper if used\n): ts.TypeNode {\n if (keys.length === 0) {\n return type;\n }\n\n // inject helper, if needed\n if (!injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"WithRequired\")) {\n const helper = stringToAST(\"type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\")[0] as any;\n injectFooter.push(helper);\n }\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"WithRequired\"), [\n type,\n tsUnion(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/**\n * Enhanced ReadonlyArray.\n * eg: type Foo = ReadonlyArray<T>; type Bar = ReadonlyArray<T[]>\n * Foo and Bar are both of type `readonly T[]`\n */\nexport function tsReadonlyArray(type: ts.TypeNode, injectFooter?: ts.Node[]): ts.TypeNode {\n if (\n injectFooter &&\n !injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"ReadonlyArray\")\n ) {\n const helper = stringToAST(\n \"type ReadonlyArray<T> = [Exclude<T, undefined>] extends [unknown[]] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n )[0] as any;\n injectFooter.push(helper);\n }\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"ReadonlyArray\"), [type]);\n}\n"],"names":["ts","parseRef"],"mappings":"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"}
|
|
154
|
-
|
|
155
|
-
+{"version":3,"file":"ts.cjs","sources":["../../src/lib/ts.ts"],"sourcesContent":["import type { OasRef, Referenced } from \"@redocly/openapi-core\";\nimport { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts, { type LiteralTypeNode, type TypeLiteralNode } from \"typescript\";\nimport type { ParameterObject } from \"../types.js\";\n\nexport const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;\nexport const JS_ENUM_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+(.)?/g;\nexport const JS_PROPERTY_INDEX_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+/g;\nexport const SPECIAL_CHARACTER_MAP: Record<string, string> = {\n \"+\": \"Plus\",\n // Add more mappings as needed\n};\n\nexport const BOOLEAN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);\nexport const FALSE = ts.factory.createLiteralTypeNode(ts.factory.createFalse());\nexport const NEVER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);\nexport const NULL = ts.factory.createLiteralTypeNode(ts.factory.createNull());\nexport const NUMBER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);\nexport const QUESTION_TOKEN = ts.factory.createToken(ts.SyntaxKind.QuestionToken);\nexport const STRING = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);\nexport const TRUE = ts.factory.createLiteralTypeNode(ts.factory.createTrue());\nexport const UNDEFINED = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword);\nexport const UNKNOWN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n\nconst LB_RE = /\\r?\\n/g;\nconst COMMENT_RE = /\\*\\//g;\n\nexport interface AnnotatedSchemaObject {\n const?: unknown; // jsdoc without value\n default?: unknown; // jsdoc with value\n deprecated?: boolean; // jsdoc without value\n description?: string; // jsdoc with value\n enum?: unknown[]; // jsdoc without value\n example?: string; // jsdoc with value\n examples?: unknown;\n format?: string; // not jsdoc\n nullable?: boolean; // Node information\n summary?: string; // not jsdoc\n title?: string; // not jsdoc\n type?: string | string[]; // Type of node\n}\n\n/**\n * Preparing comments from fields\n * @see {comment} for output examples\n * @returns void if not comments or jsdoc format comment string\n */\nexport function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void {\n if (!schemaObject || typeof schemaObject !== \"object\" || Array.isArray(schemaObject)) {\n return;\n }\n const output: string[] = [];\n\n // Not JSDoc tags: [title, format]\n if (schemaObject.title) {\n output.push(schemaObject.title.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.summary) {\n output.push(schemaObject.summary.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.format) {\n output.push(`Format: ${schemaObject.format}`);\n }\n\n // JSDoc tags without value\n // 'Deprecated' without value\n if (schemaObject.deprecated) {\n output.push(\"@deprecated\");\n }\n\n // JSDoc tags with value\n const supportedJsDocTags = [\"description\", \"default\", \"example\"] as const;\n for (const field of supportedJsDocTags) {\n const allowEmptyString = field === \"default\" || field === \"example\";\n if (schemaObject[field] === undefined) {\n continue;\n }\n if (schemaObject[field] === \"\" && !allowEmptyString) {\n continue;\n }\n const serialized =\n typeof schemaObject[field] === \"object\" ? JSON.stringify(schemaObject[field], null, 2) : schemaObject[field];\n output.push(`@${field} ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n\n if (Array.isArray(schemaObject.examples)) {\n for (const example of schemaObject.examples) {\n const serialized = typeof example === \"object\" ? JSON.stringify(example, null, 2) : example;\n output.push(`@example ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n }\n\n // JSDoc 'Constant' without value\n if (\"const\" in schemaObject) {\n output.push(\"@constant\");\n }\n\n // JSDoc 'Enum' with type\n if (schemaObject.enum) {\n let type = \"unknown\";\n if (Array.isArray(schemaObject.type)) {\n type = schemaObject.type.join(\"|\");\n } else if (typeof schemaObject.type === \"string\") {\n type = schemaObject.type;\n }\n output.push(`@enum {${type}${schemaObject.nullable ? \"|null\" : \"\"}}`);\n }\n\n // attach comment if it has content\n\n if (output.length) {\n // Check if any output item contains multi-line content (has internal line breaks)\n const hasMultiLineContent = output.some((item) => item.includes(\"\\n\"));\n\n let text =\n output.length === 1 && !hasMultiLineContent ? `* ${output.join(\"\\n\")} ` : `*\\n * ${output.join(\"\\n * \")}\\n `;\n text = text.replace(COMMENT_RE, \"*\\\\/\"); // prevent inner comments from leaking\n\n ts.addSyntheticLeadingComment(\n /* node */ node,\n /* kind */ ts.SyntaxKind.MultiLineCommentTrivia, // note: MultiLine just refers to a \"/* */\" comment\n /* text */ text,\n /* hasTrailingNewLine */ true,\n );\n }\n}\n\nfunction isOasRef<T>(obj: Referenced<T>): obj is OasRef {\n return Boolean((obj as OasRef).$ref);\n}\ntype OapiRefResolved = Referenced<ParameterObject>;\n\nfunction isParameterObject(obj: OapiRefResolved | undefined): obj is ParameterObject {\n return Boolean(obj && !isOasRef(obj) && obj.in);\n}\n\nfunction addIndexedAccess(node: ts.TypeReferenceNode | ts.IndexedAccessTypeNode, ...segments: readonly string[]) {\n return segments.reduce((acc, segment) => {\n return ts.factory.createIndexedAccessTypeNode(\n acc,\n ts.factory.createLiteralTypeNode(\n typeof segment === \"number\"\n ? ts.factory.createNumericLiteral(segment)\n : ts.factory.createStringLiteral(segment),\n ),\n );\n }, node);\n}\n\n/**\n * Convert OpenAPI ref into TS indexed access node (ex: `components[\"schemas\"][\"Foo\"]`)\n * `path` is a JSON Pointer to a location within an OpenAPI document.\n * Transform it into a TypeScript type reference into the generated types.\n *\n * In most cases the structures of the openapi-typescript generated types and the\n * JSON Pointer paths into the OpenAPI document are the same. However, in some cases\n * special transformations are necessary to account for the ways they differ.\n * * Object schemas\n * $refs into the `properties` of object schemas are valid, but openapi-typescript\n * flattens these objects, so we omit so the index into the schema skips [\"properties\"]\n * * Parameters\n * $refs into the `parameters` of paths are valid, but openapi-ts represents\n * them according to their type; path, query, header, etc… so in these cases we\n * must check the parameter definition to determine the how to index into\n * the openapi-typescript type.\n **/\nexport function oapiRef(path: string, resolved?: OapiRefResolved, deep = false): ts.TypeNode {\n const { pointer } = parseRef(path);\n if (pointer.length === 0) {\n throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);\n }\n\n const parametersObject = isParameterObject(resolved);\n\n // Initial segments are handled in a fixed , then remaining segments are treated\n // according to heuristics based on the initial segments\n const initialSegment = pointer[0];\n const leadingSegments = pointer.slice(1, 3);\n const restSegments = pointer.slice(3);\n\n const leadingType = addIndexedAccess(\n ts.factory.createTypeReferenceNode(\n ts.factory.createIdentifier(deep ? `FlattenedDeepRequired<${String(initialSegment)}>` : String(initialSegment)),\n ),\n ...leadingSegments,\n );\n\n return restSegments.reduce<ts.TypeReferenceNode | ts.IndexedAccessTypeNode>((acc, segment, index, original) => {\n // Skip `properties` items when in the middle of the pointer\n // See: https://github.com/openapi-ts/openapi-typescript/issues/1742\n if (segment === \"properties\") {\n return acc;\n }\n\n if (parametersObject && index === original.length - 1) {\n return addIndexedAccess(acc, resolved.in, resolved.name);\n }\n\n return addIndexedAccess(acc, segment);\n }, leadingType);\n}\n\nexport interface AstToStringOptions {\n fileName?: string;\n sourceText?: string;\n formatOptions?: ts.PrinterOptions;\n}\n\n/** Convert TypeScript AST to string */\nexport function astToString(\n ast: ts.Node | ts.Node[] | ts.TypeElement | ts.TypeElement[],\n options?: AstToStringOptions,\n): string {\n const sourceFile = ts.createSourceFile(\n options?.fileName ?? \"openapi-ts.ts\",\n options?.sourceText ?? \"\",\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n\n // @ts-expect-error it’s OK to overwrite statements once\n sourceFile.statements = ts.factory.createNodeArray(Array.isArray(ast) ? ast : [ast]);\n\n const printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n ...options?.formatOptions,\n });\n return printer.printFile(sourceFile);\n}\n\n/** Convert an arbitrary string to TS (assuming it’s valid) */\nexport function stringToAST(source: string): unknown[] {\n return ts.createSourceFile(\n /* fileName */ \"stringInput\",\n /* sourceText */ source,\n /* languageVersion */ ts.ScriptTarget.ESNext,\n /* setParentNodes */ undefined,\n /* scriptKind */ undefined,\n ).statements as any;\n}\n\n/**\n * Deduplicate simple primitive types from an array of nodes\n * Note: won’t deduplicate complex types like objects\n */\nexport function tsDedupe(types: ts.TypeNode[]): ts.TypeNode[] {\n const encounteredTypes = new Set<number>();\n const filteredTypes: ts.TypeNode[] = [];\n for (const t of types) {\n // only mark for deduplication if this is not a const (\"text\" means it is a const)\n if (!(\"text\" in ((t as LiteralTypeNode).literal ?? t))) {\n const { kind } = (t as LiteralTypeNode).literal ?? t;\n if (encounteredTypes.has(kind)) {\n continue;\n }\n if (tsIsPrimitive(t)) {\n encounteredTypes.add(kind);\n }\n }\n filteredTypes.push(t);\n }\n return filteredTypes;\n}\n\nexport const enumCache = new Map<string, ts.EnumDeclaration>();\n\n/** Create a TS enum (with sanitized name and members) */\nexport function tsEnum(\n name: string,\n members: (string | number)[],\n metadata?: { name?: string; description?: string | null }[],\n options?: { export?: boolean; shouldCache?: boolean },\n) {\n let enumName = sanitizeMemberName(name);\n enumName = `${enumName[0].toUpperCase()}${enumName.substring(1)}`;\n let key = \"\";\n if (options?.shouldCache) {\n key = `${members\n .slice(0)\n .sort()\n .map((v, i) => {\n return `${metadata?.[i]?.name ?? String(v)}:${metadata?.[i]?.description || \"\"}`;\n })\n .join(\",\")}`;\n if (enumCache.has(key)) {\n return enumCache.get(key) as ts.EnumDeclaration;\n }\n }\n const enumDeclaration = ts.factory.createEnumDeclaration(\n /* modifiers */ options ? tsModifiers({ export: options.export ?? false }) : undefined,\n /* name */ enumName,\n /* members */ members.map((value, i) => tsEnumMember(value, metadata?.[i])),\n );\n options?.shouldCache && enumCache.set(key, enumDeclaration);\n return enumDeclaration;\n}\n\n/** Create an exported TS array literal expression */\nexport function tsArrayLiteralExpression(\n name: string,\n elementType: ts.TypeNode,\n values: (string | number)[],\n options?: { export?: boolean; readonly?: boolean; injectFooter?: ts.Node[] },\n) {\n let variableName = sanitizeMemberName(name);\n variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;\n\n if (\n options?.injectFooter &&\n !options.injectFooter.some(\n (node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"FlattenedDeepRequired\",\n )\n ) {\n const helper = stringToAST(\n \"type FlattenedDeepRequired<T> = { [K in keyof T]-?: FlattenedDeepRequired<T[K] extends unknown[] | undefined | null ? Extract<T[K], unknown[]>[number] : T[K]>; };\",\n )[0] as any;\n options.injectFooter.push(helper);\n }\n\n const arrayType = options?.readonly\n ? tsReadonlyArray(elementType, options.injectFooter)\n : ts.factory.createArrayTypeNode(elementType);\n\n return ts.factory.createVariableStatement(\n options ? tsModifiers({ export: options.export ?? false }) : undefined,\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n variableName,\n undefined,\n arrayType,\n ts.factory.createArrayLiteralExpression(\n values.map((value) => {\n if (typeof value === \"number\") {\n if (value < 0) {\n return ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n );\n } else {\n return ts.factory.createNumericLiteral(value);\n }\n } else {\n return ts.factory.createStringLiteral(value);\n }\n }),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n}\n\nfunction sanitizeMemberName(name: string) {\n let sanitizedName = name.replace(JS_ENUM_INVALID_CHARS_RE, (c) => {\n const last = c[c.length - 1];\n return JS_PROPERTY_INDEX_INVALID_CHARS_RE.test(last) ? \"\" : last.toUpperCase();\n });\n if (Number(name[0]) >= 0) {\n sanitizedName = `Value${name}`;\n }\n return sanitizedName;\n}\n\n/** Sanitize TS enum member expression */\nexport function tsEnumMember(value: string | number, metadata: { name?: string; description?: string | null } = {}) {\n let name = metadata.name ?? String(value);\n if (!JS_PROPERTY_INDEX_RE.test(name)) {\n if (Number(name[0]) >= 0) {\n name = `Value${name}`.replace(\".\", \"_\"); // don't forged decimals;\n } else if (name[0] === \"-\") {\n name = `ValueMinus${name.slice(1)}`;\n }\n\n const invalidCharMatch = name.match(JS_PROPERTY_INDEX_INVALID_CHARS_RE);\n if (invalidCharMatch) {\n if (invalidCharMatch[0] === name) {\n name = `\"${name}\"`;\n } else {\n name = name.replace(JS_PROPERTY_INDEX_INVALID_CHARS_RE, (s) => {\n return s in SPECIAL_CHARACTER_MAP ? SPECIAL_CHARACTER_MAP[s] : \"_\";\n });\n }\n }\n }\n\n let member: ts.EnumMember;\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n\n member = ts.factory.createEnumMember(name, literal);\n } else {\n member = ts.factory.createEnumMember(name, ts.factory.createStringLiteral(value));\n }\n\n const trimmedDescription = metadata.description?.trim();\n if (trimmedDescription === undefined || trimmedDescription === null || trimmedDescription === \"\") {\n return member;\n }\n\n return ts.addSyntheticLeadingComment(member, ts.SyntaxKind.SingleLineCommentTrivia, ` ${trimmedDescription}`, true);\n}\n\n/** Create an intersection type */\nexport function tsIntersection(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createIntersectionTypeNode(tsDedupe(types));\n}\n\n/** Is this a primitive type (string, number, boolean, null, undefined)? */\nexport function tsIsPrimitive(type: ts.TypeNode): boolean {\n if (!type) {\n return true;\n }\n return (\n ts.SyntaxKind[type.kind] === \"BooleanKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NeverKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NullKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NumberKeyword\" ||\n ts.SyntaxKind[type.kind] === \"StringKeyword\" ||\n ts.SyntaxKind[type.kind] === \"UndefinedKeyword\" ||\n (\"literal\" in type && tsIsPrimitive(type.literal as TypeLiteralNode))\n );\n}\n\n/** Create a literal type */\nexport function tsLiteral(value: unknown): ts.TypeNode {\n if (typeof value === \"string\") {\n // workaround for UTF-8: https://github.com/microsoft/TypeScript/issues/36174\n return ts.factory.createIdentifier(JSON.stringify(value)) as unknown as ts.TypeNode;\n }\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n return ts.factory.createLiteralTypeNode(literal);\n }\n if (typeof value === \"boolean\") {\n return value === true ? TRUE : FALSE;\n }\n if (value === null) {\n return NULL;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return ts.factory.createArrayTypeNode(NEVER);\n }\n return ts.factory.createTupleTypeNode(value.map((v: unknown) => tsLiteral(v)));\n }\n if (typeof value === \"object\") {\n const keys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(value)) {\n keys.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ tsLiteral(v),\n ),\n );\n }\n return keys.length ? ts.factory.createTypeLiteralNode(keys) : tsRecord(STRING, NEVER);\n }\n return UNKNOWN;\n}\n\n/** Modifiers (readonly) */\nexport function tsModifiers(modifiers: { readonly?: boolean; export?: boolean }): ts.Modifier[] {\n const typeMods: ts.Modifier[] = [];\n if (modifiers.export) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ExportKeyword));\n }\n if (modifiers.readonly) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword));\n }\n return typeMods;\n}\n\n/** Create a T | null union */\nexport function tsNullable(types: ts.TypeNode[]): ts.TypeNode {\n return ts.factory.createUnionTypeNode([...types, NULL]);\n}\n\n/** Create a TS Omit<X, Y> type */\nexport function tsOmit(type: ts.TypeNode, keys: string[]): ts.TypeNode {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Omit\"), [\n type,\n ts.factory.createUnionTypeNode(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/** Create a TS Record<X, Y> type */\nexport function tsRecord(key: ts.TypeNode, value: ts.TypeNode) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Record\"), [key, value]);\n}\n\n/** Create a valid property index */\nexport function tsPropertyIndex(index: string | number) {\n if (\n (typeof index === \"number\" && !(index < 0)) ||\n (typeof index === \"string\" && String(Number(index)) === index && index[0] !== \"-\")\n ) {\n return ts.factory.createNumericLiteral(index);\n }\n return typeof index === \"string\" && JS_PROPERTY_INDEX_RE.test(index)\n ? ts.factory.createIdentifier(index)\n : ts.factory.createStringLiteral(String(index));\n}\n\n/** Create a union type */\nexport function tsUnion(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createUnionTypeNode(tsDedupe(types));\n}\n\n/** Create a WithRequired<X, Y> type */\nexport function tsWithRequired(\n type: ts.TypeNode,\n keys: string[],\n injectFooter: ts.Node[], // needed to inject type helper if used\n): ts.TypeNode {\n if (keys.length === 0) {\n return type;\n }\n\n // inject helper, if needed\n if (!injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"WithRequired\")) {\n const helper = stringToAST(\"type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\")[0] as any;\n injectFooter.push(helper);\n }\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"WithRequired\"), [\n type,\n tsUnion(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/**\n * Enhanced ReadonlyArray.\n * eg: type Foo = ReadonlyArray<T>; type Bar = ReadonlyArray<T[]>\n * Foo and Bar are both of type `readonly T[]`\n */\nexport function tsReadonlyArray(type: ts.TypeNode, injectFooter?: ts.Node[]): ts.TypeNode {\n if (\n injectFooter &&\n !injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"ReadonlyArray\")\n ) {\n const helper = stringToAST(\n \"type ReadonlyArray<T> = [Exclude<T, undefined>] extends [unknown[]] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n )[0] as any;\n injectFooter.push(helper);\n }\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"ReadonlyArray\"), [type]);\n}\n"],"names":["ts","parseRef"],"mappings":";;;;;;;;;AAKO,MAAM,oBAAuB,GAAA;AAC7B,MAAM,wBAA2B,GAAA;AACjC,MAAM,kCAAqC,GAAA;AAC3C,MAAM,qBAAgD,GAAA;AAAA,EAC3D,GAAK,EAAA;AAAA;AAEP;AAEO,MAAM,UAAUA,WAAG,CAAA,OAAA,CAAQ,qBAAsB,CAAAA,WAAA,CAAG,WAAW,cAAc;AAC7E,MAAM,QAAQA,WAAG,CAAA,OAAA,CAAQ,sBAAsBA,WAAG,CAAA,OAAA,CAAQ,aAAa;AACvE,MAAM,QAAQA,WAAG,CAAA,OAAA,CAAQ,qBAAsB,CAAAA,WAAA,CAAG,WAAW,YAAY;AACzE,MAAM,OAAOA,WAAG,CAAA,OAAA,CAAQ,sBAAsBA,WAAG,CAAA,OAAA,CAAQ,YAAY;AACrE,MAAM,SAASA,WAAG,CAAA,OAAA,CAAQ,qBAAsB,CAAAA,WAAA,CAAG,WAAW,aAAa;AAC3E,MAAM,iBAAiBA,WAAG,CAAA,OAAA,CAAQ,WAAY,CAAAA,WAAA,CAAG,WAAW,aAAa;AACzE,MAAM,SAASA,WAAG,CAAA,OAAA,CAAQ,qBAAsB,CAAAA,WAAA,CAAG,WAAW,aAAa;AAC3E,MAAM,OAAOA,WAAG,CAAA,OAAA,CAAQ,sBAAsBA,WAAG,CAAA,OAAA,CAAQ,YAAY;AACrE,MAAM,YAAYA,WAAG,CAAA,OAAA,CAAQ,qBAAsB,CAAAA,WAAA,CAAG,WAAW,gBAAgB;AACjF,MAAM,UAAUA,WAAG,CAAA,OAAA,CAAQ,qBAAsB,CAAAA,WAAA,CAAG,WAAW,cAAc;AAEpF,MAAM,KAAQ,GAAA,QAAA;AACd,MAAM,UAAa,GAAA,OAAA;AAsBH,SAAA,eAAA,CAAgB,cAAqC,IAAkC,EAAA;AACrG,EAAI,IAAA,CAAC,gBAAgB,OAAO,YAAA,KAAiB,YAAY,KAAM,CAAA,OAAA,CAAQ,YAAY,CAAG,EAAA;AACpF,IAAA;AAAA;AAEF,EAAA,MAAM,SAAmB,EAAC;AAG1B,EAAA,IAAI,aAAa,KAAO,EAAA;AACtB,IAAO,MAAA,CAAA,IAAA,CAAK,aAAa,KAAM,CAAA,IAAA,GAAO,OAAQ,CAAA,KAAA,EAAO,WAAW,CAAC,CAAA;AAAA;AAEnE,EAAA,IAAI,aAAa,OAAS,EAAA;AACxB,IAAO,MAAA,CAAA,IAAA,CAAK,aAAa,OAAQ,CAAA,IAAA,GAAO,OAAQ,CAAA,KAAA,EAAO,WAAW,CAAC,CAAA;AAAA;AAErE,EAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,IAAA,MAAA,CAAO,IAAK,CAAA,CAAA,QAAA,EAAW,YAAa,CAAA,MAAM,CAAE,CAAA,CAAA;AAAA;AAK9C,EAAA,IAAI,aAAa,UAAY,EAAA;AAC3B,IAAA,MAAA,CAAO,KAAK,aAAa,CAAA;AAAA;AAI3B,EAAA,MAAM,kBAAqB,GAAA,CAAC,aAAe,EAAA,SAAA,EAAW,SAAS,CAAA;AAC/D,EAAA,KAAA,MAAW,SAAS,kBAAoB,EAAA;AACtC,IAAM,MAAA,gBAAA,GAAmB,KAAU,KAAA,SAAA,IAAa,KAAU,KAAA,SAAA;AAC1D,IAAI,IAAA,YAAA,CAAa,KAAK,CAAA,KAAM,MAAW,EAAA;AACrC,MAAA;AAAA;AAEF,IAAA,IAAI,YAAa,CAAA,KAAK,CAAM,KAAA,EAAA,IAAM,CAAC,gBAAkB,EAAA;AACnD,MAAA;AAAA;AAEF,IAAA,MAAM,UACJ,GAAA,OAAO,YAAa,CAAA,KAAK,MAAM,QAAW,GAAA,IAAA,CAAK,SAAU,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA,IAAA,EAAM,CAAC,CAAA,GAAI,aAAa,KAAK,CAAA;AAC7G,IAAA,MAAA,CAAO,IAAK,CAAA,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,MAAO,CAAA,UAAU,CAAE,CAAA,IAAA,EAAO,CAAA,OAAA,CAAQ,KAAO,EAAA,WAAW,CAAC,CAAE,CAAA,CAAA;AAAA;AAGlF,EAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,YAAa,CAAA,QAAQ,CAAG,EAAA;AACxC,IAAW,KAAA,MAAA,OAAA,IAAW,aAAa,QAAU,EAAA;AAC3C,MAAM,MAAA,UAAA,GAAa,OAAO,OAAY,KAAA,QAAA,GAAW,KAAK,SAAU,CAAA,OAAA,EAAS,IAAM,EAAA,CAAC,CAAI,GAAA,OAAA;AACpF,MAAO,MAAA,CAAA,IAAA,CAAK,CAAY,SAAA,EAAA,MAAA,CAAO,UAAU,CAAA,CAAE,IAAK,EAAA,CAAE,OAAQ,CAAA,KAAA,EAAO,WAAW,CAAC,CAAE,CAAA,CAAA;AAAA;AACjF;AAIF,EAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,IAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA;AAIzB,EAAA,IAAI,aAAa,IAAM,EAAA;AACrB,IAAA,IAAI,IAAO,GAAA,SAAA;AACX,IAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,YAAa,CAAA,IAAI,CAAG,EAAA;AACpC,MAAO,IAAA,GAAA,YAAA,CAAa,IAAK,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,KACxB,MAAA,IAAA,OAAO,YAAa,CAAA,IAAA,KAAS,QAAU,EAAA;AAChD,MAAA,IAAA,GAAO,YAAa,CAAA,IAAA;AAAA;AAEtB,IAAO,MAAA,CAAA,IAAA,CAAK,UAAU,IAAI,CAAA,EAAG,aAAa,QAAW,GAAA,OAAA,GAAU,EAAE,CAAG,CAAA,CAAA,CAAA;AAAA;AAKtE,EAAA,IAAI,OAAO,MAAQ,EAAA;AAEjB,IAAM,MAAA,mBAAA,GAAsB,OAAO,IAAK,CAAA,CAAC,SAAS,IAAK,CAAA,QAAA,CAAS,IAAI,CAAC,CAAA;AAErE,IAAI,IAAA,IAAA,GACF,MAAO,CAAA,MAAA,KAAW,CAAK,IAAA,CAAC,mBAAsB,GAAA,CAAA,EAAA,EAAK,MAAO,CAAA,IAAA,CAAK,IAAI,CAAC,CAAM,CAAA,CAAA,GAAA,CAAA;AAAA,GAAS,EAAA,MAAA,CAAO,IAAK,CAAA,OAAO,CAAC;AAAA,CAAA,CAAA;AACzG,IAAO,IAAA,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,EAAY,MAAM,CAAA;AAEtC,IAAGA,WAAA,CAAA,0BAAA;AAAA;AAAA,MACwB,IAAA;AAAA;AAAA,MACAA,YAAG,UAAW,CAAA,sBAAA;AAAA;AAAA;AAAA,MACd,IAAA;AAAA;AAAA,MACA;AAAA,KAC3B;AAAA;AAEJ;AAEA,SAAS,SAAY,GAAmC,EAAA;AACtD,EAAO,OAAA,OAAA,CAAS,IAAe,IAAI,CAAA;AACrC;AAGA,SAAS,kBAAkB,GAA0D,EAAA;AACnF,EAAA,OAAO,QAAQ,GAAO,IAAA,CAAC,SAAS,GAAG,CAAA,IAAK,IAAI,EAAE,CAAA;AAChD;AAEA,SAAS,gBAAA,CAAiB,SAA0D,QAA6B,EAAA;AAC/G,EAAA,OAAO,QAAS,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,OAAY,KAAA;AACvC,IAAA,OAAOA,YAAG,OAAQ,CAAA,2BAAA;AAAA,MAChB,GAAA;AAAA,MACAA,YAAG,OAAQ,CAAA,qBAAA;AAAA,QACT,OAAO,OAAY,KAAA,QAAA,GACfA,WAAG,CAAA,OAAA,CAAQ,oBAAqB,CAAA,OAAO,CACvC,GAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,OAAO;AAAA;AAC5C,KACF;AAAA,KACC,IAAI,CAAA;AACT;AAmBO,SAAS,OAAQ,CAAA,IAAA,EAAc,QAA4B,EAAA,IAAA,GAAO,KAAoB,EAAA;AAC3F,EAAA,MAAM,EAAE,OAAA,EAAY,GAAAC,oBAAA,CAAS,IAAI,CAAA;AACjC,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAuB,oBAAA,EAAA,IAAI,CAAyB,uBAAA,CAAA,CAAA;AAAA;AAGtE,EAAM,MAAA,gBAAA,GAAmB,kBAAkB,QAAQ,CAAA;AAInD,EAAM,MAAA,cAAA,GAAiB,QAAQ,CAAC,CAAA;AAChC,EAAA,MAAM,eAAkB,GAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA;AAC1C,EAAM,MAAA,YAAA,GAAe,OAAQ,CAAA,KAAA,CAAM,CAAC,CAAA;AAEpC,EAAA,MAAM,WAAc,GAAA,gBAAA;AAAA,IAClBD,YAAG,OAAQ,CAAA,uBAAA;AAAA,MACTA,WAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,IAAO,GAAA,CAAA,sBAAA,EAAyB,MAAO,CAAA,cAAc,CAAC,CAAA,CAAA,CAAA,GAAM,MAAO,CAAA,cAAc,CAAC;AAAA,KAChH;AAAA,IACA,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,aAAa,MAAwD,CAAA,CAAC,GAAK,EAAA,OAAA,EAAS,OAAO,QAAa,KAAA;AAG7G,IAAA,IAAI,YAAY,YAAc,EAAA;AAC5B,MAAO,OAAA,GAAA;AAAA;AAGT,IAAA,IAAI,gBAAoB,IAAA,KAAA,KAAU,QAAS,CAAA,MAAA,GAAS,CAAG,EAAA;AACrD,MAAA,OAAO,gBAAiB,CAAA,GAAA,EAAK,QAAS,CAAA,EAAA,EAAI,SAAS,IAAI,CAAA;AAAA;AAGzD,IAAO,OAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,KACnC,WAAW,CAAA;AAChB;AASgB,SAAA,WAAA,CACd,KACA,OACQ,EAAA;AACR,EAAA,MAAM,aAAaA,WAAG,CAAA,gBAAA;AAAA,IACpB,SAAS,QAAY,IAAA,eAAA;AAAA,IACrB,SAAS,UAAc,IAAA,EAAA;AAAA,IACvBA,YAAG,YAAa,CAAA,MAAA;AAAA,IAChB,KAAA;AAAA,IACAA,YAAG,UAAW,CAAA;AAAA,GAChB;AAGA,EAAW,UAAA,CAAA,UAAA,GAAaA,WAAG,CAAA,OAAA,CAAQ,eAAgB,CAAA,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAI,GAAA,GAAA,GAAM,CAAC,GAAG,CAAC,CAAA;AAEnF,EAAM,MAAA,OAAA,GAAUA,YAAG,aAAc,CAAA;AAAA,IAC/B,OAAA,EAASA,YAAG,WAAY,CAAA,QAAA;AAAA,IACxB,cAAgB,EAAA,KAAA;AAAA,IAChB,GAAG,OAAS,EAAA;AAAA,GACb,CAAA;AACD,EAAO,OAAA,OAAA,CAAQ,UAAU,UAAU,CAAA;AACrC;AAGO,SAAS,YAAY,MAA2B,EAAA;AACrD,EAAA,OAAOA,WAAG,CAAA,gBAAA;AAAA;AAAA,IACc,aAAA;AAAA;AAAA,IACA,MAAA;AAAA;AAAA,IACAA,YAAG,YAAa,CAAA,MAAA;AAAA;AAAA,IAChB,MAAA;AAAA;AAAA,IACA;AAAA,GACtB,CAAA,UAAA;AACJ;AAMO,SAAS,SAAS,KAAqC,EAAA;AAC5D,EAAM,MAAA,gBAAA,uBAAuB,GAAY,EAAA;AACzC,EAAA,MAAM,gBAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,KAAK,KAAO,EAAA;AAErB,IAAA,IAAI,EAAE,MAAA,KAAY,CAAsB,CAAA,OAAA,IAAW,CAAK,CAAA,CAAA,EAAA;AACtD,MAAA,MAAM,EAAE,IAAA,EAAU,GAAA,CAAA,CAAsB,OAAW,IAAA,CAAA;AACnD,MAAI,IAAA,gBAAA,CAAiB,GAAI,CAAA,IAAI,CAAG,EAAA;AAC9B,QAAA;AAAA;AAEF,MAAI,IAAA,aAAA,CAAc,CAAC,CAAG,EAAA;AACpB,QAAA,gBAAA,CAAiB,IAAI,IAAI,CAAA;AAAA;AAC3B;AAEF,IAAA,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA;AAEtB,EAAO,OAAA,aAAA;AACT;AAEa,MAAA,SAAA,uBAAgB,GAAgC;AAGtD,SAAS,MACd,CAAA,IAAA,EACA,OACA,EAAA,QAAA,EACA,OACA,EAAA;AACA,EAAI,IAAA,QAAA,GAAW,mBAAmB,IAAI,CAAA;AACtC,EAAW,QAAA,GAAA,CAAA,EAAG,QAAS,CAAA,CAAC,CAAE,CAAA,WAAA,EAAa,CAAG,EAAA,QAAA,CAAS,SAAU,CAAA,CAAC,CAAC,CAAA,CAAA;AAC/D,EAAA,IAAI,GAAM,GAAA,EAAA;AACV,EAAA,IAAI,SAAS,WAAa,EAAA;AACxB,IAAM,GAAA,GAAA,CAAA,EAAG,OACN,CAAA,KAAA,CAAM,CAAC,CAAA,CACP,MACA,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA;AACb,MAAA,OAAO,CAAG,EAAA,QAAA,GAAW,CAAC,CAAA,EAAG,IAAQ,IAAA,MAAA,CAAO,CAAC,CAAC,CAAI,CAAA,EAAA,QAAA,GAAW,CAAC,CAAA,EAAG,eAAe,EAAE,CAAA,CAAA;AAAA,KAC/E,CAAA,CACA,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA;AACZ,IAAI,IAAA,SAAA,CAAU,GAAI,CAAA,GAAG,CAAG,EAAA;AACtB,MAAO,OAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AAAA;AAC1B;AAEF,EAAM,MAAA,eAAA,GAAkBA,YAAG,OAAQ,CAAA,qBAAA;AAAA;AAAA,IACjB,OAAA,GAAU,YAAY,EAAE,MAAA,EAAQ,QAAQ,MAAU,IAAA,KAAA,EAAO,CAAI,GAAA,MAAA;AAAA;AAAA,IAC7D,QAAA;AAAA;AAAA,IACA,OAAA,CAAQ,GAAI,CAAA,CAAC,KAAO,EAAA,CAAA,KAAM,aAAa,KAAO,EAAA,QAAA,GAAW,CAAC,CAAC,CAAC;AAAA,GAC9E;AACA,EAAA,OAAA,EAAS,WAAe,IAAA,SAAA,CAAU,GAAI,CAAA,GAAA,EAAK,eAAe,CAAA;AAC1D,EAAO,OAAA,eAAA;AACT;AAGO,SAAS,wBACd,CAAA,IAAA,EACA,WACA,EAAA,MAAA,EACA,OACA,EAAA;AACA,EAAI,IAAA,YAAA,GAAe,mBAAmB,IAAI,CAAA;AAC1C,EAAe,YAAA,GAAA,CAAA,EAAG,YAAa,CAAA,CAAC,CAAE,CAAA,WAAA,EAAa,CAAG,EAAA,YAAA,CAAa,SAAU,CAAA,CAAC,CAAC,CAAA,CAAA;AAE3E,EAAA,IACE,OAAS,EAAA,YAAA,IACT,CAAC,OAAA,CAAQ,YAAa,CAAA,IAAA;AAAA,IACpB,CAAC,SAASA,WAAG,CAAA,sBAAA,CAAuB,IAAI,CAAK,IAAA,IAAA,EAAM,MAAM,WAAgB,KAAA;AAAA,GAE3E,EAAA;AACA,IAAA,MAAM,MAAS,GAAA,WAAA;AAAA,MACb;AAAA,MACA,CAAC,CAAA;AACH,IAAQ,OAAA,CAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA;AAGlC,EAAM,MAAA,SAAA,GAAY,OAAS,EAAA,QAAA,GACvB,eAAgB,CAAA,WAAA,EAAa,OAAQ,CAAA,YAAY,CACjD,GAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,WAAW,CAAA;AAE9C,EAAA,OAAOA,YAAG,OAAQ,CAAA,uBAAA;AAAA,IAChB,OAAA,GAAU,YAAY,EAAE,MAAA,EAAQ,QAAQ,MAAU,IAAA,KAAA,EAAO,CAAI,GAAA,MAAA;AAAA,IAC7DA,YAAG,OAAQ,CAAA,6BAAA;AAAA,MACT;AAAA,QACEA,YAAG,OAAQ,CAAA,yBAAA;AAAA,UACT,YAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACAA,YAAG,OAAQ,CAAA,4BAAA;AAAA,YACT,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA;AACpB,cAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,gBAAA,IAAI,QAAQ,CAAG,EAAA;AACb,kBAAA,OAAOA,YAAG,OAAQ,CAAA,2BAAA;AAAA,oBAChBA,YAAG,UAAW,CAAA,UAAA;AAAA,oBACdA,YAAG,OAAQ,CAAA,oBAAA,CAAqB,IAAK,CAAA,GAAA,CAAI,KAAK,CAAC;AAAA,mBACjD;AAAA,iBACK,MAAA;AACL,kBAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA;AAC9C,eACK,MAAA;AACL,gBAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA;AAC7C,aACD;AAAA;AACH;AACF,OACF;AAAA,MACAA,YAAG,SAAU,CAAA;AAAA;AACf,GACF;AACF;AAEA,SAAS,mBAAmB,IAAc,EAAA;AACxC,EAAA,IAAI,aAAgB,GAAA,IAAA,CAAK,OAAQ,CAAA,wBAAA,EAA0B,CAAC,CAAM,KAAA;AAChE,IAAA,MAAM,IAAO,GAAA,CAAA,CAAE,CAAE,CAAA,MAAA,GAAS,CAAC,CAAA;AAC3B,IAAA,OAAO,mCAAmC,IAAK,CAAA,IAAI,CAAI,GAAA,EAAA,GAAK,KAAK,WAAY,EAAA;AAAA,GAC9E,CAAA;AACD,EAAA,IAAI,MAAO,CAAA,IAAA,CAAK,CAAC,CAAC,KAAK,CAAG,EAAA;AACxB,IAAA,aAAA,GAAgB,QAAQ,IAAI,CAAA,CAAA;AAAA;AAE9B,EAAO,OAAA,aAAA;AACT;AAGO,SAAS,YAAa,CAAA,KAAA,EAAwB,QAA2D,GAAA,EAAI,EAAA;AAClH,EAAA,IAAI,IAAO,GAAA,QAAA,CAAS,IAAQ,IAAA,MAAA,CAAO,KAAK,CAAA;AACxC,EAAA,IAAI,CAAC,oBAAA,CAAqB,IAAK,CAAA,IAAI,CAAG,EAAA;AACpC,IAAA,IAAI,MAAO,CAAA,IAAA,CAAK,CAAC,CAAC,KAAK,CAAG,EAAA;AACxB,MAAA,IAAA,GAAO,CAAQ,KAAA,EAAA,IAAI,CAAG,CAAA,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,KAC7B,MAAA,IAAA,IAAA,CAAK,CAAC,CAAA,KAAM,GAAK,EAAA;AAC1B,MAAA,IAAA,GAAO,CAAa,UAAA,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA;AAGnC,IAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,KAAA,CAAM,kCAAkC,CAAA;AACtE,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAI,IAAA,gBAAA,CAAiB,CAAC,CAAA,KAAM,IAAM,EAAA;AAChC,QAAA,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA,CAAA;AAAA,OACV,MAAA;AACL,QAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,kCAAoC,EAAA,CAAC,CAAM,KAAA;AAC7D,UAAA,OAAO,CAAK,IAAA,qBAAA,GAAwB,qBAAsB,CAAA,CAAC,CAAI,GAAA,GAAA;AAAA,SAChE,CAAA;AAAA;AACH;AACF;AAGF,EAAI,IAAA,MAAA;AACJ,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAM,OACJ,GAAA,KAAA,GAAQ,CACJ,GAAAA,WAAA,CAAG,OAAQ,CAAA,2BAAA;AAAA,MACTA,YAAG,UAAW,CAAA,UAAA;AAAA,MACdA,YAAG,OAAQ,CAAA,oBAAA,CAAqB,IAAK,CAAA,GAAA,CAAI,KAAK,CAAC;AAAA,KAEjD,GAAAA,WAAA,CAAG,OAAQ,CAAA,oBAAA,CAAqB,KAAK,CAAA;AAE3C,IAAA,MAAA,GAASA,WAAG,CAAA,OAAA,CAAQ,gBAAiB,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA,GAC7C,MAAA;AACL,IAAS,MAAA,GAAAA,WAAA,CAAG,QAAQ,gBAAiB,CAAA,IAAA,EAAMA,YAAG,OAAQ,CAAA,mBAAA,CAAoB,KAAK,CAAC,CAAA;AAAA;AAGlF,EAAM,MAAA,kBAAA,GAAqB,QAAS,CAAA,WAAA,EAAa,IAAK,EAAA;AACtD,EAAA,IAAI,kBAAuB,KAAA,MAAA,IAAa,kBAAuB,KAAA,IAAA,IAAQ,uBAAuB,EAAI,EAAA;AAChG,IAAO,OAAA,MAAA;AAAA;AAGT,EAAO,OAAAA,WAAA,CAAG,2BAA2B,MAAQ,EAAAA,WAAA,CAAG,WAAW,uBAAyB,EAAA,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,EAAI,IAAI,CAAA;AACpH;AAGO,SAAS,eAAe,KAAmC,EAAA;AAChE,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAA,OAAO,MAAM,CAAC,CAAA;AAAA;AAEhB,EAAA,OAAOA,WAAG,CAAA,OAAA,CAAQ,0BAA2B,CAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AAC9D;AAGO,SAAS,cAAc,IAA4B,EAAA;AACxD,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,OACEA,YAAG,UAAW,CAAA,IAAA,CAAK,IAAI,CAAM,KAAA,gBAAA,IAC7BA,YAAG,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,KAAM,kBAC7BA,WAAG,CAAA,UAAA,CAAW,KAAK,IAAI,CAAA,KAAM,iBAC7BA,WAAG,CAAA,UAAA,CAAW,IAAK,CAAA,IAAI,MAAM,eAC7B,IAAAA,WAAA,CAAG,WAAW,IAAK,CAAA,IAAI,MAAM,eAC7B,IAAAA,WAAA,CAAG,UAAW,CAAA,IAAA,CAAK,IAAI,CAAM,KAAA,kBAAA,IAC5B,aAAa,IAAQ,IAAA,aAAA,CAAc,KAAK,OAA0B,CAAA;AAEvE;AAGO,SAAS,UAAU,KAA6B,EAAA;AACrD,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAE7B,IAAA,OAAOA,YAAG,OAAQ,CAAA,gBAAA,CAAiB,IAAK,CAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA;AAE1D,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAM,OACJ,GAAA,KAAA,GAAQ,CACJ,GAAAA,WAAA,CAAG,OAAQ,CAAA,2BAAA;AAAA,MACTA,YAAG,UAAW,CAAA,UAAA;AAAA,MACdA,YAAG,OAAQ,CAAA,oBAAA,CAAqB,IAAK,CAAA,GAAA,CAAI,KAAK,CAAC;AAAA,KAEjD,GAAAA,WAAA,CAAG,OAAQ,CAAA,oBAAA,CAAqB,KAAK,CAAA;AAC3C,IAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,OAAO,CAAA;AAAA;AAEjD,EAAI,IAAA,OAAO,UAAU,SAAW,EAAA;AAC9B,IAAO,OAAA,KAAA,KAAU,OAAO,IAAO,GAAA,KAAA;AAAA;AAEjC,EAAA,IAAI,UAAU,IAAM,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAET,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,IAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,MAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA;AAE7C,IAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,KAAM,CAAA,GAAA,CAAI,CAAC,CAAe,KAAA,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AAAA;AAE/E,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,MAAM,OAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,CAAG,EAAA,CAAC,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAC1C,MAAK,IAAA,CAAA,IAAA;AAAA,QACHA,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACW,MAAA;AAAA;AAAA,UACA,gBAAgB,CAAC,CAAA;AAAA;AAAA,UACjB,MAAA;AAAA;AAAA,UACA,UAAU,CAAC;AAAA;AACjC,OACF;AAAA;AAEF,IAAO,OAAA,IAAA,CAAK,SAASA,WAAG,CAAA,OAAA,CAAQ,sBAAsB,IAAI,CAAA,GAAI,QAAS,CAAA,MAAA,EAAQ,KAAK,CAAA;AAAA;AAEtF,EAAO,OAAA,OAAA;AACT;AAGO,SAAS,YAAY,SAAoE,EAAA;AAC9F,EAAA,MAAM,WAA0B,EAAC;AACjC,EAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,IAAA,QAAA,CAAS,KAAKA,WAAG,CAAA,OAAA,CAAQ,eAAeA,WAAG,CAAA,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA;AAEtE,EAAA,IAAI,UAAU,QAAU,EAAA;AACtB,IAAA,QAAA,CAAS,KAAKA,WAAG,CAAA,OAAA,CAAQ,eAAeA,WAAG,CAAA,UAAA,CAAW,eAAe,CAAC,CAAA;AAAA;AAExE,EAAO,OAAA,QAAA;AACT;AAGO,SAAS,WAAW,KAAmC,EAAA;AAC5D,EAAA,OAAOA,YAAG,OAAQ,CAAA,mBAAA,CAAoB,CAAC,GAAG,KAAA,EAAO,IAAI,CAAC,CAAA;AACxD;AAGgB,SAAA,MAAA,CAAO,MAAmB,IAA6B,EAAA;AACrE,EAAA,OAAOA,YAAG,OAAQ,CAAA,uBAAA,CAAwBA,YAAG,OAAQ,CAAA,gBAAA,CAAiB,MAAM,CAAG,EAAA;AAAA,IAC7E,IAAA;AAAA,IACAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,IAAK,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,SAAA,CAAU,CAAC,CAAC,CAAC;AAAA,GAC7D,CAAA;AACH;AAGgB,SAAA,QAAA,CAAS,KAAkB,KAAoB,EAAA;AAC7D,EAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,uBAAA,CAAwBA,WAAG,CAAA,OAAA,CAAQ,gBAAiB,CAAA,QAAQ,CAAG,EAAA,CAAC,GAAK,EAAA,KAAK,CAAC,CAAA;AAC/F;AAGO,SAAS,gBAAgB,KAAwB,EAAA;AACtD,EAAA,IACG,OAAO,KAAU,KAAA,QAAA,IAAY,EAAE,KAAQ,GAAA,CAAA,CAAA,IACvC,OAAO,KAAU,KAAA,QAAA,IAAY,MAAO,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,SAAS,KAAM,CAAA,CAAC,MAAM,GAC9E,EAAA;AACA,IAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA;AAE9C,EAAA,OAAO,OAAO,KAAU,KAAA,QAAA,IAAY,oBAAqB,CAAA,IAAA,CAAK,KAAK,CAC/D,GAAAA,WAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,KAAK,CACjC,GAAAA,WAAA,CAAG,QAAQ,mBAAoB,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAClD;AAGO,SAAS,QAAQ,KAAmC,EAAA;AACzD,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAA,OAAO,MAAM,CAAC,CAAA;AAAA;AAEhB,EAAA,OAAOA,WAAG,CAAA,OAAA,CAAQ,mBAAoB,CAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AACvD;AAGgB,SAAA,cAAA,CACd,IACA,EAAA,IAAA,EACA,YACa,EAAA;AACb,EAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AAIT,EAAA,IAAI,CAAC,YAAA,CAAa,IAAK,CAAA,CAAC,IAAS,KAAAA,WAAA,CAAG,sBAAuB,CAAA,IAAI,CAAK,IAAA,IAAA,EAAM,IAAM,EAAA,WAAA,KAAgB,cAAc,CAAG,EAAA;AAC/G,IAAA,MAAM,MAAS,GAAA,WAAA,CAAY,qEAAqE,CAAA,CAAE,CAAC,CAAA;AACnG,IAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA;AAG1B,EAAA,OAAOA,YAAG,OAAQ,CAAA,uBAAA,CAAwBA,YAAG,OAAQ,CAAA,gBAAA,CAAiB,cAAc,CAAG,EAAA;AAAA,IACrF,IAAA;AAAA,IACA,OAAA,CAAQ,KAAK,GAAI,CAAA,CAAC,MAAM,SAAU,CAAA,CAAC,CAAC,CAAC;AAAA,GACtC,CAAA;AACH;AAOgB,SAAA,eAAA,CAAgB,MAAmB,YAAuC,EAAA;AACxF,EAAA,IACE,YACA,IAAA,CAAC,YAAa,CAAA,IAAA,CAAK,CAAC,IAAS,KAAAA,WAAA,CAAG,sBAAuB,CAAA,IAAI,CAAK,IAAA,IAAA,EAAM,IAAM,EAAA,WAAA,KAAgB,eAAe,CAC3G,EAAA;AACA,IAAA,MAAM,MAAS,GAAA,WAAA;AAAA,MACb;AAAA,MACA,CAAC,CAAA;AACH,IAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA;AAE1B,EAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,uBAAA,CAAwBA,WAAG,CAAA,OAAA,CAAQ,iBAAiB,eAAe,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAChG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
156
|
-
|
|
157
|
-
diff --git a/dist/lib/ts.mjs b/dist/lib/ts.mjs
|
|
158
|
-
index 6cd1ce99a98b4be4b333167afcfc03bed4f78786..93724bc4e4b66d1ea8a3e6de8e7a8f1ff444d187 100644
|
|
159
|
-
--- a/dist/lib/ts.mjs
|
|
160
|
-
+++ b/dist/lib/ts.mjs
|
|
161
|
-
@@ -102,7 +102,7 @@ function addIndexedAccess(node, ...segments) {
|
|
162
|
-
);
|
|
163
|
-
}, node);
|
|
164
|
-
}
|
|
165
|
-
-function oapiRef(path, resolved) {
|
|
166
|
-
+function oapiRef(path, resolved, deep = false) {
|
|
167
|
-
const { pointer } = parseRef(path);
|
|
168
|
-
if (pointer.length === 0) {
|
|
169
|
-
throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);
|
|
170
|
-
@@ -112,7 +112,9 @@ function oapiRef(path, resolved) {
|
|
171
|
-
const leadingSegments = pointer.slice(1, 3);
|
|
172
|
-
const restSegments = pointer.slice(3);
|
|
173
|
-
const leadingType = addIndexedAccess(
|
|
174
|
-
- ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(String(initialSegment))),
|
|
175
|
-
+ ts.factory.createTypeReferenceNode(
|
|
176
|
-
+ ts.factory.createIdentifier(deep ? `FlattenedDeepRequired<${String(initialSegment)}>` : String(initialSegment))
|
|
177
|
-
+ ),
|
|
178
|
-
...leadingSegments
|
|
179
|
-
);
|
|
180
|
-
return restSegments.reduce((acc, segment, index, original) => {
|
|
181
|
-
@@ -199,6 +201,14 @@ function tsEnum(name, members, metadata, options) {
|
|
182
|
-
function tsArrayLiteralExpression(name, elementType, values, options) {
|
|
183
|
-
let variableName = sanitizeMemberName(name);
|
|
184
|
-
variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;
|
|
185
|
-
+ if (options?.injectFooter && !options.injectFooter.some(
|
|
186
|
-
+ (node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === "FlattenedDeepRequired"
|
|
187
|
-
+ )) {
|
|
188
|
-
+ const helper = stringToAST(
|
|
189
|
-
+ "type FlattenedDeepRequired<T> = { [K in keyof T]-?: FlattenedDeepRequired<T[K] extends unknown[] | undefined | null ? Extract<T[K], unknown[]>[number] : T[K]>; };"
|
|
190
|
-
+ )[0];
|
|
191
|
-
+ options.injectFooter.push(helper);
|
|
192
|
-
+ }
|
|
193
|
-
const arrayType = options?.readonly ? tsReadonlyArray(elementType, options.injectFooter) : ts.factory.createArrayTypeNode(elementType);
|
|
194
|
-
return ts.factory.createVariableStatement(
|
|
195
|
-
options ? tsModifiers({ export: options.export ?? false }) : void 0,
|
|
196
|
-
diff --git a/dist/lib/ts.mjs.map b/dist/lib/ts.mjs.map
|
|
197
|
-
index 543cd035324e2aaa37793666b31caca98fd91139..670c4710ef1c6567492790a6c4a12a01f4745276 100644
|
|
198
|
-
--- a/dist/lib/ts.mjs.map
|
|
199
|
-
+++ b/dist/lib/ts.mjs.map
|
|
200
|
-
@@ -1 +1 @@
|
|
201
|
-
-{"version":3,"file":"ts.mjs","sources":["../../src/lib/ts.ts"],"sourcesContent":["import type { OasRef, Referenced } from \"@redocly/openapi-core\";\nimport { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts, { type LiteralTypeNode, type TypeLiteralNode } from \"typescript\";\nimport type { ParameterObject } from \"../types.js\";\n\nexport const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;\nexport const JS_ENUM_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+(.)?/g;\nexport const JS_PROPERTY_INDEX_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+/g;\nexport const SPECIAL_CHARACTER_MAP: Record<string, string> = {\n \"+\": \"Plus\",\n // Add more mappings as needed\n};\n\nexport const BOOLEAN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);\nexport const FALSE = ts.factory.createLiteralTypeNode(ts.factory.createFalse());\nexport const NEVER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);\nexport const NULL = ts.factory.createLiteralTypeNode(ts.factory.createNull());\nexport const NUMBER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);\nexport const QUESTION_TOKEN = ts.factory.createToken(ts.SyntaxKind.QuestionToken);\nexport const STRING = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);\nexport const TRUE = ts.factory.createLiteralTypeNode(ts.factory.createTrue());\nexport const UNDEFINED = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword);\nexport const UNKNOWN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n\nconst LB_RE = /\\r?\\n/g;\nconst COMMENT_RE = /\\*\\//g;\n\nexport interface AnnotatedSchemaObject {\n const?: unknown; // jsdoc without value\n default?: unknown; // jsdoc with value\n deprecated?: boolean; // jsdoc without value\n description?: string; // jsdoc with value\n enum?: unknown[]; // jsdoc without value\n example?: string; // jsdoc with value\n examples?: unknown;\n format?: string; // not jsdoc\n nullable?: boolean; // Node information\n summary?: string; // not jsdoc\n title?: string; // not jsdoc\n type?: string | string[]; // Type of node\n}\n\n/**\n * Preparing comments from fields\n * @see {comment} for output examples\n * @returns void if not comments or jsdoc format comment string\n */\nexport function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void {\n if (!schemaObject || typeof schemaObject !== \"object\" || Array.isArray(schemaObject)) {\n return;\n }\n const output: string[] = [];\n\n // Not JSDoc tags: [title, format]\n if (schemaObject.title) {\n output.push(schemaObject.title.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.summary) {\n output.push(schemaObject.summary.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.format) {\n output.push(`Format: ${schemaObject.format}`);\n }\n\n // JSDoc tags without value\n // 'Deprecated' without value\n if (schemaObject.deprecated) {\n output.push(\"@deprecated\");\n }\n\n // JSDoc tags with value\n const supportedJsDocTags = [\"description\", \"default\", \"example\"] as const;\n for (const field of supportedJsDocTags) {\n const allowEmptyString = field === \"default\" || field === \"example\";\n if (schemaObject[field] === undefined) {\n continue;\n }\n if (schemaObject[field] === \"\" && !allowEmptyString) {\n continue;\n }\n const serialized =\n typeof schemaObject[field] === \"object\" ? JSON.stringify(schemaObject[field], null, 2) : schemaObject[field];\n output.push(`@${field} ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n\n if (Array.isArray(schemaObject.examples)) {\n for (const example of schemaObject.examples) {\n const serialized = typeof example === \"object\" ? JSON.stringify(example, null, 2) : example;\n output.push(`@example ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n }\n\n // JSDoc 'Constant' without value\n if (\"const\" in schemaObject) {\n output.push(\"@constant\");\n }\n\n // JSDoc 'Enum' with type\n if (schemaObject.enum) {\n let type = \"unknown\";\n if (Array.isArray(schemaObject.type)) {\n type = schemaObject.type.join(\"|\");\n } else if (typeof schemaObject.type === \"string\") {\n type = schemaObject.type;\n }\n output.push(`@enum {${type}${schemaObject.nullable ? \"|null\" : \"\"}}`);\n }\n\n // attach comment if it has content\n\n if (output.length) {\n // Check if any output item contains multi-line content (has internal line breaks)\n const hasMultiLineContent = output.some((item) => item.includes(\"\\n\"));\n\n let text =\n output.length === 1 && !hasMultiLineContent ? `* ${output.join(\"\\n\")} ` : `*\\n * ${output.join(\"\\n * \")}\\n `;\n text = text.replace(COMMENT_RE, \"*\\\\/\"); // prevent inner comments from leaking\n\n ts.addSyntheticLeadingComment(\n /* node */ node,\n /* kind */ ts.SyntaxKind.MultiLineCommentTrivia, // note: MultiLine just refers to a \"/* */\" comment\n /* text */ text,\n /* hasTrailingNewLine */ true,\n );\n }\n}\n\nfunction isOasRef<T>(obj: Referenced<T>): obj is OasRef {\n return Boolean((obj as OasRef).$ref);\n}\ntype OapiRefResolved = Referenced<ParameterObject>;\n\nfunction isParameterObject(obj: OapiRefResolved | undefined): obj is ParameterObject {\n return Boolean(obj && !isOasRef(obj) && obj.in);\n}\n\nfunction addIndexedAccess(node: ts.TypeReferenceNode | ts.IndexedAccessTypeNode, ...segments: readonly string[]) {\n return segments.reduce((acc, segment) => {\n return ts.factory.createIndexedAccessTypeNode(\n acc,\n ts.factory.createLiteralTypeNode(\n typeof segment === \"number\"\n ? ts.factory.createNumericLiteral(segment)\n : ts.factory.createStringLiteral(segment),\n ),\n );\n }, node);\n}\n\n/**\n * Convert OpenAPI ref into TS indexed access node (ex: `components[\"schemas\"][\"Foo\"]`)\n * `path` is a JSON Pointer to a location within an OpenAPI document.\n * Transform it into a TypeScript type reference into the generated types.\n *\n * In most cases the structures of the openapi-typescript generated types and the\n * JSON Pointer paths into the OpenAPI document are the same. However, in some cases\n * special transformations are necessary to account for the ways they differ.\n * * Object schemas\n * $refs into the `properties` of object schemas are valid, but openapi-typescript\n * flattens these objects, so we omit so the index into the schema skips [\"properties\"]\n * * Parameters\n * $refs into the `parameters` of paths are valid, but openapi-ts represents\n * them according to their type; path, query, header, etc… so in these cases we\n * must check the parameter definition to determine the how to index into\n * the openapi-typescript type.\n **/\nexport function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode {\n const { pointer } = parseRef(path);\n if (pointer.length === 0) {\n throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);\n }\n\n const parametersObject = isParameterObject(resolved);\n\n // Initial segments are handled in a fixed , then remaining segments are treated\n // according to heuristics based on the initial segments\n const initialSegment = pointer[0];\n const leadingSegments = pointer.slice(1, 3);\n const restSegments = pointer.slice(3);\n\n const leadingType = addIndexedAccess(\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(String(initialSegment))),\n ...leadingSegments,\n );\n\n return restSegments.reduce<ts.TypeReferenceNode | ts.IndexedAccessTypeNode>((acc, segment, index, original) => {\n // Skip `properties` items when in the middle of the pointer\n // See: https://github.com/openapi-ts/openapi-typescript/issues/1742\n if (segment === \"properties\") {\n return acc;\n }\n\n if (parametersObject && index === original.length - 1) {\n return addIndexedAccess(acc, resolved.in, resolved.name);\n }\n\n return addIndexedAccess(acc, segment);\n }, leadingType);\n}\n\nexport interface AstToStringOptions {\n fileName?: string;\n sourceText?: string;\n formatOptions?: ts.PrinterOptions;\n}\n\n/** Convert TypeScript AST to string */\nexport function astToString(\n ast: ts.Node | ts.Node[] | ts.TypeElement | ts.TypeElement[],\n options?: AstToStringOptions,\n): string {\n const sourceFile = ts.createSourceFile(\n options?.fileName ?? \"openapi-ts.ts\",\n options?.sourceText ?? \"\",\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n\n // @ts-expect-error it’s OK to overwrite statements once\n sourceFile.statements = ts.factory.createNodeArray(Array.isArray(ast) ? ast : [ast]);\n\n const printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n ...options?.formatOptions,\n });\n return printer.printFile(sourceFile);\n}\n\n/** Convert an arbitrary string to TS (assuming it’s valid) */\nexport function stringToAST(source: string): unknown[] {\n return ts.createSourceFile(\n /* fileName */ \"stringInput\",\n /* sourceText */ source,\n /* languageVersion */ ts.ScriptTarget.ESNext,\n /* setParentNodes */ undefined,\n /* scriptKind */ undefined,\n ).statements as any;\n}\n\n/**\n * Deduplicate simple primitive types from an array of nodes\n * Note: won’t deduplicate complex types like objects\n */\nexport function tsDedupe(types: ts.TypeNode[]): ts.TypeNode[] {\n const encounteredTypes = new Set<number>();\n const filteredTypes: ts.TypeNode[] = [];\n for (const t of types) {\n // only mark for deduplication if this is not a const (\"text\" means it is a const)\n if (!(\"text\" in ((t as LiteralTypeNode).literal ?? t))) {\n const { kind } = (t as LiteralTypeNode).literal ?? t;\n if (encounteredTypes.has(kind)) {\n continue;\n }\n if (tsIsPrimitive(t)) {\n encounteredTypes.add(kind);\n }\n }\n filteredTypes.push(t);\n }\n return filteredTypes;\n}\n\nexport const enumCache = new Map<string, ts.EnumDeclaration>();\n\n/** Create a TS enum (with sanitized name and members) */\nexport function tsEnum(\n name: string,\n members: (string | number)[],\n metadata?: { name?: string; description?: string | null }[],\n options?: { export?: boolean; shouldCache?: boolean },\n) {\n let enumName = sanitizeMemberName(name);\n enumName = `${enumName[0].toUpperCase()}${enumName.substring(1)}`;\n let key = \"\";\n if (options?.shouldCache) {\n key = `${members\n .slice(0)\n .sort()\n .map((v, i) => {\n return `${metadata?.[i]?.name ?? String(v)}:${metadata?.[i]?.description || \"\"}`;\n })\n .join(\",\")}`;\n if (enumCache.has(key)) {\n return enumCache.get(key) as ts.EnumDeclaration;\n }\n }\n const enumDeclaration = ts.factory.createEnumDeclaration(\n /* modifiers */ options ? tsModifiers({ export: options.export ?? false }) : undefined,\n /* name */ enumName,\n /* members */ members.map((value, i) => tsEnumMember(value, metadata?.[i])),\n );\n options?.shouldCache && enumCache.set(key, enumDeclaration);\n return enumDeclaration;\n}\n\n/** Create an exported TS array literal expression */\nexport function tsArrayLiteralExpression(\n name: string,\n elementType: ts.TypeNode,\n values: (string | number)[],\n options?: { export?: boolean; readonly?: boolean; injectFooter?: ts.Node[] },\n) {\n let variableName = sanitizeMemberName(name);\n variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;\n\n const arrayType = options?.readonly\n ? tsReadonlyArray(elementType, options.injectFooter)\n : ts.factory.createArrayTypeNode(elementType);\n\n return ts.factory.createVariableStatement(\n options ? tsModifiers({ export: options.export ?? false }) : undefined,\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n variableName,\n undefined,\n arrayType,\n ts.factory.createArrayLiteralExpression(\n values.map((value) => {\n if (typeof value === \"number\") {\n if (value < 0) {\n return ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n );\n } else {\n return ts.factory.createNumericLiteral(value);\n }\n } else {\n return ts.factory.createStringLiteral(value);\n }\n }),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n}\n\nfunction sanitizeMemberName(name: string) {\n let sanitizedName = name.replace(JS_ENUM_INVALID_CHARS_RE, (c) => {\n const last = c[c.length - 1];\n return JS_PROPERTY_INDEX_INVALID_CHARS_RE.test(last) ? \"\" : last.toUpperCase();\n });\n if (Number(name[0]) >= 0) {\n sanitizedName = `Value${name}`;\n }\n return sanitizedName;\n}\n\n/** Sanitize TS enum member expression */\nexport function tsEnumMember(value: string | number, metadata: { name?: string; description?: string | null } = {}) {\n let name = metadata.name ?? String(value);\n if (!JS_PROPERTY_INDEX_RE.test(name)) {\n if (Number(name[0]) >= 0) {\n name = `Value${name}`.replace(\".\", \"_\"); // don't forged decimals;\n } else if (name[0] === \"-\") {\n name = `ValueMinus${name.slice(1)}`;\n }\n\n const invalidCharMatch = name.match(JS_PROPERTY_INDEX_INVALID_CHARS_RE);\n if (invalidCharMatch) {\n if (invalidCharMatch[0] === name) {\n name = `\"${name}\"`;\n } else {\n name = name.replace(JS_PROPERTY_INDEX_INVALID_CHARS_RE, (s) => {\n return s in SPECIAL_CHARACTER_MAP ? SPECIAL_CHARACTER_MAP[s] : \"_\";\n });\n }\n }\n }\n\n let member: ts.EnumMember;\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n\n member = ts.factory.createEnumMember(name, literal);\n } else {\n member = ts.factory.createEnumMember(name, ts.factory.createStringLiteral(value));\n }\n\n const trimmedDescription = metadata.description?.trim();\n if (trimmedDescription === undefined || trimmedDescription === null || trimmedDescription === \"\") {\n return member;\n }\n\n return ts.addSyntheticLeadingComment(member, ts.SyntaxKind.SingleLineCommentTrivia, ` ${trimmedDescription}`, true);\n}\n\n/** Create an intersection type */\nexport function tsIntersection(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createIntersectionTypeNode(tsDedupe(types));\n}\n\n/** Is this a primitive type (string, number, boolean, null, undefined)? */\nexport function tsIsPrimitive(type: ts.TypeNode): boolean {\n if (!type) {\n return true;\n }\n return (\n ts.SyntaxKind[type.kind] === \"BooleanKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NeverKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NullKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NumberKeyword\" ||\n ts.SyntaxKind[type.kind] === \"StringKeyword\" ||\n ts.SyntaxKind[type.kind] === \"UndefinedKeyword\" ||\n (\"literal\" in type && tsIsPrimitive(type.literal as TypeLiteralNode))\n );\n}\n\n/** Create a literal type */\nexport function tsLiteral(value: unknown): ts.TypeNode {\n if (typeof value === \"string\") {\n // workaround for UTF-8: https://github.com/microsoft/TypeScript/issues/36174\n return ts.factory.createIdentifier(JSON.stringify(value)) as unknown as ts.TypeNode;\n }\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n return ts.factory.createLiteralTypeNode(literal);\n }\n if (typeof value === \"boolean\") {\n return value === true ? TRUE : FALSE;\n }\n if (value === null) {\n return NULL;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return ts.factory.createArrayTypeNode(NEVER);\n }\n return ts.factory.createTupleTypeNode(value.map((v: unknown) => tsLiteral(v)));\n }\n if (typeof value === \"object\") {\n const keys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(value)) {\n keys.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ tsLiteral(v),\n ),\n );\n }\n return keys.length ? ts.factory.createTypeLiteralNode(keys) : tsRecord(STRING, NEVER);\n }\n return UNKNOWN;\n}\n\n/** Modifiers (readonly) */\nexport function tsModifiers(modifiers: { readonly?: boolean; export?: boolean }): ts.Modifier[] {\n const typeMods: ts.Modifier[] = [];\n if (modifiers.export) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ExportKeyword));\n }\n if (modifiers.readonly) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword));\n }\n return typeMods;\n}\n\n/** Create a T | null union */\nexport function tsNullable(types: ts.TypeNode[]): ts.TypeNode {\n return ts.factory.createUnionTypeNode([...types, NULL]);\n}\n\n/** Create a TS Omit<X, Y> type */\nexport function tsOmit(type: ts.TypeNode, keys: string[]): ts.TypeNode {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Omit\"), [\n type,\n ts.factory.createUnionTypeNode(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/** Create a TS Record<X, Y> type */\nexport function tsRecord(key: ts.TypeNode, value: ts.TypeNode) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Record\"), [key, value]);\n}\n\n/** Create a valid property index */\nexport function tsPropertyIndex(index: string | number) {\n if (\n (typeof index === \"number\" && !(index < 0)) ||\n (typeof index === \"string\" && String(Number(index)) === index && index[0] !== \"-\")\n ) {\n return ts.factory.createNumericLiteral(index);\n }\n return typeof index === \"string\" && JS_PROPERTY_INDEX_RE.test(index)\n ? ts.factory.createIdentifier(index)\n : ts.factory.createStringLiteral(String(index));\n}\n\n/** Create a union type */\nexport function tsUnion(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createUnionTypeNode(tsDedupe(types));\n}\n\n/** Create a WithRequired<X, Y> type */\nexport function tsWithRequired(\n type: ts.TypeNode,\n keys: string[],\n injectFooter: ts.Node[], // needed to inject type helper if used\n): ts.TypeNode {\n if (keys.length === 0) {\n return type;\n }\n\n // inject helper, if needed\n if (!injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"WithRequired\")) {\n const helper = stringToAST(\"type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\")[0] as any;\n injectFooter.push(helper);\n }\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"WithRequired\"), [\n type,\n tsUnion(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/**\n * Enhanced ReadonlyArray.\n * eg: type Foo = ReadonlyArray<T>; type Bar = ReadonlyArray<T[]>\n * Foo and Bar are both of type `readonly T[]`\n */\nexport function tsReadonlyArray(type: ts.TypeNode, injectFooter?: ts.Node[]): ts.TypeNode {\n if (\n injectFooter &&\n !injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"ReadonlyArray\")\n ) {\n const helper = stringToAST(\n \"type ReadonlyArray<T> = [Exclude<T, undefined>] extends [unknown[]] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n )[0] as any;\n injectFooter.push(helper);\n }\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"ReadonlyArray\"), [type]);\n}\n"],"names":[],"mappings":"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"}
|
|
202
|
-
|
|
203
|
-
+{"version":3,"file":"ts.mjs","sources":["../../src/lib/ts.ts"],"sourcesContent":["import type { OasRef, Referenced } from \"@redocly/openapi-core\";\nimport { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts, { type LiteralTypeNode, type TypeLiteralNode } from \"typescript\";\nimport type { ParameterObject } from \"../types.js\";\n\nexport const JS_PROPERTY_INDEX_RE = /^[A-Za-z_$][A-Za-z_$0-9]*$/;\nexport const JS_ENUM_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+(.)?/g;\nexport const JS_PROPERTY_INDEX_INVALID_CHARS_RE = /[^A-Za-z_$0-9]+/g;\nexport const SPECIAL_CHARACTER_MAP: Record<string, string> = {\n \"+\": \"Plus\",\n // Add more mappings as needed\n};\n\nexport const BOOLEAN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);\nexport const FALSE = ts.factory.createLiteralTypeNode(ts.factory.createFalse());\nexport const NEVER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);\nexport const NULL = ts.factory.createLiteralTypeNode(ts.factory.createNull());\nexport const NUMBER = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);\nexport const QUESTION_TOKEN = ts.factory.createToken(ts.SyntaxKind.QuestionToken);\nexport const STRING = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);\nexport const TRUE = ts.factory.createLiteralTypeNode(ts.factory.createTrue());\nexport const UNDEFINED = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword);\nexport const UNKNOWN = ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword);\n\nconst LB_RE = /\\r?\\n/g;\nconst COMMENT_RE = /\\*\\//g;\n\nexport interface AnnotatedSchemaObject {\n const?: unknown; // jsdoc without value\n default?: unknown; // jsdoc with value\n deprecated?: boolean; // jsdoc without value\n description?: string; // jsdoc with value\n enum?: unknown[]; // jsdoc without value\n example?: string; // jsdoc with value\n examples?: unknown;\n format?: string; // not jsdoc\n nullable?: boolean; // Node information\n summary?: string; // not jsdoc\n title?: string; // not jsdoc\n type?: string | string[]; // Type of node\n}\n\n/**\n * Preparing comments from fields\n * @see {comment} for output examples\n * @returns void if not comments or jsdoc format comment string\n */\nexport function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void {\n if (!schemaObject || typeof schemaObject !== \"object\" || Array.isArray(schemaObject)) {\n return;\n }\n const output: string[] = [];\n\n // Not JSDoc tags: [title, format]\n if (schemaObject.title) {\n output.push(schemaObject.title.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.summary) {\n output.push(schemaObject.summary.trim().replace(LB_RE, \"\\n * \"));\n }\n if (schemaObject.format) {\n output.push(`Format: ${schemaObject.format}`);\n }\n\n // JSDoc tags without value\n // 'Deprecated' without value\n if (schemaObject.deprecated) {\n output.push(\"@deprecated\");\n }\n\n // JSDoc tags with value\n const supportedJsDocTags = [\"description\", \"default\", \"example\"] as const;\n for (const field of supportedJsDocTags) {\n const allowEmptyString = field === \"default\" || field === \"example\";\n if (schemaObject[field] === undefined) {\n continue;\n }\n if (schemaObject[field] === \"\" && !allowEmptyString) {\n continue;\n }\n const serialized =\n typeof schemaObject[field] === \"object\" ? JSON.stringify(schemaObject[field], null, 2) : schemaObject[field];\n output.push(`@${field} ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n\n if (Array.isArray(schemaObject.examples)) {\n for (const example of schemaObject.examples) {\n const serialized = typeof example === \"object\" ? JSON.stringify(example, null, 2) : example;\n output.push(`@example ${String(serialized).trim().replace(LB_RE, \"\\n * \")}`);\n }\n }\n\n // JSDoc 'Constant' without value\n if (\"const\" in schemaObject) {\n output.push(\"@constant\");\n }\n\n // JSDoc 'Enum' with type\n if (schemaObject.enum) {\n let type = \"unknown\";\n if (Array.isArray(schemaObject.type)) {\n type = schemaObject.type.join(\"|\");\n } else if (typeof schemaObject.type === \"string\") {\n type = schemaObject.type;\n }\n output.push(`@enum {${type}${schemaObject.nullable ? \"|null\" : \"\"}}`);\n }\n\n // attach comment if it has content\n\n if (output.length) {\n // Check if any output item contains multi-line content (has internal line breaks)\n const hasMultiLineContent = output.some((item) => item.includes(\"\\n\"));\n\n let text =\n output.length === 1 && !hasMultiLineContent ? `* ${output.join(\"\\n\")} ` : `*\\n * ${output.join(\"\\n * \")}\\n `;\n text = text.replace(COMMENT_RE, \"*\\\\/\"); // prevent inner comments from leaking\n\n ts.addSyntheticLeadingComment(\n /* node */ node,\n /* kind */ ts.SyntaxKind.MultiLineCommentTrivia, // note: MultiLine just refers to a \"/* */\" comment\n /* text */ text,\n /* hasTrailingNewLine */ true,\n );\n }\n}\n\nfunction isOasRef<T>(obj: Referenced<T>): obj is OasRef {\n return Boolean((obj as OasRef).$ref);\n}\ntype OapiRefResolved = Referenced<ParameterObject>;\n\nfunction isParameterObject(obj: OapiRefResolved | undefined): obj is ParameterObject {\n return Boolean(obj && !isOasRef(obj) && obj.in);\n}\n\nfunction addIndexedAccess(node: ts.TypeReferenceNode | ts.IndexedAccessTypeNode, ...segments: readonly string[]) {\n return segments.reduce((acc, segment) => {\n return ts.factory.createIndexedAccessTypeNode(\n acc,\n ts.factory.createLiteralTypeNode(\n typeof segment === \"number\"\n ? ts.factory.createNumericLiteral(segment)\n : ts.factory.createStringLiteral(segment),\n ),\n );\n }, node);\n}\n\n/**\n * Convert OpenAPI ref into TS indexed access node (ex: `components[\"schemas\"][\"Foo\"]`)\n * `path` is a JSON Pointer to a location within an OpenAPI document.\n * Transform it into a TypeScript type reference into the generated types.\n *\n * In most cases the structures of the openapi-typescript generated types and the\n * JSON Pointer paths into the OpenAPI document are the same. However, in some cases\n * special transformations are necessary to account for the ways they differ.\n * * Object schemas\n * $refs into the `properties` of object schemas are valid, but openapi-typescript\n * flattens these objects, so we omit so the index into the schema skips [\"properties\"]\n * * Parameters\n * $refs into the `parameters` of paths are valid, but openapi-ts represents\n * them according to their type; path, query, header, etc… so in these cases we\n * must check the parameter definition to determine the how to index into\n * the openapi-typescript type.\n **/\nexport function oapiRef(path: string, resolved?: OapiRefResolved, deep = false): ts.TypeNode {\n const { pointer } = parseRef(path);\n if (pointer.length === 0) {\n throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);\n }\n\n const parametersObject = isParameterObject(resolved);\n\n // Initial segments are handled in a fixed , then remaining segments are treated\n // according to heuristics based on the initial segments\n const initialSegment = pointer[0];\n const leadingSegments = pointer.slice(1, 3);\n const restSegments = pointer.slice(3);\n\n const leadingType = addIndexedAccess(\n ts.factory.createTypeReferenceNode(\n ts.factory.createIdentifier(deep ? `FlattenedDeepRequired<${String(initialSegment)}>` : String(initialSegment)),\n ),\n ...leadingSegments,\n );\n\n return restSegments.reduce<ts.TypeReferenceNode | ts.IndexedAccessTypeNode>((acc, segment, index, original) => {\n // Skip `properties` items when in the middle of the pointer\n // See: https://github.com/openapi-ts/openapi-typescript/issues/1742\n if (segment === \"properties\") {\n return acc;\n }\n\n if (parametersObject && index === original.length - 1) {\n return addIndexedAccess(acc, resolved.in, resolved.name);\n }\n\n return addIndexedAccess(acc, segment);\n }, leadingType);\n}\n\nexport interface AstToStringOptions {\n fileName?: string;\n sourceText?: string;\n formatOptions?: ts.PrinterOptions;\n}\n\n/** Convert TypeScript AST to string */\nexport function astToString(\n ast: ts.Node | ts.Node[] | ts.TypeElement | ts.TypeElement[],\n options?: AstToStringOptions,\n): string {\n const sourceFile = ts.createSourceFile(\n options?.fileName ?? \"openapi-ts.ts\",\n options?.sourceText ?? \"\",\n ts.ScriptTarget.ESNext,\n false,\n ts.ScriptKind.TS,\n );\n\n // @ts-expect-error it’s OK to overwrite statements once\n sourceFile.statements = ts.factory.createNodeArray(Array.isArray(ast) ? ast : [ast]);\n\n const printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n ...options?.formatOptions,\n });\n return printer.printFile(sourceFile);\n}\n\n/** Convert an arbitrary string to TS (assuming it’s valid) */\nexport function stringToAST(source: string): unknown[] {\n return ts.createSourceFile(\n /* fileName */ \"stringInput\",\n /* sourceText */ source,\n /* languageVersion */ ts.ScriptTarget.ESNext,\n /* setParentNodes */ undefined,\n /* scriptKind */ undefined,\n ).statements as any;\n}\n\n/**\n * Deduplicate simple primitive types from an array of nodes\n * Note: won’t deduplicate complex types like objects\n */\nexport function tsDedupe(types: ts.TypeNode[]): ts.TypeNode[] {\n const encounteredTypes = new Set<number>();\n const filteredTypes: ts.TypeNode[] = [];\n for (const t of types) {\n // only mark for deduplication if this is not a const (\"text\" means it is a const)\n if (!(\"text\" in ((t as LiteralTypeNode).literal ?? t))) {\n const { kind } = (t as LiteralTypeNode).literal ?? t;\n if (encounteredTypes.has(kind)) {\n continue;\n }\n if (tsIsPrimitive(t)) {\n encounteredTypes.add(kind);\n }\n }\n filteredTypes.push(t);\n }\n return filteredTypes;\n}\n\nexport const enumCache = new Map<string, ts.EnumDeclaration>();\n\n/** Create a TS enum (with sanitized name and members) */\nexport function tsEnum(\n name: string,\n members: (string | number)[],\n metadata?: { name?: string; description?: string | null }[],\n options?: { export?: boolean; shouldCache?: boolean },\n) {\n let enumName = sanitizeMemberName(name);\n enumName = `${enumName[0].toUpperCase()}${enumName.substring(1)}`;\n let key = \"\";\n if (options?.shouldCache) {\n key = `${members\n .slice(0)\n .sort()\n .map((v, i) => {\n return `${metadata?.[i]?.name ?? String(v)}:${metadata?.[i]?.description || \"\"}`;\n })\n .join(\",\")}`;\n if (enumCache.has(key)) {\n return enumCache.get(key) as ts.EnumDeclaration;\n }\n }\n const enumDeclaration = ts.factory.createEnumDeclaration(\n /* modifiers */ options ? tsModifiers({ export: options.export ?? false }) : undefined,\n /* name */ enumName,\n /* members */ members.map((value, i) => tsEnumMember(value, metadata?.[i])),\n );\n options?.shouldCache && enumCache.set(key, enumDeclaration);\n return enumDeclaration;\n}\n\n/** Create an exported TS array literal expression */\nexport function tsArrayLiteralExpression(\n name: string,\n elementType: ts.TypeNode,\n values: (string | number)[],\n options?: { export?: boolean; readonly?: boolean; injectFooter?: ts.Node[] },\n) {\n let variableName = sanitizeMemberName(name);\n variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;\n\n if (\n options?.injectFooter &&\n !options.injectFooter.some(\n (node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"FlattenedDeepRequired\",\n )\n ) {\n const helper = stringToAST(\n \"type FlattenedDeepRequired<T> = { [K in keyof T]-?: FlattenedDeepRequired<T[K] extends unknown[] | undefined | null ? Extract<T[K], unknown[]>[number] : T[K]>; };\",\n )[0] as any;\n options.injectFooter.push(helper);\n }\n\n const arrayType = options?.readonly\n ? tsReadonlyArray(elementType, options.injectFooter)\n : ts.factory.createArrayTypeNode(elementType);\n\n return ts.factory.createVariableStatement(\n options ? tsModifiers({ export: options.export ?? false }) : undefined,\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n variableName,\n undefined,\n arrayType,\n ts.factory.createArrayLiteralExpression(\n values.map((value) => {\n if (typeof value === \"number\") {\n if (value < 0) {\n return ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n );\n } else {\n return ts.factory.createNumericLiteral(value);\n }\n } else {\n return ts.factory.createStringLiteral(value);\n }\n }),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n}\n\nfunction sanitizeMemberName(name: string) {\n let sanitizedName = name.replace(JS_ENUM_INVALID_CHARS_RE, (c) => {\n const last = c[c.length - 1];\n return JS_PROPERTY_INDEX_INVALID_CHARS_RE.test(last) ? \"\" : last.toUpperCase();\n });\n if (Number(name[0]) >= 0) {\n sanitizedName = `Value${name}`;\n }\n return sanitizedName;\n}\n\n/** Sanitize TS enum member expression */\nexport function tsEnumMember(value: string | number, metadata: { name?: string; description?: string | null } = {}) {\n let name = metadata.name ?? String(value);\n if (!JS_PROPERTY_INDEX_RE.test(name)) {\n if (Number(name[0]) >= 0) {\n name = `Value${name}`.replace(\".\", \"_\"); // don't forged decimals;\n } else if (name[0] === \"-\") {\n name = `ValueMinus${name.slice(1)}`;\n }\n\n const invalidCharMatch = name.match(JS_PROPERTY_INDEX_INVALID_CHARS_RE);\n if (invalidCharMatch) {\n if (invalidCharMatch[0] === name) {\n name = `\"${name}\"`;\n } else {\n name = name.replace(JS_PROPERTY_INDEX_INVALID_CHARS_RE, (s) => {\n return s in SPECIAL_CHARACTER_MAP ? SPECIAL_CHARACTER_MAP[s] : \"_\";\n });\n }\n }\n }\n\n let member: ts.EnumMember;\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n\n member = ts.factory.createEnumMember(name, literal);\n } else {\n member = ts.factory.createEnumMember(name, ts.factory.createStringLiteral(value));\n }\n\n const trimmedDescription = metadata.description?.trim();\n if (trimmedDescription === undefined || trimmedDescription === null || trimmedDescription === \"\") {\n return member;\n }\n\n return ts.addSyntheticLeadingComment(member, ts.SyntaxKind.SingleLineCommentTrivia, ` ${trimmedDescription}`, true);\n}\n\n/** Create an intersection type */\nexport function tsIntersection(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createIntersectionTypeNode(tsDedupe(types));\n}\n\n/** Is this a primitive type (string, number, boolean, null, undefined)? */\nexport function tsIsPrimitive(type: ts.TypeNode): boolean {\n if (!type) {\n return true;\n }\n return (\n ts.SyntaxKind[type.kind] === \"BooleanKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NeverKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NullKeyword\" ||\n ts.SyntaxKind[type.kind] === \"NumberKeyword\" ||\n ts.SyntaxKind[type.kind] === \"StringKeyword\" ||\n ts.SyntaxKind[type.kind] === \"UndefinedKeyword\" ||\n (\"literal\" in type && tsIsPrimitive(type.literal as TypeLiteralNode))\n );\n}\n\n/** Create a literal type */\nexport function tsLiteral(value: unknown): ts.TypeNode {\n if (typeof value === \"string\") {\n // workaround for UTF-8: https://github.com/microsoft/TypeScript/issues/36174\n return ts.factory.createIdentifier(JSON.stringify(value)) as unknown as ts.TypeNode;\n }\n if (typeof value === \"number\") {\n const literal =\n value < 0\n ? ts.factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n ts.factory.createNumericLiteral(Math.abs(value)),\n )\n : ts.factory.createNumericLiteral(value);\n return ts.factory.createLiteralTypeNode(literal);\n }\n if (typeof value === \"boolean\") {\n return value === true ? TRUE : FALSE;\n }\n if (value === null) {\n return NULL;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return ts.factory.createArrayTypeNode(NEVER);\n }\n return ts.factory.createTupleTypeNode(value.map((v: unknown) => tsLiteral(v)));\n }\n if (typeof value === \"object\") {\n const keys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(value)) {\n keys.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ tsLiteral(v),\n ),\n );\n }\n return keys.length ? ts.factory.createTypeLiteralNode(keys) : tsRecord(STRING, NEVER);\n }\n return UNKNOWN;\n}\n\n/** Modifiers (readonly) */\nexport function tsModifiers(modifiers: { readonly?: boolean; export?: boolean }): ts.Modifier[] {\n const typeMods: ts.Modifier[] = [];\n if (modifiers.export) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ExportKeyword));\n }\n if (modifiers.readonly) {\n typeMods.push(ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword));\n }\n return typeMods;\n}\n\n/** Create a T | null union */\nexport function tsNullable(types: ts.TypeNode[]): ts.TypeNode {\n return ts.factory.createUnionTypeNode([...types, NULL]);\n}\n\n/** Create a TS Omit<X, Y> type */\nexport function tsOmit(type: ts.TypeNode, keys: string[]): ts.TypeNode {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Omit\"), [\n type,\n ts.factory.createUnionTypeNode(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/** Create a TS Record<X, Y> type */\nexport function tsRecord(key: ts.TypeNode, value: ts.TypeNode) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"Record\"), [key, value]);\n}\n\n/** Create a valid property index */\nexport function tsPropertyIndex(index: string | number) {\n if (\n (typeof index === \"number\" && !(index < 0)) ||\n (typeof index === \"string\" && String(Number(index)) === index && index[0] !== \"-\")\n ) {\n return ts.factory.createNumericLiteral(index);\n }\n return typeof index === \"string\" && JS_PROPERTY_INDEX_RE.test(index)\n ? ts.factory.createIdentifier(index)\n : ts.factory.createStringLiteral(String(index));\n}\n\n/** Create a union type */\nexport function tsUnion(types: ts.TypeNode[]): ts.TypeNode {\n if (types.length === 0) {\n return NEVER;\n }\n if (types.length === 1) {\n return types[0];\n }\n return ts.factory.createUnionTypeNode(tsDedupe(types));\n}\n\n/** Create a WithRequired<X, Y> type */\nexport function tsWithRequired(\n type: ts.TypeNode,\n keys: string[],\n injectFooter: ts.Node[], // needed to inject type helper if used\n): ts.TypeNode {\n if (keys.length === 0) {\n return type;\n }\n\n // inject helper, if needed\n if (!injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"WithRequired\")) {\n const helper = stringToAST(\"type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\")[0] as any;\n injectFooter.push(helper);\n }\n\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"WithRequired\"), [\n type,\n tsUnion(keys.map((k) => tsLiteral(k))),\n ]);\n}\n\n/**\n * Enhanced ReadonlyArray.\n * eg: type Foo = ReadonlyArray<T>; type Bar = ReadonlyArray<T[]>\n * Foo and Bar are both of type `readonly T[]`\n */\nexport function tsReadonlyArray(type: ts.TypeNode, injectFooter?: ts.Node[]): ts.TypeNode {\n if (\n injectFooter &&\n !injectFooter.some((node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === \"ReadonlyArray\")\n ) {\n const helper = stringToAST(\n \"type ReadonlyArray<T> = [Exclude<T, undefined>] extends [unknown[]] ? Readonly<Exclude<T, undefined>> : Readonly<Exclude<T, undefined>[]>;\",\n )[0] as any;\n injectFooter.push(helper);\n }\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"ReadonlyArray\"), [type]);\n}\n"],"names":[],"mappings":"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"}
|
|
204
|
-
|
|
205
|
-
diff --git a/dist/lib/utils.cjs.map b/dist/lib/utils.cjs.map
|
|
206
|
-
index 47bab3b9947c76adf5ed9b6a49786c9dfdf0d471..ceb4e69162d1f60cfcde0fe9b48058ecaed81cd9 100644
|
|
207
|
-
--- a/dist/lib/utils.cjs.map
|
|
208
|
-
+++ b/dist/lib/utils.cjs.map
|
|
209
|
-
@@ -1 +1 @@
|
|
210
|
-
-{"version":3,"file":"utils.cjs","sources":["../../src/lib/utils.ts"],"sourcesContent":["import { escapePointer, parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport c from \"ansi-colors\";\nimport supportsColor from \"supports-color\";\nimport ts from \"typescript\";\nimport type { DiscriminatorObject, OpenAPI3, OpenAPITSOptions, ReferenceObject, SchemaObject } from \"../types.js\";\nimport { tsLiteral, tsModifiers, tsPropertyIndex } from \"./ts.js\";\n\nif (!supportsColor.stdout || supportsColor.stdout.hasBasic === false) {\n c.enabled = false;\n}\n\nconst DEBUG_GROUPS: Record<string, c.StyleFunction | undefined> = {\n redoc: c.cyanBright,\n lint: c.yellowBright,\n bundle: c.magentaBright,\n ts: c.blueBright,\n};\n\nexport { c };\n\n/** Given a discriminator object, get the property name */\nexport function createDiscriminatorProperty(\n discriminator: DiscriminatorObject,\n { path, readonly = false }: { path: string; readonly?: boolean },\n): ts.TypeElement {\n // get the inferred propertyName value from the last section of the path (as the spec suggests to do)\n let value = parseRef(path).pointer.pop();\n // if mapping, and there’s a match, use this rather than the inferred name\n if (discriminator.mapping) {\n // Mapping value can either be a fully-qualified ref (#/components/schemas/XYZ) or a schema name (XYZ)\n const matchedValue = Object.entries(discriminator.mapping).find(\n ([, v]) => (!v.startsWith(\"#\") && v === value) || (v.startsWith(\"#\") && parseRef(v).pointer.pop() === value),\n );\n if (matchedValue) {\n value = matchedValue[0]; // why was this designed backwards!?\n }\n }\n return ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly,\n }),\n /* name */ tsPropertyIndex(discriminator.propertyName),\n /* questionToken */ undefined,\n /* type */ tsLiteral(value),\n );\n}\n\n/** Create a $ref pointer (even from other $refs) */\nexport function createRef(parts: (number | string | undefined | null)[]): string {\n let pointer = \"#\";\n for (const part of parts) {\n if (part === undefined || part === null || part === \"\") {\n continue;\n }\n const maybeRef = parseRef(String(part)).pointer;\n if (maybeRef.length) {\n for (const refPart of maybeRef) {\n pointer += `/${escapePointer(refPart)}`;\n }\n } else {\n pointer += `/${escapePointer(part)}`;\n }\n }\n return pointer;\n}\n\n/** Print debug message (cribbed from the `debug` package, but without all the bells & whistles */\nexport function debug(msg: string, group?: string, time?: number) {\n if (\n process.env.DEBUG &&\n (!group ||\n process.env.DEBUG === \"*\" ||\n process.env.DEBUG === \"openapi-ts:*\" ||\n process.env.DEBUG.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`)\n ) {\n const groupColor = (group && DEBUG_GROUPS[group]) || c.whiteBright;\n const groupName = groupColor(`openapi-ts:${group ?? \"info\"}`);\n let timeFormatted = \"\";\n if (typeof time === \"number\") {\n timeFormatted = c.green(` ${formatTime(time)} `);\n }\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.debug(` ${c.bold(groupName)}${timeFormatted}${msg}`);\n }\n}\n\n/** Print error message */\nexport function error(msg: string) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.error(c.red(` ✘ ${msg}`));\n}\n\n/** Format a performance log in a friendly format */\nexport function formatTime(t: number) {\n if (typeof t === \"number\") {\n if (t < 1000) {\n return `${Math.round(10 * t) / 10}ms`;\n }\n if (t < 60000) {\n return `${Math.round(t / 100) / 10}s`;\n }\n return `${Math.round(t / 6000) / 10}m`;\n }\n return t;\n}\n\n/** Call Object.entries() and optionally sort */\nexport function getEntries<T>(\n obj: ArrayLike<T> | Record<string, T>,\n options?: {\n alphabetize?: boolean;\n excludeDeprecated?: boolean;\n },\n) {\n let entries = Object.entries(obj);\n if (options?.alphabetize) {\n entries.sort(([a], [b]) => a.localeCompare(b, \"en-us\", { numeric: true }));\n }\n if (options?.excludeDeprecated) {\n entries = entries.filter(([, v]) => !(v && typeof v === \"object\" && \"deprecated\" in v && v.deprecated));\n }\n return entries;\n}\n\n/** resolve a $ref in a schema */\nexport function resolveRef<T>(\n schema: any,\n $ref: string,\n { silent = false, visited = [] }: { silent: boolean; visited?: string[] },\n): T | undefined {\n const { pointer } = parseRef($ref);\n if (!pointer.length) {\n return undefined;\n }\n let node = schema;\n for (const key of pointer) {\n if (node && typeof node === \"object\" && node[key]) {\n node = node[key];\n } else {\n warn(`Could not resolve $ref \"${$ref}\"`, silent);\n return undefined;\n }\n }\n\n // if this is also a $ref, keep tracing\n if (node && typeof node === \"object\" && node.$ref) {\n if (visited.includes(node.$ref)) {\n warn(`Could not resolve circular $ref \"${$ref}\"`, silent);\n return undefined;\n }\n return resolveRef(schema, node.$ref, {\n silent,\n visited: [...visited, node.$ref],\n });\n }\n\n return node;\n}\n\nfunction createDiscriminatorEnum(values: string[], prevSchema?: SchemaObject): SchemaObject {\n return {\n type: \"string\",\n enum: values,\n description: prevSchema?.description\n ? `${prevSchema.description} (enum property replaced by openapi-typescript)`\n : \"discriminator enum property added by openapi-typescript\",\n };\n}\n\n/** Adds or replaces the discriminator enum with the passed `values` in a schema defined by `ref` */\nfunction patchDiscriminatorEnum(\n schema: SchemaObject,\n ref: string,\n values: string[],\n discriminator: DiscriminatorObject,\n discriminatorRef: string,\n options: OpenAPITSOptions,\n): boolean {\n const resolvedSchema = resolveRef<SchemaObject>(schema, ref, {\n silent: options.silent ?? false,\n });\n\n if (resolvedSchema?.allOf) {\n // if the schema is an allOf, we can append a new schema object to the allOf array\n resolvedSchema.allOf.push({\n type: \"object\",\n // discriminator enum properties always need to be required\n required: [discriminator.propertyName],\n properties: {\n [discriminator.propertyName]: createDiscriminatorEnum(values),\n },\n });\n\n return true;\n } else if (typeof resolvedSchema === \"object\" && \"type\" in resolvedSchema && resolvedSchema.type === \"object\") {\n // if the schema is an object, we can apply the discriminator enums to its properties\n if (!resolvedSchema.properties) {\n resolvedSchema.properties = {};\n }\n\n // discriminator enum properties always need to be required\n if (!resolvedSchema.required) {\n resolvedSchema.required = [discriminator.propertyName];\n } else if (!resolvedSchema.required.includes(discriminator.propertyName)) {\n resolvedSchema.required.push(discriminator.propertyName);\n }\n\n // add/replace the discriminator enum property\n resolvedSchema.properties[discriminator.propertyName] = createDiscriminatorEnum(\n values,\n resolvedSchema.properties[discriminator.propertyName] as SchemaObject,\n );\n\n return true;\n }\n\n warn(\n `Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): ${ref} => ${values.join(\n \", \",\n )} (Discriminator: ${discriminatorRef})`,\n options.silent,\n );\n\n return false;\n}\n\ntype InternalDiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;\n\n/** Return a key–value map of discriminator objects found in a schema */\nexport function scanDiscriminators(schema: OpenAPI3, options: OpenAPITSOptions) {\n // all discriminator objects found in the schema\n const objects: Record<string, DiscriminatorObject> = {};\n\n // refs of all mapped schema objects we have successfully handled to infer the discriminator enum value\n const refsHandled: string[] = [];\n\n // perform 2 passes: first, collect all discriminator definitions and handle oneOf and mappings\n walk(schema, (obj, path) => {\n const discriminator = obj?.discriminator as DiscriminatorObject | undefined;\n if (!discriminator?.propertyName) {\n return;\n }\n\n // collect discriminator object for later usage\n const ref = createRef(path);\n\n objects[ref] = discriminator;\n\n // if a mapping is available we will help Typescript to infer properties by adding the discriminator enum with its single mapped value to each schema\n // we only handle the mapping in advance for discriminator + oneOf compositions right now\n if (!obj?.oneOf || !Array.isArray(obj.oneOf)) {\n return;\n }\n\n const oneOf: (SchemaObject | ReferenceObject)[] = obj.oneOf;\n const mapping: InternalDiscriminatorMapping = {};\n\n // the mapping can be inferred from the oneOf refs next to the discriminator object\n for (const item of oneOf) {\n if (\"$ref\" in item) {\n // the name of the schema is the inferred discriminator enum value\n const value = item.$ref.split(\"/\").pop();\n\n if (value) {\n if (!mapping[item.$ref]) {\n mapping[item.$ref] = { inferred: value };\n } else {\n mapping[item.$ref].inferred = value;\n }\n }\n }\n }\n\n // the mapping can be defined in the discriminator object itself\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n const mappedRef = discriminator.mapping[mappedValue];\n if (!mappedRef) {\n continue;\n }\n\n if (!mapping[mappedRef]?.defined) {\n // this overrides inferred values, but we don't need them anymore as soon as we have a defined value\n mapping[mappedRef] = { defined: [] };\n }\n\n mapping[mappedRef].defined?.push(mappedValue);\n }\n }\n\n for (const [mappedRef, { inferred, defined }] of Object.entries(mapping)) {\n if (refsHandled.includes(mappedRef)) {\n continue;\n }\n\n if (!inferred && !defined) {\n continue;\n }\n\n // prefer defined values over automatically inferred ones\n // the inferred enum values from the schema might not represent the actual enum values of the discriminator,\n // so if we have defined values, use them instead\n // biome-ignore lint/style/noNonNullAssertion: we just checked for this\n const mappedValues = defined ?? [inferred!];\n\n if (\n patchDiscriminatorEnum(schema as unknown as SchemaObject, mappedRef, mappedValues, discriminator, ref, options)\n ) {\n refsHandled.push(mappedRef);\n }\n }\n });\n\n // second, collect the schema objects that inherit from discriminators\n // (sometimes this mapping is implicit, so it can’t be done until we know\n // about every discriminator in the document)\n walk(schema, (obj, path) => {\n if (!obj || !Array.isArray(obj.allOf)) {\n return;\n }\n\n for (const item of (obj as any).allOf) {\n if (\"$ref\" in item) {\n if (!objects[item.$ref]) {\n return;\n }\n\n const ref = createRef(path);\n const discriminator = objects[item.$ref];\n const mappedValues: string[] = [];\n\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n if (discriminator.mapping[mappedValue] === ref) {\n mappedValues.push(mappedValue);\n }\n }\n\n if (mappedValues.length > 0) {\n if (\n patchDiscriminatorEnum(\n schema as unknown as SchemaObject,\n ref,\n mappedValues,\n discriminator,\n item.$ref,\n options,\n )\n ) {\n refsHandled.push(ref);\n }\n }\n }\n\n objects[ref] = {\n ...objects[item.$ref],\n };\n } else if (item.discriminator?.propertyName) {\n objects[createRef(path)] = { ...item.discriminator };\n }\n }\n });\n\n return { objects, refsHandled };\n}\n\n/** Walk through any JSON-serializable (i.e. non-circular) object */\nexport function walk(\n obj: unknown,\n cb: (value: Record<string, unknown>, path: (string | number)[]) => void,\n path: (string | number)[] = [],\n): void {\n if (!obj || typeof obj !== \"object\") {\n return;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n walk(obj[i], cb, path.concat(i));\n }\n return;\n }\n cb(obj as Record<string, unknown>, path);\n for (const k of Object.keys(obj)) {\n walk((obj as Record<string, unknown>)[k], cb, path.concat(k));\n }\n}\n\n/** Print warning message */\nexport function warn(msg: string, silent = false) {\n if (!silent) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.warn(c.yellow(` ⚠ ${msg}`));\n }\n}\n"],"names":["supportsColor","c","parseRef","ts","tsModifiers","tsPropertyIndex","tsLiteral","escapePointer"],"mappings":"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"}
|
|
211
|
-
|
|
212
|
-
+{"version":3,"file":"utils.cjs","sources":["../../src/lib/utils.ts"],"sourcesContent":["import { escapePointer, parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport c from \"ansi-colors\";\nimport supportsColor from \"supports-color\";\nimport ts from \"typescript\";\nimport type { DiscriminatorObject, OpenAPI3, OpenAPITSOptions, ReferenceObject, SchemaObject } from \"../types.js\";\nimport { tsLiteral, tsModifiers, tsPropertyIndex } from \"./ts.js\";\n\nif (!supportsColor.stdout || supportsColor.stdout.hasBasic === false) {\n c.enabled = false;\n}\n\nconst DEBUG_GROUPS: Record<string, c.StyleFunction | undefined> = {\n redoc: c.cyanBright,\n lint: c.yellowBright,\n bundle: c.magentaBright,\n ts: c.blueBright,\n};\n\nexport { c };\n\n/** Given a discriminator object, get the property name */\nexport function createDiscriminatorProperty(\n discriminator: DiscriminatorObject,\n { path, readonly = false }: { path: string; readonly?: boolean },\n): ts.TypeElement {\n // get the inferred propertyName value from the last section of the path (as the spec suggests to do)\n let value = parseRef(path).pointer.pop();\n // if mapping, and there’s a match, use this rather than the inferred name\n if (discriminator.mapping) {\n // Mapping value can either be a fully-qualified ref (#/components/schemas/XYZ) or a schema name (XYZ)\n const matchedValue = Object.entries(discriminator.mapping).find(\n ([, v]) => (!v.startsWith(\"#\") && v === value) || (v.startsWith(\"#\") && parseRef(v).pointer.pop() === value),\n );\n if (matchedValue) {\n value = matchedValue[0]; // why was this designed backwards!?\n }\n }\n return ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly,\n }),\n /* name */ tsPropertyIndex(discriminator.propertyName),\n /* questionToken */ undefined,\n /* type */ tsLiteral(value),\n );\n}\n\n/** Create a $ref pointer (even from other $refs) */\nexport function createRef(parts: (number | string | undefined | null)[]): string {\n let pointer = \"#\";\n for (const part of parts) {\n if (part === undefined || part === null || part === \"\") {\n continue;\n }\n const maybeRef = parseRef(String(part)).pointer;\n if (maybeRef.length) {\n for (const refPart of maybeRef) {\n pointer += `/${escapePointer(refPart)}`;\n }\n } else {\n pointer += `/${escapePointer(part)}`;\n }\n }\n return pointer;\n}\n\n/** Print debug message (cribbed from the `debug` package, but without all the bells & whistles */\nexport function debug(msg: string, group?: string, time?: number) {\n if (\n process.env.DEBUG &&\n (!group ||\n process.env.DEBUG === \"*\" ||\n process.env.DEBUG === \"openapi-ts:*\" ||\n process.env.DEBUG.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`)\n ) {\n const groupColor = (group && DEBUG_GROUPS[group]) || c.whiteBright;\n const groupName = groupColor(`openapi-ts:${group ?? \"info\"}`);\n let timeFormatted = \"\";\n if (typeof time === \"number\") {\n timeFormatted = c.green(` ${formatTime(time)} `);\n }\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.debug(` ${c.bold(groupName)}${timeFormatted}${msg}`);\n }\n}\n\n/** Print error message */\nexport function error(msg: string) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.error(c.red(` ✘ ${msg}`));\n}\n\n/** Format a performance log in a friendly format */\nexport function formatTime(t: number) {\n if (typeof t === \"number\") {\n if (t < 1000) {\n return `${Math.round(10 * t) / 10}ms`;\n }\n if (t < 60000) {\n return `${Math.round(t / 100) / 10}s`;\n }\n return `${Math.round(t / 6000) / 10}m`;\n }\n return t;\n}\n\n/** Call Object.entries() and optionally sort */\nexport function getEntries<T>(\n obj: ArrayLike<T> | Record<string, T>,\n options?: {\n alphabetize?: boolean;\n excludeDeprecated?: boolean;\n },\n) {\n let entries = Object.entries(obj);\n if (options?.alphabetize) {\n entries.sort(([a], [b]) => a.localeCompare(b, \"en-us\", { numeric: true }));\n }\n if (options?.excludeDeprecated) {\n entries = entries.filter(([, v]) => !(v && typeof v === \"object\" && \"deprecated\" in v && v.deprecated));\n }\n return entries;\n}\n\n/** resolve a $ref in a schema */\nexport function resolveRef<T>(\n schema: any,\n $ref: string,\n { silent = false, visited = [] }: { silent: boolean; visited?: string[] },\n): T | undefined {\n const { pointer } = parseRef($ref);\n if (!pointer.length) {\n return undefined;\n }\n let node = schema;\n for (const key of pointer) {\n if (node && typeof node === \"object\" && node[key]) {\n node = node[key];\n } else {\n warn(`Could not resolve $ref \"${$ref}\"`, silent);\n return undefined;\n }\n }\n\n // if this is also a $ref, keep tracing\n if (node && typeof node === \"object\" && node.$ref) {\n if (visited.includes(node.$ref)) {\n warn(`Could not resolve circular $ref \"${$ref}\"`, silent);\n return undefined;\n }\n return resolveRef(schema, node.$ref, {\n silent,\n visited: [...visited, node.$ref],\n });\n }\n\n return node;\n}\n\nfunction createDiscriminatorEnum(values: string[], prevSchema?: SchemaObject): SchemaObject {\n return {\n type: \"string\",\n enum: values,\n description: prevSchema?.description\n ? `${prevSchema.description} (enum property replaced by openapi-typescript)`\n : \"discriminator enum property added by openapi-typescript\",\n };\n}\n\n/** Adds or replaces the discriminator enum with the passed `values` in a schema defined by `ref` */\nfunction patchDiscriminatorEnum(\n schema: SchemaObject,\n ref: string,\n values: string[],\n discriminator: DiscriminatorObject,\n discriminatorRef: string,\n options: OpenAPITSOptions,\n): boolean {\n const resolvedSchema = resolveRef<SchemaObject>(schema, ref, {\n silent: options.silent ?? false,\n });\n\n if (resolvedSchema?.allOf) {\n // if the schema is an allOf, we can append a new schema object to the allOf array\n resolvedSchema.allOf.push({\n type: \"object\",\n // discriminator enum properties always need to be required\n required: [discriminator.propertyName],\n properties: {\n [discriminator.propertyName]: createDiscriminatorEnum(values),\n },\n });\n\n return true;\n } else if (typeof resolvedSchema === \"object\" && \"type\" in resolvedSchema && resolvedSchema.type === \"object\") {\n // if the schema is an object, we can apply the discriminator enums to its properties\n if (!resolvedSchema.properties) {\n resolvedSchema.properties = {};\n }\n\n // discriminator enum properties always need to be required\n if (!resolvedSchema.required) {\n resolvedSchema.required = [discriminator.propertyName];\n } else if (!resolvedSchema.required.includes(discriminator.propertyName)) {\n resolvedSchema.required.push(discriminator.propertyName);\n }\n\n // add/replace the discriminator enum property\n resolvedSchema.properties[discriminator.propertyName] = createDiscriminatorEnum(\n values,\n resolvedSchema.properties[discriminator.propertyName] as SchemaObject,\n );\n\n return true;\n }\n\n warn(\n `Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): ${ref} => ${values.join(\n \", \",\n )} (Discriminator: ${discriminatorRef})`,\n options.silent,\n );\n\n return false;\n}\n\ntype InternalDiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;\n\n/** Return a key–value map of discriminator objects found in a schema */\nexport function scanDiscriminators(schema: OpenAPI3, options: OpenAPITSOptions) {\n // all discriminator objects found in the schema\n const objects: Record<string, DiscriminatorObject> = {};\n\n // refs of all mapped schema objects we have successfully handled to infer the discriminator enum value\n const refsHandled: string[] = [];\n\n // perform 2 passes: first, collect all discriminator definitions and handle oneOf and mappings\n walk(schema, (obj, path) => {\n const discriminator = obj?.discriminator as DiscriminatorObject | undefined;\n if (!discriminator?.propertyName) {\n return;\n }\n\n // collect discriminator object for later usage\n const ref = createRef(path);\n\n objects[ref] = discriminator;\n\n // if a mapping is available we will help Typescript to infer properties by adding the discriminator enum with its single mapped value to each schema\n // we only handle the mapping in advance for discriminator + oneOf compositions right now\n if (!obj?.oneOf || !Array.isArray(obj.oneOf)) {\n return;\n }\n\n const oneOf: (SchemaObject | ReferenceObject)[] = obj.oneOf;\n const mapping: InternalDiscriminatorMapping = {};\n\n // the mapping can be inferred from the oneOf refs next to the discriminator object\n for (const item of oneOf) {\n if (\"$ref\" in item) {\n // the name of the schema is the inferred discriminator enum value\n const value = item.$ref.split(\"/\").pop();\n\n if (value) {\n if (!mapping[item.$ref]) {\n mapping[item.$ref] = { inferred: value };\n } else {\n mapping[item.$ref].inferred = value;\n }\n }\n }\n }\n\n // the mapping can be defined in the discriminator object itself\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n const mappedRef = discriminator.mapping[mappedValue];\n if (!mappedRef) {\n continue;\n }\n\n if (!mapping[mappedRef]?.defined) {\n // this overrides inferred values, but we don't need them anymore as soon as we have a defined value\n mapping[mappedRef] = { defined: [] };\n }\n\n mapping[mappedRef].defined?.push(mappedValue);\n }\n }\n\n for (const [mappedRef, { inferred, defined }] of Object.entries(mapping)) {\n if (refsHandled.includes(mappedRef)) {\n continue;\n }\n\n if (!inferred && !defined) {\n continue;\n }\n\n // prefer defined values over automatically inferred ones\n // the inferred enum values from the schema might not represent the actual enum values of the discriminator,\n // so if we have defined values, use them instead\n // biome-ignore lint/style/noNonNullAssertion: we just checked for this\n const mappedValues = defined ?? [inferred!];\n\n if (\n patchDiscriminatorEnum(schema as unknown as SchemaObject, mappedRef, mappedValues, discriminator, ref, options)\n ) {\n refsHandled.push(mappedRef);\n }\n }\n });\n\n // second, collect the schema objects that inherit from discriminators\n // (sometimes this mapping is implicit, so it can’t be done until we know\n // about every discriminator in the document)\n walk(schema, (obj, path) => {\n if (!obj || !Array.isArray(obj.allOf)) {\n return;\n }\n\n for (const item of (obj as any).allOf) {\n if (\"$ref\" in item) {\n if (!objects[item.$ref]) {\n return;\n }\n\n const ref = createRef(path);\n const discriminator = objects[item.$ref];\n const mappedValues: string[] = [];\n\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n if (discriminator.mapping[mappedValue] === ref) {\n mappedValues.push(mappedValue);\n }\n }\n\n if (mappedValues.length > 0) {\n if (\n patchDiscriminatorEnum(\n schema as unknown as SchemaObject,\n ref,\n mappedValues,\n discriminator,\n item.$ref,\n options,\n )\n ) {\n refsHandled.push(ref);\n }\n }\n }\n\n objects[ref] = {\n ...objects[item.$ref],\n };\n } else if (item.discriminator?.propertyName) {\n objects[createRef(path)] = { ...item.discriminator };\n }\n }\n });\n\n return { objects, refsHandled };\n}\n\n/** Walk through any JSON-serializable (i.e. non-circular) object */\nexport function walk(\n obj: unknown,\n cb: (value: Record<string, unknown>, path: (string | number)[]) => void,\n path: (string | number)[] = [],\n): void {\n if (!obj || typeof obj !== \"object\") {\n return;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n walk(obj[i], cb, path.concat(i));\n }\n return;\n }\n cb(obj as Record<string, unknown>, path);\n for (const k of Object.keys(obj)) {\n walk((obj as Record<string, unknown>)[k], cb, path.concat(k));\n }\n}\n\n/** Print warning message */\nexport function warn(msg: string, silent = false) {\n if (!silent) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.warn(c.yellow(` ⚠ ${msg}`));\n }\n}\n"],"names":["supportsColor","c","parseRef","ts","tsModifiers","tsPropertyIndex","tsLiteral","escapePointer"],"mappings":"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"}
|
|
213
|
-
|
|
214
|
-
diff --git a/dist/lib/utils.mjs.map b/dist/lib/utils.mjs.map
|
|
215
|
-
index 61902bb79db725624b933e79f5d3aa686932d51b..be482f6fdfc417e1561ea600e0e1f1f998adf387 100644
|
|
216
|
-
--- a/dist/lib/utils.mjs.map
|
|
217
|
-
+++ b/dist/lib/utils.mjs.map
|
|
218
|
-
@@ -1 +1 @@
|
|
219
|
-
-{"version":3,"file":"utils.mjs","sources":["../../src/lib/utils.ts"],"sourcesContent":["import { escapePointer, parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport c from \"ansi-colors\";\nimport supportsColor from \"supports-color\";\nimport ts from \"typescript\";\nimport type { DiscriminatorObject, OpenAPI3, OpenAPITSOptions, ReferenceObject, SchemaObject } from \"../types.js\";\nimport { tsLiteral, tsModifiers, tsPropertyIndex } from \"./ts.js\";\n\nif (!supportsColor.stdout || supportsColor.stdout.hasBasic === false) {\n c.enabled = false;\n}\n\nconst DEBUG_GROUPS: Record<string, c.StyleFunction | undefined> = {\n redoc: c.cyanBright,\n lint: c.yellowBright,\n bundle: c.magentaBright,\n ts: c.blueBright,\n};\n\nexport { c };\n\n/** Given a discriminator object, get the property name */\nexport function createDiscriminatorProperty(\n discriminator: DiscriminatorObject,\n { path, readonly = false }: { path: string; readonly?: boolean },\n): ts.TypeElement {\n // get the inferred propertyName value from the last section of the path (as the spec suggests to do)\n let value = parseRef(path).pointer.pop();\n // if mapping, and there’s a match, use this rather than the inferred name\n if (discriminator.mapping) {\n // Mapping value can either be a fully-qualified ref (#/components/schemas/XYZ) or a schema name (XYZ)\n const matchedValue = Object.entries(discriminator.mapping).find(\n ([, v]) => (!v.startsWith(\"#\") && v === value) || (v.startsWith(\"#\") && parseRef(v).pointer.pop() === value),\n );\n if (matchedValue) {\n value = matchedValue[0]; // why was this designed backwards!?\n }\n }\n return ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly,\n }),\n /* name */ tsPropertyIndex(discriminator.propertyName),\n /* questionToken */ undefined,\n /* type */ tsLiteral(value),\n );\n}\n\n/** Create a $ref pointer (even from other $refs) */\nexport function createRef(parts: (number | string | undefined | null)[]): string {\n let pointer = \"#\";\n for (const part of parts) {\n if (part === undefined || part === null || part === \"\") {\n continue;\n }\n const maybeRef = parseRef(String(part)).pointer;\n if (maybeRef.length) {\n for (const refPart of maybeRef) {\n pointer += `/${escapePointer(refPart)}`;\n }\n } else {\n pointer += `/${escapePointer(part)}`;\n }\n }\n return pointer;\n}\n\n/** Print debug message (cribbed from the `debug` package, but without all the bells & whistles */\nexport function debug(msg: string, group?: string, time?: number) {\n if (\n process.env.DEBUG &&\n (!group ||\n process.env.DEBUG === \"*\" ||\n process.env.DEBUG === \"openapi-ts:*\" ||\n process.env.DEBUG.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`)\n ) {\n const groupColor = (group && DEBUG_GROUPS[group]) || c.whiteBright;\n const groupName = groupColor(`openapi-ts:${group ?? \"info\"}`);\n let timeFormatted = \"\";\n if (typeof time === \"number\") {\n timeFormatted = c.green(` ${formatTime(time)} `);\n }\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.debug(` ${c.bold(groupName)}${timeFormatted}${msg}`);\n }\n}\n\n/** Print error message */\nexport function error(msg: string) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.error(c.red(` ✘ ${msg}`));\n}\n\n/** Format a performance log in a friendly format */\nexport function formatTime(t: number) {\n if (typeof t === \"number\") {\n if (t < 1000) {\n return `${Math.round(10 * t) / 10}ms`;\n }\n if (t < 60000) {\n return `${Math.round(t / 100) / 10}s`;\n }\n return `${Math.round(t / 6000) / 10}m`;\n }\n return t;\n}\n\n/** Call Object.entries() and optionally sort */\nexport function getEntries<T>(\n obj: ArrayLike<T> | Record<string, T>,\n options?: {\n alphabetize?: boolean;\n excludeDeprecated?: boolean;\n },\n) {\n let entries = Object.entries(obj);\n if (options?.alphabetize) {\n entries.sort(([a], [b]) => a.localeCompare(b, \"en-us\", { numeric: true }));\n }\n if (options?.excludeDeprecated) {\n entries = entries.filter(([, v]) => !(v && typeof v === \"object\" && \"deprecated\" in v && v.deprecated));\n }\n return entries;\n}\n\n/** resolve a $ref in a schema */\nexport function resolveRef<T>(\n schema: any,\n $ref: string,\n { silent = false, visited = [] }: { silent: boolean; visited?: string[] },\n): T | undefined {\n const { pointer } = parseRef($ref);\n if (!pointer.length) {\n return undefined;\n }\n let node = schema;\n for (const key of pointer) {\n if (node && typeof node === \"object\" && node[key]) {\n node = node[key];\n } else {\n warn(`Could not resolve $ref \"${$ref}\"`, silent);\n return undefined;\n }\n }\n\n // if this is also a $ref, keep tracing\n if (node && typeof node === \"object\" && node.$ref) {\n if (visited.includes(node.$ref)) {\n warn(`Could not resolve circular $ref \"${$ref}\"`, silent);\n return undefined;\n }\n return resolveRef(schema, node.$ref, {\n silent,\n visited: [...visited, node.$ref],\n });\n }\n\n return node;\n}\n\nfunction createDiscriminatorEnum(values: string[], prevSchema?: SchemaObject): SchemaObject {\n return {\n type: \"string\",\n enum: values,\n description: prevSchema?.description\n ? `${prevSchema.description} (enum property replaced by openapi-typescript)`\n : \"discriminator enum property added by openapi-typescript\",\n };\n}\n\n/** Adds or replaces the discriminator enum with the passed `values` in a schema defined by `ref` */\nfunction patchDiscriminatorEnum(\n schema: SchemaObject,\n ref: string,\n values: string[],\n discriminator: DiscriminatorObject,\n discriminatorRef: string,\n options: OpenAPITSOptions,\n): boolean {\n const resolvedSchema = resolveRef<SchemaObject>(schema, ref, {\n silent: options.silent ?? false,\n });\n\n if (resolvedSchema?.allOf) {\n // if the schema is an allOf, we can append a new schema object to the allOf array\n resolvedSchema.allOf.push({\n type: \"object\",\n // discriminator enum properties always need to be required\n required: [discriminator.propertyName],\n properties: {\n [discriminator.propertyName]: createDiscriminatorEnum(values),\n },\n });\n\n return true;\n } else if (typeof resolvedSchema === \"object\" && \"type\" in resolvedSchema && resolvedSchema.type === \"object\") {\n // if the schema is an object, we can apply the discriminator enums to its properties\n if (!resolvedSchema.properties) {\n resolvedSchema.properties = {};\n }\n\n // discriminator enum properties always need to be required\n if (!resolvedSchema.required) {\n resolvedSchema.required = [discriminator.propertyName];\n } else if (!resolvedSchema.required.includes(discriminator.propertyName)) {\n resolvedSchema.required.push(discriminator.propertyName);\n }\n\n // add/replace the discriminator enum property\n resolvedSchema.properties[discriminator.propertyName] = createDiscriminatorEnum(\n values,\n resolvedSchema.properties[discriminator.propertyName] as SchemaObject,\n );\n\n return true;\n }\n\n warn(\n `Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): ${ref} => ${values.join(\n \", \",\n )} (Discriminator: ${discriminatorRef})`,\n options.silent,\n );\n\n return false;\n}\n\ntype InternalDiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;\n\n/** Return a key–value map of discriminator objects found in a schema */\nexport function scanDiscriminators(schema: OpenAPI3, options: OpenAPITSOptions) {\n // all discriminator objects found in the schema\n const objects: Record<string, DiscriminatorObject> = {};\n\n // refs of all mapped schema objects we have successfully handled to infer the discriminator enum value\n const refsHandled: string[] = [];\n\n // perform 2 passes: first, collect all discriminator definitions and handle oneOf and mappings\n walk(schema, (obj, path) => {\n const discriminator = obj?.discriminator as DiscriminatorObject | undefined;\n if (!discriminator?.propertyName) {\n return;\n }\n\n // collect discriminator object for later usage\n const ref = createRef(path);\n\n objects[ref] = discriminator;\n\n // if a mapping is available we will help Typescript to infer properties by adding the discriminator enum with its single mapped value to each schema\n // we only handle the mapping in advance for discriminator + oneOf compositions right now\n if (!obj?.oneOf || !Array.isArray(obj.oneOf)) {\n return;\n }\n\n const oneOf: (SchemaObject | ReferenceObject)[] = obj.oneOf;\n const mapping: InternalDiscriminatorMapping = {};\n\n // the mapping can be inferred from the oneOf refs next to the discriminator object\n for (const item of oneOf) {\n if (\"$ref\" in item) {\n // the name of the schema is the inferred discriminator enum value\n const value = item.$ref.split(\"/\").pop();\n\n if (value) {\n if (!mapping[item.$ref]) {\n mapping[item.$ref] = { inferred: value };\n } else {\n mapping[item.$ref].inferred = value;\n }\n }\n }\n }\n\n // the mapping can be defined in the discriminator object itself\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n const mappedRef = discriminator.mapping[mappedValue];\n if (!mappedRef) {\n continue;\n }\n\n if (!mapping[mappedRef]?.defined) {\n // this overrides inferred values, but we don't need them anymore as soon as we have a defined value\n mapping[mappedRef] = { defined: [] };\n }\n\n mapping[mappedRef].defined?.push(mappedValue);\n }\n }\n\n for (const [mappedRef, { inferred, defined }] of Object.entries(mapping)) {\n if (refsHandled.includes(mappedRef)) {\n continue;\n }\n\n if (!inferred && !defined) {\n continue;\n }\n\n // prefer defined values over automatically inferred ones\n // the inferred enum values from the schema might not represent the actual enum values of the discriminator,\n // so if we have defined values, use them instead\n // biome-ignore lint/style/noNonNullAssertion: we just checked for this\n const mappedValues = defined ?? [inferred!];\n\n if (\n patchDiscriminatorEnum(schema as unknown as SchemaObject, mappedRef, mappedValues, discriminator, ref, options)\n ) {\n refsHandled.push(mappedRef);\n }\n }\n });\n\n // second, collect the schema objects that inherit from discriminators\n // (sometimes this mapping is implicit, so it can’t be done until we know\n // about every discriminator in the document)\n walk(schema, (obj, path) => {\n if (!obj || !Array.isArray(obj.allOf)) {\n return;\n }\n\n for (const item of (obj as any).allOf) {\n if (\"$ref\" in item) {\n if (!objects[item.$ref]) {\n return;\n }\n\n const ref = createRef(path);\n const discriminator = objects[item.$ref];\n const mappedValues: string[] = [];\n\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n if (discriminator.mapping[mappedValue] === ref) {\n mappedValues.push(mappedValue);\n }\n }\n\n if (mappedValues.length > 0) {\n if (\n patchDiscriminatorEnum(\n schema as unknown as SchemaObject,\n ref,\n mappedValues,\n discriminator,\n item.$ref,\n options,\n )\n ) {\n refsHandled.push(ref);\n }\n }\n }\n\n objects[ref] = {\n ...objects[item.$ref],\n };\n } else if (item.discriminator?.propertyName) {\n objects[createRef(path)] = { ...item.discriminator };\n }\n }\n });\n\n return { objects, refsHandled };\n}\n\n/** Walk through any JSON-serializable (i.e. non-circular) object */\nexport function walk(\n obj: unknown,\n cb: (value: Record<string, unknown>, path: (string | number)[]) => void,\n path: (string | number)[] = [],\n): void {\n if (!obj || typeof obj !== \"object\") {\n return;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n walk(obj[i], cb, path.concat(i));\n }\n return;\n }\n cb(obj as Record<string, unknown>, path);\n for (const k of Object.keys(obj)) {\n walk((obj as Record<string, unknown>)[k], cb, path.concat(k));\n }\n}\n\n/** Print warning message */\nexport function warn(msg: string, silent = false) {\n if (!silent) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.warn(c.yellow(` ⚠ ${msg}`));\n }\n}\n"],"names":[],"mappings":"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"}
|
|
220
|
-
|
|
221
|
-
+{"version":3,"file":"utils.mjs","sources":["../../src/lib/utils.ts"],"sourcesContent":["import { escapePointer, parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport c from \"ansi-colors\";\nimport supportsColor from \"supports-color\";\nimport ts from \"typescript\";\nimport type { DiscriminatorObject, OpenAPI3, OpenAPITSOptions, ReferenceObject, SchemaObject } from \"../types.js\";\nimport { tsLiteral, tsModifiers, tsPropertyIndex } from \"./ts.js\";\n\nif (!supportsColor.stdout || supportsColor.stdout.hasBasic === false) {\n c.enabled = false;\n}\n\nconst DEBUG_GROUPS: Record<string, c.StyleFunction | undefined> = {\n redoc: c.cyanBright,\n lint: c.yellowBright,\n bundle: c.magentaBright,\n ts: c.blueBright,\n};\n\nexport { c };\n\n/** Given a discriminator object, get the property name */\nexport function createDiscriminatorProperty(\n discriminator: DiscriminatorObject,\n { path, readonly = false }: { path: string; readonly?: boolean },\n): ts.TypeElement {\n // get the inferred propertyName value from the last section of the path (as the spec suggests to do)\n let value = parseRef(path).pointer.pop();\n // if mapping, and there’s a match, use this rather than the inferred name\n if (discriminator.mapping) {\n // Mapping value can either be a fully-qualified ref (#/components/schemas/XYZ) or a schema name (XYZ)\n const matchedValue = Object.entries(discriminator.mapping).find(\n ([, v]) => (!v.startsWith(\"#\") && v === value) || (v.startsWith(\"#\") && parseRef(v).pointer.pop() === value),\n );\n if (matchedValue) {\n value = matchedValue[0]; // why was this designed backwards!?\n }\n }\n return ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly,\n }),\n /* name */ tsPropertyIndex(discriminator.propertyName),\n /* questionToken */ undefined,\n /* type */ tsLiteral(value),\n );\n}\n\n/** Create a $ref pointer (even from other $refs) */\nexport function createRef(parts: (number | string | undefined | null)[]): string {\n let pointer = \"#\";\n for (const part of parts) {\n if (part === undefined || part === null || part === \"\") {\n continue;\n }\n const maybeRef = parseRef(String(part)).pointer;\n if (maybeRef.length) {\n for (const refPart of maybeRef) {\n pointer += `/${escapePointer(refPart)}`;\n }\n } else {\n pointer += `/${escapePointer(part)}`;\n }\n }\n return pointer;\n}\n\n/** Print debug message (cribbed from the `debug` package, but without all the bells & whistles */\nexport function debug(msg: string, group?: string, time?: number) {\n if (\n process.env.DEBUG &&\n (!group ||\n process.env.DEBUG === \"*\" ||\n process.env.DEBUG === \"openapi-ts:*\" ||\n process.env.DEBUG.toLocaleLowerCase() === `openapi-ts:${group.toLocaleLowerCase()}`)\n ) {\n const groupColor = (group && DEBUG_GROUPS[group]) || c.whiteBright;\n const groupName = groupColor(`openapi-ts:${group ?? \"info\"}`);\n let timeFormatted = \"\";\n if (typeof time === \"number\") {\n timeFormatted = c.green(` ${formatTime(time)} `);\n }\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.debug(` ${c.bold(groupName)}${timeFormatted}${msg}`);\n }\n}\n\n/** Print error message */\nexport function error(msg: string) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.error(c.red(` ✘ ${msg}`));\n}\n\n/** Format a performance log in a friendly format */\nexport function formatTime(t: number) {\n if (typeof t === \"number\") {\n if (t < 1000) {\n return `${Math.round(10 * t) / 10}ms`;\n }\n if (t < 60000) {\n return `${Math.round(t / 100) / 10}s`;\n }\n return `${Math.round(t / 6000) / 10}m`;\n }\n return t;\n}\n\n/** Call Object.entries() and optionally sort */\nexport function getEntries<T>(\n obj: ArrayLike<T> | Record<string, T>,\n options?: {\n alphabetize?: boolean;\n excludeDeprecated?: boolean;\n },\n) {\n let entries = Object.entries(obj);\n if (options?.alphabetize) {\n entries.sort(([a], [b]) => a.localeCompare(b, \"en-us\", { numeric: true }));\n }\n if (options?.excludeDeprecated) {\n entries = entries.filter(([, v]) => !(v && typeof v === \"object\" && \"deprecated\" in v && v.deprecated));\n }\n return entries;\n}\n\n/** resolve a $ref in a schema */\nexport function resolveRef<T>(\n schema: any,\n $ref: string,\n { silent = false, visited = [] }: { silent: boolean; visited?: string[] },\n): T | undefined {\n const { pointer } = parseRef($ref);\n if (!pointer.length) {\n return undefined;\n }\n let node = schema;\n for (const key of pointer) {\n if (node && typeof node === \"object\" && node[key]) {\n node = node[key];\n } else {\n warn(`Could not resolve $ref \"${$ref}\"`, silent);\n return undefined;\n }\n }\n\n // if this is also a $ref, keep tracing\n if (node && typeof node === \"object\" && node.$ref) {\n if (visited.includes(node.$ref)) {\n warn(`Could not resolve circular $ref \"${$ref}\"`, silent);\n return undefined;\n }\n return resolveRef(schema, node.$ref, {\n silent,\n visited: [...visited, node.$ref],\n });\n }\n\n return node;\n}\n\nfunction createDiscriminatorEnum(values: string[], prevSchema?: SchemaObject): SchemaObject {\n return {\n type: \"string\",\n enum: values,\n description: prevSchema?.description\n ? `${prevSchema.description} (enum property replaced by openapi-typescript)`\n : \"discriminator enum property added by openapi-typescript\",\n };\n}\n\n/** Adds or replaces the discriminator enum with the passed `values` in a schema defined by `ref` */\nfunction patchDiscriminatorEnum(\n schema: SchemaObject,\n ref: string,\n values: string[],\n discriminator: DiscriminatorObject,\n discriminatorRef: string,\n options: OpenAPITSOptions,\n): boolean {\n const resolvedSchema = resolveRef<SchemaObject>(schema, ref, {\n silent: options.silent ?? false,\n });\n\n if (resolvedSchema?.allOf) {\n // if the schema is an allOf, we can append a new schema object to the allOf array\n resolvedSchema.allOf.push({\n type: \"object\",\n // discriminator enum properties always need to be required\n required: [discriminator.propertyName],\n properties: {\n [discriminator.propertyName]: createDiscriminatorEnum(values),\n },\n });\n\n return true;\n } else if (typeof resolvedSchema === \"object\" && \"type\" in resolvedSchema && resolvedSchema.type === \"object\") {\n // if the schema is an object, we can apply the discriminator enums to its properties\n if (!resolvedSchema.properties) {\n resolvedSchema.properties = {};\n }\n\n // discriminator enum properties always need to be required\n if (!resolvedSchema.required) {\n resolvedSchema.required = [discriminator.propertyName];\n } else if (!resolvedSchema.required.includes(discriminator.propertyName)) {\n resolvedSchema.required.push(discriminator.propertyName);\n }\n\n // add/replace the discriminator enum property\n resolvedSchema.properties[discriminator.propertyName] = createDiscriminatorEnum(\n values,\n resolvedSchema.properties[discriminator.propertyName] as SchemaObject,\n );\n\n return true;\n }\n\n warn(\n `Discriminator mapping has an invalid schema (neither an object schema nor an allOf array): ${ref} => ${values.join(\n \", \",\n )} (Discriminator: ${discriminatorRef})`,\n options.silent,\n );\n\n return false;\n}\n\ntype InternalDiscriminatorMapping = Record<string, { inferred?: string; defined?: string[] }>;\n\n/** Return a key–value map of discriminator objects found in a schema */\nexport function scanDiscriminators(schema: OpenAPI3, options: OpenAPITSOptions) {\n // all discriminator objects found in the schema\n const objects: Record<string, DiscriminatorObject> = {};\n\n // refs of all mapped schema objects we have successfully handled to infer the discriminator enum value\n const refsHandled: string[] = [];\n\n // perform 2 passes: first, collect all discriminator definitions and handle oneOf and mappings\n walk(schema, (obj, path) => {\n const discriminator = obj?.discriminator as DiscriminatorObject | undefined;\n if (!discriminator?.propertyName) {\n return;\n }\n\n // collect discriminator object for later usage\n const ref = createRef(path);\n\n objects[ref] = discriminator;\n\n // if a mapping is available we will help Typescript to infer properties by adding the discriminator enum with its single mapped value to each schema\n // we only handle the mapping in advance for discriminator + oneOf compositions right now\n if (!obj?.oneOf || !Array.isArray(obj.oneOf)) {\n return;\n }\n\n const oneOf: (SchemaObject | ReferenceObject)[] = obj.oneOf;\n const mapping: InternalDiscriminatorMapping = {};\n\n // the mapping can be inferred from the oneOf refs next to the discriminator object\n for (const item of oneOf) {\n if (\"$ref\" in item) {\n // the name of the schema is the inferred discriminator enum value\n const value = item.$ref.split(\"/\").pop();\n\n if (value) {\n if (!mapping[item.$ref]) {\n mapping[item.$ref] = { inferred: value };\n } else {\n mapping[item.$ref].inferred = value;\n }\n }\n }\n }\n\n // the mapping can be defined in the discriminator object itself\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n const mappedRef = discriminator.mapping[mappedValue];\n if (!mappedRef) {\n continue;\n }\n\n if (!mapping[mappedRef]?.defined) {\n // this overrides inferred values, but we don't need them anymore as soon as we have a defined value\n mapping[mappedRef] = { defined: [] };\n }\n\n mapping[mappedRef].defined?.push(mappedValue);\n }\n }\n\n for (const [mappedRef, { inferred, defined }] of Object.entries(mapping)) {\n if (refsHandled.includes(mappedRef)) {\n continue;\n }\n\n if (!inferred && !defined) {\n continue;\n }\n\n // prefer defined values over automatically inferred ones\n // the inferred enum values from the schema might not represent the actual enum values of the discriminator,\n // so if we have defined values, use them instead\n // biome-ignore lint/style/noNonNullAssertion: we just checked for this\n const mappedValues = defined ?? [inferred!];\n\n if (\n patchDiscriminatorEnum(schema as unknown as SchemaObject, mappedRef, mappedValues, discriminator, ref, options)\n ) {\n refsHandled.push(mappedRef);\n }\n }\n });\n\n // second, collect the schema objects that inherit from discriminators\n // (sometimes this mapping is implicit, so it can’t be done until we know\n // about every discriminator in the document)\n walk(schema, (obj, path) => {\n if (!obj || !Array.isArray(obj.allOf)) {\n return;\n }\n\n for (const item of (obj as any).allOf) {\n if (\"$ref\" in item) {\n if (!objects[item.$ref]) {\n return;\n }\n\n const ref = createRef(path);\n const discriminator = objects[item.$ref];\n const mappedValues: string[] = [];\n\n if (discriminator.mapping) {\n for (const mappedValue in discriminator.mapping) {\n if (discriminator.mapping[mappedValue] === ref) {\n mappedValues.push(mappedValue);\n }\n }\n\n if (mappedValues.length > 0) {\n if (\n patchDiscriminatorEnum(\n schema as unknown as SchemaObject,\n ref,\n mappedValues,\n discriminator,\n item.$ref,\n options,\n )\n ) {\n refsHandled.push(ref);\n }\n }\n }\n\n objects[ref] = {\n ...objects[item.$ref],\n };\n } else if (item.discriminator?.propertyName) {\n objects[createRef(path)] = { ...item.discriminator };\n }\n }\n });\n\n return { objects, refsHandled };\n}\n\n/** Walk through any JSON-serializable (i.e. non-circular) object */\nexport function walk(\n obj: unknown,\n cb: (value: Record<string, unknown>, path: (string | number)[]) => void,\n path: (string | number)[] = [],\n): void {\n if (!obj || typeof obj !== \"object\") {\n return;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n walk(obj[i], cb, path.concat(i));\n }\n return;\n }\n cb(obj as Record<string, unknown>, path);\n for (const k of Object.keys(obj)) {\n walk((obj as Record<string, unknown>)[k], cb, path.concat(k));\n }\n}\n\n/** Print warning message */\nexport function warn(msg: string, silent = false) {\n if (!silent) {\n // biome-ignore lint/suspicious/noConsole: this is a CLI\n console.warn(c.yellow(` ⚠ ${msg}`));\n }\n}\n"],"names":[],"mappings":"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"}
|
|
222
|
-
|
|
223
|
-
diff --git a/dist/transform/components-object.cjs.map b/dist/transform/components-object.cjs.map
|
|
224
|
-
index e462792ded6af1eea8d61da7d3c5d88389b6b9c2..e0d6dea4a2cd59f56cd32a8c224262f6da3a8315 100644
|
|
225
|
-
--- a/dist/transform/components-object.cjs.map
|
|
226
|
-
+++ b/dist/transform/components-object.cjs.map
|
|
227
|
-
@@ -1 +1 @@
|
|
228
|
-
-{"version":3,"file":"components-object.cjs","sources":["../../src/transform/components-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport * as changeCase from \"change-case\";\nimport ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type { ComponentsObject, GlobalContext, SchemaObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformParameterObject from \"./parameter-object.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponseObject from \"./response-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Determines if a schema object represents an enum type to prevent duplicate exports\n * when using --root-types and --enum flags together.\n *\n * When both flags are enabled:\n * - --enum flag generates TypeScript enums at the bottom of the file\n * - --root-types flag would normally also export these as root type aliases\n * - This results in duplicate exports (both enum and type alias for the same schema)\n *\n * This function identifies enum schemas so they can be excluded from root type generation,\n * allowing only the TypeScript enum to be generated.\n *\n * @param schema The schema object to check\n * @returns true if the schema represents an enum type\n */\nexport function isEnumSchema(schema: unknown): boolean {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n !Array.isArray(schema) &&\n \"enum\" in schema &&\n Array.isArray((schema as any).enum) &&\n (!(\"type\" in schema) || (schema as any).type !== \"object\") &&\n !(\"properties\" in schema) &&\n !(\"additionalProperties\" in schema)\n );\n}\n\ntype ComponentTransforms = keyof Omit<ComponentsObject, \"examples\" | \"securitySchemes\" | \"links\" | \"callbacks\">;\n\nconst transformers: Record<ComponentTransforms, (node: any, options: TransformNodeOptions) => ts.TypeNode> = {\n schemas: transformSchemaObject,\n responses: transformResponseObject,\n parameters: transformParameterObject,\n requestBodies: transformRequestBodyObject,\n headers: transformHeaderObject,\n pathItems: transformPathItemObject,\n};\n\n/**\n * Transform the ComponentsObject (4.8.7)\n * @see https://spec.openapis.org/oas/latest.html#components-object\n */\nexport default function transformComponentsObject(componentsObject: ComponentsObject, ctx: GlobalContext): ts.Node[] {\n const type: ts.TypeElement[] = [];\n const rootTypeAliases: { [key: string]: ts.TypeAliasDeclaration } = {};\n for (const key of Object.keys(transformers) as ComponentTransforms[]) {\n const componentT = performance.now();\n\n const items: ts.TypeElement[] = [];\n if (componentsObject[key]) {\n for (const [name, item] of getEntries<SchemaObject>(componentsObject[key], ctx)) {\n let subType = transformers[key](item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n\n let hasQuestionToken = false;\n if (ctx.transform) {\n const result = ctx.transform(item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n if (result) {\n if (\"schema\" in result) {\n subType = result.schema;\n hasQuestionToken = result.questionToken;\n } else {\n subType = result;\n }\n }\n }\n\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ hasQuestionToken ? QUESTION_TOKEN : undefined,\n /* type */ subType,\n );\n addJSDocComment(item as unknown as any, property);\n items.push(property);\n\n if (ctx.rootTypes) {\n // Skip enum schemas when generating root types to prevent duplication (only when --enum flag is enabled)\n const shouldSkipEnumSchema = ctx.enum && key === \"schemas\" && isEnumSchema(item);\n\n if (!shouldSkipEnumSchema) {\n const componentKey = changeCase.pascalCase(singularizeComponentKey(key));\n let aliasName = `${componentKey}${changeCase.pascalCase(name)}`;\n\n // Add counter suffix (e.g. \"_2\") if conflict in name\n let conflictCounter = 1;\n\n while (rootTypeAliases[aliasName] !== undefined) {\n conflictCounter++;\n aliasName = `${componentKey}${changeCase.pascalCase(name)}_${conflictCounter}`;\n }\n const ref = ts.factory.createTypeReferenceNode(`components['${key}']['${name}']`);\n if (ctx.rootTypesNoSchemaPrefix && key === \"schemas\") {\n aliasName = aliasName.replace(componentKey, \"\");\n }\n const typeAlias = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ aliasName,\n /* typeParameters */ undefined,\n /* type */ ref,\n );\n rootTypeAliases[aliasName] = typeAlias;\n }\n }\n }\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(key),\n /* questionToken */ undefined,\n /* type */ items.length ? ts.factory.createTypeLiteralNode(items) : NEVER,\n ),\n );\n\n debug(`Transformed components → ${key}`, \"ts\", performance.now() - componentT);\n }\n\n // Extract root types\n let rootTypes: ts.TypeAliasDeclaration[] = [];\n if (ctx.rootTypes) {\n rootTypes = Object.keys(rootTypeAliases).map((k) => rootTypeAliases[k]);\n }\n\n return [ts.factory.createTypeLiteralNode(type), ...rootTypes];\n}\n\nexport function singularizeComponentKey(\n key: `x-${string}` | \"schemas\" | \"responses\" | \"parameters\" | \"requestBodies\" | \"headers\" | \"pathItems\",\n): string {\n switch (key) {\n // Handle special singular case\n case \"requestBodies\":\n return \"requestBody\";\n // Default to removing the \"s\"\n default:\n return key.slice(0, -1);\n }\n}\n"],"names":["transformSchemaObject","transformResponseObject","transformParameterObject","transformRequestBodyObject","transformHeaderObject","transformPathItemObject","performance","getEntries","createRef","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","addJSDocComment","changeCase","NEVER","debug"],"mappings":"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"}
|
|
229
|
-
|
|
230
|
-
+{"version":3,"file":"components-object.cjs","sources":["../../src/transform/components-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport * as changeCase from \"change-case\";\nimport ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type { ComponentsObject, GlobalContext, SchemaObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformParameterObject from \"./parameter-object.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponseObject from \"./response-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Determines if a schema object represents an enum type to prevent duplicate exports\n * when using --root-types and --enum flags together.\n *\n * When both flags are enabled:\n * - --enum flag generates TypeScript enums at the bottom of the file\n * - --root-types flag would normally also export these as root type aliases\n * - This results in duplicate exports (both enum and type alias for the same schema)\n *\n * This function identifies enum schemas so they can be excluded from root type generation,\n * allowing only the TypeScript enum to be generated.\n *\n * @param schema The schema object to check\n * @returns true if the schema represents an enum type\n */\nexport function isEnumSchema(schema: unknown): boolean {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n !Array.isArray(schema) &&\n \"enum\" in schema &&\n Array.isArray((schema as any).enum) &&\n (!(\"type\" in schema) || (schema as any).type !== \"object\") &&\n !(\"properties\" in schema) &&\n !(\"additionalProperties\" in schema)\n );\n}\n\ntype ComponentTransforms = keyof Omit<ComponentsObject, \"examples\" | \"securitySchemes\" | \"links\" | \"callbacks\">;\n\nconst transformers: Record<ComponentTransforms, (node: any, options: TransformNodeOptions) => ts.TypeNode> = {\n schemas: transformSchemaObject,\n responses: transformResponseObject,\n parameters: transformParameterObject,\n requestBodies: transformRequestBodyObject,\n headers: transformHeaderObject,\n pathItems: transformPathItemObject,\n};\n\n/**\n * Transform the ComponentsObject (4.8.7)\n * @see https://spec.openapis.org/oas/latest.html#components-object\n */\nexport default function transformComponentsObject(componentsObject: ComponentsObject, ctx: GlobalContext): ts.Node[] {\n const type: ts.TypeElement[] = [];\n const rootTypeAliases: { [key: string]: ts.TypeAliasDeclaration } = {};\n for (const key of Object.keys(transformers) as ComponentTransforms[]) {\n const componentT = performance.now();\n\n const items: ts.TypeElement[] = [];\n if (componentsObject[key]) {\n for (const [name, item] of getEntries<SchemaObject>(componentsObject[key], ctx)) {\n let subType = transformers[key](item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n\n let hasQuestionToken = false;\n if (ctx.transform) {\n const result = ctx.transform(item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n if (result) {\n if (\"schema\" in result) {\n subType = result.schema;\n hasQuestionToken = result.questionToken;\n } else {\n subType = result;\n }\n }\n }\n\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ hasQuestionToken ? QUESTION_TOKEN : undefined,\n /* type */ subType,\n );\n addJSDocComment(item as unknown as any, property);\n items.push(property);\n\n if (ctx.rootTypes) {\n // Skip enum schemas when generating root types to prevent duplication (only when --enum flag is enabled)\n const shouldSkipEnumSchema = ctx.enum && key === \"schemas\" && isEnumSchema(item);\n\n if (!shouldSkipEnumSchema) {\n const componentKey = changeCase.pascalCase(singularizeComponentKey(key));\n let aliasName = `${componentKey}${changeCase.pascalCase(name)}`;\n\n // Add counter suffix (e.g. \"_2\") if conflict in name\n let conflictCounter = 1;\n\n while (rootTypeAliases[aliasName] !== undefined) {\n conflictCounter++;\n aliasName = `${componentKey}${changeCase.pascalCase(name)}_${conflictCounter}`;\n }\n const ref = ts.factory.createTypeReferenceNode(`components['${key}']['${name}']`);\n if (ctx.rootTypesNoSchemaPrefix && key === \"schemas\") {\n aliasName = aliasName.replace(componentKey, \"\");\n }\n const typeAlias = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ aliasName,\n /* typeParameters */ undefined,\n /* type */ ref,\n );\n rootTypeAliases[aliasName] = typeAlias;\n }\n }\n }\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(key),\n /* questionToken */ undefined,\n /* type */ items.length ? ts.factory.createTypeLiteralNode(items) : NEVER,\n ),\n );\n\n debug(`Transformed components → ${key}`, \"ts\", performance.now() - componentT);\n }\n\n // Extract root types\n let rootTypes: ts.TypeAliasDeclaration[] = [];\n if (ctx.rootTypes) {\n rootTypes = Object.keys(rootTypeAliases).map((k) => rootTypeAliases[k]);\n }\n\n return [ts.factory.createTypeLiteralNode(type), ...rootTypes];\n}\n\nexport function singularizeComponentKey(\n key: `x-${string}` | \"schemas\" | \"responses\" | \"parameters\" | \"requestBodies\" | \"headers\" | \"pathItems\",\n): string {\n switch (key) {\n // Handle special singular case\n case \"requestBodies\":\n return \"requestBody\";\n // Default to removing the \"s\"\n default:\n return key.slice(0, -1);\n }\n}\n"],"names":["transformSchemaObject","transformResponseObject","transformParameterObject","transformRequestBodyObject","transformHeaderObject","transformPathItemObject","performance","getEntries","createRef","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","addJSDocComment","changeCase","NEVER","debug"],"mappings":"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"}
|
|
231
|
-
|
|
232
|
-
diff --git a/dist/transform/components-object.mjs.map b/dist/transform/components-object.mjs.map
|
|
233
|
-
index 42f812c51dbb5217c1e0e40d5aa428dd26770162..13e1b0311f66df9f63c0710f17c6b0a2d04936c6 100644
|
|
234
|
-
--- a/dist/transform/components-object.mjs.map
|
|
235
|
-
+++ b/dist/transform/components-object.mjs.map
|
|
236
|
-
@@ -1 +1 @@
|
|
237
|
-
-{"version":3,"file":"components-object.mjs","sources":["../../src/transform/components-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport * as changeCase from \"change-case\";\nimport ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type { ComponentsObject, GlobalContext, SchemaObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformParameterObject from \"./parameter-object.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponseObject from \"./response-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Determines if a schema object represents an enum type to prevent duplicate exports\n * when using --root-types and --enum flags together.\n *\n * When both flags are enabled:\n * - --enum flag generates TypeScript enums at the bottom of the file\n * - --root-types flag would normally also export these as root type aliases\n * - This results in duplicate exports (both enum and type alias for the same schema)\n *\n * This function identifies enum schemas so they can be excluded from root type generation,\n * allowing only the TypeScript enum to be generated.\n *\n * @param schema The schema object to check\n * @returns true if the schema represents an enum type\n */\nexport function isEnumSchema(schema: unknown): boolean {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n !Array.isArray(schema) &&\n \"enum\" in schema &&\n Array.isArray((schema as any).enum) &&\n (!(\"type\" in schema) || (schema as any).type !== \"object\") &&\n !(\"properties\" in schema) &&\n !(\"additionalProperties\" in schema)\n );\n}\n\ntype ComponentTransforms = keyof Omit<ComponentsObject, \"examples\" | \"securitySchemes\" | \"links\" | \"callbacks\">;\n\nconst transformers: Record<ComponentTransforms, (node: any, options: TransformNodeOptions) => ts.TypeNode> = {\n schemas: transformSchemaObject,\n responses: transformResponseObject,\n parameters: transformParameterObject,\n requestBodies: transformRequestBodyObject,\n headers: transformHeaderObject,\n pathItems: transformPathItemObject,\n};\n\n/**\n * Transform the ComponentsObject (4.8.7)\n * @see https://spec.openapis.org/oas/latest.html#components-object\n */\nexport default function transformComponentsObject(componentsObject: ComponentsObject, ctx: GlobalContext): ts.Node[] {\n const type: ts.TypeElement[] = [];\n const rootTypeAliases: { [key: string]: ts.TypeAliasDeclaration } = {};\n for (const key of Object.keys(transformers) as ComponentTransforms[]) {\n const componentT = performance.now();\n\n const items: ts.TypeElement[] = [];\n if (componentsObject[key]) {\n for (const [name, item] of getEntries<SchemaObject>(componentsObject[key], ctx)) {\n let subType = transformers[key](item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n\n let hasQuestionToken = false;\n if (ctx.transform) {\n const result = ctx.transform(item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n if (result) {\n if (\"schema\" in result) {\n subType = result.schema;\n hasQuestionToken = result.questionToken;\n } else {\n subType = result;\n }\n }\n }\n\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ hasQuestionToken ? QUESTION_TOKEN : undefined,\n /* type */ subType,\n );\n addJSDocComment(item as unknown as any, property);\n items.push(property);\n\n if (ctx.rootTypes) {\n // Skip enum schemas when generating root types to prevent duplication (only when --enum flag is enabled)\n const shouldSkipEnumSchema = ctx.enum && key === \"schemas\" && isEnumSchema(item);\n\n if (!shouldSkipEnumSchema) {\n const componentKey = changeCase.pascalCase(singularizeComponentKey(key));\n let aliasName = `${componentKey}${changeCase.pascalCase(name)}`;\n\n // Add counter suffix (e.g. \"_2\") if conflict in name\n let conflictCounter = 1;\n\n while (rootTypeAliases[aliasName] !== undefined) {\n conflictCounter++;\n aliasName = `${componentKey}${changeCase.pascalCase(name)}_${conflictCounter}`;\n }\n const ref = ts.factory.createTypeReferenceNode(`components['${key}']['${name}']`);\n if (ctx.rootTypesNoSchemaPrefix && key === \"schemas\") {\n aliasName = aliasName.replace(componentKey, \"\");\n }\n const typeAlias = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ aliasName,\n /* typeParameters */ undefined,\n /* type */ ref,\n );\n rootTypeAliases[aliasName] = typeAlias;\n }\n }\n }\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(key),\n /* questionToken */ undefined,\n /* type */ items.length ? ts.factory.createTypeLiteralNode(items) : NEVER,\n ),\n );\n\n debug(`Transformed components → ${key}`, \"ts\", performance.now() - componentT);\n }\n\n // Extract root types\n let rootTypes: ts.TypeAliasDeclaration[] = [];\n if (ctx.rootTypes) {\n rootTypes = Object.keys(rootTypeAliases).map((k) => rootTypeAliases[k]);\n }\n\n return [ts.factory.createTypeLiteralNode(type), ...rootTypes];\n}\n\nexport function singularizeComponentKey(\n key: `x-${string}` | \"schemas\" | \"responses\" | \"parameters\" | \"requestBodies\" | \"headers\" | \"pathItems\",\n): string {\n switch (key) {\n // Handle special singular case\n case \"requestBodies\":\n return \"requestBody\";\n // Default to removing the \"s\"\n default:\n return key.slice(0, -1);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
238
|
-
|
|
239
|
-
+{"version":3,"file":"components-object.mjs","sources":["../../src/transform/components-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport * as changeCase from \"change-case\";\nimport ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type { ComponentsObject, GlobalContext, SchemaObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformParameterObject from \"./parameter-object.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponseObject from \"./response-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Determines if a schema object represents an enum type to prevent duplicate exports\n * when using --root-types and --enum flags together.\n *\n * When both flags are enabled:\n * - --enum flag generates TypeScript enums at the bottom of the file\n * - --root-types flag would normally also export these as root type aliases\n * - This results in duplicate exports (both enum and type alias for the same schema)\n *\n * This function identifies enum schemas so they can be excluded from root type generation,\n * allowing only the TypeScript enum to be generated.\n *\n * @param schema The schema object to check\n * @returns true if the schema represents an enum type\n */\nexport function isEnumSchema(schema: unknown): boolean {\n return (\n typeof schema === \"object\" &&\n schema !== null &&\n !Array.isArray(schema) &&\n \"enum\" in schema &&\n Array.isArray((schema as any).enum) &&\n (!(\"type\" in schema) || (schema as any).type !== \"object\") &&\n !(\"properties\" in schema) &&\n !(\"additionalProperties\" in schema)\n );\n}\n\ntype ComponentTransforms = keyof Omit<ComponentsObject, \"examples\" | \"securitySchemes\" | \"links\" | \"callbacks\">;\n\nconst transformers: Record<ComponentTransforms, (node: any, options: TransformNodeOptions) => ts.TypeNode> = {\n schemas: transformSchemaObject,\n responses: transformResponseObject,\n parameters: transformParameterObject,\n requestBodies: transformRequestBodyObject,\n headers: transformHeaderObject,\n pathItems: transformPathItemObject,\n};\n\n/**\n * Transform the ComponentsObject (4.8.7)\n * @see https://spec.openapis.org/oas/latest.html#components-object\n */\nexport default function transformComponentsObject(componentsObject: ComponentsObject, ctx: GlobalContext): ts.Node[] {\n const type: ts.TypeElement[] = [];\n const rootTypeAliases: { [key: string]: ts.TypeAliasDeclaration } = {};\n for (const key of Object.keys(transformers) as ComponentTransforms[]) {\n const componentT = performance.now();\n\n const items: ts.TypeElement[] = [];\n if (componentsObject[key]) {\n for (const [name, item] of getEntries<SchemaObject>(componentsObject[key], ctx)) {\n let subType = transformers[key](item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n\n let hasQuestionToken = false;\n if (ctx.transform) {\n const result = ctx.transform(item, {\n path: createRef([\"components\", key, name]),\n schema: item,\n ctx,\n });\n if (result) {\n if (\"schema\" in result) {\n subType = result.schema;\n hasQuestionToken = result.questionToken;\n } else {\n subType = result;\n }\n }\n }\n\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ hasQuestionToken ? QUESTION_TOKEN : undefined,\n /* type */ subType,\n );\n addJSDocComment(item as unknown as any, property);\n items.push(property);\n\n if (ctx.rootTypes) {\n // Skip enum schemas when generating root types to prevent duplication (only when --enum flag is enabled)\n const shouldSkipEnumSchema = ctx.enum && key === \"schemas\" && isEnumSchema(item);\n\n if (!shouldSkipEnumSchema) {\n const componentKey = changeCase.pascalCase(singularizeComponentKey(key));\n let aliasName = `${componentKey}${changeCase.pascalCase(name)}`;\n\n // Add counter suffix (e.g. \"_2\") if conflict in name\n let conflictCounter = 1;\n\n while (rootTypeAliases[aliasName] !== undefined) {\n conflictCounter++;\n aliasName = `${componentKey}${changeCase.pascalCase(name)}_${conflictCounter}`;\n }\n const ref = ts.factory.createTypeReferenceNode(`components['${key}']['${name}']`);\n if (ctx.rootTypesNoSchemaPrefix && key === \"schemas\") {\n aliasName = aliasName.replace(componentKey, \"\");\n }\n const typeAlias = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ aliasName,\n /* typeParameters */ undefined,\n /* type */ ref,\n );\n rootTypeAliases[aliasName] = typeAlias;\n }\n }\n }\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(key),\n /* questionToken */ undefined,\n /* type */ items.length ? ts.factory.createTypeLiteralNode(items) : NEVER,\n ),\n );\n\n debug(`Transformed components → ${key}`, \"ts\", performance.now() - componentT);\n }\n\n // Extract root types\n let rootTypes: ts.TypeAliasDeclaration[] = [];\n if (ctx.rootTypes) {\n rootTypes = Object.keys(rootTypeAliases).map((k) => rootTypeAliases[k]);\n }\n\n return [ts.factory.createTypeLiteralNode(type), ...rootTypes];\n}\n\nexport function singularizeComponentKey(\n key: `x-${string}` | \"schemas\" | \"responses\" | \"parameters\" | \"requestBodies\" | \"headers\" | \"pathItems\",\n): string {\n switch (key) {\n // Handle special singular case\n case \"requestBodies\":\n return \"requestBody\";\n // Default to removing the \"s\"\n default:\n return key.slice(0, -1);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
240
|
-
|
|
241
|
-
diff --git a/dist/transform/header-object.cjs.map b/dist/transform/header-object.cjs.map
|
|
242
|
-
index 5f9f7cdfd1ae7a53cf028f68480fab06db9aed15..b255677862e7fb97e5c7f081642eb193b64e9af7 100644
|
|
243
|
-
--- a/dist/transform/header-object.cjs.map
|
|
244
|
-
+++ b/dist/transform/header-object.cjs.map
|
|
245
|
-
@@ -1 +1 @@
|
|
246
|
-
-{"version":3,"file":"header-object.cjs","sources":["../../src/transform/header-object.ts"],"sourcesContent":["import { escapePointer } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport { addJSDocComment, tsModifiers, tsPropertyIndex, UNKNOWN } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { HeaderObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform HeaderObject nodes (4.8.21)\n * @see https://spec.openapis.org/oas/v3.1.0#header-object\n */\nexport default function transformHeaderObject(headerObject: HeaderObject, options: TransformNodeOptions): ts.TypeNode {\n if (headerObject.schema) {\n return transformSchemaObject(headerObject.schema, options);\n }\n\n if (headerObject.content) {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(headerObject.content ?? {}, options.ctx)) {\n const nextPath = `${options.path ?? \"#\"}/${escapePointer(contentType)}`;\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n return ts.factory.createTypeLiteralNode(type);\n }\n\n return UNKNOWN;\n}\n"],"names":["transformSchemaObject","mediaTypeObject","getEntries","escapePointer","transformMediaTypeObject","ts","tsModifiers","tsPropertyIndex","addJSDocComment","UNKNOWN"],"mappings":";;;;;;;;;;;;;AAYA,SAAwB,qBAAA,CAAsB,cAA4B,OAAA,EAA4C;AACpH,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,OAAOA,oBAAA,CAAsB,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,MAAM,OAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,WAAA,EAAaC,iBAAe,CAAA,IAAKC,gBAAA,CAAW,YAAA,CAAa,OAAA,IAAW,EAAC,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChG,MAAA,MAAM,QAAA,GAAW,GAAG,OAAA,CAAQ,IAAA,IAAQ,GAAG,CAAA,CAAA,EAAIC,yBAAA,CAAc,WAAW,CAAC,CAAA,CAAA;AACrE,MAAA,MAAM,SAAA,GACJ,MAAA,IAAUF,iBAAA,GACND,oBAAA,CAAsBC,iBAAA,EAAiB;AAAA,QACrC,GAAG,OAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACP,CAAA,GACDG,eAAA,CAAyBH,iBAAA,EAAiB;AAAA,QACxC,GAAG,OAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACP,CAAA;AACP,MAAA,MAAM,QAAA,GAAWI,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,QACNC,iBAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/CC,qBAAgB,WAAW,CAAA;AAAA;AAAA,QAC3B,MAAA;AAAA;AAAA,QACA;AAAA,OACtB;AACA,MAAAC,oBAAA,CAAgBP,mBAAiB,QAAQ,CAAA;AACzC,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,IACpB;AACA,IAAA,OAAOI,WAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAOI,YAAA;AACT;;;;"}
|
|
247
|
-
|
|
248
|
-
+{"version":3,"file":"header-object.cjs","sources":["../../src/transform/header-object.ts"],"sourcesContent":["import { escapePointer } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport { addJSDocComment, tsModifiers, tsPropertyIndex, UNKNOWN } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { HeaderObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform HeaderObject nodes (4.8.21)\n * @see https://spec.openapis.org/oas/v3.1.0#header-object\n */\nexport default function transformHeaderObject(headerObject: HeaderObject, options: TransformNodeOptions): ts.TypeNode {\n if (headerObject.schema) {\n return transformSchemaObject(headerObject.schema, options);\n }\n\n if (headerObject.content) {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(headerObject.content ?? {}, options.ctx)) {\n const nextPath = `${options.path ?? \"#\"}/${escapePointer(contentType)}`;\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n return ts.factory.createTypeLiteralNode(type);\n }\n\n return UNKNOWN;\n}\n"],"names":["transformSchemaObject","mediaTypeObject","getEntries","escapePointer","transformMediaTypeObject","ts","tsModifiers","tsPropertyIndex","addJSDocComment","UNKNOWN"],"mappings":";;;;;;;;;;;;;AAYwB,SAAA,qBAAA,CAAsB,cAA4B,OAA4C,EAAA;AACpH,EAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,IAAO,OAAAA,oBAAA,CAAsB,YAAa,CAAA,MAAA,EAAQ,OAAO,CAAA;AAAA;AAG3D,EAAA,IAAI,aAAa,OAAS,EAAA;AACxB,IAAA,MAAM,OAAyB,EAAC;AAChC,IAAW,KAAA,MAAA,CAAC,WAAa,EAAAC,iBAAe,CAAK,IAAAC,gBAAA,CAAW,YAAa,CAAA,OAAA,IAAW,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAChG,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,IAAA,IAAQ,GAAG,CAAI,CAAA,EAAAC,yBAAA,CAAc,WAAW,CAAC,CAAA,CAAA;AACrE,MAAA,MAAM,SACJ,GAAA,MAAA,IAAUF,iBACN,GAAAD,oBAAA,CAAsBC,iBAAiB,EAAA;AAAA,QACrC,GAAG,OAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACP,CACD,GAAAG,eAAA,CAAyBH,iBAAiB,EAAA;AAAA,QACxC,GAAG,OAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACP,CAAA;AACP,MAAM,MAAA,QAAA,GAAWI,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACNC,iBAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/CC,qBAAgB,WAAW,CAAA;AAAA;AAAA,QAC3B,MAAA;AAAA;AAAA,QACA;AAAA,OACtB;AACA,MAAAC,oBAAA,CAAgBP,mBAAiB,QAAQ,CAAA;AACzC,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA;AAEpB,IAAO,OAAAI,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA;AAG9C,EAAO,OAAAI,YAAA;AACT;;;;"}
|
|
249
|
-
|
|
250
|
-
diff --git a/dist/transform/header-object.mjs.map b/dist/transform/header-object.mjs.map
|
|
251
|
-
index 3a758586dc0457fa2614c7d1c2521037300d84a3..ef8e3c1fb772e667747f4e30f5a21833e96e4b47 100644
|
|
252
|
-
--- a/dist/transform/header-object.mjs.map
|
|
253
|
-
+++ b/dist/transform/header-object.mjs.map
|
|
254
|
-
@@ -1 +1 @@
|
|
255
|
-
-{"version":3,"file":"header-object.mjs","sources":["../../src/transform/header-object.ts"],"sourcesContent":["import { escapePointer } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport { addJSDocComment, tsModifiers, tsPropertyIndex, UNKNOWN } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { HeaderObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform HeaderObject nodes (4.8.21)\n * @see https://spec.openapis.org/oas/v3.1.0#header-object\n */\nexport default function transformHeaderObject(headerObject: HeaderObject, options: TransformNodeOptions): ts.TypeNode {\n if (headerObject.schema) {\n return transformSchemaObject(headerObject.schema, options);\n }\n\n if (headerObject.content) {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(headerObject.content ?? {}, options.ctx)) {\n const nextPath = `${options.path ?? \"#\"}/${escapePointer(contentType)}`;\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n return ts.factory.createTypeLiteralNode(type);\n }\n\n return UNKNOWN;\n}\n"],"names":[],"mappings":";;;;;;;AAYA,SAAwB,qBAAA,CAAsB,cAA4B,OAAA,EAA4C;AACpH,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,OAAO,qBAAA,CAAsB,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,MAAM,OAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,eAAe,CAAA,IAAK,UAAA,CAAW,YAAA,CAAa,OAAA,IAAW,EAAC,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChG,MAAA,MAAM,QAAA,GAAW,GAAG,OAAA,CAAQ,IAAA,IAAQ,GAAG,CAAA,CAAA,EAAI,aAAA,CAAc,WAAW,CAAC,CAAA,CAAA;AACrE,MAAA,MAAM,SAAA,GACJ,MAAA,IAAU,eAAA,GACN,qBAAA,CAAsB,eAAA,EAAiB;AAAA,QACrC,GAAG,OAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACP,CAAA,GACD,wBAAA,CAAyB,eAAA,EAAiB;AAAA,QACxC,GAAG,OAAA;AAAA,QACH,IAAA,EAAM;AAAA,OACP,CAAA;AACP,MAAA,MAAM,QAAA,GAAW,GAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,QACN,YAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/C,gBAAgB,WAAW,CAAA;AAAA;AAAA,QAC3B,MAAA;AAAA;AAAA,QACA;AAAA,OACtB;AACA,MAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AACzC,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,IACpB;AACA,IAAA,OAAO,EAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,OAAA;AACT;;;;"}
|
|
256
|
-
|
|
257
|
-
+{"version":3,"file":"header-object.mjs","sources":["../../src/transform/header-object.ts"],"sourcesContent":["import { escapePointer } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport { addJSDocComment, tsModifiers, tsPropertyIndex, UNKNOWN } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { HeaderObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform HeaderObject nodes (4.8.21)\n * @see https://spec.openapis.org/oas/v3.1.0#header-object\n */\nexport default function transformHeaderObject(headerObject: HeaderObject, options: TransformNodeOptions): ts.TypeNode {\n if (headerObject.schema) {\n return transformSchemaObject(headerObject.schema, options);\n }\n\n if (headerObject.content) {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(headerObject.content ?? {}, options.ctx)) {\n const nextPath = `${options.path ?? \"#\"}/${escapePointer(contentType)}`;\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n return ts.factory.createTypeLiteralNode(type);\n }\n\n return UNKNOWN;\n}\n"],"names":[],"mappings":";;;;;;;AAYwB,SAAA,qBAAA,CAAsB,cAA4B,OAA4C,EAAA;AACpH,EAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,IAAO,OAAA,qBAAA,CAAsB,YAAa,CAAA,MAAA,EAAQ,OAAO,CAAA;AAAA;AAG3D,EAAA,IAAI,aAAa,OAAS,EAAA;AACxB,IAAA,MAAM,OAAyB,EAAC;AAChC,IAAW,KAAA,MAAA,CAAC,WAAa,EAAA,eAAe,CAAK,IAAA,UAAA,CAAW,YAAa,CAAA,OAAA,IAAW,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAChG,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,IAAA,IAAQ,GAAG,CAAI,CAAA,EAAA,aAAA,CAAc,WAAW,CAAC,CAAA,CAAA;AACrE,MAAA,MAAM,SACJ,GAAA,MAAA,IAAU,eACN,GAAA,qBAAA,CAAsB,eAAiB,EAAA;AAAA,QACrC,GAAG,OAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACP,CACD,GAAA,wBAAA,CAAyB,eAAiB,EAAA;AAAA,QACxC,GAAG,OAAA;AAAA,QACH,IAAM,EAAA;AAAA,OACP,CAAA;AACP,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/C,gBAAgB,WAAW,CAAA;AAAA;AAAA,QAC3B,MAAA;AAAA;AAAA,QACA;AAAA,OACtB;AACA,MAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AACzC,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA;AAEpB,IAAO,OAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA;AAG9C,EAAO,OAAA,OAAA;AACT;;;;"}
|
|
258
|
-
|
|
259
|
-
diff --git a/dist/transform/index.cjs.map b/dist/transform/index.cjs.map
|
|
260
|
-
index 5de381bde0f275d86ff2bfc529d48f7994a6f3c1..d13209146bf3c2262d3bf785ffce76e7d7b93e13 100644
|
|
261
|
-
--- a/dist/transform/index.cjs.map
|
|
262
|
-
+++ b/dist/transform/index.cjs.map
|
|
263
|
-
@@ -1 +1 @@
|
|
264
|
-
-{"version":3,"file":"index.cjs","sources":["../../src/transform/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts, { type InterfaceDeclaration, type TypeLiteralNode } from \"typescript\";\nimport { NEVER, STRING, stringToAST, tsModifiers, tsRecord } from \"../lib/ts.js\";\nimport { createRef, debug } from \"../lib/utils.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport transformComponentsObject from \"./components-object.js\";\nimport makeApiPathsEnum from \"./paths-enum.js\";\nimport transformPathsObject from \"./paths-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\nimport transformWebhooksObject from \"./webhooks-object.js\";\n\ntype SchemaTransforms = keyof Pick<OpenAPI3, \"paths\" | \"webhooks\" | \"components\" | \"$defs\">;\n\nconst transformers: Record<SchemaTransforms, (node: any, options: GlobalContext) => ts.Node | ts.Node[]> = {\n paths: transformPathsObject,\n webhooks: transformWebhooksObject,\n components: transformComponentsObject,\n $defs: (node, options) => transformSchemaObject(node, { path: createRef([\"$defs\"]), ctx: options, schema: node }),\n};\n\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext) {\n const type: ts.Node[] = [];\n\n if (ctx.inject) {\n const injectNodes = stringToAST(ctx.inject) as ts.Node[];\n type.push(...injectNodes);\n }\n\n for (const root of Object.keys(transformers) as SchemaTransforms[]) {\n const emptyObj = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n );\n\n if (schema[root] && typeof schema[root] === \"object\") {\n const rootT = performance.now();\n const subTypes = ([] as ts.Node[]).concat(transformers[root](schema[root], ctx));\n for (const subType of subTypes) {\n if (ts.isTypeNode(subType)) {\n if ((subType as ts.TypeLiteralNode).members?.length) {\n type.push(\n ctx.exportType\n ? ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ subType,\n )\n : ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ (subType as TypeLiteralNode).members,\n ),\n );\n debug(`${root} done`, \"ts\", performance.now() - rootT);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n } else if (ts.isTypeAliasDeclaration(subType)) {\n type.push(subType);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n\n // inject\n let hasOperations = false;\n for (const injectedType of ctx.injectFooter) {\n if (!hasOperations && (injectedType as InterfaceDeclaration)?.name?.escapedText === \"operations\") {\n hasOperations = true;\n }\n type.push(injectedType);\n }\n if (!hasOperations) {\n // if no operations created, inject empty operations type\n type.push(\n ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ \"operations\",\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n ),\n );\n }\n\n if (ctx.makePathsEnum && schema.paths) {\n type.push(makeApiPathsEnum(schema.paths));\n }\n\n return type;\n}\n"],"names":["transformPathsObject","transformWebhooksObject","transformComponentsObject","transformSchemaObject","createRef","stringToAST","ts","tsModifiers","tsRecord","STRING","NEVER","performance","debug","makeApiPathsEnum"],"mappings":"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"}
|
|
265
|
-
|
|
266
|
-
+{"version":3,"file":"index.cjs","sources":["../../src/transform/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts, { type InterfaceDeclaration, type TypeLiteralNode } from \"typescript\";\nimport { NEVER, STRING, stringToAST, tsModifiers, tsRecord } from \"../lib/ts.js\";\nimport { createRef, debug } from \"../lib/utils.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport transformComponentsObject from \"./components-object.js\";\nimport makeApiPathsEnum from \"./paths-enum.js\";\nimport transformPathsObject from \"./paths-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\nimport transformWebhooksObject from \"./webhooks-object.js\";\n\ntype SchemaTransforms = keyof Pick<OpenAPI3, \"paths\" | \"webhooks\" | \"components\" | \"$defs\">;\n\nconst transformers: Record<SchemaTransforms, (node: any, options: GlobalContext) => ts.Node | ts.Node[]> = {\n paths: transformPathsObject,\n webhooks: transformWebhooksObject,\n components: transformComponentsObject,\n $defs: (node, options) => transformSchemaObject(node, { path: createRef([\"$defs\"]), ctx: options, schema: node }),\n};\n\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext) {\n const type: ts.Node[] = [];\n\n if (ctx.inject) {\n const injectNodes = stringToAST(ctx.inject) as ts.Node[];\n type.push(...injectNodes);\n }\n\n for (const root of Object.keys(transformers) as SchemaTransforms[]) {\n const emptyObj = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n );\n\n if (schema[root] && typeof schema[root] === \"object\") {\n const rootT = performance.now();\n const subTypes = ([] as ts.Node[]).concat(transformers[root](schema[root], ctx));\n for (const subType of subTypes) {\n if (ts.isTypeNode(subType)) {\n if ((subType as ts.TypeLiteralNode).members?.length) {\n type.push(\n ctx.exportType\n ? ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ subType,\n )\n : ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ (subType as TypeLiteralNode).members,\n ),\n );\n debug(`${root} done`, \"ts\", performance.now() - rootT);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n } else if (ts.isTypeAliasDeclaration(subType)) {\n type.push(subType);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n\n // inject\n let hasOperations = false;\n for (const injectedType of ctx.injectFooter) {\n if (!hasOperations && (injectedType as InterfaceDeclaration)?.name?.escapedText === \"operations\") {\n hasOperations = true;\n }\n type.push(injectedType);\n }\n if (!hasOperations) {\n // if no operations created, inject empty operations type\n type.push(\n ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ \"operations\",\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n ),\n );\n }\n\n if (ctx.makePathsEnum && schema.paths) {\n type.push(makeApiPathsEnum(schema.paths));\n }\n\n return type;\n}\n"],"names":["transformPathsObject","transformWebhooksObject","transformComponentsObject","transformSchemaObject","createRef","stringToAST","ts","tsModifiers","tsRecord","STRING","NEVER","performance","debug","makeApiPathsEnum"],"mappings":"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"}
|
|
267
|
-
|
|
268
|
-
diff --git a/dist/transform/index.mjs.map b/dist/transform/index.mjs.map
|
|
269
|
-
index 221f577674a150cb869f157acbab360fce5017f9..843f629cd058df983b399a091662d29d2c463504 100644
|
|
270
|
-
--- a/dist/transform/index.mjs.map
|
|
271
|
-
+++ b/dist/transform/index.mjs.map
|
|
272
|
-
@@ -1 +1 @@
|
|
273
|
-
-{"version":3,"file":"index.mjs","sources":["../../src/transform/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts, { type InterfaceDeclaration, type TypeLiteralNode } from \"typescript\";\nimport { NEVER, STRING, stringToAST, tsModifiers, tsRecord } from \"../lib/ts.js\";\nimport { createRef, debug } from \"../lib/utils.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport transformComponentsObject from \"./components-object.js\";\nimport makeApiPathsEnum from \"./paths-enum.js\";\nimport transformPathsObject from \"./paths-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\nimport transformWebhooksObject from \"./webhooks-object.js\";\n\ntype SchemaTransforms = keyof Pick<OpenAPI3, \"paths\" | \"webhooks\" | \"components\" | \"$defs\">;\n\nconst transformers: Record<SchemaTransforms, (node: any, options: GlobalContext) => ts.Node | ts.Node[]> = {\n paths: transformPathsObject,\n webhooks: transformWebhooksObject,\n components: transformComponentsObject,\n $defs: (node, options) => transformSchemaObject(node, { path: createRef([\"$defs\"]), ctx: options, schema: node }),\n};\n\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext) {\n const type: ts.Node[] = [];\n\n if (ctx.inject) {\n const injectNodes = stringToAST(ctx.inject) as ts.Node[];\n type.push(...injectNodes);\n }\n\n for (const root of Object.keys(transformers) as SchemaTransforms[]) {\n const emptyObj = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n );\n\n if (schema[root] && typeof schema[root] === \"object\") {\n const rootT = performance.now();\n const subTypes = ([] as ts.Node[]).concat(transformers[root](schema[root], ctx));\n for (const subType of subTypes) {\n if (ts.isTypeNode(subType)) {\n if ((subType as ts.TypeLiteralNode).members?.length) {\n type.push(\n ctx.exportType\n ? ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ subType,\n )\n : ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ (subType as TypeLiteralNode).members,\n ),\n );\n debug(`${root} done`, \"ts\", performance.now() - rootT);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n } else if (ts.isTypeAliasDeclaration(subType)) {\n type.push(subType);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n\n // inject\n let hasOperations = false;\n for (const injectedType of ctx.injectFooter) {\n if (!hasOperations && (injectedType as InterfaceDeclaration)?.name?.escapedText === \"operations\") {\n hasOperations = true;\n }\n type.push(injectedType);\n }\n if (!hasOperations) {\n // if no operations created, inject empty operations type\n type.push(\n ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ \"operations\",\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n ),\n );\n }\n\n if (ctx.makePathsEnum && schema.paths) {\n type.push(makeApiPathsEnum(schema.paths));\n }\n\n return type;\n}\n"],"names":[],"mappings":"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"}
|
|
274
|
-
|
|
275
|
-
+{"version":3,"file":"index.mjs","sources":["../../src/transform/index.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts, { type InterfaceDeclaration, type TypeLiteralNode } from \"typescript\";\nimport { NEVER, STRING, stringToAST, tsModifiers, tsRecord } from \"../lib/ts.js\";\nimport { createRef, debug } from \"../lib/utils.js\";\nimport type { GlobalContext, OpenAPI3 } from \"../types.js\";\nimport transformComponentsObject from \"./components-object.js\";\nimport makeApiPathsEnum from \"./paths-enum.js\";\nimport transformPathsObject from \"./paths-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\nimport transformWebhooksObject from \"./webhooks-object.js\";\n\ntype SchemaTransforms = keyof Pick<OpenAPI3, \"paths\" | \"webhooks\" | \"components\" | \"$defs\">;\n\nconst transformers: Record<SchemaTransforms, (node: any, options: GlobalContext) => ts.Node | ts.Node[]> = {\n paths: transformPathsObject,\n webhooks: transformWebhooksObject,\n components: transformComponentsObject,\n $defs: (node, options) => transformSchemaObject(node, { path: createRef([\"$defs\"]), ctx: options, schema: node }),\n};\n\nexport default function transformSchema(schema: OpenAPI3, ctx: GlobalContext) {\n const type: ts.Node[] = [];\n\n if (ctx.inject) {\n const injectNodes = stringToAST(ctx.inject) as ts.Node[];\n type.push(...injectNodes);\n }\n\n for (const root of Object.keys(transformers) as SchemaTransforms[]) {\n const emptyObj = ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n );\n\n if (schema[root] && typeof schema[root] === \"object\") {\n const rootT = performance.now();\n const subTypes = ([] as ts.Node[]).concat(transformers[root](schema[root], ctx));\n for (const subType of subTypes) {\n if (ts.isTypeNode(subType)) {\n if ((subType as ts.TypeLiteralNode).members?.length) {\n type.push(\n ctx.exportType\n ? ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* type */ subType,\n )\n : ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ root,\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ (subType as TypeLiteralNode).members,\n ),\n );\n debug(`${root} done`, \"ts\", performance.now() - rootT);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n } else if (ts.isTypeAliasDeclaration(subType)) {\n type.push(subType);\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n } else {\n type.push(emptyObj);\n debug(`${root} done (skipped)`, \"ts\", 0);\n }\n }\n\n // inject\n let hasOperations = false;\n for (const injectedType of ctx.injectFooter) {\n if (!hasOperations && (injectedType as InterfaceDeclaration)?.name?.escapedText === \"operations\") {\n hasOperations = true;\n }\n type.push(injectedType);\n }\n if (!hasOperations) {\n // if no operations created, inject empty operations type\n type.push(\n ts.factory.createTypeAliasDeclaration(\n /* modifiers */ tsModifiers({ export: true }),\n /* name */ \"operations\",\n /* typeParameters */ undefined,\n /* type */ tsRecord(STRING, NEVER),\n ),\n );\n }\n\n if (ctx.makePathsEnum && schema.paths) {\n type.push(makeApiPathsEnum(schema.paths));\n }\n\n return type;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAaA,MAAM,YAAqG,GAAA;AAAA,EACzG,KAAO,EAAA,oBAAA;AAAA,EACP,QAAU,EAAA,uBAAA;AAAA,EACV,UAAY,EAAA,yBAAA;AAAA,EACZ,OAAO,CAAC,IAAA,EAAM,OAAY,KAAA,qBAAA,CAAsB,MAAM,EAAE,IAAA,EAAM,SAAU,CAAA,CAAC,OAAO,CAAC,CAAA,EAAG,KAAK,OAAS,EAAA,MAAA,EAAQ,MAAM;AAClH,CAAA;AAEwB,SAAA,eAAA,CAAgB,QAAkB,GAAoB,EAAA;AAC5E,EAAA,MAAM,OAAkB,EAAC;AAEzB,EAAA,IAAI,IAAI,MAAQ,EAAA;AACd,IAAM,MAAA,WAAA,GAAc,WAAY,CAAA,GAAA,CAAI,MAAM,CAAA;AAC1C,IAAK,IAAA,CAAA,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA;AAG1B,EAAA,KAAA,MAAW,IAAQ,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAyB,EAAA;AAClE,IAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,MACL,WAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,MAC5B,IAAA;AAAA;AAAA,MACA,MAAA;AAAA;AAAA,MACA,QAAA,CAAS,QAAQ,KAAK;AAAA,KAC7C;AAEA,IAAA,IAAI,OAAO,IAAI,CAAA,IAAK,OAAO,MAAO,CAAA,IAAI,MAAM,QAAU,EAAA;AACpD,MAAM,MAAA,KAAA,GAAQ,YAAY,GAAI,EAAA;AAC9B,MAAM,MAAA,QAAA,GAAY,EAAC,CAAgB,MAAO,CAAA,YAAA,CAAa,IAAI,CAAA,CAAE,MAAO,CAAA,IAAI,CAAG,EAAA,GAAG,CAAC,CAAA;AAC/E,MAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,QAAI,IAAA,EAAA,CAAG,UAAW,CAAA,OAAO,CAAG,EAAA;AAC1B,UAAK,IAAA,OAAA,CAA+B,SAAS,MAAQ,EAAA;AACnD,YAAK,IAAA,CAAA,IAAA;AAAA,cACH,GAAA,CAAI,UACA,GAAA,EAAA,CAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,gBACY,WAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,gBAC5B,IAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA;AAAA,eACvB,GACA,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,gBACa,WAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,gBAC5B,IAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACC,OAA4B,CAAA;AAAA;AACrD,aACN;AACA,YAAA,KAAA,CAAM,GAAG,IAAI,CAAA,KAAA,CAAA,EAAS,MAAM,WAAY,CAAA,GAAA,KAAQ,KAAK,CAAA;AAAA,WAChD,MAAA;AACL,YAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,YAAA,KAAA,CAAM,CAAG,EAAA,IAAI,CAAmB,eAAA,CAAA,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA;AACzC,SACS,MAAA,IAAA,EAAA,CAAG,sBAAuB,CAAA,OAAO,CAAG,EAAA;AAC7C,UAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,SACZ,MAAA;AACL,UAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,UAAA,KAAA,CAAM,CAAG,EAAA,IAAI,CAAmB,eAAA,CAAA,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA;AACzC;AACF,KACK,MAAA;AACL,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,MAAA,KAAA,CAAM,CAAG,EAAA,IAAI,CAAmB,eAAA,CAAA,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA;AACzC;AAIF,EAAA,IAAI,aAAgB,GAAA,KAAA;AACpB,EAAW,KAAA,MAAA,YAAA,IAAgB,IAAI,YAAc,EAAA;AAC3C,IAAA,IAAI,CAAC,aAAA,IAAkB,YAAuC,EAAA,IAAA,EAAM,gBAAgB,YAAc,EAAA;AAChG,MAAgB,aAAA,GAAA,IAAA;AAAA;AAElB,IAAA,IAAA,CAAK,KAAK,YAAY,CAAA;AAAA;AAExB,EAAA,IAAI,CAAC,aAAe,EAAA;AAElB,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,QACY,WAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,QAC5B,YAAA;AAAA;AAAA,QACA,MAAA;AAAA;AAAA,QACA,QAAA,CAAS,QAAQ,KAAK;AAAA;AAC7C,KACF;AAAA;AAGF,EAAI,IAAA,GAAA,CAAI,aAAiB,IAAA,MAAA,CAAO,KAAO,EAAA;AACrC,IAAA,IAAA,CAAK,IAAK,CAAA,gBAAA,CAAiB,MAAO,CAAA,KAAK,CAAC,CAAA;AAAA;AAG1C,EAAO,OAAA,IAAA;AACT;;;;"}
|
|
276
|
-
|
|
277
|
-
diff --git a/dist/transform/media-type-object.cjs.map b/dist/transform/media-type-object.cjs.map
|
|
278
|
-
index f80f7960ee367ba487f90c4d6fb8f47f9ac25730..748ef28ced072742caafa256c61d082ba86f5f29 100644
|
|
279
|
-
--- a/dist/transform/media-type-object.cjs.map
|
|
280
|
-
+++ b/dist/transform/media-type-object.cjs.map
|
|
281
|
-
@@ -1 +1 @@
|
|
282
|
-
-{"version":3,"file":"media-type-object.cjs","sources":["../../src/transform/media-type-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { UNKNOWN } from \"../lib/ts.js\";\nimport type { MediaTypeObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform MediaTypeObject nodes (4.8.14)\n * @see https://spec.openapis.org/oas/v3.1.0#media-type-object\n */\nexport default function transformMediaTypeObject(\n mediaTypeObject: MediaTypeObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n if (!mediaTypeObject.schema) {\n return UNKNOWN;\n }\n return transformSchemaObject(mediaTypeObject.schema, options);\n}\n"],"names":["UNKNOWN","transformSchemaObject"],"mappings":";;;;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,IAAI,CAAC,gBAAgB,MAAA,EAAQ;AAC3B,IAAA,OAAOA,UAAA;AAAA,EACT;AACA,EAAA,OAAOC,oBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAC9D;;;;"}
|
|
283
|
-
|
|
284
|
-
+{"version":3,"file":"media-type-object.cjs","sources":["../../src/transform/media-type-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { UNKNOWN } from \"../lib/ts.js\";\nimport type { MediaTypeObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform MediaTypeObject nodes (4.8.14)\n * @see https://spec.openapis.org/oas/v3.1.0#media-type-object\n */\nexport default function transformMediaTypeObject(\n mediaTypeObject: MediaTypeObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n if (!mediaTypeObject.schema) {\n return UNKNOWN;\n }\n return transformSchemaObject(mediaTypeObject.schema, options);\n}\n"],"names":["UNKNOWN","transformSchemaObject"],"mappings":";;;;;AASwB,SAAA,wBAAA,CACtB,iBACA,OACa,EAAA;AACb,EAAI,IAAA,CAAC,gBAAgB,MAAQ,EAAA;AAC3B,IAAO,OAAAA,UAAA;AAAA;AAET,EAAO,OAAAC,oBAAA,CAAsB,eAAgB,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC9D;;;;"}
|
|
285
|
-
|
|
286
|
-
diff --git a/dist/transform/media-type-object.mjs.map b/dist/transform/media-type-object.mjs.map
|
|
287
|
-
index 1255251347102226877ccd3685924e8c20e5a571..38bcad94a57486191d6c5464d30161eafb385d0c 100644
|
|
288
|
-
--- a/dist/transform/media-type-object.mjs.map
|
|
289
|
-
+++ b/dist/transform/media-type-object.mjs.map
|
|
290
|
-
@@ -1 +1 @@
|
|
291
|
-
-{"version":3,"file":"media-type-object.mjs","sources":["../../src/transform/media-type-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { UNKNOWN } from \"../lib/ts.js\";\nimport type { MediaTypeObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform MediaTypeObject nodes (4.8.14)\n * @see https://spec.openapis.org/oas/v3.1.0#media-type-object\n */\nexport default function transformMediaTypeObject(\n mediaTypeObject: MediaTypeObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n if (!mediaTypeObject.schema) {\n return UNKNOWN;\n }\n return transformSchemaObject(mediaTypeObject.schema, options);\n}\n"],"names":[],"mappings":";;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,IAAI,CAAC,gBAAgB,MAAA,EAAQ;AAC3B,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,qBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAC9D;;;;"}
|
|
292
|
-
|
|
293
|
-
+{"version":3,"file":"media-type-object.mjs","sources":["../../src/transform/media-type-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { UNKNOWN } from \"../lib/ts.js\";\nimport type { MediaTypeObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform MediaTypeObject nodes (4.8.14)\n * @see https://spec.openapis.org/oas/v3.1.0#media-type-object\n */\nexport default function transformMediaTypeObject(\n mediaTypeObject: MediaTypeObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n if (!mediaTypeObject.schema) {\n return UNKNOWN;\n }\n return transformSchemaObject(mediaTypeObject.schema, options);\n}\n"],"names":[],"mappings":";;;AASwB,SAAA,wBAAA,CACtB,iBACA,OACa,EAAA;AACb,EAAI,IAAA,CAAC,gBAAgB,MAAQ,EAAA;AAC3B,IAAO,OAAA,OAAA;AAAA;AAET,EAAO,OAAA,qBAAA,CAAsB,eAAgB,CAAA,MAAA,EAAQ,OAAO,CAAA;AAC9D;;;;"}
|
|
294
|
-
|
|
295
|
-
diff --git a/dist/transform/operation-object.cjs.map b/dist/transform/operation-object.cjs.map
|
|
296
|
-
index cae22ad7edf2dd6028c92ba1662c1c4bd48eb3a6..9336e02c9ec6a590d33ab00cbefe6ece55c3ce5b 100644
|
|
297
|
-
--- a/dist/transform/operation-object.cjs.map
|
|
298
|
-
+++ b/dist/transform/operation-object.cjs.map
|
|
299
|
-
@@ -1 +1 @@
|
|
300
|
-
-{"version":3,"file":"operation-object.cjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":["transformParametersArray","oapiRef","transformRequestBodyObject","createRef","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","addJSDocComment","NEVER","transformResponsesObject"],"mappings":"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"}
|
|
301
|
-
|
|
302
|
-
+{"version":3,"file":"operation-object.cjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":["transformParametersArray","oapiRef","transformRequestBodyObject","createRef","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","addJSDocComment","NEVER","transformResponsesObject"],"mappings":"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"}
|
|
303
|
-
|
|
304
|
-
diff --git a/dist/transform/operation-object.mjs.map b/dist/transform/operation-object.mjs.map
|
|
305
|
-
index d38b845fc2b354bc7eb91b82d0fe08c1d931db34..0e0581241d22a90c1b7a4a46da419293bdda8567 100644
|
|
306
|
-
--- a/dist/transform/operation-object.mjs.map
|
|
307
|
-
+++ b/dist/transform/operation-object.mjs.map
|
|
308
|
-
@@ -1 +1 @@
|
|
309
|
-
-{"version":3,"file":"operation-object.mjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":[],"mappings":"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"}
|
|
310
|
-
|
|
311
|
-
+{"version":3,"file":"operation-object.mjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":[],"mappings":"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"}
|
|
312
|
-
|
|
313
|
-
diff --git a/dist/transform/parameter-object.cjs.map b/dist/transform/parameter-object.cjs.map
|
|
314
|
-
index 584244160b74a62e382461c2720661205c3aab53..786d6c7570ce77fbd74debba2fbef165235f1390 100644
|
|
315
|
-
--- a/dist/transform/parameter-object.cjs.map
|
|
316
|
-
+++ b/dist/transform/parameter-object.cjs.map
|
|
317
|
-
@@ -1 +1 @@
|
|
318
|
-
-{"version":3,"file":"parameter-object.cjs","sources":["../../src/transform/parameter-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { STRING } from \"../lib/ts.js\";\nimport type { ParameterObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform ParameterObject nodes (4.8.12)\n * @see https://spec.openapis.org/oas/v3.1.0#parameter-object\n */\nexport default function transformParameterObject(\n parameterObject: ParameterObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING; // assume a parameter is a string by default rather than \"unknown\"\n}\n"],"names":["transformSchemaObject","STRING"],"mappings":";;;;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,OAAO,gBAAgB,MAAA,GAASA,oBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA,GAAIC,SAAA;AAC3F;;;;"}
|
|
319
|
-
|
|
320
|
-
+{"version":3,"file":"parameter-object.cjs","sources":["../../src/transform/parameter-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { STRING } from \"../lib/ts.js\";\nimport type { ParameterObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform ParameterObject nodes (4.8.12)\n * @see https://spec.openapis.org/oas/v3.1.0#parameter-object\n */\nexport default function transformParameterObject(\n parameterObject: ParameterObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING; // assume a parameter is a string by default rather than \"unknown\"\n}\n"],"names":["transformSchemaObject","STRING"],"mappings":";;;;;AASwB,SAAA,wBAAA,CACtB,iBACA,OACa,EAAA;AACb,EAAA,OAAO,gBAAgB,MAAS,GAAAA,oBAAA,CAAsB,eAAgB,CAAA,MAAA,EAAQ,OAAO,CAAI,GAAAC,SAAA;AAC3F;;;;"}
|
|
321
|
-
|
|
322
|
-
diff --git a/dist/transform/parameter-object.mjs.map b/dist/transform/parameter-object.mjs.map
|
|
323
|
-
index 6b0dab02573e300ad39762f8333ac7c3a7e66e2b..1f329f47f7d8d738343d7d44011cde1f886db494 100644
|
|
324
|
-
--- a/dist/transform/parameter-object.mjs.map
|
|
325
|
-
+++ b/dist/transform/parameter-object.mjs.map
|
|
326
|
-
@@ -1 +1 @@
|
|
327
|
-
-{"version":3,"file":"parameter-object.mjs","sources":["../../src/transform/parameter-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { STRING } from \"../lib/ts.js\";\nimport type { ParameterObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform ParameterObject nodes (4.8.12)\n * @see https://spec.openapis.org/oas/v3.1.0#parameter-object\n */\nexport default function transformParameterObject(\n parameterObject: ParameterObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING; // assume a parameter is a string by default rather than \"unknown\"\n}\n"],"names":[],"mappings":";;;AASA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,OAAO,gBAAgB,MAAA,GAAS,qBAAA,CAAsB,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA,GAAI,MAAA;AAC3F;;;;"}
|
|
328
|
-
|
|
329
|
-
+{"version":3,"file":"parameter-object.mjs","sources":["../../src/transform/parameter-object.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { STRING } from \"../lib/ts.js\";\nimport type { ParameterObject, TransformNodeOptions } from \"../types.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform ParameterObject nodes (4.8.12)\n * @see https://spec.openapis.org/oas/v3.1.0#parameter-object\n */\nexport default function transformParameterObject(\n parameterObject: ParameterObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n return parameterObject.schema ? transformSchemaObject(parameterObject.schema, options) : STRING; // assume a parameter is a string by default rather than \"unknown\"\n}\n"],"names":[],"mappings":";;;AASwB,SAAA,wBAAA,CACtB,iBACA,OACa,EAAA;AACb,EAAA,OAAO,gBAAgB,MAAS,GAAA,qBAAA,CAAsB,eAAgB,CAAA,MAAA,EAAQ,OAAO,CAAI,GAAA,MAAA;AAC3F;;;;"}
|
|
330
|
-
|
|
331
|
-
diff --git a/dist/transform/parameters-array.cjs.map b/dist/transform/parameters-array.cjs.map
|
|
332
|
-
index c0a679049efc767bd1f0444f1924151d053d47d3..2fbd9dbc678334dc7026452cf8ea783339fe8fb2 100644
|
|
333
|
-
--- a/dist/transform/parameters-array.cjs.map
|
|
334
|
-
+++ b/dist/transform/parameters-array.cjs.map
|
|
335
|
-
@@ -1 +1 @@
|
|
336
|
-
-{"version":3,"file":"parameters-array.cjs","sources":["../../src/transform/parameters-array.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { ParameterObject, ReferenceObject, TransformNodeOptions } from \"../types.js\";\nimport transformParameterObject from \"./parameter-object.js\";\n\n// Regex to match path parameters in URL\nconst PATH_PARAM_RE = /\\{([^}]+)\\}/g;\n\n/**\n * Create a synthetic path parameter object from a parameter name\n */\nfunction createPathParameter(paramName: string): ParameterObject {\n return {\n name: paramName,\n in: \"path\",\n required: true,\n schema: { type: \"string\" },\n };\n}\n\n/**\n * Extract path parameters from a URL\n */\nfunction extractPathParamsFromUrl(path: string): ParameterObject[] {\n const params: ParameterObject[] = [];\n const matches = path.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n params.push(createPathParameter(paramName));\n }\n }\n return params;\n}\n\n/**\n * Synthetic type. Array of (ParameterObject | ReferenceObject)s found in OperationObject and PathItemObject.\n */\nexport function transformParametersArray(\n parametersArray: (ParameterObject | ReferenceObject)[],\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // Create a working copy of parameters array\n const workingParameters = [...parametersArray];\n\n // Generate path parameters if enabled\n if (options.ctx.generatePathParams && options.path) {\n const pathString = Array.isArray(options.path) ? options.path[0] : options.path;\n if (typeof pathString === \"string\") {\n const pathParams = extractPathParamsFromUrl(pathString);\n // Only add path parameters that aren't already defined\n for (const param of pathParams) {\n const exists = workingParameters.some((p) => {\n const resolved = \"$ref\" in p ? options.ctx.resolve<ParameterObject>(p.$ref) : p;\n return resolved?.in === \"path\" && resolved?.name === param.name;\n });\n if (!exists) {\n workingParameters.push(param);\n }\n }\n }\n }\n\n // parameters\n const paramType: ts.TypeElement[] = [];\n for (const paramIn of [\"query\", \"header\", \"path\", \"cookie\"] as ParameterObject[\"in\"][]) {\n const paramLocType: ts.TypeElement[] = [];\n let operationParameters = workingParameters.map((param) => ({\n original: param,\n resolved: \"$ref\" in param ? options.ctx.resolve<ParameterObject>(param.$ref) : param,\n }));\n\n // this is the only array type in the spec, so we have to one-off sort here\n if (options.ctx.alphabetize) {\n operationParameters.sort((a, b) => (a.resolved?.name ?? \"\").localeCompare(b.resolved?.name ?? \"\"));\n }\n if (options.ctx.excludeDeprecated) {\n operationParameters = operationParameters.filter(\n ({ resolved }) => !resolved?.deprecated && !resolved?.schema?.deprecated,\n );\n }\n for (const { original, resolved } of operationParameters) {\n if (resolved?.in !== paramIn) {\n continue;\n }\n let optional: ts.QuestionToken | undefined = undefined;\n if (paramIn !== \"path\" && !(resolved as ParameterObject).required) {\n optional = QUESTION_TOKEN;\n }\n const subType =\n \"$ref\" in original\n ? oapiRef(original.$ref, resolved)\n : transformParameterObject(resolved as ParameterObject, {\n ...options,\n path: createRef([options.path, \"parameters\", resolved.in, resolved.name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(resolved?.name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(resolved, property);\n paramLocType.push(property);\n }\n const allOptional = paramLocType.every((node) => !!node.questionToken);\n paramType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(paramIn),\n /* questionToken */ allOptional || !paramLocType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramLocType.length ? ts.factory.createTypeLiteralNode(paramLocType) : NEVER,\n ),\n );\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"parameters\"),\n /* questionToken */ !paramType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramType.length ? ts.factory.createTypeLiteralNode(paramType) : NEVER,\n ),\n );\n\n return type;\n}\n"],"names":["QUESTION_TOKEN","oapiRef","transformParameterObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","NEVER"],"mappings":"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"}
|
|
337
|
-
|
|
338
|
-
+{"version":3,"file":"parameters-array.cjs","sources":["../../src/transform/parameters-array.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { ParameterObject, ReferenceObject, TransformNodeOptions } from \"../types.js\";\nimport transformParameterObject from \"./parameter-object.js\";\n\n// Regex to match path parameters in URL\nconst PATH_PARAM_RE = /\\{([^}]+)\\}/g;\n\n/**\n * Create a synthetic path parameter object from a parameter name\n */\nfunction createPathParameter(paramName: string): ParameterObject {\n return {\n name: paramName,\n in: \"path\",\n required: true,\n schema: { type: \"string\" },\n };\n}\n\n/**\n * Extract path parameters from a URL\n */\nfunction extractPathParamsFromUrl(path: string): ParameterObject[] {\n const params: ParameterObject[] = [];\n const matches = path.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n params.push(createPathParameter(paramName));\n }\n }\n return params;\n}\n\n/**\n * Synthetic type. Array of (ParameterObject | ReferenceObject)s found in OperationObject and PathItemObject.\n */\nexport function transformParametersArray(\n parametersArray: (ParameterObject | ReferenceObject)[],\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // Create a working copy of parameters array\n const workingParameters = [...parametersArray];\n\n // Generate path parameters if enabled\n if (options.ctx.generatePathParams && options.path) {\n const pathString = Array.isArray(options.path) ? options.path[0] : options.path;\n if (typeof pathString === \"string\") {\n const pathParams = extractPathParamsFromUrl(pathString);\n // Only add path parameters that aren't already defined\n for (const param of pathParams) {\n const exists = workingParameters.some((p) => {\n const resolved = \"$ref\" in p ? options.ctx.resolve<ParameterObject>(p.$ref) : p;\n return resolved?.in === \"path\" && resolved?.name === param.name;\n });\n if (!exists) {\n workingParameters.push(param);\n }\n }\n }\n }\n\n // parameters\n const paramType: ts.TypeElement[] = [];\n for (const paramIn of [\"query\", \"header\", \"path\", \"cookie\"] as ParameterObject[\"in\"][]) {\n const paramLocType: ts.TypeElement[] = [];\n let operationParameters = workingParameters.map((param) => ({\n original: param,\n resolved: \"$ref\" in param ? options.ctx.resolve<ParameterObject>(param.$ref) : param,\n }));\n\n // this is the only array type in the spec, so we have to one-off sort here\n if (options.ctx.alphabetize) {\n operationParameters.sort((a, b) => (a.resolved?.name ?? \"\").localeCompare(b.resolved?.name ?? \"\"));\n }\n if (options.ctx.excludeDeprecated) {\n operationParameters = operationParameters.filter(\n ({ resolved }) => !resolved?.deprecated && !resolved?.schema?.deprecated,\n );\n }\n for (const { original, resolved } of operationParameters) {\n if (resolved?.in !== paramIn) {\n continue;\n }\n let optional: ts.QuestionToken | undefined = undefined;\n if (paramIn !== \"path\" && !(resolved as ParameterObject).required) {\n optional = QUESTION_TOKEN;\n }\n const subType =\n \"$ref\" in original\n ? oapiRef(original.$ref, resolved)\n : transformParameterObject(resolved as ParameterObject, {\n ...options,\n path: createRef([options.path, \"parameters\", resolved.in, resolved.name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(resolved?.name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(resolved, property);\n paramLocType.push(property);\n }\n const allOptional = paramLocType.every((node) => !!node.questionToken);\n paramType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(paramIn),\n /* questionToken */ allOptional || !paramLocType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramLocType.length ? ts.factory.createTypeLiteralNode(paramLocType) : NEVER,\n ),\n );\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"parameters\"),\n /* questionToken */ !paramType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramType.length ? ts.factory.createTypeLiteralNode(paramType) : NEVER,\n ),\n );\n\n return type;\n}\n"],"names":["QUESTION_TOKEN","oapiRef","transformParameterObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","NEVER"],"mappings":"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"}
|
|
339
|
-
|
|
340
|
-
diff --git a/dist/transform/parameters-array.mjs.map b/dist/transform/parameters-array.mjs.map
|
|
341
|
-
index b02c098d94f6fa61c742d0f92906fc78f256a46b..ca718ddc2aec7cb197931817acf67e4186c7154f 100644
|
|
342
|
-
--- a/dist/transform/parameters-array.mjs.map
|
|
343
|
-
+++ b/dist/transform/parameters-array.mjs.map
|
|
344
|
-
@@ -1 +1 @@
|
|
345
|
-
-{"version":3,"file":"parameters-array.mjs","sources":["../../src/transform/parameters-array.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { ParameterObject, ReferenceObject, TransformNodeOptions } from \"../types.js\";\nimport transformParameterObject from \"./parameter-object.js\";\n\n// Regex to match path parameters in URL\nconst PATH_PARAM_RE = /\\{([^}]+)\\}/g;\n\n/**\n * Create a synthetic path parameter object from a parameter name\n */\nfunction createPathParameter(paramName: string): ParameterObject {\n return {\n name: paramName,\n in: \"path\",\n required: true,\n schema: { type: \"string\" },\n };\n}\n\n/**\n * Extract path parameters from a URL\n */\nfunction extractPathParamsFromUrl(path: string): ParameterObject[] {\n const params: ParameterObject[] = [];\n const matches = path.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n params.push(createPathParameter(paramName));\n }\n }\n return params;\n}\n\n/**\n * Synthetic type. Array of (ParameterObject | ReferenceObject)s found in OperationObject and PathItemObject.\n */\nexport function transformParametersArray(\n parametersArray: (ParameterObject | ReferenceObject)[],\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // Create a working copy of parameters array\n const workingParameters = [...parametersArray];\n\n // Generate path parameters if enabled\n if (options.ctx.generatePathParams && options.path) {\n const pathString = Array.isArray(options.path) ? options.path[0] : options.path;\n if (typeof pathString === \"string\") {\n const pathParams = extractPathParamsFromUrl(pathString);\n // Only add path parameters that aren't already defined\n for (const param of pathParams) {\n const exists = workingParameters.some((p) => {\n const resolved = \"$ref\" in p ? options.ctx.resolve<ParameterObject>(p.$ref) : p;\n return resolved?.in === \"path\" && resolved?.name === param.name;\n });\n if (!exists) {\n workingParameters.push(param);\n }\n }\n }\n }\n\n // parameters\n const paramType: ts.TypeElement[] = [];\n for (const paramIn of [\"query\", \"header\", \"path\", \"cookie\"] as ParameterObject[\"in\"][]) {\n const paramLocType: ts.TypeElement[] = [];\n let operationParameters = workingParameters.map((param) => ({\n original: param,\n resolved: \"$ref\" in param ? options.ctx.resolve<ParameterObject>(param.$ref) : param,\n }));\n\n // this is the only array type in the spec, so we have to one-off sort here\n if (options.ctx.alphabetize) {\n operationParameters.sort((a, b) => (a.resolved?.name ?? \"\").localeCompare(b.resolved?.name ?? \"\"));\n }\n if (options.ctx.excludeDeprecated) {\n operationParameters = operationParameters.filter(\n ({ resolved }) => !resolved?.deprecated && !resolved?.schema?.deprecated,\n );\n }\n for (const { original, resolved } of operationParameters) {\n if (resolved?.in !== paramIn) {\n continue;\n }\n let optional: ts.QuestionToken | undefined = undefined;\n if (paramIn !== \"path\" && !(resolved as ParameterObject).required) {\n optional = QUESTION_TOKEN;\n }\n const subType =\n \"$ref\" in original\n ? oapiRef(original.$ref, resolved)\n : transformParameterObject(resolved as ParameterObject, {\n ...options,\n path: createRef([options.path, \"parameters\", resolved.in, resolved.name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(resolved?.name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(resolved, property);\n paramLocType.push(property);\n }\n const allOptional = paramLocType.every((node) => !!node.questionToken);\n paramType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(paramIn),\n /* questionToken */ allOptional || !paramLocType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramLocType.length ? ts.factory.createTypeLiteralNode(paramLocType) : NEVER,\n ),\n );\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"parameters\"),\n /* questionToken */ !paramType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramType.length ? ts.factory.createTypeLiteralNode(paramType) : NEVER,\n ),\n );\n\n return type;\n}\n"],"names":[],"mappings":"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"}
|
|
346
|
-
|
|
347
|
-
+{"version":3,"file":"parameters-array.mjs","sources":["../../src/transform/parameters-array.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { ParameterObject, ReferenceObject, TransformNodeOptions } from \"../types.js\";\nimport transformParameterObject from \"./parameter-object.js\";\n\n// Regex to match path parameters in URL\nconst PATH_PARAM_RE = /\\{([^}]+)\\}/g;\n\n/**\n * Create a synthetic path parameter object from a parameter name\n */\nfunction createPathParameter(paramName: string): ParameterObject {\n return {\n name: paramName,\n in: \"path\",\n required: true,\n schema: { type: \"string\" },\n };\n}\n\n/**\n * Extract path parameters from a URL\n */\nfunction extractPathParamsFromUrl(path: string): ParameterObject[] {\n const params: ParameterObject[] = [];\n const matches = path.match(PATH_PARAM_RE);\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n params.push(createPathParameter(paramName));\n }\n }\n return params;\n}\n\n/**\n * Synthetic type. Array of (ParameterObject | ReferenceObject)s found in OperationObject and PathItemObject.\n */\nexport function transformParametersArray(\n parametersArray: (ParameterObject | ReferenceObject)[],\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // Create a working copy of parameters array\n const workingParameters = [...parametersArray];\n\n // Generate path parameters if enabled\n if (options.ctx.generatePathParams && options.path) {\n const pathString = Array.isArray(options.path) ? options.path[0] : options.path;\n if (typeof pathString === \"string\") {\n const pathParams = extractPathParamsFromUrl(pathString);\n // Only add path parameters that aren't already defined\n for (const param of pathParams) {\n const exists = workingParameters.some((p) => {\n const resolved = \"$ref\" in p ? options.ctx.resolve<ParameterObject>(p.$ref) : p;\n return resolved?.in === \"path\" && resolved?.name === param.name;\n });\n if (!exists) {\n workingParameters.push(param);\n }\n }\n }\n }\n\n // parameters\n const paramType: ts.TypeElement[] = [];\n for (const paramIn of [\"query\", \"header\", \"path\", \"cookie\"] as ParameterObject[\"in\"][]) {\n const paramLocType: ts.TypeElement[] = [];\n let operationParameters = workingParameters.map((param) => ({\n original: param,\n resolved: \"$ref\" in param ? options.ctx.resolve<ParameterObject>(param.$ref) : param,\n }));\n\n // this is the only array type in the spec, so we have to one-off sort here\n if (options.ctx.alphabetize) {\n operationParameters.sort((a, b) => (a.resolved?.name ?? \"\").localeCompare(b.resolved?.name ?? \"\"));\n }\n if (options.ctx.excludeDeprecated) {\n operationParameters = operationParameters.filter(\n ({ resolved }) => !resolved?.deprecated && !resolved?.schema?.deprecated,\n );\n }\n for (const { original, resolved } of operationParameters) {\n if (resolved?.in !== paramIn) {\n continue;\n }\n let optional: ts.QuestionToken | undefined = undefined;\n if (paramIn !== \"path\" && !(resolved as ParameterObject).required) {\n optional = QUESTION_TOKEN;\n }\n const subType =\n \"$ref\" in original\n ? oapiRef(original.$ref, resolved)\n : transformParameterObject(resolved as ParameterObject, {\n ...options,\n path: createRef([options.path, \"parameters\", resolved.in, resolved.name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(resolved?.name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(resolved, property);\n paramLocType.push(property);\n }\n const allOptional = paramLocType.every((node) => !!node.questionToken);\n paramType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(paramIn),\n /* questionToken */ allOptional || !paramLocType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramLocType.length ? ts.factory.createTypeLiteralNode(paramLocType) : NEVER,\n ),\n );\n }\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"parameters\"),\n /* questionToken */ !paramType.length ? QUESTION_TOKEN : undefined,\n /* type */ paramType.length ? ts.factory.createTypeLiteralNode(paramType) : NEVER,\n ),\n );\n\n return type;\n}\n"],"names":[],"mappings":"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"}
|
|
348
|
-
|
|
349
|
-
diff --git a/dist/transform/path-item-object.cjs.map b/dist/transform/path-item-object.cjs.map
|
|
350
|
-
index d65077883eb30fa3a5575e583105433917074276..9a4dcbae888c713b85b86ed0c53b7c8d77b13bdb 100644
|
|
351
|
-
--- a/dist/transform/path-item-object.cjs.map
|
|
352
|
-
+++ b/dist/transform/path-item-object.cjs.map
|
|
353
|
-
@@ -1 +1 @@
|
|
354
|
-
-{"version":3,"file":"path-item-object.cjs","sources":["../../src/transform/path-item-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type {\n OperationObject,\n ParameterObject,\n PathItemObject,\n ReferenceObject,\n TransformNodeOptions,\n} from \"../types.js\";\nimport transformOperationObject, { injectOperationObject } from \"./operation-object.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\n\nexport type Method = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/**\n * Transform PathItem nodes (4.8.9)\n * @see https://spec.openapis.org/oas/v3.1.0#path-item-object\n */\nexport default function transformPathItemObject(pathItem: PathItemObject, options: TransformNodeOptions): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(\n ...transformParametersArray(pathItem.parameters ?? [], {\n ...options,\n path: createRef([options.path, \"parameters\"]),\n }),\n );\n\n // methods\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n const operationObject = pathItem[method];\n if (\n !operationObject ||\n (options.ctx.excludeDeprecated &&\n (\"$ref\" in operationObject ? options.ctx.resolve<OperationObject>(operationObject.$ref) : operationObject)\n ?.deprecated)\n ) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n continue;\n }\n\n // fold top-level PathItem parameters into method-level, with the latter overriding the former\n const keyedParameters: Record<string, ParameterObject | ReferenceObject> = {};\n if (!(\"$ref\" in operationObject)) {\n // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters\n for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) {\n // fix: #1798, use unique key\n const name =\n \"$ref\" in parameter\n ? `${options.ctx.resolve<ParameterObject>(parameter.$ref)?.in}-${options.ctx.resolve<ParameterObject>(parameter.$ref)?.name}`\n : `${parameter.in}-${parameter.name}`;\n if (name) {\n keyedParameters[name] = parameter;\n }\n }\n }\n\n let operationType: ts.TypeNode;\n if (\"$ref\" in operationObject) {\n operationType = oapiRef(operationObject.$ref);\n }\n // if operationId exists, move into an `operations` export and pass the reference in here\n else if (operationObject.operationId) {\n // workaround for issue caused by redocly ref parsing: https://github.com/openapi-ts/openapi-typescript/issues/1542\n const operationId = operationObject.operationId.replace(HASH_RE, \"/\");\n operationType = oapiRef(createRef([\"operations\", operationId]));\n injectOperationObject(\n operationId,\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n );\n } else {\n operationType = ts.factory.createTypeLiteralNode(\n transformOperationObject(\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n ),\n );\n }\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ undefined,\n /* type */ operationType,\n );\n addJSDocComment(operationObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nconst HASH_RE = /#/g;\n"],"names":["transformParametersArray","createRef","operationObject","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","NEVER","oapiRef","injectOperationObject","transformOperationObject","addJSDocComment"],"mappings":";;;;;;;;;;;;AAmBA,SAAwB,uBAAA,CAAwB,UAA0B,OAAA,EAA4C;AACpH,EAAA,MAAM,OAAyB,EAAC;AAGhC,EAAA,IAAA,CAAK,IAAA;AAAA,IACH,GAAGA,wCAAA,CAAyB,QAAA,CAAS,UAAA,IAAc,EAAC,EAAG;AAAA,MACrD,GAAG,OAAA;AAAA,MACH,MAAMC,eAAA,CAAU,CAAC,OAAA,CAAQ,IAAA,EAAM,YAAY,CAAC;AAAA,KAC7C;AAAA,GACH;AAGA,EAAA,KAAA,MAAW,MAAA,IAAU,CAAC,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAU,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA,EAAe;AACtG,IAAA,MAAMC,iBAAA,GAAkB,SAAS,MAAM,CAAA;AACvC,IAAA,IACE,CAACA,iBAAA,IACA,OAAA,CAAQ,GAAA,CAAI,sBACV,MAAA,IAAUA,iBAAA,GAAkB,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAyBA,iBAAA,CAAgB,IAAI,CAAA,GAAIA,oBACtF,UAAA,EACN;AACA,MAAA,IAAA,CAAK,IAAA;AAAA,QACHC,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,UACWC,iBAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,UAC/CC,qBAAgB,MAAM,CAAA;AAAA;AAAA,UACtBC,mBAAA;AAAA;AAAA,UACAC;AAAA;AACtB,OACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,kBAAqE,EAAC;AAC5E,IAAA,IAAI,EAAE,UAAUL,iBAAA,CAAA,EAAkB;AAEhC,MAAA,KAAA,MAAW,SAAA,IAAa,CAAC,GAAI,QAAA,CAAS,UAAA,IAAc,EAAC,EAAI,GAAIA,iBAAA,CAAgB,UAAA,IAAc,EAAG,CAAA,EAAG;AAE/F,QAAA,MAAM,IAAA,GACJ,MAAA,IAAU,SAAA,GACN,CAAA,EAAG,OAAA,CAAQ,IAAI,OAAA,CAAyB,SAAA,CAAU,IAAI,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,QAAQ,GAAA,CAAI,OAAA,CAAyB,SAAA,CAAU,IAAI,CAAA,EAAG,IAAI,CAAA,CAAA,GACzH,CAAA,EAAG,SAAA,CAAU,EAAE,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,CAAA;AACvC,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,eAAA,CAAgB,IAAI,CAAA,GAAI,SAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,UAAUA,iBAAA,EAAiB;AAC7B,MAAA,aAAA,GAAgBM,YAAA,CAAQN,kBAAgB,IAAI,CAAA;AAAA,IAC9C,CAAA,MAAA,IAESA,kBAAgB,WAAA,EAAa;AAEpC,MAAA,MAAM,WAAA,GAAcA,iBAAA,CAAgB,WAAA,CAAY,OAAA,CAAQ,SAAS,GAAG,CAAA;AACpE,MAAA,aAAA,GAAgBM,aAAQP,eAAA,CAAU,CAAC,YAAA,EAAc,WAAW,CAAC,CAAC,CAAA;AAC9D,MAAAQ,qCAAA;AAAA,QACE,WAAA;AAAA,QACA,EAAE,GAAGP,iBAAA,EAAiB,YAAY,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,EAAE;AAAA,QACjE,EAAE,GAAG,OAAA,EAAS,IAAA,EAAMD,eAAA,CAAU,CAAC,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAC,CAAA;AAAE,OACxD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,aAAA,GAAgBE,YAAG,OAAA,CAAQ,qBAAA;AAAA,QACzBO,uBAAA;AAAA,UACE,EAAE,GAAGR,iBAAA,EAAiB,YAAY,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,EAAE;AAAA,UACjE,EAAE,GAAG,OAAA,EAAS,IAAA,EAAMD,eAAA,CAAU,CAAC,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAC,CAAA;AAAE;AACxD,OACF;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAWE,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACNC,iBAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,qBAAgB,MAAM,CAAA;AAAA;AAAA,MACtB,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAAM,oBAAA,CAAgBT,mBAAiB,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EACpB;AAEA,EAAA,OAAOC,WAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA;AAC9C;AAEA,MAAM,OAAA,GAAU,IAAA;;;;"}
|
|
355
|
-
|
|
356
|
-
+{"version":3,"file":"path-item-object.cjs","sources":["../../src/transform/path-item-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type {\n OperationObject,\n ParameterObject,\n PathItemObject,\n ReferenceObject,\n TransformNodeOptions,\n} from \"../types.js\";\nimport transformOperationObject, { injectOperationObject } from \"./operation-object.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\n\nexport type Method = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/**\n * Transform PathItem nodes (4.8.9)\n * @see https://spec.openapis.org/oas/v3.1.0#path-item-object\n */\nexport default function transformPathItemObject(pathItem: PathItemObject, options: TransformNodeOptions): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(\n ...transformParametersArray(pathItem.parameters ?? [], {\n ...options,\n path: createRef([options.path, \"parameters\"]),\n }),\n );\n\n // methods\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n const operationObject = pathItem[method];\n if (\n !operationObject ||\n (options.ctx.excludeDeprecated &&\n (\"$ref\" in operationObject ? options.ctx.resolve<OperationObject>(operationObject.$ref) : operationObject)\n ?.deprecated)\n ) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n continue;\n }\n\n // fold top-level PathItem parameters into method-level, with the latter overriding the former\n const keyedParameters: Record<string, ParameterObject | ReferenceObject> = {};\n if (!(\"$ref\" in operationObject)) {\n // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters\n for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) {\n // fix: #1798, use unique key\n const name =\n \"$ref\" in parameter\n ? `${options.ctx.resolve<ParameterObject>(parameter.$ref)?.in}-${options.ctx.resolve<ParameterObject>(parameter.$ref)?.name}`\n : `${parameter.in}-${parameter.name}`;\n if (name) {\n keyedParameters[name] = parameter;\n }\n }\n }\n\n let operationType: ts.TypeNode;\n if (\"$ref\" in operationObject) {\n operationType = oapiRef(operationObject.$ref);\n }\n // if operationId exists, move into an `operations` export and pass the reference in here\n else if (operationObject.operationId) {\n // workaround for issue caused by redocly ref parsing: https://github.com/openapi-ts/openapi-typescript/issues/1542\n const operationId = operationObject.operationId.replace(HASH_RE, \"/\");\n operationType = oapiRef(createRef([\"operations\", operationId]));\n injectOperationObject(\n operationId,\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n );\n } else {\n operationType = ts.factory.createTypeLiteralNode(\n transformOperationObject(\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n ),\n );\n }\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ undefined,\n /* type */ operationType,\n );\n addJSDocComment(operationObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nconst HASH_RE = /#/g;\n"],"names":["transformParametersArray","createRef","operationObject","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","NEVER","oapiRef","injectOperationObject","transformOperationObject","addJSDocComment"],"mappings":"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"}
|
|
357
|
-
|
|
358
|
-
diff --git a/dist/transform/path-item-object.mjs.map b/dist/transform/path-item-object.mjs.map
|
|
359
|
-
index 306a76c2d81445b95645cafa0f73b9f87ea62438..b67e0646452642c87e2e934eb3d9b5836199bf0d 100644
|
|
360
|
-
--- a/dist/transform/path-item-object.mjs.map
|
|
361
|
-
+++ b/dist/transform/path-item-object.mjs.map
|
|
362
|
-
@@ -1 +1 @@
|
|
363
|
-
-{"version":3,"file":"path-item-object.mjs","sources":["../../src/transform/path-item-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type {\n OperationObject,\n ParameterObject,\n PathItemObject,\n ReferenceObject,\n TransformNodeOptions,\n} from \"../types.js\";\nimport transformOperationObject, { injectOperationObject } from \"./operation-object.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\n\nexport type Method = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/**\n * Transform PathItem nodes (4.8.9)\n * @see https://spec.openapis.org/oas/v3.1.0#path-item-object\n */\nexport default function transformPathItemObject(pathItem: PathItemObject, options: TransformNodeOptions): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(\n ...transformParametersArray(pathItem.parameters ?? [], {\n ...options,\n path: createRef([options.path, \"parameters\"]),\n }),\n );\n\n // methods\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n const operationObject = pathItem[method];\n if (\n !operationObject ||\n (options.ctx.excludeDeprecated &&\n (\"$ref\" in operationObject ? options.ctx.resolve<OperationObject>(operationObject.$ref) : operationObject)\n ?.deprecated)\n ) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n continue;\n }\n\n // fold top-level PathItem parameters into method-level, with the latter overriding the former\n const keyedParameters: Record<string, ParameterObject | ReferenceObject> = {};\n if (!(\"$ref\" in operationObject)) {\n // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters\n for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) {\n // fix: #1798, use unique key\n const name =\n \"$ref\" in parameter\n ? `${options.ctx.resolve<ParameterObject>(parameter.$ref)?.in}-${options.ctx.resolve<ParameterObject>(parameter.$ref)?.name}`\n : `${parameter.in}-${parameter.name}`;\n if (name) {\n keyedParameters[name] = parameter;\n }\n }\n }\n\n let operationType: ts.TypeNode;\n if (\"$ref\" in operationObject) {\n operationType = oapiRef(operationObject.$ref);\n }\n // if operationId exists, move into an `operations` export and pass the reference in here\n else if (operationObject.operationId) {\n // workaround for issue caused by redocly ref parsing: https://github.com/openapi-ts/openapi-typescript/issues/1542\n const operationId = operationObject.operationId.replace(HASH_RE, \"/\");\n operationType = oapiRef(createRef([\"operations\", operationId]));\n injectOperationObject(\n operationId,\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n );\n } else {\n operationType = ts.factory.createTypeLiteralNode(\n transformOperationObject(\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n ),\n );\n }\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ undefined,\n /* type */ operationType,\n );\n addJSDocComment(operationObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nconst HASH_RE = /#/g;\n"],"names":[],"mappings":"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"}
|
|
364
|
-
|
|
365
|
-
+{"version":3,"file":"path-item-object.mjs","sources":["../../src/transform/path-item-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type {\n OperationObject,\n ParameterObject,\n PathItemObject,\n ReferenceObject,\n TransformNodeOptions,\n} from \"../types.js\";\nimport transformOperationObject, { injectOperationObject } from \"./operation-object.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\n\nexport type Method = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/**\n * Transform PathItem nodes (4.8.9)\n * @see https://spec.openapis.org/oas/v3.1.0#path-item-object\n */\nexport default function transformPathItemObject(pathItem: PathItemObject, options: TransformNodeOptions): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(\n ...transformParametersArray(pathItem.parameters ?? [], {\n ...options,\n path: createRef([options.path, \"parameters\"]),\n }),\n );\n\n // methods\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n const operationObject = pathItem[method];\n if (\n !operationObject ||\n (options.ctx.excludeDeprecated &&\n (\"$ref\" in operationObject ? options.ctx.resolve<OperationObject>(operationObject.$ref) : operationObject)\n ?.deprecated)\n ) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n continue;\n }\n\n // fold top-level PathItem parameters into method-level, with the latter overriding the former\n const keyedParameters: Record<string, ParameterObject | ReferenceObject> = {};\n if (!(\"$ref\" in operationObject)) {\n // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters\n for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) {\n // fix: #1798, use unique key\n const name =\n \"$ref\" in parameter\n ? `${options.ctx.resolve<ParameterObject>(parameter.$ref)?.in}-${options.ctx.resolve<ParameterObject>(parameter.$ref)?.name}`\n : `${parameter.in}-${parameter.name}`;\n if (name) {\n keyedParameters[name] = parameter;\n }\n }\n }\n\n let operationType: ts.TypeNode;\n if (\"$ref\" in operationObject) {\n operationType = oapiRef(operationObject.$ref);\n }\n // if operationId exists, move into an `operations` export and pass the reference in here\n else if (operationObject.operationId) {\n // workaround for issue caused by redocly ref parsing: https://github.com/openapi-ts/openapi-typescript/issues/1542\n const operationId = operationObject.operationId.replace(HASH_RE, \"/\");\n operationType = oapiRef(createRef([\"operations\", operationId]));\n injectOperationObject(\n operationId,\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n );\n } else {\n operationType = ts.factory.createTypeLiteralNode(\n transformOperationObject(\n { ...operationObject, parameters: Object.values(keyedParameters) },\n { ...options, path: createRef([options.path, method]) },\n ),\n );\n }\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(method),\n /* questionToken */ undefined,\n /* type */ operationType,\n );\n addJSDocComment(operationObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nconst HASH_RE = /#/g;\n"],"names":[],"mappings":"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"}
|
|
366
|
-
|
|
367
|
-
diff --git a/dist/transform/paths-enum.cjs.map b/dist/transform/paths-enum.cjs.map
|
|
368
|
-
index ec930109780243ffd00b0ec5fee567bb9f618d47..5b41c5bb911301c37b7aafa5f32af27cf215cb52 100644
|
|
369
|
-
--- a/dist/transform/paths-enum.cjs.map
|
|
370
|
-
+++ b/dist/transform/paths-enum.cjs.map
|
|
371
|
-
@@ -1 +1 @@
|
|
372
|
-
-{"version":3,"file":"paths-enum.cjs","sources":["../../src/transform/paths-enum.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { tsEnum } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { PathsObject } from \"../types.js\";\n\nexport default function makeApiPathsEnum(pathsObject: PathsObject): ts.EnumDeclaration {\n const enumKeys = [];\n const enumMetaData = [];\n\n for (const [url, pathItemObject] of getEntries(pathsObject)) {\n for (const [method, operation] of Object.entries(pathItemObject)) {\n if (![\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"].includes(method)) {\n continue;\n }\n\n // Generate a name from the operation ID\n let pathName: string;\n if (operation.operationId) {\n pathName = operation.operationId;\n } else {\n // If the operation ID is not present, construct a name from the method and path\n pathName = (method + url)\n .split(\"/\")\n .map((part) => {\n const capitalised = part.charAt(0).toUpperCase() + part.slice(1);\n\n // Remove any characters not allowed as enum keys, and attempt to remove\n // named parameters.\n return capitalised.replace(/{.*}|:.*|[^a-zA-Z\\d_]+/, \"\");\n })\n .join(\"\");\n }\n enumKeys.push(url);\n enumMetaData.push({\n name: pathName,\n });\n }\n }\n\n return tsEnum(\"ApiPaths\", enumKeys, enumMetaData, {\n export: true,\n });\n}\n"],"names":["getEntries","tsEnum"],"mappings":";;;;;AAKA,SAAwB,iBAAiB,WAAA,EAA8C;AACrF,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,MAAM,eAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,cAAc,CAAA,IAAKA,gBAAA,CAAW,WAAW,CAAA,EAAG;AAC3D,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,EAAG;AAChE,MAAA,IAAI,CAAC,CAAC,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3F,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,UAAU,WAAA,EAAa;AACzB,QAAA,QAAA,GAAW,SAAA,CAAU,WAAA;AAAA,MACvB,CAAA,MAAO;AAEL,QAAA,QAAA,GAAA,CAAY,SAAS,GAAA,EAClB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,UAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAI/D,UAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,wBAAA,EAA0B,EAAE,CAAA;AAAA,QACzD,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAAA,MACZ;AACA,MAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAOC,SAAA,CAAO,UAAA,EAAY,QAAA,EAAU,YAAA,EAAc;AAAA,IAChD,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;;;;"}
|
|
373
|
-
|
|
374
|
-
+{"version":3,"file":"paths-enum.cjs","sources":["../../src/transform/paths-enum.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { tsEnum } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { PathsObject } from \"../types.js\";\n\nexport default function makeApiPathsEnum(pathsObject: PathsObject): ts.EnumDeclaration {\n const enumKeys = [];\n const enumMetaData = [];\n\n for (const [url, pathItemObject] of getEntries(pathsObject)) {\n for (const [method, operation] of Object.entries(pathItemObject)) {\n if (![\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"].includes(method)) {\n continue;\n }\n\n // Generate a name from the operation ID\n let pathName: string;\n if (operation.operationId) {\n pathName = operation.operationId;\n } else {\n // If the operation ID is not present, construct a name from the method and path\n pathName = (method + url)\n .split(\"/\")\n .map((part) => {\n const capitalised = part.charAt(0).toUpperCase() + part.slice(1);\n\n // Remove any characters not allowed as enum keys, and attempt to remove\n // named parameters.\n return capitalised.replace(/{.*}|:.*|[^a-zA-Z\\d_]+/, \"\");\n })\n .join(\"\");\n }\n enumKeys.push(url);\n enumMetaData.push({\n name: pathName,\n });\n }\n }\n\n return tsEnum(\"ApiPaths\", enumKeys, enumMetaData, {\n export: true,\n });\n}\n"],"names":["getEntries","tsEnum"],"mappings":";;;;;AAKA,SAAwB,iBAAiB,WAA8C,EAAA;AACrF,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,MAAM,eAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,cAAc,CAAK,IAAAA,gBAAA,CAAW,WAAW,CAAG,EAAA;AAC3D,IAAA,KAAA,MAAW,CAAC,MAAQ,EAAA,SAAS,KAAK,MAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA;AAChE,MAAA,IAAI,CAAC,CAAC,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,QAAA,EAAU,SAAW,EAAA,MAAA,EAAQ,OAAS,EAAA,OAAO,CAAE,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AAC3F,QAAA;AAAA;AAIF,MAAI,IAAA,QAAA;AACJ,MAAA,IAAI,UAAU,WAAa,EAAA;AACzB,QAAA,QAAA,GAAW,SAAU,CAAA,WAAA;AAAA,OAChB,MAAA;AAEL,QAAA,QAAA,GAAA,CAAY,SAAS,GAClB,EAAA,KAAA,CAAM,GAAG,CACT,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AACb,UAAM,MAAA,WAAA,GAAc,KAAK,MAAO,CAAA,CAAC,EAAE,WAAY,EAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AAI/D,UAAO,OAAA,WAAA,CAAY,OAAQ,CAAA,wBAAA,EAA0B,EAAE,CAAA;AAAA,SACxD,CACA,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA;AAEZ,MAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,MAAA,YAAA,CAAa,IAAK,CAAA;AAAA,QAChB,IAAM,EAAA;AAAA,OACP,CAAA;AAAA;AACH;AAGF,EAAO,OAAAC,SAAA,CAAO,UAAY,EAAA,QAAA,EAAU,YAAc,EAAA;AAAA,IAChD,MAAQ,EAAA;AAAA,GACT,CAAA;AACH;;;;"}
|
|
375
|
-
|
|
376
|
-
diff --git a/dist/transform/paths-enum.mjs.map b/dist/transform/paths-enum.mjs.map
|
|
377
|
-
index ef202fe2554d259d65305aaac7ba04303cc0ee29..95e925f6ea948ed1b175dc99d4392f0f6a63cb11 100644
|
|
378
|
-
--- a/dist/transform/paths-enum.mjs.map
|
|
379
|
-
+++ b/dist/transform/paths-enum.mjs.map
|
|
380
|
-
@@ -1 +1 @@
|
|
381
|
-
-{"version":3,"file":"paths-enum.mjs","sources":["../../src/transform/paths-enum.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { tsEnum } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { PathsObject } from \"../types.js\";\n\nexport default function makeApiPathsEnum(pathsObject: PathsObject): ts.EnumDeclaration {\n const enumKeys = [];\n const enumMetaData = [];\n\n for (const [url, pathItemObject] of getEntries(pathsObject)) {\n for (const [method, operation] of Object.entries(pathItemObject)) {\n if (![\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"].includes(method)) {\n continue;\n }\n\n // Generate a name from the operation ID\n let pathName: string;\n if (operation.operationId) {\n pathName = operation.operationId;\n } else {\n // If the operation ID is not present, construct a name from the method and path\n pathName = (method + url)\n .split(\"/\")\n .map((part) => {\n const capitalised = part.charAt(0).toUpperCase() + part.slice(1);\n\n // Remove any characters not allowed as enum keys, and attempt to remove\n // named parameters.\n return capitalised.replace(/{.*}|:.*|[^a-zA-Z\\d_]+/, \"\");\n })\n .join(\"\");\n }\n enumKeys.push(url);\n enumMetaData.push({\n name: pathName,\n });\n }\n }\n\n return tsEnum(\"ApiPaths\", enumKeys, enumMetaData, {\n export: true,\n });\n}\n"],"names":[],"mappings":";;;AAKA,SAAwB,iBAAiB,WAAA,EAA8C;AACrF,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,MAAM,eAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,cAAc,CAAA,IAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3D,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,EAAG;AAChE,MAAA,IAAI,CAAC,CAAC,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3F,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,UAAU,WAAA,EAAa;AACzB,QAAA,QAAA,GAAW,SAAA,CAAU,WAAA;AAAA,MACvB,CAAA,MAAO;AAEL,QAAA,QAAA,GAAA,CAAY,SAAS,GAAA,EAClB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,UAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAI/D,UAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,wBAAA,EAA0B,EAAE,CAAA;AAAA,QACzD,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAAA,MACZ;AACA,MAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,UAAA,EAAY,QAAA,EAAU,YAAA,EAAc;AAAA,IAChD,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;;;;"}
|
|
382
|
-
|
|
383
|
-
+{"version":3,"file":"paths-enum.mjs","sources":["../../src/transform/paths-enum.ts"],"sourcesContent":["import type ts from \"typescript\";\nimport { tsEnum } from \"../lib/ts.js\";\nimport { getEntries } from \"../lib/utils.js\";\nimport type { PathsObject } from \"../types.js\";\n\nexport default function makeApiPathsEnum(pathsObject: PathsObject): ts.EnumDeclaration {\n const enumKeys = [];\n const enumMetaData = [];\n\n for (const [url, pathItemObject] of getEntries(pathsObject)) {\n for (const [method, operation] of Object.entries(pathItemObject)) {\n if (![\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"].includes(method)) {\n continue;\n }\n\n // Generate a name from the operation ID\n let pathName: string;\n if (operation.operationId) {\n pathName = operation.operationId;\n } else {\n // If the operation ID is not present, construct a name from the method and path\n pathName = (method + url)\n .split(\"/\")\n .map((part) => {\n const capitalised = part.charAt(0).toUpperCase() + part.slice(1);\n\n // Remove any characters not allowed as enum keys, and attempt to remove\n // named parameters.\n return capitalised.replace(/{.*}|:.*|[^a-zA-Z\\d_]+/, \"\");\n })\n .join(\"\");\n }\n enumKeys.push(url);\n enumMetaData.push({\n name: pathName,\n });\n }\n }\n\n return tsEnum(\"ApiPaths\", enumKeys, enumMetaData, {\n export: true,\n });\n}\n"],"names":[],"mappings":";;;AAKA,SAAwB,iBAAiB,WAA8C,EAAA;AACrF,EAAA,MAAM,WAAW,EAAC;AAClB,EAAA,MAAM,eAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,cAAc,CAAK,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC3D,IAAA,KAAA,MAAW,CAAC,MAAQ,EAAA,SAAS,KAAK,MAAO,CAAA,OAAA,CAAQ,cAAc,CAAG,EAAA;AAChE,MAAA,IAAI,CAAC,CAAC,KAAO,EAAA,KAAA,EAAO,MAAQ,EAAA,QAAA,EAAU,SAAW,EAAA,MAAA,EAAQ,OAAS,EAAA,OAAO,CAAE,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AAC3F,QAAA;AAAA;AAIF,MAAI,IAAA,QAAA;AACJ,MAAA,IAAI,UAAU,WAAa,EAAA;AACzB,QAAA,QAAA,GAAW,SAAU,CAAA,WAAA;AAAA,OAChB,MAAA;AAEL,QAAA,QAAA,GAAA,CAAY,SAAS,GAClB,EAAA,KAAA,CAAM,GAAG,CACT,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AACb,UAAM,MAAA,WAAA,GAAc,KAAK,MAAO,CAAA,CAAC,EAAE,WAAY,EAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AAI/D,UAAO,OAAA,WAAA,CAAY,OAAQ,CAAA,wBAAA,EAA0B,EAAE,CAAA;AAAA,SACxD,CACA,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA;AAEZ,MAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,MAAA,YAAA,CAAa,IAAK,CAAA;AAAA,QAChB,IAAM,EAAA;AAAA,OACP,CAAA;AAAA;AACH;AAGF,EAAO,OAAA,MAAA,CAAO,UAAY,EAAA,QAAA,EAAU,YAAc,EAAA;AAAA,IAChD,MAAQ,EAAA;AAAA,GACT,CAAA;AACH;;;;"}
|
|
384
|
-
|
|
385
|
-
diff --git a/dist/transform/paths-object.cjs.map b/dist/transform/paths-object.cjs.map
|
|
386
|
-
index fcb59c47bf3641e6db08ee6e6e1dbecca069416a..565e8e6de6dc85ce9a9ef4b2ca21cfc898627ad8 100644
|
|
387
|
-
--- a/dist/transform/paths-object.cjs.map
|
|
388
|
-
+++ b/dist/transform/paths-object.cjs.map
|
|
389
|
-
@@ -1 +1 @@
|
|
390
|
-
-{"version":3,"file":"paths-object.cjs","sources":["../../src/transform/paths-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts from \"typescript\";\nimport { addJSDocComment, oapiRef, stringToAST, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type {\n GlobalContext,\n OperationObject,\n ParameterObject,\n PathItemObject,\n PathsObject,\n ReferenceObject,\n} from \"../types.js\";\nimport transformPathItemObject, { type Method } from \"./path-item-object.js\";\n\nconst PATH_PARAM_RE = /\\{[^}]+\\}/g;\n\n/**\n * Transform the PathsObject node (4.8.8)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformPathsObject(pathsObject: PathsObject, ctx: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [url, pathItemObject] of getEntries(pathsObject, ctx)) {\n if (!pathItemObject || typeof pathItemObject !== \"object\") {\n continue;\n }\n\n const pathT = performance.now();\n\n // handle $ref\n if (\"$ref\" in pathItemObject) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ oapiRef(pathItemObject.$ref),\n );\n addJSDocComment(pathItemObject, property);\n type.push(property);\n } else {\n const pathItemType = transformPathItemObject(pathItemObject, {\n path: createRef([\"paths\", url]),\n ctx,\n });\n\n // pathParamsAsTypes\n if (ctx.pathParamsAsTypes && url.includes(\"{\")) {\n const pathParams = extractPathParams(pathItemObject, ctx);\n const matches = url.match(PATH_PARAM_RE);\n let rawPath = `\\`${url}\\``;\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n const param = pathParams[paramName];\n switch (param?.schema?.type) {\n case \"number\":\n case \"integer\":\n rawPath = rawPath.replace(match, \"${number}\");\n break;\n case \"boolean\":\n rawPath = rawPath.replace(match, \"${boolean}\");\n break;\n default:\n rawPath = rawPath.replace(match, \"${string}\");\n break;\n }\n }\n // note: creating a string template literal’s AST manually is hard!\n // just pass an arbitrary string to TS\n const pathType = (stringToAST(rawPath)[0] as any)?.expression;\n if (pathType) {\n type.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ \"path\",\n /* questionToken */ undefined,\n /* type */ pathType,\n /* initializer */ undefined,\n ),\n ],\n /* type */ pathItemType,\n ),\n );\n continue;\n }\n }\n }\n\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ pathItemType,\n ),\n );\n\n debug(`Transformed path \"${url}\"`, \"ts\", performance.now() - pathT);\n }\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nfunction extractPathParams(pathItemObject: PathItemObject, ctx: GlobalContext) {\n const params: Record<string, ParameterObject> = {};\n for (const p of pathItemObject.parameters ?? []) {\n const resolved = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolved && resolved.in === \"path\") {\n params[resolved.name] = resolved;\n }\n }\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n if (!(method in pathItemObject)) {\n continue;\n }\n const resolvedMethod = (pathItemObject[method] as ReferenceObject).$ref\n ? ctx.resolve<OperationObject>((pathItemObject[method] as ReferenceObject).$ref)\n : (pathItemObject[method] as OperationObject);\n if (resolvedMethod?.parameters) {\n for (const p of resolvedMethod.parameters) {\n const resolvedParam = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolvedParam && resolvedParam.in === \"path\") {\n params[resolvedParam.name] = resolvedParam;\n }\n }\n }\n }\n return params;\n}\n"],"names":["pathItemObject","getEntries","performance","ts","tsModifiers","tsPropertyIndex","oapiRef","addJSDocComment","transformPathItemObject","createRef","stringToAST","debug"],"mappings":"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"}
|
|
391
|
-
|
|
392
|
-
+{"version":3,"file":"paths-object.cjs","sources":["../../src/transform/paths-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts from \"typescript\";\nimport { addJSDocComment, oapiRef, stringToAST, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type {\n GlobalContext,\n OperationObject,\n ParameterObject,\n PathItemObject,\n PathsObject,\n ReferenceObject,\n} from \"../types.js\";\nimport transformPathItemObject, { type Method } from \"./path-item-object.js\";\n\nconst PATH_PARAM_RE = /\\{[^}]+\\}/g;\n\n/**\n * Transform the PathsObject node (4.8.8)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformPathsObject(pathsObject: PathsObject, ctx: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [url, pathItemObject] of getEntries(pathsObject, ctx)) {\n if (!pathItemObject || typeof pathItemObject !== \"object\") {\n continue;\n }\n\n const pathT = performance.now();\n\n // handle $ref\n if (\"$ref\" in pathItemObject) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ oapiRef(pathItemObject.$ref),\n );\n addJSDocComment(pathItemObject, property);\n type.push(property);\n } else {\n const pathItemType = transformPathItemObject(pathItemObject, {\n path: createRef([\"paths\", url]),\n ctx,\n });\n\n // pathParamsAsTypes\n if (ctx.pathParamsAsTypes && url.includes(\"{\")) {\n const pathParams = extractPathParams(pathItemObject, ctx);\n const matches = url.match(PATH_PARAM_RE);\n let rawPath = `\\`${url}\\``;\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n const param = pathParams[paramName];\n switch (param?.schema?.type) {\n case \"number\":\n case \"integer\":\n rawPath = rawPath.replace(match, \"${number}\");\n break;\n case \"boolean\":\n rawPath = rawPath.replace(match, \"${boolean}\");\n break;\n default:\n rawPath = rawPath.replace(match, \"${string}\");\n break;\n }\n }\n // note: creating a string template literal’s AST manually is hard!\n // just pass an arbitrary string to TS\n const pathType = (stringToAST(rawPath)[0] as any)?.expression;\n if (pathType) {\n type.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ \"path\",\n /* questionToken */ undefined,\n /* type */ pathType,\n /* initializer */ undefined,\n ),\n ],\n /* type */ pathItemType,\n ),\n );\n continue;\n }\n }\n }\n\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ pathItemType,\n ),\n );\n\n debug(`Transformed path \"${url}\"`, \"ts\", performance.now() - pathT);\n }\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nfunction extractPathParams(pathItemObject: PathItemObject, ctx: GlobalContext) {\n const params: Record<string, ParameterObject> = {};\n for (const p of pathItemObject.parameters ?? []) {\n const resolved = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolved && resolved.in === \"path\") {\n params[resolved.name] = resolved;\n }\n }\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n if (!(method in pathItemObject)) {\n continue;\n }\n const resolvedMethod = (pathItemObject[method] as ReferenceObject).$ref\n ? ctx.resolve<OperationObject>((pathItemObject[method] as ReferenceObject).$ref)\n : (pathItemObject[method] as OperationObject);\n if (resolvedMethod?.parameters) {\n for (const p of resolvedMethod.parameters) {\n const resolvedParam = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolvedParam && resolvedParam.in === \"path\") {\n params[resolvedParam.name] = resolvedParam;\n }\n }\n }\n }\n return params;\n}\n"],"names":["pathItemObject","getEntries","performance","ts","tsModifiers","tsPropertyIndex","oapiRef","addJSDocComment","transformPathItemObject","createRef","stringToAST","debug"],"mappings":"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"}
|
|
393
|
-
|
|
394
|
-
diff --git a/dist/transform/paths-object.mjs.map b/dist/transform/paths-object.mjs.map
|
|
395
|
-
index 15e26683569271a191f182804e3409962118efc4..ecb7f719785e2722044ee8c395a18d4adf595e57 100644
|
|
396
|
-
--- a/dist/transform/paths-object.mjs.map
|
|
397
|
-
+++ b/dist/transform/paths-object.mjs.map
|
|
398
|
-
@@ -1 +1 @@
|
|
399
|
-
-{"version":3,"file":"paths-object.mjs","sources":["../../src/transform/paths-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts from \"typescript\";\nimport { addJSDocComment, oapiRef, stringToAST, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type {\n GlobalContext,\n OperationObject,\n ParameterObject,\n PathItemObject,\n PathsObject,\n ReferenceObject,\n} from \"../types.js\";\nimport transformPathItemObject, { type Method } from \"./path-item-object.js\";\n\nconst PATH_PARAM_RE = /\\{[^}]+\\}/g;\n\n/**\n * Transform the PathsObject node (4.8.8)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformPathsObject(pathsObject: PathsObject, ctx: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [url, pathItemObject] of getEntries(pathsObject, ctx)) {\n if (!pathItemObject || typeof pathItemObject !== \"object\") {\n continue;\n }\n\n const pathT = performance.now();\n\n // handle $ref\n if (\"$ref\" in pathItemObject) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ oapiRef(pathItemObject.$ref),\n );\n addJSDocComment(pathItemObject, property);\n type.push(property);\n } else {\n const pathItemType = transformPathItemObject(pathItemObject, {\n path: createRef([\"paths\", url]),\n ctx,\n });\n\n // pathParamsAsTypes\n if (ctx.pathParamsAsTypes && url.includes(\"{\")) {\n const pathParams = extractPathParams(pathItemObject, ctx);\n const matches = url.match(PATH_PARAM_RE);\n let rawPath = `\\`${url}\\``;\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n const param = pathParams[paramName];\n switch (param?.schema?.type) {\n case \"number\":\n case \"integer\":\n rawPath = rawPath.replace(match, \"${number}\");\n break;\n case \"boolean\":\n rawPath = rawPath.replace(match, \"${boolean}\");\n break;\n default:\n rawPath = rawPath.replace(match, \"${string}\");\n break;\n }\n }\n // note: creating a string template literal’s AST manually is hard!\n // just pass an arbitrary string to TS\n const pathType = (stringToAST(rawPath)[0] as any)?.expression;\n if (pathType) {\n type.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ \"path\",\n /* questionToken */ undefined,\n /* type */ pathType,\n /* initializer */ undefined,\n ),\n ],\n /* type */ pathItemType,\n ),\n );\n continue;\n }\n }\n }\n\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ pathItemType,\n ),\n );\n\n debug(`Transformed path \"${url}\"`, \"ts\", performance.now() - pathT);\n }\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nfunction extractPathParams(pathItemObject: PathItemObject, ctx: GlobalContext) {\n const params: Record<string, ParameterObject> = {};\n for (const p of pathItemObject.parameters ?? []) {\n const resolved = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolved && resolved.in === \"path\") {\n params[resolved.name] = resolved;\n }\n }\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n if (!(method in pathItemObject)) {\n continue;\n }\n const resolvedMethod = (pathItemObject[method] as ReferenceObject).$ref\n ? ctx.resolve<OperationObject>((pathItemObject[method] as ReferenceObject).$ref)\n : (pathItemObject[method] as OperationObject);\n if (resolvedMethod?.parameters) {\n for (const p of resolvedMethod.parameters) {\n const resolvedParam = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolvedParam && resolvedParam.in === \"path\") {\n params[resolvedParam.name] = resolvedParam;\n }\n }\n }\n }\n return params;\n}\n"],"names":[],"mappings":"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"}
|
|
400
|
-
|
|
401
|
-
+{"version":3,"file":"paths-object.mjs","sources":["../../src/transform/paths-object.ts"],"sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport ts from \"typescript\";\nimport { addJSDocComment, oapiRef, stringToAST, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, debug, getEntries } from \"../lib/utils.js\";\nimport type {\n GlobalContext,\n OperationObject,\n ParameterObject,\n PathItemObject,\n PathsObject,\n ReferenceObject,\n} from \"../types.js\";\nimport transformPathItemObject, { type Method } from \"./path-item-object.js\";\n\nconst PATH_PARAM_RE = /\\{[^}]+\\}/g;\n\n/**\n * Transform the PathsObject node (4.8.8)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformPathsObject(pathsObject: PathsObject, ctx: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [url, pathItemObject] of getEntries(pathsObject, ctx)) {\n if (!pathItemObject || typeof pathItemObject !== \"object\") {\n continue;\n }\n\n const pathT = performance.now();\n\n // handle $ref\n if (\"$ref\" in pathItemObject) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ oapiRef(pathItemObject.$ref),\n );\n addJSDocComment(pathItemObject, property);\n type.push(property);\n } else {\n const pathItemType = transformPathItemObject(pathItemObject, {\n path: createRef([\"paths\", url]),\n ctx,\n });\n\n // pathParamsAsTypes\n if (ctx.pathParamsAsTypes && url.includes(\"{\")) {\n const pathParams = extractPathParams(pathItemObject, ctx);\n const matches = url.match(PATH_PARAM_RE);\n let rawPath = `\\`${url}\\``;\n if (matches) {\n for (const match of matches) {\n const paramName = match.slice(1, -1);\n const param = pathParams[paramName];\n switch (param?.schema?.type) {\n case \"number\":\n case \"integer\":\n rawPath = rawPath.replace(match, \"${number}\");\n break;\n case \"boolean\":\n rawPath = rawPath.replace(match, \"${boolean}\");\n break;\n default:\n rawPath = rawPath.replace(match, \"${string}\");\n break;\n }\n }\n // note: creating a string template literal’s AST manually is hard!\n // just pass an arbitrary string to TS\n const pathType = (stringToAST(rawPath)[0] as any)?.expression;\n if (pathType) {\n type.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ \"path\",\n /* questionToken */ undefined,\n /* type */ pathType,\n /* initializer */ undefined,\n ),\n ],\n /* type */ pathItemType,\n ),\n );\n continue;\n }\n }\n }\n\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: ctx.immutable }),\n /* name */ tsPropertyIndex(url),\n /* questionToken */ undefined,\n /* type */ pathItemType,\n ),\n );\n\n debug(`Transformed path \"${url}\"`, \"ts\", performance.now() - pathT);\n }\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n\nfunction extractPathParams(pathItemObject: PathItemObject, ctx: GlobalContext) {\n const params: Record<string, ParameterObject> = {};\n for (const p of pathItemObject.parameters ?? []) {\n const resolved = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolved && resolved.in === \"path\") {\n params[resolved.name] = resolved;\n }\n }\n for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n if (!(method in pathItemObject)) {\n continue;\n }\n const resolvedMethod = (pathItemObject[method] as ReferenceObject).$ref\n ? ctx.resolve<OperationObject>((pathItemObject[method] as ReferenceObject).$ref)\n : (pathItemObject[method] as OperationObject);\n if (resolvedMethod?.parameters) {\n for (const p of resolvedMethod.parameters) {\n const resolvedParam = \"$ref\" in p && p.$ref ? ctx.resolve<ParameterObject>(p.$ref) : (p as ParameterObject);\n if (resolvedParam && resolvedParam.in === \"path\") {\n params[resolvedParam.name] = resolvedParam;\n }\n }\n }\n }\n return params;\n}\n"],"names":[],"mappings":"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"}
|
|
402
|
-
|
|
403
|
-
diff --git a/dist/transform/request-body-object.cjs b/dist/transform/request-body-object.cjs
|
|
404
|
-
index 16034a1aa6cd15b4f95d2ac76c9282564db42472..75bdd3c9873ca9843c32786afa31dc952d3ba8b4 100644
|
|
405
|
-
--- a/dist/transform/request-body-object.cjs
|
|
406
|
-
+++ b/dist/transform/request-body-object.cjs
|
|
407
|
-
@@ -13,7 +13,7 @@ const ts__default = /*#__PURE__*/_interopDefaultCompat(ts);
|
|
408
|
-
function transformRequestBodyObject(requestBodyObject, options) {
|
|
409
|
-
const type = [];
|
|
410
|
-
for (const [contentType, mediaTypeObject$1] of utils.getEntries(requestBodyObject.content ?? {}, options.ctx)) {
|
|
411
|
-
- const nextPath = utils.createRef([options.path, contentType]);
|
|
412
|
-
+ const nextPath = utils.createRef([options.path, "content", contentType]);
|
|
413
|
-
const mediaType = "$ref" in mediaTypeObject$1 ? schemaObject.default(mediaTypeObject$1, {
|
|
414
|
-
...options,
|
|
415
|
-
path: nextPath
|
|
416
|
-
diff --git a/dist/transform/request-body-object.cjs.map b/dist/transform/request-body-object.cjs.map
|
|
417
|
-
index 3ccd074a54c8b495d480558c1f547e3475f1b3a3..fcf6ef2df41aa90440b34aa4259a269d0f3b3d7d 100644
|
|
418
|
-
--- a/dist/transform/request-body-object.cjs.map
|
|
419
|
-
+++ b/dist/transform/request-body-object.cjs.map
|
|
420
|
-
@@ -1 +1 @@
|
|
421
|
-
-{"version":3,"file":"request-body-object.cjs","sources":["../../src/transform/request-body-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform RequestBodyObject nodes (4.8.13)\n * @see https://spec.openapis.org/oas/v3.1.0#request-body-object\n */\nexport default function transformRequestBodyObject(\n requestBodyObject: RequestBodyObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {\n const nextPath = createRef([options.path, contentType]);\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode([\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(\n type.length\n ? type\n : // add `\"*/*\": never` if no media types are defined\n [\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"*/*\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n ],\n ),\n ),\n ]);\n}\n"],"names":["mediaTypeObject","getEntries","createRef","transformSchemaObject","transformMediaTypeObject","ts","tsModifiers","tsPropertyIndex","addJSDocComment","QUESTION_TOKEN","NEVER"],"mappings":";;;;;;;;;;;;AAWA,SAAwB,0BAAA,CACtB,mBACA,OAAA,EACa;AACb,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,CAAC,WAAA,EAAaA,iBAAe,CAAA,IAAKC,gBAAA,CAAW,iBAAA,CAAkB,OAAA,IAAW,EAAC,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrG,IAAA,MAAM,WAAWC,eAAA,CAAU,CAAC,OAAA,CAAQ,IAAA,EAAM,WAAW,CAAC,CAAA;AACtD,IAAA,MAAM,SAAA,GACJ,MAAA,IAAUF,iBAAA,GACNG,oBAAA,CAAsBH,iBAAA,EAAiB;AAAA,MACrC,GAAG,OAAA;AAAA,MACH,IAAA,EAAM;AAAA,KACP,CAAA,GACDI,eAAA,CAAyBJ,iBAAA,EAAiB;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,IAAA,EAAM;AAAA,KACP,CAAA;AACP,IAAA,MAAM,QAAA,GAAWK,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACNC,iBAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,qBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAAC,oBAAA,CAAgBR,mBAAiB,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EACpB;AAEA,EAAA,OAAOK,WAAA,CAAG,QAAQ,qBAAA,CAAsB;AAAA,IACtCA,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACWC,iBAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,qBAAgB,SAAS,CAAA;AAAA;AAAA,MACzB,MAAA;AAAA;AAAA,MACAF,YAAG,OAAA,CAAQ,qBAAA;AAAA,QAC7B,KAAK,MAAA,GACD,IAAA;AAAA;AAAA,UAEA;AAAA,YACEA,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,cACW,MAAA;AAAA;AAAA,cACAE,qBAAgB,KAAK,CAAA;AAAA;AAAA,cACrBE,mBAAA;AAAA;AAAA,cACAC;AAAA;AACtB;AACF;AAAA;AACN;AACF,GACD,CAAA;AACH;;;;"}
|
|
422
|
-
|
|
423
|
-
+{"version":3,"file":"request-body-object.cjs","sources":["../../src/transform/request-body-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform RequestBodyObject nodes (4.8.13)\n * @see https://spec.openapis.org/oas/v3.1.0#request-body-object\n */\nexport default function transformRequestBodyObject(\n requestBodyObject: RequestBodyObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {\n const nextPath = createRef([options.path, \"content\", contentType]);\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode([\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(\n type.length\n ? type\n : // add `\"*/*\": never` if no media types are defined\n [\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"*/*\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n ],\n ),\n ),\n ]);\n}\n"],"names":["mediaTypeObject","getEntries","createRef","transformSchemaObject","transformMediaTypeObject","ts","tsModifiers","tsPropertyIndex","addJSDocComment","QUESTION_TOKEN","NEVER"],"mappings":";;;;;;;;;;;;AAWwB,SAAA,0BAAA,CACtB,mBACA,OACa,EAAA;AACb,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAW,KAAA,MAAA,CAAC,WAAa,EAAAA,iBAAe,CAAK,IAAAC,gBAAA,CAAW,iBAAkB,CAAA,OAAA,IAAW,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AACrG,IAAA,MAAM,WAAWC,eAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,SAAA,EAAW,WAAW,CAAC,CAAA;AACjE,IAAA,MAAM,SACJ,GAAA,MAAA,IAAUF,iBACN,GAAAG,oBAAA,CAAsBH,iBAAiB,EAAA;AAAA,MACrC,GAAG,OAAA;AAAA,MACH,IAAM,EAAA;AAAA,KACP,CACD,GAAAI,eAAA,CAAyBJ,iBAAiB,EAAA;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,IAAM,EAAA;AAAA,KACP,CAAA;AACP,IAAM,MAAA,QAAA,GAAWK,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACNC,iBAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,qBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAAC,oBAAA,CAAgBR,mBAAiB,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA;AAGpB,EAAO,OAAAK,WAAA,CAAG,QAAQ,qBAAsB,CAAA;AAAA,IACtCA,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACWC,iBAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,qBAAgB,SAAS,CAAA;AAAA;AAAA,MACzB,MAAA;AAAA;AAAA,MACAF,YAAG,OAAQ,CAAA,qBAAA;AAAA,QAC7B,KAAK,MACD,GAAA,IAAA;AAAA;AAAA,UAEA;AAAA,YACEA,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,cACW,MAAA;AAAA;AAAA,cACAE,qBAAgB,KAAK,CAAA;AAAA;AAAA,cACrBE,mBAAA;AAAA;AAAA,cACAC;AAAA;AACtB;AACF;AAAA;AACN;AACF,GACD,CAAA;AACH;;;;"}
|
|
424
|
-
|
|
425
|
-
diff --git a/dist/transform/request-body-object.mjs b/dist/transform/request-body-object.mjs
|
|
426
|
-
index b076cb1067987aadbe2f12fb1b7b0fd8cd3db670..0f6583f03382c26a842d1b70d93f3ec374d97696 100644
|
|
427
|
-
--- a/dist/transform/request-body-object.mjs
|
|
428
|
-
+++ b/dist/transform/request-body-object.mjs
|
|
429
|
-
@@ -7,7 +7,7 @@ import transformSchemaObject from './schema-object.mjs';
|
|
430
|
-
function transformRequestBodyObject(requestBodyObject, options) {
|
|
431
|
-
const type = [];
|
|
432
|
-
for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {
|
|
433
|
-
- const nextPath = createRef([options.path, contentType]);
|
|
434
|
-
+ const nextPath = createRef([options.path, "content", contentType]);
|
|
435
|
-
const mediaType = "$ref" in mediaTypeObject ? transformSchemaObject(mediaTypeObject, {
|
|
436
|
-
...options,
|
|
437
|
-
path: nextPath
|
|
438
|
-
diff --git a/dist/transform/request-body-object.mjs.map b/dist/transform/request-body-object.mjs.map
|
|
439
|
-
index 5ad7781c257f8c4bce4ea1d463cbd925bf2f51a2..eadea2f785359016f53a7937333f70dcb5fd26c2 100644
|
|
440
|
-
--- a/dist/transform/request-body-object.mjs.map
|
|
441
|
-
+++ b/dist/transform/request-body-object.mjs.map
|
|
442
|
-
@@ -1 +1 @@
|
|
443
|
-
-{"version":3,"file":"request-body-object.mjs","sources":["../../src/transform/request-body-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform RequestBodyObject nodes (4.8.13)\n * @see https://spec.openapis.org/oas/v3.1.0#request-body-object\n */\nexport default function transformRequestBodyObject(\n requestBodyObject: RequestBodyObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {\n const nextPath = createRef([options.path, contentType]);\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode([\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(\n type.length\n ? type\n : // add `\"*/*\": never` if no media types are defined\n [\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"*/*\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n ],\n ),\n ),\n ]);\n}\n"],"names":[],"mappings":";;;;;;AAWA,SAAwB,0BAAA,CACtB,mBACA,OAAA,EACa;AACb,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,CAAC,WAAA,EAAa,eAAe,CAAA,IAAK,UAAA,CAAW,iBAAA,CAAkB,OAAA,IAAW,EAAC,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrG,IAAA,MAAM,WAAW,SAAA,CAAU,CAAC,OAAA,CAAQ,IAAA,EAAM,WAAW,CAAC,CAAA;AACtD,IAAA,MAAM,SAAA,GACJ,MAAA,IAAU,eAAA,GACN,qBAAA,CAAsB,eAAA,EAAiB;AAAA,MACrC,GAAG,OAAA;AAAA,MACH,IAAA,EAAM;AAAA,KACP,CAAA,GACD,wBAAA,CAAyB,eAAA,EAAiB;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,IAAA,EAAM;AAAA,KACP,CAAA;AACP,IAAA,MAAM,QAAA,GAAW,GAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACN,YAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/C,gBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EACpB;AAEA,EAAA,OAAO,EAAA,CAAG,QAAQ,qBAAA,CAAsB;AAAA,IACtC,GAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACW,YAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/C,gBAAgB,SAAS,CAAA;AAAA;AAAA,MACzB,MAAA;AAAA;AAAA,MACA,GAAG,OAAA,CAAQ,qBAAA;AAAA,QAC7B,KAAK,MAAA,GACD,IAAA;AAAA;AAAA,UAEA;AAAA,YACE,GAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,cACW,MAAA;AAAA;AAAA,cACA,gBAAgB,KAAK,CAAA;AAAA;AAAA,cACrB,cAAA;AAAA;AAAA,cACA;AAAA;AACtB;AACF;AAAA;AACN;AACF,GACD,CAAA;AACH;;;;"}
|
|
444
|
-
|
|
445
|
-
+{"version":3,"file":"request-body-object.mjs","sources":["../../src/transform/request-body-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\nimport transformSchemaObject from \"./schema-object.js\";\n\n/**\n * Transform RequestBodyObject nodes (4.8.13)\n * @see https://spec.openapis.org/oas/v3.1.0#request-body-object\n */\nexport default function transformRequestBodyObject(\n requestBodyObject: RequestBodyObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {\n const nextPath = createRef([options.path, \"content\", contentType]);\n const mediaType =\n \"$ref\" in mediaTypeObject\n ? transformSchemaObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n })\n : transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: nextPath,\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ mediaType,\n );\n addJSDocComment(mediaTypeObject, property);\n type.push(property);\n }\n\n return ts.factory.createTypeLiteralNode([\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(\n type.length\n ? type\n : // add `\"*/*\": never` if no media types are defined\n [\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"*/*\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n ],\n ),\n ),\n ]);\n}\n"],"names":[],"mappings":";;;;;;AAWwB,SAAA,0BAAA,CACtB,mBACA,OACa,EAAA;AACb,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAW,KAAA,MAAA,CAAC,WAAa,EAAA,eAAe,CAAK,IAAA,UAAA,CAAW,iBAAkB,CAAA,OAAA,IAAW,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AACrG,IAAA,MAAM,WAAW,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,SAAA,EAAW,WAAW,CAAC,CAAA;AACjE,IAAA,MAAM,SACJ,GAAA,MAAA,IAAU,eACN,GAAA,qBAAA,CAAsB,eAAiB,EAAA;AAAA,MACrC,GAAG,OAAA;AAAA,MACH,IAAM,EAAA;AAAA,KACP,CACD,GAAA,wBAAA,CAAyB,eAAiB,EAAA;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,IAAM,EAAA;AAAA,KACP,CAAA;AACP,IAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/C,gBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA;AAGpB,EAAO,OAAA,EAAA,CAAG,QAAQ,qBAAsB,CAAA;AAAA,IACtC,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACW,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/C,gBAAgB,SAAS,CAAA;AAAA;AAAA,MACzB,MAAA;AAAA;AAAA,MACA,GAAG,OAAQ,CAAA,qBAAA;AAAA,QAC7B,KAAK,MACD,GAAA,IAAA;AAAA;AAAA,UAEA;AAAA,YACE,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,cACW,MAAA;AAAA;AAAA,cACA,gBAAgB,KAAK,CAAA;AAAA;AAAA,cACrB,cAAA;AAAA;AAAA,cACA;AAAA;AACtB;AACF;AAAA;AACN;AACF,GACD,CAAA;AACH;;;;"}
|
|
446
|
-
|
|
447
|
-
diff --git a/dist/transform/response-object.cjs.map b/dist/transform/response-object.cjs.map
|
|
448
|
-
index 3077d88f3f0f4196d09408126898b9fcedbd4034..84dd39f03c2c1cb8b6a1baa285c1e7d1b4001d1c 100644
|
|
449
|
-
--- a/dist/transform/response-object.cjs.map
|
|
450
|
-
+++ b/dist/transform/response-object.cjs.map
|
|
451
|
-
@@ -1 +1 @@
|
|
452
|
-
-{"version":3,"file":"response-object.cjs","sources":["../../src/transform/response-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport {\n addJSDocComment,\n NEVER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsModifiers,\n tsPropertyIndex,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponseObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\n\n/**\n * Transform ResponseObject nodes (4.8.17)\n * @see https://spec.openapis.org/oas/v3.1.0#response-object\n */\nexport default function transformResponseObject(\n responseObject: ResponseObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // headers\n const headersObject: ts.TypeElement[] = [];\n if (responseObject.headers) {\n for (const [name, headerObject] of getEntries(responseObject.headers, options.ctx)) {\n const optional = \"$ref\" in headerObject || headerObject.required ? undefined : QUESTION_TOKEN;\n const subType =\n \"$ref\" in headerObject\n ? oapiRef(headerObject.$ref)\n : transformHeaderObject(headerObject, {\n ...options,\n path: createRef([options.path, \"headers\", name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(headerObject, property);\n headersObject.push(property);\n }\n }\n // allow additional unknown headers\n headersObject.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"name\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ UNKNOWN,\n ),\n );\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"headers\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(headersObject),\n ),\n );\n\n // content\n const contentObject: ts.TypeElement[] = [];\n if (responseObject.content) {\n for (const [contentType, mediaTypeObject] of getEntries(responseObject.content ?? {}, options.ctx)) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: createRef([options.path, \"content\", contentType]),\n }),\n );\n addJSDocComment(mediaTypeObject, property);\n contentObject.push(property);\n }\n }\n if (contentObject.length) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(contentObject),\n ),\n );\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":["headerObject","getEntries","QUESTION_TOKEN","oapiRef","transformHeaderObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","STRING","UNKNOWN","mediaTypeObject","transformMediaTypeObject","NEVER"],"mappings":"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"}
|
|
453
|
-
|
|
454
|
-
+{"version":3,"file":"response-object.cjs","sources":["../../src/transform/response-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport {\n addJSDocComment,\n NEVER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsModifiers,\n tsPropertyIndex,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponseObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\n\n/**\n * Transform ResponseObject nodes (4.8.17)\n * @see https://spec.openapis.org/oas/v3.1.0#response-object\n */\nexport default function transformResponseObject(\n responseObject: ResponseObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // headers\n const headersObject: ts.TypeElement[] = [];\n if (responseObject.headers) {\n for (const [name, headerObject] of getEntries(responseObject.headers, options.ctx)) {\n const optional = \"$ref\" in headerObject || headerObject.required ? undefined : QUESTION_TOKEN;\n const subType =\n \"$ref\" in headerObject\n ? oapiRef(headerObject.$ref)\n : transformHeaderObject(headerObject, {\n ...options,\n path: createRef([options.path, \"headers\", name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(headerObject, property);\n headersObject.push(property);\n }\n }\n // allow additional unknown headers\n headersObject.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"name\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ UNKNOWN,\n ),\n );\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"headers\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(headersObject),\n ),\n );\n\n // content\n const contentObject: ts.TypeElement[] = [];\n if (responseObject.content) {\n for (const [contentType, mediaTypeObject] of getEntries(responseObject.content ?? {}, options.ctx)) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: createRef([options.path, \"content\", contentType]),\n }),\n );\n addJSDocComment(mediaTypeObject, property);\n contentObject.push(property);\n }\n }\n if (contentObject.length) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(contentObject),\n ),\n );\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":["headerObject","getEntries","QUESTION_TOKEN","oapiRef","transformHeaderObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","STRING","UNKNOWN","mediaTypeObject","transformMediaTypeObject","NEVER"],"mappings":"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"}
|
|
455
|
-
|
|
456
|
-
diff --git a/dist/transform/response-object.mjs.map b/dist/transform/response-object.mjs.map
|
|
457
|
-
index 89505159bd4425da611c52629dae6c630ffb807f..cd975ddab280d3b7c11105fc5f4448030a4a9fdd 100644
|
|
458
|
-
--- a/dist/transform/response-object.mjs.map
|
|
459
|
-
+++ b/dist/transform/response-object.mjs.map
|
|
460
|
-
@@ -1 +1 @@
|
|
461
|
-
-{"version":3,"file":"response-object.mjs","sources":["../../src/transform/response-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport {\n addJSDocComment,\n NEVER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsModifiers,\n tsPropertyIndex,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponseObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\n\n/**\n * Transform ResponseObject nodes (4.8.17)\n * @see https://spec.openapis.org/oas/v3.1.0#response-object\n */\nexport default function transformResponseObject(\n responseObject: ResponseObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // headers\n const headersObject: ts.TypeElement[] = [];\n if (responseObject.headers) {\n for (const [name, headerObject] of getEntries(responseObject.headers, options.ctx)) {\n const optional = \"$ref\" in headerObject || headerObject.required ? undefined : QUESTION_TOKEN;\n const subType =\n \"$ref\" in headerObject\n ? oapiRef(headerObject.$ref)\n : transformHeaderObject(headerObject, {\n ...options,\n path: createRef([options.path, \"headers\", name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(headerObject, property);\n headersObject.push(property);\n }\n }\n // allow additional unknown headers\n headersObject.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"name\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ UNKNOWN,\n ),\n );\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"headers\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(headersObject),\n ),\n );\n\n // content\n const contentObject: ts.TypeElement[] = [];\n if (responseObject.content) {\n for (const [contentType, mediaTypeObject] of getEntries(responseObject.content ?? {}, options.ctx)) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: createRef([options.path, \"content\", contentType]),\n }),\n );\n addJSDocComment(mediaTypeObject, property);\n contentObject.push(property);\n }\n }\n if (contentObject.length) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(contentObject),\n ),\n );\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":[],"mappings":"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"}
|
|
462
|
-
|
|
463
|
-
+{"version":3,"file":"response-object.mjs","sources":["../../src/transform/response-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport {\n addJSDocComment,\n NEVER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsModifiers,\n tsPropertyIndex,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponseObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\n\n/**\n * Transform ResponseObject nodes (4.8.17)\n * @see https://spec.openapis.org/oas/v3.1.0#response-object\n */\nexport default function transformResponseObject(\n responseObject: ResponseObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // headers\n const headersObject: ts.TypeElement[] = [];\n if (responseObject.headers) {\n for (const [name, headerObject] of getEntries(responseObject.headers, options.ctx)) {\n const optional = \"$ref\" in headerObject || headerObject.required ? undefined : QUESTION_TOKEN;\n const subType =\n \"$ref\" in headerObject\n ? oapiRef(headerObject.$ref)\n : transformHeaderObject(headerObject, {\n ...options,\n path: createRef([options.path, \"headers\", name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(headerObject, property);\n headersObject.push(property);\n }\n }\n // allow additional unknown headers\n headersObject.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"name\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ UNKNOWN,\n ),\n );\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"headers\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(headersObject),\n ),\n );\n\n // content\n const contentObject: ts.TypeElement[] = [];\n if (responseObject.content) {\n for (const [contentType, mediaTypeObject] of getEntries(responseObject.content ?? {}, options.ctx)) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: createRef([options.path, \"content\", contentType]),\n }),\n );\n addJSDocComment(mediaTypeObject, property);\n contentObject.push(property);\n }\n }\n if (contentObject.length) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(contentObject),\n ),\n );\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":[],"mappings":";;;;;;AAoBwB,SAAA,uBAAA,CACtB,gBACA,OACa,EAAA;AACb,EAAA,MAAM,OAAyB,EAAC;AAGhC,EAAA,MAAM,gBAAkC,EAAC;AACzC,EAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,IAAW,KAAA,MAAA,CAAC,MAAM,YAAY,CAAA,IAAK,WAAW,cAAe,CAAA,OAAA,EAAS,OAAQ,CAAA,GAAG,CAAG,EAAA;AAClF,MAAA,MAAM,QAAW,GAAA,MAAA,IAAU,YAAgB,IAAA,YAAA,CAAa,WAAW,MAAY,GAAA,cAAA;AAC/E,MAAM,MAAA,OAAA,GACJ,UAAU,YACN,GAAA,OAAA,CAAQ,aAAa,IAAI,CAAA,GACzB,sBAAsB,YAAc,EAAA;AAAA,QAClC,GAAG,OAAA;AAAA,QACH,MAAM,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,SAAA,EAAW,IAAI,CAAC;AAAA,OAChD,CAAA;AACP,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/C,gBAAgB,IAAI,CAAA;AAAA;AAAA,QACpB,QAAA;AAAA;AAAA,QACA;AAAA,OACtB;AACA,MAAA,eAAA,CAAgB,cAAc,QAAQ,CAAA;AACtC,MAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA;AAC7B;AAGF,EAAc,aAAA,CAAA,IAAA;AAAA,IACZ,GAAG,OAAQ,CAAA,oBAAA;AAAA;AAAA,MACW,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAClD;AAAA,QACf,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,UACY,MAAA;AAAA;AAAA,UACA,MAAA;AAAA;AAAA,UACA,EAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA;AAAA,UAClC,MAAA;AAAA;AAAA,UACA;AAAA;AACvB,OACF;AAAA;AAAA,MACoB;AAAA;AACtB,GACF;AACA,EAAK,IAAA,CAAA,IAAA;AAAA,IACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACW,MAAA;AAAA;AAAA,MACA,gBAAgB,SAAS,CAAA;AAAA;AAAA,MACzB,MAAA;AAAA;AAAA,MACA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,aAAa;AAAA;AACpE,GACF;AAGA,EAAA,MAAM,gBAAkC,EAAC;AACzC,EAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,IAAW,KAAA,MAAA,CAAC,WAAa,EAAA,eAAe,CAAK,IAAA,UAAA,CAAW,cAAe,CAAA,OAAA,IAAW,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAClG,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/C,gBAAgB,WAAW,CAAA;AAAA;AAAA,QAC3B,MAAA;AAAA;AAAA,QACA,yBAAyB,eAAiB,EAAA;AAAA,UAC5D,GAAG,OAAA;AAAA,UACH,MAAM,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,SAAA,EAAW,WAAW,CAAC;AAAA,SACvD;AAAA,OACH;AACA,MAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AACzC,MAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA;AAC7B;AAEF,EAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACW,MAAA;AAAA;AAAA,QACA,gBAAgB,SAAS,CAAA;AAAA;AAAA,QACzB,MAAA;AAAA;AAAA,QACA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,aAAa;AAAA;AACpE,KACF;AAAA,GACK,MAAA;AACL,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACW,MAAA;AAAA;AAAA,QACA,gBAAgB,SAAS,CAAA;AAAA;AAAA,QACzB,cAAA;AAAA;AAAA,QACA;AAAA;AACtB,KACF;AAAA;AAGF,EAAO,OAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAC9C;;;;"}
|
|
464
|
-
|
|
465
|
-
diff --git a/dist/transform/responses-object.cjs.map b/dist/transform/responses-object.cjs.map
|
|
466
|
-
index e954f4070c7263914b4a8744361d2306e9ed9f70..282443342337abf451ec13e32887dfb283a35a5c 100644
|
|
467
|
-
--- a/dist/transform/responses-object.cjs.map
|
|
468
|
-
+++ b/dist/transform/responses-object.cjs.map
|
|
469
|
-
@@ -1 +1 @@
|
|
470
|
-
-{"version":3,"file":"responses-object.cjs","sources":["../../src/transform/responses-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponsesObject, TransformNodeOptions } from \"../types.js\";\nimport transformResponseObject from \"./response-object.js\";\n\n/**\n * Transform ResponsesObject nodes (4.8.16)\n * @see https://spec.openapis.org/oas/v3.1.0#responses-object\n */\nexport default function transformResponsesObject(\n responsesObject: ResponsesObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [responseCode, responseObject] of getEntries(responsesObject, options.ctx)) {\n const responseType =\n \"$ref\" in responseObject\n ? oapiRef(responseObject.$ref)\n : transformResponseObject(responseObject, {\n ...options,\n path: createRef([options.path, \"responses\", responseCode]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(responseCode),\n /* questionToken */ undefined,\n /* type */ responseType,\n );\n addJSDocComment(responseObject, property);\n type.push(property);\n }\n\n return type.length ? ts.factory.createTypeLiteralNode(type) : NEVER;\n}\n"],"names":["responseObject","getEntries","oapiRef","transformResponseObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","NEVER"],"mappings":";;;;;;;;;;;AAUA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,cAAcA,gBAAc,CAAA,IAAKC,iBAAW,eAAA,EAAiB,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrF,IAAA,MAAM,YAAA,GACJ,UAAUD,gBAAA,GACNE,UAAA,CAAQF,iBAAe,IAAI,CAAA,GAC3BG,eAAwBH,gBAAA,EAAgB;AAAA,MACtC,GAAG,OAAA;AAAA,MACH,MAAMI,eAAA,CAAU,CAAC,QAAQ,IAAA,EAAM,WAAA,EAAa,YAAY,CAAC;AAAA,KAC1D,CAAA;AACP,IAAA,MAAM,QAAA,GAAWC,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACNC,eAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,YAAY,CAAA;AAAA;AAAA,MAC5B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAAC,kBAAA,CAAgBR,kBAAgB,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EACpB;AAEA,EAAA,OAAO,KAAK,MAAA,GAASK,WAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA,GAAII,QAAA;AAChE;;;;"}
|
|
471
|
-
|
|
472
|
-
+{"version":3,"file":"responses-object.cjs","sources":["../../src/transform/responses-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponsesObject, TransformNodeOptions } from \"../types.js\";\nimport transformResponseObject from \"./response-object.js\";\n\n/**\n * Transform ResponsesObject nodes (4.8.16)\n * @see https://spec.openapis.org/oas/v3.1.0#responses-object\n */\nexport default function transformResponsesObject(\n responsesObject: ResponsesObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [responseCode, responseObject] of getEntries(responsesObject, options.ctx)) {\n const responseType =\n \"$ref\" in responseObject\n ? oapiRef(responseObject.$ref)\n : transformResponseObject(responseObject, {\n ...options,\n path: createRef([options.path, \"responses\", responseCode]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(responseCode),\n /* questionToken */ undefined,\n /* type */ responseType,\n );\n addJSDocComment(responseObject, property);\n type.push(property);\n }\n\n return type.length ? ts.factory.createTypeLiteralNode(type) : NEVER;\n}\n"],"names":["responseObject","getEntries","oapiRef","transformResponseObject","createRef","ts","tsModifiers","tsPropertyIndex","addJSDocComment","NEVER"],"mappings":";;;;;;;;;;;AAUwB,SAAA,wBAAA,CACtB,iBACA,OACa,EAAA;AACb,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAW,KAAA,MAAA,CAAC,cAAcA,gBAAc,CAAA,IAAKC,iBAAW,eAAiB,EAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AACrF,IAAM,MAAA,YAAA,GACJ,UAAUD,gBACN,GAAAE,UAAA,CAAQF,iBAAe,IAAI,CAAA,GAC3BG,eAAwBH,gBAAgB,EAAA;AAAA,MACtC,GAAG,OAAA;AAAA,MACH,MAAMI,eAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,WAAA,EAAa,YAAY,CAAC;AAAA,KAC1D,CAAA;AACP,IAAM,MAAA,QAAA,GAAWC,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACNC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,YAAY,CAAA;AAAA;AAAA,MAC5B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAAC,kBAAA,CAAgBR,kBAAgB,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA;AAGpB,EAAA,OAAO,KAAK,MAAS,GAAAK,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAI,GAAAI,QAAA;AAChE;;;;"}
|
|
473
|
-
|
|
474
|
-
diff --git a/dist/transform/responses-object.mjs.map b/dist/transform/responses-object.mjs.map
|
|
475
|
-
index 9b40438a8056341dd4ec478ec69423bc9384b4e7..a958eb5a3c5849c5ede6a201df263eabbf5d7565 100644
|
|
476
|
-
--- a/dist/transform/responses-object.mjs.map
|
|
477
|
-
+++ b/dist/transform/responses-object.mjs.map
|
|
478
|
-
@@ -1 +1 @@
|
|
479
|
-
-{"version":3,"file":"responses-object.mjs","sources":["../../src/transform/responses-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponsesObject, TransformNodeOptions } from \"../types.js\";\nimport transformResponseObject from \"./response-object.js\";\n\n/**\n * Transform ResponsesObject nodes (4.8.16)\n * @see https://spec.openapis.org/oas/v3.1.0#responses-object\n */\nexport default function transformResponsesObject(\n responsesObject: ResponsesObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [responseCode, responseObject] of getEntries(responsesObject, options.ctx)) {\n const responseType =\n \"$ref\" in responseObject\n ? oapiRef(responseObject.$ref)\n : transformResponseObject(responseObject, {\n ...options,\n path: createRef([options.path, \"responses\", responseCode]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(responseCode),\n /* questionToken */ undefined,\n /* type */ responseType,\n );\n addJSDocComment(responseObject, property);\n type.push(property);\n }\n\n return type.length ? ts.factory.createTypeLiteralNode(type) : NEVER;\n}\n"],"names":[],"mappings":";;;;;AAUA,SAAwB,wBAAA,CACtB,iBACA,OAAA,EACa;AACb,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,cAAc,cAAc,CAAA,IAAK,WAAW,eAAA,EAAiB,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrF,IAAA,MAAM,YAAA,GACJ,UAAU,cAAA,GACN,OAAA,CAAQ,eAAe,IAAI,CAAA,GAC3B,wBAAwB,cAAA,EAAgB;AAAA,MACtC,GAAG,OAAA;AAAA,MACH,MAAM,SAAA,CAAU,CAAC,QAAQ,IAAA,EAAM,WAAA,EAAa,YAAY,CAAC;AAAA,KAC1D,CAAA;AACP,IAAA,MAAM,QAAA,GAAW,GAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,MACN,YAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/C,gBAAgB,YAAY,CAAA;AAAA;AAAA,MAC5B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAA,eAAA,CAAgB,gBAAgB,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EACpB;AAEA,EAAA,OAAO,KAAK,MAAA,GAAS,EAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA,GAAI,KAAA;AAChE;;;;"}
|
|
480
|
-
|
|
481
|
-
+{"version":3,"file":"responses-object.mjs","sources":["../../src/transform/responses-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponsesObject, TransformNodeOptions } from \"../types.js\";\nimport transformResponseObject from \"./response-object.js\";\n\n/**\n * Transform ResponsesObject nodes (4.8.16)\n * @see https://spec.openapis.org/oas/v3.1.0#responses-object\n */\nexport default function transformResponsesObject(\n responsesObject: ResponsesObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [responseCode, responseObject] of getEntries(responsesObject, options.ctx)) {\n const responseType =\n \"$ref\" in responseObject\n ? oapiRef(responseObject.$ref)\n : transformResponseObject(responseObject, {\n ...options,\n path: createRef([options.path, \"responses\", responseCode]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(responseCode),\n /* questionToken */ undefined,\n /* type */ responseType,\n );\n addJSDocComment(responseObject, property);\n type.push(property);\n }\n\n return type.length ? ts.factory.createTypeLiteralNode(type) : NEVER;\n}\n"],"names":[],"mappings":";;;;;AAUwB,SAAA,wBAAA,CACtB,iBACA,OACa,EAAA;AACb,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAW,KAAA,MAAA,CAAC,cAAc,cAAc,CAAA,IAAK,WAAW,eAAiB,EAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AACrF,IAAM,MAAA,YAAA,GACJ,UAAU,cACN,GAAA,OAAA,CAAQ,eAAe,IAAI,CAAA,GAC3B,wBAAwB,cAAgB,EAAA;AAAA,MACtC,GAAG,OAAA;AAAA,MACH,MAAM,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,WAAA,EAAa,YAAY,CAAC;AAAA,KAC1D,CAAA;AACP,IAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/C,gBAAgB,YAAY,CAAA;AAAA;AAAA,MAC5B,MAAA;AAAA;AAAA,MACA;AAAA,KACtB;AACA,IAAA,eAAA,CAAgB,gBAAgB,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA;AAGpB,EAAA,OAAO,KAAK,MAAS,GAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAI,GAAA,KAAA;AAChE;;;;"}
|
|
482
|
-
|
|
197
|
+
@@ -206,6 +206,7 @@ type SchemaObject = {
|
|
198
|
+
const?: unknown;
|
|
199
|
+
default?: unknown;
|
|
200
|
+
format?: string;
|
|
201
|
+
+ additionalProperties?: boolean | Record<string, never> | SchemaObject | ReferenceObject;
|
|
202
|
+
nullable?: boolean;
|
|
203
|
+
oneOf?: (SchemaObject | ReferenceObject)[];
|
|
204
|
+
allOf?: (SchemaObject | ReferenceObject)[];
|
|
483
205
|
diff --git a/dist/transform/schema-object.cjs b/dist/transform/schema-object.cjs
|
|
484
|
-
index
|
|
206
|
+
index 7142e84a60d4856d42179e8d6dc80ec78ea6e881..a246e622559f6599e4bb5f23a8ff306e8dc7c9a8 100644
|
|
485
207
|
--- a/dist/transform/schema-object.cjs
|
|
486
208
|
+++ b/dist/transform/schema-object.cjs
|
|
487
|
-
@@ -
|
|
488
|
-
|
|
489
|
-
const
|
|
490
|
-
|
|
491
|
-
-function transformSchemaObject(schemaObject, options) {
|
|
492
|
-
- const type = transformSchemaObjectWithComposition(schemaObject, options);
|
|
493
|
-
+function transformSchemaObject(schemaObject, options, fromAdditionalProperties = false) {
|
|
494
|
-
+ const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);
|
|
495
|
-
if (typeof options.ctx.postTransform === "function") {
|
|
496
|
-
const postTransformResult = options.ctx.postTransform(type, options);
|
|
497
|
-
if (postTransformResult) {
|
|
498
|
-
@@ -21,7 +21,7 @@ function transformSchemaObject(schemaObject, options) {
|
|
499
|
-
}
|
|
500
|
-
return type;
|
|
501
|
-
}
|
|
502
|
-
-function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
503
|
-
+function transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties = false) {
|
|
504
|
-
if (!schemaObject) {
|
|
505
|
-
return ts.NEVER;
|
|
209
|
+
@@ -39,80 +39,84 @@ function transformSchemaObjectWithComposition(schemaObject, options, fromAdditio
|
|
210
|
+
if (schemaObject.const !== null && schemaObject.const !== void 0) {
|
|
211
|
+
return ts.tsLiteral(schemaObject.const);
|
|
506
212
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
+
|
|
521
|
-
+
|
|
522
|
-
+
|
|
523
|
-
+
|
|
213
|
+
- if (Array.isArray(schemaObject.enum) && (!("type" in schemaObject) || schemaObject.type !== "object") && !("properties" in schemaObject) && !("additionalProperties" in schemaObject)) {
|
|
214
|
+
- if (shouldTransformToTsEnum(options, schemaObject)) {
|
|
215
|
+
- let enumName = refUtils_js.parseRef(options.path ?? "").pointer.join("/");
|
|
216
|
+
- enumName = enumName.replace("components/schemas", "");
|
|
217
|
+
- const metadata = schemaObject.enum.map((_, i) => ({
|
|
218
|
+
- name: schemaObject["x-enum-varnames"]?.[i] ?? schemaObject["x-enumNames"]?.[i],
|
|
219
|
+
- description: schemaObject["x-enum-descriptions"]?.[i] ?? schemaObject["x-enumDescriptions"]?.[i]
|
|
220
|
+
- }));
|
|
221
|
+
- let hasNull = false;
|
|
222
|
+
- const validSchemaEnums = schemaObject.enum.filter((enumValue) => {
|
|
223
|
+
- if (enumValue === null) {
|
|
224
|
+
- hasNull = true;
|
|
225
|
+
- return false;
|
|
226
|
+
+ if (Array.isArray(schemaObject.enum) && (!("type" in schemaObject) || schemaObject.type !== "object") && !("properties" in schemaObject)) {
|
|
227
|
+
+ const hasAdditionalProperties = "additionalProperties" in schemaObject && !!schemaObject.additionalProperties;
|
|
228
|
+
+ if (!hasAdditionalProperties || schemaObject.type === "string" && hasAdditionalProperties) {
|
|
229
|
+
+ if (shouldTransformToTsEnum(options, schemaObject)) {
|
|
230
|
+
+ let enumName = refUtils_js.parseRef(options.path ?? "").pointer.join("/");
|
|
231
|
+
+ enumName = enumName.replace("components/schemas", "");
|
|
232
|
+
+ const metadata = schemaObject.enum.map((_, i) => ({
|
|
233
|
+
+ name: schemaObject["x-enum-varnames"]?.[i] ?? schemaObject["x-enumNames"]?.[i],
|
|
234
|
+
+ description: schemaObject["x-enum-descriptions"]?.[i] ?? schemaObject["x-enumDescriptions"]?.[i]
|
|
235
|
+
+ }));
|
|
236
|
+
+ let hasNull = false;
|
|
237
|
+
+ const validSchemaEnums = schemaObject.enum.filter((enumValue) => {
|
|
238
|
+
+ if (enumValue === null) {
|
|
239
|
+
+ hasNull = true;
|
|
240
|
+
+ return false;
|
|
524
241
|
+ }
|
|
525
|
-
+
|
|
526
|
-
+
|
|
242
|
+
+ return true;
|
|
243
|
+
+ });
|
|
244
|
+
+ const enumType2 = ts.tsEnum(enumName, validSchemaEnums, metadata, {
|
|
245
|
+
+ shouldCache: options.ctx.dedupeEnums,
|
|
246
|
+
+ export: true
|
|
247
|
+
+ // readonly: TS enum do not support the readonly modifier
|
|
248
|
+
+ });
|
|
249
|
+
+ if (!options.ctx.injectFooter.includes(enumType2)) {
|
|
250
|
+
+ options.ctx.injectFooter.push(enumType2);
|
|
251
|
+
}
|
|
252
|
+
- return true;
|
|
253
|
+
- });
|
|
254
|
+
- const enumType2 = ts.tsEnum(enumName, validSchemaEnums, metadata, {
|
|
255
|
+
- shouldCache: options.ctx.dedupeEnums,
|
|
256
|
+
- export: true
|
|
257
|
+
- // readonly: TS enum do not support the readonly modifier
|
|
258
|
+
- });
|
|
259
|
+
- if (!options.ctx.injectFooter.includes(enumType2)) {
|
|
260
|
+
- options.ctx.injectFooter.push(enumType2);
|
|
261
|
+
+ const ref = ts__default.factory.createTypeReferenceNode(enumType2.name);
|
|
262
|
+
+ const finalType2 = hasNull ? ts.tsUnion([ref, ts.NULL]) : ref;
|
|
263
|
+
+ return applyAdditionalPropertiesToEnum(hasAdditionalProperties, finalType2, schemaObject);
|
|
264
|
+
}
|
|
265
|
+
- const ref = ts__default.factory.createTypeReferenceNode(enumType2.name);
|
|
266
|
+
- return hasNull ? ts.tsUnion([ref, ts.NULL]) : ref;
|
|
267
|
+
- }
|
|
268
|
+
- const enumType = schemaObject.enum.map(ts.tsLiteral);
|
|
269
|
+
- if (Array.isArray(schemaObject.type) && schemaObject.type.includes("null") || schemaObject.nullable) {
|
|
270
|
+
- enumType.push(ts.NULL);
|
|
271
|
+
- }
|
|
272
|
+
- const unionType = ts.tsUnion(enumType);
|
|
273
|
+
- if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
274
|
+
- const parsed = refUtils_js.parseRef(options.path ?? "");
|
|
275
|
+
- let enumValuesVariableName = parsed.pointer.join("/");
|
|
276
|
+
- enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
277
|
+
- enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
278
|
+
- const cleanedPointer = [];
|
|
279
|
+
- const extractProperties = [];
|
|
280
|
+
- for (let i = 0; i < parsed.pointer.length; i++) {
|
|
281
|
+
- const segment = parsed.pointer[i];
|
|
282
|
+
- if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
283
|
+
- const next = parsed.pointer[i + 1];
|
|
284
|
+
- if (/^\d+$/.test(next)) {
|
|
285
|
+
- i++;
|
|
286
|
+
- const remainingSegments = parsed.pointer.slice(i + 1);
|
|
287
|
+
- for (const seg of remainingSegments) {
|
|
288
|
+
- if (seg !== "anyOf" && seg !== "oneOf" && !/^\d+$/.test(seg)) {
|
|
289
|
+
- extractProperties.push(seg);
|
|
290
|
+
+ const enumType = schemaObject.enum.map(ts.tsLiteral);
|
|
291
|
+
+ if (Array.isArray(schemaObject.type) && schemaObject.type.includes("null") || schemaObject.nullable) {
|
|
292
|
+
+ enumType.push(ts.NULL);
|
|
527
293
|
+ }
|
|
528
|
-
+ const
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
+
|
|
533
|
-
+
|
|
534
|
-
+
|
|
535
|
-
+
|
|
536
|
-
+
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
294
|
+
+ const unionType = applyAdditionalPropertiesToEnum(hasAdditionalProperties, ts.tsUnion(enumType), schemaObject);
|
|
295
|
+
+ if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
296
|
+
+ const parsed = refUtils_js.parseRef(options.path ?? "");
|
|
297
|
+
+ let enumValuesVariableName = parsed.pointer.join("/");
|
|
298
|
+
+ enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
299
|
+
+ enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
300
|
+
+ const cleanedPointer = [];
|
|
301
|
+
+ const extractProperties = [];
|
|
302
|
+
+ for (let i = 0; i < parsed.pointer.length; i++) {
|
|
303
|
+
+ const segment = parsed.pointer[i];
|
|
304
|
+
+ if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
305
|
+
+ const next = parsed.pointer[i + 1];
|
|
306
|
+
+ if (/^\d+$/.test(next)) {
|
|
307
|
+
+ i++;
|
|
308
|
+
+ const remainingSegments = parsed.pointer.slice(i + 1);
|
|
309
|
+
+ for (const seg of remainingSegments) {
|
|
310
|
+
+ if (seg !== "anyOf" && seg !== "oneOf" && !/^\d+$/.test(seg)) {
|
|
311
|
+
+ extractProperties.push(seg);
|
|
312
|
+
+ }
|
|
313
|
+
}
|
|
314
|
+
+ continue;
|
|
315
|
+
}
|
|
316
|
+
- continue;
|
|
317
|
+
}
|
|
318
|
+
+ cleanedPointer.push(segment);
|
|
319
|
+
}
|
|
320
|
+
- cleanedPointer.push(segment);
|
|
321
|
+
+ const cleanedRefPath = utils.createRef(cleanedPointer);
|
|
322
|
+
+ const enumValuesArray = ts.tsArrayLiteralExpression(
|
|
323
|
+
+ enumValuesVariableName,
|
|
324
|
+
+ // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
325
|
+
+ fromAdditionalProperties ? ts__default.factory.createIndexedAccessTypeNode(
|
|
326
|
+
+ ts.oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
327
|
+
+ ts__default.factory.createTypeReferenceNode(ts__default.factory.createIdentifier("string"))
|
|
328
|
+
+ ) : ts.oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
329
|
+
+ schemaObject.enum,
|
|
330
|
+
+ {
|
|
331
|
+
+ export: true,
|
|
332
|
+
+ readonly: true,
|
|
333
|
+
+ injectFooter: options.ctx.injectFooter
|
|
334
|
+
+ }
|
|
335
|
+
+ );
|
|
336
|
+
+ options.ctx.injectFooter.push(enumValuesArray);
|
|
337
|
+
}
|
|
338
|
+
- const cleanedRefPath = utils.createRef(cleanedPointer);
|
|
339
|
+
- const enumValuesArray = ts.tsArrayLiteralExpression(
|
|
340
|
+
- enumValuesVariableName,
|
|
341
|
+
- // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
342
|
+
- fromAdditionalProperties ? ts__default.factory.createIndexedAccessTypeNode(
|
|
343
|
+
- ts.oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
344
|
+
- ts__default.factory.createTypeReferenceNode(ts__default.factory.createIdentifier("string"))
|
|
345
|
+
- ) : ts.oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
346
|
+
- schemaObject.enum,
|
|
347
|
+
- {
|
|
348
|
+
- export: true,
|
|
349
|
+
- readonly: true,
|
|
350
|
+
- injectFooter: options.ctx.injectFooter
|
|
351
|
+
- }
|
|
352
|
+
- );
|
|
353
|
+
- options.ctx.injectFooter.push(enumValuesArray);
|
|
354
|
+
+ return unionType;
|
|
541
355
|
}
|
|
542
|
-
|
|
356
|
+
- return unionType;
|
|
543
357
|
}
|
|
544
|
-
|
|
545
|
-
+ function collectUnionCompositions(items, unionKey) {
|
|
358
|
+
function collectUnionCompositions(items, unionKey) {
|
|
546
359
|
const output = [];
|
|
547
|
-
-
|
|
548
|
-
- output.push(transformSchemaObject(item, options));
|
|
549
|
-
+ for (const [index, item] of items.entries()) {
|
|
550
|
-
+ output.push(
|
|
551
|
-
+ transformSchemaObject(item, {
|
|
552
|
-
+ ...options,
|
|
553
|
-
+ // include index in path so generated names from nested enums/enumValues are unique
|
|
554
|
-
+ path: utils.createRef([options.path, unionKey, String(index)])
|
|
555
|
-
+ })
|
|
556
|
-
+ );
|
|
557
|
-
}
|
|
558
|
-
return output;
|
|
559
|
-
}
|
|
560
|
-
@@ -117,12 +141,7 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
360
|
+
@@ -148,12 +152,7 @@ function transformSchemaObjectWithComposition(schemaObject, options, fromAdditio
|
|
561
361
|
}
|
|
562
362
|
itemType = transformSchemaObject({ ...item, required: itemRequired }, options);
|
|
563
363
|
}
|
|
@@ -571,122 +371,235 @@ index 862ee9d753202fe920065df98af815258b217f4e..c89d1b266d1551fedf8c0c1b30fa8117
|
|
|
571
371
|
}
|
|
572
372
|
return output;
|
|
573
373
|
}
|
|
574
|
-
@@ -
|
|
575
|
-
|
|
576
|
-
finalType = ts.tsIntersection([...coreObjectType ? [coreObjectType] : [], ...allOf ? [allOf] : []]);
|
|
577
|
-
}
|
|
578
|
-
- const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? []);
|
|
579
|
-
+ const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], "anyOf");
|
|
580
|
-
if (anyOfType.length) {
|
|
581
|
-
finalType = ts.tsUnion([...finalType ? [finalType] : [], ...anyOfType]);
|
|
374
|
+
@@ -322,7 +321,7 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
375
|
+
}
|
|
582
376
|
}
|
|
583
|
-
|
|
584
|
-
-
|
|
585
|
-
+
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
377
|
+
if ("properties" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length || "additionalProperties" in schemaObject && schemaObject.additionalProperties || "patternProperties" in schemaObject && schemaObject.patternProperties || "$defs" in schemaObject && schemaObject.$defs) {
|
|
378
|
+
- if (Object.keys(schemaObject.properties ?? {}).length) {
|
|
379
|
+
+ if ("properties" in schemaObject && schemaObject.properties && Object.keys(schemaObject?.properties).length) {
|
|
380
|
+
for (const [k, v] of utils.getEntries(schemaObject.properties ?? {}, options.ctx)) {
|
|
381
|
+
if (typeof v !== "object" && typeof v !== "boolean" || Array.isArray(v)) {
|
|
382
|
+
throw new Error(
|
|
383
|
+
@@ -383,7 +382,7 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
384
|
+
coreObjectType.push(property);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
- if (schemaObject.$defs && typeof schemaObject.$defs === "object" && Object.keys(schemaObject.$defs).length) {
|
|
388
|
+
+ if ("$defs" in schemaObject && typeof schemaObject.$defs === "object" && Object.keys(schemaObject.$defs).length) {
|
|
389
|
+
const defKeys = [];
|
|
390
|
+
for (const [k, v] of Object.entries(schemaObject.$defs)) {
|
|
391
|
+
const defReadOnly = "readOnly" in v && !!v.readOnly;
|
|
392
|
+
@@ -433,7 +432,8 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
393
|
+
}
|
|
394
|
+
const hasExplicitAdditionalProperties = typeof schemaObject.additionalProperties === "object" && Object.keys(schemaObject.additionalProperties).length;
|
|
395
|
+
const hasImplicitAdditionalProperties = schemaObject.additionalProperties === true || typeof schemaObject.additionalProperties === "object" && Object.keys(schemaObject.additionalProperties).length === 0;
|
|
396
|
+
- const hasExplicitPatternProperties = typeof schemaObject.patternProperties === "object" && Object.keys(schemaObject.patternProperties).length;
|
|
397
|
+
+ const patternProperties = hasKey(schemaObject, "patternProperties") ? schemaObject.patternProperties : void 0;
|
|
398
|
+
+ const hasExplicitPatternProperties = typeof patternProperties === "object" && patternProperties !== null && Object.keys(patternProperties).length > 0;
|
|
592
399
|
const stringIndexTypes = [];
|
|
593
400
|
if (hasExplicitAdditionalProperties) {
|
|
594
|
-
|
|
595
|
-
+
|
|
596
|
-
}
|
|
401
|
+
stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties, options, true));
|
|
402
|
+
@@ -441,8 +441,11 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
597
403
|
if (hasImplicitAdditionalProperties || !schemaObject.additionalProperties && options.ctx.additionalProperties) {
|
|
598
404
|
stringIndexTypes.push(ts.UNKNOWN);
|
|
405
|
+
}
|
|
406
|
+
- if (hasExplicitPatternProperties) {
|
|
407
|
+
- for (const [_, v] of utils.getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {
|
|
408
|
+
+ if (hasExplicitPatternProperties && patternProperties && typeof patternProperties === "object") {
|
|
409
|
+
+ for (const [_, v] of utils.getEntries(
|
|
410
|
+
+ patternProperties,
|
|
411
|
+
+ options.ctx
|
|
412
|
+
+ )) {
|
|
413
|
+
stringIndexTypes.push(transformSchemaObject(v, options));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
@@ -484,6 +487,13 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
417
|
+
function hasKey(possibleObject, key) {
|
|
418
|
+
return typeof possibleObject === "object" && possibleObject !== null && key in possibleObject;
|
|
419
|
+
}
|
|
420
|
+
+function applyAdditionalPropertiesToEnum(hasAdditionalProperties, unionType, schemaObject) {
|
|
421
|
+
+ if (hasAdditionalProperties && schemaObject.type === "string") {
|
|
422
|
+
+ const stringAndEmptyObject = ts.tsIntersection([ts.STRING, ts__default.factory.createTypeLiteralNode([])]);
|
|
423
|
+
+ return ts.tsUnion([unionType, stringAndEmptyObject]);
|
|
424
|
+
+ }
|
|
425
|
+
+ return unionType;
|
|
426
|
+
+}
|
|
427
|
+
function wrapWithReadWriteMarker(type, readOnly, writeOnly, ctx) {
|
|
428
|
+
if (!ctx.readWriteMarkers || readOnly && writeOnly) {
|
|
429
|
+
return type;
|
|
599
430
|
diff --git a/dist/transform/schema-object.cjs.map b/dist/transform/schema-object.cjs.map
|
|
600
|
-
index
|
|
431
|
+
index 4039111f61f3fc47e1e7c6ed894a09e86490ba9c..27bf29dc83d8f29bad013bcf15a04c4458ed85cd 100644
|
|
601
432
|
--- a/dist/transform/schema-object.cjs.map
|
|
602
433
|
+++ b/dist/transform/schema-object.cjs.map
|
|
603
434
|
@@ -1 +1 @@
|
|
604
|
-
-{"version":3,"file":"schema-object.cjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsOmit,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject) &&\n !(\"additionalProperties\" in schemaObject)\n ) {\n // hoist enum to top level if string/number enum and option is enabled\n if (\n options.ctx.enum &&\n schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\" || v === null)\n ) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n return hasNull ? tsUnion([ref, NULL]) : ref;\n }\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = tsUnion(enumType);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n let enumValuesVariableName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n oapiRef(options.path ?? \"\"),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[]) {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n output.push(transformSchemaObject(item, options));\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n const discriminator =\n (\"$ref\" in item && options.ctx.discriminators.objects[item.$ref]) || (item as any).discriminator;\n if (discriminator) {\n output.push(tsOmit(itemType, [discriminator.propertyName]));\n } else {\n output.push(itemType);\n }\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined = undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? []);\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (Object.keys(schemaObject.properties ?? {}).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || readOnly,\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (schemaObject.$defs && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (\"readonly\" in v && !!v.readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n }),\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const hasExplicitPatternProperties =\n typeof schemaObject.patternProperties === \"object\" && Object.keys(schemaObject.patternProperties).length;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties) {\n for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n"],"names":["NEVER","UNKNOWN","oapiRef","tsLiteral","parseRef","enumType","tsEnum","ts","tsUnion","NULL","tsArrayLiteralExpression","tsWithRequired","tsOmit","tsIntersection","tsIsPrimitive","tsRecord","STRING","tsNullable","UNDEFINED","NUMBER","BOOLEAN","createDiscriminatorProperty","getEntries","QUESTION_TOKEN","createRef","tsModifiers","tsPropertyIndex","addJSDocComment"],"mappings":"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"}
|
|
435
|
+
-{"version":3,"file":"schema-object.cjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsOmit,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject) &&\n !(\"additionalProperties\" in schemaObject)\n ) {\n // hoist enum to top level if string/number enum and option is enabled\n if (shouldTransformToTsEnum(options, schemaObject)) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n return hasNull ? tsUnion([ref, NULL]) : ref;\n }\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = tsUnion(enumType);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n const parsed = parseRef(options.path ?? \"\");\n let enumValuesVariableName = parsed.pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n // build a ref path for the type that ignores union indices (anyOf/oneOf) so\n // type references remain stable even when names include union positions\n const cleanedPointer: string[] = [];\n // Track ALL properties after a oneOf/anyOf that need Extract<> narrowing.\n // We apply Extract<> before EVERY property access after a union index because:\n // - When the property exists on ALL variants, Extract<> is a no-op (returns same type)\n // - When the property only exists on SOME variants, it correctly narrows the union\n // - When both variants have same property name but different inner schemas,\n // we still narrow at each level to handle nested unions correctly\n // This robust approach handles both simple and complex union structures.\n const extractProperties: string[] = [];\n for (let i = 0; i < parsed.pointer.length; i++) {\n // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message\n const segment = parsed.pointer[i];\n if ((segment === \"anyOf\" || segment === \"oneOf\") && i < parsed.pointer.length - 1) {\n const next = parsed.pointer[i + 1];\n if (/^\\d+$/.test(next)) {\n // If we encounter something like \"anyOf/0\", we want to skip that part of the path\n i++;\n // Collect ALL remaining segments after the union index.\n // Each one will be wrapped with Extract<> to safely narrow the type\n // at each level, handling both top-level and nested union variants.\n const remainingSegments = parsed.pointer.slice(i + 1);\n for (const seg of remainingSegments) {\n // Skip union keywords and indices, only add actual property names\n if (seg !== \"anyOf\" && seg !== \"oneOf\" && !/^\\d+$/.test(seg)) {\n extractProperties.push(seg);\n }\n }\n continue;\n }\n }\n cleanedPointer.push(segment);\n }\n const cleanedRefPath = createRef(cleanedPointer);\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type\n fromAdditionalProperties\n ? ts.factory.createIndexedAccessTypeNode(\n oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"string\")),\n )\n : oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: \"anyOf\" | \"oneOf\") {\n const output: ts.TypeNode[] = [];\n for (const [index, item] of items.entries()) {\n output.push(\n transformSchemaObject(item, {\n ...options,\n // include index in path so generated names from nested enums/enumValues are unique\n path: createRef([options.path, unionKey, String(index)]),\n }),\n );\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n const discriminator =\n (\"$ref\" in item && options.ctx.discriminators.objects[item.$ref]) || (item as any).discriminator;\n if (discriminator) {\n output.push(tsOmit(itemType, [discriminator.propertyName]));\n } else {\n output.push(itemType);\n }\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], \"anyOf\");\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n \"oneOf\",\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Check if the given OAPI enum should be transformed to a TypeScript enum\n */\nfunction shouldTransformToTsEnum(options: TransformNodeOptions, schemaObject: SchemaObject): boolean {\n // Enum conversion not enabled or no enum present\n if (!options.ctx.enum || !schemaObject.enum) {\n return false;\n }\n\n // Enum must have string, number or null values\n if (!schemaObject.enum.every((v) => [\"string\", \"number\", null].includes(typeof v))) {\n return false;\n }\n\n // If conditionalEnums is enabled, only convert if x-enum-* metadata is present\n if (options.ctx.conditionalEnums) {\n const hasEnumMetadata =\n Array.isArray(schemaObject[\"x-enum-varnames\"]) ||\n Array.isArray(schemaObject[\"x-enumNames\"]) ||\n Array.isArray(schemaObject[\"x-enum-descriptions\"]) ||\n Array.isArray(schemaObject[\"x-enumDescriptions\"]);\n if (!hasEnumMetadata) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (Object.keys(schemaObject.properties ?? {}).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, writeOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n writeOnly: \"writeOnly\" in v && v.writeOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n type = wrapWithReadWriteMarker(type, !!readOnly, !!writeOnly, options.ctx);\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (schemaObject.$defs && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n const defReadOnly = \"readOnly\" in v && !!v.readOnly;\n const defWriteOnly = \"writeOnly\" in v && !!v.writeOnly;\n const defType = wrapWithReadWriteMarker(\n transformSchemaObject(v, { ...options, path: createRef([options.path, \"$defs\", k]) }),\n defReadOnly,\n defWriteOnly,\n options.ctx,\n );\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && defReadOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ defType,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const hasExplicitPatternProperties =\n typeof schemaObject.patternProperties === \"object\" && Object.keys(schemaObject.patternProperties).length;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties) {\n for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n\n/** Wrap type with $Read or $Write marker when readWriteMarkers flag is enabled */\nfunction wrapWithReadWriteMarker(\n type: ts.TypeNode,\n readOnly: boolean,\n writeOnly: boolean,\n ctx: { readWriteMarkers: boolean },\n): ts.TypeNode {\n if (!ctx.readWriteMarkers || (readOnly && writeOnly)) {\n return type;\n }\n if (readOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Read\"), [type]);\n }\n if (writeOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Write\"), [type]);\n }\n return type;\n}\n"],"names":["NEVER","UNKNOWN","oapiRef","tsLiteral","parseRef","enumType","tsEnum","ts","tsUnion","NULL","createRef","tsArrayLiteralExpression","tsWithRequired","tsOmit","tsIntersection","tsIsPrimitive","tsRecord","STRING","tsNullable","UNDEFINED","NUMBER","BOOLEAN","createDiscriminatorProperty","getEntries","QUESTION_TOKEN","tsModifiers","tsPropertyIndex","addJSDocComment"],"mappings":"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"}
|
|
605
436
|
|
|
606
|
-
+{"version":3,"file":"schema-object.cjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject) &&\n !(\"additionalProperties\" in schemaObject)\n ) {\n // hoist enum to top level if string/number enum and option is enabled\n if (\n options.ctx.enum &&\n schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\" || v === null)\n ) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n return hasNull ? tsUnion([ref, NULL]) : ref;\n }\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = tsUnion(enumType);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n const parsed = parseRef(options.path ?? \"\");\n let enumValuesVariableName = parsed.pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n // build a ref path for the type that ignores union indices (anyOf/oneOf) so\n // type references remain stable even when names include union positions\n const cleanedPointer: string[] = [];\n for (let i = 0; i < parsed.pointer.length; i++) {\n // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message\n const segment = parsed.pointer[i];\n if ((segment === \"anyOf\" || segment === \"oneOf\") && i < parsed.pointer.length - 1) {\n const next = parsed.pointer[i + 1];\n if (/^\\d+$/.test(next)) {\n // If we encounter something like \"anyOf/0\", we want to skip that part of the path\n i++;\n continue;\n }\n }\n cleanedPointer.push(segment);\n }\n const cleanedRefPath = createRef(cleanedPointer);\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type\n fromAdditionalProperties\n ? ts.factory.createIndexedAccessTypeNode(\n oapiRef(cleanedRefPath, undefined, true),\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"string\")),\n )\n : oapiRef(cleanedRefPath, undefined, true),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: \"anyOf\" | \"oneOf\") {\n const output: ts.TypeNode[] = [];\n for (const [index, item] of items.entries()) {\n output.push(\n transformSchemaObject(item, {\n ...options,\n // include index in path so generated names from nested enums/enumValues are unique\n path: createRef([options.path, unionKey, String(index)]),\n }),\n );\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n output.push(itemType);\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined = undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], \"anyOf\");\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n \"oneOf\",\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (Object.keys(schemaObject.properties ?? {}).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || readOnly,\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (schemaObject.$defs && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (\"readonly\" in v && !!v.readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n }),\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const hasExplicitPatternProperties =\n typeof schemaObject.patternProperties === \"object\" && Object.keys(schemaObject.patternProperties).length;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties) {\n for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n"],"names":["NEVER","UNKNOWN","oapiRef","tsLiteral","parseRef","enumType","tsEnum","ts","tsUnion","NULL","createRef","tsArrayLiteralExpression","tsWithRequired","tsIntersection","tsIsPrimitive","tsRecord","STRING","tsNullable","UNDEFINED","NUMBER","BOOLEAN","createDiscriminatorProperty","getEntries","QUESTION_TOKEN","tsModifiers","tsPropertyIndex","addJSDocComment"],"mappings":"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"}
|
|
437
|
+
+{"version":3,"file":"schema-object.cjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject)\n ) {\n const hasAdditionalProperties = \"additionalProperties\" in schemaObject && !!schemaObject.additionalProperties;\n\n if (!hasAdditionalProperties || (schemaObject.type === \"string\" && hasAdditionalProperties)) {\n // hoist enum to top level if string/number enum and option is enabled\n if (shouldTransformToTsEnum(options, schemaObject)) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n\n const finalType: ts.TypeNode = hasNull ? tsUnion([ref, NULL]) : ref;\n\n return applyAdditionalPropertiesToEnum(hasAdditionalProperties, finalType, schemaObject);\n }\n\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = applyAdditionalPropertiesToEnum(hasAdditionalProperties, tsUnion(enumType), schemaObject);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n const parsed = parseRef(options.path ?? \"\");\n let enumValuesVariableName = parsed.pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n // build a ref path for the type that ignores union indices (anyOf/oneOf) so\n // type references remain stable even when names include union positions\n const cleanedPointer: string[] = [];\n // Track ALL properties after a oneOf/anyOf that need Extract<> narrowing.\n // We apply Extract<> before EVERY property access after a union index because:\n // - When the property exists on ALL variants, Extract<> is a no-op (returns same type)\n // - When the property only exists on SOME variants, it correctly narrows the union\n // - When both variants have same property name but different inner schemas,\n // we still narrow at each level to handle nested unions correctly\n // This robust approach handles both simple and complex union structures.\n const extractProperties: string[] = [];\n for (let i = 0; i < parsed.pointer.length; i++) {\n // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message\n const segment = parsed.pointer[i];\n if ((segment === \"anyOf\" || segment === \"oneOf\") && i < parsed.pointer.length - 1) {\n const next = parsed.pointer[i + 1];\n if (/^\\d+$/.test(next)) {\n // If we encounter something like \"anyOf/0\", we want to skip that part of the path\n i++;\n // Collect ALL remaining segments after the union index.\n // Each one will be wrapped with Extract<> to safely narrow the type\n // at each level, handling both top-level and nested union variants.\n const remainingSegments = parsed.pointer.slice(i + 1);\n for (const seg of remainingSegments) {\n // Skip union keywords and indices, only add actual property names\n if (seg !== \"anyOf\" && seg !== \"oneOf\" && !/^\\d+$/.test(seg)) {\n extractProperties.push(seg);\n }\n }\n continue;\n }\n }\n cleanedPointer.push(segment);\n }\n const cleanedRefPath = createRef(cleanedPointer);\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type\n fromAdditionalProperties\n ? ts.factory.createIndexedAccessTypeNode(\n oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"string\")),\n )\n : oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: \"anyOf\" | \"oneOf\") {\n const output: ts.TypeNode[] = [];\n for (const [index, item] of items.entries()) {\n output.push(\n transformSchemaObject(item, {\n ...options,\n // include index in path so generated names from nested enums/enumValues are unique\n path: createRef([options.path, unionKey, String(index)]),\n }),\n );\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n output.push(itemType);\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], \"anyOf\");\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n \"oneOf\",\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Check if the given OAPI enum should be transformed to a TypeScript enum\n */\nfunction shouldTransformToTsEnum(options: TransformNodeOptions, schemaObject: SchemaObject): boolean {\n // Enum conversion not enabled or no enum present\n if (!options.ctx.enum || !schemaObject.enum) {\n return false;\n }\n\n // Enum must have string, number or null values\n if (!schemaObject.enum.every((v) => [\"string\", \"number\", null].includes(typeof v))) {\n return false;\n }\n\n // If conditionalEnums is enabled, only convert if x-enum-* metadata is present\n if (options.ctx.conditionalEnums) {\n const hasEnumMetadata =\n Array.isArray(schemaObject[\"x-enum-varnames\"]) ||\n Array.isArray(schemaObject[\"x-enumNames\"]) ||\n Array.isArray(schemaObject[\"x-enum-descriptions\"]) ||\n Array.isArray(schemaObject[\"x-enumDescriptions\"]);\n if (!hasEnumMetadata) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject?.properties).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, writeOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n writeOnly: \"writeOnly\" in v && v.writeOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n type = wrapWithReadWriteMarker(type, !!readOnly, !!writeOnly, options.ctx);\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (\"$defs\" in schemaObject && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n const defReadOnly = \"readOnly\" in v && !!v.readOnly;\n const defWriteOnly = \"writeOnly\" in v && !!v.writeOnly;\n const defType = wrapWithReadWriteMarker(\n transformSchemaObject(v, { ...options, path: createRef([options.path, \"$defs\", k]) }),\n defReadOnly,\n defWriteOnly,\n options.ctx,\n );\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && defReadOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ defType,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const patternProperties = hasKey(schemaObject, \"patternProperties\") ? schemaObject.patternProperties : undefined;\n const hasExplicitPatternProperties =\n typeof patternProperties === \"object\" && patternProperties !== null && Object.keys(patternProperties).length > 0;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties && patternProperties && typeof patternProperties === \"object\") {\n for (const [_, v] of getEntries(\n patternProperties as Record<string, SchemaObject | ReferenceObject>,\n options.ctx,\n )) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n\nfunction applyAdditionalPropertiesToEnum(\n hasAdditionalProperties: boolean,\n unionType: ts.TypeNode,\n schemaObject: SchemaObject,\n) {\n // If additionalProperties is true, add (string & {}) to the union\n if (hasAdditionalProperties && schemaObject.type === \"string\") {\n const stringAndEmptyObject = tsIntersection([STRING, ts.factory.createTypeLiteralNode([])]);\n return tsUnion([unionType, stringAndEmptyObject]);\n }\n return unionType;\n}\n\n/** Wrap type with $Read or $Write marker when readWriteMarkers flag is enabled */\nfunction wrapWithReadWriteMarker(\n type: ts.TypeNode,\n readOnly: boolean,\n writeOnly: boolean,\n ctx: { readWriteMarkers: boolean },\n): ts.TypeNode {\n if (!ctx.readWriteMarkers || (readOnly && writeOnly)) {\n return type;\n }\n if (readOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Read\"), [type]);\n }\n if (writeOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Write\"), [type]);\n }\n return type;\n}\n"],"names":["NEVER","UNKNOWN","oapiRef","tsLiteral","parseRef","enumType","tsEnum","ts","finalType","tsUnion","NULL","createRef","tsArrayLiteralExpression","tsWithRequired","tsIntersection","tsIsPrimitive","tsRecord","STRING","tsNullable","UNDEFINED","NUMBER","BOOLEAN","createDiscriminatorProperty","getEntries","QUESTION_TOKEN","tsModifiers","tsPropertyIndex","addJSDocComment"],"mappings":"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"}
|
|
607
438
|
|
|
608
439
|
diff --git a/dist/transform/schema-object.mjs b/dist/transform/schema-object.mjs
|
|
609
|
-
index
|
|
440
|
+
index dc20a5c14b1320364a71a254b79415bd214f4416..989814efa12f6293e4a274eb980a80f808cc503b 100644
|
|
610
441
|
--- a/dist/transform/schema-object.mjs
|
|
611
442
|
+++ b/dist/transform/schema-object.mjs
|
|
612
|
-
@@ -1,
|
|
443
|
+
@@ -1,6 +1,6 @@
|
|
613
444
|
import { parseRef } from '@redocly/openapi-core/lib/ref-utils.js';
|
|
614
445
|
import ts from 'typescript';
|
|
615
446
|
-import { NEVER, UNKNOWN, oapiRef, tsLiteral, tsEnum, tsUnion, NULL, tsArrayLiteralExpression, tsIntersection, tsIsPrimitive, tsRecord, STRING, tsNullable, UNDEFINED, NUMBER, BOOLEAN, QUESTION_TOKEN, tsModifiers, tsPropertyIndex, addJSDocComment, tsWithRequired, tsOmit } from '../lib/ts.mjs';
|
|
616
|
-
-import { createDiscriminatorProperty, getEntries, createRef } from '../lib/utils.mjs';
|
|
617
447
|
+import { NEVER, UNKNOWN, oapiRef, tsLiteral, tsEnum, tsUnion, NULL, tsArrayLiteralExpression, tsIntersection, tsIsPrimitive, tsRecord, STRING, tsNullable, UNDEFINED, NUMBER, BOOLEAN, QUESTION_TOKEN, tsModifiers, tsPropertyIndex, addJSDocComment, tsWithRequired } from '../lib/ts.mjs';
|
|
618
|
-
|
|
448
|
+
import { createRef, createDiscriminatorProperty, getEntries } from '../lib/utils.mjs';
|
|
619
449
|
|
|
620
|
-
|
|
621
|
-
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
if (typeof options.ctx.postTransform === "function") {
|
|
625
|
-
const postTransformResult = options.ctx.postTransform(type, options);
|
|
626
|
-
if (postTransformResult) {
|
|
627
|
-
@@ -13,7 +13,7 @@ function transformSchemaObject(schemaObject, options) {
|
|
450
|
+
function transformSchemaObject(schemaObject, options, fromAdditionalProperties = false) {
|
|
451
|
+
@@ -31,80 +31,84 @@ function transformSchemaObjectWithComposition(schemaObject, options, fromAdditio
|
|
452
|
+
if (schemaObject.const !== null && schemaObject.const !== void 0) {
|
|
453
|
+
return tsLiteral(schemaObject.const);
|
|
628
454
|
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
-
|
|
641
|
-
|
|
642
|
-
+
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
+
|
|
646
|
-
+
|
|
647
|
-
+
|
|
648
|
-
+
|
|
649
|
-
+
|
|
650
|
-
+
|
|
651
|
-
+
|
|
652
|
-
+
|
|
455
|
+
- if (Array.isArray(schemaObject.enum) && (!("type" in schemaObject) || schemaObject.type !== "object") && !("properties" in schemaObject) && !("additionalProperties" in schemaObject)) {
|
|
456
|
+
- if (shouldTransformToTsEnum(options, schemaObject)) {
|
|
457
|
+
- let enumName = parseRef(options.path ?? "").pointer.join("/");
|
|
458
|
+
- enumName = enumName.replace("components/schemas", "");
|
|
459
|
+
- const metadata = schemaObject.enum.map((_, i) => ({
|
|
460
|
+
- name: schemaObject["x-enum-varnames"]?.[i] ?? schemaObject["x-enumNames"]?.[i],
|
|
461
|
+
- description: schemaObject["x-enum-descriptions"]?.[i] ?? schemaObject["x-enumDescriptions"]?.[i]
|
|
462
|
+
- }));
|
|
463
|
+
- let hasNull = false;
|
|
464
|
+
- const validSchemaEnums = schemaObject.enum.filter((enumValue) => {
|
|
465
|
+
- if (enumValue === null) {
|
|
466
|
+
- hasNull = true;
|
|
467
|
+
- return false;
|
|
468
|
+
+ if (Array.isArray(schemaObject.enum) && (!("type" in schemaObject) || schemaObject.type !== "object") && !("properties" in schemaObject)) {
|
|
469
|
+
+ const hasAdditionalProperties = "additionalProperties" in schemaObject && !!schemaObject.additionalProperties;
|
|
470
|
+
+ if (!hasAdditionalProperties || schemaObject.type === "string" && hasAdditionalProperties) {
|
|
471
|
+
+ if (shouldTransformToTsEnum(options, schemaObject)) {
|
|
472
|
+
+ let enumName = parseRef(options.path ?? "").pointer.join("/");
|
|
473
|
+
+ enumName = enumName.replace("components/schemas", "");
|
|
474
|
+
+ const metadata = schemaObject.enum.map((_, i) => ({
|
|
475
|
+
+ name: schemaObject["x-enum-varnames"]?.[i] ?? schemaObject["x-enumNames"]?.[i],
|
|
476
|
+
+ description: schemaObject["x-enum-descriptions"]?.[i] ?? schemaObject["x-enumDescriptions"]?.[i]
|
|
477
|
+
+ }));
|
|
478
|
+
+ let hasNull = false;
|
|
479
|
+
+ const validSchemaEnums = schemaObject.enum.filter((enumValue) => {
|
|
480
|
+
+ if (enumValue === null) {
|
|
481
|
+
+ hasNull = true;
|
|
482
|
+
+ return false;
|
|
653
483
|
+ }
|
|
654
|
-
+
|
|
655
|
-
+
|
|
484
|
+
+ return true;
|
|
485
|
+
+ });
|
|
486
|
+
+ const enumType2 = tsEnum(enumName, validSchemaEnums, metadata, {
|
|
487
|
+
+ shouldCache: options.ctx.dedupeEnums,
|
|
488
|
+
+ export: true
|
|
489
|
+
+ // readonly: TS enum do not support the readonly modifier
|
|
490
|
+
+ });
|
|
491
|
+
+ if (!options.ctx.injectFooter.includes(enumType2)) {
|
|
492
|
+
+ options.ctx.injectFooter.push(enumType2);
|
|
493
|
+
}
|
|
494
|
+
- return true;
|
|
495
|
+
- });
|
|
496
|
+
- const enumType2 = tsEnum(enumName, validSchemaEnums, metadata, {
|
|
497
|
+
- shouldCache: options.ctx.dedupeEnums,
|
|
498
|
+
- export: true
|
|
499
|
+
- // readonly: TS enum do not support the readonly modifier
|
|
500
|
+
- });
|
|
501
|
+
- if (!options.ctx.injectFooter.includes(enumType2)) {
|
|
502
|
+
- options.ctx.injectFooter.push(enumType2);
|
|
503
|
+
+ const ref = ts.factory.createTypeReferenceNode(enumType2.name);
|
|
504
|
+
+ const finalType2 = hasNull ? tsUnion([ref, NULL]) : ref;
|
|
505
|
+
+ return applyAdditionalPropertiesToEnum(hasAdditionalProperties, finalType2, schemaObject);
|
|
506
|
+
}
|
|
507
|
+
- const ref = ts.factory.createTypeReferenceNode(enumType2.name);
|
|
508
|
+
- return hasNull ? tsUnion([ref, NULL]) : ref;
|
|
509
|
+
- }
|
|
510
|
+
- const enumType = schemaObject.enum.map(tsLiteral);
|
|
511
|
+
- if (Array.isArray(schemaObject.type) && schemaObject.type.includes("null") || schemaObject.nullable) {
|
|
512
|
+
- enumType.push(NULL);
|
|
513
|
+
- }
|
|
514
|
+
- const unionType = tsUnion(enumType);
|
|
515
|
+
- if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
516
|
+
- const parsed = parseRef(options.path ?? "");
|
|
517
|
+
- let enumValuesVariableName = parsed.pointer.join("/");
|
|
518
|
+
- enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
519
|
+
- enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
520
|
+
- const cleanedPointer = [];
|
|
521
|
+
- const extractProperties = [];
|
|
522
|
+
- for (let i = 0; i < parsed.pointer.length; i++) {
|
|
523
|
+
- const segment = parsed.pointer[i];
|
|
524
|
+
- if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
525
|
+
- const next = parsed.pointer[i + 1];
|
|
526
|
+
- if (/^\d+$/.test(next)) {
|
|
527
|
+
- i++;
|
|
528
|
+
- const remainingSegments = parsed.pointer.slice(i + 1);
|
|
529
|
+
- for (const seg of remainingSegments) {
|
|
530
|
+
- if (seg !== "anyOf" && seg !== "oneOf" && !/^\d+$/.test(seg)) {
|
|
531
|
+
- extractProperties.push(seg);
|
|
532
|
+
+ const enumType = schemaObject.enum.map(tsLiteral);
|
|
533
|
+
+ if (Array.isArray(schemaObject.type) && schemaObject.type.includes("null") || schemaObject.nullable) {
|
|
534
|
+
+ enumType.push(NULL);
|
|
656
535
|
+ }
|
|
657
|
-
+ const
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
+
|
|
662
|
-
+
|
|
663
|
-
+
|
|
664
|
-
+
|
|
665
|
-
+
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
536
|
+
+ const unionType = applyAdditionalPropertiesToEnum(hasAdditionalProperties, tsUnion(enumType), schemaObject);
|
|
537
|
+
+ if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
538
|
+
+ const parsed = parseRef(options.path ?? "");
|
|
539
|
+
+ let enumValuesVariableName = parsed.pointer.join("/");
|
|
540
|
+
+ enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
541
|
+
+ enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
542
|
+
+ const cleanedPointer = [];
|
|
543
|
+
+ const extractProperties = [];
|
|
544
|
+
+ for (let i = 0; i < parsed.pointer.length; i++) {
|
|
545
|
+
+ const segment = parsed.pointer[i];
|
|
546
|
+
+ if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
547
|
+
+ const next = parsed.pointer[i + 1];
|
|
548
|
+
+ if (/^\d+$/.test(next)) {
|
|
549
|
+
+ i++;
|
|
550
|
+
+ const remainingSegments = parsed.pointer.slice(i + 1);
|
|
551
|
+
+ for (const seg of remainingSegments) {
|
|
552
|
+
+ if (seg !== "anyOf" && seg !== "oneOf" && !/^\d+$/.test(seg)) {
|
|
553
|
+
+ extractProperties.push(seg);
|
|
554
|
+
+ }
|
|
555
|
+
}
|
|
556
|
+
+ continue;
|
|
557
|
+
}
|
|
558
|
+
- continue;
|
|
559
|
+
}
|
|
560
|
+
+ cleanedPointer.push(segment);
|
|
561
|
+
}
|
|
562
|
+
- cleanedPointer.push(segment);
|
|
563
|
+
+ const cleanedRefPath = createRef(cleanedPointer);
|
|
564
|
+
+ const enumValuesArray = tsArrayLiteralExpression(
|
|
565
|
+
+ enumValuesVariableName,
|
|
566
|
+
+ // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
567
|
+
+ fromAdditionalProperties ? ts.factory.createIndexedAccessTypeNode(
|
|
568
|
+
+ oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
569
|
+
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("string"))
|
|
570
|
+
+ ) : oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
571
|
+
+ schemaObject.enum,
|
|
572
|
+
+ {
|
|
573
|
+
+ export: true,
|
|
574
|
+
+ readonly: true,
|
|
575
|
+
+ injectFooter: options.ctx.injectFooter
|
|
576
|
+
+ }
|
|
577
|
+
+ );
|
|
578
|
+
+ options.ctx.injectFooter.push(enumValuesArray);
|
|
579
|
+
}
|
|
580
|
+
- const cleanedRefPath = createRef(cleanedPointer);
|
|
581
|
+
- const enumValuesArray = tsArrayLiteralExpression(
|
|
582
|
+
- enumValuesVariableName,
|
|
583
|
+
- // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
584
|
+
- fromAdditionalProperties ? ts.factory.createIndexedAccessTypeNode(
|
|
585
|
+
- oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
586
|
+
- ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("string"))
|
|
587
|
+
- ) : oapiRef(cleanedRefPath, void 0, { deep: true, extractProperties }),
|
|
588
|
+
- schemaObject.enum,
|
|
589
|
+
- {
|
|
590
|
+
- export: true,
|
|
591
|
+
- readonly: true,
|
|
592
|
+
- injectFooter: options.ctx.injectFooter
|
|
593
|
+
- }
|
|
594
|
+
- );
|
|
595
|
+
- options.ctx.injectFooter.push(enumValuesArray);
|
|
596
|
+
+ return unionType;
|
|
670
597
|
}
|
|
671
|
-
|
|
598
|
+
- return unionType;
|
|
672
599
|
}
|
|
673
|
-
|
|
674
|
-
+ function collectUnionCompositions(items, unionKey) {
|
|
600
|
+
function collectUnionCompositions(items, unionKey) {
|
|
675
601
|
const output = [];
|
|
676
|
-
-
|
|
677
|
-
- output.push(transformSchemaObject(item, options));
|
|
678
|
-
+ for (const [index, item] of items.entries()) {
|
|
679
|
-
+ output.push(
|
|
680
|
-
+ transformSchemaObject(item, {
|
|
681
|
-
+ ...options,
|
|
682
|
-
+ // include index in path so generated names from nested enums/enumValues are unique
|
|
683
|
-
+ path: createRef([options.path, unionKey, String(index)])
|
|
684
|
-
+ })
|
|
685
|
-
+ );
|
|
686
|
-
}
|
|
687
|
-
return output;
|
|
688
|
-
}
|
|
689
|
-
@@ -109,12 +133,7 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
602
|
+
@@ -140,12 +144,7 @@ function transformSchemaObjectWithComposition(schemaObject, options, fromAdditio
|
|
690
603
|
}
|
|
691
604
|
itemType = transformSchemaObject({ ...item, required: itemRequired }, options);
|
|
692
605
|
}
|
|
@@ -700,57 +613,70 @@ index f13ebbad3bee4844d1fb5e9c1563e6fb7a21610d..508c4ea8fd8255c438508550493eadc0
|
|
|
700
613
|
}
|
|
701
614
|
return output;
|
|
702
615
|
}
|
|
703
|
-
@@ -
|
|
704
|
-
|
|
705
|
-
finalType = tsIntersection([...coreObjectType ? [coreObjectType] : [], ...allOf ? [allOf] : []]);
|
|
706
|
-
}
|
|
707
|
-
- const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? []);
|
|
708
|
-
+ const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], "anyOf");
|
|
709
|
-
if (anyOfType.length) {
|
|
710
|
-
finalType = tsUnion([...finalType ? [finalType] : [], ...anyOfType]);
|
|
616
|
+
@@ -314,7 +313,7 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
617
|
+
}
|
|
711
618
|
}
|
|
712
|
-
|
|
713
|
-
-
|
|
714
|
-
+
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
619
|
+
if ("properties" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length || "additionalProperties" in schemaObject && schemaObject.additionalProperties || "patternProperties" in schemaObject && schemaObject.patternProperties || "$defs" in schemaObject && schemaObject.$defs) {
|
|
620
|
+
- if (Object.keys(schemaObject.properties ?? {}).length) {
|
|
621
|
+
+ if ("properties" in schemaObject && schemaObject.properties && Object.keys(schemaObject?.properties).length) {
|
|
622
|
+
for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {
|
|
623
|
+
if (typeof v !== "object" && typeof v !== "boolean" || Array.isArray(v)) {
|
|
624
|
+
throw new Error(
|
|
625
|
+
@@ -375,7 +374,7 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
626
|
+
coreObjectType.push(property);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
- if (schemaObject.$defs && typeof schemaObject.$defs === "object" && Object.keys(schemaObject.$defs).length) {
|
|
630
|
+
+ if ("$defs" in schemaObject && typeof schemaObject.$defs === "object" && Object.keys(schemaObject.$defs).length) {
|
|
631
|
+
const defKeys = [];
|
|
632
|
+
for (const [k, v] of Object.entries(schemaObject.$defs)) {
|
|
633
|
+
const defReadOnly = "readOnly" in v && !!v.readOnly;
|
|
634
|
+
@@ -425,7 +424,8 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
635
|
+
}
|
|
636
|
+
const hasExplicitAdditionalProperties = typeof schemaObject.additionalProperties === "object" && Object.keys(schemaObject.additionalProperties).length;
|
|
637
|
+
const hasImplicitAdditionalProperties = schemaObject.additionalProperties === true || typeof schemaObject.additionalProperties === "object" && Object.keys(schemaObject.additionalProperties).length === 0;
|
|
638
|
+
- const hasExplicitPatternProperties = typeof schemaObject.patternProperties === "object" && Object.keys(schemaObject.patternProperties).length;
|
|
639
|
+
+ const patternProperties = hasKey(schemaObject, "patternProperties") ? schemaObject.patternProperties : void 0;
|
|
640
|
+
+ const hasExplicitPatternProperties = typeof patternProperties === "object" && patternProperties !== null && Object.keys(patternProperties).length > 0;
|
|
721
641
|
const stringIndexTypes = [];
|
|
722
642
|
if (hasExplicitAdditionalProperties) {
|
|
723
|
-
|
|
724
|
-
+
|
|
725
|
-
}
|
|
643
|
+
stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties, options, true));
|
|
644
|
+
@@ -433,8 +433,11 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
726
645
|
if (hasImplicitAdditionalProperties || !schemaObject.additionalProperties && options.ctx.additionalProperties) {
|
|
727
646
|
stringIndexTypes.push(UNKNOWN);
|
|
647
|
+
}
|
|
648
|
+
- if (hasExplicitPatternProperties) {
|
|
649
|
+
- for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {
|
|
650
|
+
+ if (hasExplicitPatternProperties && patternProperties && typeof patternProperties === "object") {
|
|
651
|
+
+ for (const [_, v] of getEntries(
|
|
652
|
+
+ patternProperties,
|
|
653
|
+
+ options.ctx
|
|
654
|
+
+ )) {
|
|
655
|
+
stringIndexTypes.push(transformSchemaObject(v, options));
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
@@ -476,6 +479,13 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
659
|
+
function hasKey(possibleObject, key) {
|
|
660
|
+
return typeof possibleObject === "object" && possibleObject !== null && key in possibleObject;
|
|
661
|
+
}
|
|
662
|
+
+function applyAdditionalPropertiesToEnum(hasAdditionalProperties, unionType, schemaObject) {
|
|
663
|
+
+ if (hasAdditionalProperties && schemaObject.type === "string") {
|
|
664
|
+
+ const stringAndEmptyObject = tsIntersection([STRING, ts.factory.createTypeLiteralNode([])]);
|
|
665
|
+
+ return tsUnion([unionType, stringAndEmptyObject]);
|
|
666
|
+
+ }
|
|
667
|
+
+ return unionType;
|
|
668
|
+
+}
|
|
669
|
+
function wrapWithReadWriteMarker(type, readOnly, writeOnly, ctx) {
|
|
670
|
+
if (!ctx.readWriteMarkers || readOnly && writeOnly) {
|
|
671
|
+
return type;
|
|
728
672
|
diff --git a/dist/transform/schema-object.mjs.map b/dist/transform/schema-object.mjs.map
|
|
729
|
-
index
|
|
673
|
+
index 452cebcb435ee9d7123da76c7ff2b10c6e53a494..b0d6edffb8fda895ed37f45a99f673143803960c 100644
|
|
730
674
|
--- a/dist/transform/schema-object.mjs.map
|
|
731
675
|
+++ b/dist/transform/schema-object.mjs.map
|
|
732
676
|
@@ -1 +1 @@
|
|
733
|
-
-{"version":3,"file":"schema-object.mjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsOmit,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject) &&\n !(\"additionalProperties\" in schemaObject)\n ) {\n // hoist enum to top level if string/number enum and option is enabled\n if (\n options.ctx.enum &&\n schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\" || v === null)\n ) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n return hasNull ? tsUnion([ref, NULL]) : ref;\n }\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = tsUnion(enumType);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n let enumValuesVariableName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n oapiRef(options.path ?? \"\"),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[]) {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n output.push(transformSchemaObject(item, options));\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n const discriminator =\n (\"$ref\" in item && options.ctx.discriminators.objects[item.$ref]) || (item as any).discriminator;\n if (discriminator) {\n output.push(tsOmit(itemType, [discriminator.propertyName]));\n } else {\n output.push(itemType);\n }\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined = undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? []);\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (Object.keys(schemaObject.properties ?? {}).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || readOnly,\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (schemaObject.$defs && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (\"readonly\" in v && !!v.readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n }),\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const hasExplicitPatternProperties =\n typeof schemaObject.patternProperties === \"object\" && Object.keys(schemaObject.patternProperties).length;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties) {\n for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n"],"names":["enumType"],"mappings":"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"}
|
|
734
|
-
|
|
735
|
-
+{"version":3,"file":"schema-object.mjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject) &&\n !(\"additionalProperties\" in schemaObject)\n ) {\n // hoist enum to top level if string/number enum and option is enabled\n if (\n options.ctx.enum &&\n schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\" || v === null)\n ) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n return hasNull ? tsUnion([ref, NULL]) : ref;\n }\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = tsUnion(enumType);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n const parsed = parseRef(options.path ?? \"\");\n let enumValuesVariableName = parsed.pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n // build a ref path for the type that ignores union indices (anyOf/oneOf) so\n // type references remain stable even when names include union positions\n const cleanedPointer: string[] = [];\n for (let i = 0; i < parsed.pointer.length; i++) {\n // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message\n const segment = parsed.pointer[i];\n if ((segment === \"anyOf\" || segment === \"oneOf\") && i < parsed.pointer.length - 1) {\n const next = parsed.pointer[i + 1];\n if (/^\\d+$/.test(next)) {\n // If we encounter something like \"anyOf/0\", we want to skip that part of the path\n i++;\n continue;\n }\n }\n cleanedPointer.push(segment);\n }\n const cleanedRefPath = createRef(cleanedPointer);\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type\n fromAdditionalProperties\n ? ts.factory.createIndexedAccessTypeNode(\n oapiRef(cleanedRefPath, undefined, true),\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"string\")),\n )\n : oapiRef(cleanedRefPath, undefined, true),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: \"anyOf\" | \"oneOf\") {\n const output: ts.TypeNode[] = [];\n for (const [index, item] of items.entries()) {\n output.push(\n transformSchemaObject(item, {\n ...options,\n // include index in path so generated names from nested enums/enumValues are unique\n path: createRef([options.path, unionKey, String(index)]),\n }),\n );\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n output.push(itemType);\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined = undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], \"anyOf\");\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n \"oneOf\",\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (Object.keys(schemaObject.properties ?? {}).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || readOnly,\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (schemaObject.$defs && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (\"readonly\" in v && !!v.readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n }),\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const hasExplicitPatternProperties =\n typeof schemaObject.patternProperties === \"object\" && Object.keys(schemaObject.patternProperties).length;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties) {\n for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n"],"names":["enumType"],"mappings":"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"}
|
|
736
|
-
|
|
737
|
-
diff --git a/dist/transform/webhooks-object.cjs.map b/dist/transform/webhooks-object.cjs.map
|
|
738
|
-
index 7a001a46090bf9336a2e9b2ab43bde68b811fa5e..c91eb662367b6f85c40b3f96e5f6ec7ce3985858 100644
|
|
739
|
-
--- a/dist/transform/webhooks-object.cjs.map
|
|
740
|
-
+++ b/dist/transform/webhooks-object.cjs.map
|
|
741
|
-
@@ -1 +1 @@
|
|
742
|
-
-{"version":3,"file":"webhooks-object.cjs","sources":["../../src/transform/webhooks-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { GlobalContext, WebhooksObject } from \"../types.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\n\nexport default function transformWebhooksObject(webhooksObject: WebhooksObject, options: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [name, pathItemObject] of getEntries(webhooksObject, options)) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.immutable,\n }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ undefined,\n /* type */ transformPathItemObject(pathItemObject, {\n path: createRef([\"webhooks\", name]),\n ctx: options,\n }),\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":["pathItemObject","getEntries","ts","tsModifiers","tsPropertyIndex","transformPathItemObject","createRef"],"mappings":";;;;;;;;;;;AAMA,SAAwB,uBAAA,CAAwB,gBAAgC,OAAA,EAAqC;AACnH,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,IAAA,EAAMA,gBAAc,KAAKC,gBAAA,CAAW,cAAA,EAAgB,OAAO,CAAA,EAAG;AACxE,IAAA,IAAA,CAAK,IAAA;AAAA,MACHC,YAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,QACWC,gBAAA,CAAY;AAAA,UAC9B,UAAU,OAAA,CAAQ;AAAA,SACnB,CAAA;AAAA;AAAA,QACmBC,qBAAgB,IAAI,CAAA;AAAA;AAAA,QACpB,MAAA;AAAA;AAAA,QACAC,eAAwBL,gBAAA,EAAgB;AAAA,UAC1D,IAAA,EAAMM,eAAA,CAAU,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AAAA,UAClC,GAAA,EAAK;AAAA,SACN;AAAA;AACH,KACF;AAAA,EACF;AAEA,EAAA,OAAOJ,WAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA;AAC9C;;;;"}
|
|
677
|
+
-{"version":3,"file":"schema-object.mjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsOmit,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject) &&\n !(\"additionalProperties\" in schemaObject)\n ) {\n // hoist enum to top level if string/number enum and option is enabled\n if (shouldTransformToTsEnum(options, schemaObject)) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n return hasNull ? tsUnion([ref, NULL]) : ref;\n }\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = tsUnion(enumType);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n const parsed = parseRef(options.path ?? \"\");\n let enumValuesVariableName = parsed.pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n // build a ref path for the type that ignores union indices (anyOf/oneOf) so\n // type references remain stable even when names include union positions\n const cleanedPointer: string[] = [];\n // Track ALL properties after a oneOf/anyOf that need Extract<> narrowing.\n // We apply Extract<> before EVERY property access after a union index because:\n // - When the property exists on ALL variants, Extract<> is a no-op (returns same type)\n // - When the property only exists on SOME variants, it correctly narrows the union\n // - When both variants have same property name but different inner schemas,\n // we still narrow at each level to handle nested unions correctly\n // This robust approach handles both simple and complex union structures.\n const extractProperties: string[] = [];\n for (let i = 0; i < parsed.pointer.length; i++) {\n // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message\n const segment = parsed.pointer[i];\n if ((segment === \"anyOf\" || segment === \"oneOf\") && i < parsed.pointer.length - 1) {\n const next = parsed.pointer[i + 1];\n if (/^\\d+$/.test(next)) {\n // If we encounter something like \"anyOf/0\", we want to skip that part of the path\n i++;\n // Collect ALL remaining segments after the union index.\n // Each one will be wrapped with Extract<> to safely narrow the type\n // at each level, handling both top-level and nested union variants.\n const remainingSegments = parsed.pointer.slice(i + 1);\n for (const seg of remainingSegments) {\n // Skip union keywords and indices, only add actual property names\n if (seg !== \"anyOf\" && seg !== \"oneOf\" && !/^\\d+$/.test(seg)) {\n extractProperties.push(seg);\n }\n }\n continue;\n }\n }\n cleanedPointer.push(segment);\n }\n const cleanedRefPath = createRef(cleanedPointer);\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type\n fromAdditionalProperties\n ? ts.factory.createIndexedAccessTypeNode(\n oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"string\")),\n )\n : oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: \"anyOf\" | \"oneOf\") {\n const output: ts.TypeNode[] = [];\n for (const [index, item] of items.entries()) {\n output.push(\n transformSchemaObject(item, {\n ...options,\n // include index in path so generated names from nested enums/enumValues are unique\n path: createRef([options.path, unionKey, String(index)]),\n }),\n );\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n const discriminator =\n (\"$ref\" in item && options.ctx.discriminators.objects[item.$ref]) || (item as any).discriminator;\n if (discriminator) {\n output.push(tsOmit(itemType, [discriminator.propertyName]));\n } else {\n output.push(itemType);\n }\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], \"anyOf\");\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n \"oneOf\",\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Check if the given OAPI enum should be transformed to a TypeScript enum\n */\nfunction shouldTransformToTsEnum(options: TransformNodeOptions, schemaObject: SchemaObject): boolean {\n // Enum conversion not enabled or no enum present\n if (!options.ctx.enum || !schemaObject.enum) {\n return false;\n }\n\n // Enum must have string, number or null values\n if (!schemaObject.enum.every((v) => [\"string\", \"number\", null].includes(typeof v))) {\n return false;\n }\n\n // If conditionalEnums is enabled, only convert if x-enum-* metadata is present\n if (options.ctx.conditionalEnums) {\n const hasEnumMetadata =\n Array.isArray(schemaObject[\"x-enum-varnames\"]) ||\n Array.isArray(schemaObject[\"x-enumNames\"]) ||\n Array.isArray(schemaObject[\"x-enum-descriptions\"]) ||\n Array.isArray(schemaObject[\"x-enumDescriptions\"]);\n if (!hasEnumMetadata) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (Object.keys(schemaObject.properties ?? {}).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, writeOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n writeOnly: \"writeOnly\" in v && v.writeOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n type = wrapWithReadWriteMarker(type, !!readOnly, !!writeOnly, options.ctx);\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (schemaObject.$defs && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n const defReadOnly = \"readOnly\" in v && !!v.readOnly;\n const defWriteOnly = \"writeOnly\" in v && !!v.writeOnly;\n const defType = wrapWithReadWriteMarker(\n transformSchemaObject(v, { ...options, path: createRef([options.path, \"$defs\", k]) }),\n defReadOnly,\n defWriteOnly,\n options.ctx,\n );\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && defReadOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ defType,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const hasExplicitPatternProperties =\n typeof schemaObject.patternProperties === \"object\" && Object.keys(schemaObject.patternProperties).length;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties) {\n for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n\n/** Wrap type with $Read or $Write marker when readWriteMarkers flag is enabled */\nfunction wrapWithReadWriteMarker(\n type: ts.TypeNode,\n readOnly: boolean,\n writeOnly: boolean,\n ctx: { readWriteMarkers: boolean },\n): ts.TypeNode {\n if (!ctx.readWriteMarkers || (readOnly && writeOnly)) {\n return type;\n }\n if (readOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Read\"), [type]);\n }\n if (writeOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Write\"), [type]);\n }\n return type;\n}\n"],"names":["enumType"],"mappings":"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"}
|
|
743
678
|
|
|
744
|
-
+{"version":3,"file":"webhooks-object.cjs","sources":["../../src/transform/webhooks-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { GlobalContext, WebhooksObject } from \"../types.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\n\nexport default function transformWebhooksObject(webhooksObject: WebhooksObject, options: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [name, pathItemObject] of getEntries(webhooksObject, options)) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.immutable,\n }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ undefined,\n /* type */ transformPathItemObject(pathItemObject, {\n path: createRef([\"webhooks\", name]),\n ctx: options,\n }),\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":["pathItemObject","getEntries","ts","tsModifiers","tsPropertyIndex","transformPathItemObject","createRef"],"mappings":";;;;;;;;;;;AAMwB,SAAA,uBAAA,CAAwB,gBAAgC,OAAqC,EAAA;AACnH,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,IAAM,EAAAA,gBAAc,KAAKC,gBAAW,CAAA,cAAA,EAAgB,OAAO,CAAG,EAAA;AACxE,IAAK,IAAA,CAAA,IAAA;AAAA,MACHC,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACWC,gBAAY,CAAA;AAAA,UAC9B,UAAU,OAAQ,CAAA;AAAA,SACnB,CAAA;AAAA;AAAA,QACmBC,qBAAgB,IAAI,CAAA;AAAA;AAAA,QACpB,MAAA;AAAA;AAAA,QACAC,eAAwBL,gBAAgB,EAAA;AAAA,UAC1D,IAAM,EAAAM,eAAA,CAAU,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AAAA,UAClC,GAAK,EAAA;AAAA,SACN;AAAA;AACH,KACF;AAAA;AAGF,EAAO,OAAAJ,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAC9C;;;;"}
|
|
745
|
-
|
|
746
|
-
diff --git a/dist/transform/webhooks-object.mjs.map b/dist/transform/webhooks-object.mjs.map
|
|
747
|
-
index 6e0df8932f95eb82969b1f810ce7919b6d5a2ad0..c042702935befb5ad51f3c9fdb2852b0dcec459e 100644
|
|
748
|
-
--- a/dist/transform/webhooks-object.mjs.map
|
|
749
|
-
+++ b/dist/transform/webhooks-object.mjs.map
|
|
750
|
-
@@ -1 +1 @@
|
|
751
|
-
-{"version":3,"file":"webhooks-object.mjs","sources":["../../src/transform/webhooks-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { GlobalContext, WebhooksObject } from \"../types.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\n\nexport default function transformWebhooksObject(webhooksObject: WebhooksObject, options: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [name, pathItemObject] of getEntries(webhooksObject, options)) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.immutable,\n }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ undefined,\n /* type */ transformPathItemObject(pathItemObject, {\n path: createRef([\"webhooks\", name]),\n ctx: options,\n }),\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":[],"mappings":";;;;;AAMA,SAAwB,uBAAA,CAAwB,gBAAgC,OAAA,EAAqC;AACnH,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,cAAc,KAAK,UAAA,CAAW,cAAA,EAAgB,OAAO,CAAA,EAAG;AACxE,IAAA,IAAA,CAAK,IAAA;AAAA,MACH,GAAG,OAAA,CAAQ,uBAAA;AAAA;AAAA,QACW,WAAA,CAAY;AAAA,UAC9B,UAAU,OAAA,CAAQ;AAAA,SACnB,CAAA;AAAA;AAAA,QACmB,gBAAgB,IAAI,CAAA;AAAA;AAAA,QACpB,MAAA;AAAA;AAAA,QACA,wBAAwB,cAAA,EAAgB;AAAA,UAC1D,IAAA,EAAM,SAAA,CAAU,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AAAA,UAClC,GAAA,EAAK;AAAA,SACN;AAAA;AACH,KACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAA,CAAG,OAAA,CAAQ,qBAAA,CAAsB,IAAI,CAAA;AAC9C;;;;"}
|
|
752
|
-
|
|
753
|
-
+{"version":3,"file":"webhooks-object.mjs","sources":["../../src/transform/webhooks-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { GlobalContext, WebhooksObject } from \"../types.js\";\nimport transformPathItemObject from \"./path-item-object.js\";\n\nexport default function transformWebhooksObject(webhooksObject: WebhooksObject, options: GlobalContext): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n for (const [name, pathItemObject] of getEntries(webhooksObject, options)) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.immutable,\n }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ undefined,\n /* type */ transformPathItemObject(pathItemObject, {\n path: createRef([\"webhooks\", name]),\n ctx: options,\n }),\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":[],"mappings":";;;;;AAMwB,SAAA,uBAAA,CAAwB,gBAAgC,OAAqC,EAAA;AACnH,EAAA,MAAM,OAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,IAAM,EAAA,cAAc,KAAK,UAAW,CAAA,cAAA,EAAgB,OAAO,CAAG,EAAA;AACxE,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACW,WAAY,CAAA;AAAA,UAC9B,UAAU,OAAQ,CAAA;AAAA,SACnB,CAAA;AAAA;AAAA,QACmB,gBAAgB,IAAI,CAAA;AAAA;AAAA,QACpB,MAAA;AAAA;AAAA,QACA,wBAAwB,cAAgB,EAAA;AAAA,UAC1D,IAAM,EAAA,SAAA,CAAU,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AAAA,UAClC,GAAK,EAAA;AAAA,SACN;AAAA;AACH,KACF;AAAA;AAGF,EAAO,OAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAC9C;;;;"}
|
|
679
|
+
+{"version":3,"file":"schema-object.mjs","sources":["../../src/transform/schema-object.ts"],"sourcesContent":["import { parseRef } from \"@redocly/openapi-core/lib/ref-utils.js\";\nimport ts from \"typescript\";\nimport {\n addJSDocComment,\n BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n oapiRef,\n QUESTION_TOKEN,\n STRING,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\n UNDEFINED,\n UNKNOWN,\n} from \"../lib/ts.js\";\nimport { createDiscriminatorProperty, createRef, getEntries } from \"../lib/utils.js\";\nimport type { ReferenceObject, SchemaObject, TransformNodeOptions } from \"../types.js\";\n\n/**\n * Transform SchemaObject nodes (4.8.24)\n * @see https://spec.openapis.org/oas/v3.1.0#schema-object\n */\nexport default function transformSchemaObject(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);\n if (typeof options.ctx.postTransform === \"function\") {\n const postTransformResult = options.ctx.postTransform(type, options);\n if (postTransformResult) {\n return postTransformResult;\n }\n }\n return type;\n}\n\n/**\n * Transform SchemaObjects\n */\nexport function transformSchemaObjectWithComposition(\n schemaObject: SchemaObject | ReferenceObject,\n options: TransformNodeOptions,\n fromAdditionalProperties = false,\n): ts.TypeNode {\n /**\n * Unexpected types & edge cases\n */\n\n // missing/falsy type returns `never`\n if (!schemaObject) {\n return NEVER;\n }\n // `true` returns `unknown` (this exists, but is untyped)\n if ((schemaObject as unknown) === true) {\n return UNKNOWN;\n }\n // for any other unexpected type, throw error\n if (Array.isArray(schemaObject) || typeof schemaObject !== \"object\") {\n throw new Error(\n `Expected SchemaObject, received ${Array.isArray(schemaObject) ? \"Array\" : typeof schemaObject} at ${options.path}`,\n );\n }\n\n /**\n * ReferenceObject\n */\n if (\"$ref\" in schemaObject) {\n return oapiRef(schemaObject.$ref);\n }\n\n /**\n * const (valid for any type)\n */\n if (schemaObject.const !== null && schemaObject.const !== undefined) {\n return tsLiteral(schemaObject.const);\n }\n\n /**\n * enum (non-objects)\n * note: enum is valid for any type, but for objects, handle in oneOf below\n */\n if (\n Array.isArray(schemaObject.enum) &&\n (!(\"type\" in schemaObject) || schemaObject.type !== \"object\") &&\n !(\"properties\" in schemaObject)\n ) {\n const hasAdditionalProperties = \"additionalProperties\" in schemaObject && !!schemaObject.additionalProperties;\n\n if (!hasAdditionalProperties || (schemaObject.type === \"string\" && hasAdditionalProperties)) {\n // hoist enum to top level if string/number enum and option is enabled\n if (shouldTransformToTsEnum(options, schemaObject)) {\n let enumName = parseRef(options.path ?? \"\").pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumName = enumName.replace(\"components/schemas\", \"\");\n const metadata = schemaObject.enum.map((_, i) => ({\n name: schemaObject[\"x-enum-varnames\"]?.[i] ?? schemaObject[\"x-enumNames\"]?.[i],\n description: schemaObject[\"x-enum-descriptions\"]?.[i] ?? schemaObject[\"x-enumDescriptions\"]?.[i],\n }));\n\n // enums can contain null values, but dont want to output them\n let hasNull = false;\n const validSchemaEnums = schemaObject.enum.filter((enumValue) => {\n if (enumValue === null) {\n hasNull = true;\n return false;\n }\n\n return true;\n });\n const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {\n shouldCache: options.ctx.dedupeEnums,\n export: true,\n // readonly: TS enum do not support the readonly modifier\n });\n if (!options.ctx.injectFooter.includes(enumType)) {\n options.ctx.injectFooter.push(enumType);\n }\n const ref = ts.factory.createTypeReferenceNode(enumType.name);\n\n const finalType: ts.TypeNode = hasNull ? tsUnion([ref, NULL]) : ref;\n\n return applyAdditionalPropertiesToEnum(hasAdditionalProperties, finalType, schemaObject);\n }\n\n const enumType = schemaObject.enum.map(tsLiteral);\n if ((Array.isArray(schemaObject.type) && schemaObject.type.includes(\"null\")) || schemaObject.nullable) {\n enumType.push(NULL);\n }\n\n const unionType = applyAdditionalPropertiesToEnum(hasAdditionalProperties, tsUnion(enumType), schemaObject);\n\n // hoist array with valid enum values to top level if string/number enum and option is enabled\n if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === \"string\" || typeof v === \"number\")) {\n const parsed = parseRef(options.path ?? \"\");\n let enumValuesVariableName = parsed.pointer.join(\"/\");\n // allow #/components/schemas to have simpler names\n enumValuesVariableName = enumValuesVariableName.replace(\"components/schemas\", \"\");\n enumValuesVariableName = `${enumValuesVariableName}Values`;\n\n // build a ref path for the type that ignores union indices (anyOf/oneOf) so\n // type references remain stable even when names include union positions\n const cleanedPointer: string[] = [];\n // Track ALL properties after a oneOf/anyOf that need Extract<> narrowing.\n // We apply Extract<> before EVERY property access after a union index because:\n // - When the property exists on ALL variants, Extract<> is a no-op (returns same type)\n // - When the property only exists on SOME variants, it correctly narrows the union\n // - When both variants have same property name but different inner schemas,\n // we still narrow at each level to handle nested unions correctly\n // This robust approach handles both simple and complex union structures.\n const extractProperties: string[] = [];\n for (let i = 0; i < parsed.pointer.length; i++) {\n // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message\n const segment = parsed.pointer[i];\n if ((segment === \"anyOf\" || segment === \"oneOf\") && i < parsed.pointer.length - 1) {\n const next = parsed.pointer[i + 1];\n if (/^\\d+$/.test(next)) {\n // If we encounter something like \"anyOf/0\", we want to skip that part of the path\n i++;\n // Collect ALL remaining segments after the union index.\n // Each one will be wrapped with Extract<> to safely narrow the type\n // at each level, handling both top-level and nested union variants.\n const remainingSegments = parsed.pointer.slice(i + 1);\n for (const seg of remainingSegments) {\n // Skip union keywords and indices, only add actual property names\n if (seg !== \"anyOf\" && seg !== \"oneOf\" && !/^\\d+$/.test(seg)) {\n extractProperties.push(seg);\n }\n }\n continue;\n }\n }\n cleanedPointer.push(segment);\n }\n const cleanedRefPath = createRef(cleanedPointer);\n\n const enumValuesArray = tsArrayLiteralExpression(\n enumValuesVariableName,\n // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type\n fromAdditionalProperties\n ? ts.factory.createIndexedAccessTypeNode(\n oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"string\")),\n )\n : oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),\n schemaObject.enum as (string | number)[],\n {\n export: true,\n readonly: true,\n injectFooter: options.ctx.injectFooter,\n },\n );\n\n options.ctx.injectFooter.push(enumValuesArray);\n }\n\n return unionType;\n }\n }\n\n /**\n * Object + composition (anyOf/allOf/oneOf) types\n */\n\n /** Collect oneOf/anyOf */\n function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: \"anyOf\" | \"oneOf\") {\n const output: ts.TypeNode[] = [];\n for (const [index, item] of items.entries()) {\n output.push(\n transformSchemaObject(item, {\n ...options,\n // include index in path so generated names from nested enums/enumValues are unique\n path: createRef([options.path, unionKey, String(index)]),\n }),\n );\n }\n\n return output;\n }\n\n /** Collect allOf with Omit<> for discriminators */\n function collectAllOfCompositions(items: (SchemaObject | ReferenceObject)[], required?: string[]): ts.TypeNode[] {\n const output: ts.TypeNode[] = [];\n for (const item of items) {\n let itemType: ts.TypeNode;\n // if this is a $ref, use WithRequired<X, Y> if parent specifies required properties\n // (but only for valid keys)\n if (\"$ref\" in item) {\n itemType = transformSchemaObject(item, options);\n\n const resolved = options.ctx.resolve<SchemaObject>(item.$ref);\n\n // make keys required, if necessary\n if (\n resolved &&\n typeof resolved === \"object\" &&\n \"properties\" in resolved &&\n // we have already handled this item (discriminator property was already added as required)\n !options.ctx.discriminators.refsHandled.includes(item.$ref)\n ) {\n // add WithRequired<X, Y> if necessary\n const validRequired = (required ?? []).filter((key) => !!resolved.properties?.[key]);\n if (validRequired.length) {\n itemType = tsWithRequired(itemType, validRequired, options.ctx.injectFooter);\n }\n }\n }\n // otherwise, if this is a schema object, combine parent `required[]` with its own, if any\n else {\n const itemRequired = [...(required ?? [])];\n if (typeof item === \"object\" && Array.isArray(item.required)) {\n itemRequired.push(...item.required);\n }\n itemType = transformSchemaObject({ ...item, required: itemRequired }, options);\n }\n\n output.push(itemType);\n }\n return output;\n }\n\n // compile final type\n let finalType: ts.TypeNode | undefined;\n\n // core + allOf: intersect\n const coreObjectType = transformSchemaObjectCore(schemaObject, options);\n const allOfType = collectAllOfCompositions(schemaObject.allOf ?? [], schemaObject.required);\n if (coreObjectType || allOfType.length) {\n const allOf: ts.TypeNode | undefined = allOfType.length ? tsIntersection(allOfType) : undefined;\n finalType = tsIntersection([...(coreObjectType ? [coreObjectType] : []), ...(allOf ? [allOf] : [])]);\n }\n // anyOf: union\n // (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)\n const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], \"anyOf\");\n if (anyOfType.length) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);\n }\n // oneOf: union (within intersection with other types, if any)\n const oneOfType = collectUnionCompositions(\n schemaObject.oneOf ||\n (\"type\" in schemaObject &&\n schemaObject.type === \"object\" &&\n (schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||\n [],\n \"oneOf\",\n );\n if (oneOfType.length) {\n // note: oneOf is the only type that may include primitives\n if (oneOfType.every(tsIsPrimitive)) {\n finalType = tsUnion([...(finalType ? [finalType] : []), ...oneOfType]);\n } else {\n finalType = tsIntersection([...(finalType ? [finalType] : []), tsUnion(oneOfType)]);\n }\n }\n\n // When no final type can be generated, fall back to unknown type (or related variants)\n if (!finalType) {\n if (\"type\" in schemaObject) {\n finalType = tsRecord(STRING, options.ctx.emptyObjectsUnknown ? UNKNOWN : NEVER);\n } else {\n finalType = UNKNOWN;\n }\n }\n\n if (finalType !== UNKNOWN && schemaObject.nullable) {\n finalType = tsNullable([finalType]);\n }\n\n return finalType;\n}\n\n/**\n * Check if the given OAPI enum should be transformed to a TypeScript enum\n */\nfunction shouldTransformToTsEnum(options: TransformNodeOptions, schemaObject: SchemaObject): boolean {\n // Enum conversion not enabled or no enum present\n if (!options.ctx.enum || !schemaObject.enum) {\n return false;\n }\n\n // Enum must have string, number or null values\n if (!schemaObject.enum.every((v) => [\"string\", \"number\", null].includes(typeof v))) {\n return false;\n }\n\n // If conditionalEnums is enabled, only convert if x-enum-* metadata is present\n if (options.ctx.conditionalEnums) {\n const hasEnumMetadata =\n Array.isArray(schemaObject[\"x-enum-varnames\"]) ||\n Array.isArray(schemaObject[\"x-enumNames\"]) ||\n Array.isArray(schemaObject[\"x-enum-descriptions\"]) ||\n Array.isArray(schemaObject[\"x-enumDescriptions\"]);\n if (!hasEnumMetadata) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Handle SchemaObject minus composition (anyOf/allOf/oneOf)\n */\nfunction transformSchemaObjectCore(schemaObject: SchemaObject, options: TransformNodeOptions): ts.TypeNode | undefined {\n if (\"type\" in schemaObject && schemaObject.type) {\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(schemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n if (result.questionToken) {\n return ts.factory.createUnionTypeNode([result.schema, UNDEFINED]);\n } else {\n return result.schema;\n }\n } else {\n return result;\n }\n }\n }\n\n // primitives\n // type: null\n if (schemaObject.type === \"null\") {\n return NULL;\n }\n // type: string\n if (schemaObject.type === \"string\") {\n return STRING;\n }\n // type: number / type: integer\n if (schemaObject.type === \"number\" || schemaObject.type === \"integer\") {\n return NUMBER;\n }\n // type: boolean\n if (schemaObject.type === \"boolean\") {\n return BOOLEAN;\n }\n\n // type: array (with support for tuples)\n if (schemaObject.type === \"array\") {\n // default to `unknown[]`\n let itemType: ts.TypeNode = UNKNOWN;\n // tuple type\n if (schemaObject.prefixItems || Array.isArray(schemaObject.items)) {\n const prefixItems = schemaObject.prefixItems ?? (schemaObject.items as (SchemaObject | ReferenceObject)[]);\n itemType = ts.factory.createTupleTypeNode(prefixItems.map((item) => transformSchemaObject(item, options)));\n }\n // standard array type\n else if (schemaObject.items) {\n if (hasKey(schemaObject.items, \"type\") && schemaObject.items.type === \"array\") {\n itemType = ts.factory.createArrayTypeNode(transformSchemaObject(schemaObject.items, options));\n } else {\n itemType = transformSchemaObject(schemaObject.items, options);\n }\n }\n\n const min: number =\n typeof schemaObject.minItems === \"number\" && schemaObject.minItems >= 0 ? schemaObject.minItems : 0;\n const max: number | undefined =\n typeof schemaObject.maxItems === \"number\" && schemaObject.maxItems >= 0 && min <= schemaObject.maxItems\n ? schemaObject.maxItems\n : undefined;\n const estimateCodeSize = typeof max !== \"number\" ? min : (max * (max + 1) - min * (min - 1)) / 2;\n if (\n options.ctx.arrayLength &&\n (min !== 0 || max !== undefined) &&\n estimateCodeSize < 30 // \"30\" is an arbitrary number but roughly around when TS starts to struggle with tuple inference in practice\n ) {\n if (min === max) {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n return tsUnion([ts.factory.createTupleTypeNode(elements)]);\n } else if ((schemaObject.maxItems as number) > 0) {\n // if maxItems is set, then return a union of all permutations of possible tuple types\n const members: ts.TypeNode[] = [];\n // populate 1 short of min …\n for (let i = 0; i <= (max ?? 0) - min; i++) {\n const elements: ts.TypeNode[] = [];\n for (let j = min; j < i + min; j++) {\n elements.push(itemType);\n }\n members.push(ts.factory.createTupleTypeNode(elements));\n }\n return tsUnion(members);\n }\n // if maxItems not set, then return a simple tuple type the length of `min`\n else {\n const elements: ts.TypeNode[] = [];\n for (let i = 0; i < min; i++) {\n elements.push(itemType);\n }\n elements.push(ts.factory.createRestTypeNode(ts.factory.createArrayTypeNode(itemType)));\n return ts.factory.createTupleTypeNode(elements);\n }\n }\n\n const finalType =\n ts.isTupleTypeNode(itemType) || ts.isArrayTypeNode(itemType)\n ? itemType\n : ts.factory.createArrayTypeNode(itemType); // wrap itemType in array type, but only if not a tuple or array already\n\n return options.ctx.immutable\n ? ts.factory.createTypeOperatorNode(ts.SyntaxKind.ReadonlyKeyword, finalType)\n : finalType;\n }\n\n // polymorphic, or 3.1 nullable\n if (Array.isArray(schemaObject.type) && !Array.isArray(schemaObject)) {\n // skip any primitive types that appear in oneOf as well\n const uniqueTypes: ts.TypeNode[] = [];\n if (Array.isArray(schemaObject.oneOf)) {\n for (const t of schemaObject.type) {\n if (\n (t === \"boolean\" || t === \"string\" || t === \"number\" || t === \"integer\" || t === \"null\") &&\n schemaObject.oneOf.find((o) => typeof o === \"object\" && \"type\" in o && o.type === t)\n ) {\n continue;\n }\n uniqueTypes.push(\n t === \"null\" || t === null\n ? NULL\n : transformSchemaObject(\n { ...schemaObject, type: t, oneOf: undefined } as SchemaObject, // don’t stack oneOf transforms\n options,\n ),\n );\n }\n } else {\n for (const t of schemaObject.type) {\n if (t === \"null\" || t === null) {\n uniqueTypes.push(NULL);\n } else {\n uniqueTypes.push(transformSchemaObject({ ...schemaObject, type: t } as SchemaObject, options));\n }\n }\n }\n return tsUnion(uniqueTypes);\n }\n }\n\n // type: object\n const coreObjectType: ts.TypeElement[] = [];\n\n // discriminators: explicit mapping on schema object\n for (const k of [\"allOf\", \"anyOf\"] as const) {\n if (!schemaObject[k]) {\n continue;\n }\n // for all magic inheritance, we will have already gathered it into\n // ctx.discriminators. But stop objects from referencing their own\n // discriminator meant for children (!schemaObject.discriminator)\n // and don't add discriminator properties if we already added/patched\n // them (options.ctx.discriminators.refsHandled.includes(options.path!).\n const discriminator =\n !schemaObject.discriminator &&\n !options.ctx.discriminators.refsHandled.includes(options.path ?? \"\") &&\n options.ctx.discriminators.objects[options.path ?? \"\"];\n if (discriminator) {\n coreObjectType.unshift(\n createDiscriminatorProperty(discriminator, {\n path: options.path ?? \"\",\n readonly: options.ctx.immutable,\n }),\n );\n break;\n }\n }\n\n if (\n (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject.properties).length) ||\n (\"additionalProperties\" in schemaObject && schemaObject.additionalProperties) ||\n (\"patternProperties\" in schemaObject && schemaObject.patternProperties) ||\n (\"$defs\" in schemaObject && schemaObject.$defs)\n ) {\n // properties\n if (\"properties\" in schemaObject && schemaObject.properties && Object.keys(schemaObject?.properties).length) {\n for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {\n if ((typeof v !== \"object\" && typeof v !== \"boolean\") || Array.isArray(v)) {\n throw new Error(\n `${options.path}: invalid property ${k}. Expected Schema Object or boolean, got ${\n Array.isArray(v) ? \"Array\" : typeof v\n }`,\n );\n }\n\n const { $ref, readOnly, writeOnly, hasDefault } =\n typeof v === \"object\"\n ? {\n $ref: \"$ref\" in v && v.$ref,\n readOnly: \"readOnly\" in v && v.readOnly,\n writeOnly: \"writeOnly\" in v && v.writeOnly,\n hasDefault: \"default\" in v && v.default !== undefined,\n }\n : {};\n\n // handle excludeDeprecated option\n if (options.ctx.excludeDeprecated) {\n const resolved = $ref ? options.ctx.resolve<SchemaObject>($ref) : v;\n if ((resolved as SchemaObject)?.deprecated) {\n continue;\n }\n }\n let optional =\n schemaObject.required?.includes(k) ||\n (schemaObject.required === undefined && options.ctx.propertiesRequiredByDefault) ||\n (hasDefault &&\n options.ctx.defaultNonNullable &&\n !options.path?.includes(\"parameters\") &&\n !options.path?.includes(\"requestBody\") &&\n !options.path?.includes(\"requestBodies\")) // can’t be required, even with defaults\n ? undefined\n : QUESTION_TOKEN;\n let type = $ref\n ? oapiRef($ref)\n : transformSchemaObject(v, {\n ...options,\n path: createRef([options.path, k]),\n });\n\n if (typeof options.ctx.transform === \"function\") {\n const result = options.ctx.transform(v as SchemaObject, options);\n if (result && typeof result === \"object\") {\n if (\"schema\" in result) {\n type = result.schema;\n optional = result.questionToken ? QUESTION_TOKEN : optional;\n } else {\n type = result;\n }\n }\n }\n\n type = wrapWithReadWriteMarker(type, !!readOnly, !!writeOnly, options.ctx);\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && readOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ optional,\n /* type */ type,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n coreObjectType.push(property);\n }\n }\n\n // $defs\n if (\"$defs\" in schemaObject && typeof schemaObject.$defs === \"object\" && Object.keys(schemaObject.$defs).length) {\n const defKeys: ts.TypeElement[] = [];\n for (const [k, v] of Object.entries(schemaObject.$defs)) {\n const defReadOnly = \"readOnly\" in v && !!v.readOnly;\n const defWriteOnly = \"writeOnly\" in v && !!v.writeOnly;\n const defType = wrapWithReadWriteMarker(\n transformSchemaObject(v, { ...options, path: createRef([options.path, \"$defs\", k]) }),\n defReadOnly,\n defWriteOnly,\n options.ctx,\n );\n\n let property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable || (!options.ctx.readWriteMarkers && defReadOnly),\n }),\n /* name */ tsPropertyIndex(k),\n /* questionToken */ undefined,\n /* type */ defType,\n );\n\n // Apply transformProperty hook if available\n if (typeof options.ctx.transformProperty === \"function\") {\n const result = options.ctx.transformProperty(property, v as SchemaObject, {\n ...options,\n path: createRef([options.path, \"$defs\", k]),\n });\n if (result) {\n property = result;\n }\n }\n\n addJSDocComment(v, property);\n defKeys.push(property);\n }\n coreObjectType.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"$defs\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(defKeys),\n ),\n );\n }\n\n // additionalProperties / patternProperties\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const hasImplicitAdditionalProperties =\n schemaObject.additionalProperties === true ||\n (typeof schemaObject.additionalProperties === \"object\" &&\n Object.keys(schemaObject.additionalProperties).length === 0);\n const patternProperties = hasKey(schemaObject, \"patternProperties\") ? schemaObject.patternProperties : undefined;\n const hasExplicitPatternProperties =\n typeof patternProperties === \"object\" && patternProperties !== null && Object.keys(patternProperties).length > 0;\n const stringIndexTypes = [];\n if (hasExplicitAdditionalProperties) {\n stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));\n }\n if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {\n stringIndexTypes.push(UNKNOWN);\n }\n if (hasExplicitPatternProperties && patternProperties && typeof patternProperties === \"object\") {\n for (const [_, v] of getEntries(\n patternProperties as Record<string, SchemaObject | ReferenceObject>,\n options.ctx,\n )) {\n stringIndexTypes.push(transformSchemaObject(v, options));\n }\n }\n\n if (stringIndexTypes.length === 0) {\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n }\n\n const stringIndexType = tsUnion(stringIndexTypes);\n\n return tsIntersection([\n ...(coreObjectType.length ? [ts.factory.createTypeLiteralNode(coreObjectType)] : []),\n ts.factory.createTypeLiteralNode([\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({\n readonly: options.ctx.immutable,\n }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"key\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ stringIndexType,\n ),\n ]),\n ]);\n }\n\n return coreObjectType.length ? ts.factory.createTypeLiteralNode(coreObjectType) : undefined;\n}\n\n/**\n * Check if an object has a key\n * @param possibleObject - The object to check\n * @param key - The key to check for\n * @returns True if the object has the key, false otherwise\n */\nfunction hasKey<K extends string>(possibleObject: unknown, key: K): possibleObject is { [key in K]: unknown } {\n return typeof possibleObject === \"object\" && possibleObject !== null && key in possibleObject;\n}\n\nfunction applyAdditionalPropertiesToEnum(\n hasAdditionalProperties: boolean,\n unionType: ts.TypeNode,\n schemaObject: SchemaObject,\n) {\n // If additionalProperties is true, add (string & {}) to the union\n if (hasAdditionalProperties && schemaObject.type === \"string\") {\n const stringAndEmptyObject = tsIntersection([STRING, ts.factory.createTypeLiteralNode([])]);\n return tsUnion([unionType, stringAndEmptyObject]);\n }\n return unionType;\n}\n\n/** Wrap type with $Read or $Write marker when readWriteMarkers flag is enabled */\nfunction wrapWithReadWriteMarker(\n type: ts.TypeNode,\n readOnly: boolean,\n writeOnly: boolean,\n ctx: { readWriteMarkers: boolean },\n): ts.TypeNode {\n if (!ctx.readWriteMarkers || (readOnly && writeOnly)) {\n return type;\n }\n if (readOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Read\"), [type]);\n }\n if (writeOnly) {\n return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(\"$Write\"), [type]);\n }\n return type;\n}\n"],"names":["enumType","finalType"],"mappings":"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"}
|
|
754
680
|
|
|
755
681
|
diff --git a/package/dist/index.cjs b/package/dist/index.cjs
|
|
756
682
|
new file mode 100644
|
|
@@ -6857,64 +6783,29 @@ index 0000000000000000000000000000000000000000..c768b79002615c0e69cc6efdcad6a509
|
|
|
6857
6783
|
@@ -0,0 +1 @@
|
|
6858
6784
|
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
6859
6785
|
|
|
6860
|
-
diff --git a/
|
|
6861
|
-
index
|
|
6862
|
-
--- a/
|
|
6863
|
-
+++ b/
|
|
6864
|
-
@@ -
|
|
6865
|
-
|
|
6866
|
-
|
|
6867
|
-
|
|
6868
|
-
|
|
6869
|
-
|
|
6870
|
-
|
|
6871
|
-
|
|
6872
|
-
|
|
6873
|
-
|
|
6874
|
-
|
|
6875
|
-
|
|
6876
|
-
|
|
6877
|
-
-
|
|
6878
|
-
|
|
6879
|
-
|
|
6880
|
-
|
|
6881
|
-
...leadingSegments,
|
|
6882
|
-
);
|
|
6883
|
-
|
|
6884
|
-
@@ -305,6 +307,18 @@ export function tsArrayLiteralExpression(
|
|
6885
|
-
let variableName = sanitizeMemberName(name);
|
|
6886
|
-
variableName = `${variableName[0].toLowerCase()}${variableName.substring(1)}`;
|
|
6887
|
-
|
|
6888
|
-
+ if (
|
|
6889
|
-
+ options?.injectFooter &&
|
|
6890
|
-
+ !options.injectFooter.some(
|
|
6891
|
-
+ (node) => ts.isTypeAliasDeclaration(node) && node?.name?.escapedText === "FlattenedDeepRequired",
|
|
6892
|
-
+ )
|
|
6893
|
-
+ ) {
|
|
6894
|
-
+ const helper = stringToAST(
|
|
6895
|
-
+ "type FlattenedDeepRequired<T> = { [K in keyof T]-?: FlattenedDeepRequired<T[K] extends unknown[] | undefined | null ? Extract<T[K], unknown[]>[number] : T[K]>; };",
|
|
6896
|
-
+ )[0] as any;
|
|
6897
|
-
+ options.injectFooter.push(helper);
|
|
6898
|
-
+ }
|
|
6899
|
-
+
|
|
6900
|
-
const arrayType = options?.readonly
|
|
6901
|
-
? tsReadonlyArray(elementType, options.injectFooter)
|
|
6902
|
-
: ts.factory.createArrayTypeNode(elementType);
|
|
6903
|
-
diff --git a/src/transform/request-body-object.ts b/src/transform/request-body-object.ts
|
|
6904
|
-
index 1c26664044c1ee4a40c48ef5bcf31f5efb48325e..3c641c4757f635dfa745c8484917afd67365748f 100644
|
|
6905
|
-
--- a/src/transform/request-body-object.ts
|
|
6906
|
-
+++ b/src/transform/request-body-object.ts
|
|
6907
|
-
@@ -15,7 +15,7 @@ export default function transformRequestBodyObject(
|
|
6908
|
-
): ts.TypeNode {
|
|
6909
|
-
const type: ts.TypeElement[] = [];
|
|
6910
|
-
for (const [contentType, mediaTypeObject] of getEntries(requestBodyObject.content ?? {}, options.ctx)) {
|
|
6911
|
-
- const nextPath = createRef([options.path, contentType]);
|
|
6912
|
-
+ const nextPath = createRef([options.path, "content", contentType]);
|
|
6913
|
-
const mediaType =
|
|
6914
|
-
"$ref" in mediaTypeObject
|
|
6915
|
-
? transformSchemaObject(mediaTypeObject, {
|
|
6786
|
+
diff --git a/package.json b/package.json
|
|
6787
|
+
index 4893afdec25f506f62d44f64fe0861c411cb7fae..8da19442a2d78a8d9d0ac19cea4d16eeb64506f7 100644
|
|
6788
|
+
--- a/package.json
|
|
6789
|
+
+++ b/package.json
|
|
6790
|
+
@@ -49,6 +49,7 @@
|
|
6791
|
+
"ansi-colors": "^4.1.3",
|
|
6792
|
+
"change-case": "^5.4.4",
|
|
6793
|
+
"parse-json": "^8.3.0",
|
|
6794
|
+
+ "scule": "^1.3.0",
|
|
6795
|
+
"supports-color": "^10.2.2",
|
|
6796
|
+
"yargs-parser": "^21.1.1"
|
|
6797
|
+
},
|
|
6798
|
+
@@ -57,7 +58,7 @@
|
|
6799
|
+
"@types/js-yaml": "4.0.9",
|
|
6800
|
+
"degit": "2.8.4",
|
|
6801
|
+
"execa": "^9.6.1",
|
|
6802
|
+
- "strip-ansi": "7.1.2",
|
|
6803
|
+
+ "strip-ansi": "7.2.0",
|
|
6804
|
+
"typescript": "^5.9.3",
|
|
6805
|
+
"vite-node": "5.3.0"
|
|
6806
|
+
},
|
|
6916
6807
|
diff --git a/src/transform/schema-object.ts b/src/transform/schema-object.ts
|
|
6917
|
-
index
|
|
6808
|
+
index 58745d072e4c8362a5f979c9d02fa04ecd14345a..20196ea453b93a4a9a956c24dc8f343d8a89492d 100644
|
|
6918
6809
|
--- a/src/transform/schema-object.ts
|
|
6919
6810
|
+++ b/src/transform/schema-object.ts
|
|
6920
6811
|
@@ -16,7 +16,6 @@ import {
|
|
@@ -6925,88 +6816,221 @@ index 9e3af3dbfc81b93b53da1190a6e4a882b7d443ad..89684b0e5cc368903670bc939307c92b
|
|
|
6925
6816
|
tsPropertyIndex,
|
|
6926
6817
|
tsRecord,
|
|
6927
6818
|
tsUnion,
|
|
6928
|
-
@@ -
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
6933
|
-
)
|
|
6934
|
-
|
|
6935
|
-
|
|
6936
|
-
|
|
6937
|
-
|
|
6938
|
-
|
|
6939
|
-
|
|
6940
|
-
|
|
6941
|
-
|
|
6942
|
-
|
|
6943
|
-
|
|
6944
|
-
|
|
6945
|
-
|
|
6946
|
-
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
-
|
|
6952
|
-
+
|
|
6953
|
-
+
|
|
6954
|
-
|
|
6955
|
-
|
|
6956
|
-
|
|
6957
|
-
|
|
6958
|
-
+
|
|
6959
|
-
+
|
|
6960
|
-
+
|
|
6961
|
-
+
|
|
6962
|
-
+
|
|
6963
|
-
+
|
|
6964
|
-
+
|
|
6965
|
-
+
|
|
6966
|
-
+
|
|
6967
|
-
+
|
|
6968
|
-
+
|
|
6969
|
-
+
|
|
6819
|
+
@@ -94,112 +93,119 @@ export function transformSchemaObjectWithComposition(
|
|
6820
|
+
if (
|
|
6821
|
+
Array.isArray(schemaObject.enum) &&
|
|
6822
|
+
(!("type" in schemaObject) || schemaObject.type !== "object") &&
|
|
6823
|
+
- !("properties" in schemaObject) &&
|
|
6824
|
+
- !("additionalProperties" in schemaObject)
|
|
6825
|
+
+ !("properties" in schemaObject)
|
|
6826
|
+
) {
|
|
6827
|
+
- // hoist enum to top level if string/number enum and option is enabled
|
|
6828
|
+
- if (shouldTransformToTsEnum(options, schemaObject)) {
|
|
6829
|
+
- let enumName = parseRef(options.path ?? "").pointer.join("/");
|
|
6830
|
+
- // allow #/components/schemas to have simpler names
|
|
6831
|
+
- enumName = enumName.replace("components/schemas", "");
|
|
6832
|
+
- const metadata = schemaObject.enum.map((_, i) => ({
|
|
6833
|
+
- name: schemaObject["x-enum-varnames"]?.[i] ?? schemaObject["x-enumNames"]?.[i],
|
|
6834
|
+
- description: schemaObject["x-enum-descriptions"]?.[i] ?? schemaObject["x-enumDescriptions"]?.[i],
|
|
6835
|
+
- }));
|
|
6836
|
+
-
|
|
6837
|
+
- // enums can contain null values, but dont want to output them
|
|
6838
|
+
- let hasNull = false;
|
|
6839
|
+
- const validSchemaEnums = schemaObject.enum.filter((enumValue) => {
|
|
6840
|
+
- if (enumValue === null) {
|
|
6841
|
+
- hasNull = true;
|
|
6842
|
+
- return false;
|
|
6843
|
+
+ const hasAdditionalProperties = "additionalProperties" in schemaObject && !!schemaObject.additionalProperties;
|
|
6844
|
+
+
|
|
6845
|
+
+ if (!hasAdditionalProperties || (schemaObject.type === "string" && hasAdditionalProperties)) {
|
|
6846
|
+
+ // hoist enum to top level if string/number enum and option is enabled
|
|
6847
|
+
+ if (shouldTransformToTsEnum(options, schemaObject)) {
|
|
6848
|
+
+ let enumName = parseRef(options.path ?? "").pointer.join("/");
|
|
6849
|
+
+ // allow #/components/schemas to have simpler names
|
|
6850
|
+
+ enumName = enumName.replace("components/schemas", "");
|
|
6851
|
+
+ const metadata = schemaObject.enum.map((_, i) => ({
|
|
6852
|
+
+ name: schemaObject["x-enum-varnames"]?.[i] ?? schemaObject["x-enumNames"]?.[i],
|
|
6853
|
+
+ description: schemaObject["x-enum-descriptions"]?.[i] ?? schemaObject["x-enumDescriptions"]?.[i],
|
|
6854
|
+
+ }));
|
|
6855
|
+
+
|
|
6856
|
+
+ // enums can contain null values, but dont want to output them
|
|
6857
|
+
+ let hasNull = false;
|
|
6858
|
+
+ const validSchemaEnums = schemaObject.enum.filter((enumValue) => {
|
|
6859
|
+
+ if (enumValue === null) {
|
|
6860
|
+
+ hasNull = true;
|
|
6861
|
+
+ return false;
|
|
6970
6862
|
+ }
|
|
6971
|
-
+
|
|
6972
|
-
+
|
|
6863
|
+
+
|
|
6864
|
+
+ return true;
|
|
6865
|
+
+ });
|
|
6866
|
+
+ const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {
|
|
6867
|
+
+ shouldCache: options.ctx.dedupeEnums,
|
|
6868
|
+
+ export: true,
|
|
6869
|
+
+ // readonly: TS enum do not support the readonly modifier
|
|
6870
|
+
+ });
|
|
6871
|
+
+ if (!options.ctx.injectFooter.includes(enumType)) {
|
|
6872
|
+
+ options.ctx.injectFooter.push(enumType);
|
|
6873
|
+
}
|
|
6874
|
+
+ const ref = ts.factory.createTypeReferenceNode(enumType.name);
|
|
6875
|
+
|
|
6876
|
+
- return true;
|
|
6877
|
+
- });
|
|
6878
|
+
- const enumType = tsEnum(enumName, validSchemaEnums as (string | number)[], metadata, {
|
|
6879
|
+
- shouldCache: options.ctx.dedupeEnums,
|
|
6880
|
+
- export: true,
|
|
6881
|
+
- // readonly: TS enum do not support the readonly modifier
|
|
6882
|
+
- });
|
|
6883
|
+
- if (!options.ctx.injectFooter.includes(enumType)) {
|
|
6884
|
+
- options.ctx.injectFooter.push(enumType);
|
|
6885
|
+
+ const finalType: ts.TypeNode = hasNull ? tsUnion([ref, NULL]) : ref;
|
|
6886
|
+
+
|
|
6887
|
+
+ return applyAdditionalPropertiesToEnum(hasAdditionalProperties, finalType, schemaObject);
|
|
6973
6888
|
+ }
|
|
6974
|
-
+ const cleanedRefPath = createRef(cleanedPointer);
|
|
6975
6889
|
+
|
|
6976
|
-
|
|
6977
|
-
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
|
|
6983
|
-
|
|
6984
|
-
|
|
6985
|
-
|
|
6986
|
-
|
|
6987
|
-
{
|
|
6988
|
-
export: true,
|
|
6989
|
-
@@ -165,10 +191,16 @@ export function transformSchemaObjectWithComposition(
|
|
6990
|
-
*/
|
|
6890
|
+
+ const enumType = schemaObject.enum.map(tsLiteral);
|
|
6891
|
+
+ if ((Array.isArray(schemaObject.type) && schemaObject.type.includes("null")) || schemaObject.nullable) {
|
|
6892
|
+
+ enumType.push(NULL);
|
|
6893
|
+
}
|
|
6894
|
+
- const ref = ts.factory.createTypeReferenceNode(enumType.name);
|
|
6895
|
+
- return hasNull ? tsUnion([ref, NULL]) : ref;
|
|
6896
|
+
- }
|
|
6897
|
+
- const enumType = schemaObject.enum.map(tsLiteral);
|
|
6898
|
+
- if ((Array.isArray(schemaObject.type) && schemaObject.type.includes("null")) || schemaObject.nullable) {
|
|
6899
|
+
- enumType.push(NULL);
|
|
6900
|
+
- }
|
|
6991
6901
|
|
|
6992
|
-
|
|
6993
|
-
-
|
|
6994
|
-
|
|
6995
|
-
|
|
6996
|
-
-
|
|
6997
|
-
-
|
|
6998
|
-
|
|
6999
|
-
|
|
7000
|
-
|
|
7001
|
-
|
|
7002
|
-
|
|
7003
|
-
|
|
7004
|
-
|
|
7005
|
-
|
|
6902
|
+
- const unionType = tsUnion(enumType);
|
|
6903
|
+
-
|
|
6904
|
+
- // hoist array with valid enum values to top level if string/number enum and option is enabled
|
|
6905
|
+
- if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
6906
|
+
- const parsed = parseRef(options.path ?? "");
|
|
6907
|
+
- let enumValuesVariableName = parsed.pointer.join("/");
|
|
6908
|
+
- // allow #/components/schemas to have simpler names
|
|
6909
|
+
- enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
6910
|
+
- enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
6911
|
+
-
|
|
6912
|
+
- // build a ref path for the type that ignores union indices (anyOf/oneOf) so
|
|
6913
|
+
- // type references remain stable even when names include union positions
|
|
6914
|
+
- const cleanedPointer: string[] = [];
|
|
6915
|
+
- // Track ALL properties after a oneOf/anyOf that need Extract<> narrowing.
|
|
6916
|
+
- // We apply Extract<> before EVERY property access after a union index because:
|
|
6917
|
+
- // - When the property exists on ALL variants, Extract<> is a no-op (returns same type)
|
|
6918
|
+
- // - When the property only exists on SOME variants, it correctly narrows the union
|
|
6919
|
+
- // - When both variants have same property name but different inner schemas,
|
|
6920
|
+
- // we still narrow at each level to handle nested unions correctly
|
|
6921
|
+
- // This robust approach handles both simple and complex union structures.
|
|
6922
|
+
- const extractProperties: string[] = [];
|
|
6923
|
+
- for (let i = 0; i < parsed.pointer.length; i++) {
|
|
6924
|
+
- // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message
|
|
6925
|
+
- const segment = parsed.pointer[i];
|
|
6926
|
+
- if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
6927
|
+
- const next = parsed.pointer[i + 1];
|
|
6928
|
+
- if (/^\d+$/.test(next)) {
|
|
6929
|
+
- // If we encounter something like "anyOf/0", we want to skip that part of the path
|
|
6930
|
+
- i++;
|
|
6931
|
+
- // Collect ALL remaining segments after the union index.
|
|
6932
|
+
- // Each one will be wrapped with Extract<> to safely narrow the type
|
|
6933
|
+
- // at each level, handling both top-level and nested union variants.
|
|
6934
|
+
- const remainingSegments = parsed.pointer.slice(i + 1);
|
|
6935
|
+
- for (const seg of remainingSegments) {
|
|
6936
|
+
- // Skip union keywords and indices, only add actual property names
|
|
6937
|
+
- if (seg !== "anyOf" && seg !== "oneOf" && !/^\d+$/.test(seg)) {
|
|
6938
|
+
- extractProperties.push(seg);
|
|
6939
|
+
+ const unionType = applyAdditionalPropertiesToEnum(hasAdditionalProperties, tsUnion(enumType), schemaObject);
|
|
6940
|
+
+
|
|
6941
|
+
+ // hoist array with valid enum values to top level if string/number enum and option is enabled
|
|
6942
|
+
+ if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
6943
|
+
+ const parsed = parseRef(options.path ?? "");
|
|
6944
|
+
+ let enumValuesVariableName = parsed.pointer.join("/");
|
|
6945
|
+
+ // allow #/components/schemas to have simpler names
|
|
6946
|
+
+ enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
6947
|
+
+ enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
6948
|
+
+
|
|
6949
|
+
+ // build a ref path for the type that ignores union indices (anyOf/oneOf) so
|
|
6950
|
+
+ // type references remain stable even when names include union positions
|
|
6951
|
+
+ const cleanedPointer: string[] = [];
|
|
6952
|
+
+ // Track ALL properties after a oneOf/anyOf that need Extract<> narrowing.
|
|
6953
|
+
+ // We apply Extract<> before EVERY property access after a union index because:
|
|
6954
|
+
+ // - When the property exists on ALL variants, Extract<> is a no-op (returns same type)
|
|
6955
|
+
+ // - When the property only exists on SOME variants, it correctly narrows the union
|
|
6956
|
+
+ // - When both variants have same property name but different inner schemas,
|
|
6957
|
+
+ // we still narrow at each level to handle nested unions correctly
|
|
6958
|
+
+ // This robust approach handles both simple and complex union structures.
|
|
6959
|
+
+ const extractProperties: string[] = [];
|
|
6960
|
+
+ for (let i = 0; i < parsed.pointer.length; i++) {
|
|
6961
|
+
+ // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message
|
|
6962
|
+
+ const segment = parsed.pointer[i];
|
|
6963
|
+
+ if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
6964
|
+
+ const next = parsed.pointer[i + 1];
|
|
6965
|
+
+ if (/^\d+$/.test(next)) {
|
|
6966
|
+
+ // If we encounter something like "anyOf/0", we want to skip that part of the path
|
|
6967
|
+
+ i++;
|
|
6968
|
+
+ // Collect ALL remaining segments after the union index.
|
|
6969
|
+
+ // Each one will be wrapped with Extract<> to safely narrow the type
|
|
6970
|
+
+ // at each level, handling both top-level and nested union variants.
|
|
6971
|
+
+ const remainingSegments = parsed.pointer.slice(i + 1);
|
|
6972
|
+
+ for (const seg of remainingSegments) {
|
|
6973
|
+
+ // Skip union keywords and indices, only add actual property names
|
|
6974
|
+
+ if (seg !== "anyOf" && seg !== "oneOf" && !/^\d+$/.test(seg)) {
|
|
6975
|
+
+ extractProperties.push(seg);
|
|
6976
|
+
+ }
|
|
6977
|
+
}
|
|
6978
|
+
+ continue;
|
|
6979
|
+
}
|
|
6980
|
+
- continue;
|
|
6981
|
+
}
|
|
6982
|
+
+ cleanedPointer.push(segment);
|
|
6983
|
+
}
|
|
6984
|
+
- cleanedPointer.push(segment);
|
|
6985
|
+
+ const cleanedRefPath = createRef(cleanedPointer);
|
|
6986
|
+
+
|
|
6987
|
+
+ const enumValuesArray = tsArrayLiteralExpression(
|
|
6988
|
+
+ enumValuesVariableName,
|
|
6989
|
+
+ // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
6990
|
+
+ fromAdditionalProperties
|
|
6991
|
+
+ ? ts.factory.createIndexedAccessTypeNode(
|
|
6992
|
+
+ oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),
|
|
6993
|
+
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("string")),
|
|
6994
|
+
+ )
|
|
6995
|
+
+ : oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),
|
|
6996
|
+
+ schemaObject.enum as (string | number)[],
|
|
6997
|
+
+ {
|
|
6998
|
+
+ export: true,
|
|
6999
|
+
+ readonly: true,
|
|
7000
|
+
+ injectFooter: options.ctx.injectFooter,
|
|
7001
|
+
+ },
|
|
7002
|
+
+ );
|
|
7003
|
+
+
|
|
7004
|
+
+ options.ctx.injectFooter.push(enumValuesArray);
|
|
7005
|
+
}
|
|
7006
|
+
- const cleanedRefPath = createRef(cleanedPointer);
|
|
7007
|
+
-
|
|
7008
|
+
- const enumValuesArray = tsArrayLiteralExpression(
|
|
7009
|
+
- enumValuesVariableName,
|
|
7010
|
+
- // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
7011
|
+
- fromAdditionalProperties
|
|
7012
|
+
- ? ts.factory.createIndexedAccessTypeNode(
|
|
7013
|
+
- oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),
|
|
7014
|
+
- ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("string")),
|
|
7015
|
+
- )
|
|
7016
|
+
- : oapiRef(cleanedRefPath, undefined, { deep: true, extractProperties }),
|
|
7017
|
+
- schemaObject.enum as (string | number)[],
|
|
7018
|
+
- {
|
|
7019
|
+
- export: true,
|
|
7020
|
+
- readonly: true,
|
|
7021
|
+
- injectFooter: options.ctx.injectFooter,
|
|
7022
|
+
- },
|
|
7023
|
+
- );
|
|
7024
|
+
|
|
7025
|
+
- options.ctx.injectFooter.push(enumValuesArray);
|
|
7026
|
+
+ return unionType;
|
|
7006
7027
|
}
|
|
7028
|
+
-
|
|
7029
|
+
- return unionType;
|
|
7030
|
+
}
|
|
7007
7031
|
|
|
7008
|
-
|
|
7009
|
-
@@ -
|
|
7032
|
+
/**
|
|
7033
|
+
@@ -258,13 +264,7 @@ export function transformSchemaObjectWithComposition(
|
|
7010
7034
|
itemType = transformSchemaObject({ ...item, required: itemRequired }, options);
|
|
7011
7035
|
}
|
|
7012
7036
|
|
|
@@ -7021,29 +7045,78 @@ index 9e3af3dbfc81b93b53da1190a6e4a882b7d443ad..89684b0e5cc368903670bc939307c92b
|
|
|
7021
7045
|
}
|
|
7022
7046
|
return output;
|
|
7023
7047
|
}
|
|
7024
|
-
@@ -
|
|
7025
|
-
|
|
7026
|
-
|
|
7027
|
-
|
|
7028
|
-
-
|
|
7029
|
-
+
|
|
7030
|
-
|
|
7031
|
-
|
|
7032
|
-
|
|
7033
|
-
@@ -
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
|
|
7048
|
+
@@ -525,7 +525,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
|
|
7049
|
+
("$defs" in schemaObject && schemaObject.$defs)
|
|
7050
|
+
) {
|
|
7051
|
+
// properties
|
|
7052
|
+
- if (Object.keys(schemaObject.properties ?? {}).length) {
|
|
7053
|
+
+ if ("properties" in schemaObject && schemaObject.properties && Object.keys(schemaObject?.properties).length) {
|
|
7054
|
+
for (const [k, v] of getEntries(schemaObject.properties ?? {}, options.ctx)) {
|
|
7055
|
+
if ((typeof v !== "object" && typeof v !== "boolean") || Array.isArray(v)) {
|
|
7056
|
+
throw new Error(
|
|
7057
|
+
@@ -609,7 +609,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
|
|
7058
|
+
}
|
|
7059
|
+
|
|
7060
|
+
// $defs
|
|
7061
|
+
- if (schemaObject.$defs && typeof schemaObject.$defs === "object" && Object.keys(schemaObject.$defs).length) {
|
|
7062
|
+
+ if ("$defs" in schemaObject && typeof schemaObject.$defs === "object" && Object.keys(schemaObject.$defs).length) {
|
|
7063
|
+
const defKeys: ts.TypeElement[] = [];
|
|
7064
|
+
for (const [k, v] of Object.entries(schemaObject.$defs)) {
|
|
7065
|
+
const defReadOnly = "readOnly" in v && !!v.readOnly;
|
|
7066
|
+
@@ -661,8 +661,9 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
|
|
7067
|
+
schemaObject.additionalProperties === true ||
|
|
7068
|
+
(typeof schemaObject.additionalProperties === "object" &&
|
|
7069
|
+
Object.keys(schemaObject.additionalProperties).length === 0);
|
|
7070
|
+
+ const patternProperties = hasKey(schemaObject, "patternProperties") ? schemaObject.patternProperties : undefined;
|
|
7071
|
+
const hasExplicitPatternProperties =
|
|
7072
|
+
- typeof schemaObject.patternProperties === "object" && Object.keys(schemaObject.patternProperties).length;
|
|
7073
|
+
+ typeof patternProperties === "object" && patternProperties !== null && Object.keys(patternProperties).length > 0;
|
|
7043
7074
|
const stringIndexTypes = [];
|
|
7044
7075
|
if (hasExplicitAdditionalProperties) {
|
|
7045
|
-
|
|
7046
|
-
+
|
|
7047
|
-
}
|
|
7076
|
+
stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));
|
|
7077
|
+
@@ -670,8 +671,11 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
|
|
7048
7078
|
if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {
|
|
7049
7079
|
stringIndexTypes.push(UNKNOWN);
|
|
7080
|
+
}
|
|
7081
|
+
- if (hasExplicitPatternProperties) {
|
|
7082
|
+
- for (const [_, v] of getEntries(schemaObject.patternProperties ?? {}, options.ctx)) {
|
|
7083
|
+
+ if (hasExplicitPatternProperties && patternProperties && typeof patternProperties === "object") {
|
|
7084
|
+
+ for (const [_, v] of getEntries(
|
|
7085
|
+
+ patternProperties as Record<string, SchemaObject | ReferenceObject>,
|
|
7086
|
+
+ options.ctx,
|
|
7087
|
+
+ )) {
|
|
7088
|
+
stringIndexTypes.push(transformSchemaObject(v, options));
|
|
7089
|
+
}
|
|
7090
|
+
}
|
|
7091
|
+
@@ -717,6 +721,19 @@ function hasKey<K extends string>(possibleObject: unknown, key: K): possibleObje
|
|
7092
|
+
return typeof possibleObject === "object" && possibleObject !== null && key in possibleObject;
|
|
7093
|
+
}
|
|
7094
|
+
|
|
7095
|
+
+function applyAdditionalPropertiesToEnum(
|
|
7096
|
+
+ hasAdditionalProperties: boolean,
|
|
7097
|
+
+ unionType: ts.TypeNode,
|
|
7098
|
+
+ schemaObject: SchemaObject,
|
|
7099
|
+
+) {
|
|
7100
|
+
+ // If additionalProperties is true, add (string & {}) to the union
|
|
7101
|
+
+ if (hasAdditionalProperties && schemaObject.type === "string") {
|
|
7102
|
+
+ const stringAndEmptyObject = tsIntersection([STRING, ts.factory.createTypeLiteralNode([])]);
|
|
7103
|
+
+ return tsUnion([unionType, stringAndEmptyObject]);
|
|
7104
|
+
+ }
|
|
7105
|
+
+ return unionType;
|
|
7106
|
+
+}
|
|
7107
|
+
+
|
|
7108
|
+
/** Wrap type with $Read or $Write marker when readWriteMarkers flag is enabled */
|
|
7109
|
+
function wrapWithReadWriteMarker(
|
|
7110
|
+
type: ts.TypeNode,
|
|
7111
|
+
diff --git a/src/types.ts b/src/types.ts
|
|
7112
|
+
index 8a511e1e876827f1fa76316afe2fb34fe44dc653..d19185cc61a6ae7603fbbab300feb645e335c02a 100644
|
|
7113
|
+
--- a/src/types.ts
|
|
7114
|
+
+++ b/src/types.ts
|
|
7115
|
+
@@ -436,6 +436,7 @@ export type SchemaObject = {
|
|
7116
|
+
const?: unknown;
|
|
7117
|
+
default?: unknown;
|
|
7118
|
+
format?: string;
|
|
7119
|
+
+ additionalProperties?: boolean | Record<string, never> | SchemaObject | ReferenceObject;
|
|
7120
|
+
/** @deprecated in 3.1 (still valid for 3.0) */
|
|
7121
|
+
nullable?: boolean;
|
|
7122
|
+
oneOf?: (SchemaObject | ReferenceObject)[];
|