@v19i/openapi-enum-arrays
Version:
A @hey-api/openapi-ts plugin that generates typed enum arrays with intelligent conflict resolution
64 lines (63 loc) • 2.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = void 0;
const node_fs_1 = require("node:fs");
const node_path_1 = require("node:path");
const generator_1 = require("./generator");
const parser_1 = require("./parser");
const handler = ({ context, plugin }) => {
const { includePatterns, excludePatterns, arrayPrefix = "", debug = false, } = plugin;
if (!context?.config?.output?.path) {
console.warn("Plugin: output path not available, skipping enum generation");
return;
}
const typesFilePath = (0, node_path_1.join)(context.config.output.path, "types.gen.ts");
if (!(0, node_fs_1.existsSync)(typesFilePath)) {
console.warn(`Plugin: types file not found at ${typesFilePath}`);
return;
}
try {
const typesContent = (0, node_fs_1.readFileSync)(typesFilePath, "utf-8");
const parser = new parser_1.EnumParser();
let enums = parser.parseEnumsFromTypeFile(typesContent);
if (debug) {
console.log(`🐛 Plugin: Found ${enums.length} enum types before filtering:`);
enums.forEach((enumInfo, index) => {
console.log(` ${index + 1}. ${enumInfo.name} (${enumInfo.values.length} values) - ${enumInfo.originalTypePath}`);
});
}
const originalCount = enums.length;
if (includePatterns) {
enums = enums.filter((enumInfo) => includePatterns.some((pattern) => enumInfo.name.includes(pattern)));
if (debug) {
console.log(`🐛 Plugin: After include patterns: ${enums.length}/${originalCount} enums`);
}
}
if (excludePatterns) {
const beforeExclude = enums.length;
enums = enums.filter((enumInfo) => !excludePatterns.some((pattern) => enumInfo.name.includes(pattern)));
if (debug) {
console.log(`🐛 Plugin: After exclude patterns: ${enums.length}/${beforeExclude} enums`);
}
}
const generator = new generator_1.CodeGenerator();
const generatedCode = generator.generateEnumArrays(enums, { arrayPrefix });
const outputPath = (0, node_path_1.join)(context.config.output.path, `${plugin.output}.ts`);
(0, node_fs_1.writeFileSync)(outputPath, generatedCode);
const message = `Plugin: Generated ${enums.length} enum arrays at ${outputPath}`;
console.log(message);
if (debug) {
console.log("🐛 Plugin: Generated enum names:");
for (const enumInfo of enums) {
console.log(` - ${enumInfo.name} = [${enumInfo.values.map((v) => `'${v}'`).join(", ")}] as const`);
}
}
}
catch (error) {
console.error("Plugin: Error generating enum arrays:", error);
if (debug) {
console.error("🐛 Plugin: Stack trace:", error);
}
}
};
exports.handler = handler;
;