hey-api-builders
Version:
A custom plugin for @hey-api/openapi-ts that generates mock data builders with a lightweight custom runtime, Zod integration, or static mock generation.
66 lines • 2.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = void 0;
const schema_transformer_1 = require("../core/schema-transformer");
const zod_schema_generator_1 = require("../generators/zod-schema-generator");
const builder_generator_1 = require("../generators/builder-generator");
const code_generator_1 = require("../core/code-generator");
/**
* Resolves the mock strategy from config, handling backward compatibility
*/
function resolveMockStrategy(config) {
// New config takes precedence
if (config.mockStrategy) {
return config.mockStrategy;
}
// Backward compatibility with old boolean flags
if (config.useStaticMocks) {
return 'static';
}
if (config.useZodForMocks) {
return 'zod';
}
// Default strategy
return 'runtime';
}
/**
* Main plugin handler for generating builder classes
*/
const handler = ({ plugin, context }) => {
const rawSchemas = {};
plugin.forEach('schema', (event) => {
rawSchemas[event.name] = event.schema;
});
const modelNameProvider = context?.casing?.modelName;
const normalize = modelNameProvider ? (name) => modelNameProvider(name) : undefined;
const metas = (0, schema_transformer_1.collectSchemas)(rawSchemas, normalize);
const file = plugin.createFile({ id: plugin.name, path: plugin.output });
const config = plugin.config;
const generateZod = config.generateZod || false;
const mockStrategy = resolveMockStrategy(config);
let out = '';
out += (0, code_generator_1.generateImports)({ mockStrategy, generateZod });
out += (0, code_generator_1.generateBuilderOptionsType)();
if (mockStrategy === 'runtime') {
out += (0, code_generator_1.generateSchemaConstants)(metas);
}
if (generateZod || mockStrategy === 'zod') {
const zodSchemaEntries = [];
for (const m of metas) {
const zodSchemaString = (0, zod_schema_generator_1.generateZodSchema)(m.schema);
zodSchemaEntries.push(` ${m.constName}Zod: ${zodSchemaString}`);
}
out += 'export const zodSchemas = {\n' + zodSchemaEntries.join(',\n') + '\n}\n\n';
}
for (const m of metas) {
if (m.isEnum) {
out += (0, builder_generator_1.generateEnumBuilder)(m, { mockStrategy });
}
else {
out += (0, builder_generator_1.generateObjectBuilder)(m, { mockStrategy });
}
}
file.add(out);
};
exports.handler = handler;
//# sourceMappingURL=handler.js.map