UNPKG

@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
"use strict"; 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;