@himenon/openapi-typescript-code-generator
Version:
OpenAPI Code Generator using TypeScript AST.
101 lines (100 loc) • 3.69 kB
JavaScript
import {
FileSystem,
OpenApiTools_exports,
ResolveReference_exports,
TsGenerator_exports,
Validator_exports
} from "./chunk-IOHCUFCV.js";
import "./chunk-XFCEFJDJ.js";
import "./chunk-R3KKVR43.js";
import "./chunk-PZ5AY32C.js";
// src/index.ts
import { EOL } from "os";
var CodeGenerator = class {
constructor(entryPointOrDocument, option) {
this.entryPointOrDocument = entryPointOrDocument;
this.option = option;
if (typeof entryPointOrDocument === "string") {
this.rootSchema = FileSystem.loadJsonOrYaml(entryPointOrDocument);
this.resolvedReferenceDocument = ResolveReference_exports.resolve(
entryPointOrDocument,
entryPointOrDocument,
JSON.parse(JSON.stringify(this.rootSchema))
);
} else {
this.rootSchema = entryPointOrDocument;
this.resolvedReferenceDocument = ResolveReference_exports.resolve(".", ".", JSON.parse(JSON.stringify(this.rootSchema)));
}
this.parser = this.createParser();
}
rootSchema;
resolvedReferenceDocument;
parser;
createParser() {
const entryPoint = typeof this.entryPointOrDocument === "string" ? this.entryPointOrDocument : ".";
return new OpenApiTools_exports.Parser(entryPoint, this.rootSchema, this.resolvedReferenceDocument, this.option?.convertOption);
}
/**
* Validate the OpenAPI Schema
*/
validateOpenApiSchema(option) {
if (!option) {
Validator_exports.validate(this.resolvedReferenceDocument);
} else {
Validator_exports.validate(this.resolvedReferenceDocument, option.logger);
}
}
/**
* Provides TypeScript typedefs generated from OpenAPI Schema.
*
* @param generatorTemplate Template for when you want to change the code following a type definition
* @returns String of generated code
*/
generateTypeDefinition(generatorTemplates, allowOperationIds) {
const create = () => {
const statements = this.parser.getOpenApiTypeDefinitionStatements();
generatorTemplates?.forEach((generatorTemplate) => {
const payload = this.parser.getCodeGeneratorParamsArray(allowOperationIds);
const extraStatements = TsGenerator_exports.Utils.convertIntermediateCodes(generatorTemplate.generator(payload, generatorTemplate.option));
statements.push(...extraStatements);
});
return statements;
};
return [OpenApiTools_exports.Comment.generateLeading(this.resolvedReferenceDocument), TsGenerator_exports.generate(create)].join(EOL + EOL + EOL);
}
/**
* Generate code using a template
*
* @param generatorTemplate
* @returns String of generated code
*/
generateCode(generatorTemplates, allowOperationIds) {
const payload = this.parser.getCodeGeneratorParamsArray(allowOperationIds);
const create = () => {
return generatorTemplates.flatMap((generatorTemplate) => {
return TsGenerator_exports.Utils.convertIntermediateCodes(generatorTemplate?.generator(payload, generatorTemplate.option));
});
};
return [OpenApiTools_exports.Comment.generateLeading(this.resolvedReferenceDocument), TsGenerator_exports.generate(create)].join(EOL + EOL + EOL);
}
/**
* Provides parameters extracted from OpenApi Schema
*/
getCodeGeneratorParamsArray(allowOperationIds) {
return this.parser.getCodeGeneratorParamsArray(allowOperationIds);
}
/**
* Provides types for parameters for Templates.FunctionalApiClient.
*
* This API will be moved to Templates in the future.
*/
getAdditionalTypeDefinitionCustomCodeGenerator() {
return {
generator: () => this.parser.getAdditionalTypeStatements()
};
}
};
export {
CodeGenerator
};
//# sourceMappingURL=index.js.map