openapi-typescript
Version:
Convert OpenAPI 3.0 & 3.1 schemas to TypeScript
82 lines (78 loc) • 4.42 kB
JavaScript
import { createConfig } from '@redocly/openapi-core';
import { performance } from 'node:perf_hooks';
import { validateAndBundle } from './lib/redoc.mjs';
import { scanDiscriminators, debug, resolveRef } from './lib/utils.mjs';
export { createDiscriminatorProperty, createRef, error, formatTime, getEntries, walk, warn } from './lib/utils.mjs';
import transformSchema from './transform/index.mjs';
export { BOOLEAN, FALSE, JS_ENUM_INVALID_CHARS_RE, JS_PROPERTY_INDEX_INVALID_CHARS_RE, JS_PROPERTY_INDEX_RE, NEVER, NULL, NUMBER, QUESTION_TOKEN, SPECIAL_CHARACTER_MAP, STRING, TRUE, UNDEFINED, UNKNOWN, addJSDocComment, astToString, enumCache, oapiRef, stringToAST, tsArrayLiteralExpression, tsDedupe, tsEnum, tsEnumMember, tsIntersection, tsIsPrimitive, tsLiteral, tsModifiers, tsNullable, tsOmit, tsPropertyIndex, tsReadonlyArray, tsRecord, tsUnion, tsWithRequired } from './lib/ts.mjs';
export { default as transformComponentsObject } from './transform/components-object.mjs';
export { default as transformHeaderObject } from './transform/header-object.mjs';
export { default as transformMediaTypeObject } from './transform/media-type-object.mjs';
export { injectOperationObject, default as transformOperationObject } from './transform/operation-object.mjs';
export { default as transformParameterObject } from './transform/parameter-object.mjs';
export { default as transformPathItemObject } from './transform/path-item-object.mjs';
export { default as transformPathsObject } from './transform/paths-object.mjs';
export { default as transformRequestBodyObject } from './transform/request-body-object.mjs';
export { default as transformResponseObject } from './transform/response-object.mjs';
export { default as transformResponsesObject } from './transform/responses-object.mjs';
export { default as transformSchemaObject, transformSchemaObjectWithComposition } from './transform/schema-object.mjs';
export { default as c } from 'ansi-colors';
const COMMENT_HEADER = `/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
`;
async function openapiTS(source, options = {}) {
if (!source) {
throw new Error("Empty schema. Please specify a URL, file path, or Redocly Config");
}
const redoc = options.redocly ?? await createConfig(
{
rules: {
"operation-operationId-unique": { severity: "error" }
// throw error on duplicate operationIDs
}
},
{ extends: ["minimal"] }
);
const schema = await validateAndBundle(source, {
redoc,
cwd: options.cwd instanceof URL ? options.cwd : new URL(`file://${options.cwd ?? process.cwd()}/`),
silent: options.silent ?? false
});
const ctx = {
additionalProperties: options.additionalProperties ?? false,
alphabetize: options.alphabetize ?? false,
arrayLength: options.arrayLength ?? false,
defaultNonNullable: options.defaultNonNullable ?? true,
discriminators: scanDiscriminators(schema, options),
emptyObjectsUnknown: options.emptyObjectsUnknown ?? false,
enum: options.enum ?? false,
enumValues: options.enumValues ?? false,
dedupeEnums: options.dedupeEnums ?? false,
excludeDeprecated: options.excludeDeprecated ?? false,
exportType: options.exportType ?? false,
immutable: options.immutable ?? false,
rootTypes: options.rootTypes ?? false,
rootTypesNoSchemaPrefix: options.rootTypesNoSchemaPrefix ?? false,
injectFooter: [],
pathParamsAsTypes: options.pathParamsAsTypes ?? false,
postTransform: typeof options.postTransform === "function" ? options.postTransform : void 0,
propertiesRequiredByDefault: options.propertiesRequiredByDefault ?? false,
redoc,
silent: options.silent ?? false,
inject: options.inject ?? void 0,
transform: typeof options.transform === "function" ? options.transform : void 0,
makePathsEnum: options.makePathsEnum ?? false,
generatePathParams: options.generatePathParams ?? false,
resolve($ref) {
return resolveRef(schema, $ref, { silent: options.silent ?? false });
}
};
const transformT = performance.now();
const result = transformSchema(schema, ctx);
debug("Completed AST transformation for entire document", "ts", performance.now() - transformT);
return result;
}
export { COMMENT_HEADER, debug, openapiTS as default, resolveRef, scanDiscriminators, transformSchema };
//# sourceMappingURL=index.mjs.map