(projectPath: string, schema: string)
| 302 | } |
| 303 | // 2. Loop all entities and render it |
| 304 | export async function generateModels(projectPath: string, schema: string): Promise<void> { |
| 305 | const extractEntities = getAllEntitiesRelations(schema); |
| 306 | for (const entity of extractEntities.models) { |
| 307 | const baseFolderPath = '.../../base'; |
| 308 | const className = upperFirst(entity.name); |
| 309 | |
| 310 | const entityName = validateEntityName(entity.name); |
| 311 | |
| 312 | const fields = processFields('entity', className, entity.fields, entity.indexes); |
| 313 | const idType = fields.find((f) => f.name === 'id')?.type ?? 'string'; |
| 314 | const importJsonInterfaces = uniq(fields.filter((field) => field.isJsonInterface).map((f) => f.type)); |
| 315 | const importEnums = uniq(fields.filter((field) => field.isEnum).map((f) => f.type)); |
| 316 | const indexedFields = fields.filter((field) => field.indexed && !field.isJsonInterface); |
| 317 | const modelTemplate = { |
| 318 | props: { |
| 319 | baseFolderPath, |
| 320 | className, |
| 321 | entityName, |
| 322 | fields, |
| 323 | importJsonInterfaces, |
| 324 | importEnums, |
| 325 | indexedFields, |
| 326 | idType, |
| 327 | }, |
| 328 | helper: { |
| 329 | upperFirst, |
| 330 | }, |
| 331 | }; |
| 332 | try { |
| 333 | await renderTemplate( |
| 334 | MODEL_TEMPLATE_PATH, |
| 335 | path.join(projectPath, MODEL_ROOT_DIR, `${className}.ts`), |
| 336 | modelTemplate |
| 337 | ); |
| 338 | } catch (e) { |
| 339 | console.error(e); |
| 340 | throw new Error(`Codegen failed for entity ${className}.`, {cause: e}); |
| 341 | } |
| 342 | console.log(`* Schema ${className} generated !`); |
| 343 | } |
| 344 | const classNames = extractEntities.models.map((entity) => upperFirst(entity.name)); |
| 345 | if (classNames.length !== 0) { |
| 346 | try { |
| 347 | await renderTemplate(MODELS_INDEX_TEMPLATE_PATH, path.join(projectPath, MODEL_ROOT_DIR, `index.ts`), { |
| 348 | props: { |
| 349 | classNames, |
| 350 | }, |
| 351 | helper: { |
| 352 | upperFirst, |
| 353 | }, |
| 354 | }); |
| 355 | exportTypes.models = true; |
| 356 | } catch (e) { |
| 357 | throw new Error(`Failed to codgen for model indexes.`, {cause: e}); |
| 358 | } |
| 359 | console.log(`* Models index generated !`); |
| 360 | } |
| 361 | } |
no test coverage detected