@openmeter/sdk 1.0.0-beta.225 → 1.0.0-beta.227
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/src/client/addons.cjs +1 -1
- package/dist/cjs/src/client/addons.cjs.map +1 -0
- package/dist/cjs/src/client/apps.cjs +1 -1
- package/dist/cjs/src/client/apps.cjs.map +1 -0
- package/dist/cjs/src/client/billing.cjs +15 -1
- package/dist/cjs/src/client/billing.cjs.map +1 -0
- package/dist/cjs/src/client/billing.d.cts +37 -0
- package/dist/cjs/src/client/common.cjs +1 -1
- package/dist/cjs/src/client/common.cjs.map +1 -0
- package/dist/cjs/src/client/customers.cjs +2 -2
- package/dist/cjs/src/client/customers.cjs.map +1 -0
- package/dist/cjs/src/client/customers.d.cts +10 -7
- package/dist/cjs/src/client/debug.cjs +1 -1
- package/dist/cjs/src/client/debug.cjs.map +1 -0
- package/dist/cjs/src/client/entitlements.cjs +1 -1
- package/dist/cjs/src/client/entitlements.cjs.map +1 -0
- package/dist/cjs/src/client/entitlements.d.cts +1 -0
- package/dist/cjs/src/client/events.cjs +1 -1
- package/dist/cjs/src/client/events.cjs.map +1 -0
- package/dist/cjs/src/client/features.cjs +1 -1
- package/dist/cjs/src/client/features.cjs.map +1 -0
- package/dist/cjs/src/client/index.cjs +1 -1
- package/dist/cjs/src/client/index.cjs.map +1 -0
- package/dist/cjs/src/client/info.cjs +1 -1
- package/dist/cjs/src/client/info.cjs.map +1 -0
- package/dist/cjs/src/client/meters.cjs +46 -1
- package/dist/cjs/src/client/meters.cjs.map +1 -0
- package/dist/cjs/src/client/meters.d.cts +28 -0
- package/dist/cjs/src/client/notifications.cjs +21 -1
- package/dist/cjs/src/client/notifications.cjs.map +1 -0
- package/dist/cjs/src/client/notifications.d.cts +9 -0
- package/dist/cjs/src/client/plans.cjs +1 -1
- package/dist/cjs/src/client/plans.cjs.map +1 -0
- package/dist/cjs/src/client/portal.cjs +1 -1
- package/dist/cjs/src/client/portal.cjs.map +1 -0
- package/dist/cjs/src/client/schemas.cjs +1 -1
- package/dist/cjs/src/client/schemas.cjs.map +1 -0
- package/dist/cjs/src/client/schemas.d.cts +1376 -655
- package/dist/cjs/src/client/subjects.cjs +1 -1
- package/dist/cjs/src/client/subjects.cjs.map +1 -0
- package/dist/cjs/src/client/subscription-addons.cjs +1 -1
- package/dist/cjs/src/client/subscription-addons.cjs.map +1 -0
- package/dist/cjs/src/client/subscriptions.cjs +1 -1
- package/dist/cjs/src/client/subscriptions.cjs.map +1 -0
- package/dist/cjs/src/client/utils.cjs +1 -1
- package/dist/cjs/src/client/utils.cjs.map +1 -0
- package/dist/cjs/src/portal/index.cjs +1 -1
- package/dist/cjs/src/portal/index.cjs.map +1 -0
- package/dist/cjs/src/react/context.cjs +1 -1
- package/dist/cjs/src/react/context.cjs.map +1 -0
- package/dist/cjs/src/zod/index.cjs +4658 -4565
- package/dist/cjs/src/zod/index.cjs.map +1 -0
- package/dist/cjs/src/zod/index.d.cts +4765 -18526
- package/dist/src/client/billing.d.ts +37 -0
- package/dist/src/client/billing.js +14 -0
- package/dist/src/client/billing.js.map +1 -1
- package/dist/src/client/customers.d.ts +10 -7
- package/dist/src/client/customers.js +1 -1
- package/dist/src/client/customers.js.map +1 -1
- package/dist/src/client/entitlements.d.ts +1 -0
- package/dist/src/client/meters.d.ts +28 -0
- package/dist/src/client/meters.js +45 -0
- package/dist/src/client/meters.js.map +1 -1
- package/dist/src/client/notifications.d.ts +9 -0
- package/dist/src/client/notifications.js +20 -0
- package/dist/src/client/notifications.js.map +1 -1
- package/dist/src/client/schemas.d.ts +1376 -655
- package/dist/src/zod/index.d.ts +4765 -18526
- package/dist/src/zod/index.js +1942 -1881
- package/dist/src/zod/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -18
- package/patches/openapi-typescript.patch +871 -16
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/src/client/addons.js.map +0 -1
- package/dist/cjs/src/client/apps.js.map +0 -1
- package/dist/cjs/src/client/billing.js.map +0 -1
- package/dist/cjs/src/client/common.js.map +0 -1
- package/dist/cjs/src/client/customers.js.map +0 -1
- package/dist/cjs/src/client/debug.js.map +0 -1
- package/dist/cjs/src/client/entitlements.js.map +0 -1
- package/dist/cjs/src/client/events.js.map +0 -1
- package/dist/cjs/src/client/features.js.map +0 -1
- package/dist/cjs/src/client/index.js.map +0 -1
- package/dist/cjs/src/client/info.js.map +0 -1
- package/dist/cjs/src/client/meters.js.map +0 -1
- package/dist/cjs/src/client/notifications.js.map +0 -1
- package/dist/cjs/src/client/plans.js.map +0 -1
- package/dist/cjs/src/client/portal.js.map +0 -1
- package/dist/cjs/src/client/schemas.js.map +0 -1
- package/dist/cjs/src/client/subjects.js.map +0 -1
- package/dist/cjs/src/client/subscription-addons.js.map +0 -1
- package/dist/cjs/src/client/subscriptions.js.map +0 -1
- package/dist/cjs/src/client/utils.js.map +0 -1
- package/dist/cjs/src/portal/index.js.map +0 -1
- package/dist/cjs/src/react/context.js.map +0 -1
- package/dist/cjs/src/zod/index.js.map +0 -1
- package/dist/cjs/tsconfig.7db92107.tsbuildinfo +0 -1
- package/dist/cjs/tsconfig.94dd8c51.tsbuildinfo +0 -1
|
@@ -1,8 +1,563 @@
|
|
|
1
|
+
diff --git a/dist/index.cjs.map b/dist/index.cjs.map
|
|
2
|
+
index 90e8135c064a2001546ae11cec6799d3e502f773..06e4138d8be0f83246debf495d05354f8bc023c0 100644
|
|
3
|
+
--- a/dist/index.cjs.map
|
|
4
|
+
+++ b/dist/index.cjs.map
|
|
5
|
+
@@ -1 +1 @@
|
|
6
|
+
-{"version":3,"file":"index.cjs","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":["redoc","createConfig","validateAndBundle","scanDiscriminators","resolveRef","performance","transformSchema","debug"],"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,MAAMA,OAAA,GACJ,OAAA,CAAQ,OAAA,IACP,MAAMC,wBAAA;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,MAAMC,uBAAA,CAAkB,MAAA,EAAQ;AAAA,WAC7CF,OAAA;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,EAAgBG,wBAAA,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,WACpEH,OAAA;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,OAAOI,gBAAA,CAAW,QAAQ,IAAA,EAAM,EAAE,QAAQ,OAAA,CAAQ,MAAA,IAAU,OAAO,CAAA;AAAA,IACrE;AAAA,GACF;AAEA,EAAA,MAAM,UAAA,GAAaC,4BAAY,GAAA,EAAI;AACnC,EAAA,MAAM,MAAA,GAASC,KAAA,CAAgB,MAAA,EAAQ,GAAG,CAAA;AAC1C,EAAAC,WAAA,CAAM,kDAAA,EAAoD,IAAA,EAAMF,2BAAA,CAAY,GAAA,KAAQ,UAAU,CAAA;AAE9F,EAAA,OAAO,MAAA;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
7
|
+
|
|
8
|
+
+{"version":3,"file":"index.cjs","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":["redoc","createConfig","validateAndBundle","scanDiscriminators","resolveRef","performance","transformSchema","debug"],"mappings":"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"}
|
|
9
|
+
|
|
10
|
+
diff --git a/dist/index.d.cts b/dist/index.d.cts
|
|
11
|
+
index 7574dccb07513b11366a8f5f92730f5987354e02..539bdd80864ab319e08da4bb46bf344b373220f1 100644
|
|
12
|
+
--- a/dist/index.d.cts
|
|
13
|
+
+++ b/dist/index.d.cts
|
|
14
|
+
@@ -407,7 +407,7 @@ interface AnnotatedSchemaObject {
|
|
15
|
+
}
|
|
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
|
+
|
|
25
|
+
declare function transformResponsesObject(responsesObject: ResponsesObject, options: TransformNodeOptions): ts.TypeNode;
|
|
26
|
+
|
|
27
|
+
-declare function transformSchemaObject(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions): ts.TypeNode;
|
|
28
|
+
-declare function transformSchemaObjectWithComposition(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions): ts.TypeNode;
|
|
29
|
+
+declare function transformSchemaObject(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions, fromAdditionalProperties?: boolean): ts.TypeNode;
|
|
30
|
+
+declare function transformSchemaObjectWithComposition(schemaObject: SchemaObject | ReferenceObject, options: TransformNodeOptions, fromAdditionalProperties?: boolean): ts.TypeNode;
|
|
31
|
+
|
|
32
|
+
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";
|
|
33
|
+
declare function openapiTS(source: string | URL | OpenAPI3 | Buffer | Readable, options?: OpenAPITSOptions): Promise<ts.Node[]>;
|
|
34
|
+
diff --git a/dist/index.d.mts b/dist/index.d.mts
|
|
35
|
+
index e0eaea7b5812ad4efcaa838a945edc0c5fd6af77..e53f927efa14cd9adf1d3ae9db716e2b787e0233 100644
|
|
36
|
+
--- a/dist/index.d.mts
|
|
37
|
+
+++ b/dist/index.d.mts
|
|
38
|
+
@@ -407,7 +407,7 @@ interface AnnotatedSchemaObject {
|
|
39
|
+
}
|
|
40
|
+
declare function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void;
|
|
41
|
+
type OapiRefResolved = Referenced<ParameterObject>;
|
|
42
|
+
-declare function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode;
|
|
43
|
+
+declare function oapiRef(path: string, resolved?: OapiRefResolved, deep?: boolean): ts.TypeNode;
|
|
44
|
+
interface AstToStringOptions {
|
|
45
|
+
fileName?: string;
|
|
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[]>;
|
|
58
|
+
diff --git a/dist/index.d.ts b/dist/index.d.ts
|
|
59
|
+
index 7574dccb07513b11366a8f5f92730f5987354e02..539bdd80864ab319e08da4bb46bf344b373220f1 100644
|
|
60
|
+
--- a/dist/index.d.ts
|
|
61
|
+
+++ b/dist/index.d.ts
|
|
62
|
+
@@ -407,7 +407,7 @@ interface AnnotatedSchemaObject {
|
|
63
|
+
}
|
|
64
|
+
declare function addJSDocComment(schemaObject: AnnotatedSchemaObject, node: ts.PropertySignature): void;
|
|
65
|
+
type OapiRefResolved = Referenced<ParameterObject>;
|
|
66
|
+
-declare function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode;
|
|
67
|
+
+declare function oapiRef(path: string, resolved?: OapiRefResolved, deep?: boolean): ts.TypeNode;
|
|
68
|
+
interface AstToStringOptions {
|
|
69
|
+
fileName?: string;
|
|
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":"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"}
|
|
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":"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"}
|
|
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":"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"}
|
|
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":";;;;;;;;;;;;AA4BO,SAAS,aAAa,MAA0B,EAAA;AACrD,EACE,OAAA,OAAO,MAAW,KAAA,QAAA,IAClB,MAAW,KAAA,IAAA,IACX,CAAC,KAAA,CAAM,OAAQ,CAAA,MAAM,CACrB,IAAA,MAAA,IAAU,MACV,IAAA,KAAA,CAAM,OAAS,CAAA,MAAA,CAAe,IAAI,CAAA,KACjC,EAAE,MAAA,IAAU,MAAY,CAAA,IAAA,MAAA,CAAe,IAAS,KAAA,QAAA,CAAA,IACjD,EAAE,YAAA,IAAgB,MAClB,CAAA,IAAA,EAAE,sBAA0B,IAAA,MAAA,CAAA;AAEhC;AAIA,MAAM,YAAuG,GAAA;AAAA,EAC3G,OAAS,EAAA,qBAAA;AAAA,EACT,SAAW,EAAA,uBAAA;AAAA,EACX,UAAY,EAAA,wBAAA;AAAA,EACZ,aAAe,EAAA,0BAAA;AAAA,EACf,OAAS,EAAA,qBAAA;AAAA,EACT,SAAW,EAAA;AACb,CAAA;AAMwB,SAAA,yBAAA,CAA0B,kBAAoC,GAA+B,EAAA;AACnH,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAA,MAAM,kBAA8D,EAAC;AACrE,EAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAA4B,EAAA;AACpE,IAAM,MAAA,UAAA,GAAa,YAAY,GAAI,EAAA;AAEnC,IAAA,MAAM,QAA0B,EAAC;AACjC,IAAI,IAAA,gBAAA,CAAiB,GAAG,CAAG,EAAA;AACzB,MAAW,KAAA,MAAA,CAAC,MAAM,IAAI,CAAA,IAAK,WAAyB,gBAAiB,CAAA,GAAG,CAAG,EAAA,GAAG,CAAG,EAAA;AAC/E,QAAA,IAAI,OAAU,GAAA,YAAA,CAAa,GAAG,CAAA,CAAE,IAAM,EAAA;AAAA,UACpC,MAAM,SAAU,CAAA,CAAC,YAAc,EAAA,GAAA,EAAK,IAAI,CAAC,CAAA;AAAA,UACzC,MAAQ,EAAA,IAAA;AAAA,UACR;AAAA,SACD,CAAA;AAED,QAAA,IAAI,gBAAmB,GAAA,KAAA;AACvB,QAAA,IAAI,IAAI,SAAW,EAAA;AACjB,UAAM,MAAA,MAAA,GAAS,GAAI,CAAA,SAAA,CAAU,IAAM,EAAA;AAAA,YACjC,MAAM,SAAU,CAAA,CAAC,YAAc,EAAA,GAAA,EAAK,IAAI,CAAC,CAAA;AAAA,YACzC,MAAQ,EAAA,IAAA;AAAA,YACR;AAAA,WACD,CAAA;AACD,UAAA,IAAI,MAAQ,EAAA;AACV,YAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,cAAA,OAAA,GAAU,MAAO,CAAA,MAAA;AACjB,cAAA,gBAAA,GAAmB,MAAO,CAAA,aAAA;AAAA,aACrB,MAAA;AACL,cAAU,OAAA,GAAA,MAAA;AAAA;AACZ;AACF;AAGF,QAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACN,WAAY,CAAA,EAAE,QAAU,EAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,UACvC,gBAAgB,IAAI,CAAA;AAAA;AAAA,UACpB,mBAAmB,cAAiB,GAAA,MAAA;AAAA;AAAA,UACpC;AAAA,SACtB;AACA,QAAA,eAAA,CAAgB,MAAwB,QAAQ,CAAA;AAChD,QAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAEnB,QAAA,IAAI,IAAI,SAAW,EAAA;AAEjB,UAAA,MAAM,uBAAuB,GAAI,CAAA,IAAA,IAAQ,GAAQ,KAAA,SAAA,IAAa,aAAa,IAAI,CAAA;AAE/E,UAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,YAAA,MAAM,YAAe,GAAA,UAAA,CAAW,UAAW,CAAA,uBAAA,CAAwB,GAAG,CAAC,CAAA;AACvE,YAAA,IAAI,YAAY,CAAG,EAAA,YAAY,GAAG,UAAW,CAAA,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA;AAG7D,YAAA,IAAI,eAAkB,GAAA,CAAA;AAEtB,YAAO,OAAA,eAAA,CAAgB,SAAS,CAAA,KAAM,MAAW,EAAA;AAC/C,cAAA,eAAA,EAAA;AACA,cAAY,SAAA,GAAA,CAAA,EAAG,YAAY,CAAG,EAAA,UAAA,CAAW,WAAW,IAAI,CAAC,IAAI,eAAe,CAAA,CAAA;AAAA;AAE9E,YAAM,MAAA,GAAA,GAAM,GAAG,OAAQ,CAAA,uBAAA,CAAwB,eAAe,GAAG,CAAA,IAAA,EAAO,IAAI,CAAI,EAAA,CAAA,CAAA;AAChF,YAAI,IAAA,GAAA,CAAI,uBAA2B,IAAA,GAAA,KAAQ,SAAW,EAAA;AACpD,cAAY,SAAA,GAAA,SAAA,CAAU,OAAQ,CAAA,YAAA,EAAc,EAAE,CAAA;AAAA;AAEhD,YAAM,MAAA,SAAA,GAAY,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,cACN,WAAY,CAAA,EAAE,MAAQ,EAAA,IAAA,EAAM,CAAA;AAAA;AAAA,cAC5B,SAAA;AAAA;AAAA,cACA,MAAA;AAAA;AAAA,cACA;AAAA,aACvB;AACA,YAAA,eAAA,CAAgB,SAAS,CAAI,GAAA,SAAA;AAAA;AAC/B;AACF;AACF;AAEF,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACW,MAAA;AAAA;AAAA,QACA,gBAAgB,GAAG,CAAA;AAAA;AAAA,QACnB,MAAA;AAAA;AAAA,QACA,MAAM,MAAS,GAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,KAAK,CAAI,GAAA;AAAA;AAC/E,KACF;AAEA,IAAA,KAAA,CAAM,iCAA4B,GAAG,CAAA,CAAA,EAAI,MAAM,WAAY,CAAA,GAAA,KAAQ,UAAU,CAAA;AAAA;AAI/E,EAAA,IAAI,YAAuC,EAAC;AAC5C,EAAA,IAAI,IAAI,SAAW,EAAA;AACjB,IAAY,SAAA,GAAA,MAAA,CAAO,KAAK,eAAe,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,eAAgB,CAAA,CAAC,CAAC,CAAA;AAAA;AAGxE,EAAA,OAAO,CAAC,EAAG,CAAA,OAAA,CAAQ,sBAAsB,IAAI,CAAA,EAAG,GAAG,SAAS,CAAA;AAC9D;AAEO,SAAS,wBACd,GACQ,EAAA;AACR,EAAA,QAAQ,GAAK;AAAA;AAAA,IAEX,KAAK,eAAA;AACH,MAAO,OAAA,aAAA;AAAA;AAAA,IAET;AACE,MAAO,OAAA,GAAA,CAAI,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA;AAAA;AAE5B;;;;"}
|
|
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":"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"}
|
|
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":";;;;;;;;;;;;;;;AAYwB,SAAA,wBAAA,CACtB,iBACA,OACkB,EAAA;AAClB,EAAA,MAAM,OAAyB,EAAC;AAGhC,EAAK,IAAA,CAAA,IAAA,CAAK,GAAGA,wCAAyB,CAAA,eAAA,CAAgB,cAAc,EAAC,EAAG,OAAO,CAAC,CAAA;AAGhF,EAAA,IAAI,gBAAgB,WAAa,EAAA;AAC/B,IAAM,MAAA,eAAA,GACJ,MAAU,IAAA,eAAA,CAAgB,WACtB,GAAAC,UAAA,CAAQ,eAAgB,CAAA,WAAA,CAAY,IAAI,CAAA,GACxCC,iBAA2B,CAAA,eAAA,CAAgB,WAAa,EAAA;AAAA,MACtD,GAAG,OAAA;AAAA,MACH,MAAMC,eAAU,CAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,aAAa,CAAC;AAAA,KAC9C,CAAA;AACP,IAAA,MAAM,QAAW,GAAA,CAAC,CAChB,CAAA,MAAA,IAAU,gBAAgB,WACtB,GAAA,OAAA,CAAQ,GAAI,CAAA,OAAA,CAA2B,eAAgB,CAAA,WAAA,CAAY,IAAI,CAAA,GACvE,gBAAgB,WACnB,GAAA,QAAA;AACH,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,aAAa,CAAA;AAAA;AAAA,MAC7B,WAAW,MAAY,GAAAC,iBAAA;AAAA;AAAA,MACvB;AAAA,KACtB;AACA,IAAgBC,kBAAA,CAAA,eAAA,CAAgB,aAAa,QAAQ,CAAA;AACrD,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,GACb,MAAA;AACL,IAAK,IAAA,CAAA,IAAA;AAAA,MACHJ,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACWC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/CC,mBAAgB,aAAa,CAAA;AAAA;AAAA,QAC7BC,iBAAA;AAAA;AAAA,QACAE;AAAA;AACtB,KACF;AAAA;AAIF,EAAK,IAAA,CAAA,IAAA;AAAA,IACHL,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACWC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACAI,eAAyB,CAAA,eAAA,CAAgB,SAAa,IAAA,IAAI,OAAO;AAAA;AACvF,GACF;AAEA,EAAO,OAAA,IAAA;AACT;AAGgB,SAAA,qBAAA,CACd,WACA,EAAA,eAAA,EACA,OACM,EAAA;AAEN,EAAI,IAAA,UAAA,GAAa,OAAQ,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA;AAAA,IACxC,CAAC,SAASN,WAAG,CAAA,sBAAA,CAAuB,IAAI,CAAM,IAAA,IAAA,CAAiC,KAAK,IAAS,KAAA;AAAA,GAC/F;AACA,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,UAAA,GAAaA,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,MACAC,cAAY,CAAA;AAAA,QAChC,MAAQ,EAAA;AAAA;AAAA,OAET,CAAA;AAAA;AAAA,MACqBD,WAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,YAAY,CAAA;AAAA;AAAA,MACxC,MAAA;AAAA;AAAA,MACA,MAAA;AAAA;AAAA,MACA;AAAC,KACzB;AACA,IAAQ,OAAA,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAK,UAAU,CAAA;AAAA;AAI1C,EAAM,MAAA,IAAA,GAAO,wBAAyB,CAAA,eAAA,EAAiB,OAAO,CAAA;AAE9D,EAAW,UAAA,CAAA,OAAA,GAAUA,WAAG,CAAA,OAAA,CAAQ,eAAgB,CAAA;AAAA,IAC9C,GAAG,UAAW,CAAA,OAAA;AAAA,IACdA,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACWC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACAF,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI;AAAA;AAC3D,GACD,CAAA;AACH;;;;;"}
|
|
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":"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"}
|
|
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":";;;;;;;;;;;;AAcA,MAAM,aAAgB,GAAA,YAAA;AAME,SAAA,oBAAA,CAAqB,aAA0B,GAAiC,EAAA;AACtG,EAAA,MAAM,OAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,CAAC,GAAK,EAAAA,gBAAc,KAAKC,gBAAW,CAAA,WAAA,EAAa,GAAG,CAAG,EAAA;AAChE,IAAA,IAAI,CAACD,gBAAA,IAAkB,OAAOA,gBAAA,KAAmB,QAAU,EAAA;AACzD,MAAA;AAAA;AAGF,IAAM,MAAA,KAAA,GAAQE,4BAAY,GAAI,EAAA;AAG9B,IAAA,IAAI,UAAUF,gBAAgB,EAAA;AAC5B,MAAM,MAAA,QAAA,GAAWG,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACNC,gBAAY,CAAA,EAAE,QAAU,EAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QACvCC,qBAAgB,GAAG,CAAA;AAAA;AAAA,QACnB,MAAA;AAAA;AAAA,QACAC,YAAA,CAAQN,iBAAe,IAAI;AAAA,OACjD;AACA,MAAAO,oBAAA,CAAgBP,kBAAgB,QAAQ,CAAA;AACxC,MAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,KACb,MAAA;AACL,MAAM,MAAA,YAAA,GAAeQ,eAAwBR,gBAAgB,EAAA;AAAA,QAC3D,IAAM,EAAAS,eAAA,CAAU,CAAC,OAAA,EAAS,GAAG,CAAC,CAAA;AAAA,QAC9B;AAAA,OACD,CAAA;AAGD,MAAA,IAAI,GAAI,CAAA,iBAAA,IAAqB,GAAI,CAAA,QAAA,CAAS,GAAG,CAAG,EAAA;AAC9C,QAAM,MAAA,UAAA,GAAa,iBAAkB,CAAAT,gBAAA,EAAgB,GAAG,CAAA;AACxD,QAAM,MAAA,OAAA,GAAU,GAAI,CAAA,KAAA,CAAM,aAAa,CAAA;AACvC,QAAI,IAAA,OAAA,GAAU,KAAK,GAAG,CAAA,EAAA,CAAA;AACtB,QAAA,IAAI,OAAS,EAAA;AACX,UAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,YAAA,MAAM,SAAY,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA;AACnC,YAAM,MAAA,KAAA,GAAQ,WAAW,SAAS,CAAA;AAClC,YAAQ,QAAA,KAAA,EAAO,QAAQ,IAAM;AAAA,cAC3B,KAAK,QAAA;AAAA,cACL,KAAK,SAAA;AACH,gBAAU,OAAA,GAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,EAAO,WAAW,CAAA;AAC5C,gBAAA;AAAA,cACF,KAAK,SAAA;AACH,gBAAU,OAAA,GAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,EAAO,YAAY,CAAA;AAC7C,gBAAA;AAAA,cACF;AACE,gBAAU,OAAA,GAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,EAAO,WAAW,CAAA;AAC5C,gBAAA;AAAA;AACJ;AAIF,UAAA,MAAM,QAAY,GAAAU,gBAAA,CAAY,OAAO,CAAA,CAAE,CAAC,CAAW,EAAA,UAAA;AACnD,UAAA,IAAI,QAAU,EAAA;AACZ,YAAK,IAAA,CAAA,IAAA;AAAA,cACHP,YAAG,OAAQ,CAAA,oBAAA;AAAA;AAAA,gBACWC,gBAAY,CAAA,EAAE,QAAU,EAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,gBACvC;AAAA,kBAClBD,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,oBACY,MAAA;AAAA;AAAA,oBACA,MAAA;AAAA;AAAA,oBACA,MAAA;AAAA;AAAA,oBACA,MAAA;AAAA;AAAA,oBACA,QAAA;AAAA;AAAA,oBACA;AAAA;AACvB,iBACF;AAAA;AAAA,gBACoB;AAAA;AACtB,aACF;AACA,YAAA;AAAA;AACF;AACF;AAGF,MAAK,IAAA,CAAA,IAAA;AAAA,QACHA,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACWC,gBAAY,CAAA,EAAE,QAAU,EAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,UACvCC,qBAAgB,GAAG,CAAA;AAAA;AAAA,UACnB,MAAA;AAAA;AAAA,UACA;AAAA;AACtB,OACF;AAEA,MAAAM,WAAA,CAAM,qBAAqB,GAAG,CAAA,CAAA,CAAA,EAAK,MAAMT,2BAAY,CAAA,GAAA,KAAQ,KAAK,CAAA;AAAA;AACpE;AAGF,EAAO,OAAAC,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAC9C;AAEA,SAAS,iBAAA,CAAkB,gBAAgC,GAAoB,EAAA;AAC7E,EAAA,MAAM,SAA0C,EAAC;AACjD,EAAA,KAAA,MAAW,CAAK,IAAA,cAAA,CAAe,UAAc,IAAA,EAAI,EAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,UAAU,CAAK,IAAA,CAAA,CAAE,OAAO,GAAI,CAAA,OAAA,CAAyB,CAAE,CAAA,IAAI,CAAK,GAAA,CAAA;AACjF,IAAI,IAAA,QAAA,IAAY,QAAS,CAAA,EAAA,KAAO,MAAQ,EAAA;AACtC,MAAO,MAAA,CAAA,QAAA,CAAS,IAAI,CAAI,GAAA,QAAA;AAAA;AAC1B;AAEF,EAAW,KAAA,MAAA,MAAA,IAAU,CAAC,KAAA,EAAO,KAAO,EAAA,MAAA,EAAQ,UAAU,SAAW,EAAA,MAAA,EAAQ,OAAS,EAAA,OAAO,CAAe,EAAA;AACtG,IAAI,IAAA,EAAE,UAAU,cAAiB,CAAA,EAAA;AAC/B,MAAA;AAAA;AAEF,IAAA,MAAM,cAAkB,GAAA,cAAA,CAAe,MAAM,CAAA,CAAsB,IAC/D,GAAA,GAAA,CAAI,OAA0B,CAAA,cAAA,CAAe,MAAM,CAAA,CAAsB,IAAI,CAAA,GAC5E,eAAe,MAAM,CAAA;AAC1B,IAAA,IAAI,gBAAgB,UAAY,EAAA;AAC9B,MAAW,KAAA,MAAA,CAAA,IAAK,eAAe,UAAY,EAAA;AACzC,QAAM,MAAA,aAAA,GAAgB,UAAU,CAAK,IAAA,CAAA,CAAE,OAAO,GAAI,CAAA,OAAA,CAAyB,CAAE,CAAA,IAAI,CAAK,GAAA,CAAA;AACtF,QAAI,IAAA,aAAA,IAAiB,aAAc,CAAA,EAAA,KAAO,MAAQ,EAAA;AAChD,UAAO,MAAA,CAAA,aAAA,CAAc,IAAI,CAAI,GAAA,aAAA;AAAA;AAC/B;AACF;AACF;AAEF,EAAO,OAAA,MAAA;AACT;;;;"}
|
|
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":"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"}
|
|
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
|
+
|
|
1
483
|
diff --git a/dist/transform/schema-object.cjs b/dist/transform/schema-object.cjs
|
|
2
|
-
index
|
|
484
|
+
index 862ee9d753202fe920065df98af815258b217f4e..c89d1b266d1551fedf8c0c1b30fa81174365057e 100644
|
|
3
485
|
--- a/dist/transform/schema-object.cjs
|
|
4
486
|
+++ b/dist/transform/schema-object.cjs
|
|
5
|
-
@@ -
|
|
487
|
+
@@ -11,8 +11,8 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
|
|
488
|
+
|
|
489
|
+
const ts__default = /*#__PURE__*/_interopDefaultCompat(ts$1);
|
|
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;
|
|
506
|
+
}
|
|
507
|
+
@@ -72,12 +72,30 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
508
|
+
}
|
|
509
|
+
const unionType = ts.tsUnion(enumType);
|
|
510
|
+
if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
511
|
+
- let enumValuesVariableName = refUtils_js.parseRef(options.path ?? "").pointer.join("/");
|
|
512
|
+
+ const parsed = refUtils_js.parseRef(options.path ?? "");
|
|
513
|
+
+ let enumValuesVariableName = parsed.pointer.join("/");
|
|
514
|
+
enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
515
|
+
enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
516
|
+
+ const cleanedPointer = [];
|
|
517
|
+
+ for (let i = 0; i < parsed.pointer.length; i++) {
|
|
518
|
+
+ const segment = parsed.pointer[i];
|
|
519
|
+
+ if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
520
|
+
+ const next = parsed.pointer[i + 1];
|
|
521
|
+
+ if (/^\d+$/.test(next)) {
|
|
522
|
+
+ i++;
|
|
523
|
+
+ continue;
|
|
524
|
+
+ }
|
|
525
|
+
+ }
|
|
526
|
+
+ cleanedPointer.push(segment);
|
|
527
|
+
+ }
|
|
528
|
+
+ const cleanedRefPath = utils.createRef(cleanedPointer);
|
|
529
|
+
const enumValuesArray = ts.tsArrayLiteralExpression(
|
|
530
|
+
enumValuesVariableName,
|
|
531
|
+
- ts.oapiRef(options.path ?? ""),
|
|
532
|
+
+ // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
533
|
+
+ fromAdditionalProperties ? ts__default.factory.createIndexedAccessTypeNode(
|
|
534
|
+
+ ts.oapiRef(cleanedRefPath, void 0, true),
|
|
535
|
+
+ ts__default.factory.createTypeReferenceNode(ts__default.factory.createIdentifier("string"))
|
|
536
|
+
+ ) : ts.oapiRef(cleanedRefPath, void 0, true),
|
|
537
|
+
schemaObject.enum,
|
|
538
|
+
{
|
|
539
|
+
export: true,
|
|
540
|
+
@@ -89,10 +107,16 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
541
|
+
}
|
|
542
|
+
return unionType;
|
|
543
|
+
}
|
|
544
|
+
- function collectUnionCompositions(items) {
|
|
545
|
+
+ function collectUnionCompositions(items, unionKey) {
|
|
546
|
+
const output = [];
|
|
547
|
+
- for (const item of items) {
|
|
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) {
|
|
6
561
|
}
|
|
7
562
|
itemType = transformSchemaObject({ ...item, required: itemRequired }, options);
|
|
8
563
|
}
|
|
@@ -16,28 +571,122 @@ index b8175ac46f71af118272973c3915afab63268d2f..f719606cd4b88d4a4eec7ed5c4096e56
|
|
|
16
571
|
}
|
|
17
572
|
return output;
|
|
18
573
|
}
|
|
574
|
+
@@ -133,12 +152,13 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
575
|
+
const allOf = allOfType.length ? ts.tsIntersection(allOfType) : void 0;
|
|
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]);
|
|
582
|
+
}
|
|
583
|
+
const oneOfType = collectUnionCompositions(
|
|
584
|
+
- schemaObject.oneOf || "type" in schemaObject && schemaObject.type === "object" && schemaObject.enum || []
|
|
585
|
+
+ schemaObject.oneOf || "type" in schemaObject && schemaObject.type === "object" && schemaObject.enum || [],
|
|
586
|
+
+ "oneOf"
|
|
587
|
+
);
|
|
588
|
+
if (oneOfType.length) {
|
|
589
|
+
if (oneOfType.every(ts.tsIsPrimitive)) {
|
|
590
|
+
@@ -382,7 +402,7 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
591
|
+
const hasExplicitPatternProperties = typeof schemaObject.patternProperties === "object" && Object.keys(schemaObject.patternProperties).length;
|
|
592
|
+
const stringIndexTypes = [];
|
|
593
|
+
if (hasExplicitAdditionalProperties) {
|
|
594
|
+
- stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties, options));
|
|
595
|
+
+ stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties, options, true));
|
|
596
|
+
}
|
|
597
|
+
if (hasImplicitAdditionalProperties || !schemaObject.additionalProperties && options.ctx.additionalProperties) {
|
|
598
|
+
stringIndexTypes.push(ts.UNKNOWN);
|
|
19
599
|
diff --git a/dist/transform/schema-object.cjs.map b/dist/transform/schema-object.cjs.map
|
|
20
|
-
index
|
|
600
|
+
index cbabe4f51233f50aa4d0ff2ca722fc846fbb9dda..ee72088920bbee9368c43f3cca1562680953fd38 100644
|
|
21
601
|
--- a/dist/transform/schema-object.cjs.map
|
|
22
602
|
+++ b/dist/transform/schema-object.cjs.map
|
|
23
603
|
@@ -1 +1 @@
|
|
24
|
-
-{"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 BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n QUESTION_TOKEN,\n STRING,\n UNDEFINED,\n UNKNOWN,\n addJSDocComment,\n oapiRef,\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} 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 (\"$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 const 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 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 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 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\n if (schemaObject.additionalProperties || options.ctx.additionalProperties) {\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const addlType = hasExplicitAdditionalProperties\n ? transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options)\n : UNKNOWN;\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 */ addlType,\n ),\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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"}
|
|
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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"}
|
|
25
605
|
|
|
26
|
-
+{"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 BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n QUESTION_TOKEN,\n STRING,\n UNDEFINED,\n UNKNOWN,\n addJSDocComment,\n oapiRef,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\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 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 ?? []);\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 (\"$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 const 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 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 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 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\n if (schemaObject.additionalProperties || options.ctx.additionalProperties) {\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const addlType = hasExplicitAdditionalProperties\n ? transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options)\n : UNKNOWN;\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 */ addlType,\n ),\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","tsIntersection","tsIsPrimitive","tsRecord","STRING","tsNullable","UNDEFINED","NUMBER","BOOLEAN","createDiscriminatorProperty","getEntries","QUESTION_TOKEN","createRef","tsModifiers","tsPropertyIndex","addJSDocComment"],"mappings":"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"}
|
|
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":";;;;;;;;;;;;;AAgCA,SAAwB,qBACtB,CAAA,YAAA,EACA,OACA,EAAA,wBAAA,GAA2B,KACd,EAAA;AACb,EAAA,MAAM,IAAO,GAAA,oCAAA,CAAqC,YAAc,EAAA,OAAA,EAAS,wBAAwB,CAAA;AACjG,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,aAAA,KAAkB,UAAY,EAAA;AACnD,IAAA,MAAM,mBAAsB,GAAA,OAAA,CAAQ,GAAI,CAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AACnE,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAO,OAAA,mBAAA;AAAA;AACT;AAEF,EAAO,OAAA,IAAA;AACT;AAKO,SAAS,oCACd,CAAA,YAAA,EACA,OACA,EAAA,wBAAA,GAA2B,KACd,EAAA;AAMb,EAAA,IAAI,CAAC,YAAc,EAAA;AACjB,IAAO,OAAAA,QAAA;AAAA;AAGT,EAAA,IAAK,iBAA6B,IAAM,EAAA;AACtC,IAAO,OAAAC,UAAA;AAAA;AAGT,EAAA,IAAI,MAAM,OAAQ,CAAA,YAAY,CAAK,IAAA,OAAO,iBAAiB,QAAU,EAAA;AACnE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,KAAM,CAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,UAAU,OAAO,YAAY,CAAO,IAAA,EAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,KACnH;AAAA;AAMF,EAAA,IAAI,UAAU,YAAc,EAAA;AAC1B,IAAO,OAAAC,UAAA,CAAQ,aAAa,IAAI,CAAA;AAAA;AAMlC,EAAA,IAAI,YAAa,CAAA,KAAA,KAAU,IAAQ,IAAA,YAAA,CAAa,UAAU,MAAW,EAAA;AACnE,IAAO,OAAAC,YAAA,CAAU,aAAa,KAAK,CAAA;AAAA;AAOrC,EAAA,IACE,MAAM,OAAQ,CAAA,YAAA,CAAa,IAAI,CAAA,KAC9B,EAAE,MAAU,IAAA,YAAA,CAAA,IAAiB,YAAa,CAAA,IAAA,KAAS,aACpD,EAAE,YAAA,IAAgB,YAClB,CAAA,IAAA,EAAE,0BAA0B,YAC5B,CAAA,EAAA;AAEA,IAAA,IACE,QAAQ,GAAI,CAAA,IAAA,IACZ,YAAa,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,YAAY,OAAO,CAAA,KAAM,QAAY,IAAA,CAAA,KAAM,IAAI,CAC3F,EAAA;AACA,MAAI,IAAA,QAAA,GAAWC,qBAAS,OAAQ,CAAA,IAAA,IAAQ,EAAE,CAAE,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAE5D,MAAW,QAAA,GAAA,QAAA,CAAS,OAAQ,CAAA,oBAAA,EAAsB,EAAE,CAAA;AACpD,MAAA,MAAM,WAAW,YAAa,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,GAAG,CAAO,MAAA;AAAA,QAChD,IAAA,EAAM,aAAa,iBAAiB,CAAA,GAAI,CAAC,CAAK,IAAA,YAAA,CAAa,aAAa,CAAA,GAAI,CAAC,CAAA;AAAA,QAC7E,WAAA,EAAa,aAAa,qBAAqB,CAAA,GAAI,CAAC,CAAK,IAAA,YAAA,CAAa,oBAAoB,CAAA,GAAI,CAAC;AAAA,OAC/F,CAAA,CAAA;AAGF,MAAA,IAAI,OAAU,GAAA,KAAA;AACd,MAAA,MAAM,gBAAmB,GAAA,YAAA,CAAa,IAAK,CAAA,MAAA,CAAO,CAAC,SAAc,KAAA;AAC/D,QAAA,IAAI,cAAc,IAAM,EAAA;AACtB,UAAU,OAAA,GAAA,IAAA;AACV,UAAO,OAAA,KAAA;AAAA;AAGT,QAAO,OAAA,IAAA;AAAA,OACR,CAAA;AACD,MAAA,MAAMC,SAAW,GAAAC,SAAA,CAAO,QAAU,EAAA,gBAAA,EAAyC,QAAU,EAAA;AAAA,QACnF,WAAA,EAAa,QAAQ,GAAI,CAAA,WAAA;AAAA,QACzB,MAAQ,EAAA;AAAA;AAAA,OAET,CAAA;AACD,MAAA,IAAI,CAAC,OAAQ,CAAA,GAAA,CAAI,YAAa,CAAA,QAAA,CAASD,SAAQ,CAAG,EAAA;AAChD,QAAQ,OAAA,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAKA,SAAQ,CAAA;AAAA;AAExC,MAAA,MAAM,GAAM,GAAAE,WAAA,CAAG,OAAQ,CAAA,uBAAA,CAAwBF,UAAS,IAAI,CAAA;AAC5D,MAAA,OAAO,UAAUG,UAAQ,CAAA,CAAC,GAAK,EAAAC,OAAI,CAAC,CAAI,GAAA,GAAA;AAAA;AAE1C,IAAA,MAAM,QAAW,GAAA,YAAA,CAAa,IAAK,CAAA,GAAA,CAAIN,YAAS,CAAA;AAChD,IAAK,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAA,CAAa,IAAI,CAAA,IAAK,YAAa,CAAA,IAAA,CAAK,QAAS,CAAA,MAAM,CAAM,IAAA,YAAA,CAAa,QAAU,EAAA;AACrG,MAAA,QAAA,CAAS,KAAKM,OAAI,CAAA;AAAA;AAGpB,IAAM,MAAA,SAAA,GAAYD,WAAQ,QAAQ,CAAA;AAGlC,IAAA,IAAI,OAAQ,CAAA,GAAA,CAAI,UAAc,IAAA,YAAA,CAAa,KAAK,KAAM,CAAA,CAAC,CAAM,KAAA,OAAO,CAAM,KAAA,QAAA,IAAY,OAAO,CAAA,KAAM,QAAQ,CAAG,EAAA;AAC5G,MAAA,MAAM,MAAS,GAAAJ,oBAAA,CAAS,OAAQ,CAAA,IAAA,IAAQ,EAAE,CAAA;AAC1C,MAAA,IAAI,sBAAyB,GAAA,MAAA,CAAO,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA;AAEpD,MAAyB,sBAAA,GAAA,sBAAA,CAAuB,OAAQ,CAAA,oBAAA,EAAsB,EAAE,CAAA;AAChF,MAAA,sBAAA,GAAyB,GAAG,sBAAsB,CAAA,MAAA,CAAA;AAIlD,MAAA,MAAM,iBAA2B,EAAC;AAClC,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AAE9C,QAAM,MAAA,OAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA;AAChC,QAAK,IAAA,CAAA,OAAA,KAAY,WAAW,OAAY,KAAA,OAAA,KAAY,IAAI,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACjF,UAAA,MAAM,IAAO,GAAA,MAAA,CAAO,OAAQ,CAAA,CAAA,GAAI,CAAC,CAAA;AACjC,UAAI,IAAA,OAAA,CAAQ,IAAK,CAAA,IAAI,CAAG,EAAA;AAEtB,YAAA,CAAA,EAAA;AACA,YAAA;AAAA;AACF;AAEF,QAAA,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA;AAE7B,MAAM,MAAA,cAAA,GAAiBM,gBAAU,cAAc,CAAA;AAE/C,MAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,QACtB,sBAAA;AAAA;AAAA,QAEA,wBAAA,GACIJ,YAAG,OAAQ,CAAA,2BAAA;AAAA,UACTL,UAAA,CAAQ,cAAgB,EAAA,MAAA,EAAW,IAAI,CAAA;AAAA,UACvCK,YAAG,OAAQ,CAAA,uBAAA,CAAwBA,YAAG,OAAQ,CAAA,gBAAA,CAAiB,QAAQ,CAAC;AAAA,SAE1E,GAAAL,UAAA,CAAQ,cAAgB,EAAA,MAAA,EAAW,IAAI,CAAA;AAAA,QAC3C,YAAa,CAAA,IAAA;AAAA,QACb;AAAA,UACE,MAAQ,EAAA,IAAA;AAAA,UACR,QAAU,EAAA,IAAA;AAAA,UACV,YAAA,EAAc,QAAQ,GAAI,CAAA;AAAA;AAC5B,OACF;AAEA,MAAQ,OAAA,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAK,eAAe,CAAA;AAAA;AAG/C,IAAO,OAAA,SAAA;AAAA;AAQT,EAAS,SAAA,wBAAA,CAAyB,OAA2C,QAA6B,EAAA;AACxG,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,CAAC,KAAO,EAAA,IAAI,CAAK,IAAA,KAAA,CAAM,SAAW,EAAA;AAC3C,MAAO,MAAA,CAAA,IAAA;AAAA,QACL,sBAAsB,IAAM,EAAA;AAAA,UAC1B,GAAG,OAAA;AAAA;AAAA,UAEH,IAAA,EAAMQ,gBAAU,CAAC,OAAA,CAAQ,MAAM,QAAU,EAAA,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,SACxD;AAAA,OACH;AAAA;AAGF,IAAO,OAAA,MAAA;AAAA;AAIT,EAAS,SAAA,wBAAA,CAAyB,OAA2C,QAAoC,EAAA;AAC/G,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,MAAI,IAAA,QAAA;AAGJ,MAAA,IAAI,UAAU,IAAM,EAAA;AAClB,QAAW,QAAA,GAAA,qBAAA,CAAsB,MAAM,OAAO,CAAA;AAE9C,QAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,OAAA,CAAsB,KAAK,IAAI,CAAA;AAG5D,QAAA,IACE,QACA,IAAA,OAAO,QAAa,KAAA,QAAA,IACpB,YAAgB,IAAA,QAAA;AAAA,QAEhB,CAAC,QAAQ,GAAI,CAAA,cAAA,CAAe,YAAY,QAAS,CAAA,IAAA,CAAK,IAAI,CAC1D,EAAA;AAEA,UAAA,MAAM,aAAiB,GAAA,CAAA,QAAA,IAAY,EAAC,EAAG,MAAO,CAAA,CAAC,GAAQ,KAAA,CAAC,CAAC,QAAA,CAAS,UAAa,GAAA,GAAG,CAAC,CAAA;AACnF,UAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,YAAA,QAAA,GAAWE,iBAAe,CAAA,QAAA,EAAU,aAAe,EAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AAAA;AAC7E;AACF,OAGG,MAAA;AACH,QAAA,MAAM,YAAe,GAAA,CAAC,GAAI,QAAA,IAAY,EAAG,CAAA;AACzC,QAAA,IAAI,OAAO,IAAS,KAAA,QAAA,IAAY,MAAM,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAC5D,UAAa,YAAA,CAAA,IAAA,CAAK,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA;AAEpC,QAAA,QAAA,GAAW,sBAAsB,EAAE,GAAG,MAAM,QAAU,EAAA,YAAA,IAAgB,OAAO,CAAA;AAAA;AAG/E,MAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA;AAEtB,IAAO,OAAA,MAAA;AAAA;AAIT,EAAA,IAAI,SAAqC,GAAA,MAAA;AAGzC,EAAM,MAAA,cAAA,GAAiB,yBAA0B,CAAA,YAAA,EAAc,OAAO,CAAA;AACtE,EAAA,MAAM,YAAY,wBAAyB,CAAA,YAAA,CAAa,SAAS,EAAC,EAAG,aAAa,QAAQ,CAAA;AAC1F,EAAI,IAAA,cAAA,IAAkB,UAAU,MAAQ,EAAA;AACtC,IAAA,MAAM,KAAiC,GAAA,SAAA,CAAU,MAAS,GAAAC,iBAAA,CAAe,SAAS,CAAI,GAAA,MAAA;AACtF,IAAA,SAAA,GAAYA,kBAAe,CAAC,GAAI,cAAiB,GAAA,CAAC,cAAc,CAAI,GAAA,EAAK,EAAA,GAAI,QAAQ,CAAC,KAAK,CAAI,GAAA,EAAG,CAAC,CAAA;AAAA;AAIrG,EAAA,MAAM,YAAY,wBAAyB,CAAA,YAAA,CAAa,KAAS,IAAA,IAAI,OAAO,CAAA;AAC5E,EAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,IAAY,SAAA,GAAAL,UAAA,CAAQ,CAAC,GAAI,SAAY,GAAA,CAAC,SAAS,CAAA,GAAI,EAAC,EAAI,GAAG,SAAS,CAAC,CAAA;AAAA;AAGvE,EAAA,MAAM,SAAY,GAAA,wBAAA;AAAA,IAChB,YAAA,CAAa,SACV,MAAU,IAAA,YAAA,IACT,aAAa,IAAS,KAAA,QAAA,IACrB,YAAa,CAAA,IAAA,IAChB,EAAC;AAAA,IACH;AAAA,GACF;AACA,EAAA,IAAI,UAAU,MAAQ,EAAA;AAEpB,IAAI,IAAA,SAAA,CAAU,KAAM,CAAAM,gBAAa,CAAG,EAAA;AAClC,MAAY,SAAA,GAAAN,UAAA,CAAQ,CAAC,GAAI,SAAY,GAAA,CAAC,SAAS,CAAA,GAAI,EAAC,EAAI,GAAG,SAAS,CAAC,CAAA;AAAA,KAChE,MAAA;AACL,MAAA,SAAA,GAAYK,iBAAe,CAAA,CAAC,GAAI,SAAA,GAAY,CAAC,SAAS,CAAI,GAAA,EAAK,EAAAL,UAAA,CAAQ,SAAS,CAAC,CAAC,CAAA;AAAA;AACpF;AAIF,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA,IAAI,UAAU,YAAc,EAAA;AAC1B,MAAA,SAAA,GAAYO,YAASC,SAAQ,EAAA,OAAA,CAAQ,GAAI,CAAA,mBAAA,GAAsBf,aAAUD,QAAK,CAAA;AAAA,KACzE,MAAA;AACL,MAAY,SAAA,GAAAC,UAAA;AAAA;AACd;AAGF,EAAI,IAAA,SAAA,KAAcA,UAAW,IAAA,YAAA,CAAa,QAAU,EAAA;AAClD,IAAY,SAAA,GAAAgB,aAAA,CAAW,CAAC,SAAS,CAAC,CAAA;AAAA;AAGpC,EAAO,OAAA,SAAA;AACT;AAKA,SAAS,yBAAA,CAA0B,cAA4B,OAAwD,EAAA;AACrH,EAAI,IAAA,MAAA,IAAU,YAAgB,IAAA,YAAA,CAAa,IAAM,EAAA;AAC/C,IAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,SAAA,KAAc,UAAY,EAAA;AAC/C,MAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,CAAU,cAAc,OAAO,CAAA;AAC1D,MAAI,IAAA,MAAA,IAAU,OAAO,MAAA,KAAW,QAAU,EAAA;AACxC,QAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,UAAA,IAAI,OAAO,aAAe,EAAA;AACxB,YAAA,OAAOV,YAAG,OAAQ,CAAA,mBAAA,CAAoB,CAAC,MAAO,CAAA,MAAA,EAAQW,YAAS,CAAC,CAAA;AAAA,WAC3D,MAAA;AACL,YAAA,OAAO,MAAO,CAAA,MAAA;AAAA;AAChB,SACK,MAAA;AACL,UAAO,OAAA,MAAA;AAAA;AACT;AACF;AAKF,IAAI,IAAA,YAAA,CAAa,SAAS,MAAQ,EAAA;AAChC,MAAO,OAAAT,OAAA;AAAA;AAGT,IAAI,IAAA,YAAA,CAAa,SAAS,QAAU,EAAA;AAClC,MAAO,OAAAO,SAAA;AAAA;AAGT,IAAA,IAAI,YAAa,CAAA,IAAA,KAAS,QAAY,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACrE,MAAO,OAAAG,SAAA;AAAA;AAGT,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAO,OAAAC,UAAA;AAAA;AAIT,IAAI,IAAA,YAAA,CAAa,SAAS,OAAS,EAAA;AAEjC,MAAA,IAAI,QAAwB,GAAAnB,UAAA;AAE5B,MAAA,IAAI,aAAa,WAAe,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACjE,QAAM,MAAA,WAAA,GAAc,YAAa,CAAA,WAAA,IAAgB,YAAa,CAAA,KAAA;AAC9D,QAAW,QAAA,GAAAM,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,WAAY,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,qBAAsB,CAAA,IAAA,EAAM,OAAO,CAAC,CAAC,CAAA;AAAA,OAC3G,MAAA,IAES,aAAa,KAAO,EAAA;AAC3B,QAAI,IAAA,MAAA,CAAO,aAAa,KAAO,EAAA,MAAM,KAAK,YAAa,CAAA,KAAA,CAAM,SAAS,OAAS,EAAA;AAC7E,UAAA,QAAA,GAAWA,YAAG,OAAQ,CAAA,mBAAA,CAAoB,sBAAsB,YAAa,CAAA,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,SACvF,MAAA;AACL,UAAW,QAAA,GAAA,qBAAA,CAAsB,YAAa,CAAA,KAAA,EAAO,OAAO,CAAA;AAAA;AAC9D;AAGF,MAAM,MAAA,GAAA,GACJ,OAAO,YAAa,CAAA,QAAA,KAAa,YAAY,YAAa,CAAA,QAAA,IAAY,CAAI,GAAA,YAAA,CAAa,QAAW,GAAA,CAAA;AACpG,MAAA,MAAM,GACJ,GAAA,OAAO,YAAa,CAAA,QAAA,KAAa,QAAY,IAAA,YAAA,CAAa,QAAY,IAAA,CAAA,IAAK,GAAO,IAAA,YAAA,CAAa,QAC3F,GAAA,YAAA,CAAa,QACb,GAAA,MAAA;AACN,MAAM,MAAA,gBAAA,GAAmB,OAAO,GAAA,KAAQ,QAAW,GAAA,GAAA,GAAA,CAAO,OAAO,GAAM,GAAA,CAAA,CAAA,GAAK,GAAO,IAAA,GAAA,GAAM,CAAM,CAAA,IAAA,CAAA;AAC/F,MACE,IAAA,OAAA,CAAQ,IAAI,WACX,KAAA,GAAA,KAAQ,KAAK,GAAQ,KAAA,MAAA,CAAA,IACtB,mBAAmB,EACnB,EAAA;AACA,QAAA,IAAI,QAAQ,GAAK,EAAA;AACf,UAAA,MAAM,WAA0B,EAAC;AACjC,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,YAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA;AAExB,UAAA,OAAOC,WAAQ,CAACD,WAAA,CAAG,QAAQ,mBAAoB,CAAA,QAAQ,CAAC,CAAC,CAAA;AAAA,SAC3D,MAAA,IAAY,YAAa,CAAA,QAAA,GAAsB,CAAG,EAAA;AAEhD,UAAA,MAAM,UAAyB,EAAC;AAEhC,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,IAAA,CAAM,GAAO,IAAA,CAAA,IAAK,KAAK,CAAK,EAAA,EAAA;AAC1C,YAAA,MAAM,WAA0B,EAAC;AACjC,YAAA,KAAA,IAAS,CAAI,GAAA,GAAA,EAAK,CAAI,GAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAClC,cAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA;AAExB,YAAA,OAAA,CAAQ,IAAK,CAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,QAAQ,CAAC,CAAA;AAAA;AAEvD,UAAA,OAAOC,WAAQ,OAAO,CAAA;AAAA,SAGnB,MAAA;AACH,UAAA,MAAM,WAA0B,EAAC;AACjC,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,YAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA;AAExB,UAAS,QAAA,CAAA,IAAA,CAAKD,YAAG,OAAQ,CAAA,kBAAA,CAAmBA,YAAG,OAAQ,CAAA,mBAAA,CAAoB,QAAQ,CAAC,CAAC,CAAA;AACrF,UAAO,OAAAA,WAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA;AAChD;AAGF,MAAA,MAAM,SACJ,GAAAA,WAAA,CAAG,eAAgB,CAAA,QAAQ,CAAK,IAAAA,WAAA,CAAG,eAAgB,CAAA,QAAQ,CACvD,GAAA,QAAA,GACAA,WAAG,CAAA,OAAA,CAAQ,oBAAoB,QAAQ,CAAA;AAE7C,MAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,GACfA,WAAG,CAAA,OAAA,CAAQ,uBAAuBA,WAAG,CAAA,UAAA,CAAW,eAAiB,EAAA,SAAS,CAC1E,GAAA,SAAA;AAAA;AAIN,IAAI,IAAA,KAAA,CAAM,QAAQ,YAAa,CAAA,IAAI,KAAK,CAAC,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAEpE,MAAA,MAAM,cAA6B,EAAC;AACpC,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,YAAa,CAAA,KAAK,CAAG,EAAA;AACrC,QAAW,KAAA,MAAA,CAAA,IAAK,aAAa,IAAM,EAAA;AACjC,UACG,IAAA,CAAA,CAAA,KAAM,aAAa,CAAM,KAAA,QAAA,IAAY,MAAM,QAAY,IAAA,CAAA,KAAM,SAAa,IAAA,CAAA,KAAM,MACjF,KAAA,YAAA,CAAa,MAAM,IAAK,CAAA,CAAC,CAAM,KAAA,OAAO,CAAM,KAAA,QAAA,IAAY,UAAU,CAAK,IAAA,CAAA,CAAE,IAAS,KAAA,CAAC,CACnF,EAAA;AACA,YAAA;AAAA;AAEF,UAAY,WAAA,CAAA,IAAA;AAAA,YACV,CAAM,KAAA,MAAA,IAAU,CAAM,KAAA,IAAA,GAClBE,OACA,GAAA,qBAAA;AAAA,cACE,EAAE,GAAG,YAAA,EAAc,IAAM,EAAA,CAAA,EAAG,OAAO,MAAU,EAAA;AAAA;AAAA,cAC7C;AAAA;AACF,WACN;AAAA;AACF,OACK,MAAA;AACL,QAAW,KAAA,MAAA,CAAA,IAAK,aAAa,IAAM,EAAA;AACjC,UAAI,IAAA,CAAA,KAAM,MAAU,IAAA,CAAA,KAAM,IAAM,EAAA;AAC9B,YAAA,WAAA,CAAY,KAAKA,OAAI,CAAA;AAAA,WAChB,MAAA;AACL,YAAY,WAAA,CAAA,IAAA,CAAK,sBAAsB,EAAE,GAAG,cAAc,IAAM,EAAA,CAAA,EAAqB,EAAA,OAAO,CAAC,CAAA;AAAA;AAC/F;AACF;AAEF,MAAA,OAAOD,WAAQ,WAAW,CAAA;AAAA;AAC5B;AAIF,EAAA,MAAM,iBAAmC,EAAC;AAG1C,EAAA,KAAA,MAAW,CAAK,IAAA,CAAC,OAAS,EAAA,OAAO,CAAY,EAAA;AAC3C,IAAI,IAAA,CAAC,YAAa,CAAA,CAAC,CAAG,EAAA;AACpB,MAAA;AAAA;AAOF,IAAM,MAAA,aAAA,GACJ,CAAC,YAAa,CAAA,aAAA,IACd,CAAC,OAAQ,CAAA,GAAA,CAAI,eAAe,WAAY,CAAA,QAAA,CAAS,QAAQ,IAAQ,IAAA,EAAE,KACnE,OAAQ,CAAA,GAAA,CAAI,eAAe,OAAQ,CAAA,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACvD,IAAA,IAAI,aAAe,EAAA;AACjB,MAAe,cAAA,CAAA,OAAA;AAAA,QACba,kCAA4B,aAAe,EAAA;AAAA,UACzC,IAAA,EAAM,QAAQ,IAAQ,IAAA,EAAA;AAAA,UACtB,QAAA,EAAU,QAAQ,GAAI,CAAA;AAAA,SACvB;AAAA,OACH;AACA,MAAA;AAAA;AACF;AAGF,EACG,IAAA,YAAA,IAAgB,gBAAgB,YAAa,CAAA,UAAA,IAAc,OAAO,IAAK,CAAA,YAAA,CAAa,UAAU,CAAE,CAAA,MAAA,IAChG,0BAA0B,YAAgB,IAAA,YAAA,CAAa,wBACvD,mBAAuB,IAAA,YAAA,IAAgB,aAAa,iBACpD,IAAA,OAAA,IAAW,YAAgB,IAAA,YAAA,CAAa,KACzC,EAAA;AAEA,IAAA,IAAI,OAAO,IAAK,CAAA,YAAA,CAAa,cAAc,EAAE,EAAE,MAAQ,EAAA;AACrD,MAAW,KAAA,MAAA,CAAC,CAAG,EAAA,CAAC,CAAK,IAAAC,gBAAA,CAAW,YAAa,CAAA,UAAA,IAAc,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAC3E,QAAK,IAAA,OAAO,MAAM,QAAY,IAAA,OAAO,MAAM,SAAc,IAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAG,EAAA;AACzE,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAG,EAAA,OAAA,CAAQ,IAAI,CAAA,mBAAA,EAAsB,CAAC,CAAA,yCAAA,EACpC,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,OAAU,GAAA,OAAO,CACtC,CAAA;AAAA,WACF;AAAA;AAGF,QAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,YACtB,GAAA,OAAO,MAAM,QACT,GAAA;AAAA,UACE,IAAA,EAAM,MAAU,IAAA,CAAA,IAAK,CAAE,CAAA,IAAA;AAAA,UACvB,QAAA,EAAU,UAAc,IAAA,CAAA,IAAK,CAAE,CAAA,QAAA;AAAA,UAC/B,UAAY,EAAA,SAAA,IAAa,CAAK,IAAA,CAAA,CAAE,OAAY,KAAA;AAAA,YAE9C,EAAC;AAGP,QAAI,IAAA,OAAA,CAAQ,IAAI,iBAAmB,EAAA;AACjC,UAAA,MAAM,WAAW,IAAO,GAAA,OAAA,CAAQ,GAAI,CAAA,OAAA,CAAsB,IAAI,CAAI,GAAA,CAAA;AAClE,UAAA,IAAK,UAA2B,UAAY,EAAA;AAC1C,YAAA;AAAA;AACF;AAEF,QAAA,IAAI,QACF,GAAA,YAAA,CAAa,QAAU,EAAA,QAAA,CAAS,CAAC,CAChC,IAAA,YAAA,CAAa,QAAa,KAAA,MAAA,IAAa,QAAQ,GAAI,CAAA,2BAAA,IACnD,UACC,IAAA,OAAA,CAAQ,IAAI,kBACZ,IAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,QAAS,CAAA,YAAY,CACpC,IAAA,CAAC,QAAQ,IAAM,EAAA,QAAA,CAAS,aAAa,CAAA,IACrC,CAAC,OAAQ,CAAA,IAAA,EAAM,QAAS,CAAA,eAAe,IACrC,MACA,GAAAC,iBAAA;AACN,QAAA,IAAI,OAAO,IACP,GAAArB,UAAA,CAAQ,IAAI,CAAA,GACZ,sBAAsB,CAAG,EAAA;AAAA,UACvB,GAAG,OAAA;AAAA,UACH,MAAMQ,eAAU,CAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,CAAC,CAAC;AAAA,SAClC,CAAA;AAEL,QAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,SAAA,KAAc,UAAY,EAAA;AAC/C,UAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,CAAU,GAAmB,OAAO,CAAA;AAC/D,UAAI,IAAA,MAAA,IAAU,OAAO,MAAA,KAAW,QAAU,EAAA;AACxC,YAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,cAAA,IAAA,GAAO,MAAO,CAAA,MAAA;AACd,cAAW,QAAA,GAAA,MAAA,CAAO,gBAAgBa,iBAAiB,GAAA,QAAA;AAAA,aAC9C,MAAA;AACL,cAAO,IAAA,GAAA,MAAA;AAAA;AACT;AACF;AAGF,QAAI,IAAA,QAAA,GAAWhB,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACJiB,cAAY,CAAA;AAAA,YAC9B,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,SAAa,IAAA;AAAA,WACpC,CAAA;AAAA;AAAA,UACmBC,mBAAgB,CAAC,CAAA;AAAA;AAAA,UACjB,QAAA;AAAA;AAAA,UACA;AAAA,SACtB;AAGA,QAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,iBAAA,KAAsB,UAAY,EAAA;AACvD,UAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,iBAAA,CAAkB,UAAU,CAAmB,EAAA;AAAA,YACxE,GAAG,OAAA;AAAA,YACH,MAAMf,eAAU,CAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,CAAC,CAAC;AAAA,WAClC,CAAA;AACD,UAAA,IAAI,MAAQ,EAAA;AACV,YAAW,QAAA,GAAA,MAAA;AAAA;AACb;AAGF,QAAAgB,kBAAA,CAAgB,GAAG,QAAQ,CAAA;AAC3B,QAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA;AAC9B;AAIF,IAAI,IAAA,YAAA,CAAa,KAAS,IAAA,OAAO,YAAa,CAAA,KAAA,KAAU,QAAY,IAAA,MAAA,CAAO,IAAK,CAAA,YAAA,CAAa,KAAK,CAAA,CAAE,MAAQ,EAAA;AAC1G,MAAA,MAAM,UAA4B,EAAC;AACnC,MAAW,KAAA,MAAA,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAQ,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACvD,QAAI,IAAA,QAAA,GAAWnB,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACLiB,cAAY,CAAA;AAAA,YAC7B,QAAA,EAAU,QAAQ,GAAI,CAAA,SAAA,IAAc,cAAc,CAAK,IAAA,CAAC,CAAC,CAAE,CAAA;AAAA,WAC5D,CAAA;AAAA;AAAA,UACmBC,mBAAgB,CAAC,CAAA;AAAA;AAAA,UACjB,MAAA;AAAA;AAAA,UACA,sBAAsB,CAAG,EAAA;AAAA,YAC3C,GAAG,OAAA;AAAA,YACH,MAAMf,eAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,OAAA,EAAS,CAAC,CAAC;AAAA,WAC3C;AAAA,SACH;AAGA,QAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,iBAAA,KAAsB,UAAY,EAAA;AACvD,UAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,iBAAA,CAAkB,UAAU,CAAmB,EAAA;AAAA,YACxE,GAAG,OAAA;AAAA,YACH,MAAMA,eAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,OAAA,EAAS,CAAC,CAAC;AAAA,WAC3C,CAAA;AACD,UAAA,IAAI,MAAQ,EAAA;AACV,YAAW,QAAA,GAAA,MAAA;AAAA;AACb;AAGF,QAAAgB,kBAAA,CAAgB,GAAG,QAAQ,CAAA;AAC3B,QAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA;AAEvB,MAAe,cAAA,CAAA,IAAA;AAAA,QACbnB,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACW,MAAA;AAAA;AAAA,UACAkB,mBAAgB,OAAO,CAAA;AAAA;AAAA,UACvB,MAAA;AAAA;AAAA,UACAlB,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,OAAO;AAAA;AAC9D,OACF;AAAA;AAIF,IAAM,MAAA,+BAAA,GACJ,OAAO,YAAa,CAAA,oBAAA,KAAyB,YAAY,MAAO,CAAA,IAAA,CAAK,YAAa,CAAA,oBAAoB,CAAE,CAAA,MAAA;AAC1G,IAAA,MAAM,+BACJ,GAAA,YAAA,CAAa,oBAAyB,KAAA,IAAA,IACrC,OAAO,YAAA,CAAa,oBAAyB,KAAA,QAAA,IAC5C,MAAO,CAAA,IAAA,CAAK,YAAa,CAAA,oBAAoB,EAAE,MAAW,KAAA,CAAA;AAC9D,IAAM,MAAA,4BAAA,GACJ,OAAO,YAAa,CAAA,iBAAA,KAAsB,YAAY,MAAO,CAAA,IAAA,CAAK,YAAa,CAAA,iBAAiB,CAAE,CAAA,MAAA;AACpG,IAAA,MAAM,mBAAmB,EAAC;AAC1B,IAAA,IAAI,+BAAiC,EAAA;AACnC,MAAA,gBAAA,CAAiB,KAAK,qBAAsB,CAAA,YAAA,CAAa,oBAAsC,EAAA,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA;AAE/G,IAAA,IAAI,mCAAoC,CAAC,YAAA,CAAa,oBAAwB,IAAA,OAAA,CAAQ,IAAI,oBAAuB,EAAA;AAC/G,MAAA,gBAAA,CAAiB,KAAKN,UAAO,CAAA;AAAA;AAE/B,IAAA,IAAI,4BAA8B,EAAA;AAChC,MAAW,KAAA,MAAA,CAAC,CAAG,EAAA,CAAC,CAAK,IAAAqB,gBAAA,CAAW,YAAa,CAAA,iBAAA,IAAqB,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAClF,QAAA,gBAAA,CAAiB,IAAK,CAAA,qBAAA,CAAsB,CAAG,EAAA,OAAO,CAAC,CAAA;AAAA;AACzD;AAGF,IAAI,IAAA,gBAAA,CAAiB,WAAW,CAAG,EAAA;AACjC,MAAA,OAAO,eAAe,MAAS,GAAAf,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,cAAc,CAAI,GAAA,MAAA;AAAA;AAGpF,IAAM,MAAA,eAAA,GAAkBC,WAAQ,gBAAgB,CAAA;AAEhD,IAAA,OAAOK,iBAAe,CAAA;AAAA,MACpB,GAAI,cAAe,CAAA,MAAA,GAAS,CAACN,WAAA,CAAG,QAAQ,qBAAsB,CAAA,cAAc,CAAC,CAAA,GAAI,EAAC;AAAA,MAClFA,WAAA,CAAG,QAAQ,qBAAsB,CAAA;AAAA,QAC/BA,YAAG,OAAQ,CAAA,oBAAA;AAAA;AAAA,UACQiB,cAAY,CAAA;AAAA,YAC3B,QAAA,EAAU,QAAQ,GAAI,CAAA;AAAA,WACvB,CAAA;AAAA;AAAA,UACgB;AAAA,YACfjB,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,cACY,MAAA;AAAA;AAAA,cACA,MAAA;AAAA;AAAA,cACAA,WAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA;AAAA,cACjC,MAAA;AAAA;AAAA,cACAS;AAAA;AACvB,WACF;AAAA;AAAA,UACiB;AAAA;AACnB,OACD;AAAA,KACF,CAAA;AAAA;AAGH,EAAA,OAAO,eAAe,MAAS,GAAAT,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,cAAc,CAAI,GAAA,MAAA;AACpF;AAQA,SAAS,MAAA,CAAyB,gBAAyB,GAAmD,EAAA;AAC5G,EAAA,OAAO,OAAO,cAAA,KAAmB,QAAY,IAAA,cAAA,KAAmB,QAAQ,GAAO,IAAA,cAAA;AACjF;;;;;"}
|
|
27
607
|
|
|
28
608
|
diff --git a/dist/transform/schema-object.mjs b/dist/transform/schema-object.mjs
|
|
29
|
-
index
|
|
609
|
+
index f13ebbad3bee4844d1fb5e9c1563e6fb7a21610d..508c4ea8fd8255c438508550493eadc0377c90d5 100644
|
|
30
610
|
--- a/dist/transform/schema-object.mjs
|
|
31
611
|
+++ b/dist/transform/schema-object.mjs
|
|
32
|
-
@@ -1,
|
|
612
|
+
@@ -1,10 +1,10 @@
|
|
33
613
|
import { parseRef } from '@redocly/openapi-core/lib/ref-utils.js';
|
|
34
614
|
import ts from 'typescript';
|
|
35
615
|
-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';
|
|
36
617
|
+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';
|
|
37
|
-
|
|
618
|
+
+import { createRef, createDiscriminatorProperty, getEntries } from '../lib/utils.mjs';
|
|
38
619
|
|
|
39
|
-
|
|
40
|
-
|
|
620
|
+
-function transformSchemaObject(schemaObject, options) {
|
|
621
|
+
- const type = transformSchemaObjectWithComposition(schemaObject, options);
|
|
622
|
+
+function transformSchemaObject(schemaObject, options, fromAdditionalProperties = false) {
|
|
623
|
+
+ const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);
|
|
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) {
|
|
628
|
+
}
|
|
629
|
+
return type;
|
|
630
|
+
}
|
|
631
|
+
-function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
632
|
+
+function transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties = false) {
|
|
633
|
+
if (!schemaObject) {
|
|
634
|
+
return NEVER;
|
|
635
|
+
}
|
|
636
|
+
@@ -64,12 +64,30 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
637
|
+
}
|
|
638
|
+
const unionType = tsUnion(enumType);
|
|
639
|
+
if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
640
|
+
- let enumValuesVariableName = parseRef(options.path ?? "").pointer.join("/");
|
|
641
|
+
+ const parsed = parseRef(options.path ?? "");
|
|
642
|
+
+ let enumValuesVariableName = parsed.pointer.join("/");
|
|
643
|
+
enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
644
|
+
enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
645
|
+
+ const cleanedPointer = [];
|
|
646
|
+
+ for (let i = 0; i < parsed.pointer.length; i++) {
|
|
647
|
+
+ const segment = parsed.pointer[i];
|
|
648
|
+
+ if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
649
|
+
+ const next = parsed.pointer[i + 1];
|
|
650
|
+
+ if (/^\d+$/.test(next)) {
|
|
651
|
+
+ i++;
|
|
652
|
+
+ continue;
|
|
653
|
+
+ }
|
|
654
|
+
+ }
|
|
655
|
+
+ cleanedPointer.push(segment);
|
|
656
|
+
+ }
|
|
657
|
+
+ const cleanedRefPath = createRef(cleanedPointer);
|
|
658
|
+
const enumValuesArray = tsArrayLiteralExpression(
|
|
659
|
+
enumValuesVariableName,
|
|
660
|
+
- oapiRef(options.path ?? ""),
|
|
661
|
+
+ // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
662
|
+
+ fromAdditionalProperties ? ts.factory.createIndexedAccessTypeNode(
|
|
663
|
+
+ oapiRef(cleanedRefPath, void 0, true),
|
|
664
|
+
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("string"))
|
|
665
|
+
+ ) : oapiRef(cleanedRefPath, void 0, true),
|
|
666
|
+
schemaObject.enum,
|
|
667
|
+
{
|
|
668
|
+
export: true,
|
|
669
|
+
@@ -81,10 +99,16 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
670
|
+
}
|
|
671
|
+
return unionType;
|
|
672
|
+
}
|
|
673
|
+
- function collectUnionCompositions(items) {
|
|
674
|
+
+ function collectUnionCompositions(items, unionKey) {
|
|
675
|
+
const output = [];
|
|
676
|
+
- for (const item of items) {
|
|
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) {
|
|
41
690
|
}
|
|
42
691
|
itemType = transformSchemaObject({ ...item, required: itemRequired }, options);
|
|
43
692
|
}
|
|
@@ -51,14 +700,57 @@ index bfcae19270bf33024cc76dbc78aa24617ef7876e..21952be9acd322ad6774d93e561b1381
|
|
|
51
700
|
}
|
|
52
701
|
return output;
|
|
53
702
|
}
|
|
703
|
+
@@ -125,12 +144,13 @@ function transformSchemaObjectWithComposition(schemaObject, options) {
|
|
704
|
+
const allOf = allOfType.length ? tsIntersection(allOfType) : void 0;
|
|
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]);
|
|
711
|
+
}
|
|
712
|
+
const oneOfType = collectUnionCompositions(
|
|
713
|
+
- schemaObject.oneOf || "type" in schemaObject && schemaObject.type === "object" && schemaObject.enum || []
|
|
714
|
+
+ schemaObject.oneOf || "type" in schemaObject && schemaObject.type === "object" && schemaObject.enum || [],
|
|
715
|
+
+ "oneOf"
|
|
716
|
+
);
|
|
717
|
+
if (oneOfType.length) {
|
|
718
|
+
if (oneOfType.every(tsIsPrimitive)) {
|
|
719
|
+
@@ -374,7 +394,7 @@ function transformSchemaObjectCore(schemaObject, options) {
|
|
720
|
+
const hasExplicitPatternProperties = typeof schemaObject.patternProperties === "object" && Object.keys(schemaObject.patternProperties).length;
|
|
721
|
+
const stringIndexTypes = [];
|
|
722
|
+
if (hasExplicitAdditionalProperties) {
|
|
723
|
+
- stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties, options));
|
|
724
|
+
+ stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties, options, true));
|
|
725
|
+
}
|
|
726
|
+
if (hasImplicitAdditionalProperties || !schemaObject.additionalProperties && options.ctx.additionalProperties) {
|
|
727
|
+
stringIndexTypes.push(UNKNOWN);
|
|
54
728
|
diff --git a/dist/transform/schema-object.mjs.map b/dist/transform/schema-object.mjs.map
|
|
55
|
-
index
|
|
729
|
+
index 3d87a1c0c7eccce598985d3815eeb89919b7398d..8f2555b229e22b61f971ccacadda303beedff16d 100644
|
|
56
730
|
--- a/dist/transform/schema-object.mjs.map
|
|
57
731
|
+++ b/dist/transform/schema-object.mjs.map
|
|
58
732
|
@@ -1 +1 @@
|
|
59
|
-
-{"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 BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n QUESTION_TOKEN,\n STRING,\n UNDEFINED,\n UNKNOWN,\n addJSDocComment,\n oapiRef,\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} 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 (\"$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 const 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 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 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 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\n if (schemaObject.additionalProperties || options.ctx.additionalProperties) {\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const addlType = hasExplicitAdditionalProperties\n ? transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options)\n : UNKNOWN;\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 */ addlType,\n ),\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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"}
|
|
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;;;;"}
|
|
60
743
|
|
|
61
|
-
+{"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 BOOLEAN,\n NEVER,\n NULL,\n NUMBER,\n QUESTION_TOKEN,\n STRING,\n UNDEFINED,\n UNKNOWN,\n addJSDocComment,\n oapiRef,\n tsArrayLiteralExpression,\n tsEnum,\n tsIntersection,\n tsIsPrimitive,\n tsLiteral,\n tsModifiers,\n tsNullable,\n tsPropertyIndex,\n tsRecord,\n tsUnion,\n tsWithRequired,\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 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 ?? []);\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 (\"$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 const 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 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 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 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\n if (schemaObject.additionalProperties || options.ctx.additionalProperties) {\n const hasExplicitAdditionalProperties =\n typeof schemaObject.additionalProperties === \"object\" && Object.keys(schemaObject.additionalProperties).length;\n const addlType = hasExplicitAdditionalProperties\n ? transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options)\n : UNKNOWN;\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 */ addlType,\n ),\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":";;;;;AAgCwB,SAAA,qBAAA,CACtB,cACA,OACa,EAAA;AACb,EAAM,MAAA,IAAA,GAAO,oCAAqC,CAAA,YAAA,EAAc,OAAO,CAAA;AACvE,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,aAAA,KAAkB,UAAY,EAAA;AACnD,IAAA,MAAM,mBAAsB,GAAA,OAAA,CAAQ,GAAI,CAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AACnE,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAO,OAAA,mBAAA;AAAA;AACT;AAEF,EAAO,OAAA,IAAA;AACT;AAKgB,SAAA,oCAAA,CACd,cACA,OACa,EAAA;AAMb,EAAA,IAAI,CAAC,YAAc,EAAA;AACjB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,IAAK,iBAA6B,IAAM,EAAA;AACtC,IAAO,OAAA,OAAA;AAAA;AAGT,EAAA,IAAI,MAAM,OAAQ,CAAA,YAAY,CAAK,IAAA,OAAO,iBAAiB,QAAU,EAAA;AACnE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,KAAM,CAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,UAAU,OAAO,YAAY,CAAO,IAAA,EAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,KACnH;AAAA;AAMF,EAAA,IAAI,UAAU,YAAc,EAAA;AAC1B,IAAO,OAAA,OAAA,CAAQ,aAAa,IAAI,CAAA;AAAA;AAMlC,EAAA,IAAI,YAAa,CAAA,KAAA,KAAU,IAAQ,IAAA,YAAA,CAAa,UAAU,MAAW,EAAA;AACnE,IAAO,OAAA,SAAA,CAAU,aAAa,KAAK,CAAA;AAAA;AAOrC,EAAA,IACE,MAAM,OAAQ,CAAA,YAAA,CAAa,IAAI,CAAA,KAC9B,EAAE,MAAU,IAAA,YAAA,CAAA,IAAiB,YAAa,CAAA,IAAA,KAAS,aACpD,EAAE,YAAA,IAAgB,YAClB,CAAA,IAAA,EAAE,0BAA0B,YAC5B,CAAA,EAAA;AAEA,IAAA,IACE,QAAQ,GAAI,CAAA,IAAA,IACZ,YAAa,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,YAAY,OAAO,CAAA,KAAM,QAAY,IAAA,CAAA,KAAM,IAAI,CAC3F,EAAA;AACA,MAAI,IAAA,QAAA,GAAW,SAAS,OAAQ,CAAA,IAAA,IAAQ,EAAE,CAAE,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAE5D,MAAW,QAAA,GAAA,QAAA,CAAS,OAAQ,CAAA,oBAAA,EAAsB,EAAE,CAAA;AACpD,MAAA,MAAM,WAAW,YAAa,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,GAAG,CAAO,MAAA;AAAA,QAChD,IAAA,EAAM,aAAa,iBAAiB,CAAA,GAAI,CAAC,CAAK,IAAA,YAAA,CAAa,aAAa,CAAA,GAAI,CAAC,CAAA;AAAA,QAC7E,WAAA,EAAa,aAAa,qBAAqB,CAAA,GAAI,CAAC,CAAK,IAAA,YAAA,CAAa,oBAAoB,CAAA,GAAI,CAAC;AAAA,OAC/F,CAAA,CAAA;AAGF,MAAA,IAAI,OAAU,GAAA,KAAA;AACd,MAAA,MAAM,gBAAmB,GAAA,YAAA,CAAa,IAAK,CAAA,MAAA,CAAO,CAAC,SAAc,KAAA;AAC/D,QAAA,IAAI,cAAc,IAAM,EAAA;AACtB,UAAU,OAAA,GAAA,IAAA;AACV,UAAO,OAAA,KAAA;AAAA;AAGT,QAAO,OAAA,IAAA;AAAA,OACR,CAAA;AACD,MAAA,MAAMA,SAAW,GAAA,MAAA,CAAO,QAAU,EAAA,gBAAA,EAAyC,QAAU,EAAA;AAAA,QACnF,WAAA,EAAa,QAAQ,GAAI,CAAA,WAAA;AAAA,QACzB,MAAQ,EAAA;AAAA;AAAA,OAET,CAAA;AACD,MAAA,IAAI,CAAC,OAAQ,CAAA,GAAA,CAAI,YAAa,CAAA,QAAA,CAASA,SAAQ,CAAG,EAAA;AAChD,QAAQ,OAAA,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAKA,SAAQ,CAAA;AAAA;AAExC,MAAA,MAAM,GAAM,GAAA,EAAA,CAAG,OAAQ,CAAA,uBAAA,CAAwBA,UAAS,IAAI,CAAA;AAC5D,MAAA,OAAO,UAAU,OAAQ,CAAA,CAAC,GAAK,EAAA,IAAI,CAAC,CAAI,GAAA,GAAA;AAAA;AAE1C,IAAA,MAAM,QAAW,GAAA,YAAA,CAAa,IAAK,CAAA,GAAA,CAAI,SAAS,CAAA;AAChD,IAAK,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAA,CAAa,IAAI,CAAA,IAAK,YAAa,CAAA,IAAA,CAAK,QAAS,CAAA,MAAM,CAAM,IAAA,YAAA,CAAa,QAAU,EAAA;AACrG,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA;AAGpB,IAAM,MAAA,SAAA,GAAY,QAAQ,QAAQ,CAAA;AAGlC,IAAA,IAAI,OAAQ,CAAA,GAAA,CAAI,UAAc,IAAA,YAAA,CAAa,KAAK,KAAM,CAAA,CAAC,CAAM,KAAA,OAAO,CAAM,KAAA,QAAA,IAAY,OAAO,CAAA,KAAM,QAAQ,CAAG,EAAA;AAC5G,MAAI,IAAA,sBAAA,GAAyB,SAAS,OAAQ,CAAA,IAAA,IAAQ,EAAE,CAAE,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAE1E,MAAyB,sBAAA,GAAA,sBAAA,CAAuB,OAAQ,CAAA,oBAAA,EAAsB,EAAE,CAAA;AAChF,MAAA,sBAAA,GAAyB,GAAG,sBAAsB,CAAA,MAAA,CAAA;AAElD,MAAA,MAAM,eAAkB,GAAA,wBAAA;AAAA,QACtB,sBAAA;AAAA,QACA,OAAA,CAAQ,OAAQ,CAAA,IAAA,IAAQ,EAAE,CAAA;AAAA,QAC1B,YAAa,CAAA,IAAA;AAAA,QACb;AAAA,UACE,MAAQ,EAAA,IAAA;AAAA,UACR,QAAU,EAAA,IAAA;AAAA,UACV,YAAA,EAAc,QAAQ,GAAI,CAAA;AAAA;AAC5B,OACF;AAEA,MAAQ,OAAA,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAK,eAAe,CAAA;AAAA;AAG/C,IAAO,OAAA,SAAA;AAAA;AAQT,EAAA,SAAS,yBAAyB,KAA2C,EAAA;AAC3E,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,MAAA,MAAA,CAAO,IAAK,CAAA,qBAAA,CAAsB,IAAM,EAAA,OAAO,CAAC,CAAA;AAAA;AAGlD,IAAO,OAAA,MAAA;AAAA;AAIT,EAAS,SAAA,wBAAA,CAAyB,OAA2C,QAAoC,EAAA;AAC/G,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,MAAI,IAAA,QAAA;AAGJ,MAAA,IAAI,UAAU,IAAM,EAAA;AAClB,QAAW,QAAA,GAAA,qBAAA,CAAsB,MAAM,OAAO,CAAA;AAE9C,QAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,OAAA,CAAsB,KAAK,IAAI,CAAA;AAG5D,QAAA,IACE,QACA,IAAA,OAAO,QAAa,KAAA,QAAA,IACpB,YAAgB,IAAA,QAAA;AAAA,QAEhB,CAAC,QAAQ,GAAI,CAAA,cAAA,CAAe,YAAY,QAAS,CAAA,IAAA,CAAK,IAAI,CAC1D,EAAA;AAEA,UAAA,MAAM,aAAiB,GAAA,CAAA,QAAA,IAAY,EAAC,EAAG,MAAO,CAAA,CAAC,GAAQ,KAAA,CAAC,CAAC,QAAA,CAAS,UAAa,GAAA,GAAG,CAAC,CAAA;AACnF,UAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,YAAA,QAAA,GAAW,cAAe,CAAA,QAAA,EAAU,aAAe,EAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AAAA;AAC7E;AACF,OAGG,MAAA;AACH,QAAA,MAAM,YAAe,GAAA,CAAC,GAAI,QAAA,IAAY,EAAG,CAAA;AACzC,QAAA,IAAI,OAAO,IAAS,KAAA,QAAA,IAAY,MAAM,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAC5D,UAAa,YAAA,CAAA,IAAA,CAAK,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA;AAEpC,QAAA,QAAA,GAAW,sBAAsB,EAAE,GAAG,MAAM,QAAU,EAAA,YAAA,IAAgB,OAAO,CAAA;AAAA;AAG/E,MAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA;AAEtB,IAAO,OAAA,MAAA;AAAA;AAIT,EAAA,IAAI,SAAqC,GAAA,MAAA;AAGzC,EAAM,MAAA,cAAA,GAAiB,yBAA0B,CAAA,YAAA,EAAc,OAAO,CAAA;AACtE,EAAA,MAAM,YAAY,wBAAyB,CAAA,YAAA,CAAa,SAAS,EAAC,EAAG,aAAa,QAAQ,CAAA;AAC1F,EAAI,IAAA,cAAA,IAAkB,UAAU,MAAQ,EAAA;AACtC,IAAA,MAAM,KAAiC,GAAA,SAAA,CAAU,MAAS,GAAA,cAAA,CAAe,SAAS,CAAI,GAAA,MAAA;AACtF,IAAA,SAAA,GAAY,eAAe,CAAC,GAAI,cAAiB,GAAA,CAAC,cAAc,CAAI,GAAA,EAAK,EAAA,GAAI,QAAQ,CAAC,KAAK,CAAI,GAAA,EAAG,CAAC,CAAA;AAAA;AAIrG,EAAA,MAAM,SAAY,GAAA,wBAAA,CAAyB,YAAa,CAAA,KAAA,IAAS,EAAE,CAAA;AACnE,EAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,IAAY,SAAA,GAAA,OAAA,CAAQ,CAAC,GAAI,SAAY,GAAA,CAAC,SAAS,CAAA,GAAI,EAAC,EAAI,GAAG,SAAS,CAAC,CAAA;AAAA;AAGvE,EAAA,MAAM,SAAY,GAAA,wBAAA;AAAA,IAChB,YAAA,CAAa,SACV,MAAU,IAAA,YAAA,IACT,aAAa,IAAS,KAAA,QAAA,IACrB,YAAa,CAAA,IAAA,IAChB;AAAC,GACL;AACA,EAAA,IAAI,UAAU,MAAQ,EAAA;AAEpB,IAAI,IAAA,SAAA,CAAU,KAAM,CAAA,aAAa,CAAG,EAAA;AAClC,MAAY,SAAA,GAAA,OAAA,CAAQ,CAAC,GAAI,SAAY,GAAA,CAAC,SAAS,CAAA,GAAI,EAAC,EAAI,GAAG,SAAS,CAAC,CAAA;AAAA,KAChE,MAAA;AACL,MAAA,SAAA,GAAY,cAAe,CAAA,CAAC,GAAI,SAAA,GAAY,CAAC,SAAS,CAAI,GAAA,EAAK,EAAA,OAAA,CAAQ,SAAS,CAAC,CAAC,CAAA;AAAA;AACpF;AAIF,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAA,IAAI,UAAU,YAAc,EAAA;AAC1B,MAAA,SAAA,GAAY,SAAS,MAAQ,EAAA,OAAA,CAAQ,GAAI,CAAA,mBAAA,GAAsB,UAAU,KAAK,CAAA;AAAA,KACzE,MAAA;AACL,MAAY,SAAA,GAAA,OAAA;AAAA;AACd;AAGF,EAAI,IAAA,SAAA,KAAc,OAAW,IAAA,YAAA,CAAa,QAAU,EAAA;AAClD,IAAY,SAAA,GAAA,UAAA,CAAW,CAAC,SAAS,CAAC,CAAA;AAAA;AAGpC,EAAO,OAAA,SAAA;AACT;AAKA,SAAS,yBAAA,CAA0B,cAA4B,OAAwD,EAAA;AACrH,EAAI,IAAA,MAAA,IAAU,YAAgB,IAAA,YAAA,CAAa,IAAM,EAAA;AAC/C,IAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,SAAA,KAAc,UAAY,EAAA;AAC/C,MAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,CAAU,cAAc,OAAO,CAAA;AAC1D,MAAI,IAAA,MAAA,IAAU,OAAO,MAAA,KAAW,QAAU,EAAA;AACxC,QAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,UAAA,IAAI,OAAO,aAAe,EAAA;AACxB,YAAA,OAAO,GAAG,OAAQ,CAAA,mBAAA,CAAoB,CAAC,MAAO,CAAA,MAAA,EAAQ,SAAS,CAAC,CAAA;AAAA,WAC3D,MAAA;AACL,YAAA,OAAO,MAAO,CAAA,MAAA;AAAA;AAChB,SACK,MAAA;AACL,UAAO,OAAA,MAAA;AAAA;AACT;AACF;AAKF,IAAI,IAAA,YAAA,CAAa,SAAS,MAAQ,EAAA;AAChC,MAAO,OAAA,IAAA;AAAA;AAGT,IAAI,IAAA,YAAA,CAAa,SAAS,QAAU,EAAA;AAClC,MAAO,OAAA,MAAA;AAAA;AAGT,IAAA,IAAI,YAAa,CAAA,IAAA,KAAS,QAAY,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACrE,MAAO,OAAA,MAAA;AAAA;AAGT,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAO,OAAA,OAAA;AAAA;AAIT,IAAI,IAAA,YAAA,CAAa,SAAS,OAAS,EAAA;AAEjC,MAAA,IAAI,QAAwB,GAAA,OAAA;AAE5B,MAAA,IAAI,aAAa,WAAe,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACjE,QAAM,MAAA,WAAA,GAAc,YAAa,CAAA,WAAA,IAAgB,YAAa,CAAA,KAAA;AAC9D,QAAW,QAAA,GAAA,EAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,WAAY,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,qBAAsB,CAAA,IAAA,EAAM,OAAO,CAAC,CAAC,CAAA;AAAA,OAC3G,MAAA,IAES,aAAa,KAAO,EAAA;AAC3B,QAAI,IAAA,MAAA,CAAO,aAAa,KAAO,EAAA,MAAM,KAAK,YAAa,CAAA,KAAA,CAAM,SAAS,OAAS,EAAA;AAC7E,UAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,mBAAA,CAAoB,sBAAsB,YAAa,CAAA,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,SACvF,MAAA;AACL,UAAW,QAAA,GAAA,qBAAA,CAAsB,YAAa,CAAA,KAAA,EAAO,OAAO,CAAA;AAAA;AAC9D;AAGF,MAAM,MAAA,GAAA,GACJ,OAAO,YAAa,CAAA,QAAA,KAAa,YAAY,YAAa,CAAA,QAAA,IAAY,CAAI,GAAA,YAAA,CAAa,QAAW,GAAA,CAAA;AACpG,MAAA,MAAM,GACJ,GAAA,OAAO,YAAa,CAAA,QAAA,KAAa,QAAY,IAAA,YAAA,CAAa,QAAY,IAAA,CAAA,IAAK,GAAO,IAAA,YAAA,CAAa,QAC3F,GAAA,YAAA,CAAa,QACb,GAAA,MAAA;AACN,MAAM,MAAA,gBAAA,GAAmB,OAAO,GAAA,KAAQ,QAAW,GAAA,GAAA,GAAA,CAAO,OAAO,GAAM,GAAA,CAAA,CAAA,GAAK,GAAO,IAAA,GAAA,GAAM,CAAM,CAAA,IAAA,CAAA;AAC/F,MACE,IAAA,OAAA,CAAQ,IAAI,WACX,KAAA,GAAA,KAAQ,KAAK,GAAQ,KAAA,MAAA,CAAA,IACtB,mBAAmB,EACnB,EAAA;AACA,QAAA,IAAI,QAAQ,GAAK,EAAA;AACf,UAAA,MAAM,WAA0B,EAAC;AACjC,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,YAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA;AAExB,UAAA,OAAO,QAAQ,CAAC,EAAA,CAAG,QAAQ,mBAAoB,CAAA,QAAQ,CAAC,CAAC,CAAA;AAAA,SAC3D,MAAA,IAAY,YAAa,CAAA,QAAA,GAAsB,CAAG,EAAA;AAEhD,UAAA,MAAM,UAAyB,EAAC;AAEhC,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,IAAA,CAAM,GAAO,IAAA,CAAA,IAAK,KAAK,CAAK,EAAA,EAAA;AAC1C,YAAA,MAAM,WAA0B,EAAC;AACjC,YAAA,KAAA,IAAS,CAAI,GAAA,GAAA,EAAK,CAAI,GAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAClC,cAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA;AAExB,YAAA,OAAA,CAAQ,IAAK,CAAA,EAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,QAAQ,CAAC,CAAA;AAAA;AAEvD,UAAA,OAAO,QAAQ,OAAO,CAAA;AAAA,SAGnB,MAAA;AACH,UAAA,MAAM,WAA0B,EAAC;AACjC,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,YAAA,QAAA,CAAS,KAAK,QAAQ,CAAA;AAAA;AAExB,UAAS,QAAA,CAAA,IAAA,CAAK,GAAG,OAAQ,CAAA,kBAAA,CAAmB,GAAG,OAAQ,CAAA,mBAAA,CAAoB,QAAQ,CAAC,CAAC,CAAA;AACrF,UAAO,OAAA,EAAA,CAAG,OAAQ,CAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA;AAChD;AAGF,MAAA,MAAM,SACJ,GAAA,EAAA,CAAG,eAAgB,CAAA,QAAQ,CAAK,IAAA,EAAA,CAAG,eAAgB,CAAA,QAAQ,CACvD,GAAA,QAAA,GACA,EAAG,CAAA,OAAA,CAAQ,oBAAoB,QAAQ,CAAA;AAE7C,MAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,GACf,EAAG,CAAA,OAAA,CAAQ,uBAAuB,EAAG,CAAA,UAAA,CAAW,eAAiB,EAAA,SAAS,CAC1E,GAAA,SAAA;AAAA;AAIN,IAAI,IAAA,KAAA,CAAM,QAAQ,YAAa,CAAA,IAAI,KAAK,CAAC,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAEpE,MAAA,MAAM,cAA6B,EAAC;AACpC,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,YAAa,CAAA,KAAK,CAAG,EAAA;AACrC,QAAW,KAAA,MAAA,CAAA,IAAK,aAAa,IAAM,EAAA;AACjC,UACG,IAAA,CAAA,CAAA,KAAM,aAAa,CAAM,KAAA,QAAA,IAAY,MAAM,QAAY,IAAA,CAAA,KAAM,SAAa,IAAA,CAAA,KAAM,MACjF,KAAA,YAAA,CAAa,MAAM,IAAK,CAAA,CAAC,CAAM,KAAA,OAAO,CAAM,KAAA,QAAA,IAAY,UAAU,CAAK,IAAA,CAAA,CAAE,IAAS,KAAA,CAAC,CACnF,EAAA;AACA,YAAA;AAAA;AAEF,UAAY,WAAA,CAAA,IAAA;AAAA,YACV,CAAM,KAAA,MAAA,IAAU,CAAM,KAAA,IAAA,GAClB,IACA,GAAA,qBAAA;AAAA,cACE,EAAE,GAAG,YAAA,EAAc,IAAM,EAAA,CAAA,EAAG,OAAO,MAAU,EAAA;AAAA;AAAA,cAC7C;AAAA;AACF,WACN;AAAA;AACF,OACK,MAAA;AACL,QAAW,KAAA,MAAA,CAAA,IAAK,aAAa,IAAM,EAAA;AACjC,UAAI,IAAA,CAAA,KAAM,MAAU,IAAA,CAAA,KAAM,IAAM,EAAA;AAC9B,YAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,WAChB,MAAA;AACL,YAAY,WAAA,CAAA,IAAA,CAAK,sBAAsB,EAAE,GAAG,cAAc,IAAM,EAAA,CAAA,EAAqB,EAAA,OAAO,CAAC,CAAA;AAAA;AAC/F;AACF;AAEF,MAAA,OAAO,QAAQ,WAAW,CAAA;AAAA;AAC5B;AAIF,EAAA,MAAM,iBAAmC,EAAC;AAG1C,EAAA,KAAA,MAAW,CAAK,IAAA,CAAC,OAAS,EAAA,OAAO,CAAY,EAAA;AAC3C,IAAI,IAAA,CAAC,YAAa,CAAA,CAAC,CAAG,EAAA;AACpB,MAAA;AAAA;AAOF,IAAM,MAAA,aAAA,GACJ,CAAC,YAAa,CAAA,aAAA,IACd,CAAC,OAAQ,CAAA,GAAA,CAAI,eAAe,WAAY,CAAA,QAAA,CAAS,QAAQ,IAAQ,IAAA,EAAE,KACnE,OAAQ,CAAA,GAAA,CAAI,eAAe,OAAQ,CAAA,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACvD,IAAA,IAAI,aAAe,EAAA;AACjB,MAAe,cAAA,CAAA,OAAA;AAAA,QACb,4BAA4B,aAAe,EAAA;AAAA,UACzC,IAAA,EAAM,QAAQ,IAAQ,IAAA,EAAA;AAAA,UACtB,QAAA,EAAU,QAAQ,GAAI,CAAA;AAAA,SACvB;AAAA,OACH;AACA,MAAA;AAAA;AACF;AAGF,EAAA,IACG,gBAAgB,YAAgB,IAAA,YAAA,CAAa,UAAc,IAAA,MAAA,CAAO,KAAK,YAAa,CAAA,UAAU,CAAE,CAAA,MAAA,IAChG,0BAA0B,YAAgB,IAAA,YAAA,CAAa,wBACvD,OAAW,IAAA,YAAA,IAAgB,aAAa,KACzC,EAAA;AAEA,IAAA,IAAI,OAAO,IAAK,CAAA,YAAA,CAAa,cAAc,EAAE,EAAE,MAAQ,EAAA;AACrD,MAAW,KAAA,MAAA,CAAC,CAAG,EAAA,CAAC,CAAK,IAAA,UAAA,CAAW,YAAa,CAAA,UAAA,IAAc,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAC3E,QAAK,IAAA,OAAO,MAAM,QAAY,IAAA,OAAO,MAAM,SAAc,IAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAG,EAAA;AACzE,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAG,EAAA,OAAA,CAAQ,IAAI,CAAA,mBAAA,EAAsB,CAAC,CAAA,yCAAA,EACpC,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,OAAU,GAAA,OAAO,CACtC,CAAA;AAAA,WACF;AAAA;AAGF,QAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,YACtB,GAAA,OAAO,MAAM,QACT,GAAA;AAAA,UACE,IAAA,EAAM,MAAU,IAAA,CAAA,IAAK,CAAE,CAAA,IAAA;AAAA,UACvB,QAAA,EAAU,UAAc,IAAA,CAAA,IAAK,CAAE,CAAA,QAAA;AAAA,UAC/B,UAAY,EAAA,SAAA,IAAa,CAAK,IAAA,CAAA,CAAE,OAAY,KAAA;AAAA,YAE9C,EAAC;AAGP,QAAI,IAAA,OAAA,CAAQ,IAAI,iBAAmB,EAAA;AACjC,UAAA,MAAM,WAAW,IAAO,GAAA,OAAA,CAAQ,GAAI,CAAA,OAAA,CAAsB,IAAI,CAAI,GAAA,CAAA;AAClE,UAAA,IAAK,UAA2B,UAAY,EAAA;AAC1C,YAAA;AAAA;AACF;AAEF,QAAA,IAAI,QACF,GAAA,YAAA,CAAa,QAAU,EAAA,QAAA,CAAS,CAAC,CAChC,IAAA,YAAA,CAAa,QAAa,KAAA,MAAA,IAAa,QAAQ,GAAI,CAAA,2BAAA,IACnD,UACC,IAAA,OAAA,CAAQ,IAAI,kBACZ,IAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,QAAS,CAAA,YAAY,CACpC,IAAA,CAAC,QAAQ,IAAM,EAAA,QAAA,CAAS,aAAa,CAAA,IACrC,CAAC,OAAQ,CAAA,IAAA,EAAM,QAAS,CAAA,eAAe,IACrC,MACA,GAAA,cAAA;AACN,QAAA,IAAI,OAAO,IACP,GAAA,OAAA,CAAQ,IAAI,CAAA,GACZ,sBAAsB,CAAG,EAAA;AAAA,UACvB,GAAG,OAAA;AAAA,UACH,MAAM,SAAU,CAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,CAAC,CAAC;AAAA,SAClC,CAAA;AAEL,QAAA,IAAI,OAAO,OAAA,CAAQ,GAAI,CAAA,SAAA,KAAc,UAAY,EAAA;AAC/C,UAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,SAAA,CAAU,GAAmB,OAAO,CAAA;AAC/D,UAAI,IAAA,MAAA,IAAU,OAAO,MAAA,KAAW,QAAU,EAAA;AACxC,YAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,cAAA,IAAA,GAAO,MAAO,CAAA,MAAA;AACd,cAAW,QAAA,GAAA,MAAA,CAAO,gBAAgB,cAAiB,GAAA,QAAA;AAAA,aAC9C,MAAA;AACL,cAAO,IAAA,GAAA,MAAA;AAAA;AACT;AACF;AAGF,QAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACN,WAAY,CAAA;AAAA,YAC9B,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,SAAa,IAAA;AAAA,WACpC,CAAA;AAAA;AAAA,UACmB,gBAAgB,CAAC,CAAA;AAAA;AAAA,UACjB,QAAA;AAAA;AAAA,UACA;AAAA,SACtB;AACA,QAAA,eAAA,CAAgB,GAAG,QAAQ,CAAA;AAC3B,QAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA;AAC9B;AAIF,IAAI,IAAA,YAAA,CAAa,KAAS,IAAA,OAAO,YAAa,CAAA,KAAA,KAAU,QAAY,IAAA,MAAA,CAAO,IAAK,CAAA,YAAA,CAAa,KAAK,CAAA,CAAE,MAAQ,EAAA;AAC1G,MAAA,MAAM,UAA4B,EAAC;AACnC,MAAW,KAAA,MAAA,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAQ,CAAA,YAAA,CAAa,KAAK,CAAG,EAAA;AACvD,QAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACP,WAAY,CAAA;AAAA,YAC7B,QAAA,EAAU,QAAQ,GAAI,CAAA,SAAA,IAAc,cAAc,CAAK,IAAA,CAAC,CAAC,CAAE,CAAA;AAAA,WAC5D,CAAA;AAAA;AAAA,UACmB,gBAAgB,CAAC,CAAA;AAAA;AAAA,UACjB,MAAA;AAAA;AAAA,UACA,sBAAsB,CAAG,EAAA;AAAA,YAC3C,GAAG,OAAA;AAAA,YACH,MAAM,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,OAAA,EAAS,CAAC,CAAC;AAAA,WAC3C;AAAA,SACH;AACA,QAAA,eAAA,CAAgB,GAAG,QAAQ,CAAA;AAC3B,QAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA;AAEvB,MAAe,cAAA,CAAA,IAAA;AAAA,QACb,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,UACW,MAAA;AAAA;AAAA,UACA,gBAAgB,OAAO,CAAA;AAAA;AAAA,UACvB,MAAA;AAAA;AAAA,UACA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,OAAO;AAAA;AAC9D,OACF;AAAA;AAIF,IAAA,IAAI,YAAa,CAAA,oBAAA,IAAwB,OAAQ,CAAA,GAAA,CAAI,oBAAsB,EAAA;AACzE,MAAM,MAAA,+BAAA,GACJ,OAAO,YAAa,CAAA,oBAAA,KAAyB,YAAY,MAAO,CAAA,IAAA,CAAK,YAAa,CAAA,oBAAoB,CAAE,CAAA,MAAA;AAC1G,MAAA,MAAM,WAAW,+BACb,GAAA,qBAAA,CAAsB,YAAa,CAAA,oBAAA,EAAsC,OAAO,CAChF,GAAA,OAAA;AACJ,MAAA,OAAO,cAAe,CAAA;AAAA,QACpB,GAAI,cAAe,CAAA,MAAA,GAAS,CAAC,EAAA,CAAG,QAAQ,qBAAsB,CAAA,cAAc,CAAC,CAAA,GAAI,EAAC;AAAA,QAClF,EAAA,CAAG,QAAQ,qBAAsB,CAAA;AAAA,UAC/B,GAAG,OAAQ,CAAA,oBAAA;AAAA;AAAA,YACQ,WAAY,CAAA;AAAA,cAC3B,QAAA,EAAU,QAAQ,GAAI,CAAA;AAAA,aACvB,CAAA;AAAA;AAAA,YACgB;AAAA,cACf,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,gBACY,MAAA;AAAA;AAAA,gBACA,MAAA;AAAA;AAAA,gBACA,EAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA;AAAA,gBACjC,MAAA;AAAA;AAAA,gBACA;AAAA;AACvB,aACF;AAAA;AAAA,YACiB;AAAA;AACnB,SACD;AAAA,OACF,CAAA;AAAA;AACH;AAGF,EAAA,OAAO,eAAe,MAAS,GAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,cAAc,CAAI,GAAA,MAAA;AACpF;AAQA,SAAS,MAAA,CAAyB,gBAAyB,GAAmD,EAAA;AAC5G,EAAA,OAAO,OAAO,cAAA,KAAmB,QAAY,IAAA,cAAA,KAAmB,QAAQ,GAAO,IAAA,cAAA;AACjF;;;;"}
|
|
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;;;;"}
|
|
62
754
|
|
|
63
755
|
diff --git a/package/dist/index.cjs b/package/dist/index.cjs
|
|
64
756
|
new file mode 100644
|
|
@@ -6165,11 +6857,67 @@ index 0000000000000000000000000000000000000000..c768b79002615c0e69cc6efdcad6a509
|
|
|
6165
6857
|
@@ -0,0 +1 @@
|
|
6166
6858
|
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
6167
6859
|
|
|
6860
|
+
diff --git a/src/lib/ts.ts b/src/lib/ts.ts
|
|
6861
|
+
index 534c0f84a8c7341271bc8af9fb3231178b930944..c2b8013b6189721c064ce51ac41ae0dac6179c4a 100644
|
|
6862
|
+
--- a/src/lib/ts.ts
|
|
6863
|
+
+++ b/src/lib/ts.ts
|
|
6864
|
+
@@ -164,7 +164,7 @@ function addIndexedAccess(node: ts.TypeReferenceNode | ts.IndexedAccessTypeNode,
|
|
6865
|
+
* must check the parameter definition to determine the how to index into
|
|
6866
|
+
* the openapi-typescript type.
|
|
6867
|
+
**/
|
|
6868
|
+
-export function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode {
|
|
6869
|
+
+export function oapiRef(path: string, resolved?: OapiRefResolved, deep = false): ts.TypeNode {
|
|
6870
|
+
const { pointer } = parseRef(path);
|
|
6871
|
+
if (pointer.length === 0) {
|
|
6872
|
+
throw new Error(`Error parsing $ref: ${path}. Is this a valid $ref?`);
|
|
6873
|
+
@@ -179,7 +179,9 @@ export function oapiRef(path: string, resolved?: OapiRefResolved): ts.TypeNode {
|
|
6874
|
+
const restSegments = pointer.slice(3);
|
|
6875
|
+
|
|
6876
|
+
const leadingType = addIndexedAccess(
|
|
6877
|
+
- ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(String(initialSegment))),
|
|
6878
|
+
+ ts.factory.createTypeReferenceNode(
|
|
6879
|
+
+ ts.factory.createIdentifier(deep ? `FlattenedDeepRequired<${String(initialSegment)}>` : String(initialSegment)),
|
|
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, {
|
|
6168
6916
|
diff --git a/src/transform/schema-object.ts b/src/transform/schema-object.ts
|
|
6169
|
-
index
|
|
6917
|
+
index 9e3af3dbfc81b93b53da1190a6e4a882b7d443ad..89684b0e5cc368903670bc939307c92b1335572a 100644
|
|
6170
6918
|
--- a/src/transform/schema-object.ts
|
|
6171
6919
|
+++ b/src/transform/schema-object.ts
|
|
6172
|
-
@@ -
|
|
6920
|
+
@@ -16,7 +16,6 @@ import {
|
|
6173
6921
|
tsLiteral,
|
|
6174
6922
|
tsModifiers,
|
|
6175
6923
|
tsNullable,
|
|
@@ -6177,7 +6925,88 @@ index 9c572512609561a144786b8f8773342e9499cdfb..fd7b0b9cbd9f289831496c2ded7b1be1
|
|
|
6177
6925
|
tsPropertyIndex,
|
|
6178
6926
|
tsRecord,
|
|
6179
6927
|
tsUnion,
|
|
6180
|
-
@@ -
|
|
6928
|
+
@@ -34,8 +33,9 @@ import type { ReferenceObject, SchemaObject, TransformNodeOptions } from "../typ
|
|
6929
|
+
export default function transformSchemaObject(
|
|
6930
|
+
schemaObject: SchemaObject | ReferenceObject,
|
|
6931
|
+
options: TransformNodeOptions,
|
|
6932
|
+
+ fromAdditionalProperties = false,
|
|
6933
|
+
): ts.TypeNode {
|
|
6934
|
+
- const type = transformSchemaObjectWithComposition(schemaObject, options);
|
|
6935
|
+
+ const type = transformSchemaObjectWithComposition(schemaObject, options, fromAdditionalProperties);
|
|
6936
|
+
if (typeof options.ctx.postTransform === "function") {
|
|
6937
|
+
const postTransformResult = options.ctx.postTransform(type, options);
|
|
6938
|
+
if (postTransformResult) {
|
|
6939
|
+
@@ -51,6 +51,7 @@ export default function transformSchemaObject(
|
|
6940
|
+
export function transformSchemaObjectWithComposition(
|
|
6941
|
+
schemaObject: SchemaObject | ReferenceObject,
|
|
6942
|
+
options: TransformNodeOptions,
|
|
6943
|
+
+ fromAdditionalProperties = false,
|
|
6944
|
+
): ts.TypeNode {
|
|
6945
|
+
/**
|
|
6946
|
+
* Unexpected types & edge cases
|
|
6947
|
+
@@ -138,14 +139,39 @@ export function transformSchemaObjectWithComposition(
|
|
6948
|
+
|
|
6949
|
+
// hoist array with valid enum values to top level if string/number enum and option is enabled
|
|
6950
|
+
if (options.ctx.enumValues && schemaObject.enum.every((v) => typeof v === "string" || typeof v === "number")) {
|
|
6951
|
+
- let enumValuesVariableName = parseRef(options.path ?? "").pointer.join("/");
|
|
6952
|
+
+ const parsed = parseRef(options.path ?? "");
|
|
6953
|
+
+ let enumValuesVariableName = parsed.pointer.join("/");
|
|
6954
|
+
// allow #/components/schemas to have simpler names
|
|
6955
|
+
enumValuesVariableName = enumValuesVariableName.replace("components/schemas", "");
|
|
6956
|
+
enumValuesVariableName = `${enumValuesVariableName}Values`;
|
|
6957
|
+
|
|
6958
|
+
+ // build a ref path for the type that ignores union indices (anyOf/oneOf) so
|
|
6959
|
+
+ // type references remain stable even when names include union positions
|
|
6960
|
+
+ const cleanedPointer: string[] = [];
|
|
6961
|
+
+ for (let i = 0; i < parsed.pointer.length; i++) {
|
|
6962
|
+
+ // Example: #/paths/analytics/data/get/responses/400/content/application/json/anyOf/0/message
|
|
6963
|
+
+ const segment = parsed.pointer[i];
|
|
6964
|
+
+ if ((segment === "anyOf" || segment === "oneOf") && i < parsed.pointer.length - 1) {
|
|
6965
|
+
+ const next = parsed.pointer[i + 1];
|
|
6966
|
+
+ if (/^\d+$/.test(next)) {
|
|
6967
|
+
+ // If we encounter something like "anyOf/0", we want to skip that part of the path
|
|
6968
|
+
+ i++;
|
|
6969
|
+
+ continue;
|
|
6970
|
+
+ }
|
|
6971
|
+
+ }
|
|
6972
|
+
+ cleanedPointer.push(segment);
|
|
6973
|
+
+ }
|
|
6974
|
+
+ const cleanedRefPath = createRef(cleanedPointer);
|
|
6975
|
+
+
|
|
6976
|
+
const enumValuesArray = tsArrayLiteralExpression(
|
|
6977
|
+
enumValuesVariableName,
|
|
6978
|
+
- oapiRef(options.path ?? ""),
|
|
6979
|
+
+ // If fromAdditionalProperties is true we are dealing with a record type and we should append [string] to the generated type
|
|
6980
|
+
+ fromAdditionalProperties
|
|
6981
|
+
+ ? ts.factory.createIndexedAccessTypeNode(
|
|
6982
|
+
+ oapiRef(cleanedRefPath, undefined, true),
|
|
6983
|
+
+ ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("string")),
|
|
6984
|
+
+ )
|
|
6985
|
+
+ : oapiRef(cleanedRefPath, undefined, true),
|
|
6986
|
+
schemaObject.enum as (string | number)[],
|
|
6987
|
+
{
|
|
6988
|
+
export: true,
|
|
6989
|
+
@@ -165,10 +191,16 @@ export function transformSchemaObjectWithComposition(
|
|
6990
|
+
*/
|
|
6991
|
+
|
|
6992
|
+
/** Collect oneOf/anyOf */
|
|
6993
|
+
- function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[]) {
|
|
6994
|
+
+ function collectUnionCompositions(items: (SchemaObject | ReferenceObject)[], unionKey: "anyOf" | "oneOf") {
|
|
6995
|
+
const output: ts.TypeNode[] = [];
|
|
6996
|
+
- for (const item of items) {
|
|
6997
|
+
- output.push(transformSchemaObject(item, options));
|
|
6998
|
+
+ for (const [index, item] of items.entries()) {
|
|
6999
|
+
+ output.push(
|
|
7000
|
+
+ transformSchemaObject(item, {
|
|
7001
|
+
+ ...options,
|
|
7002
|
+
+ // include index in path so generated names from nested enums/enumValues are unique
|
|
7003
|
+
+ path: createRef([options.path, unionKey, String(index)]),
|
|
7004
|
+
+ }),
|
|
7005
|
+
+ );
|
|
7006
|
+
}
|
|
7007
|
+
|
|
7008
|
+
return output;
|
|
7009
|
+
@@ -210,13 +242,7 @@ export function transformSchemaObjectWithComposition(
|
|
6181
7010
|
itemType = transformSchemaObject({ ...item, required: itemRequired }, options);
|
|
6182
7011
|
}
|
|
6183
7012
|
|
|
@@ -6192,3 +7021,29 @@ index 9c572512609561a144786b8f8773342e9499cdfb..fd7b0b9cbd9f289831496c2ded7b1be1
|
|
|
6192
7021
|
}
|
|
6193
7022
|
return output;
|
|
6194
7023
|
}
|
|
7024
|
+
@@ -233,7 +259,7 @@ export function transformSchemaObjectWithComposition(
|
|
7025
|
+
}
|
|
7026
|
+
// anyOf: union
|
|
7027
|
+
// (note: this may seem counterintuitive, but as TypeScript’s unions are not true XORs, they mimic behavior closer to anyOf than oneOf)
|
|
7028
|
+
- const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? []);
|
|
7029
|
+
+ const anyOfType = collectUnionCompositions(schemaObject.anyOf ?? [], "anyOf");
|
|
7030
|
+
if (anyOfType.length) {
|
|
7031
|
+
finalType = tsUnion([...(finalType ? [finalType] : []), ...anyOfType]);
|
|
7032
|
+
}
|
|
7033
|
+
@@ -244,6 +270,7 @@ export function transformSchemaObjectWithComposition(
|
|
7034
|
+
schemaObject.type === "object" &&
|
|
7035
|
+
(schemaObject.enum as (SchemaObject | ReferenceObject)[])) ||
|
|
7036
|
+
[],
|
|
7037
|
+
+ "oneOf",
|
|
7038
|
+
);
|
|
7039
|
+
if (oneOfType.length) {
|
|
7040
|
+
// note: oneOf is the only type that may include primitives
|
|
7041
|
+
@@ -578,7 +605,7 @@ function transformSchemaObjectCore(schemaObject: SchemaObject, options: Transfor
|
|
7042
|
+
typeof schemaObject.patternProperties === "object" && Object.keys(schemaObject.patternProperties).length;
|
|
7043
|
+
const stringIndexTypes = [];
|
|
7044
|
+
if (hasExplicitAdditionalProperties) {
|
|
7045
|
+
- stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options));
|
|
7046
|
+
+ stringIndexTypes.push(transformSchemaObject(schemaObject.additionalProperties as SchemaObject, options, true));
|
|
7047
|
+
}
|
|
7048
|
+
if (hasImplicitAdditionalProperties || (!schemaObject.additionalProperties && options.ctx.additionalProperties)) {
|
|
7049
|
+
stringIndexTypes.push(UNKNOWN);
|