sonamu 0.6.0 → 0.7.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.project-default +18 -0
- package/bin/cli.js +24 -0
- package/dist/ai/agents/agent.d.ts +11 -0
- package/dist/ai/agents/agent.d.ts.map +1 -0
- package/dist/ai/agents/agent.js +65 -0
- package/dist/ai/agents/index.d.ts +3 -0
- package/dist/ai/agents/index.d.ts.map +1 -0
- package/dist/ai/agents/index.js +4 -0
- package/dist/ai/agents/types.d.ts +43 -0
- package/dist/ai/agents/types.d.ts.map +1 -0
- package/dist/ai/agents/types.js +3 -0
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +3 -0
- package/dist/ai/providers/rtzr/api.d.ts +22 -0
- package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/api.js +28 -0
- package/dist/ai/providers/rtzr/error.d.ts +18 -0
- package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/error.js +29 -0
- package/dist/ai/providers/rtzr/index.d.ts +5 -0
- package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/index.js +6 -0
- package/dist/ai/providers/rtzr/model.d.ts +52 -0
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/model.js +137 -0
- package/dist/ai/providers/rtzr/options.d.ts +7 -0
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/options.js +47 -0
- package/dist/ai/providers/rtzr/provider.d.ts +18 -0
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/provider.js +54 -0
- package/dist/ai/providers/rtzr/utils.d.ts +19 -0
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/utils.js +88 -0
- package/dist/api/base-frame.d.ts +2 -2
- package/dist/api/base-frame.d.ts.map +1 -1
- package/dist/api/base-frame.js +2 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +6 -1
- package/dist/api/code-converters.d.ts +58 -14
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +178 -409
- package/dist/api/config.d.ts +27 -13
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +19 -26
- package/dist/api/context.d.ts +4 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/decorators.d.ts +20 -6
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +111 -18
- package/dist/api/index.d.ts +2 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -3
- package/dist/api/sonamu.d.ts +7 -7
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +83 -51
- package/dist/api/validator.d.ts +6 -0
- package/dist/api/validator.d.ts.map +1 -0
- package/dist/api/validator.js +81 -0
- package/dist/bin/build-config.d.ts +5 -1
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +5 -2
- package/dist/bin/cli.js +165 -64
- package/dist/bin/loader-register.d.ts +2 -0
- package/dist/bin/loader-register.d.ts.map +1 -0
- package/dist/bin/loader-register.js +34 -0
- package/dist/database/_batch_update.d.ts +5 -3
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +30 -13
- package/dist/database/base-model.d.ts +96 -10
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +232 -89
- package/dist/database/base-model.types.d.ts +93 -0
- package/dist/database/base-model.types.d.ts.map +1 -0
- package/dist/database/base-model.types.js +10 -0
- package/dist/database/code-generator.d.ts +1 -1
- package/dist/database/code-generator.d.ts.map +1 -1
- package/dist/database/code-generator.js +11 -10
- package/dist/database/db.d.ts +5 -6
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +22 -25
- package/dist/database/puri-subset.test-d.js +81 -0
- package/dist/database/puri-subset.types.d.ts +123 -0
- package/dist/database/puri-subset.types.d.ts.map +1 -0
- package/dist/database/puri-subset.types.js +16 -0
- package/dist/database/puri-wrapper.d.ts +13 -11
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +2 -2
- package/dist/database/puri.d.ts +25 -14
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +83 -21
- package/dist/database/puri.types.d.ts +21 -7
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +4 -1
- package/dist/database/transaction-context.d.ts +1 -1
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +1 -1
- package/dist/database/upsert-builder.d.ts +9 -3
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +228 -78
- package/dist/entity/entity-manager.d.ts +165 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +26 -10
- package/dist/entity/entity.d.ts +5 -3
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +153 -54
- package/dist/exceptions/error-handler.d.ts +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +1 -1
- package/dist/exceptions/so-exceptions.d.ts +1 -1
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +1 -1
- package/dist/file-storage/driver.d.ts +1 -1
- package/dist/file-storage/driver.d.ts.map +1 -1
- package/dist/file-storage/driver.js +1 -1
- package/dist/file-storage/file-storage.js +2 -2
- package/dist/index.d.ts +18 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -13
- package/dist/migration/code-generation.d.ts +1 -1
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +123 -67
- package/dist/migration/migration-set.d.ts +2 -10
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +67 -218
- package/dist/migration/migrator.d.ts +24 -73
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +121 -301
- package/dist/migration/postgresql-schema-reader.d.ts +51 -0
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
- package/dist/migration/postgresql-schema-reader.js +245 -0
- package/dist/migration/types.d.ts +6 -38
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/migration/types.js +1 -1
- package/dist/naite/messaging-types.d.ts +43 -0
- package/dist/naite/messaging-types.d.ts.map +1 -0
- package/dist/naite/messaging-types.js +7 -0
- package/dist/naite/naite-reporter.d.ts +41 -0
- package/dist/naite/naite-reporter.d.ts.map +1 -0
- package/dist/naite/naite-reporter.js +102 -0
- package/dist/naite/naite.d.ts +91 -8
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +285 -41
- package/dist/stream/sse.d.ts +2 -2
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +1 -1
- package/dist/syncer/api-parser.d.ts +3 -13
- package/dist/syncer/api-parser.d.ts.map +1 -1
- package/dist/syncer/api-parser.js +67 -56
- package/dist/syncer/checksum.d.ts +2 -2
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +11 -11
- package/dist/syncer/code-generator.d.ts +3 -3
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +37 -17
- package/dist/syncer/entity-operations.d.ts +2 -2
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +9 -8
- package/dist/syncer/file-patterns.d.ts +1 -1
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +1 -1
- package/dist/syncer/index.d.ts +4 -4
- package/dist/syncer/index.d.ts.map +1 -1
- package/dist/syncer/index.js +5 -5
- package/dist/syncer/module-loader.d.ts +4 -4
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +17 -12
- package/dist/syncer/syncer.d.ts +31 -24
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +92 -45
- package/dist/template/entity-converter.d.ts +1 -1
- package/dist/template/entity-converter.d.ts.map +1 -1
- package/dist/template/entity-converter.js +15 -8
- package/dist/template/helpers.d.ts +2 -2
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +3 -3
- package/dist/template/implementations/entity.template.d.ts +2 -2
- package/dist/template/implementations/entity.template.d.ts.map +1 -1
- package/dist/template/implementations/entity.template.js +4 -5
- package/dist/template/implementations/generated.template.d.ts +2 -3
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +46 -29
- package/dist/template/implementations/generated_http.template.d.ts +2 -3
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +9 -9
- package/dist/template/implementations/generated_sso.template.d.ts +3 -4
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +54 -25
- package/dist/template/implementations/init_types.template.d.ts +2 -2
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +2 -2
- package/dist/template/implementations/model.template.d.ts +2 -2
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +47 -37
- package/dist/template/implementations/model_test.template.d.ts +2 -2
- package/dist/template/implementations/model_test.template.d.ts.map +1 -1
- package/dist/template/implementations/model_test.template.js +2 -2
- package/dist/template/implementations/service.template.d.ts +4 -4
- package/dist/template/implementations/service.template.d.ts.map +1 -1
- package/dist/template/implementations/service.template.js +24 -16
- package/dist/template/implementations/view_enums_buttonset.template.d.ts +2 -2
- package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_buttonset.template.js +1 -1
- package/dist/template/implementations/view_enums_dropdown.template.d.ts +2 -2
- package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_dropdown.template.js +2 -2
- package/dist/template/implementations/view_enums_select.template.d.ts +2 -2
- package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_enums_select.template.js +2 -2
- package/dist/template/implementations/view_form.template.d.ts +2 -2
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +4 -4
- package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
- package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_all_select.template.js +1 -1
- package/dist/template/implementations/view_id_async_select.template.d.ts +2 -2
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_async_select.template.js +1 -1
- package/dist/template/implementations/view_list.template.d.ts +2 -2
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +29 -19
- package/dist/template/implementations/view_list_columns.template.d.ts +3 -3
- package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list_columns.template.js +1 -1
- package/dist/template/implementations/view_search_input.template.d.ts +2 -2
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +1 -1
- package/dist/template/index.d.ts +4 -2
- package/dist/template/index.d.ts.map +1 -1
- package/dist/template/index.js +5 -3
- package/dist/template/template-manager.d.ts +56 -0
- package/dist/template/template-manager.d.ts.map +1 -0
- package/dist/template/template-manager.js +125 -0
- package/dist/template/template-types.d.ts +16 -0
- package/dist/template/template-types.d.ts.map +1 -0
- package/dist/template/template-types.js +7 -0
- package/dist/template/template.d.ts +12 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +19 -6
- package/dist/template/zod-converter.d.ts +40 -7
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +341 -58
- package/dist/testing/_relation-graph.d.ts +1 -1
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +12 -3
- package/dist/testing/fixture-manager.d.ts +42 -11
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +338 -236
- package/dist/types/types.d.ts +709 -104
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +309 -52
- package/dist/typings/knex.d.js +2 -2
- package/dist/utils/async-utils.d.ts.map +1 -1
- package/dist/utils/async-utils.js +3 -3
- package/dist/utils/console-util.js +1 -1
- package/dist/utils/controller.d.ts +1 -0
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +4 -1
- package/dist/utils/esm-utils.d.ts +0 -6
- package/dist/utils/esm-utils.d.ts.map +1 -1
- package/dist/utils/esm-utils.js +2 -9
- package/dist/utils/formatter.d.ts +3 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +110 -0
- package/dist/utils/fs-utils.d.ts +1 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +1 -1
- package/dist/utils/lodash-able.d.ts.map +1 -1
- package/dist/utils/lodash-able.js +1 -1
- package/dist/utils/object-utils.d.ts +44 -0
- package/dist/utils/object-utils.d.ts.map +1 -0
- package/dist/utils/object-utils.js +191 -0
- package/dist/utils/path-utils.d.ts +1 -1
- package/dist/utils/path-utils.d.ts.map +1 -1
- package/dist/utils/path-utils.js +3 -3
- package/dist/utils/process-utils.js +1 -1
- package/dist/utils/sql-parser.d.ts +5 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +14 -3
- package/dist/utils/type-utils.d.ts +23 -0
- package/dist/utils/type-utils.d.ts.map +1 -0
- package/dist/utils/type-utils.js +45 -0
- package/dist/utils/utils.d.ts +7 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +44 -5
- package/dist/utils/zod-error.d.ts +1 -1
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +1 -1
- package/package.json +54 -29
- package/src/ai/agents/agent.ts +87 -0
- package/src/ai/agents/index.ts +2 -0
- package/src/ai/agents/types.ts +47 -0
- package/src/ai/index.ts +1 -0
- package/src/ai/providers/rtzr/api.ts +37 -0
- package/src/ai/providers/rtzr/error.ts +34 -0
- package/src/ai/providers/rtzr/index.ts +4 -0
- package/src/ai/providers/rtzr/model.ts +201 -0
- package/src/ai/providers/rtzr/options.ts +49 -0
- package/src/ai/providers/rtzr/provider.ts +91 -0
- package/src/ai/providers/rtzr/utils.ts +127 -0
- package/src/api/base-frame.ts +4 -2
- package/src/api/caster.ts +17 -23
- package/src/api/code-converters.ts +176 -533
- package/src/api/config.ts +39 -56
- package/src/api/context.ts +7 -18
- package/src/api/decorators.ts +175 -46
- package/src/api/index.ts +2 -2
- package/src/api/sonamu.ts +133 -124
- package/src/api/validator.ts +83 -0
- package/src/bin/build-config.ts +7 -1
- package/src/bin/cli.ts +192 -110
- package/src/bin/loader-register.ts +38 -0
- package/src/database/_batch_update.ts +46 -31
- package/src/database/base-model.ts +390 -182
- package/src/database/base-model.types.ts +155 -0
- package/src/database/code-generator.ts +13 -32
- package/src/database/db.ts +36 -50
- package/src/database/puri-subset.test-d.ts +471 -0
- package/src/database/puri-subset.types.ts +195 -0
- package/src/database/puri-wrapper.ts +58 -67
- package/src/database/puri.ts +182 -126
- package/src/database/puri.types.ts +64 -31
- package/src/database/transaction-context.ts +1 -1
- package/src/database/upsert-builder.ts +262 -132
- package/src/entity/entity-manager.ts +36 -28
- package/src/entity/entity.ts +330 -249
- package/src/exceptions/error-handler.ts +3 -3
- package/src/exceptions/so-exceptions.ts +11 -11
- package/src/file-storage/driver.ts +5 -5
- package/src/file-storage/file-storage.ts +2 -2
- package/src/index.ts +18 -12
- package/src/migration/code-generation.ts +185 -172
- package/src/migration/migration-set.ts +80 -293
- package/src/migration/migrator.ts +182 -425
- package/src/migration/mysql-schema-reader.ts.txt +272 -0
- package/src/migration/postgresql-schema-reader.ts +310 -0
- package/src/migration/types.ts +6 -39
- package/src/naite/messaging-types.ts +51 -0
- package/src/naite/naite-reporter.ts +128 -0
- package/src/naite/naite.ts +378 -33
- package/src/shared/web.shared.ts.txt +20 -24
- package/src/stream/sse.ts +5 -5
- package/src/syncer/api-parser.ts +52 -69
- package/src/syncer/checksum.ts +25 -37
- package/src/syncer/code-generator.ts +58 -62
- package/src/syncer/entity-operations.ts +12 -15
- package/src/syncer/file-patterns.ts +2 -2
- package/src/syncer/index.ts +4 -4
- package/src/syncer/module-loader.ts +28 -25
- package/src/syncer/syncer.ts +155 -162
- package/src/template/entity-converter.ts +18 -27
- package/src/template/helpers.ts +8 -11
- package/src/template/implementations/entity.template.ts +6 -6
- package/src/template/implementations/generated.template.ts +99 -99
- package/src/template/implementations/generated_http.template.ts +21 -54
- package/src/template/implementations/generated_sso.template.ts +78 -65
- package/src/template/implementations/init_types.template.ts +4 -6
- package/src/template/implementations/model.template.ts +47 -38
- package/src/template/implementations/model_test.template.ts +3 -3
- package/src/template/implementations/service.template.ts +56 -80
- package/src/template/implementations/view_enums_buttonset.template.ts +2 -2
- package/src/template/implementations/view_enums_dropdown.template.ts +4 -4
- package/src/template/implementations/view_enums_select.template.ts +3 -3
- package/src/template/implementations/view_form.template.ts +34 -75
- package/src/template/implementations/view_id_all_select.template.ts +2 -2
- package/src/template/implementations/view_id_async_select.template.ts +9 -23
- package/src/template/implementations/view_list.template.ts +54 -95
- package/src/template/implementations/view_list_columns.template.ts +4 -10
- package/src/template/implementations/view_search_input.template.ts +2 -2
- package/src/template/index.ts +4 -2
- package/src/template/template-manager.ts +166 -0
- package/src/template/template-types.ts +16 -0
- package/src/template/template.ts +29 -10
- package/src/template/zod-converter.ts +407 -101
- package/src/testing/_relation-graph.ts +18 -11
- package/src/testing/fixture-manager.ts +468 -362
- package/src/types/types.ts +516 -248
- package/src/typings/knex.d.ts +7 -9
- package/src/utils/async-utils.ts +8 -12
- package/src/utils/console-util.ts +1 -1
- package/src/utils/controller.ts +3 -0
- package/src/utils/esm-utils.ts +8 -18
- package/src/utils/formatter.ts +109 -0
- package/src/utils/fs-utils.ts +1 -1
- package/src/utils/lodash-able.ts +1 -4
- package/src/utils/object-utils.ts +217 -0
- package/src/utils/path-utils.ts +3 -6
- package/src/utils/process-utils.ts +1 -1
- package/src/utils/sql-parser.ts +23 -5
- package/src/utils/type-utils.ts +83 -0
- package/src/utils/utils.ts +58 -9
- package/src/utils/zod-error.ts +3 -3
- package/dist/bin/cli-wrapper.d.ts +0 -3
- package/dist/bin/cli-wrapper.d.ts.map +0 -1
- package/dist/bin/cli-wrapper.js +0 -72
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
- package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -39
- package/dist/entity/entity-utils.d.ts +0 -61
- package/dist/entity/entity-utils.d.ts.map +0 -1
- package/dist/entity/entity-utils.js +0 -210
- package/src/bin/cli-wrapper.ts +0 -82
- package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
- package/src/entity/entity-utils.ts +0 -291
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader-register.d.ts","sourceRoot":"","sources":["../../src/bin/loader-register.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { register } from "node:module";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { exists } from "../utils/fs-utils.js";
|
|
4
|
+
import { findApiRootPath } from "../utils/utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* @sonamu-kit/loader/loader를 등록하는 스크립트입니다.
|
|
7
|
+
* 이 스크립트는 sonamu cli로 dev 실행할 때 --import로 실행됩니다.
|
|
8
|
+
*/ async function setupSwcConfig() {
|
|
9
|
+
try {
|
|
10
|
+
const apiRoot = findApiRootPath();
|
|
11
|
+
// 프로젝트 루트에서 .swcrc 찾기
|
|
12
|
+
const projectSwcrcPath = path.join(apiRoot, ".swcrc");
|
|
13
|
+
if (await exists(projectSwcrcPath)) {
|
|
14
|
+
// 사용자 프로젝트에 .swcrc가 있으면 우선으로 사용합니다.
|
|
15
|
+
process.env.SWCRC_PATH = projectSwcrcPath;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// 아니라면 sonamu가 관리하는 .swcrc.project-default를 가져다 씁니다.
|
|
19
|
+
const sonamuSwcrcPath = path.join(import.meta.dirname, "..", "..", ".swcrc.project-default");
|
|
20
|
+
if (await exists(sonamuSwcrcPath)) {
|
|
21
|
+
process.env.SWCRC_PATH = sonamuSwcrcPath;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
} catch {
|
|
25
|
+
// 환경 변수 설정 실패는 무시 (loader가 기본 설정 사용)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// swc 설정 파일 경로를 환경 변수로 설정
|
|
29
|
+
await setupSwcConfig();
|
|
30
|
+
register("@sonamu-kit/loader/loader", {
|
|
31
|
+
parentURL: import.meta.url
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vbG9hZGVyLXJlZ2lzdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlscy5qc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzLmpzXCI7XG5cbi8qKlxuICogQHNvbmFtdS1raXQvbG9hZGVyL2xvYWRlcuulvCDrk7HroZ3tlZjripQg7Iqk7YGs66a97Yq47J6F64uI64ukLlxuICog7J20IOyKpO2BrOumve2KuOuKlCBzb25hbXUgY2xp66GcIGRldiDsi6TtlontlaAg65WMIC0taW1wb3J066GcIOyLpO2WieuQqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0dXBTd2NDb25maWcoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuXG4gICAgLy8g7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkOyEnCAuc3djcmMg7LC+6riwXG4gICAgY29uc3QgcHJvamVjdFN3Y3JjUGF0aCA9IHBhdGguam9pbihhcGlSb290LCBcIi5zd2NyY1wiKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHByb2plY3RTd2NyY1BhdGgpKSB7XG4gICAgICAvLyDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47JeQIC5zd2NyY+qwgCDsnojsnLzrqbQg7Jqw7ISg7Jy866GcIOyCrOyaqe2VqeuLiOuLpC5cbiAgICAgIHByb2Nlc3MuZW52LlNXQ1JDX1BBVEggPSBwcm9qZWN0U3djcmNQYXRoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOyVhOuLiOudvOuptCBzb25hbXXqsIAg6rSA66as7ZWY64qUIC5zd2NyYy5wcm9qZWN0LWRlZmF1bHTrpbwg6rCA7KC464ukIOyUgeuLiOuLpC5cbiAgICBjb25zdCBzb25hbXVTd2NyY1BhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHNvbmFtdVN3Y3JjUGF0aCkpIHtcbiAgICAgIHByb2Nlc3MuZW52LlNXQ1JDX1BBVEggPSBzb25hbXVTd2NyY1BhdGg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyDtmZjqsr0g67OA7IiYIOyEpOyglSDsi6TtjKjripQg66y07IucIChsb2FkZXLqsIAg6riw67O4IOyEpOyglSDsgqzsmqkpXG4gIH1cbn1cblxuLy8gc3djIOyEpOyglSDtjIzsnbwg6rK966Gc66W8IO2ZmOqyvSDrs4DsiJjroZwg7ISk7KCVXG5hd2FpdCBzZXR1cFN3Y0NvbmZpZygpO1xuXG5yZWdpc3RlcihcIkBzb25hbXUta2l0L2xvYWRlci9sb2FkZXJcIiwge1xuICBwYXJlbnRVUkw6IGltcG9ydC5tZXRhLnVybCxcbn0pO1xuIl0sIm5hbWVzIjpbInJlZ2lzdGVyIiwicGF0aCIsImV4aXN0cyIsImZpbmRBcGlSb290UGF0aCIsInNldHVwU3djQ29uZmlnIiwiYXBpUm9vdCIsInByb2plY3RTd2NyY1BhdGgiLCJqb2luIiwicHJvY2VzcyIsImVudiIsIlNXQ1JDX1BBVEgiLCJzb25hbXVTd2NyY1BhdGgiLCJkaXJuYW1lIiwicGFyZW50VVJMIiwidXJsIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLFFBQVEsY0FBYztBQUN2QyxZQUFZQyxVQUFVLFlBQVk7QUFDbEMsU0FBU0MsTUFBTSxRQUFRLHVCQUF1QjtBQUM5QyxTQUFTQyxlQUFlLFFBQVEsb0JBQW9CO0FBRXBEOzs7Q0FHQyxHQUNELGVBQWVDO0lBQ2IsSUFBSTtRQUNGLE1BQU1DLFVBQVVGO1FBRWhCLHNCQUFzQjtRQUN0QixNQUFNRyxtQkFBbUJMLEtBQUtNLElBQUksQ0FBQ0YsU0FBUztRQUM1QyxJQUFJLE1BQU1ILE9BQU9JLG1CQUFtQjtZQUNsQyxvQ0FBb0M7WUFDcENFLFFBQVFDLEdBQUcsQ0FBQ0MsVUFBVSxHQUFHSjtZQUN6QjtRQUNGO1FBRUEscURBQXFEO1FBQ3JELE1BQU1LLGtCQUFrQlYsS0FBS00sSUFBSSxDQUFDLFlBQVlLLE9BQU8sRUFBRSxNQUFNLE1BQU07UUFDbkUsSUFBSSxNQUFNVixPQUFPUyxrQkFBa0I7WUFDakNILFFBQVFDLEdBQUcsQ0FBQ0MsVUFBVSxHQUFHQztZQUN6QjtRQUNGO0lBQ0YsRUFBRSxPQUFNO0lBQ04scUNBQXFDO0lBQ3ZDO0FBQ0Y7QUFFQSwwQkFBMEI7QUFDMUIsTUFBTVA7QUFFTkosU0FBUyw2QkFBNkI7SUFDcENhLFdBQVcsWUFBWUMsR0FBRztBQUM1QiJ9
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Knex } from "knex";
|
|
1
|
+
import type { Knex } from "knex";
|
|
2
|
+
type ColumnValue = string | number | boolean | null;
|
|
2
3
|
export type RowWithId<Id extends string> = {
|
|
3
|
-
[key in Id]:
|
|
4
|
-
} & Record<string,
|
|
4
|
+
[key in Id]: ColumnValue;
|
|
5
|
+
} & Record<string, ColumnValue>;
|
|
5
6
|
/**
|
|
6
7
|
* Batch update rows in a table. Technically its a patch since it only updates the specified columns. Any omitted columns will not be affected
|
|
7
8
|
* @param db
|
|
@@ -12,4 +13,5 @@ export type RowWithId<Id extends string> = {
|
|
|
12
13
|
* @param trx
|
|
13
14
|
*/
|
|
14
15
|
export declare function batchUpdate<Id extends string>(knex: Knex, tableName: string, ids: Id[], rows: RowWithId<Id>[], chunkSize?: number, trx?: Knex.Transaction | null): Promise<void>;
|
|
16
|
+
export {};
|
|
15
17
|
//# sourceMappingURL=_batch_update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_batch_update.d.ts","sourceRoot":"","sources":["../../src/database/_batch_update.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"_batch_update.d.ts","sourceRoot":"","sources":["../../src/database/_batch_update.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACpD,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,MAAM,IAAI;KACxC,GAAG,IAAI,EAAE,GAAG,WAAW;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,EAAE,SAAS,MAAM,EACjD,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,EAAE,EAAE,EACT,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EACrB,SAAS,SAAK,EACd,GAAG,GAAE,IAAI,CAAC,WAAW,GAAG,IAAW,iBAuBpC"}
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
}
|
|
48
48
|
function generateBatchUpdateSQL(db, tableName, data, identifiers) {
|
|
49
49
|
const keySet = generateKeySetFromData(data);
|
|
50
|
-
const
|
|
50
|
+
const allBindings = [];
|
|
51
51
|
const invalidIdentifiers = identifiers.filter((id)=>!keySet.has(id));
|
|
52
52
|
if (invalidIdentifiers.length > 0) {
|
|
53
53
|
throw new Error(`Invalid identifiers: ${invalidIdentifiers.join(", ")}. Identifiers must exist in the data`);
|
|
@@ -55,24 +55,41 @@ function generateBatchUpdateSQL(db, tableName, data, identifiers) {
|
|
|
55
55
|
const cases = [];
|
|
56
56
|
for (const key of keySet){
|
|
57
57
|
if (identifiers.includes(key)) continue;
|
|
58
|
-
const
|
|
58
|
+
const caseBindings = [];
|
|
59
|
+
const whenClauses = [];
|
|
59
60
|
for (const row of data){
|
|
60
|
-
if (Object.
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
if (Object.hasOwn(row, key)) {
|
|
62
|
+
const whereParts = identifiers.map(()=>`?? = ?`).join(" AND ");
|
|
63
|
+
whenClauses.push(`WHEN (${whereParts}) THEN ?`);
|
|
64
|
+
// identifier 이름과 값들을 추가
|
|
65
|
+
for (const id of identifiers){
|
|
66
|
+
caseBindings.push(id, row[id]);
|
|
67
|
+
}
|
|
68
|
+
// THEN 값 추가
|
|
69
|
+
caseBindings.push(row[key]);
|
|
64
70
|
}
|
|
65
71
|
}
|
|
66
|
-
const whenThen =
|
|
67
|
-
cases.push(
|
|
72
|
+
const whenThen = whenClauses.join(" ");
|
|
73
|
+
cases.push(`?? = CASE ${whenThen} ELSE ?? END`);
|
|
74
|
+
// 컬럼명 2개 추가 (SET의 컬럼명, ELSE의 컬럼명)
|
|
75
|
+
allBindings.push(key);
|
|
76
|
+
allBindings.push(...caseBindings);
|
|
77
|
+
allBindings.push(key);
|
|
68
78
|
}
|
|
69
|
-
const whereInClauses = identifiers.map((
|
|
70
|
-
const whereInBindings =
|
|
71
|
-
|
|
72
|
-
|
|
79
|
+
const whereInClauses = identifiers.map((_col)=>`?? IN (${data.map(()=>"?").join(", ")})`).join(" AND ");
|
|
80
|
+
const whereInBindings = [];
|
|
81
|
+
for (const col of identifiers){
|
|
82
|
+
whereInBindings.push(col);
|
|
83
|
+
for (const row of data){
|
|
84
|
+
whereInBindings.push(row[col]);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const sql = db.raw(`UPDATE ?? SET ${cases.join(", ")} WHERE ${whereInClauses}`, [
|
|
88
|
+
tableName,
|
|
89
|
+
...allBindings,
|
|
73
90
|
...whereInBindings
|
|
74
91
|
]);
|
|
75
92
|
return sql.toQuery();
|
|
76
93
|
}
|
|
77
94
|
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9fYmF0Y2hfdXBkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIOyVhOuemOydmCDrp4Htgazsl5DshJwg7LC46rOg7ZW07IScIOqwgOyguOyYqCDshozsiqTsvZTrk5xcbiAgaHR0cHM6Ly9naXRodWIuY29tL2tuZXgva25leC9pc3N1ZXMvNTcxNlxuKi9cblxuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxudHlwZSBDb2x1bW5WYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsO1xuZXhwb3J0IHR5cGUgUm93V2l0aElkPElkIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW2tleSBpbiBJZF06IENvbHVtblZhbHVlO1xufSAmIFJlY29yZDxzdHJpbmcsIENvbHVtblZhbHVlPjtcblxuLyoqXG4gKiBCYXRjaCB1cGRhdGUgcm93cyBpbiBhIHRhYmxlLiBUZWNobmljYWxseSBpdHMgYSBwYXRjaCBzaW5jZSBpdCBvbmx5IHVwZGF0ZXMgdGhlIHNwZWNpZmllZCBjb2x1bW5zLiBBbnkgb21pdHRlZCBjb2x1bW5zIHdpbGwgbm90IGJlIGFmZmVjdGVkXG4gKiBAcGFyYW0gZGJcbiAqIEBwYXJhbSB0YWJsZU5hbWVcbiAqIEBwYXJhbSBpZHNcbiAqIEBwYXJhbSByb3dzXG4gKiBAcGFyYW0gY2h1bmtTaXplXG4gKiBAcGFyYW0gdHJ4XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYXRjaFVwZGF0ZTxJZCBleHRlbmRzIHN0cmluZz4oXG4gIGtuZXg6IEtuZXgsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBpZHM6IElkW10sXG4gIHJvd3M6IFJvd1dpdGhJZDxJZD5bXSxcbiAgY2h1bmtTaXplID0gNTAsXG4gIHRyeDogS25leC5UcmFuc2FjdGlvbiB8IG51bGwgPSBudWxsLFxuKSB7XG4gIGNvbnN0IGNodW5rczogUm93V2l0aElkPElkPltdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArPSBjaHVua1NpemUpIHtcbiAgICBjaHVua3MucHVzaChyb3dzLnNsaWNlKGksIGkgKyBjaHVua1NpemUpKTtcbiAgfVxuXG4gIGNvbnN0IGV4ZWN1dGVVcGRhdGUgPSBhc3luYyAoY2h1bms6IFJvd1dpdGhJZDxJZD5bXSwgdHJhbnNhY3Rpb246IEtuZXguVHJhbnNhY3Rpb24pID0+IHtcbiAgICBjb25zdCBzcWwgPSBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMKGtuZXgsIHRhYmxlTmFtZSwgY2h1bmssIGlkcyk7XG4gICAgcmV0dXJuIGtuZXgucmF3KHNxbCkudHJhbnNhY3RpbmcodHJhbnNhY3Rpb24pO1xuICB9O1xuXG4gIGlmICh0cngpIHtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgYXdhaXQgZXhlY3V0ZVVwZGF0ZShjaHVuaywgdHJ4KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQga25leC50cmFuc2FjdGlvbihhc3luYyAobmV3VHJ4KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCBuZXdUcngpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgdW5pcXVlIGtleXMgaW4gYSBkYXRhIGFycmF5XG4gKlxuICogRXhhbXBsZTpcbiAqIFsgeyBhOiAxLCBiOiAyIH0sIHsgYTogMywgYzogNCB9IF0gPT4gU2V0KFsgXCJhXCIsIFwiYlwiLCBcImNcIiBdKVxuICogQHBhcmFtIGRhdGFcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSkge1xuICBjb25zdCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocm93KSkge1xuICAgICAga2V5U2V0LmFkZChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5U2V0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMPElkIGV4dGVuZHMgc3RyaW5nPihcbiAgZGI6IEtuZXgsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSxcbiAgaWRlbnRpZmllcnM6IElkW10sXG4pIHtcbiAgY29uc3Qga2V5U2V0ID0gZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YShkYXRhKTtcbiAgY29uc3QgYWxsQmluZGluZ3M6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXSA9IFtdO1xuXG4gIGNvbnN0IGludmFsaWRJZGVudGlmaWVycyA9IGlkZW50aWZpZXJzLmZpbHRlcigoaWQpID0+ICFrZXlTZXQuaGFzKGlkKSk7XG4gIGlmIChpbnZhbGlkSWRlbnRpZmllcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGlkZW50aWZpZXJzOiAke2ludmFsaWRJZGVudGlmaWVycy5qb2luKFwiLCBcIil9LiBJZGVudGlmaWVycyBtdXN0IGV4aXN0IGluIHRoZSBkYXRhYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2FzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5U2V0KSB7XG4gICAgaWYgKGlkZW50aWZpZXJzLmluY2x1ZGVzKGtleSBhcyBJZCkpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgY2FzZUJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcbiAgICBjb25zdCB3aGVuQ2xhdXNlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKHJvdywga2V5KSkge1xuICAgICAgICBjb25zdCB3aGVyZVBhcnRzID0gaWRlbnRpZmllcnMubWFwKCgpID0+IGA/PyA9ID9gKS5qb2luKFwiIEFORCBcIik7XG4gICAgICAgIHdoZW5DbGF1c2VzLnB1c2goYFdIRU4gKCR7d2hlcmVQYXJ0c30pIFRIRU4gP2ApO1xuXG4gICAgICAgIC8vIGlkZW50aWZpZXIg7J2066aE6rO8IOqwkuuTpOydhCDstpTqsIBcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZGVudGlmaWVycykge1xuICAgICAgICAgIGNhc2VCaW5kaW5ncy5wdXNoKGlkLCByb3dbaWRdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUSEVOIOqwkiDstpTqsIBcbiAgICAgICAgY2FzZUJpbmRpbmdzLnB1c2gocm93W2tleV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdoZW5UaGVuID0gd2hlbkNsYXVzZXMuam9pbihcIiBcIik7XG4gICAgY2FzZXMucHVzaChgPz8gPSBDQVNFICR7d2hlblRoZW59IEVMU0UgPz8gRU5EYCk7XG5cbiAgICAvLyDsu6zrn7zrqoUgMuqwnCDstpTqsIAgKFNFVOydmCDsu6zrn7zrqoUsIEVMU0XsnZgg7Lus65+866qFKVxuICAgIGFsbEJpbmRpbmdzLnB1c2goa2V5KTtcbiAgICBhbGxCaW5kaW5ncy5wdXNoKC4uLmNhc2VCaW5kaW5ncyk7XG4gICAgYWxsQmluZGluZ3MucHVzaChrZXkpO1xuICB9XG5cbiAgY29uc3Qgd2hlcmVJbkNsYXVzZXMgPSBpZGVudGlmaWVyc1xuICAgIC5tYXAoKF9jb2wpID0+IGA/PyBJTiAoJHtkYXRhLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfSlgKVxuICAgIC5qb2luKFwiIEFORCBcIik7XG5cbiAgY29uc3Qgd2hlcmVJbkJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcbiAgZm9yIChjb25zdCBjb2wgb2YgaWRlbnRpZmllcnMpIHtcbiAgICB3aGVyZUluQmluZGluZ3MucHVzaChjb2wpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcbiAgICAgIHdoZXJlSW5CaW5kaW5ncy5wdXNoKHJvd1tjb2xdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzcWwgPSBkYi5yYXcoYFVQREFURSA/PyBTRVQgJHtjYXNlcy5qb2luKFwiLCBcIil9IFdIRVJFICR7d2hlcmVJbkNsYXVzZXN9YCwgW1xuICAgIHRhYmxlTmFtZSxcbiAgICAuLi5hbGxCaW5kaW5ncyxcbiAgICAuLi53aGVyZUluQmluZGluZ3MsXG4gIF0pO1xuXG4gIHJldHVybiBzcWwudG9RdWVyeSgpO1xufVxuIl0sIm5hbWVzIjpbImJhdGNoVXBkYXRlIiwia25leCIsInRhYmxlTmFtZSIsImlkcyIsInJvd3MiLCJjaHVua1NpemUiLCJ0cngiLCJjaHVua3MiLCJpIiwibGVuZ3RoIiwicHVzaCIsInNsaWNlIiwiZXhlY3V0ZVVwZGF0ZSIsImNodW5rIiwidHJhbnNhY3Rpb24iLCJzcWwiLCJnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMIiwicmF3IiwidHJhbnNhY3RpbmciLCJuZXdUcngiLCJnZW5lcmF0ZUtleVNldEZyb21EYXRhIiwiZGF0YSIsImtleVNldCIsIlNldCIsInJvdyIsImtleSIsIk9iamVjdCIsImtleXMiLCJhZGQiLCJkYiIsImlkZW50aWZpZXJzIiwiYWxsQmluZGluZ3MiLCJpbnZhbGlkSWRlbnRpZmllcnMiLCJmaWx0ZXIiLCJpZCIsImhhcyIsIkVycm9yIiwiam9pbiIsImNhc2VzIiwiaW5jbHVkZXMiLCJjYXNlQmluZGluZ3MiLCJ3aGVuQ2xhdXNlcyIsImhhc093biIsIndoZXJlUGFydHMiLCJtYXAiLCJ3aGVuVGhlbiIsIndoZXJlSW5DbGF1c2VzIiwiX2NvbCIsIndoZXJlSW5CaW5kaW5ncyIsImNvbCIsInRvUXVlcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7QUFHQSxHQVNBOzs7Ozs7OztDQVFDLEdBQ0QsT0FBTyxlQUFlQSxZQUNwQkMsSUFBVSxFQUNW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
|
|
@@ -1,18 +1,90 @@
|
|
|
1
|
-
import { Knex } from "knex";
|
|
2
|
-
import {
|
|
3
|
-
import { type SubsetQuery } from "../types/types";
|
|
1
|
+
import type { Knex } from "knex";
|
|
2
|
+
import { type DatabaseSchemaExtend, type SubsetQuery } from "../types/types";
|
|
4
3
|
import type { BaseListParams } from "../utils/model";
|
|
5
|
-
import {
|
|
4
|
+
import type { EnhancerMap, ExecuteSubsetQueryResult, ResolveSubsetIntersection, UnionExtractedTTables } from "./base-model.types";
|
|
5
|
+
import type { DBPreset } from "./db";
|
|
6
|
+
import { Puri } from "./puri";
|
|
7
|
+
import type { InferAllSubsets, PuriLoaderQueries, PuriSubsetFn } from "./puri-subset.types";
|
|
6
8
|
import { PuriWrapper } from "./puri-wrapper";
|
|
7
|
-
|
|
9
|
+
import { UpsertBuilder } from "./upsert-builder";
|
|
10
|
+
type UnknownDBRecord = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* 모든 Model 클래스의 기본 클래스
|
|
13
|
+
*
|
|
14
|
+
* @template TSubsetKey - 서브셋 키 유니온 (예: "A" | "P" | "SS")
|
|
15
|
+
* @template TSubsetMapping - 서브셋별 최종 결과 타입 매핑
|
|
16
|
+
* @template TSubsetQueries - 서브셋 쿼리 함수 객체
|
|
17
|
+
* @template TLoaderQueries - 서브셋별 로더 쿼리 배열 객체
|
|
18
|
+
*/
|
|
19
|
+
export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMapping extends Record<string, any> = never, TSubsetQueries extends Record<TSubsetKey, PuriSubsetFn> = never, TLoaderQueries extends PuriLoaderQueries<TSubsetKey> = never> {
|
|
20
|
+
protected subsetQueries?: TSubsetQueries | undefined;
|
|
21
|
+
protected loaderQueries?: TLoaderQueries | undefined;
|
|
8
22
|
modelName: string;
|
|
23
|
+
constructor(subsetQueries?: TSubsetQueries | undefined, loaderQueries?: TLoaderQueries | undefined);
|
|
9
24
|
getDB(which: DBPreset): Knex;
|
|
10
25
|
getPuri(which: DBPreset): PuriWrapper;
|
|
11
26
|
destroy(): Promise<void>;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
getInsertedIds(wdb: Knex, rows: UnknownDBRecord[], tableName: string, unqKeyFields: string[], chunkSize?: number): Promise<number[]>;
|
|
28
|
+
/**
|
|
29
|
+
* 특정 서브셋에 대한 쿼리 빌더 획득
|
|
30
|
+
*
|
|
31
|
+
* @returns qb - 쿼리 빌더 (조건 추가용)
|
|
32
|
+
* @returns onSubset - 특정 서브셋 전용 타입이 필요할 때 사용
|
|
33
|
+
*/
|
|
34
|
+
getSubsetQueries<T extends TSubsetKey>(subset: T): {
|
|
35
|
+
qb: Puri<DatabaseSchemaExtend, UnionExtractedTTables<TSubsetKey, TSubsetQueries> & {
|
|
36
|
+
NonAllowedAsSingleTable: {
|
|
37
|
+
__fulltext__: true;
|
|
38
|
+
};
|
|
39
|
+
}, {}>;
|
|
40
|
+
onSubset: {
|
|
41
|
+
<S extends TSubsetKey>(subset: S): ReturnType<TSubsetQueries[S]>;
|
|
42
|
+
<Arr extends readonly TSubsetKey[]>(subsets: [...Arr]): ResolveSubsetIntersection<Arr, TSubsetQueries>;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Enhancer 객체 생성 헬퍼
|
|
47
|
+
* 타입 검증 및 추론을 도와줌
|
|
48
|
+
*/
|
|
49
|
+
createEnhancers<T extends TSubsetKey>(enhancers: EnhancerMap<T, InferAllSubsets<TSubsetQueries, TLoaderQueries>, TSubsetMapping>): EnhancerMap<T, InferAllSubsets<TSubsetQueries, TLoaderQueries>, TSubsetMapping>;
|
|
50
|
+
/**
|
|
51
|
+
* 서브셋 쿼리 실행
|
|
52
|
+
*
|
|
53
|
+
* 1. 쿼리 실행 (pagination 적용)
|
|
54
|
+
* 2. 로더 실행 (1:N, N:M 관계 데이터 로딩)
|
|
55
|
+
* 3. Hydrate (flat → 중첩 객체)
|
|
56
|
+
* 4. Enhancer 적용 (virtual 필드 계산)
|
|
57
|
+
*/
|
|
58
|
+
executeSubsetQuery<T extends TSubsetKey, TComputedResults extends InferAllSubsets<TSubsetQueries, TLoaderQueries>>(params: {
|
|
59
|
+
subset: T;
|
|
60
|
+
qb: Puri<any, any, any>;
|
|
61
|
+
params: {
|
|
62
|
+
num?: number;
|
|
63
|
+
page?: number;
|
|
64
|
+
queryMode?: "list" | "count" | "both";
|
|
65
|
+
};
|
|
66
|
+
debug?: boolean;
|
|
67
|
+
optimizeCountQuery?: boolean;
|
|
68
|
+
} & EnhancerParam<TSubsetKey, TComputedResults, TSubsetMapping>): Promise<ExecuteSubsetQueryResult<TSubsetMapping, T>>;
|
|
69
|
+
/**
|
|
70
|
+
* COUNT 쿼리 실행 (내부 메서드)
|
|
71
|
+
*/
|
|
72
|
+
private executeCountQuery;
|
|
73
|
+
/**
|
|
74
|
+
* LIST 쿼리 실행 (내부 메서드)
|
|
75
|
+
*/
|
|
76
|
+
private executeListQuery;
|
|
77
|
+
/**
|
|
78
|
+
* 재귀적 로더 처리
|
|
79
|
+
*/
|
|
80
|
+
private processLoaders;
|
|
81
|
+
/**
|
|
82
|
+
* Flat 레코드를 중첩 객체로 변환
|
|
83
|
+
*
|
|
84
|
+
* - `user__name` → `{ user: { name } }`
|
|
85
|
+
* - nullable relation의 경우 모든 필드가 null이면 객체 자체를 null로
|
|
86
|
+
*/
|
|
87
|
+
hydrate<T extends UnknownDBRecord>(rows: T[]): T[];
|
|
16
88
|
runSubsetQuery<T extends BaseListParams, U extends string>({ params, baseTable, subset, subsetQuery, build, afterBuild, debug, db: _db, optimizeCountQuery, }: {
|
|
17
89
|
subset: U;
|
|
18
90
|
params: T;
|
|
@@ -41,8 +113,22 @@ export declare class BaseModelClass {
|
|
|
41
113
|
subsetQuery: SubsetQuery;
|
|
42
114
|
qb: Knex.QueryBuilder;
|
|
43
115
|
}>;
|
|
116
|
+
useLoaders(db: Knex, rows: UnknownDBRecord[], loaders: SubsetQuery["loaders"]): Promise<UnknownDBRecord[]>;
|
|
44
117
|
getJoinClause(db: Knex<any, unknown>, join: SubsetQuery["joins"][number]): Knex.Raw<any>;
|
|
45
118
|
getUpsertBuilder(): UpsertBuilder;
|
|
46
119
|
}
|
|
47
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Enhancer 파라미터 조건부 타입
|
|
122
|
+
* RequiredEnhancerKeys가 없으면 enhancers 선택적, 있으면 필수
|
|
123
|
+
*/
|
|
124
|
+
type EnhancerParam<TSubsetKey extends string, TComputedResults extends Record<TSubsetKey, any>, TSubsetMapping extends Record<TSubsetKey, any>> = [RequiredEnhancerKeys<TSubsetKey, TComputedResults, TSubsetMapping>] extends [never] ? {
|
|
125
|
+
enhancers?: EnhancerMap<TSubsetKey, TComputedResults, TSubsetMapping>;
|
|
126
|
+
} : {
|
|
127
|
+
enhancers: EnhancerMap<TSubsetKey, TComputedResults, TSubsetMapping>;
|
|
128
|
+
};
|
|
129
|
+
type RequiredEnhancerKeys<TSubsetKey extends string, TComputedResults extends Record<TSubsetKey, any>, TSubsetMapping extends Record<TSubsetKey, any>> = {
|
|
130
|
+
[K in TSubsetKey]: TComputedResults[K] extends TSubsetMapping[K] ? never : K;
|
|
131
|
+
}[TSubsetKey];
|
|
132
|
+
export declare const BaseModel: BaseModelClass<never, never, never, never>;
|
|
133
|
+
export {};
|
|
48
134
|
//# sourceMappingURL=base-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"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"}
|