sonamu 0.4.13 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.swcrc +15 -0
- package/dist/api/base-frame.d.ts +8 -0
- package/dist/api/base-frame.d.ts.map +1 -0
- package/dist/api/base-frame.js +2 -0
- package/dist/api/base-frame.js.map +1 -0
- package/dist/api/caster.d.ts +5 -0
- package/dist/api/caster.d.ts.map +1 -0
- package/dist/api/caster.js +2 -0
- package/dist/api/caster.js.map +1 -0
- package/dist/api/code-converters.d.ts +23 -0
- package/dist/api/code-converters.d.ts.map +1 -0
- package/dist/api/code-converters.js +2 -0
- package/dist/api/code-converters.js.map +1 -0
- package/dist/api/context.d.ts +16 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +2 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/decorators.d.ts +50 -0
- package/dist/api/decorators.d.ts.map +1 -0
- package/dist/api/decorators.js +2 -0
- package/dist/api/decorators.js.map +1 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/sonamu.d.ts +83 -0
- package/dist/api/sonamu.d.ts.map +1 -0
- package/dist/api/sonamu.js +2 -0
- package/dist/api/sonamu.js.map +1 -0
- package/dist/api/sonamu.types.d.ts +30 -0
- package/dist/api/sonamu.types.d.ts.map +1 -0
- package/dist/api/sonamu.types.js +2 -0
- package/dist/api/sonamu.types.js.map +1 -0
- package/dist/bin/build-config.d.ts +5 -0
- package/dist/bin/build-config.d.ts.map +1 -0
- package/dist/bin/build-config.js +2 -0
- package/dist/bin/build-config.js.map +1 -0
- package/dist/bin/cli-wrapper.d.ts +2 -0
- package/dist/bin/cli-wrapper.d.ts.map +1 -0
- package/dist/bin/cli-wrapper.js +1 -38
- package/dist/bin/cli-wrapper.js.map +1 -1
- package/dist/bin/cli.d.ts +2 -2
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +1 -903
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cli.mjs +2 -2
- package/dist/{chunk-DMJSNO2L.js → chunk-2WAC2GER.js} +44 -44
- package/dist/{chunk-DMJSNO2L.js.map → chunk-2WAC2GER.js.map} +1 -1
- package/dist/{chunk-NI37CY4T.mjs → chunk-C3IPIF6O.mjs} +2 -2
- package/dist/{chunk-DYFCACHD.js → chunk-EXHKSVTE.js} +7 -7
- package/dist/{chunk-QJFHDCBN.mjs → chunk-FCERKIIF.mjs} +2 -2
- package/dist/chunk-FCERKIIF.mjs.map +1 -0
- package/dist/{chunk-DDJ7T4MA.mjs → chunk-HGIBJYOU.mjs} +2 -2
- package/dist/{chunk-NIFOTHBW.mjs → chunk-JKSOJRQA.mjs} +2 -2
- package/dist/{chunk-CXAVBVKC.js → chunk-OTKKFP3Y.js} +100 -100
- package/dist/{chunk-J6S43O7G.js → chunk-UZ2IY5VE.js} +4 -4
- package/dist/database/_batch_update.d.ts +15 -0
- package/dist/database/_batch_update.d.ts.map +1 -0
- package/dist/database/_batch_update.js +2 -0
- package/dist/database/_batch_update.js.map +1 -0
- package/dist/database/base-model.d.ts +41 -0
- package/dist/database/base-model.d.ts.map +1 -0
- package/dist/database/base-model.js +2 -0
- package/dist/database/base-model.js.map +1 -0
- package/dist/database/code-generator.d.ts +13 -0
- package/dist/database/code-generator.d.ts.map +1 -0
- package/dist/database/code-generator.js +2 -0
- package/dist/database/code-generator.js.map +1 -0
- package/dist/database/db.d.ts +40 -0
- package/dist/database/db.d.ts.map +1 -0
- package/dist/database/db.js +2 -0
- package/dist/database/db.js.map +1 -0
- package/dist/database/drivers/knex/base-model.js +8 -8
- package/dist/database/drivers/knex/base-model.mjs +3 -3
- package/dist/database/drivers/kysely/base-model.js +9 -9
- package/dist/database/drivers/kysely/base-model.mjs +3 -3
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +2 -0
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +1 -0
- package/dist/database/knex-plugins/knex-on-duplicate-update.js +2 -0
- package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +1 -0
- package/dist/database/puri-wrapper.d.ts +34 -0
- package/dist/database/puri-wrapper.d.ts.map +1 -0
- package/dist/database/puri-wrapper.js +2 -0
- package/dist/database/puri-wrapper.js.map +1 -0
- package/dist/database/puri.d.ts +83 -0
- package/dist/database/puri.d.ts.map +1 -0
- package/dist/database/puri.js +2 -0
- package/dist/database/puri.js.map +1 -0
- package/dist/database/puri.types.d.ts +60 -0
- package/dist/database/puri.types.d.ts.map +1 -0
- package/dist/database/puri.types.js +2 -0
- package/dist/database/puri.types.js.map +1 -0
- package/dist/database/transaction-context.d.ts +9 -0
- package/dist/database/transaction-context.d.ts.map +1 -0
- package/dist/database/transaction-context.js +2 -0
- package/dist/database/transaction-context.js.map +1 -0
- package/dist/database/types.d.ts +39 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/database/upsert-builder.d.ts +34 -0
- package/dist/database/upsert-builder.d.ts.map +1 -0
- package/dist/database/upsert-builder.js +2 -0
- package/dist/database/upsert-builder.js.map +1 -0
- package/dist/entity/entity-manager.d.ts +32 -0
- package/dist/entity/entity-manager.d.ts.map +1 -0
- package/dist/entity/entity-manager.js +2 -0
- package/dist/entity/entity-manager.js.map +1 -0
- package/dist/entity/entity-utils.d.ts +61 -0
- package/dist/entity/entity-utils.d.ts.map +1 -0
- package/dist/entity/entity-utils.js +2 -0
- package/dist/entity/entity-utils.js.map +1 -0
- package/dist/entity/entity.d.ts +62 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +2 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/migrator.d.ts +135 -0
- package/dist/entity/migrator.d.ts.map +1 -0
- package/dist/entity/migrator.js +2 -0
- package/dist/entity/migrator.js.map +1 -0
- package/dist/exceptions/error-handler.d.ts +3 -0
- package/dist/exceptions/error-handler.d.ts.map +1 -0
- package/dist/exceptions/error-handler.js +2 -0
- package/dist/exceptions/error-handler.js.map +1 -0
- package/dist/exceptions/so-exceptions.d.ts +48 -0
- package/dist/exceptions/so-exceptions.d.ts.map +1 -0
- package/dist/exceptions/so-exceptions.js +2 -0
- package/dist/exceptions/so-exceptions.js.map +1 -0
- package/dist/file-storage/driver.d.ts +45 -0
- package/dist/file-storage/driver.d.ts.map +1 -0
- package/dist/file-storage/driver.js +2 -0
- package/dist/file-storage/driver.js.map +1 -0
- package/dist/file-storage/file-storage.d.ts +50 -0
- package/dist/file-storage/file-storage.d.ts.map +1 -0
- package/dist/file-storage/file-storage.js +2 -0
- package/dist/file-storage/file-storage.js.map +1 -0
- package/dist/index.d.ts +22 -813
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -433
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/migration/code-generation.d.ts +15 -0
- package/dist/migration/code-generation.d.ts.map +1 -0
- package/dist/migration/code-generation.js +2 -0
- package/dist/migration/code-generation.js.map +1 -0
- package/dist/migration/migration-set.d.ts +17 -0
- package/dist/migration/migration-set.d.ts.map +1 -0
- package/dist/migration/migration-set.js +2 -0
- package/dist/migration/migration-set.js.map +1 -0
- package/dist/migration/migrator.d.ts +130 -0
- package/dist/migration/migrator.d.ts.map +1 -0
- package/dist/migration/migrator.js +2 -0
- package/dist/migration/migrator.js.map +1 -0
- package/dist/migration/types.d.ts +52 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +2 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/smd/smd-manager.d.ts +28 -0
- package/dist/smd/smd-manager.d.ts.map +1 -0
- package/dist/smd/smd-manager.js +2 -0
- package/dist/smd/smd-manager.js.map +1 -0
- package/dist/smd/smd.d.ts +40 -0
- package/dist/smd/smd.d.ts.map +1 -0
- package/dist/smd/smd.js +2 -0
- package/dist/smd/smd.js.map +1 -0
- package/dist/syncer/index.d.ts +2 -0
- package/dist/syncer/index.d.ts.map +1 -0
- package/dist/syncer/index.js +2 -0
- package/dist/syncer/index.js.map +1 -0
- package/dist/syncer/syncer.d.ts +127 -0
- package/dist/syncer/syncer.d.ts.map +1 -0
- package/dist/syncer/syncer.js +2 -0
- package/dist/syncer/syncer.js.map +1 -0
- package/dist/templates/base-template.d.ts +13 -0
- package/dist/templates/base-template.d.ts.map +1 -0
- package/dist/templates/base-template.js +2 -0
- package/dist/templates/base-template.js.map +1 -0
- package/dist/templates/entity.template.d.ts +17 -0
- package/dist/templates/entity.template.d.ts.map +1 -0
- package/dist/templates/entity.template.js +2 -0
- package/dist/templates/entity.template.js.map +1 -0
- package/dist/templates/generated.template.d.ts +27 -0
- package/dist/templates/generated.template.d.ts.map +1 -0
- package/dist/templates/generated.template.js +2 -0
- package/dist/templates/generated.template.js.map +1 -0
- package/dist/templates/generated_http.template.d.ts +24 -0
- package/dist/templates/generated_http.template.d.ts.map +1 -0
- package/dist/templates/generated_http.template.js +2 -0
- package/dist/templates/generated_http.template.js.map +1 -0
- package/dist/templates/generated_sso.template.d.ts +20 -0
- package/dist/templates/generated_sso.template.d.ts.map +1 -0
- package/dist/templates/generated_sso.template.js +2 -0
- package/dist/templates/generated_sso.template.js.map +1 -0
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +2 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/init_types.template.d.ts +17 -0
- package/dist/templates/init_types.template.d.ts.map +1 -0
- package/dist/templates/init_types.template.js +2 -0
- package/dist/templates/init_types.template.js.map +1 -0
- package/dist/templates/model.template.d.ts +17 -0
- package/dist/templates/model.template.d.ts.map +1 -0
- package/dist/templates/model.template.js +2 -0
- package/dist/templates/model.template.js.map +1 -0
- package/dist/templates/model_test.template.d.ts +17 -0
- package/dist/templates/model_test.template.d.ts.map +1 -0
- package/dist/templates/model_test.template.js +2 -0
- package/dist/templates/model_test.template.js.map +1 -0
- package/dist/templates/service.template.d.ts +29 -0
- package/dist/templates/service.template.d.ts.map +1 -0
- package/dist/templates/service.template.js +2 -0
- package/dist/templates/service.template.js.map +1 -0
- package/dist/templates/view_enums_buttonset.template.d.ts +17 -0
- package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -0
- package/dist/templates/view_enums_buttonset.template.js +2 -0
- package/dist/templates/view_enums_buttonset.template.js.map +1 -0
- package/dist/templates/view_enums_dropdown.template.d.ts +18 -0
- package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -0
- package/dist/templates/view_enums_dropdown.template.js +2 -0
- package/dist/templates/view_enums_dropdown.template.js.map +1 -0
- package/dist/templates/view_enums_select.template.d.ts +17 -0
- package/dist/templates/view_enums_select.template.d.ts.map +1 -0
- package/dist/templates/view_enums_select.template.js +2 -0
- package/dist/templates/view_enums_select.template.js.map +1 -0
- package/dist/templates/view_form.template.d.ts +26 -0
- package/dist/templates/view_form.template.d.ts.map +1 -0
- package/dist/templates/view_form.template.js +2 -0
- package/dist/templates/view_form.template.js.map +1 -0
- package/dist/templates/view_id_all_select.template.d.ts +17 -0
- package/dist/templates/view_id_all_select.template.d.ts.map +1 -0
- package/dist/templates/view_id_all_select.template.js +2 -0
- package/dist/templates/view_id_all_select.template.js.map +1 -0
- package/dist/templates/view_id_async_select.template.d.ts +17 -0
- package/dist/templates/view_id_async_select.template.d.ts.map +1 -0
- package/dist/templates/view_id_async_select.template.js +2 -0
- package/dist/templates/view_id_async_select.template.js.map +1 -0
- package/dist/templates/view_list.template.d.ts +38 -0
- package/dist/templates/view_list.template.d.ts.map +1 -0
- package/dist/templates/view_list.template.js +2 -0
- package/dist/templates/view_list.template.js.map +1 -0
- package/dist/templates/view_list_columns.template.d.ts +17 -0
- package/dist/templates/view_list_columns.template.d.ts.map +1 -0
- package/dist/templates/view_list_columns.template.js +2 -0
- package/dist/templates/view_list_columns.template.js.map +1 -0
- package/dist/templates/view_search_input.template.d.ts +17 -0
- package/dist/templates/view_search_input.template.d.ts.map +1 -0
- package/dist/templates/view_search_input.template.js +2 -0
- package/dist/templates/view_search_input.template.js.map +1 -0
- package/dist/testing/_relation-graph.d.ts +7 -0
- package/dist/testing/_relation-graph.d.ts.map +1 -0
- package/dist/testing/_relation-graph.js +2 -0
- package/dist/testing/_relation-graph.js.map +1 -0
- package/dist/testing/fixture-manager.d.ts +35 -0
- package/dist/testing/fixture-manager.d.ts.map +1 -0
- package/dist/testing/fixture-manager.js +2 -0
- package/dist/testing/fixture-manager.js.map +1 -0
- package/dist/types/types.d.ts +609 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +2 -0
- package/dist/types/types.js.map +1 -0
- package/dist/typings/knex.d.js +2 -0
- package/dist/typings/knex.d.js.map +1 -0
- package/dist/utils/async-utils.d.ts +25 -0
- package/dist/utils/async-utils.d.ts.map +1 -0
- package/dist/utils/async-utils.js +2 -0
- package/dist/utils/async-utils.js.map +1 -0
- package/dist/utils/controller.d.ts +9 -0
- package/dist/utils/controller.d.ts.map +1 -0
- package/dist/utils/controller.js +2 -0
- package/dist/utils/controller.js.map +1 -0
- package/dist/utils/fs-utils.d.ts +9 -0
- package/dist/utils/fs-utils.d.ts.map +1 -0
- package/dist/utils/fs-utils.js +2 -0
- package/dist/utils/fs-utils.js.map +1 -0
- package/dist/utils/lodash-able.d.ts +2 -0
- package/dist/utils/lodash-able.d.ts.map +1 -0
- package/dist/utils/lodash-able.js +2 -0
- package/dist/utils/lodash-able.js.map +1 -0
- package/dist/utils/model.d.ts +17 -0
- package/dist/utils/model.d.ts.map +1 -0
- package/dist/utils/model.js +2 -0
- package/dist/utils/model.js.map +1 -0
- package/dist/utils/sql-parser.d.ts +4 -0
- package/dist/utils/sql-parser.d.ts.map +1 -0
- package/dist/utils/sql-parser.js +2 -0
- package/dist/utils/sql-parser.js.map +1 -0
- package/dist/utils/utils.d.ts +9 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +2 -0
- package/dist/utils/utils.js.map +1 -0
- package/dist/utils/zod-error.d.ts +8 -0
- package/dist/utils/zod-error.d.ts.map +1 -0
- package/dist/utils/zod-error.js +2 -0
- package/dist/utils/zod-error.js.map +1 -0
- package/nodemon.json +6 -0
- package/package.json +29 -44
- package/src/api/base-frame.ts +3 -4
- package/src/api/caster.ts +22 -23
- package/src/api/code-converters.ts +170 -134
- package/src/api/context.ts +13 -6
- package/src/api/decorators.ts +146 -20
- package/src/api/index.ts +2 -0
- package/src/api/sonamu.ts +374 -165
- package/src/bin/build-config.ts +5 -0
- package/src/bin/cli-wrapper.ts +29 -40
- package/src/bin/cli.ts +132 -190
- package/src/database/_batch_update.ts +10 -15
- package/src/database/base-model.ts +300 -216
- package/src/database/db.ts +191 -21
- package/src/database/{drivers/knex/plugins → knex-plugins}/knex-on-duplicate-update.ts +1 -1
- package/src/database/puri-wrapper.ts +129 -0
- package/src/database/puri.ts +808 -0
- package/src/database/puri.types.ts +222 -0
- package/src/database/transaction-context.ts +18 -0
- package/src/database/upsert-builder.ts +32 -35
- package/src/entity/entity-manager.ts +7 -15
- package/src/entity/entity.ts +9 -31
- package/src/entity/migrator-/354/235/264/354/202/254/352/260/224/354/226/264/354/232/224.md +1 -0
- package/src/file-storage/driver.ts +121 -0
- package/src/file-storage/file-storage.ts +100 -0
- package/src/index.ts +14 -11
- package/src/migration/code-generation.ts +777 -0
- package/src/migration/migration-set.ts +453 -0
- package/src/migration/migrator.ts +823 -0
- package/src/migration/types.ts +53 -0
- package/src/shared/web.shared.ts.txt +33 -2
- package/src/syncer/syncer.ts +294 -127
- package/src/templates/generated.template.ts +13 -1
- package/src/templates/generated_http.template.ts +15 -12
- package/src/templates/generated_sso.template.ts +50 -2
- package/src/templates/model.template.ts +138 -2
- package/src/templates/service.template.ts +0 -1
- package/src/templates/view_form.template.ts +11 -7
- package/src/templates/view_list.template.ts +12 -4
- package/src/testing/fixture-manager.ts +229 -174
- package/src/types/types.ts +102 -14
- package/src/utils/async-utils.ts +64 -0
- package/src/utils/fs-utils.ts +17 -0
- package/src/utils/model.ts +0 -2
- package/src/utils/utils.ts +14 -58
- package/src/utils/zod-error.ts +12 -176
- package/tsconfig.json +2 -0
- package/tsup.config.js +4 -2
- package/.pnp.cjs +0 -14363
- package/.pnp.loader.mjs +0 -2047
- package/.vscode/extensions.json +0 -6
- package/.vscode/settings.json +0 -9
- package/.yarnrc.yml +0 -5
- package/dist/chunk-QJFHDCBN.mjs.map +0 -1
- package/src/database/base-model.abstract.ts +0 -97
- package/src/database/db.abstract.ts +0 -75
- package/src/database/drivers/knex/base-model.ts +0 -55
- package/src/database/drivers/knex/client.ts +0 -209
- package/src/database/drivers/knex/db.ts +0 -232
- package/src/database/drivers/knex/generator.ts +0 -659
- package/src/database/drivers/kysely/base-model.ts +0 -89
- package/src/database/drivers/kysely/client.ts +0 -309
- package/src/database/drivers/kysely/db.ts +0 -238
- package/src/database/drivers/kysely/generator.ts +0 -714
- package/src/database/types.ts +0 -118
- package/src/entity/migrator.ts +0 -1400
- package/src/smd/smd-manager.ts +0 -139
- package/src/smd/smd.ts +0 -571
- package/src/templates/kysely_types.template.ts +0 -205
- /package/dist/{chunk-NI37CY4T.mjs.map → chunk-C3IPIF6O.mjs.map} +0 -0
- /package/dist/{chunk-DYFCACHD.js.map → chunk-EXHKSVTE.js.map} +0 -0
- /package/dist/{chunk-DDJ7T4MA.mjs.map → chunk-HGIBJYOU.mjs.map} +0 -0
- /package/dist/{chunk-NIFOTHBW.mjs.map → chunk-JKSOJRQA.mjs.map} +0 -0
- /package/dist/{chunk-CXAVBVKC.js.map → chunk-OTKKFP3Y.js.map} +0 -0
- /package/dist/{chunk-J6S43O7G.js.map → chunk-UZ2IY5VE.js.map} +0 -0
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/cli.ts","../../src/smd/smd-manager.ts","../../src/smd/smd.ts"],"names":["chalk","path","fs","inflection","_","fields","prop","config","fileName"],"mappings":"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","sourcesContent":["/* Global Begin */\nimport chalk from \"chalk\";\nconsole.log(chalk.bgBlue(`BEGIN ${new Date()}`));\n\nimport dotenv from \"dotenv\";\ndotenv.config();\n\nimport path from \"path\";\nimport { tsicli } from \"tsicli\";\nimport { execSync } from \"child_process\";\nimport fs from \"fs-extra\";\nimport inflection from \"inflection\";\nimport prettier from \"prettier\";\nimport process from \"process\";\nimport _ from \"lodash\";\nimport { Sonamu } from \"../api\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { Migrator } from \"../entity/migrator\";\nimport { FixtureManager } from \"../testing/fixture-manager\";\nimport { SMDManager } from \"../smd/smd-manager\";\nimport { DB } from \"../database/db\";\nimport {\n KnexConfig,\n KyselyConfig,\n SonamuKnexDBConfig,\n SonamuKyselyDBConfig,\n} from \"../database/types\";\nimport { KnexClient } from \"../database/drivers/knex/client\";\nimport { KyselyClient } from \"../database/drivers/kysely/client\";\n\nlet migrator: Migrator;\n\nasync function bootstrap() {\n await Sonamu.init(false, false);\n\n await tsicli(process.argv, {\n types: {\n \"#entityId\": {\n type: \"autocomplete\",\n name: \"#entityId\",\n message: \"Please input #entityId\",\n choices: EntityManager.getAllParentIds().map((entityId) => ({\n title: entityId,\n value: entityId,\n })),\n },\n \"#recordIds\": \"number[]\",\n \"#name\": \"string\",\n },\n args: [\n [\"fixture\", \"init\"],\n [\"fixture\", \"import\", \"#entityId\", \"#recordIds\"],\n [\"fixture\", \"sync\"],\n [\"migrate\", \"run\"],\n [\"migrate\", \"check\"],\n [\"migrate\", \"rollback\"],\n [\"migrate\", \"reset\"],\n [\"migrate\", \"clear\"],\n [\"migrate\", \"status\"],\n [\"stub\", \"practice\", \"#name\"],\n [\"stub\", \"entity\", \"#name\"],\n [\"scaffold\", \"model\", \"#entityId\"],\n [\"scaffold\", \"model_test\", \"#entityId\"],\n [\"scaffold\", \"view_list\", \"#entityId\"],\n [\"scaffold\", \"view_form\", \"#entityId\"],\n [\"ui\"],\n [\"smd_migration\"],\n ],\n runners: {\n migrate_run,\n migrate_check,\n migrate_rollback,\n migrate_clear,\n migrate_reset,\n migrate_status,\n fixture_init,\n fixture_import,\n fixture_sync,\n stub_practice,\n stub_entity,\n scaffold_model,\n scaffold_model_test,\n ui,\n // scaffold_view_list,\n // scaffold_view_form,\n smd_migration,\n },\n });\n}\nbootstrap().finally(async () => {\n if (migrator) {\n await migrator.destroy();\n }\n await FixtureManager.destory();\n\n /* Global End */\n console.log(chalk.bgBlue(`END ${new Date()}\\n`));\n});\n\nasync function setupMigrator() {\n // migrator\n migrator = new Migrator({\n mode: \"dev\",\n });\n}\n\nasync function setupFixtureManager() {\n FixtureManager.init();\n}\n\nasync function migrate_run() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.run();\n}\n\nasync function migrate_check() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.check();\n}\n\nasync function migrate_status() {\n await setupMigrator();\n\n const status = await migrator.getStatus();\n // status;\n console.log(status);\n}\n\nasync function migrate_rollback() {\n await setupMigrator();\n\n await migrator.rollback();\n}\n\nasync function migrate_clear() {\n await setupMigrator();\n\n await migrator.clearPendingList();\n}\n\nasync function migrate_reset() {\n await setupMigrator();\n\n await migrator.resetAll();\n}\n\nasync function fixture_init() {\n const _db = DB.getClient(\"development_master\");\n const srcConn = _db.connectionInfo;\n\n const targets = [\n {\n label: \"(REMOTE) Fixture DB\",\n connKey: \"fixture_remote\",\n },\n {\n label: \"(LOCAL) Fixture DB\",\n connKey: \"fixture_local\",\n },\n {\n label: \"(LOCAL) Testing DB\",\n connKey: \"test\",\n },\n ] as {\n label: string;\n connKey: keyof SonamuKnexDBConfig | keyof SonamuKyselyDBConfig;\n }[];\n\n // 1. 기준DB 스키마를 덤프\n console.log(\"DUMP...\");\n const dumpFilename = `/tmp/sonamu-fixture-init-${Date.now()}.sql`;\n const migrationsDump = `/tmp/sonamu-fixture-init-migrations-${Date.now()}.sql`;\n execSync(\n `mysqldump -h${srcConn.host} -P${srcConn.port} -u${srcConn.user} -p${srcConn.password} --single-transaction -d --no-create-db --triggers ${srcConn.database} > ${dumpFilename}`\n );\n\n // 2. 마이그레이션 테이블이 존재하면 덤프\n const dbClient = DB.baseConfig!.client;\n const migrationTable = DB.migrationTable;\n const [migrations] = await _db.raw<{ count: number }>(\n \"SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?\",\n [srcConn.database, migrationTable]\n );\n if (migrations.count > 0) {\n execSync(\n `mysqldump -h${srcConn.host} -P${srcConn.port} -u${srcConn.user} -p${srcConn.password} --single-transaction --no-create-db --triggers ${srcConn.database} ${migrationTable} ${migrationTable}_lock > ${migrationsDump}`\n );\n }\n\n // 2. 대상DB 각각에 대하여 존재여부 확인 후 붓기\n for await (const { label, connKey } of targets) {\n const config = DB.connectionInfo[connKey];\n\n if (\n label === \"(LOCAL) Fixture DB\" &&\n targets.find(\n (t) =>\n t.label === \"(REMOTE) Fixture DB\" &&\n DB.connectionInfo[t.connKey].host === config.host &&\n DB.connectionInfo[t.connKey].database === config.database\n )\n ) {\n console.log(chalk.red(`${label}: Skipped!`));\n continue;\n }\n\n const db = (() => {\n if (dbClient === \"knex\") {\n const config = _.cloneDeep(DB.fullConfig[connKey]) as KnexConfig;\n config.connection.database = undefined;\n return new KnexClient(config);\n } else {\n const config = _.cloneDeep(DB.fullConfig[connKey]) as KyselyConfig;\n config.database = undefined;\n return new KyselyClient(config);\n }\n })();\n\n const [row] = await db.raw(`SHOW DATABASES LIKE \"${config.database}\"`);\n if (row) {\n console.log(\n chalk.yellow(`${label}: Database \"${config.database}\" Already exists`)\n );\n await db.destroy();\n continue;\n }\n\n console.log(`SYNC to ${label}...`);\n const mysqlCmd = `mysql -h${config.host} -P${srcConn.port} -u${config.user} -p${config.password}`;\n execSync(`${mysqlCmd} -e 'DROP DATABASE IF EXISTS \\`${config.database}\\`'`);\n execSync(`${mysqlCmd} -e 'CREATE DATABASE \\`${config.database}\\`'`);\n execSync(`${mysqlCmd} ${config.database} < ${dumpFilename}`);\n if (fs.existsSync(migrationsDump)) {\n execSync(`${mysqlCmd} ${config.database} < ${migrationsDump}`);\n }\n\n await db.destroy();\n }\n}\n\nasync function fixture_import(entityId: string, recordIds: number[]) {\n await setupFixtureManager();\n\n await FixtureManager.importFixture(entityId, recordIds);\n await FixtureManager.sync();\n}\n\nasync function fixture_sync() {\n await setupFixtureManager();\n\n await FixtureManager.sync();\n}\n\nasync function stub_practice(name: string) {\n const practiceDir = path.join(Sonamu.apiRootPath, \"src\", \"practices\");\n const fileNames = fs.readdirSync(practiceDir);\n\n const maxSeqNo = (() => {\n if (fs.existsSync(practiceDir) === false) {\n fs.mkdirSync(practiceDir, { recursive: true });\n }\n\n const filteredSeqs = fileNames\n .filter(\n (fileName) => fileName.startsWith(\"p\") && fileName.endsWith(\".ts\")\n )\n .map((fileName) => {\n const [, seqNo] = fileName.match(/^p([0-9]+)\\-/) ?? [\"0\", \"0\"];\n return parseInt(seqNo);\n })\n .sort((a, b) => b - a);\n\n if (filteredSeqs.length > 0) {\n return filteredSeqs[0];\n }\n\n return 0;\n })();\n\n const currentSeqNo = maxSeqNo + 1;\n const fileName = `p${currentSeqNo}-${name}.ts`;\n const dstPath = path.join(practiceDir, fileName);\n\n // FIXME\n const code = [\n `import { BaseModel } from \"sonamu\";`,\n \"\",\n `console.clear();`,\n `console.log(\"${fileName}\");`,\n \"\",\n `async function bootstrap() {`,\n ` // TODO`,\n `}`,\n `bootstrap().finally(async () => {`,\n `await BaseModel.destroy();`,\n `});`,\n ].join(\"\\n\");\n fs.writeFileSync(dstPath, code);\n\n execSync(`code ${dstPath}`);\n\n const runCode = `yarn node -r source-map-support/register dist/practices/${fileName.replace(\n \".ts\",\n \".js\"\n )}`;\n console.log(`${chalk.blue(runCode)} copied to clipboard.`);\n execSync(`echo \"${runCode}\" | pbcopy`);\n}\n\nasync function stub_entity(entityId: string) {\n await Sonamu.syncer.createEntity({ entityId });\n}\n\nasync function scaffold_model(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model\", {\n entityId,\n });\n}\n\nasync function scaffold_model_test(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model_test\", {\n entityId,\n });\n}\n\nasync function ui() {\n try {\n const sonamuUI: {\n startServers: (appRootPath: string) => void;\n } = await import(\"@sonamu-kit/ui\" as string);\n sonamuUI.startServers(Sonamu.apiRootPath);\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes(\"isn't declared\")) {\n console.log(`You need to install ${chalk.blue(`@sonamu-kit/ui`)} first.`);\n return;\n }\n throw e;\n }\n}\n\nasync function smd_migration() {\n await SMDManager.autoload();\n const smdIds = SMDManager.getAllIds();\n\n function enumLabelsToEntityEnums(\n entityId: string,\n enumLabels: {\n [enumName: string]: { [name: string]: { ko: string } };\n }\n ): { [enumName: string]: { [name: string]: string } } {\n return Object.fromEntries(\n Object.entries(enumLabels).map(([enumLabelName, enumLabel]) => {\n const enumName =\n entityId + inflection.camelize(enumLabelName.toLowerCase(), false);\n return [\n enumName,\n Object.fromEntries(\n Object.entries(enumLabel).map(([name, { ko }]) => [name, ko])\n ),\n ];\n })\n );\n }\n for await (const smdId of smdIds) {\n const smd = SMDManager.get(smdId);\n const entityJson = {\n id: smd.id,\n ...(smd.parentId && { parentId: smd.parentId }),\n title: smd.title,\n props: smd.props,\n indexes: smd.indexes,\n subsets: smd.subsets,\n enums: enumLabelsToEntityEnums(smd.id, smd.enumLabels),\n };\n\n const parentNames = SMDManager.getNamesFromId(smd.parentId ?? smd.id);\n const names = SMDManager.getNamesFromId(smd.id);\n const dstPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.entity.json`\n );\n\n const formatted = await prettier.format(JSON.stringify(entityJson), {\n parser: \"json\",\n });\n fs.writeFileSync(dstPath, formatted);\n console.log(chalk.blue(`CREATED: ${dstPath}`));\n\n // smd.ts, enums.ts, genereated.ts 삭제 (트랜스파일 된 js파일도 삭제)\n const srcSmdPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.smd.ts`\n );\n const dstSmdPath = srcSmdPath\n .replace(\"/src/\", \"/dist/\")\n .replace(/\\.ts$/, \".js\");\n const srcEnumsPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.enums.ts`\n );\n const dstEnumsPath = srcEnumsPath\n .replace(\"/src/\", \"/dist/\")\n .replace(/\\.ts$/, \".js\");\n const srcGeneratedPath = path.join(\n Sonamu.apiRootPath,\n \"src\",\n \"application\",\n parentNames.fs,\n `${names.fs}.generated.ts`\n );\n const dstGeneratedPath = srcGeneratedPath\n .replace(\"/src/\", \"/dist/\")\n .replace(/\\.ts$/, \".js\");\n\n [\n srcSmdPath,\n dstSmdPath,\n srcEnumsPath,\n dstEnumsPath,\n ...Sonamu.config.sync.targets.map((target) =>\n srcEnumsPath\n .replace(Sonamu.apiRootPath, path.join(Sonamu.appRootPath, target))\n .replace(\"/src/application/\", \"/src/services/\")\n ),\n srcGeneratedPath,\n dstGeneratedPath,\n ].map((p) => {\n if (fs.existsSync(p) === false) {\n console.log(chalk.yellow(`NOT FOUND: ${p}`));\n return;\n }\n fs.unlinkSync(p);\n console.log(chalk.red(`DELETED: ${p}`));\n });\n }\n\n // Entity로 reload\n console.log(\"Entity로 다시 로드합니다.\");\n EntityManager.isAutoloaded = false;\n await EntityManager.autoload();\n\n // Entity를 통해 generated.ts 재생성\n const entityIds = EntityManager.getAllParentIds();\n for await (const entityId of entityIds) {\n await Sonamu.syncer.generateTemplate(\"generated\", { entityId });\n }\n}\n","import chalk from \"chalk\";\nimport glob from \"glob\";\nimport inflection from \"inflection\";\nimport _ from \"lodash\";\nimport path from \"path\";\nimport { SMD } from \"./smd\";\nimport { SMDInput } from \"../types/types\";\nimport { Sonamu } from \"../api/sonamu\";\nimport { EntityNamesRecord } from \"../entity/entity-manager\";\n\ntype TableSpec = {\n name: string;\n uniqueColumns: string[];\n};\nclass SMDManagerClass {\n private SMDs: Map<string, SMD> = new Map();\n public modulePaths: Map<string, string> = new Map();\n private tableSpecs: Map<string, TableSpec> = new Map();\n public isAutoloaded: boolean = false;\n\n // 경로 전달받아 모든 SMD 파일 로드\n async autoload(doSilent: boolean = false) {\n if (this.isAutoloaded) {\n return;\n }\n const pathPattern = path.join(\n Sonamu.apiRootPath,\n \"/dist/application/**/*.smd.js\"\n );\n !doSilent && console.log(chalk.yellow(`autoload ${pathPattern}`));\n\n return new Promise((resolve) => {\n glob.glob(path.resolve(pathPattern!), (_err, files) => {\n const importPaths = files.map((filePath) =>\n path.relative(__dirname, filePath)\n );\n Promise.all(\n importPaths.map(async (importPath) => {\n const imported = await import(importPath);\n Object.values(imported).map((smdInput) =>\n this.register(smdInput as SMDInput<string>)\n );\n return imported;\n })\n ).then(() => {\n resolve(\"ok\");\n this.isAutoloaded = true;\n });\n });\n });\n }\n\n register(smdInput: SMDInput<string>): void {\n const smd = new SMD(smdInput);\n this.SMDs.set(smdInput.id, smd);\n }\n\n get(smdId: string): SMD {\n const smd = this.SMDs.get(smdId);\n if (smd === undefined) {\n throw new Error(`존재하지 않는 SMD 요청 ${smdId}`);\n }\n\n return smd;\n }\n\n exists(smdId: string): boolean {\n const smd = this.SMDs.get(smdId);\n return smd !== undefined;\n }\n\n getAllIds(): string[] {\n return Array.from(SMDManager.SMDs.keys());\n }\n\n getAllParentIds(): string[] {\n return this.getAllIds().filter((smdId) => {\n const smd = this.get(smdId);\n return smd.parentId === undefined;\n });\n }\n\n getChildrenIds(parentId: string): string[] {\n return this.getAllIds().filter((smdId) => {\n const smd = this.get(smdId);\n return smd.parentId === parentId;\n });\n }\n\n setModulePath(key: string, modulePath: string): void {\n // console.debug(chalk.cyan(`setModulePath :: ${key} :: ${modulePath}`));\n this.modulePaths.set(key, modulePath);\n }\n\n getModulePath(key: string): string {\n const modulePath = this.modulePaths.get(key);\n if (modulePath === undefined) {\n throw new Error(`존재하지 않는 모듈 패스 요청 ${key}`);\n }\n\n return modulePath;\n }\n\n setTableSpec(tableSpec: TableSpec) {\n this.tableSpecs.set(tableSpec.name, tableSpec);\n }\n\n getTableSpec(key: string): TableSpec {\n const tableSpec = this.tableSpecs.get(key);\n if (tableSpec === undefined) {\n throw new Error(`존재하지 않는 테이블 스펙 요청 ${key}`);\n }\n\n return tableSpec;\n }\n\n getNamesFromId(smdId: string): EntityNamesRecord {\n // entityId가 단복수 동형 단어인 경우 List 붙여서 생성\n const pluralized =\n inflection.pluralize(smdId) === smdId\n ? `${smdId}List`\n : inflection.pluralize(smdId);\n\n return {\n fs: inflection.dasherize(inflection.underscore(smdId)).toLowerCase(),\n fsPlural: inflection\n .dasherize(inflection.underscore(pluralized))\n .toLowerCase(),\n camel: inflection.camelize(smdId, true),\n camelPlural: inflection.camelize(pluralized, true),\n capital: smdId,\n capitalPlural: pluralized,\n upper: smdId.toUpperCase(),\n constant: inflection.underscore(smdId).toUpperCase(),\n };\n }\n}\n\nexport const SMDManager = new SMDManagerClass();\n","import _ from \"lodash\";\nimport {\n EntityProp,\n RelationProp,\n isRelationProp,\n SubsetQuery,\n isVirtualProp,\n isBelongsToOneRelationProp,\n isOneToOneRelationProp,\n isHasManyRelationProp,\n isManyToManyRelationProp,\n EntityPropNode,\n isEnumProp,\n StringProp,\n EntityIndex,\n EnumsLabelKo,\n SMDInput,\n} from \"../types/types\";\nimport inflection from \"inflection\";\nimport path from \"path\";\nimport fs from \"fs-extra\";\nimport { z } from \"zod\";\nimport { Sonamu } from \"../api/sonamu\";\nimport { SMDManager } from \"./smd-manager\";\n\nexport class SMD {\n id: string;\n parentId?: string;\n table: string;\n title: string;\n names: {\n fs: string;\n module: string;\n };\n props: EntityProp[];\n propsDict: {\n [key: string]: EntityProp;\n };\n relations: {\n [key: string]: RelationProp;\n };\n indexes: EntityIndex[];\n subsets: {\n [key: string]: string[];\n };\n types: {\n [name: string]: z.ZodTypeAny;\n } = {};\n enums: {\n [name: string]: z.ZodEnum<any>;\n } = {};\n enumLabels: {\n [name: string]: EnumsLabelKo<string>;\n } = {};\n\n constructor({\n id,\n parentId,\n table,\n title,\n props,\n indexes,\n subsets,\n }: SMDInput<any>) {\n // id\n this.id = id;\n this.parentId = parentId;\n this.title = title ?? this.id;\n this.table = table ?? inflection.underscore(inflection.pluralize(id));\n\n // props\n if (props) {\n this.props = props.map((prop) => {\n if (isEnumProp(prop)) {\n if (prop.id.includes(\"$Model\")) {\n prop.id = prop.id.replace(\"$Model\", id);\n }\n }\n return prop;\n });\n this.propsDict = props.reduce((result, prop) => {\n return {\n ...result,\n [prop.name]: prop,\n };\n }, {});\n\n // relations\n this.relations = props\n .filter((prop) => isRelationProp(prop))\n .reduce((result, prop) => {\n return {\n ...result,\n [prop.name]: prop,\n };\n }, {});\n } else {\n this.props = [];\n this.propsDict = {};\n this.relations = {};\n }\n\n // indexes\n this.indexes = indexes ?? [];\n\n // subsets\n this.subsets = subsets ?? {};\n\n // names\n this.names = {\n fs:\n parentId === undefined\n ? inflection.dasherize(inflection.underscore(id)).toLowerCase()\n : inflection.dasherize(parentId).toLowerCase(),\n module: id,\n };\n\n this.registerModulePaths();\n this.registerTableSpecs();\n }\n\n /*\n subset SELECT/JOIN/LOADER 결과 리턴\n */\n getSubsetQuery(subsetKey: string): SubsetQuery {\n const subset = this.subsets[subsetKey];\n\n const result: SubsetQuery = this.resolveSubsetQuery(\"\", subset);\n return result;\n }\n\n /*\n */\n resolveSubsetQuery(\n prefix: string,\n fields: string[],\n isAlreadyOuterJoined: boolean = false\n ): SubsetQuery {\n // prefix 치환 (prefix는 ToOneRelation이 복수로 붙은 경우 모두 __로 변경됨)\n prefix = prefix.replace(/\\./g, \"__\");\n\n // 서브셋을 1뎁스만 분리하여 그룹핑\n const subsetGroup = _.groupBy(fields, (field) => {\n if (field.includes(\".\")) {\n const [rel] = field.split(\".\");\n return rel;\n } else {\n return \"\";\n }\n });\n\n const result = Object.keys(subsetGroup).reduce(\n (r, groupKey) => {\n const fields = subsetGroup[groupKey];\n // 현재 테이블 필드셋은 select, virtual에 추가하고 리턴\n if (groupKey === \"\") {\n const realFields = fields.filter(\n (field) => !isVirtualProp(this.propsDict[field])\n );\n const virtualFields = fields.filter((field) =>\n isVirtualProp(this.propsDict[field])\n );\n\n if (prefix === \"\") {\n // 현재 테이블인 경우\n r.select = r.select.concat(\n realFields.map((field) => `${this.table}.${field}`)\n );\n r.virtual = r.virtual.concat(virtualFields);\n } else {\n // 넘어온 테이블인 경우\n r.select = r.select.concat(\n realFields.map(\n (field) => `${prefix}.${field} as ${prefix}__${field}`\n )\n );\n }\n\n return r;\n }\n\n const relation = this.relations[groupKey];\n if (relation === undefined) {\n throw new Error(`존재하지 않는 relation 참조 ${groupKey}`);\n }\n const relSMD = SMDManager.get(relation.with);\n\n if (\n isOneToOneRelationProp(relation) ||\n isBelongsToOneRelationProp(relation)\n ) {\n // -One Relation: JOIN 으로 처리\n const relFields = fields.map((field) =>\n field.split(\".\").slice(1).join(\".\")\n );\n\n // -One Relation에서 id 필드만 참조하는 경우 릴레이션 넘기지 않고 리턴\n if (relFields.length === 1 && relFields[0] === \"id\") {\n if (prefix === \"\") {\n r.select = r.select.concat(`${this.table}.${groupKey}_id`);\n } else {\n r.select = r.select.concat(\n `${prefix}.${groupKey}_id as ${prefix}__${groupKey}_id`\n );\n }\n return r;\n }\n\n // innerOrOuter\n const innerOrOuter = (() => {\n if (isAlreadyOuterJoined) {\n return \"outer\";\n }\n\n if (isOneToOneRelationProp(relation)) {\n if (\n relation.hasJoinColumn === true &&\n (relation.nullable ?? false) === false\n ) {\n return \"inner\";\n } else {\n return \"outer\";\n }\n } else {\n if (relation.nullable) {\n return \"outer\";\n } else {\n return \"inner\";\n }\n }\n })();\n const relSubsetQuery = relSMD.resolveSubsetQuery(\n `${prefix !== \"\" ? prefix + \".\" : \"\"}${groupKey}`,\n relFields,\n innerOrOuter === \"outer\"\n );\n r.select = r.select.concat(relSubsetQuery.select);\n r.virtual = r.virtual.concat(relSubsetQuery.virtual);\n\n const joinAs = prefix === \"\" ? groupKey : prefix + \"__\" + groupKey;\n const fromTable = prefix === \"\" ? this.table : prefix;\n\n let joinClause;\n if (relation.customJoinClause) {\n joinClause = {\n custom: relation.customJoinClause,\n };\n } else {\n let from, to;\n if (isOneToOneRelationProp(relation)) {\n if (relation.hasJoinColumn) {\n from = `${fromTable}.${relation.name}_id`;\n to = `${joinAs}.id`;\n } else {\n from = `${fromTable}.id`;\n to = `${joinAs}.${inflection.underscore(\n this.names.fs.replace(/\\-/g, \"_\")\n )}_id`;\n }\n } else {\n from = `${fromTable}.${relation.name}_id`;\n to = `${joinAs}.id`;\n }\n joinClause = {\n from,\n to,\n };\n }\n\n r.joins.push({\n as: joinAs,\n join: innerOrOuter,\n table: relSMD.table,\n ...joinClause,\n });\n\n // BelongsToOne 밑에 HasMany가 붙은 경우\n if (relSubsetQuery.loaders.length > 0) {\n const convertedLoaders = relSubsetQuery.loaders.map((loader) => {\n const newAs = [groupKey, loader.as].join(\"__\");\n return {\n as: newAs,\n table: loader.table,\n manyJoin: loader.manyJoin,\n oneJoins: loader.oneJoins,\n select: loader.select,\n };\n });\n\n r.loaders = [...r.loaders, ...convertedLoaders];\n }\n\n r.joins = r.joins.concat(relSubsetQuery.joins);\n } else if (\n isHasManyRelationProp(relation) ||\n isManyToManyRelationProp(relation)\n ) {\n // -Many Relation: Loader 로 처리\n const relFields = fields.map((field) =>\n field.split(\".\").slice(1).join(\".\")\n );\n const relSubsetQuery = relSMD.resolveSubsetQuery(\"\", relFields);\n\n let manyJoin: SubsetQuery[\"loaders\"][number][\"manyJoin\"];\n if (isHasManyRelationProp(relation)) {\n manyJoin = {\n fromTable: this.table,\n fromCol: \"id\",\n idField: prefix === \"\" ? `id` : `${prefix}__id`,\n toTable: relSMD.table,\n toCol: relation.joinColumn,\n };\n } else if (isManyToManyRelationProp(relation)) {\n const [table1, table2] = relation.joinTable.split(\"__\");\n\n manyJoin = {\n fromTable: this.table,\n fromCol: \"id\",\n idField: prefix === \"\" ? `id` : `${prefix}__id`,\n through: {\n table: relation.joinTable,\n fromCol: `${inflection.singularize(table1)}_id`,\n toCol: `${inflection.singularize(table2)}_id`,\n },\n toTable: relSMD.table,\n toCol: \"id\",\n };\n } else {\n throw new Error();\n }\n\n r.loaders.push({\n as: groupKey,\n table: relSMD.table,\n manyJoin,\n oneJoins: relSubsetQuery.joins,\n select: relSubsetQuery.select,\n loaders: relSubsetQuery.loaders,\n });\n }\n\n return r;\n },\n {\n select: [],\n virtual: [],\n joins: [],\n loaders: [],\n } as SubsetQuery\n );\n return result;\n }\n\n /*\n FieldExpr[] 을 SMDPropNode[] 로 변환\n */\n fieldExprsToPropNodes(\n fieldExprs: string[],\n smd: SMD = this\n ): EntityPropNode[] {\n const groups = fieldExprs.reduce(\n (result, fieldExpr) => {\n let key, value, elseExpr;\n if (fieldExpr.includes(\".\")) {\n [key, ...elseExpr] = fieldExpr.split(\".\");\n value = elseExpr.join(\".\");\n } else {\n key = \"\";\n value = fieldExpr;\n }\n result[key] = (result[key] ?? []).concat(value);\n\n return result;\n },\n {} as {\n [k: string]: string[];\n }\n );\n\n return Object.keys(groups)\n .map((key) => {\n const group = groups[key];\n\n // 일반 prop 처리\n if (key === \"\") {\n return group.map((propName) => {\n // uuid 개별 처리\n if (propName === \"uuid\") {\n return {\n nodeType: \"plain\" as const,\n prop: {\n type: \"string\",\n name: \"uuid\",\n length: 128,\n } as StringProp,\n children: [],\n };\n }\n\n const prop = smd.propsDict[propName];\n if (prop === undefined) {\n throw new Error(`${this.id} -- 잘못된 FieldExpr ${propName}`);\n }\n return {\n nodeType: \"plain\" as const,\n prop,\n children: [],\n };\n });\n }\n\n // relation prop 처리\n const prop = smd.propsDict[key];\n if (!isRelationProp(prop)) {\n throw new Error(`잘못된 FieldExpr ${key}.${group[0]}`);\n }\n const relSMD = SMDManager.get(prop.with);\n\n // relation -One 에 id 필드 하나인 경우\n if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop)) {\n if (group.length == 1 && (group[0] === \"id\" || group[0] == \"id?\")) {\n // id 하나만 있는지 체크해서, 하나만 있으면 상위 prop으로 id를 리턴\n const idProp = relSMD.propsDict.id;\n return {\n nodeType: \"plain\" as const,\n prop: {\n ...idProp,\n name: key + \"_id\",\n nullable: prop.nullable,\n },\n children: [],\n };\n }\n }\n\n // -One 그외의 경우 object로 리턴\n // -Many의 경우 array로 리턴\n // Recursive 로 뎁스 처리\n const children = this.fieldExprsToPropNodes(group, relSMD);\n const nodeType =\n isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop)\n ? (\"object\" as const)\n : (\"array\" as const);\n\n return {\n prop,\n children,\n nodeType,\n };\n })\n .flat();\n }\n\n getFieldExprs(\n prefix = \"\",\n maxDepth: number = 3,\n froms: string[] = []\n ): string[] {\n return this.props\n .map((prop) => {\n const propName = [prefix, prop.name].filter((v) => v !== \"\").join(\".\");\n if (propName === prefix) {\n return null;\n }\n if (isRelationProp(prop)) {\n if (maxDepth < 0) {\n return null;\n }\n if (froms.includes(prop.with)) {\n // 역방향 relation인 경우 제외\n return null;\n }\n // 정방향 relation인 경우 recursive 콜\n const relMd = SMDManager.get(prop.with);\n return relMd.getFieldExprs(propName, maxDepth - 1, [\n ...froms,\n this.id,\n ]);\n }\n return propName;\n })\n .flat()\n .filter((f) => f !== null) as string[];\n }\n\n registerModulePaths() {\n const basePath = `${this.names.fs}`;\n\n // base-scheme\n SMDManager.setModulePath(\n `${this.id}BaseSchema`,\n `${basePath}/${this.names.fs}.generated`\n );\n\n // subset\n if (Object.keys(this.subsets).length > 0) {\n SMDManager.setModulePath(\n `${this.id}SubsetKey`,\n `${basePath}/${this.names.fs}.generated`\n );\n SMDManager.setModulePath(\n `${this.id}SubsetMapping`,\n `${basePath}/${this.names.fs}.generated`\n );\n Object.keys(this.subsets).map((subsetKey) => {\n SMDManager.setModulePath(\n `${this.id}Subset${subsetKey.toUpperCase()}`,\n `${basePath}/${this.names.fs}.generated`\n );\n });\n }\n\n // types\n const typesModulePath = `${basePath}/${this.names.fs}.types`;\n const typesFileDistPath = path.join(\n Sonamu.apiRootPath,\n `dist/application/${typesModulePath}.js`\n );\n\n if (fs.existsSync(typesFileDistPath)) {\n const importPath = path.relative(__dirname, typesFileDistPath);\n import(importPath).then((t) => {\n this.types = Object.keys(t).reduce((result, key) => {\n SMDManager.setModulePath(key, typesModulePath);\n return {\n ...result,\n [key]: t[key],\n };\n }, {});\n });\n }\n\n // enums\n const enumsModulePath = `${basePath}/${this.names.fs}.enums`;\n const enumsFileDistPath = path.join(\n Sonamu.apiRootPath,\n `/dist/application/${enumsModulePath}.js`\n );\n if (fs.existsSync(enumsFileDistPath)) {\n const importPath = path.relative(__dirname, enumsFileDistPath);\n import(importPath).then((t) => {\n this.enums = Object.keys(t).reduce((result, key) => {\n SMDManager.setModulePath(key, enumsModulePath);\n\n // Enum Labels 별도 처리\n if (key === inflection.underscore(this.id).toUpperCase()) {\n this.enumLabels = t[key];\n }\n return {\n ...result,\n [key]: t[key],\n };\n }, {});\n });\n }\n }\n\n registerTableSpecs(): void {\n const uniqueColumns = _.uniq(\n this.indexes\n .filter((idx) => idx.type === \"unique\")\n .map((idx) => idx.columns)\n .flat()\n );\n\n SMDManager.setTableSpec({\n name: this.table,\n uniqueColumns,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/cli.ts"],"sourcesContent":["/* Global Begin */\nimport chalk from \"chalk\";\nconsole.log(chalk.bgBlue(`BEGIN ${new Date()}`));\n\nimport dotenv from \"dotenv\";\ndotenv.config();\n\nimport path from \"path\";\nimport { tsicli } from \"tsicli\";\nimport { execSync } from \"child_process\";\nimport { mkdir, readFile, readdir, writeFile } from \"fs/promises\";\nimport { exists } from \"../utils/fs-utils\";\nimport process from \"process\";\nimport { Sonamu } from \"../api\";\nimport knex, { Knex } from \"knex\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { Migrator } from \"../migration/migrator\";\nimport { FixtureManager } from \"../testing/fixture-manager\";\nimport { SWC_BUILD_COMMAND } from \"./build-config\";\n\nlet migrator: Migrator;\n\nasync function bootstrap() {\n await Sonamu.init(false, false);\n\n await tsicli(process.argv, {\n types: {\n \"#entityId\": {\n type: \"autocomplete\",\n name: \"#entityId\",\n message: \"Please input #entityId\",\n choices: EntityManager.getAllParentIds().map((entityId) => ({\n title: entityId,\n value: entityId,\n })),\n },\n \"#recordIds\": \"number[]\",\n \"#name\": \"string\",\n },\n args: [\n [\"fixture\", \"init\"],\n [\"fixture\", \"import\", \"#entityId\", \"#recordIds\"],\n [\"fixture\", \"sync\"],\n [\"migrate\", \"run\"],\n [\"migrate\", \"check\"],\n [\"migrate\", \"rollback\"],\n [\"migrate\", \"reset\"],\n [\"migrate\", \"clear\"],\n [\"migrate\", \"status\"],\n [\"stub\", \"practice\", \"#name\"],\n [\"stub\", \"entity\", \"#name\"],\n [\"scaffold\", \"model\", \"#entityId\"],\n [\"scaffold\", \"model_test\", \"#entityId\"],\n [\"scaffold\", \"view_list\", \"#entityId\"],\n [\"scaffold\", \"view_form\", \"#entityId\"],\n [\"ui\"],\n [\"dev:serve\"],\n [\"serve\"],\n ],\n runners: {\n migrate_run,\n migrate_check,\n migrate_rollback,\n migrate_clear,\n migrate_reset,\n migrate_status,\n fixture_init,\n fixture_import,\n fixture_sync,\n stub_practice,\n stub_entity,\n scaffold_model,\n scaffold_model_test,\n ui,\n // scaffold_view_list,\n // scaffold_view_form,\n \"dev:serve\": dev_serve,\n serve,\n },\n });\n}\nbootstrap().finally(async () => {\n if (migrator) {\n await migrator.destroy();\n }\n await FixtureManager.destroy();\n\n /* Global End */\n console.log(chalk.bgBlue(`END ${new Date()}\\n`));\n});\n\nasync function dev_serve() {\n const nodemon = await import(\"nodemon\");\n\n const nodemonConfig = await (async () => {\n const projectNodemonPath = path.join(Sonamu.apiRootPath, \"nodemon.json\");\n const hasProjectNodemon = await exists(projectNodemonPath);\n\n if (hasProjectNodemon) {\n return JSON.parse(await readFile(projectNodemonPath, \"utf8\"));\n }\n\n return {\n watch: [\"src/index.ts\"],\n ignore: [\"dist/**\", \"**/*.js\", \"**/*.d.ts\"],\n exec: [\n SWC_BUILD_COMMAND,\n \"node -r source-map-support/register -r dotenv/config dist/index.js\",\n ].join(\" && \"),\n };\n })();\n\n nodemon.default(nodemonConfig);\n\n // 프로세스 종료 처리\n const cleanup = async () => {\n await Sonamu.server?.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n process.on(\"SIGUSR2\", cleanup);\n}\n\nasync function serve() {\n const distIndexPath = path.join(Sonamu.apiRootPath, \"dist\", \"index.js\");\n\n if (!(await exists(distIndexPath))) {\n console.log(\n chalk.red(\"dist/index.js not found. Please build your project first.\")\n );\n console.log(chalk.blue(\"Run: yarn sonamu build\"));\n return;\n }\n\n const { spawn } = await import(\"child_process\");\n const serverProcess = spawn(\n \"node\",\n [\"-r\", \"source-map-support/register\", \"-r\", \"dotenv/config\", distIndexPath],\n {\n cwd: Sonamu.apiRootPath,\n stdio: \"inherit\",\n }\n );\n\n process.on(\"SIGINT\", () => {\n serverProcess.kill(\"SIGTERM\");\n process.exit(0);\n });\n}\n\nasync function setupMigrator() {\n // migrator\n migrator = new Migrator({\n mode: \"dev\",\n });\n}\n\nasync function setupFixtureManager() {\n FixtureManager.init();\n}\n\nasync function migrate_run() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.run();\n}\n\nasync function migrate_check() {\n await setupMigrator();\n\n await migrator.cleanUpDist();\n await migrator.check();\n}\n\nasync function migrate_status() {\n await setupMigrator();\n\n const status = await migrator.getStatus();\n // status;\n console.log(status);\n}\n\nasync function migrate_rollback() {\n await setupMigrator();\n\n await migrator.rollback();\n}\n\nasync function migrate_clear() {\n await setupMigrator();\n\n await migrator.clearPendingList();\n}\n\nasync function migrate_reset() {\n await setupMigrator();\n\n await migrator.resetAll();\n}\n\nasync function fixture_init() {\n const srcConfig = Sonamu.dbConfig.development_master;\n const targets = [\n {\n label: \"(REMOTE) Fixture DB\",\n config: Sonamu.dbConfig.fixture_remote,\n },\n {\n label: \"(LOCAL) Fixture DB\",\n config: Sonamu.dbConfig.fixture_local,\n toSkip: (() => {\n const remoteConn = Sonamu.dbConfig.fixture_remote\n .connection as Knex.ConnectionConfig;\n const localConn = Sonamu.dbConfig.fixture_local\n .connection as Knex.ConnectionConfig;\n return (\n remoteConn.host === localConn.host &&\n remoteConn.database === localConn.database\n );\n })(),\n },\n {\n label: \"(LOCAL) Testing DB\",\n config: Sonamu.dbConfig.test,\n },\n ] as {\n label: string;\n config: Knex.Config;\n toSkip?: boolean;\n }[];\n\n // 1. 기준DB 스키마를 덤프\n console.log(\"DUMP...\");\n const dumpFilename = `/tmp/sonamu-fixture-init-${Date.now()}.sql`;\n const srcConn = srcConfig.connection as Knex.ConnectionConfig;\n const migrationsDump = `/tmp/sonamu-fixture-init-migrations-${Date.now()}.sql`;\n execSync(\n `mysqldump -h${srcConn.host} -u${srcConn.user} -p${srcConn.password} --single-transaction -d --no-create-db --triggers ${srcConn.database} > ${dumpFilename}`\n );\n const _db = knex(srcConfig);\n const [[migrations]] = await _db.raw(\n \"SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = ? AND table_name = 'knex_migrations'\",\n [srcConn.database]\n );\n if (migrations.count > 0) {\n execSync(\n `mysqldump -h${srcConn.host} -u${srcConn.user} -p${srcConn.password} --single-transaction --no-create-db --triggers ${srcConn.database} knex_migrations knex_migrations_lock > ${migrationsDump}`\n );\n }\n\n // 2. 대상DB 각각에 대하여 존재여부 확인 후 붓기\n for await (const { label, config, toSkip } of targets) {\n const conn = config.connection as Knex.ConnectionConfig;\n\n if (toSkip === true) {\n console.log(chalk.red(`${label}: Skipped!`));\n continue;\n }\n\n const db = knex({\n ...config,\n connection: {\n ...((config.connection ?? {}) as Knex.ConnectionConfig),\n database: undefined,\n },\n });\n const [[row]] = await db.raw(`SHOW DATABASES LIKE \"${conn.database}\"`);\n if (row) {\n console.log(\n chalk.yellow(`${label}: Database \"${conn.database}\" Already exists`)\n );\n await db.destroy();\n continue;\n }\n\n console.log(`SYNC to ${label}...`);\n const mysqlCmd = `mysql -h${conn.host} -u${conn.user} -p${conn.password}`;\n execSync(`${mysqlCmd} -e 'DROP DATABASE IF EXISTS \\`${conn.database}\\`'`);\n execSync(`${mysqlCmd} -e 'CREATE DATABASE \\`${conn.database}\\`'`);\n execSync(`${mysqlCmd} ${conn.database} < ${dumpFilename}`);\n if (await exists(migrationsDump)) {\n execSync(`${mysqlCmd} ${conn.database} < ${migrationsDump}`);\n }\n\n await db.destroy();\n }\n\n await _db.destroy();\n}\n\nasync function fixture_import(entityId: string, recordIds: number[]) {\n await setupFixtureManager();\n\n await FixtureManager.importFixture(entityId, recordIds);\n await FixtureManager.sync();\n}\n\nasync function fixture_sync() {\n await setupFixtureManager();\n\n await FixtureManager.sync();\n}\n\nasync function stub_practice(name: string) {\n const practiceDir = path.join(Sonamu.apiRootPath, \"src\", \"practices\");\n const fileNames = await readdir(practiceDir);\n\n const maxSeqNo = await (async () => {\n if (!(await exists(practiceDir))) {\n await mkdir(practiceDir, { recursive: true });\n }\n\n const filteredSeqs = fileNames\n .filter(\n (fileName) => fileName.startsWith(\"p\") && fileName.endsWith(\".ts\")\n )\n .map((fileName) => {\n const [, seqNo] = fileName.match(/^p([0-9]+)\\-/) ?? [\"0\", \"0\"];\n return parseInt(seqNo);\n })\n .sort((a, b) => b - a);\n\n if (filteredSeqs.length > 0) {\n return filteredSeqs[0];\n }\n\n return 0;\n })();\n\n const currentSeqNo = maxSeqNo + 1;\n const fileName = `p${currentSeqNo}-${name}.ts`;\n const dstPath = path.join(practiceDir, fileName);\n\n // FIXME\n const code = [\n `import { BaseModel } from \"sonamu\";`,\n \"\",\n `console.clear();`,\n `console.log(\"${fileName}\");`,\n \"\",\n `async function bootstrap() {`,\n ` // TODO`,\n `}`,\n `bootstrap().finally(async () => {`,\n `await BaseModel.destroy();`,\n `});`,\n ].join(\"\\n\");\n await writeFile(dstPath, code);\n\n execSync(`code ${dstPath}`);\n\n const runCode = `yarn node -r source-map-support/register dist/practices/${fileName.replace(\n \".ts\",\n \".js\"\n )}`;\n console.log(`${chalk.blue(runCode)} copied to clipboard.`);\n execSync(`echo \"${runCode}\" | pbcopy`);\n}\n\nasync function stub_entity(entityId: string) {\n await Sonamu.syncer.createEntity({ entityId });\n}\n\nasync function scaffold_model(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model\", {\n entityId,\n });\n}\n\nasync function scaffold_model_test(entityId: string) {\n await Sonamu.syncer.generateTemplate(\"model_test\", {\n entityId,\n });\n}\n\nasync function ui() {\n try {\n type StartServersOptions = {\n projectName: string;\n apiRootPath: string;\n port: number;\n };\n const sonamuUI: {\n startServers: (options: StartServersOptions) => void;\n } = await import(\"@sonamu-kit/ui\" as string);\n sonamuUI.startServers({\n projectName:\n Sonamu.config.projectName ?? path.basename(Sonamu.apiRootPath),\n apiRootPath: Sonamu.apiRootPath,\n port: Sonamu.config.ui?.port ?? 57000,\n });\n } catch (e: unknown) {\n if (e instanceof Error && e.message.includes(\"isn't declared\")) {\n console.log(`You need to install ${chalk.blue(`@sonamu-kit/ui`)} first.`);\n return;\n }\n throw e;\n }\n}\n"],"names":["console","log","chalk","bgBlue","Date","dotenv","config","migrator","bootstrap","Sonamu","init","tsicli","process","argv","types","type","name","message","choices","EntityManager","getAllParentIds","map","entityId","title","value","args","runners","migrate_run","migrate_check","migrate_rollback","migrate_clear","migrate_reset","migrate_status","fixture_init","fixture_import","fixture_sync","stub_practice","stub_entity","scaffold_model","scaffold_model_test","ui","dev_serve","serve","finally","destroy","FixtureManager","nodemon","nodemonConfig","cleanup","projectNodemonPath","hasProjectNodemon","path","join","apiRootPath","exists","JSON","parse","readFile","watch","ignore","exec","SWC_BUILD_COMMAND","default","server","close","exit","on","distIndexPath","spawn","serverProcess","red","blue","cwd","stdio","kill","setupMigrator","Migrator","mode","setupFixtureManager","cleanUpDist","run","check","status","getStatus","rollback","clearPendingList","resetAll","srcConfig","targets","dumpFilename","srcConn","migrationsDump","_db","migrations","label","toSkip","conn","db","row","mysqlCmd","dbConfig","development_master","fixture_remote","fixture_local","remoteConn","connection","localConn","host","database","test","now","execSync","user","password","knex","raw","count","undefined","yellow","recordIds","importFixture","sync","practiceDir","fileNames","maxSeqNo","currentSeqNo","fileName","dstPath","code","runCode","readdir","filteredSeqs","mkdir","recursive","filter","startsWith","endsWith","match","seqNo","parseInt","sort","a","b","length","writeFile","replace","syncer","createEntity","generateTemplate","sonamuUI","e","startServers","projectName","basename","port","Error","includes"],"mappings":"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"}
|
package/dist/bin/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FixtureManager,
|
|
3
3
|
Migrator
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-C3IPIF6O.mjs";
|
|
5
5
|
import {
|
|
6
6
|
DB,
|
|
7
7
|
EntityManager,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
isOneToOneRelationProp,
|
|
16
16
|
isRelationProp,
|
|
17
17
|
isVirtualProp
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-FCERKIIF.mjs";
|
|
19
19
|
import {
|
|
20
20
|
__dirname
|
|
21
21
|
} from "../chunk-PTFDTOJU.mjs";
|
|
@@ -991,7 +991,7 @@ function isZodNumberAnyway(zodType) {
|
|
|
991
991
|
} else if (zodType instanceof _zod.z.ZodNullable && zodType._def.innerType instanceof _zod.z.ZodNumber) {
|
|
992
992
|
return true;
|
|
993
993
|
} else if (zodType instanceof _zod.z.ZodOptional && zodType._def.innerType instanceof _zod.z.ZodNumber) {
|
|
994
|
-
} else if (zodType instanceof _zod.z.ZodOptional && zodType._def.innerType instanceof _zod.z.ZodOptional && zodType._type.def.innerType instanceof _zod.z.ZodNumber) {
|
|
994
|
+
} else if (zodType instanceof _zod.z.ZodOptional && _optionalChain([zodType, 'access', _63 => _63._def, 'optionalAccess', _64 => _64.innerType]) instanceof _zod.z.ZodOptional && _optionalChain([zodType, 'access', _65 => _65._type, 'optionalAccess', _66 => _66.def, 'optionalAccess', _67 => _67.innerType]) instanceof _zod.z.ZodNumber) {
|
|
995
995
|
return true;
|
|
996
996
|
}
|
|
997
997
|
return false;
|
|
@@ -1339,13 +1339,13 @@ var Template__entity = class extends Template {
|
|
|
1339
1339
|
}
|
|
1340
1340
|
})();
|
|
1341
1341
|
return {
|
|
1342
|
-
...this.getTargetAndPath(names, _nullishCoalesce(_optionalChain([parent, 'optionalAccess',
|
|
1342
|
+
...this.getTargetAndPath(names, _nullishCoalesce(_optionalChain([parent, 'optionalAccess', _68 => _68.names]), () => ( names))),
|
|
1343
1343
|
body: JSON.stringify({
|
|
1344
1344
|
id: entityId,
|
|
1345
1345
|
title: _nullishCoalesce(title, () => ( entityId)),
|
|
1346
1346
|
parentId,
|
|
1347
1347
|
table: _nullishCoalesce(table, () => ( names.fsPlural.replace(/\-/g, "_"))),
|
|
1348
|
-
props: _optionalChain([options, 'access',
|
|
1348
|
+
props: _optionalChain([options, 'access', _69 => _69.props, 'optionalAccess', _70 => _70.length]) ? options.props : [
|
|
1349
1349
|
{ name: "id", type: "integer", unsigned: true, desc: "ID" },
|
|
1350
1350
|
...parent ? [
|
|
1351
1351
|
{
|
|
@@ -1436,7 +1436,7 @@ var Template__view_list = class extends Template {
|
|
|
1436
1436
|
return `<>{/* object ${colName} */}</>`;
|
|
1437
1437
|
case "object-pick":
|
|
1438
1438
|
const pickedChild = col.children.find(
|
|
1439
|
-
(child) => child.name === _optionalChain([col, 'access',
|
|
1439
|
+
(child) => child.name === _optionalChain([col, 'access', _71 => _71.config, 'optionalAccess', _72 => _72.picked])
|
|
1440
1440
|
);
|
|
1441
1441
|
if (!pickedChild) {
|
|
1442
1442
|
throw new Error(`object-pick \uC120\uD0DD \uC2E4\uD328 (\uC624\uBE0C\uC81D\uD2B8: ${col.name})`);
|
|
@@ -1550,13 +1550,13 @@ var Template__view_list = class extends Template {
|
|
|
1550
1550
|
orderBy: "id-desc",
|
|
1551
1551
|
search: "title"
|
|
1552
1552
|
};
|
|
1553
|
-
const orderByZodType = _optionalChain([columns, 'access',
|
|
1553
|
+
const orderByZodType = _optionalChain([columns, 'access', _73 => _73.find, 'call', _74 => _74(
|
|
1554
1554
|
(col) => col.name === "orderBy"
|
|
1555
|
-
), 'optionalAccess',
|
|
1555
|
+
), 'optionalAccess', _75 => _75.zodType]);
|
|
1556
1556
|
if (orderByZodType && orderByZodType instanceof _zod.z.ZodEnum) {
|
|
1557
1557
|
def.orderBy = Object.keys(orderByZodType.Enum)[0];
|
|
1558
1558
|
}
|
|
1559
|
-
const searchZodType = _optionalChain([columns, 'access',
|
|
1559
|
+
const searchZodType = _optionalChain([columns, 'access', _76 => _76.find, 'call', _77 => _77((col) => col.name === "search"), 'optionalAccess', _78 => _78.zodType]);
|
|
1560
1560
|
if (searchZodType && searchZodType instanceof _zod.z.ZodEnum) {
|
|
1561
1561
|
def.search = Object.keys(searchZodType.Enum)[0];
|
|
1562
1562
|
}
|
|
@@ -1569,7 +1569,7 @@ var Template__view_list = class extends Template {
|
|
|
1569
1569
|
const propCandidate = entity.props.find((p) => p.name === col.name);
|
|
1570
1570
|
return {
|
|
1571
1571
|
name: col.name,
|
|
1572
|
-
label: _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess',
|
|
1572
|
+
label: _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess', _79 => _79.desc]), () => ( col.label)),
|
|
1573
1573
|
tc: `(row) => ${this.renderColumn(entityId, col, names)}`
|
|
1574
1574
|
};
|
|
1575
1575
|
});
|
|
@@ -2528,11 +2528,11 @@ var KnexClient = (_class = class _KnexClient {
|
|
|
2528
2528
|
__init() {this.generator = new KnexGenerator()}
|
|
2529
2529
|
get connectionInfo() {
|
|
2530
2530
|
return {
|
|
2531
|
-
host: _nullishCoalesce(_optionalChain([this, 'access',
|
|
2532
|
-
port: _nullishCoalesce(_optionalChain([this, 'access',
|
|
2533
|
-
database: _nullishCoalesce(_optionalChain([this, 'access',
|
|
2534
|
-
user: _nullishCoalesce(_optionalChain([this, 'access',
|
|
2535
|
-
password: _nullishCoalesce(_optionalChain([this, 'access',
|
|
2531
|
+
host: _nullishCoalesce(_optionalChain([this, 'access', _80 => _80.knex, 'access', _81 => _81.client, 'access', _82 => _82.config, 'access', _83 => _83.connection, 'optionalAccess', _84 => _84.host]), () => ( "localhost")),
|
|
2532
|
+
port: _nullishCoalesce(_optionalChain([this, 'access', _85 => _85.knex, 'access', _86 => _86.client, 'access', _87 => _87.config, 'access', _88 => _88.connection, 'optionalAccess', _89 => _89.port]), () => ( 3306)),
|
|
2533
|
+
database: _nullishCoalesce(_optionalChain([this, 'access', _90 => _90.knex, 'access', _91 => _91.client, 'access', _92 => _92.config, 'access', _93 => _93.connection, 'optionalAccess', _94 => _94.database]), () => ( "")),
|
|
2534
|
+
user: _nullishCoalesce(_optionalChain([this, 'access', _95 => _95.knex, 'access', _96 => _96.client, 'access', _97 => _97.config, 'access', _98 => _98.connection, 'optionalAccess', _99 => _99.user]), () => ( "")),
|
|
2535
|
+
password: _nullishCoalesce(_optionalChain([this, 'access', _100 => _100.knex, 'access', _101 => _101.client, 'access', _102 => _102.config, 'access', _103 => _103.connection, 'optionalAccess', _104 => _104.password]), () => ( ""))
|
|
2536
2536
|
};
|
|
2537
2537
|
}
|
|
2538
2538
|
|
|
@@ -2627,13 +2627,13 @@ var KnexClient = (_class = class _KnexClient {
|
|
|
2627
2627
|
return this.qb.pluck(column);
|
|
2628
2628
|
}
|
|
2629
2629
|
createRawQuery(query, bindings) {
|
|
2630
|
-
if (_optionalChain([bindings, 'optionalAccess',
|
|
2630
|
+
if (_optionalChain([bindings, 'optionalAccess', _105 => _105.length])) {
|
|
2631
2631
|
return this.knex.raw(query, bindings).toQuery();
|
|
2632
2632
|
}
|
|
2633
2633
|
return this.knex.raw(query).toQuery();
|
|
2634
2634
|
}
|
|
2635
2635
|
async raw(query, bindings) {
|
|
2636
|
-
if (_optionalChain([bindings, 'optionalAccess',
|
|
2636
|
+
if (_optionalChain([bindings, 'optionalAccess', _106 => _106.length])) {
|
|
2637
2637
|
return (await this.knex.raw(query, bindings))[0];
|
|
2638
2638
|
}
|
|
2639
2639
|
return (await this.knex.raw(query))[0];
|
|
@@ -2833,7 +2833,7 @@ var KyselyClient = class _KyselyClient {
|
|
|
2833
2833
|
return result.map((row) => row[column]);
|
|
2834
2834
|
}
|
|
2835
2835
|
createRawQuery(query, bindings) {
|
|
2836
|
-
if (_optionalChain([bindings, 'optionalAccess',
|
|
2836
|
+
if (_optionalChain([bindings, 'optionalAccess', _107 => _107.length])) {
|
|
2837
2837
|
query = query.replace(
|
|
2838
2838
|
/\?/g,
|
|
2839
2839
|
() => _kysely.sql.lit(bindings.shift()).compile(this.kysely).sql
|
|
@@ -2842,7 +2842,7 @@ var KyselyClient = class _KyselyClient {
|
|
|
2842
2842
|
return _kysely.sql.raw(query).compile(this.kysely).sql;
|
|
2843
2843
|
}
|
|
2844
2844
|
async raw(query, bindings) {
|
|
2845
|
-
if (_optionalChain([bindings, 'optionalAccess',
|
|
2845
|
+
if (_optionalChain([bindings, 'optionalAccess', _108 => _108.length])) {
|
|
2846
2846
|
query = query.replace(
|
|
2847
2847
|
/\?/g,
|
|
2848
2848
|
() => _kysely.sql.lit(bindings.shift()).compile(this.kysely).sql
|
|
@@ -2895,14 +2895,14 @@ var KyselyClient = class _KyselyClient {
|
|
|
2895
2895
|
if (error) {
|
|
2896
2896
|
throw error;
|
|
2897
2897
|
}
|
|
2898
|
-
return [0, _optionalChain([results, 'optionalAccess',
|
|
2898
|
+
return [0, _optionalChain([results, 'optionalAccess', _109 => _109.map, 'call', _110 => _110((r) => r.migrationName)])];
|
|
2899
2899
|
}
|
|
2900
2900
|
async rollback() {
|
|
2901
2901
|
const { results, error } = await this.migrator.migrateDown();
|
|
2902
2902
|
if (error) {
|
|
2903
2903
|
throw error;
|
|
2904
2904
|
}
|
|
2905
|
-
return [0, _optionalChain([results, 'optionalAccess',
|
|
2905
|
+
return [0, _optionalChain([results, 'optionalAccess', _111 => _111.map, 'call', _112 => _112((r) => r.migrationName)])];
|
|
2906
2906
|
}
|
|
2907
2907
|
async rollbackAll() {
|
|
2908
2908
|
while (true) {
|
|
@@ -2934,7 +2934,7 @@ var DBClass = class {
|
|
|
2934
2934
|
async getBaseConfig(rootPath) {
|
|
2935
2935
|
const baseConfigPath = _path2.default.join(rootPath, "/dist/configs/db.js");
|
|
2936
2936
|
const module = await Promise.resolve().then(() => _interopRequireWildcard(require(baseConfigPath)));
|
|
2937
|
-
const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([module, 'access',
|
|
2937
|
+
const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([module, 'access', _113 => _113.default, 'optionalAccess', _114 => _114.default]), () => ( module.default)), () => ( module));
|
|
2938
2938
|
return config;
|
|
2939
2939
|
}
|
|
2940
2940
|
getCurrentConfig(which) {
|
|
@@ -3134,15 +3134,15 @@ var DBKnexClass = (_class2 = class extends DBClass {
|
|
|
3134
3134
|
database: `${config.database}_test`
|
|
3135
3135
|
}
|
|
3136
3136
|
},
|
|
3137
|
-
_optionalChain([config, 'access',
|
|
3137
|
+
_optionalChain([config, 'access', _115 => _115.environments, 'optionalAccess', _116 => _116.test])
|
|
3138
3138
|
);
|
|
3139
3139
|
const fixture_local = _lodash2.default.merge({}, defaultKnexConfig, {
|
|
3140
3140
|
connection: {
|
|
3141
3141
|
database: `${config.database}_fixture`
|
|
3142
3142
|
}
|
|
3143
3143
|
});
|
|
3144
|
-
const devMasterOptions = _optionalChain([config, 'access',
|
|
3145
|
-
const devSlaveOptions = _optionalChain([config, 'access',
|
|
3144
|
+
const devMasterOptions = _optionalChain([config, 'access', _117 => _117.environments, 'optionalAccess', _118 => _118.development]);
|
|
3145
|
+
const devSlaveOptions = _optionalChain([config, 'access', _119 => _119.environments, 'optionalAccess', _120 => _120.development_slave]);
|
|
3146
3146
|
const development_master = _lodash2.default.merge({}, defaultKnexConfig, devMasterOptions);
|
|
3147
3147
|
const development_slave = _lodash2.default.merge(
|
|
3148
3148
|
{},
|
|
@@ -3155,8 +3155,8 @@ var DBKnexClass = (_class2 = class extends DBClass {
|
|
|
3155
3155
|
database: `${config.database}_fixture`
|
|
3156
3156
|
}
|
|
3157
3157
|
});
|
|
3158
|
-
const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access',
|
|
3159
|
-
const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access',
|
|
3158
|
+
const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access', _121 => _121.environments, 'optionalAccess', _122 => _122.production]), () => ( {}));
|
|
3159
|
+
const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access', _123 => _123.environments, 'optionalAccess', _124 => _124.production_slave]), () => ( {}));
|
|
3160
3160
|
const production_master = _lodash2.default.merge({}, defaultKnexConfig, prodMasterOptions);
|
|
3161
3161
|
const production_slave = _lodash2.default.merge(
|
|
3162
3162
|
{},
|
|
@@ -3897,8 +3897,8 @@ var DBKyselyClass = (_class3 = class extends DBClass {
|
|
|
3897
3897
|
const fixture_local = _lodash2.default.merge({}, defaultKyselyConfig, {
|
|
3898
3898
|
database: `${config.database}_fixture`
|
|
3899
3899
|
});
|
|
3900
|
-
const devMasterOptions = _optionalChain([config, 'access',
|
|
3901
|
-
const devSlaveOptions = _optionalChain([config, 'access',
|
|
3900
|
+
const devMasterOptions = _optionalChain([config, 'access', _125 => _125.environments, 'optionalAccess', _126 => _126.development]);
|
|
3901
|
+
const devSlaveOptions = _optionalChain([config, 'access', _127 => _127.environments, 'optionalAccess', _128 => _128.development_slave]);
|
|
3902
3902
|
const development_master = _lodash2.default.merge(
|
|
3903
3903
|
{},
|
|
3904
3904
|
defaultKyselyConfig,
|
|
@@ -3913,8 +3913,8 @@ var DBKyselyClass = (_class3 = class extends DBClass {
|
|
|
3913
3913
|
const fixture_remote = _lodash2.default.merge({}, defaultKyselyConfig, devMasterOptions, {
|
|
3914
3914
|
database: `${config.database}_fixture`
|
|
3915
3915
|
});
|
|
3916
|
-
const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access',
|
|
3917
|
-
const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access',
|
|
3916
|
+
const prodMasterOptions = _nullishCoalesce(_optionalChain([config, 'access', _129 => _129.environments, 'optionalAccess', _130 => _130.production]), () => ( {}));
|
|
3917
|
+
const prodSlaveOptions = _nullishCoalesce(_optionalChain([config, 'access', _131 => _131.environments, 'optionalAccess', _132 => _132.production_slave]), () => ( {}));
|
|
3918
3918
|
const production_master = _lodash2.default.merge(
|
|
3919
3919
|
{},
|
|
3920
3920
|
defaultKyselyConfig,
|
|
@@ -3958,7 +3958,7 @@ var dbConfigPath = _path2.default.join(
|
|
|
3958
3958
|
);
|
|
3959
3959
|
var knexfileModule = __require(dbConfigPath);
|
|
3960
3960
|
var DB = (() => {
|
|
3961
|
-
const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([knexfileModule, 'access',
|
|
3961
|
+
const config = _nullishCoalesce(_nullishCoalesce(_optionalChain([knexfileModule, 'access', _133 => _133.default, 'optionalAccess', _134 => _134.default]), () => ( knexfileModule.default)), () => ( knexfileModule));
|
|
3962
3962
|
if (config.client === "knex") {
|
|
3963
3963
|
return new DBKnexClass();
|
|
3964
3964
|
} else if (config.client === "kysely") {
|
|
@@ -3982,7 +3982,7 @@ var Template__model = class extends Template {
|
|
|
3982
3982
|
render({ entityId }, _columnsNode, listParamsNode) {
|
|
3983
3983
|
const names = EntityManager.getNamesFromId(entityId);
|
|
3984
3984
|
const vlTpl = new Template__view_list();
|
|
3985
|
-
if (_optionalChain([listParamsNode, 'optionalAccess',
|
|
3985
|
+
if (_optionalChain([listParamsNode, 'optionalAccess', _135 => _135.children]) === void 0) {
|
|
3986
3986
|
throw new Error(`listParamsNode\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. ${entityId}`);
|
|
3987
3987
|
}
|
|
3988
3988
|
const def = vlTpl.getDefault(listParamsNode.children);
|
|
@@ -4388,7 +4388,7 @@ var Template__view_form = class extends Template {
|
|
|
4388
4388
|
const propCandidate = entity.props.find(
|
|
4389
4389
|
(prop) => prop.name === col.name
|
|
4390
4390
|
);
|
|
4391
|
-
col.label = _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess',
|
|
4391
|
+
col.label = _nullishCoalesce(_optionalChain([propCandidate, 'optionalAccess', _136 => _136.desc]), () => ( col.label));
|
|
4392
4392
|
return col;
|
|
4393
4393
|
});
|
|
4394
4394
|
const defaultValue = this.resolveDefaultValue(columns);
|
|
@@ -5191,8 +5191,8 @@ var Template__kysely_interface = class extends Template {
|
|
|
5191
5191
|
getTargetAndPath() {
|
|
5192
5192
|
const { dir } = Sonamu.config.api;
|
|
5193
5193
|
const { types } = DB.baseConfig;
|
|
5194
|
-
const outDir = _nullishCoalesce(_optionalChain([types, 'optionalAccess',
|
|
5195
|
-
const fileName = _nullishCoalesce(_optionalChain([types, 'optionalAccess',
|
|
5194
|
+
const outDir = _nullishCoalesce(_optionalChain([types, 'optionalAccess', _137 => _137.outDir]), () => ( "src/typings"));
|
|
5195
|
+
const fileName = _nullishCoalesce(_optionalChain([types, 'optionalAccess', _138 => _138.fileName]), () => ( "database.types.ts"));
|
|
5196
5196
|
return {
|
|
5197
5197
|
target: `${dir}/${outDir}`,
|
|
5198
5198
|
path: fileName
|
|
@@ -5416,7 +5416,7 @@ var Syncer = (_class4 = class {
|
|
|
5416
5416
|
if (diffTypes.includes("entity") || diffTypes.includes("types")) {
|
|
5417
5417
|
console.log("// \uC561\uC158: \uC2A4\uD0A4\uB9C8 \uC0DD\uC131");
|
|
5418
5418
|
await this.actionGenerateSchemas();
|
|
5419
|
-
if (_optionalChain([DB, 'access',
|
|
5419
|
+
if (_optionalChain([DB, 'access', _140 => _140.baseConfig, 'optionalAccess', _141 => _141.client]) === "kysely" && _optionalChain([DB, 'access', _142 => _142.baseConfig, 'access', _143 => _143.types, 'optionalAccess', _144 => _144.enabled]) !== false) {
|
|
5420
5420
|
console.log("// \uC561\uC158: kysely \uC778\uD130\uD398\uC774\uC2A4 \uC0DD\uC131");
|
|
5421
5421
|
await this.generateTemplate(
|
|
5422
5422
|
"kysely_interface",
|
|
@@ -5691,7 +5691,7 @@ var Syncer = (_class4 = class {
|
|
|
5691
5691
|
return extendedApis;
|
|
5692
5692
|
}
|
|
5693
5693
|
resolveTypeNode(typeNode) {
|
|
5694
|
-
switch (_optionalChain([typeNode, 'optionalAccess',
|
|
5694
|
+
switch (_optionalChain([typeNode, 'optionalAccess', _145 => _145.kind])) {
|
|
5695
5695
|
case _typescript2.default.SyntaxKind.AnyKeyword:
|
|
5696
5696
|
return "any";
|
|
5697
5697
|
case _typescript2.default.SyntaxKind.UnknownKeyword:
|
|
@@ -5767,7 +5767,7 @@ var Syncer = (_class4 = class {
|
|
|
5767
5767
|
return {
|
|
5768
5768
|
t: "ref",
|
|
5769
5769
|
id: typeNode.typeName.escapedText.toString(),
|
|
5770
|
-
args: _optionalChain([typeNode, 'access',
|
|
5770
|
+
args: _optionalChain([typeNode, 'access', _146 => _146.typeArguments, 'optionalAccess', _147 => _147.map, 'call', _148 => _148(
|
|
5771
5771
|
(typeArg) => this.resolveTypeNode(typeArg)
|
|
5772
5772
|
)])
|
|
5773
5773
|
};
|
|
@@ -5821,7 +5821,7 @@ var Syncer = (_class4 = class {
|
|
|
5821
5821
|
name: name.escapedText ? name.escapedText.toString() : `nonameAt${index}`,
|
|
5822
5822
|
type,
|
|
5823
5823
|
optional: paramDec.optional === true,
|
|
5824
|
-
defaultDef: _optionalChain([paramDec, 'optionalAccess',
|
|
5824
|
+
defaultDef: _optionalChain([paramDec, 'optionalAccess', _149 => _149.defaultDef])
|
|
5825
5825
|
};
|
|
5826
5826
|
if (_typescript2.default.isObjectBindingPattern(name) && _typescript2.default.isTypeReferenceNode(paramDec.type) && _typescript2.default.isIdentifier(paramDec.type.typeName)) {
|
|
5827
5827
|
result.name = _inflection2.default.camelize(paramDec.type.typeName.text, true);
|
|
@@ -6161,7 +6161,7 @@ var Syncer = (_class4 = class {
|
|
|
6161
6161
|
},
|
|
6162
6162
|
{}
|
|
6163
6163
|
);
|
|
6164
|
-
if (_optionalChain([propNode, 'access',
|
|
6164
|
+
if (_optionalChain([propNode, 'access', _150 => _150.prop, 'optionalAccess', _151 => _151.nullable]) === true) {
|
|
6165
6165
|
return _zod.z.object(obj).nullable();
|
|
6166
6166
|
} else {
|
|
6167
6167
|
return _zod.z.object(obj);
|
|
@@ -6560,7 +6560,7 @@ var SonamuClass = (_class5 = class {constructor() { _class5.prototype.__init15.c
|
|
|
6560
6560
|
__init16() {this.asyncLocalStorage = new (0, _async_hooks.AsyncLocalStorage)()}
|
|
6561
6561
|
getContext() {
|
|
6562
6562
|
const store = this.asyncLocalStorage.getStore();
|
|
6563
|
-
if (_optionalChain([store, 'optionalAccess',
|
|
6563
|
+
if (_optionalChain([store, 'optionalAccess', _152 => _152.context])) {
|
|
6564
6564
|
return store.context;
|
|
6565
6565
|
}
|
|
6566
6566
|
throw new Error("Sonamu cannot find context");
|
|
@@ -6675,7 +6675,7 @@ var SonamuClass = (_class5 = class {constructor() { _class5.prototype.__init15.c
|
|
|
6675
6675
|
}
|
|
6676
6676
|
async withFastify(server, config, options) {
|
|
6677
6677
|
if (this.isInitialized === false) {
|
|
6678
|
-
await this.init(_optionalChain([options, 'optionalAccess',
|
|
6678
|
+
await this.init(_optionalChain([options, 'optionalAccess', _153 => _153.doSilent]), _optionalChain([options, 'optionalAccess', _154 => _154.enableSync]));
|
|
6679
6679
|
}
|
|
6680
6680
|
server.get(
|
|
6681
6681
|
`${this.config.route.prefix}/routes`,
|
|
@@ -6811,7 +6811,7 @@ var EntityManagerClass = (_class6 = class {constructor() { _class6.prototype.__i
|
|
|
6811
6811
|
Sonamu.apiRootPath,
|
|
6812
6812
|
`dist/application/sonamu.generated.js?t=${Date.now()}`
|
|
6813
6813
|
);
|
|
6814
|
-
if (_optionalChain([__require, 'optionalAccess',
|
|
6814
|
+
if (_optionalChain([__require, 'optionalAccess', _155 => _155.cache]) && __require.cache[sonamuPath]) {
|
|
6815
6815
|
delete __require.cache[sonamuPath];
|
|
6816
6816
|
}
|
|
6817
6817
|
return await this.autoload(doSilent);
|
|
@@ -7107,7 +7107,7 @@ var Entity = (_class7 = class {
|
|
|
7107
7107
|
const relSubsetQuery = relEntity.resolveSubsetQuery("", relFields);
|
|
7108
7108
|
let manyJoin;
|
|
7109
7109
|
if (isHasManyRelationProp(relation)) {
|
|
7110
|
-
const fromCol = _nullishCoalesce(_optionalChain([relation, 'optionalAccess',
|
|
7110
|
+
const fromCol = _nullishCoalesce(_optionalChain([relation, 'optionalAccess', _156 => _156.fromColumn]), () => ( "id"));
|
|
7111
7111
|
manyJoin = {
|
|
7112
7112
|
fromTable: this.table,
|
|
7113
7113
|
fromCol,
|
|
@@ -7622,4 +7622,4 @@ var Entity = (_class7 = class {
|
|
|
7622
7622
|
|
|
7623
7623
|
|
|
7624
7624
|
exports.SQLDateTimeString = SQLDateTimeString; exports.zArrayable = zArrayable; exports.isIntegerProp = isIntegerProp; exports.isBigIntegerProp = isBigIntegerProp; exports.isTextProp = isTextProp; exports.isStringProp = isStringProp; exports.isEnumProp = isEnumProp; exports.isFloatProp = isFloatProp; exports.isDoubleProp = isDoubleProp; exports.isDecimalProp = isDecimalProp; exports.isBooleanProp = isBooleanProp; exports.isDateProp = isDateProp; exports.isDateTimeProp = isDateTimeProp; exports.isTimeProp = isTimeProp; exports.isTimestampProp = isTimestampProp; exports.isJsonProp = isJsonProp; exports.isUuidProp = isUuidProp; exports.isVirtualProp = isVirtualProp; exports.isRelationProp = isRelationProp; exports.isOneToOneRelationProp = isOneToOneRelationProp; exports.isBelongsToOneRelationProp = isBelongsToOneRelationProp; exports.isHasManyRelationProp = isHasManyRelationProp; exports.isManyToManyRelationProp = isManyToManyRelationProp; exports.isCustomJoinClause = isCustomJoinClause; exports.SonamuQueryMode = SonamuQueryMode; exports.isKnexError = isKnexError; exports.isKyselyError = isKyselyError; exports.ApiParamType = ApiParamType; exports.RenderingNode = RenderingNode; exports.TemplateOptions = TemplateOptions; exports.TemplateKey = TemplateKey; exports.GenerateOptions = GenerateOptions; exports.PathAndCode = PathAndCode; exports.getZodObjectFromApi = getZodObjectFromApi; exports.getZodObjectFromApiParams = getZodObjectFromApiParams; exports.getZodTypeFromApiParamType = getZodTypeFromApiParamType; exports.propNodeToZodTypeDef = propNodeToZodTypeDef; exports.getTextTypeLength = getTextTypeLength; exports.propToZodTypeDef = propToZodTypeDef; exports.zodTypeToZodCode = zodTypeToZodCode; exports.apiParamToTsCode = apiParamToTsCode; exports.apiParamToTsCodeAsObject = apiParamToTsCodeAsObject; exports.apiParamTypeToTsType = apiParamTypeToTsType; exports.unwrapPromiseOnce = unwrapPromiseOnce; exports.serializeZodType = serializeZodType; exports.zodTypeToTsTypeDef = zodTypeToTsTypeDef; exports.registeredApis = registeredApis; exports.api = api; exports.stream = stream; exports.SoException = SoException; exports.isSoException = isSoException; exports.BadRequestException = BadRequestException; exports.UnauthorizedException = UnauthorizedException; exports.NotFoundException = NotFoundException; exports.ServiceUnavailableException = ServiceUnavailableException; exports.InternalServerErrorException = InternalServerErrorException; exports.AlreadyProcessedException = AlreadyProcessedException; exports.DuplicateRowException = DuplicateRowException; exports.TargetNotFoundException = TargetNotFoundException; exports.globAsync = globAsync; exports.importMultiple = importMultiple; exports.findAppRootPath = findAppRootPath; exports.findApiRootPath = findApiRootPath; exports.nonNullable = nonNullable; exports.hydrate = hydrate; exports.Entity = Entity; exports.EntityManager = EntityManager; exports.asArray = asArray; exports.objToMap = objToMap; exports.KnexClient = KnexClient; exports.KyselyClient = KyselyClient; exports.DBKnexClass = DBKnexClass; exports.DBKyselyClass = DBKyselyClass; exports.DB = DB; exports.Syncer = Syncer; exports.isLocal = isLocal; exports.isRemote = isRemote; exports.isInDocker = isInDocker; exports.isDaemonServer = isDaemonServer; exports.isDevelopment = isDevelopment; exports.isStaging = isStaging; exports.isProduction = isProduction; exports.isTest = isTest; exports.Sonamu = Sonamu;
|
|
7625
|
-
//# sourceMappingURL=chunk-
|
|
7625
|
+
//# sourceMappingURL=chunk-2WAC2GER.js.map
|