|
1 | 1 | import { generator, parser, traverse } from '@stacksjs/build'
|
| 2 | +import { log } from '@stacksjs/logging' |
2 | 3 | import { path } from '@stacksjs/path'
|
3 |
| -import { fs } from '@stacksjs/storage' |
| 4 | +import { fs, glob } from '@stacksjs/storage' |
4 | 5 | import { plural, singular, snakeCase } from '@stacksjs/strings'
|
5 | 6 | import type { Attributes, FieldArrayElement, Model, ModelElement, RelationConfig } from '@stacksjs/types'
|
6 | 7 |
|
@@ -553,7 +554,7 @@ export async function generateApiRoutes(modelFiles: string[]) {
|
553 | 554 | let routeString = `import { route } from '@stacksjs/router'\n\n\n`
|
554 | 555 |
|
555 | 556 | for (const modelFile of modelFiles) {
|
556 |
| - log.debug(`Processing model file: ${modelFile}`) |
| 557 | + log.info(`Processing model file: ${modelFile}`) |
557 | 558 | let middlewareString = ''
|
558 | 559 | const model = (await import(modelFile)).default as Model
|
559 | 560 | const modelName = getModelName(model, modelFile)
|
@@ -620,19 +621,27 @@ export async function generateApiRoutes(modelFiles: string[]) {
|
620 | 621 |
|
621 | 622 | export async function deleteExistingModels(modelStringFile?: string) {
|
622 | 623 | const typePath = path.frameworkPath(`orm/src/types.ts`)
|
623 |
| - if (fs.existsSync(typePath)) await Bun.$`rm ${typePath}` |
| 624 | + if (fs.existsSync(typePath)) await fs.promises.unlink(typePath) |
624 | 625 |
|
625 | 626 | if (modelStringFile) {
|
626 | 627 | const modelPath = path.frameworkPath(`orm/src/models/${modelStringFile}.ts`)
|
627 |
| - await Bun.$`rm ${modelPath}` |
| 628 | + if (fs.existsSync(modelPath)) await fs.promises.unlink(modelPath) |
628 | 629 |
|
629 | 630 | return
|
630 | 631 | }
|
631 | 632 |
|
632 |
| - const modelPaths = glob.sync(path.frameworkPath(`orm/src/models/*.ts`)) |
633 |
| - for (const modelPath of modelPaths) { |
634 |
| - if (fs.existsSync(modelPath)) await Bun.$`rm ${modelPath}` |
635 |
| - } |
| 633 | + const modelPaths = glob.sync(path.frameworkPath(`orm/src/models/*.ts`)).sort() // handle them alphabetically |
| 634 | + await Promise.all( |
| 635 | + modelPaths.map(async (modelPath) => { |
| 636 | + if (fs.existsSync(modelPath)) { |
| 637 | + log.info(`Deleting Model: ${modelPath}`) |
| 638 | + await fs.promises.unlink(modelPath) |
| 639 | + log.success(`Deleted Model: ${modelPath}`) |
| 640 | + } |
| 641 | + }), |
| 642 | + ) |
| 643 | + |
| 644 | + return |
636 | 645 | }
|
637 | 646 |
|
638 | 647 | export async function deleteExistingOrmActions(modelStringFile?: string) {
|
@@ -1638,54 +1647,63 @@ export async function generateModelString(
|
1638 | 1647 | }
|
1639 | 1648 |
|
1640 | 1649 | export async function generateModelFiles(modelStringFile?: string): Promise<void> {
|
1641 |
| - log.info('Generating model files...') |
1642 |
| - log.info('Deleting old model files...') |
1643 |
| - await deleteExistingModels(modelStringFile) |
1644 |
| - log.success('Deleted old model files') |
1645 |
| - log.info('Deleting old model actions...') |
1646 |
| - await deleteExistingOrmActions(modelStringFile) |
1647 |
| - log.success('Deleted old model actions') |
1648 |
| - log.info('Deleting old model name types...') |
1649 |
| - await deleteExistingModelNameTypes() |
1650 |
| - log.success('Deleted old model name types') |
1651 |
| - log.info('Deleting old model request...') |
1652 |
| - await deleteExistingModelRequest(modelStringFile) |
1653 |
| - log.success('Deleted old model request') |
1654 |
| - log.info('Deleting old model routes...') |
1655 |
| - await deleteExistingOrmRoute() |
1656 |
| - log.success('Deleted old model routes') |
1657 |
| - |
1658 |
| - log.info('Writing model names...') |
1659 |
| - await writeModelNames() |
1660 |
| - log.success('Wrote model names') |
1661 |
| - log.info('Writing model request...') |
1662 |
| - await writeModelRequest() |
1663 |
| - log.success('Wrote model request') |
1664 |
| - |
1665 |
| - const modelFiles = glob.sync(path.userModelsPath('**/*.ts')) |
1666 |
| - log.info('Generating API routes...') |
1667 |
| - await generateApiRoutes(modelFiles) |
1668 |
| - log.success('Generated API routes') |
1669 |
| - |
1670 |
| - for (const modelFile of modelFiles) { |
1671 |
| - if (modelStringFile && modelStringFile !== modelFile) continue |
1672 |
| - |
1673 |
| - log.debug(`Processing model file: ${modelFile}`) |
| 1650 | + try { |
| 1651 | + log.info('Cleanup of older Models...') |
| 1652 | + await deleteExistingModels(modelStringFile) |
| 1653 | + log.success('Deleted Models') |
| 1654 | + |
| 1655 | + log.debug('Deleting old ORM Actions...') |
| 1656 | + await deleteExistingOrmActions(modelStringFile) |
| 1657 | + log.success('Deleted ORM Actions') |
| 1658 | + |
| 1659 | + log.debug('Deleting old Model Name types...') |
| 1660 | + await deleteExistingModelNameTypes() |
| 1661 | + log.success('Deleted Model Name types') |
| 1662 | + |
| 1663 | + log.info('Deleting old Model Requests...') |
| 1664 | + await deleteExistingModelRequest(modelStringFile) |
| 1665 | + log.success('Deleted Model Requests') |
| 1666 | + |
| 1667 | + log.info('Deleting old Model Routes...') |
| 1668 | + await deleteExistingOrmRoute() |
| 1669 | + log.success('Deleted Model Routes') |
| 1670 | + |
| 1671 | + log.info('Writing Model Names...') |
| 1672 | + await writeModelNames() |
| 1673 | + log.success('Wrote Model Names') |
| 1674 | + |
| 1675 | + log.info('Writing Model Requests...') |
| 1676 | + await writeModelRequest() |
| 1677 | + log.success('Wrote Rodel Requests') |
| 1678 | + |
| 1679 | + log.info('Generating API Routes...') |
| 1680 | + const modelFiles = glob.sync(path.userModelsPath('**/*.ts')) |
| 1681 | + await generateApiRoutes(modelFiles) |
| 1682 | + log.success('Generated API Routes') |
| 1683 | + |
| 1684 | + for (const modelFile of modelFiles) { |
| 1685 | + if (modelStringFile && modelStringFile !== modelFile) continue |
| 1686 | + log.info(`Processing Model: ${modelFile}`) |
| 1687 | + |
| 1688 | + const model = (await import(modelFile)).default as Model |
| 1689 | + const tableName = getTableName(model, modelFile) |
| 1690 | + const modelName = getModelName(model, modelFile) |
| 1691 | + const file = Bun.file(path.frameworkPath(`orm/src/models/${modelName}.ts`)) |
| 1692 | + const fields = await extractFields(model, modelFile) |
| 1693 | + const classString = await generateModelString(tableName, modelName, model, fields) |
| 1694 | + |
| 1695 | + const writer = file.writer() |
| 1696 | + log.info(`Writing API Endpoints for: ${modelName}`) |
| 1697 | + writer.write(classString) |
| 1698 | + log.success(`Wrote API endpoints for: ${modelName}`) |
| 1699 | + await writer.end() |
| 1700 | + } |
1674 | 1701 |
|
1675 |
| - const model = (await import(modelFile)).default as Model |
1676 |
| - const tableName = getTableName(model, modelFile) |
1677 |
| - const modelName = getModelName(model, modelFile) |
1678 |
| - const file = Bun.file(path.frameworkPath(`orm/src/models/${modelName}.ts`)) |
1679 |
| - const fields = await extractFields(model, modelFile) |
1680 |
| - const classString = await generateModelString(tableName, modelName, model, fields) |
1681 |
| - const writer = file.writer() |
1682 |
| - log.info(`Writing API endpoints for: ${modelName}`) |
1683 |
| - writer.write(classString) |
1684 |
| - log.success(`Wrote API endpoints for: ${modelName}`) |
1685 |
| - await writer.end() |
| 1702 | + log.info('Generating Query Builder types...') |
| 1703 | + await generateKyselyTypes() |
| 1704 | + log.success('Generated Query Builder types') |
| 1705 | + } catch (error) { |
| 1706 | + log.error('There was an error generating your model files', error) |
| 1707 | + process.exit(ExitCode.FatalError) |
1686 | 1708 | }
|
1687 |
| - |
1688 |
| - log.info('Generating Query Builder types...') |
1689 |
| - await generateKyselyTypes() |
1690 |
| - log.success('Generated Query Builder types') |
1691 | 1709 | }
|
0 commit comments