openapi-typescript
Version:
Convert OpenAPI 3.0 & 3.1 schemas to TypeScript
1 lines • 7.02 kB
Source Map (JSON)
{"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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"}