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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class;
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk2WAC2GERjs = require('./chunk-2WAC2GER.js');
|
|
4
4
|
|
|
5
5
|
// src/database/base-model.ts
|
|
6
6
|
var _luxon = require('luxon');
|
|
@@ -53,8 +53,8 @@ var BaseModelClassAbstract = (_class = class {constructor() { _class.prototype._
|
|
|
53
53
|
db: _db,
|
|
54
54
|
optimizeCountQuery
|
|
55
55
|
}) {
|
|
56
|
-
const db = _nullishCoalesce(_db, () => (
|
|
57
|
-
const dbClient =
|
|
56
|
+
const db = _nullishCoalesce(_db, () => ( _chunk2WAC2GERjs.DB.getDB(subset.startsWith("A") ? "w" : "r")));
|
|
57
|
+
const dbClient = _chunk2WAC2GERjs.DB.toClient(db);
|
|
58
58
|
baseTable = _nullishCoalesce(baseTable, () => ( _inflection2.default.pluralize(_inflection2.default.underscore(this.modelName))));
|
|
59
59
|
const queryMode = _nullishCoalesce(params.queryMode, () => ( (params.id !== void 0 ? "list" : "both")));
|
|
60
60
|
const { select, virtual, joins, loaders } = subsetQuery;
|
|
@@ -228,4 +228,4 @@ var BaseModelClassAbstract = (_class = class {constructor() { _class.prototype._
|
|
|
228
228
|
|
|
229
229
|
|
|
230
230
|
exports.BaseModelClassAbstract = BaseModelClassAbstract;
|
|
231
|
-
//# sourceMappingURL=chunk-
|
|
231
|
+
//# sourceMappingURL=chunk-UZ2IY5VE.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Knex } from "knex";
|
|
2
|
+
export type RowWithId<Id extends string> = {
|
|
3
|
+
[key in Id]: any;
|
|
4
|
+
} & Record<string, any>;
|
|
5
|
+
/**
|
|
6
|
+
* 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
|
+
* @param db
|
|
8
|
+
* @param tableName
|
|
9
|
+
* @param ids
|
|
10
|
+
* @param rows
|
|
11
|
+
* @param chunkSize
|
|
12
|
+
* @param trx
|
|
13
|
+
*/
|
|
14
|
+
export declare function batchUpdate<Id extends string>(knex: Knex, tableName: string, ids: Id[], rows: RowWithId<Id>[], chunkSize?: number, trx?: Knex.Transaction | null): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=_batch_update.d.ts.map
|
|
@@ -0,0 +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;AAE5B,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,MAAM,IAAI;KACxC,GAAG,IAAI,EAAE,GAAG,GAAG;CACjB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAExB;;;;;;;;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,iBA0BpC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"batchUpdate",{enumerable:true,get:function(){return batchUpdate}});function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function batchUpdate(knex,tableName,ids,rows){var chunkSize=arguments.length>4&&arguments[4]!==void 0?arguments[4]:50,trx=arguments.length>5&&arguments[5]!==void 0?arguments[5]:null;return _async_to_generator(function(){var chunks,i,executeUpdate,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,chunk,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:chunks=[];for(i=0;i<rows.length;i+=chunkSize){chunks.push(rows.slice(i,i+chunkSize))}executeUpdate=function(chunk,transaction){return _async_to_generator(function(){var sql;return _ts_generator(this,function(_state){sql=generateBatchUpdateSQL(knex,tableName,chunk,ids);return[2,knex.raw(sql).transacting(transaction)]})})()};if(!trx)return[3,9];_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_iterator=chunks[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];chunk=_step.value;return[4,executeUpdate(chunk,trx)];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[3,11];case 9:return[4,knex.transaction(function(newTrx){return _async_to_generator(function(){var _iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,chunk,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_iterator=chunks[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];chunk=_step.value;return[4,executeUpdate(chunk,newTrx)];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2]}})})()})];case 10:_state.sent();_state.label=11;case 11:return[2]}})})()}function generateKeySetFromData(data){var keySet=new Set;var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=data[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var row=_step.value;var _iteratorNormalCompletion1=true,_didIteratorError1=false,_iteratorError1=undefined;try{for(var _iterator1=Object.keys(row)[Symbol.iterator](),_step1;!(_iteratorNormalCompletion1=(_step1=_iterator1.next()).done);_iteratorNormalCompletion1=true){var key=_step1.value;keySet.add(key)}}catch(err){_didIteratorError1=true;_iteratorError1=err}finally{try{if(!_iteratorNormalCompletion1&&_iterator1.return!=null){_iterator1.return()}}finally{if(_didIteratorError1){throw _iteratorError1}}}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return keySet}function generateBatchUpdateSQL(db,tableName,data,identifiers){var keySet=generateKeySetFromData(data);var bindings=[];var invalidIdentifiers=identifiers.filter(function(id){return!keySet.has(id)});if(invalidIdentifiers.length>0){throw new Error("Invalid identifiers: ".concat(invalidIdentifiers.join(", "),". Identifiers must exist in the data"))}var cases=[];var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=keySet[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var key=_step.value;if(identifiers.includes(key))continue;var rows=[];var _iteratorNormalCompletion1=true,_didIteratorError1=false,_iteratorError1=undefined;try{var _loop=function(){var row=_step1.value;if(Object.hasOwnProperty.call(row,key)){var _bindings;var whereClause=identifiers.map(function(id){return"`".concat(id,"` = ?")}).join(" AND ");rows.push("WHEN (".concat(whereClause,") THEN ?"));(_bindings=bindings).push.apply(_bindings,_to_consumable_array(identifiers.map(function(i){return row[i]})).concat([row[key]]))}};for(var _iterator1=data[Symbol.iterator](),_step1;!(_iteratorNormalCompletion1=(_step1=_iterator1.next()).done);_iteratorNormalCompletion1=true)_loop()}catch(err){_didIteratorError1=true;_iteratorError1=err}finally{try{if(!_iteratorNormalCompletion1&&_iterator1.return!=null){_iterator1.return()}}finally{if(_didIteratorError1){throw _iteratorError1}}}var whenThen=rows.join(" ");cases.push("`".concat(key,"` = CASE ").concat(whenThen," ELSE `").concat(key,"` END"))}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var whereInClauses=identifiers.map(function(col){return"".concat(col," IN (").concat(data.map(function(){return"?"}).join(", "),")")}).join(" AND ");var whereInBindings=identifiers.flatMap(function(col){return data.map(function(row){return row[col]})});var sql=db.raw("UPDATE `".concat(tableName,"` SET ").concat(cases.join(", ")," WHERE ").concat(whereInClauses),_to_consumable_array(bindings).concat(_to_consumable_array(whereInBindings)));return sql.toQuery()}
|
|
2
|
+
//# sourceMappingURL=_batch_update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/database/_batch_update.ts"],"sourcesContent":["/*\n 아래의 링크에서 참고해서 가져온 소스코드\n https://github.com/knex/knex/issues/5716\n*/\n\nimport { Knex } from \"knex\";\n\nexport type RowWithId<Id extends string> = {\n [key in Id]: any;\n} & Record<string, any>;\n\n/**\n * Batch update rows in a table. Technically its a patch since it only updates the specified columns. Any omitted columns will not be affected\n * @param db\n * @param tableName\n * @param ids\n * @param rows\n * @param chunkSize\n * @param trx\n */\nexport async function batchUpdate<Id extends string>(\n knex: Knex,\n tableName: string,\n ids: Id[],\n rows: RowWithId<Id>[],\n chunkSize = 50,\n trx: Knex.Transaction | null = null\n) {\n const chunks: RowWithId<Id>[][] = [];\n for (let i = 0; i < rows.length; i += chunkSize) {\n chunks.push(rows.slice(i, i + chunkSize));\n }\n\n const executeUpdate = async (\n chunk: RowWithId<Id>[],\n transaction: Knex.Transaction\n ) => {\n const sql = generateBatchUpdateSQL(knex, tableName, chunk, ids);\n return knex.raw(sql).transacting(transaction);\n };\n\n if (trx) {\n for (const chunk of chunks) {\n await executeUpdate(chunk, trx);\n }\n } else {\n await knex.transaction(async (newTrx) => {\n for (const chunk of chunks) {\n await executeUpdate(chunk, newTrx);\n }\n });\n }\n}\n\n/**\n * Generate a set of unique keys in a data array\n *\n * Example:\n * [ { a: 1, b: 2 }, { a: 3, c: 4 } ] => Set([ \"a\", \"b\", \"c\" ])\n * @param data\n */\nfunction generateKeySetFromData(data: Record<string, any>[]) {\n const keySet: Set<string> = new Set();\n for (const row of data) {\n for (const key of Object.keys(row)) {\n keySet.add(key);\n }\n }\n return keySet;\n}\n\nfunction generateBatchUpdateSQL<Id extends string>(\n db: Knex,\n tableName: string,\n data: Record<string, any>[],\n identifiers: Id[]\n) {\n const keySet = generateKeySetFromData(data);\n const bindings = [];\n\n const invalidIdentifiers = identifiers.filter((id) => !keySet.has(id));\n if (invalidIdentifiers.length > 0) {\n throw new Error(\n `Invalid identifiers: ${invalidIdentifiers.join(\", \")}. Identifiers must exist in the data`\n );\n }\n\n const cases = [];\n for (const key of keySet) {\n if (identifiers.includes(key as Id)) continue;\n\n const rows = [];\n for (const row of data) {\n if (Object.hasOwnProperty.call(row, key)) {\n const whereClause = identifiers\n .map((id) => `\\`${id}\\` = ?`)\n .join(\" AND \");\n rows.push(`WHEN (${whereClause}) THEN ?`);\n bindings.push(...identifiers.map((i) => row[i]), row[key]);\n }\n }\n\n const whenThen = rows.join(\" \");\n cases.push(`\\`${key}\\` = CASE ${whenThen} ELSE \\`${key}\\` END`);\n }\n\n const whereInClauses = identifiers\n .map((col) => `${col} IN (${data.map(() => \"?\").join(\", \")})`)\n .join(\" AND \");\n\n const whereInBindings = identifiers.flatMap((col) =>\n data.map((row) => row[col])\n );\n\n const sql = db.raw(\n `UPDATE \\`${tableName}\\` SET ${cases.join(\", \")} WHERE ${whereInClauses}`,\n [...bindings, ...whereInBindings]\n );\n\n return sql.toQuery();\n}\n"],"names":["batchUpdate","knex","tableName","ids","rows","chunkSize","trx","chunks","i","executeUpdate","chunk","length","push","slice","transaction","sql","generateBatchUpdateSQL","raw","transacting","newTrx","generateKeySetFromData","data","keySet","Set","row","Object","keys","key","add","db","identifiers","bindings","invalidIdentifiers","filter","id","has","Error","join","cases","includes","hasOwnProperty","call","whereClause","map","whenThen","whereInClauses","col","whereInBindings","flatMap","toQuery"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Knex } from "knex";
|
|
2
|
+
import { DBPreset } from "./db";
|
|
3
|
+
import { type SubsetQuery } from "../types/types";
|
|
4
|
+
import type { BaseListParams } from "../utils/model";
|
|
5
|
+
import { UpsertBuilder } from "./upsert-builder";
|
|
6
|
+
import { PuriWrapper } from "./puri-wrapper";
|
|
7
|
+
export declare class BaseModelClass {
|
|
8
|
+
modelName: string;
|
|
9
|
+
getDB(which: DBPreset): Knex;
|
|
10
|
+
getPuri(which: DBPreset): PuriWrapper;
|
|
11
|
+
destroy(): Promise<void>;
|
|
12
|
+
myNow(timestamp?: number): string;
|
|
13
|
+
getInsertedIds(wdb: Knex, rows: any[], tableName: string, unqKeyFields: string[], chunkSize?: number): Promise<number[]>;
|
|
14
|
+
useLoaders(db: Knex, rows: any[], loaders: SubsetQuery["loaders"]): Promise<any[]>;
|
|
15
|
+
hydrate<T>(rows: T[]): T[];
|
|
16
|
+
runSubsetQuery<T extends BaseListParams, U extends string>({ params, baseTable, subset, subsetQuery, build, debug, db: _db, optimizeCountQuery, }: {
|
|
17
|
+
subset: U;
|
|
18
|
+
params: T;
|
|
19
|
+
subsetQuery: SubsetQuery;
|
|
20
|
+
build: (buildParams: {
|
|
21
|
+
qb: Knex.QueryBuilder;
|
|
22
|
+
db: Knex;
|
|
23
|
+
select: (string | Knex.Raw)[];
|
|
24
|
+
joins: SubsetQuery["joins"];
|
|
25
|
+
virtual: string[];
|
|
26
|
+
}) => Knex.QueryBuilder;
|
|
27
|
+
baseTable?: string;
|
|
28
|
+
debug?: boolean | "list" | "count";
|
|
29
|
+
db?: Knex;
|
|
30
|
+
optimizeCountQuery?: boolean;
|
|
31
|
+
}): Promise<{
|
|
32
|
+
rows: any[];
|
|
33
|
+
total?: number | undefined;
|
|
34
|
+
subsetQuery: SubsetQuery;
|
|
35
|
+
qb: Knex.QueryBuilder;
|
|
36
|
+
}>;
|
|
37
|
+
getJoinClause(db: Knex<any, unknown>, join: SubsetQuery["joins"][number]): Knex.Raw<any>;
|
|
38
|
+
getUpsertBuilder(): UpsertBuilder;
|
|
39
|
+
}
|
|
40
|
+
export declare const BaseModel: BaseModelClass;
|
|
41
|
+
//# sourceMappingURL=base-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAM,MAAM,MAAM,CAAC;AACpC,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,cAAc;IAClB,SAAS,EAAE,MAAM,CAAa;IAGrC,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI5B,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW;IAY/B,OAAO;IAIb,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAQ3B,cAAc,CAClB,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,GAAG,EAAE,EACX,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,GAAE,MAAY;IAkCnB,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC;IAiFvE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAiDpB,cAAc,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,MAAM,EAAE,EAC/D,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,EACX,KAAK,EACL,KAAK,EACL,EAAE,EAAE,GAAG,EACP,kBAAkB,GACnB,EAAE;QACD,MAAM,EAAE,CAAC,CAAC;QACV,MAAM,EAAE,CAAC,CAAC;QACV,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,CAAC,WAAW,EAAE;YACnB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC;YACT,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;SACnB,KAAK,IAAI,CAAC,YAAY,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;QACnC,EAAE,CAAC,EAAE,IAAI,CAAC;QACV,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,OAAO,CAAC;QACV,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,WAAW,EAAE,WAAW,CAAC;QACzB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;KACvB,CAAC;IA+HF,aAAa,CACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EACtB,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAQhB,gBAAgB,IAAI,aAAa;CAGlC;AACD,eAAO,MAAM,SAAS,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get BaseModel(){return BaseModel},get BaseModelClass(){return BaseModelClass}});var _luxon=require("luxon");var _lodash=require("lodash");var _db=require("./db");var _types=require("../types/types");var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _upsertbuilder=require("./upsert-builder");var _nodesqlparser=/*#__PURE__*/_interop_require_default(require("node-sql-parser"));var _sqlparser=require("../utils/sql-parser");var _puriwrapper=require("./puri-wrapper");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function _ts_values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}var BaseModelClass=/*#__PURE__*/function(){"use strict";function BaseModelClass(){_class_call_check(this,BaseModelClass);_define_property(this,"modelName","Unknown")}_create_class(BaseModelClass,[{key:"getDB",value:function getDB(which){return _db.DB.getDB(which)}},{key:"getPuri",value:function getPuri(which){var trx=_db.DB.getTransactionContext().getTransaction(which);if(trx){return trx}var db=this.getDB(which);return new _puriwrapper.PuriWrapper(db,this.getUpsertBuilder())}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,_db.DB.destroy()]})})()}},{key:"myNow",value:function myNow(timestamp){var dt=timestamp===undefined?_luxon.DateTime.local():_luxon.DateTime.fromSeconds(timestamp);return dt.toFormat("yyyy-MM-dd HH:mm:ss")}},{key:"getInsertedIds",value:function getInsertedIds(wdb,rows,tableName,unqKeyFields){var chunkSize=arguments.length>4&&arguments[4]!==void 0?arguments[4]:500;return _async_to_generator(function(){var unqKeys,whereInField,selectField,chunks,resultIds,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_$chunk,dbRows,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!wdb){wdb=this.getDB("w")}if(unqKeyFields.length>1){whereInField=wdb.raw("CONCAT_WS('_', '".concat(unqKeyFields.join(","),"')"));selectField="".concat(whereInField," as tmpUid");unqKeys=rows.map(function(row){return unqKeyFields.map(function(field){return row[field]}).join("_")})}else{whereInField=unqKeyFields[0];selectField=unqKeyFields[0];unqKeys=rows.map(function(row){return row[unqKeyFields[0]]})}chunks=(0,_lodash.chunk)(unqKeys,chunkSize);resultIds=[];_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_iterator=chunks[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];_$chunk=_step.value;return[4,wdb(tableName).select("id",wdb.raw(selectField)).whereIn(whereInField,_$chunk)];case 3:dbRows=_state.sent();resultIds=resultIds.concat(dbRows.map(function(dbRow){return parseInt(dbRow.id)}));_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2,resultIds]}})}).call(this)}},{key:"useLoaders",value:function useLoaders(db,rows,loaders){return _async_to_generator(function(){var _this,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_this1,_loop,_iterator,_step,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;if(loaders.length===0){return[2,rows]}_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_loop=function(){var loader,subQ,subRows,toCol,fromIds,idColumn,idColumn1,subRowGroups;return _ts_generator(this,function(_state){switch(_state.label){case 0:loader=_step.value;subQ=void 0;subRows=void 0;toCol=void 0;fromIds=rows.map(function(row){return row[loader.manyJoin.idField]});if(loader.manyJoin.through===undefined){idColumn="".concat(loader.manyJoin.toTable,".").concat(loader.manyJoin.toCol);subQ=db(loader.manyJoin.toTable).whereIn(idColumn,fromIds).select(_to_consumable_array(loader.select).concat([idColumn]));loader.oneJoins.map(function(join){if(join.join=="inner"){subQ.innerJoin("".concat(join.table," as ").concat(join.as),_this.getJoinClause(db,join))}else if(join.join=="outer"){subQ.leftOuterJoin("".concat(join.table," as ").concat(join.as),_this.getJoinClause(db,join))}});toCol=loader.manyJoin.toCol}else{idColumn1="".concat(loader.manyJoin.through.table,".").concat(loader.manyJoin.through.fromCol);subQ=db(loader.manyJoin.through.table).join(loader.manyJoin.toTable,"".concat(loader.manyJoin.through.table,".").concat(loader.manyJoin.through.toCol),"".concat(loader.manyJoin.toTable,".").concat(loader.manyJoin.toCol)).whereIn(idColumn1,fromIds).select((0,_lodash.uniq)(_to_consumable_array(loader.select).concat([idColumn1])));loader.oneJoins.map(function(join){if(join.join=="inner"){subQ.innerJoin("".concat(join.table," as ").concat(join.as),_this.getJoinClause(db,join))}else if(join.join=="outer"){subQ.leftOuterJoin("".concat(join.table," as ").concat(join.as),_this.getJoinClause(db,join))}});toCol=loader.manyJoin.through.fromCol}return[4,subQ];case 1:subRows=_state.sent();if(!loader.loaders)return[3,3];return[4,_this1.useLoaders(db,subRows,loader.loaders)];case 2:subRows=_state.sent();_state.label=3;case 3:subRowGroups=(0,_lodash.groupBy)(subRows,toCol);rows=rows.map(function(row){var _subRowGroups_row_loader_manyJoin_idField;row[loader.as]=((_subRowGroups_row_loader_manyJoin_idField=subRowGroups[row[loader.manyJoin.idField]])!==null&&_subRowGroups_row_loader_manyJoin_idField!==void 0?_subRowGroups_row_loader_manyJoin_idField:[]).map(function(r){return(0,_lodash.omit)(r,toCol)});return row});return[2]}})};_iterator=loaders[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];_this1=this;return[5,_ts_values(_loop())];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2,rows]}})}).call(this)}},{key:"hydrate",value:function hydrate(rows){var _this=this;return rows.map(function(row){var nestedKeys=Object.keys(row).filter(function(key){return key.includes("__")});var groups=(0,_lodash.groupBy)(nestedKeys,function(key){return key.split("__")[0]});var nullKeys=Object.keys(groups).filter(function(key){return groups[key].length>1&&groups[key].every(function(field){return row[field]===null||Array.isArray(row[field])&&row[field].length===0})});var hydrated=Object.keys(row).reduce(function(r,field){if(!field.includes("__")){if(Array.isArray(row[field])&&(0,_lodash.isObject)(row[field][0])){r[field]=_this.hydrate(row[field]);return r}else{r[field]=row[field];return r}}var parts=field.split("__");var objPath=parts[0]+parts.slice(1).map(function(part){return"[".concat(part,"]")}).join("");(0,_lodash.set)(r,objPath,row[field]&&Array.isArray(row[field])&&(0,_lodash.isObject)(row[field][0])?_this.hydrate(row[field]):row[field]);return r},{});nullKeys.map(function(nullKey){return hydrated[nullKey]=null});return hydrated})}},{key:"runSubsetQuery",value:function runSubsetQuery(_0){return _async_to_generator(function(param){var _this,params,baseTable,subset,subsetQuery,build,debug,_db,optimizeCountQuery,db,_params_queryMode,queryMode,select,virtual,joins,loaders,qb,applyJoinClause,total,rows;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;params=param.params,baseTable=param.baseTable,subset=param.subset,subsetQuery=param.subsetQuery,build=param.build,debug=param.debug,_db=param.db,optimizeCountQuery=param.optimizeCountQuery;db=_db!==null&&_db!==void 0?_db:this.getDB(subset.startsWith("A")?"w":"r");baseTable=baseTable!==null&&baseTable!==void 0?baseTable:_inflection.default.pluralize(_inflection.default.underscore(this.modelName));queryMode=(_params_queryMode=params.queryMode)!==null&&_params_queryMode!==void 0?_params_queryMode:params.id!==undefined?"list":"both";select=subsetQuery.select,virtual=subsetQuery.virtual,joins=subsetQuery.joins,loaders=subsetQuery.loaders;qb=build({qb:db.from(baseTable),db:db,select:select,joins:joins,virtual:virtual});applyJoinClause=function(qb,joins){joins.map(function(join){if(join.join=="inner"){qb.innerJoin("".concat(join.table," as ").concat(join.as),_this.getJoinClause(db,join))}else if(join.join=="outer"){qb.leftOuterJoin("".concat(join.table," as ").concat(join.as),_this.getJoinClause(db,join))}})};return[4,function(){return _async_to_generator(function(){var clonedQb,parser,parsedQuery,tables,needToJoin,parsedQuery1,q,countQuery,countRow,_countRow_total;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(queryMode==="list"){return[2,undefined]}clonedQb=qb.clone().clear("order").clear("offset").clear("limit");parser=new _nodesqlparser.default.Parser;if(optimizeCountQuery){parsedQuery=parser.astify(clonedQb.toQuery());tables=(0,_sqlparser.getTableNamesFromWhere)(parsedQuery);needToJoin=(0,_lodash.uniq)(tables.flatMap(function(table){return table.split("__").map(function(t){return _inflection.default.pluralize(t)})}));applyJoinClause(clonedQb,joins.filter(function(j){return needToJoin.includes(j.table)}))}else{applyJoinClause(clonedQb,joins)}parsedQuery1=parser.astify(clonedQb.toQuery());q=Array.isArray(parsedQuery1)?parsedQuery1[0]:parsedQuery1;if(q.type!=="select"){throw new Error("Invalid query")}countQuery=q.distinct!==null?clonedQb.clear("select").select(db.raw("COUNT(DISTINCT `".concat((0,_sqlparser.getTableName)(q.columns[0].expr),"`.`").concat(q.columns[0].expr.column,"`) as total"))).first():clonedQb.clear("select").count("*",{as:"total"}).first();return[4,countQuery];case 1:countRow=_state.sent();if(debug===true||debug==="count"){console.debug("DEBUG: count query",_chalk.default.blue(countQuery.toQuery().toString()))}return[2,(_countRow_total=countRow===null||countRow===void 0?void 0:countRow.total)!==null&&_countRow_total!==void 0?_countRow_total:0]}})})()}()];case 1:total=_state.sent();return[4,function(){return _async_to_generator(function(){var listQuery,rows;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(queryMode==="count"){return[2,[]]}if(params.num!==0){qb.limit(params.num);qb.offset(params.num*(params.page-1))}listQuery=qb.clone().select(select);applyJoinClause(listQuery,joins);return[4,listQuery];case 1:rows=_state.sent();if(debug===true||debug==="list"){console.debug("DEBUG: list query",_chalk.default.blue(listQuery.toQuery().toString()))}return[4,this.useLoaders(db,rows,loaders)];case 2:rows=_state.sent();rows=this.hydrate(rows);return[2,rows]}})}).call(_this)}()];case 2:rows=_state.sent();return[2,{rows:rows,total:total,subsetQuery:subsetQuery,qb:qb}]}})}).apply(this,arguments)}},{key:"getJoinClause",value:function getJoinClause(db,join){if(!(0,_types.isCustomJoinClause)(join)){return db.raw("".concat(join.from," = ").concat(join.to))}else{return db.raw(join.custom)}}},{key:"getUpsertBuilder",value:function getUpsertBuilder(){return new _upsertbuilder.UpsertBuilder}}]);return BaseModelClass}();var BaseModel=new BaseModelClass;
|
|
2
|
+
//# sourceMappingURL=base-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/database/base-model.ts"],"sourcesContent":["import { DateTime } from \"luxon\";\nimport { Knex } from \"knex\";\nimport { chunk, groupBy, isObject, omit, set, uniq } from \"lodash\";\nimport { DBPreset, DB } from \"./db\";\nimport { isCustomJoinClause, type SubsetQuery } from \"../types/types\";\nimport type { BaseListParams } from \"../utils/model\";\nimport inflection from \"inflection\";\nimport chalk from \"chalk\";\nimport { UpsertBuilder } from \"./upsert-builder\";\nimport SqlParser from \"node-sql-parser\";\nimport { getTableName, getTableNamesFromWhere } from \"../utils/sql-parser\";\nimport { PuriWrapper } from \"./puri-wrapper\";\n\nexport class BaseModelClass {\n public modelName: string = \"Unknown\";\n\n /* DB 인스턴스 get, destroy */\n getDB(which: DBPreset): Knex {\n return DB.getDB(which);\n }\n\n getPuri(which: DBPreset): PuriWrapper {\n // 트랜잭션 컨텍스트에서 트랜잭션 획득\n const trx = DB.getTransactionContext().getTransaction(which);\n if (trx) {\n return trx;\n }\n\n // 트랜잭션이 없으면 새로운 PuriWrapper 반환\n const db = this.getDB(which);\n return new PuriWrapper(db, this.getUpsertBuilder());\n }\n\n async destroy() {\n return DB.destroy();\n }\n\n myNow(timestamp?: number): string {\n const dt: DateTime =\n timestamp === undefined\n ? DateTime.local()\n : DateTime.fromSeconds(timestamp);\n return dt.toFormat(\"yyyy-MM-dd HH:mm:ss\");\n }\n\n async getInsertedIds(\n wdb: Knex,\n rows: any[],\n tableName: string,\n unqKeyFields: string[],\n chunkSize: number = 500\n ) {\n if (!wdb) {\n wdb = this.getDB(\"w\");\n }\n\n let unqKeys: string[];\n let whereInField: any, selectField: string;\n if (unqKeyFields.length > 1) {\n whereInField = wdb.raw(`CONCAT_WS('_', '${unqKeyFields.join(\",\")}')`);\n selectField = `${whereInField} as tmpUid`;\n unqKeys = rows.map((row) =>\n unqKeyFields.map((field) => row[field]).join(\"_\")\n );\n } else {\n whereInField = unqKeyFields[0];\n selectField = unqKeyFields[0];\n unqKeys = rows.map((row) => row[unqKeyFields[0]]);\n }\n const chunks = chunk(unqKeys, chunkSize);\n\n let resultIds: number[] = [];\n for (let chunk of chunks) {\n const dbRows = await wdb(tableName)\n .select(\"id\", wdb.raw(selectField))\n .whereIn(whereInField, chunk);\n resultIds = resultIds.concat(\n dbRows.map((dbRow: any) => parseInt(dbRow.id))\n );\n }\n\n return resultIds;\n }\n\n async useLoaders(db: Knex, rows: any[], loaders: SubsetQuery[\"loaders\"]) {\n if (loaders.length === 0) {\n return rows;\n }\n\n for (let loader of loaders) {\n let subQ: any;\n let subRows: any[];\n let toCol: string;\n\n const fromIds = rows.map((row) => row[loader.manyJoin.idField]);\n\n if (loader.manyJoin.through === undefined) {\n // HasMany\n const idColumn = `${loader.manyJoin.toTable}.${loader.manyJoin.toCol}`;\n subQ = db(loader.manyJoin.toTable)\n .whereIn(idColumn, fromIds)\n .select([...loader.select, idColumn]);\n\n // HasMany에서 OneJoin이 있는 경우\n loader.oneJoins.map((join) => {\n if (join.join == \"inner\") {\n subQ.innerJoin(\n `${join.table} as ${join.as}`,\n this.getJoinClause(db, join)\n );\n } else if (join.join == \"outer\") {\n subQ.leftOuterJoin(\n `${join.table} as ${join.as}`,\n this.getJoinClause(db, join)\n );\n }\n });\n toCol = loader.manyJoin.toCol;\n } else {\n // ManyToMany\n const idColumn = `${loader.manyJoin.through.table}.${loader.manyJoin.through.fromCol}`;\n subQ = db(loader.manyJoin.through.table)\n .join(\n loader.manyJoin.toTable,\n `${loader.manyJoin.through.table}.${loader.manyJoin.through.toCol}`,\n `${loader.manyJoin.toTable}.${loader.manyJoin.toCol}`\n )\n .whereIn(idColumn, fromIds)\n .select(uniq([...loader.select, idColumn]));\n\n // ManyToMany에서 OneJoin이 있는 경우\n loader.oneJoins.map((join) => {\n if (join.join == \"inner\") {\n subQ.innerJoin(\n `${join.table} as ${join.as}`,\n this.getJoinClause(db, join)\n );\n } else if (join.join == \"outer\") {\n subQ.leftOuterJoin(\n `${join.table} as ${join.as}`,\n this.getJoinClause(db, join)\n );\n }\n });\n toCol = loader.manyJoin.through.fromCol;\n }\n subRows = await subQ;\n\n if (loader.loaders) {\n // 추가 -Many 케이스가 있는 경우 recursion 처리\n subRows = await this.useLoaders(db, subRows, loader.loaders);\n }\n\n // 불러온 row들을 참조ID 기준으로 분류 배치\n const subRowGroups = groupBy(subRows, toCol);\n rows = rows.map((row) => {\n row[loader.as] = (subRowGroups[row[loader.manyJoin.idField]] ?? []).map(\n (r) => omit(r, toCol)\n );\n return row;\n });\n }\n return rows;\n }\n\n hydrate<T>(rows: T[]): T[] {\n return rows.map((row: any) => {\n // nullable relation인 경우 관련된 필드가 전부 null로 생성되는 것 방지하는 코드\n const nestedKeys = Object.keys(row).filter((key) => key.includes(\"__\"));\n const groups = groupBy(nestedKeys, (key) => key.split(\"__\")[0]);\n const nullKeys = Object.keys(groups).filter(\n (key) =>\n groups[key].length > 1 &&\n groups[key].every(\n (field) =>\n row[field] === null ||\n (Array.isArray(row[field]) && row[field].length === 0)\n )\n );\n\n const hydrated = Object.keys(row).reduce((r, field) => {\n if (!field.includes(\"__\")) {\n if (Array.isArray(row[field]) && isObject(row[field][0])) {\n r[field] = this.hydrate(row[field]);\n return r;\n } else {\n r[field] = row[field];\n return r;\n }\n }\n\n const parts = field.split(\"__\");\n const objPath =\n parts[0] +\n parts\n .slice(1)\n .map((part) => `[${part}]`)\n .join(\"\");\n set(\n r,\n objPath,\n row[field] && Array.isArray(row[field]) && isObject(row[field][0])\n ? this.hydrate(row[field])\n : row[field]\n );\n\n return r;\n }, {} as any);\n nullKeys.map((nullKey) => (hydrated[nullKey] = null));\n\n return hydrated;\n });\n }\n\n async runSubsetQuery<T extends BaseListParams, U extends string>({\n params,\n baseTable,\n subset,\n subsetQuery,\n build,\n debug,\n db: _db,\n optimizeCountQuery,\n }: {\n subset: U;\n params: T;\n subsetQuery: SubsetQuery;\n build: (buildParams: {\n qb: Knex.QueryBuilder;\n db: Knex;\n select: (string | Knex.Raw)[];\n joins: SubsetQuery[\"joins\"];\n virtual: string[];\n }) => Knex.QueryBuilder;\n baseTable?: string;\n debug?: boolean | \"list\" | \"count\";\n db?: Knex;\n optimizeCountQuery?: boolean;\n }): Promise<{\n rows: any[];\n total?: number | undefined;\n subsetQuery: SubsetQuery;\n qb: Knex.QueryBuilder;\n }> {\n const db = _db ?? this.getDB(subset.startsWith(\"A\") ? \"w\" : \"r\");\n baseTable =\n baseTable ?? inflection.pluralize(inflection.underscore(this.modelName));\n const queryMode =\n params.queryMode ?? (params.id !== undefined ? \"list\" : \"both\");\n\n const { select, virtual, joins, loaders } = subsetQuery;\n const qb = build({\n qb: db.from(baseTable),\n db,\n select,\n joins,\n virtual,\n });\n\n const applyJoinClause = (\n qb: Knex.QueryBuilder,\n joins: SubsetQuery[\"joins\"]\n ) => {\n joins.map((join) => {\n if (join.join == \"inner\") {\n qb.innerJoin(\n `${join.table} as ${join.as}`,\n this.getJoinClause(db, join)\n );\n } else if (join.join == \"outer\") {\n qb.leftOuterJoin(\n `${join.table} as ${join.as}`,\n this.getJoinClause(db, join)\n );\n }\n });\n };\n\n // countQuery\n const total = await (async () => {\n if (queryMode === \"list\") {\n return undefined;\n }\n\n const clonedQb = qb.clone().clear(\"order\").clear(\"offset\").clear(\"limit\");\n const parser = new SqlParser.Parser();\n\n // optmizeCountQuery가 true인 경우 다른 clause에 영향을 주지 않는 모든 join을 제외함\n if (optimizeCountQuery) {\n const parsedQuery = parser.astify(clonedQb.toQuery());\n const tables = getTableNamesFromWhere(parsedQuery);\n // where절에 사용되는 테이블의 조인을 위해 사용되는 테이블\n const needToJoin = uniq(\n tables.flatMap((table) =>\n table.split(\"__\").map((t) => inflection.pluralize(t))\n )\n );\n applyJoinClause(\n clonedQb,\n joins.filter((j) => needToJoin.includes(j.table))\n );\n } else {\n applyJoinClause(clonedQb, joins);\n }\n\n const parsedQuery = parser.astify(clonedQb.toQuery());\n const q = Array.isArray(parsedQuery) ? parsedQuery[0] : parsedQuery;\n if (q.type !== \"select\") {\n throw new Error(\"Invalid query\");\n }\n\n const countQuery =\n q.distinct !== null\n ? clonedQb\n .clear(\"select\")\n .select(\n db.raw(\n `COUNT(DISTINCT \\`${getTableName(q.columns[0].expr)}\\`.\\`${q.columns[0].expr.column}\\`) as total`\n )\n )\n .first()\n : clonedQb.clear(\"select\").count(\"*\", { as: \"total\" }).first();\n const countRow: { total?: number } = await countQuery;\n\n // debug: countQuery\n if (debug === true || debug === \"count\") {\n console.debug(\n \"DEBUG: count query\",\n chalk.blue(countQuery.toQuery().toString())\n );\n }\n\n return countRow?.total ?? 0;\n })();\n\n // listQuery\n const rows = await (async () => {\n if (queryMode === \"count\") {\n return [];\n }\n\n // limit, offset\n if (params.num !== 0) {\n qb.limit(params.num!);\n qb.offset(params.num! * (params.page! - 1));\n }\n\n // select, rows\n const listQuery = qb.clone().select(select);\n\n // join\n applyJoinClause(listQuery, joins);\n\n let rows = await listQuery;\n // debug: listQuery\n if (debug === true || debug === \"list\") {\n console.debug(\n \"DEBUG: list query\",\n chalk.blue(listQuery.toQuery().toString())\n );\n }\n\n rows = await this.useLoaders(db, rows, loaders);\n rows = this.hydrate(rows);\n return rows;\n })();\n\n return { rows, total, subsetQuery, qb };\n }\n\n getJoinClause(\n db: Knex<any, unknown>,\n join: SubsetQuery[\"joins\"][number]\n ): Knex.Raw<any> {\n if (!isCustomJoinClause(join)) {\n return db.raw(`${join.from} = ${join.to}`);\n } else {\n return db.raw(join.custom);\n }\n }\n\n getUpsertBuilder(): UpsertBuilder {\n return new UpsertBuilder();\n }\n}\nexport const BaseModel = new BaseModelClass();\n"],"names":["BaseModel","BaseModelClass","modelName","getDB","which","DB","getPuri","trx","getTransactionContext","getTransaction","db","PuriWrapper","getUpsertBuilder","destroy","myNow","timestamp","dt","undefined","DateTime","local","fromSeconds","toFormat","getInsertedIds","wdb","rows","tableName","unqKeyFields","chunkSize","unqKeys","whereInField","selectField","chunks","resultIds","chunk","dbRows","length","raw","join","map","row","field","select","whereIn","concat","dbRow","parseInt","id","useLoaders","loaders","loader","subQ","subRows","toCol","fromIds","idColumn","subRowGroups","manyJoin","idField","through","toTable","oneJoins","innerJoin","table","as","getJoinClause","leftOuterJoin","fromCol","uniq","groupBy","r","omit","hydrate","nestedKeys","Object","keys","filter","key","includes","groups","split","nullKeys","every","Array","isArray","hydrated","reduce","isObject","parts","objPath","slice","part","set","nullKey","runSubsetQuery","params","baseTable","subset","subsetQuery","build","debug","_db","optimizeCountQuery","queryMode","virtual","joins","qb","applyJoinClause","total","startsWith","inflection","pluralize","underscore","from","clonedQb","parser","parsedQuery","tables","needToJoin","q","countQuery","countRow","clone","clear","SqlParser","Parser","astify","toQuery","getTableNamesFromWhere","flatMap","t","j","type","Error","distinct","getTableName","columns","expr","column","first","count","console","chalk","blue","toString","listQuery","num","limit","offset","page","isCustomJoinClause","to","custom","UpsertBuilder"],"mappings":"mPAiYaA,mBAAAA,eApXAC,wBAAAA,qCAbY,6BAEiC,0BAC7B,2BACwB,gFAE9B,wEACL,qCACY,qFACR,2CAC+B,gDACzB,mkIAErB,IAAA,AAAMA,4BAAN,iCAAMA,wCAAAA,gBACX,sBAAOC,YAAoB,yBADhBD,iBAIXE,IAAAA,cAAAA,SAAAA,MAAMC,KAAe,EACnB,OAAOC,MAAE,CAACF,KAAK,CAACC,MAClB,IAEAE,IAAAA,gBAAAA,SAAAA,QAAQF,KAAe,EAErB,IAAMG,IAAMF,MAAE,CAACG,qBAAqB,GAAGC,cAAc,CAACL,OACtD,GAAIG,IAAK,CACP,OAAOA,GACT,CAGA,IAAMG,GAAK,IAAI,CAACP,KAAK,CAACC,OACtB,OAAO,IAAIO,wBAAW,CAACD,GAAI,IAAI,CAACE,gBAAgB,GAClD,IAEMC,IAAAA,gBAAN,SAAMA,2FACJ,SAAOR,MAAE,CAACQ,OAAO,KACnB,QAEAC,IAAAA,cAAAA,SAAAA,MAAMC,SAAkB,EACtB,IAAMC,GACJD,YAAcE,UACVC,eAAQ,CAACC,KAAK,GACdD,eAAQ,CAACE,WAAW,CAACL,WAC3B,OAAOC,GAAGK,QAAQ,CAAC,sBACrB,IAEMC,IAAAA,uBAAN,SAAMA,eACJC,GAAS,CACTC,IAAW,CACXC,SAAiB,CACjBC,YAAsB,MACtBC,UAAAA,uDAAoB,8CAMhBC,QACAC,aAAmBC,YAYjBC,OAEFC,UACC,0BAAA,kBAAA,eAAA,UAAA,MAAIC,QACDC,kFArBR,GAAI,CAACX,IAAK,CACRA,IAAM,IAAI,CAACpB,KAAK,CAAC,IACnB,CAIA,GAAIuB,aAAaS,MAAM,CAAG,EAAG,CAC3BN,aAAeN,IAAIa,GAAG,CAAC,AAAC,mBAAyC,OAAvBV,aAAaW,IAAI,CAAC,KAAK,OACjEP,YAAc,AAAC,GAAe,OAAbD,aAAa,cAC9BD,QAAUJ,KAAKc,GAAG,CAAC,SAACC,YAClBb,aAAaY,GAAG,CAAC,SAACE,cAAUD,GAAG,CAACC,MAAM,GAAEH,IAAI,CAAC,MAEjD,KAAO,CACLR,aAAeH,YAAY,CAAC,EAAE,CAC9BI,YAAcJ,YAAY,CAAC,EAAE,CAC7BE,QAAUJ,KAAKc,GAAG,CAAC,SAACC,YAAQA,GAAG,CAACb,YAAY,CAAC,EAAE,CAAC,EAClD,CACMK,OAASE,GAAAA,aAAK,EAACL,QAASD,WAE1BK,aACC,+BAAA,wBAAA,2EAAA,UAAaD,sDAAb,2BAAA,MAAA,oCAAIE,QAAJ,YACY,SAAMV,IAAIE,WACtBgB,MAAM,CAAC,KAAMlB,IAAIa,GAAG,CAACN,cACrBY,OAAO,CAACb,aAAcI,iBAFnBC,OAAS,cAGfF,UAAYA,UAAUW,MAAM,CAC1BT,OAAOI,GAAG,CAAC,SAACM,cAAeC,SAASD,MAAME,EAAE,2BAL3C,uFAAA,uBAAA,8CAAA,2BAAA,wBAAA,+BAAA,yBAAA,iCASL,SAAOd,aACT,iBAEMe,IAAAA,mBAAN,SAAMA,WAAWrC,EAAQ,CAAEc,IAAW,CAAEwB,OAA+B,kDAKhE,0BAAA,kBAAA,4BAAA,UAAA,4FAJL,GAAIA,QAAQb,MAAM,GAAK,EAAG,CACxB,SAAOX,KACT,CAEK,+BAAA,wBAAA,gGAAIyB,OACHC,KACAC,QACAC,MAEEC,QAIEC,SAsBAA,UAkCFC,oFAjECN,OAAJ,YACCC,KAAAA,KAAAA,EACAC,QAAAA,KAAAA,EACAC,MAAAA,KAAAA,EAEEC,QAAU7B,KAAKc,GAAG,CAAC,SAACC,YAAQA,GAAG,CAACU,OAAOO,QAAQ,CAACC,OAAO,CAAC,GAE9D,GAAIR,OAAOO,QAAQ,CAACE,OAAO,GAAKzC,UAAW,CAEnCqC,SAAW,AAAC,GAA6BL,OAA3BA,OAAOO,QAAQ,CAACG,OAAO,CAAC,KAAyB,OAAtBV,OAAOO,QAAQ,CAACJ,KAAK,EACpEF,KAAOxC,GAAGuC,OAAOO,QAAQ,CAACG,OAAO,EAC9BjB,OAAO,CAACY,SAAUD,SAClBZ,MAAM,CAAC,AAAC,qBAAGQ,OAAOR,MAAM,UAAEa,YAG7BL,OAAOW,QAAQ,CAACtB,GAAG,CAAC,SAACD,MACnB,GAAIA,KAAKA,IAAI,EAAI,QAAS,CACxBa,KAAKW,SAAS,CACZ,AAAC,GAAmBxB,OAAjBA,KAAKyB,KAAK,CAAC,QAAc,OAARzB,KAAK0B,EAAE,EAC3B,MAAKC,aAAa,CAACtD,GAAI2B,MAE3B,MAAO,GAAIA,KAAKA,IAAI,EAAI,QAAS,CAC/Ba,KAAKe,aAAa,CAChB,AAAC,GAAmB5B,OAAjBA,KAAKyB,KAAK,CAAC,QAAc,OAARzB,KAAK0B,EAAE,EAC3B,MAAKC,aAAa,CAACtD,GAAI2B,MAE3B,CACF,GACAe,MAAQH,OAAOO,QAAQ,CAACJ,KAAK,AAC/B,KAAO,CAECE,UAAW,AAAC,GAAmCL,OAAjCA,OAAOO,QAAQ,CAACE,OAAO,CAACI,KAAK,CAAC,KAAmC,OAAhCb,OAAOO,QAAQ,CAACE,OAAO,CAACQ,OAAO,EACpFhB,KAAOxC,GAAGuC,OAAOO,QAAQ,CAACE,OAAO,CAACI,KAAK,EACpCzB,IAAI,CACHY,OAAOO,QAAQ,CAACG,OAAO,CACvB,AAAC,GAAmCV,OAAjCA,OAAOO,QAAQ,CAACE,OAAO,CAACI,KAAK,CAAC,KAAiC,OAA9Bb,OAAOO,QAAQ,CAACE,OAAO,CAACN,KAAK,EACjE,AAAC,GAA6BH,OAA3BA,OAAOO,QAAQ,CAACG,OAAO,CAAC,KAAyB,OAAtBV,OAAOO,QAAQ,CAACJ,KAAK,GAEpDV,OAAO,CAACY,UAAUD,SAClBZ,MAAM,CAAC0B,GAAAA,YAAI,EAAC,AAAC,qBAAGlB,OAAOR,MAAM,UAAEa,cAGlCL,OAAOW,QAAQ,CAACtB,GAAG,CAAC,SAACD,MACnB,GAAIA,KAAKA,IAAI,EAAI,QAAS,CACxBa,KAAKW,SAAS,CACZ,AAAC,GAAmBxB,OAAjBA,KAAKyB,KAAK,CAAC,QAAc,OAARzB,KAAK0B,EAAE,EAC3B,MAAKC,aAAa,CAACtD,GAAI2B,MAE3B,MAAO,GAAIA,KAAKA,IAAI,EAAI,QAAS,CAC/Ba,KAAKe,aAAa,CAChB,AAAC,GAAmB5B,OAAjBA,KAAKyB,KAAK,CAAC,QAAc,OAARzB,KAAK0B,EAAE,EAC3B,MAAKC,aAAa,CAACtD,GAAI2B,MAE3B,CACF,GACAe,MAAQH,OAAOO,QAAQ,CAACE,OAAO,CAACQ,OAAO,AACzC,CACU,SAAMhB,aAAhBC,QAAU,kBAENF,OAAOD,OAAO,CAAdC,YAEQ,SAAM,OAAKF,UAAU,CAACrC,GAAIyC,QAASF,OAAOD,OAAO,UAA3DG,QAAU,oCAINI,aAAea,GAAAA,eAAO,EAACjB,QAASC,OACtC5B,KAAOA,KAAKc,GAAG,CAAC,SAACC,SACGgB,yCAAlBhB,CAAAA,GAAG,CAACU,OAAOc,EAAE,CAAC,CAAG,AAACR,CAAAA,CAAAA,0CAAAA,YAAY,CAAChB,GAAG,CAACU,OAAOO,QAAQ,CAACC,OAAO,CAAC,CAAC,UAA1CF,mDAAAA,0CAA8C,EAAE,AAAD,EAAGjB,GAAG,CACrE,SAAC+B,SAAMC,GAAAA,YAAI,EAACD,EAAGjB,SAEjB,OAAOb,GACT,eACF,EAxEK,UAAcS,uDAAd,2BAAA,MAAA,yHAAA,uFAAA,uBAAA,8CAAA,2BAAA,wBAAA,+BAAA,yBAAA,iCAyEL,SAAOxB,QACT,iBAEA+C,IAAAA,gBAAAA,SAAAA,QAAW/C,IAAS,iBAClB,OAAOA,KAAKc,GAAG,CAAC,SAACC,KAEf,IAAMiC,WAAaC,OAAOC,IAAI,CAACnC,KAAKoC,MAAM,CAAC,SAACC,YAAQA,IAAIC,QAAQ,CAAC,QACjE,IAAMC,OAASV,GAAAA,eAAO,EAACI,WAAY,SAACI,YAAQA,IAAIG,KAAK,CAAC,KAAK,CAAC,EAAE,GAC9D,IAAMC,SAAWP,OAAOC,IAAI,CAACI,QAAQH,MAAM,CACzC,SAACC,YACCE,MAAM,CAACF,IAAI,CAACzC,MAAM,CAAG,GACrB2C,MAAM,CAACF,IAAI,CAACK,KAAK,CACf,SAACzC,cACCD,GAAG,CAACC,MAAM,GAAK,MACd0C,MAAMC,OAAO,CAAC5C,GAAG,CAACC,MAAM,GAAKD,GAAG,CAACC,MAAM,CAACL,MAAM,GAAK,MAI5D,IAAMiD,SAAWX,OAAOC,IAAI,CAACnC,KAAK8C,MAAM,CAAC,SAAChB,EAAG7B,OAC3C,GAAI,CAACA,MAAMqC,QAAQ,CAAC,MAAO,CACzB,GAAIK,MAAMC,OAAO,CAAC5C,GAAG,CAACC,MAAM,GAAK8C,GAAAA,gBAAQ,EAAC/C,GAAG,CAACC,MAAM,CAAC,EAAE,EAAG,CACxD6B,CAAC,CAAC7B,MAAM,CAAG,MAAK+B,OAAO,CAAChC,GAAG,CAACC,MAAM,EAClC,OAAO6B,CACT,KAAO,CACLA,CAAC,CAAC7B,MAAM,CAAGD,GAAG,CAACC,MAAM,CACrB,OAAO6B,CACT,CACF,CAEA,IAAMkB,MAAQ/C,MAAMuC,KAAK,CAAC,MAC1B,IAAMS,QACJD,KAAK,CAAC,EAAE,CACRA,MACGE,KAAK,CAAC,GACNnD,GAAG,CAAC,SAACoD,YAAS,AAAC,IAAQ,OAALA,KAAK,OACvBrD,IAAI,CAAC,IACVsD,GAAAA,WAAG,EACDtB,EACAmB,QACAjD,GAAG,CAACC,MAAM,EAAI0C,MAAMC,OAAO,CAAC5C,GAAG,CAACC,MAAM,GAAK8C,GAAAA,gBAAQ,EAAC/C,GAAG,CAACC,MAAM,CAAC,EAAE,EAC7D,MAAK+B,OAAO,CAAChC,GAAG,CAACC,MAAM,EACvBD,GAAG,CAACC,MAAM,EAGhB,OAAO6B,CACT,EAAG,CAAC,GACJW,SAAS1C,GAAG,CAAC,SAACsD,gBAAaR,QAAQ,CAACQ,QAAQ,CAAG,OAE/C,OAAOR,QACT,EACF,IAEMS,IAAAA,uBAAN,SAAMA,uDAA2D,KAwBhE,YAvBCC,OACAC,UACAC,OACAC,YACAC,MACAC,MACIC,IACJC,mBAsBM3F,GAIJoF,kBADIQ,UAGE7D,OAAQ8D,QAASC,MAAOxD,QAC1ByD,GAQAC,gBAoBAC,MAyDAnF,uFAzHNsE,OAD+D,MAC/DA,OACAC,UAF+D,MAE/DA,UACAC,OAH+D,MAG/DA,OACAC,YAJ+D,MAI/DA,YACAC,MAL+D,MAK/DA,MACAC,MAN+D,MAM/DA,MACIC,IAP2D,MAO/D1F,GACA2F,mBAR+D,MAQ/DA,mBAsBM3F,GAAK0F,YAAAA,aAAAA,IAAO,IAAI,CAACjG,KAAK,CAAC6F,OAAOY,UAAU,CAAC,KAAO,IAAM,KAC5Db,UACEA,kBAAAA,mBAAAA,UAAac,mBAAU,CAACC,SAAS,CAACD,mBAAU,CAACE,UAAU,CAAC,IAAI,CAAC7G,SAAS,GAClEoG,UACJR,CAAAA,kBAAAA,OAAOQ,SAAS,UAAhBR,2BAAAA,kBAAqBA,OAAOhD,EAAE,GAAK7B,UAAY,OAAS,OAElDwB,OAAoCwD,YAApCxD,OAAQ8D,QAA4BN,YAA5BM,QAASC,MAAmBP,YAAnBO,MAAOxD,QAAYiD,YAAZjD,QAC1ByD,GAAKP,MAAM,CACfO,GAAI/F,GAAGsG,IAAI,CAACjB,WACZrF,GAAAA,GACA+B,OAAAA,OACA+D,MAAAA,MACAD,QAAAA,OACF,GAEMG,gBAAkB,SACtBD,GACAD,OAEAA,MAAMlE,GAAG,CAAC,SAACD,MACT,GAAIA,KAAKA,IAAI,EAAI,QAAS,CACxBoE,GAAG5C,SAAS,CACV,AAAC,GAAmBxB,OAAjBA,KAAKyB,KAAK,CAAC,QAAc,OAARzB,KAAK0B,EAAE,EAC3B,MAAKC,aAAa,CAACtD,GAAI2B,MAE3B,MAAO,GAAIA,KAAKA,IAAI,EAAI,QAAS,CAC/BoE,GAAGxC,aAAa,CACd,AAAC,GAAmB5B,OAAjBA,KAAKyB,KAAK,CAAC,QAAc,OAARzB,KAAK0B,EAAE,EAC3B,MAAKC,aAAa,CAACtD,GAAI2B,MAE3B,CACF,EACF,EAGc,SAAM,AAAC,qDAKb4E,SACAC,OAIEC,YACAC,OAEAC,WAaFF,aACAG,EAKAC,WAWAC,SAUCA,uFApDP,GAAIlB,YAAc,OAAQ,CACxB,SAAOrF,UACT,CAEMgG,SAAWR,GAAGgB,KAAK,GAAGC,KAAK,CAAC,SAASA,KAAK,CAAC,UAAUA,KAAK,CAAC,SAC3DR,OAAS,IAAIS,sBAAS,CAACC,MAAM,CAGnC,GAAIvB,mBAAoB,CAChBc,YAAcD,OAAOW,MAAM,CAACZ,SAASa,OAAO,IAC5CV,OAASW,GAAAA,iCAAsB,EAACZ,aAEhCE,WAAalD,GAAAA,YAAI,EACrBiD,OAAOY,OAAO,CAAC,SAAClE,cACdA,MAAMiB,KAAK,CAAC,MAAMzC,GAAG,CAAC,SAAC2F,UAAMpB,mBAAU,CAACC,SAAS,CAACmB,QAGtDvB,gBACEO,SACAT,MAAM7B,MAAM,CAAC,SAACuD,UAAMb,WAAWxC,QAAQ,CAACqD,EAAEpE,KAAK,IAEnD,KAAO,CACL4C,gBAAgBO,SAAUT,MAC5B,CAEMW,aAAcD,OAAOW,MAAM,CAACZ,SAASa,OAAO,IAC5CR,EAAIpC,MAAMC,OAAO,CAACgC,cAAeA,YAAW,CAAC,EAAE,CAAGA,aACxD,GAAIG,EAAEa,IAAI,GAAK,SAAU,CACvB,MAAM,IAAIC,MAAM,gBAClB,CAEMb,WACJD,EAAEe,QAAQ,GAAK,KACXpB,SACGS,KAAK,CAAC,UACNjF,MAAM,CACL/B,GAAG0B,GAAG,CACJ,AAAC,mBAA0DkF,OAAvCgB,GAAAA,uBAAY,EAAChB,EAAEiB,OAAO,CAAC,EAAE,CAACC,IAAI,EAAE,OAAgC,OAAzBlB,EAAEiB,OAAO,CAAC,EAAE,CAACC,IAAI,CAACC,MAAM,CAAC,iBAGvFC,KAAK,GACRzB,SAASS,KAAK,CAAC,UAAUiB,KAAK,CAAC,IAAK,CAAE5E,GAAI,OAAQ,GAAG2E,KAAK,GAC3B,SAAMnB,mBAArCC,SAA+B,cAGrC,GAAIrB,QAAU,MAAQA,QAAU,QAAS,CACvCyC,QAAQzC,KAAK,CACX,qBACA0C,cAAK,CAACC,IAAI,CAACvB,WAAWO,OAAO,GAAGiB,QAAQ,IAE5C,CAEA,SAAOvB,CAAAA,gBAAAA,iBAAAA,yBAAAA,SAAUb,KAAK,UAAfa,yBAAAA,gBAAmB,KAC5B,gBAtDMb,MAAQ,cAyDD,SAAM,AAAC,qDAYZqC,UAKFxH,4EAhBJ,GAAI8E,YAAc,QAAS,CACzB,YACF,CAGA,GAAIR,OAAOmD,GAAG,GAAK,EAAG,CACpBxC,GAAGyC,KAAK,CAACpD,OAAOmD,GAAG,EACnBxC,GAAG0C,MAAM,CAACrD,OAAOmD,GAAG,CAAKnD,CAAAA,OAAOsD,IAAI,CAAI,CAAA,EAC1C,CAGMJ,UAAYvC,GAAGgB,KAAK,GAAGhF,MAAM,CAACA,QAGpCiE,gBAAgBsC,UAAWxC,OAEhB,SAAMwC,kBAAbxH,KAAO,cAEX,GAAI2E,QAAU,MAAQA,QAAU,OAAQ,CACtCyC,QAAQzC,KAAK,CACX,oBACA0C,cAAK,CAACC,IAAI,CAACE,UAAUlB,OAAO,GAAGiB,QAAQ,IAE3C,CAEO,SAAM,IAAI,CAAChG,UAAU,CAACrC,GAAIc,KAAMwB,iBAAvCxB,KAAO,cACPA,KAAO,IAAI,CAAC+C,OAAO,CAAC/C,MACpB,SAAOA,QACT,0BA7BMA,KAAO,cA+Bb,SAAO,CAAEA,KAAAA,KAAMmF,MAAAA,MAAOV,YAAAA,YAAaQ,GAAAA,EAAG,KACxC,4BAEAzC,IAAAA,sBAAAA,SAAAA,cACEtD,EAAsB,CACtB2B,IAAkC,EAElC,GAAI,CAACgH,GAAAA,yBAAkB,EAAChH,MAAO,CAC7B,OAAO3B,GAAG0B,GAAG,CAAC,AAAC,GAAiBC,OAAfA,KAAK2E,IAAI,CAAC,OAAa,OAAR3E,KAAKiH,EAAE,EACzC,KAAO,CACL,OAAO5I,GAAG0B,GAAG,CAACC,KAAKkH,MAAM,CAC3B,CACF,IAEA3I,IAAAA,yBAAAA,SAAAA,mBACE,OAAO,IAAI4I,4BAAa,AAC1B,YAlXWvJ,kBAoXN,IAAMD,UAAY,IAAIC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MigrationColumn, MigrationIndex } from "../types/types";
|
|
2
|
+
export declare class CodeGenerator {
|
|
3
|
+
getAlterColumnsTo(entityColumns: MigrationColumn[], dbColumns: MigrationColumn[]): {
|
|
4
|
+
add: MigrationColumn[];
|
|
5
|
+
drop: MigrationColumn[];
|
|
6
|
+
alter: MigrationColumn[];
|
|
7
|
+
};
|
|
8
|
+
getAlterIndexesTo(entityIndexes: MigrationIndex[], dbIndexes: MigrationIndex[]): {
|
|
9
|
+
add: MigrationIndex[];
|
|
10
|
+
drop: MigrationIndex[];
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=code-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/database/code-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,qBAAa,aAAa;IACxB,iBAAiB,CACf,aAAa,EAAE,eAAe,EAAE,EAChC,SAAS,EAAE,eAAe,EAAE;aAGf,eAAe,EAAE;cAChB,eAAe,EAAE;eAChB,eAAe,EAAE;;IAiClC,iBAAiB,CACf,aAAa,EAAE,cAAc,EAAE,EAC/B,SAAS,EAAE,cAAc,EAAE;aAId,cAAc,EAAE;cACf,cAAc,EAAE;;CAmBjC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"CodeGenerator",{enumerable:true,get:function(){return CodeGenerator}});var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _fastdeepequal=/*#__PURE__*/_interop_require_default(require("fast-deep-equal"));function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}var CodeGenerator=/*#__PURE__*/function(){"use strict";function CodeGenerator(){_class_call_check(this,CodeGenerator)}_create_class(CodeGenerator,[{key:"getAlterColumnsTo",value:function getAlterColumnsTo(entityColumns,dbColumns){var columnsTo={add:[],drop:[],alter:[]};var extraColumns={db:_lodash.default.differenceBy(dbColumns,entityColumns,function(col){return col.name}),entity:_lodash.default.differenceBy(entityColumns,dbColumns,function(col){return col.name})};if(extraColumns.entity.length>0){columnsTo.add=columnsTo.add.concat(extraColumns.entity)}if(extraColumns.db.length>0){columnsTo.drop=columnsTo.drop.concat(extraColumns.db)}var sameDbColumns=_lodash.default.intersectionBy(dbColumns,entityColumns,function(col){return col.name});var sameMdColumns=_lodash.default.intersectionBy(entityColumns,dbColumns,function(col){return col.name});columnsTo.alter=_lodash.default.differenceWith(sameDbColumns,sameMdColumns,function(a,b){return(0,_fastdeepequal.default)(a,b)});return columnsTo}},{key:"getAlterIndexesTo",value:function getAlterIndexesTo(entityIndexes,dbIndexes){var indexesTo={add:[],drop:[]};var extraIndexes={db:_lodash.default.differenceBy(dbIndexes,entityIndexes,function(col){return[col.type,col.columns.join("-")].join("//")}),entity:_lodash.default.differenceBy(entityIndexes,dbIndexes,function(col){return[col.type,col.columns.join("-")].join("//")})};if(extraIndexes.entity.length>0){indexesTo.add=indexesTo.add.concat(extraIndexes.entity)}if(extraIndexes.db.length>0){indexesTo.drop=indexesTo.drop.concat(extraIndexes.db)}return indexesTo}}]);return CodeGenerator}();
|
|
2
|
+
//# sourceMappingURL=code-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/database/code-generator.ts"],"sourcesContent":["import _ from \"lodash\";\nimport equal from \"fast-deep-equal\";\nimport { MigrationColumn, MigrationIndex } from \"../types/types\";\n\nexport class CodeGenerator {\n getAlterColumnsTo(\n entityColumns: MigrationColumn[],\n dbColumns: MigrationColumn[]\n ) {\n const columnsTo = {\n add: [] as MigrationColumn[],\n drop: [] as MigrationColumn[],\n alter: [] as MigrationColumn[],\n };\n\n // 컬럼명 기준 비교\n const extraColumns = {\n db: _.differenceBy(dbColumns, entityColumns, (col) => col.name),\n entity: _.differenceBy(entityColumns, dbColumns, (col) => col.name),\n };\n if (extraColumns.entity.length > 0) {\n columnsTo.add = columnsTo.add.concat(extraColumns.entity);\n }\n if (extraColumns.db.length > 0) {\n columnsTo.drop = columnsTo.drop.concat(extraColumns.db);\n }\n\n // 동일 컬럼명의 세부 필드 비교\n const sameDbColumns = _.intersectionBy(\n dbColumns,\n entityColumns,\n (col) => col.name\n );\n const sameMdColumns = _.intersectionBy(\n entityColumns,\n dbColumns,\n (col) => col.name\n );\n columnsTo.alter = _.differenceWith(sameDbColumns, sameMdColumns, (a, b) =>\n equal(a, b)\n );\n\n return columnsTo;\n }\n\n getAlterIndexesTo(\n entityIndexes: MigrationIndex[],\n dbIndexes: MigrationIndex[]\n ) {\n // 인덱스 비교\n let indexesTo = {\n add: [] as MigrationIndex[],\n drop: [] as MigrationIndex[],\n };\n const extraIndexes = {\n db: _.differenceBy(dbIndexes, entityIndexes, (col) =>\n [col.type, col.columns.join(\"-\")].join(\"//\")\n ),\n entity: _.differenceBy(entityIndexes, dbIndexes, (col) =>\n [col.type, col.columns.join(\"-\")].join(\"//\")\n ),\n };\n if (extraIndexes.entity.length > 0) {\n indexesTo.add = indexesTo.add.concat(extraIndexes.entity);\n }\n if (extraIndexes.db.length > 0) {\n indexesTo.drop = indexesTo.drop.concat(extraIndexes.db);\n }\n\n return indexesTo;\n }\n}\n"],"names":["CodeGenerator","getAlterColumnsTo","entityColumns","dbColumns","columnsTo","add","drop","alter","extraColumns","db","_","differenceBy","col","name","entity","length","concat","sameDbColumns","intersectionBy","sameMdColumns","differenceWith","a","b","equal","getAlterIndexesTo","entityIndexes","dbIndexes","indexesTo","extraIndexes","type","columns","join"],"mappings":"oGAIaA,uDAAAA,2EAJC,4EACI,+tBAGX,IAAA,AAAMA,2BAAN,iCAAMA,uCAAAA,6BAAAA,gBACXC,IAAAA,0BAAAA,SAAAA,kBACEC,aAAgC,CAChCC,SAA4B,EAE5B,IAAMC,UAAY,CAChBC,IAAK,EAAE,CACPC,KAAM,EAAE,CACRC,MAAO,EAAE,AACX,EAGA,IAAMC,aAAe,CACnBC,GAAIC,eAAC,CAACC,YAAY,CAACR,UAAWD,cAAe,SAACU,YAAQA,IAAIC,IAAI,GAC9DC,OAAQJ,eAAC,CAACC,YAAY,CAACT,cAAeC,UAAW,SAACS,YAAQA,IAAIC,IAAI,EACpE,EACA,GAAIL,aAAaM,MAAM,CAACC,MAAM,CAAG,EAAG,CAClCX,UAAUC,GAAG,CAAGD,UAAUC,GAAG,CAACW,MAAM,CAACR,aAAaM,MAAM,CAC1D,CACA,GAAIN,aAAaC,EAAE,CAACM,MAAM,CAAG,EAAG,CAC9BX,UAAUE,IAAI,CAAGF,UAAUE,IAAI,CAACU,MAAM,CAACR,aAAaC,EAAE,CACxD,CAGA,IAAMQ,cAAgBP,eAAC,CAACQ,cAAc,CACpCf,UACAD,cACA,SAACU,YAAQA,IAAIC,IAAI,GAEnB,IAAMM,cAAgBT,eAAC,CAACQ,cAAc,CACpChB,cACAC,UACA,SAACS,YAAQA,IAAIC,IAAI,EAEnBT,CAAAA,UAAUG,KAAK,CAAGG,eAAC,CAACU,cAAc,CAACH,cAAeE,cAAe,SAACE,EAAGC,SACnEC,GAAAA,sBAAK,EAACF,EAAGC,KAGX,OAAOlB,SACT,IAEAoB,IAAAA,0BAAAA,SAAAA,kBACEC,aAA+B,CAC/BC,SAA2B,EAG3B,IAAIC,UAAY,CACdtB,IAAK,EAAE,CACPC,KAAM,EAAE,AACV,EACA,IAAMsB,aAAe,CACnBnB,GAAIC,eAAC,CAACC,YAAY,CAACe,UAAWD,cAAe,SAACb,WAC5C,CAACA,IAAIiB,IAAI,CAAEjB,IAAIkB,OAAO,CAACC,IAAI,CAAC,KAAK,CAACA,IAAI,CAAC,QAEzCjB,OAAQJ,eAAC,CAACC,YAAY,CAACc,cAAeC,UAAW,SAACd,WAChD,CAACA,IAAIiB,IAAI,CAAEjB,IAAIkB,OAAO,CAACC,IAAI,CAAC,KAAK,CAACA,IAAI,CAAC,OAE3C,EACA,GAAIH,aAAad,MAAM,CAACC,MAAM,CAAG,EAAG,CAClCY,UAAUtB,GAAG,CAAGsB,UAAUtB,GAAG,CAACW,MAAM,CAACY,aAAad,MAAM,CAC1D,CACA,GAAIc,aAAanB,EAAE,CAACM,MAAM,CAAG,EAAG,CAC9BY,UAAUrB,IAAI,CAAGqB,UAAUrB,IAAI,CAACU,MAAM,CAACY,aAAanB,EAAE,CACxD,CAEA,OAAOkB,SACT,YAlEW3B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type DBPreset = "w" | "r";
|
|
2
|
+
import { Knex } from "knex";
|
|
3
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
4
|
+
import { TransactionContext } from "./transaction-context";
|
|
5
|
+
type MySQLConfig = Omit<Knex.Config, "connection"> & {
|
|
6
|
+
connection?: Knex.MySql2ConnectionConfig;
|
|
7
|
+
};
|
|
8
|
+
export type SonamuDBBaseConfig = {
|
|
9
|
+
database: string;
|
|
10
|
+
defaultOptions?: MySQLConfig;
|
|
11
|
+
environments?: {
|
|
12
|
+
development?: MySQLConfig;
|
|
13
|
+
development_slave?: MySQLConfig;
|
|
14
|
+
production?: MySQLConfig;
|
|
15
|
+
production_slave?: MySQLConfig;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export type SonamuDBConfig = {
|
|
19
|
+
development_master: Knex.Config;
|
|
20
|
+
development_slave: Knex.Config;
|
|
21
|
+
test: Knex.Config;
|
|
22
|
+
fixture_local: Knex.Config;
|
|
23
|
+
fixture_remote: Knex.Config;
|
|
24
|
+
production_master: Knex.Config;
|
|
25
|
+
production_slave: Knex.Config;
|
|
26
|
+
};
|
|
27
|
+
declare class DBClass {
|
|
28
|
+
private wdb?;
|
|
29
|
+
private rdb?;
|
|
30
|
+
transactionStorage: AsyncLocalStorage<TransactionContext>;
|
|
31
|
+
runWithTransaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
32
|
+
getTransactionContext(): TransactionContext;
|
|
33
|
+
readKnexfile(): Promise<SonamuDBConfig>;
|
|
34
|
+
getDB(which: DBPreset): Knex;
|
|
35
|
+
destroy(): Promise<void>;
|
|
36
|
+
private generateDBConfig;
|
|
37
|
+
}
|
|
38
|
+
export declare const DB: DBClass;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AACjC,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,KAAK,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG;IACnD,UAAU,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAE/B,QAAQ,EAAE,MAAM,CAAC;IAGjB,cAAc,CAAC,EAAE,WAAW,CAAC;IAG7B,YAAY,CAAC,EAAE;QACb,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,iBAAiB,CAAC,EAAE,WAAW,CAAC;QAChC,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,gBAAgB,CAAC,EAAE,WAAW,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;IAC3B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;CAC/B,CAAC;AAEF,cAAM,OAAO;IACX,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IAEZ,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAI5C,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAmB7C,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAmCtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,CAAC,gBAAgB;CAyEzB;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"DB",{enumerable:true,get:function(){return DB}});var _knex=/*#__PURE__*/_interop_require_default(require("knex"));var _path=/*#__PURE__*/_interop_require_default(require("path"));var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _api=require("../api");var _soexceptions=require("../exceptions/so-exceptions");var _async_hooks=require("async_hooks");var _transactioncontext=require("./transaction-context");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var DBClass=/*#__PURE__*/function(){"use strict";function DBClass(){_class_call_check(this,DBClass);_define_property(this,"wdb",void 0);_define_property(this,"rdb",void 0);_define_property(this,"transactionStorage",new _async_hooks.AsyncLocalStorage)}_create_class(DBClass,[{key:"runWithTransaction",value:function runWithTransaction(callback){return this.transactionStorage.run(new _transactioncontext.TransactionContext,callback)}},{key:"getTransactionContext",value:function getTransactionContext(){var _this_transactionStorage_getStore;return(_this_transactionStorage_getStore=this.transactionStorage.getStore())!==null&&_this_transactionStorage_getStore!==void 0?_this_transactionStorage_getStore:new _transactioncontext.TransactionContext}},{key:"readKnexfile",value:function readKnexfile(){return _async_to_generator(function(){var dbConfigPath,_knexfileModule_default,knexfileModule,_knexfileModule_default_default,_ref,config,e;return _ts_generator(this,function(_state){switch(_state.label){case 0:dbConfigPath=_path.default.join(_api.Sonamu.apiRootPath,"/dist/configs/db.js");_state.label=1;case 1:_state.trys.push([1,3,,4]);return[4,Promise.resolve(dbConfigPath).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))})];case 2:knexfileModule=_state.sent();config=(_ref=(_knexfileModule_default_default=(_knexfileModule_default=knexfileModule.default)===null||_knexfileModule_default===void 0?void 0:_knexfileModule_default.default)!==null&&_knexfileModule_default_default!==void 0?_knexfileModule_default_default:knexfileModule.default)!==null&&_ref!==void 0?_ref:knexfileModule;return[2,this.generateDBConfig(config)];case 3:e=_state.sent();return[3,4];case 4:throw new _soexceptions.ServiceUnavailableException("다음 경로에서 DB설정 파일을 찾을 수 없습니다: ".concat(dbConfigPath,". 먼저 빌드(yarn build)를 수행해주세요."))}})}).call(this)}},{key:"getDB",value:function getDB(which){var dbConfig=_api.Sonamu.dbConfig;var instanceName=which==="w"?"wdb":"rdb";if(!this[instanceName]){var config;var _process_env_NODE_ENV;switch((_process_env_NODE_ENV=process.env.NODE_ENV)!==null&&_process_env_NODE_ENV!==void 0?_process_env_NODE_ENV:"development"){case"development":case"staging":var _dbConfig_development_slave;config=which==="w"?dbConfig["development_master"]:(_dbConfig_development_slave=dbConfig["development_slave"])!==null&&_dbConfig_development_slave!==void 0?_dbConfig_development_slave:dbConfig["development_master"];break;case"production":var _dbConfig_production_slave;config=which==="w"?dbConfig["production_master"]:(_dbConfig_production_slave=dbConfig["production_slave"])!==null&&_dbConfig_production_slave!==void 0?_dbConfig_production_slave:dbConfig["production_master"];break;case"test":config=dbConfig["test"];break;default:throw new Error("현재 ENV ".concat(process.env.NODE_ENV,"에는 설정 가능한 DB설정이 없습니다."))}this[instanceName]=(0,_knex.default)(config)}return this[instanceName]}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!(this.wdb!==undefined))return[3,2];return[4,this.wdb.destroy()];case 1:_state.sent();this.wdb=undefined;_state.label=2;case 2:if(!(this.rdb!==undefined))return[3,4];return[4,this.rdb.destroy()];case 3:_state.sent();this.rdb=undefined;_state.label=4;case 4:return[2]}})}).call(this)}},{key:"generateDBConfig",value:function generateDBConfig(config){var _config_defaultOptions,_config_defaultOptions1,_config_defaultOptions2,_config_environments,_config_environments1,_config_defaultOptions3,_config_environments2,_config_environments3;var defaultKnexConfig=_lodash.default.merge({client:"mysql2",pool:{min:1,max:5},migrations:{extension:"js",directory:"./dist/migrations"},connection:_object_spread({database:config.database},(_config_defaultOptions=config.defaultOptions)===null||_config_defaultOptions===void 0?void 0:_config_defaultOptions.connection)},config.defaultOptions);var test=_lodash.default.merge({},defaultKnexConfig,{connection:_object_spread({database:"".concat(config.database,"_test")},(_config_defaultOptions1=config.defaultOptions)===null||_config_defaultOptions1===void 0?void 0:_config_defaultOptions1.connection)});var fixture_local=_lodash.default.merge({},defaultKnexConfig,{connection:_object_spread({database:"".concat(config.database,"_fixture_local")},(_config_defaultOptions2=config.defaultOptions)===null||_config_defaultOptions2===void 0?void 0:_config_defaultOptions2.connection)});var devMasterOptions=(_config_environments=config.environments)===null||_config_environments===void 0?void 0:_config_environments.development;var devSlaveOptions=(_config_environments1=config.environments)===null||_config_environments1===void 0?void 0:_config_environments1.development_slave;var development_master=_lodash.default.merge({},defaultKnexConfig,devMasterOptions);var development_slave=_lodash.default.merge({},defaultKnexConfig,devMasterOptions,devSlaveOptions);var fixture_remote=_lodash.default.merge({},defaultKnexConfig,devMasterOptions,{connection:_object_spread({database:"".concat(config.database,"_fixture_remote")},(_config_defaultOptions3=config.defaultOptions)===null||_config_defaultOptions3===void 0?void 0:_config_defaultOptions3.connection)});var _config_environments_production;var prodMasterOptions=(_config_environments_production=(_config_environments2=config.environments)===null||_config_environments2===void 0?void 0:_config_environments2.production)!==null&&_config_environments_production!==void 0?_config_environments_production:{};var _config_environments_production_slave;var prodSlaveOptions=(_config_environments_production_slave=(_config_environments3=config.environments)===null||_config_environments3===void 0?void 0:_config_environments3.production_slave)!==null&&_config_environments_production_slave!==void 0?_config_environments_production_slave:{};var production_master=_lodash.default.merge({},defaultKnexConfig,prodMasterOptions);var production_slave=_lodash.default.merge({},defaultKnexConfig,prodMasterOptions,prodSlaveOptions);return{test:test,fixture_local:fixture_local,fixture_remote:fixture_remote,development_master:development_master,development_slave:development_slave,production_master:production_master,production_slave:production_slave}}}]);return DBClass}();var DB=new DBClass;
|
|
2
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/database/db.ts"],"sourcesContent":["export type DBPreset = \"w\" | \"r\";\nimport knex, { Knex } from \"knex\";\nimport path from \"path\";\nimport _ from \"lodash\";\nimport { Sonamu } from \"../api\";\nimport { ServiceUnavailableException } from \"../exceptions/so-exceptions\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { TransactionContext } from \"./transaction-context\";\n\ntype MySQLConfig = Omit<Knex.Config, \"connection\"> & {\n connection?: Knex.MySql2ConnectionConfig;\n};\n\nexport type SonamuDBBaseConfig = {\n // 기본 데이터베이스 이름\n database: string;\n\n // 모든 환경에 적용될 기본 Knex 옵션\n defaultOptions?: MySQLConfig;\n\n // 환경별 설정\n environments?: {\n development?: MySQLConfig;\n development_slave?: MySQLConfig;\n production?: MySQLConfig;\n production_slave?: MySQLConfig;\n };\n};\n\nexport type SonamuDBConfig = {\n development_master: Knex.Config;\n development_slave: Knex.Config;\n test: Knex.Config;\n fixture_local: Knex.Config;\n fixture_remote: Knex.Config;\n production_master: Knex.Config;\n production_slave: Knex.Config;\n};\n\nclass DBClass {\n private wdb?: Knex;\n private rdb?: Knex;\n\n public transactionStorage = new AsyncLocalStorage<TransactionContext>();\n\n public runWithTransaction<T>(callback: () => Promise<T>): Promise<T> {\n return this.transactionStorage.run(new TransactionContext(), callback);\n }\n\n public getTransactionContext(): TransactionContext {\n return this.transactionStorage.getStore() ?? new TransactionContext();\n }\n\n async readKnexfile(): Promise<SonamuDBConfig> {\n const dbConfigPath: string = path.join(\n Sonamu.apiRootPath,\n \"/dist/configs/db.js\"\n );\n try {\n const knexfileModule = await import(dbConfigPath);\n const config =\n knexfileModule.default?.default ??\n knexfileModule.default ??\n knexfileModule;\n return this.generateDBConfig(config);\n } catch {}\n\n throw new ServiceUnavailableException(\n `다음 경로에서 DB설정 파일을 찾을 수 없습니다: ${dbConfigPath}. 먼저 빌드(yarn build)를 수행해주세요.`\n );\n }\n\n getDB(which: DBPreset): Knex {\n const dbConfig = Sonamu.dbConfig;\n\n const instanceName = which === \"w\" ? \"wdb\" : \"rdb\";\n\n if (!this[instanceName]) {\n let config: Knex.Config;\n switch (process.env.NODE_ENV ?? \"development\") {\n case \"development\":\n case \"staging\":\n config =\n which === \"w\"\n ? dbConfig[\"development_master\"]\n : dbConfig[\"development_slave\"] ?? dbConfig[\"development_master\"];\n break;\n case \"production\":\n config =\n which === \"w\"\n ? dbConfig[\"production_master\"]\n : dbConfig[\"production_slave\"] ?? dbConfig[\"production_master\"];\n break;\n case \"test\":\n config = dbConfig[\"test\"];\n break;\n default:\n throw new Error(\n `현재 ENV ${process.env.NODE_ENV}에는 설정 가능한 DB설정이 없습니다.`\n );\n }\n this[instanceName] = knex(config);\n }\n\n return this[instanceName]!;\n }\n\n async destroy(): Promise<void> {\n if (this.wdb !== undefined) {\n await this.wdb.destroy();\n this.wdb = undefined;\n }\n if (this.rdb !== undefined) {\n await this.rdb.destroy();\n this.rdb = undefined;\n }\n }\n\n private generateDBConfig(config: SonamuDBBaseConfig): SonamuDBConfig {\n const defaultKnexConfig: Partial<MySQLConfig> = _.merge(\n {\n client: \"mysql2\",\n pool: {\n min: 1,\n max: 5,\n },\n migrations: {\n extension: \"js\",\n directory: \"./dist/migrations\",\n },\n connection: {\n database: config.database,\n ...config.defaultOptions?.connection,\n },\n },\n config.defaultOptions\n );\n\n // 로컬 환경 설정\n const test: MySQLConfig = _.merge({}, defaultKnexConfig, {\n connection: {\n database: `${config.database}_test`,\n ...config.defaultOptions?.connection,\n },\n });\n\n const fixture_local = _.merge({}, defaultKnexConfig, {\n connection: {\n database: `${config.database}_fixture_local`,\n ...config.defaultOptions?.connection,\n },\n });\n\n // 개발 환경 설정\n const devMasterOptions = config.environments?.development;\n const devSlaveOptions = config.environments?.development_slave;\n const development_master = _.merge({}, defaultKnexConfig, devMasterOptions);\n const development_slave = _.merge(\n {},\n defaultKnexConfig,\n devMasterOptions,\n devSlaveOptions\n );\n const fixture_remote = _.merge({}, defaultKnexConfig, devMasterOptions, {\n connection: {\n database: `${config.database}_fixture_remote`,\n ...config.defaultOptions?.connection,\n },\n });\n\n // 프로덕션 환경 설정\n const prodMasterOptions = config.environments?.production ?? {};\n const prodSlaveOptions = config.environments?.production_slave ?? {};\n const production_master = _.merge({}, defaultKnexConfig, prodMasterOptions);\n const production_slave = _.merge(\n {},\n defaultKnexConfig,\n prodMasterOptions,\n prodSlaveOptions\n );\n\n return {\n test,\n fixture_local,\n fixture_remote,\n development_master,\n development_slave,\n production_master,\n production_slave,\n };\n }\n}\nexport const DB = new DBClass();\n"],"names":["DB","DBClass","wdb","rdb","transactionStorage","AsyncLocalStorage","runWithTransaction","callback","run","TransactionContext","getTransactionContext","getStore","readKnexfile","dbConfigPath","knexfileModule","config","path","join","Sonamu","apiRootPath","default","generateDBConfig","ServiceUnavailableException","getDB","which","dbConfig","instanceName","process","env","NODE_ENV","Error","knex","destroy","undefined","defaultKnexConfig","_","merge","client","pool","min","max","migrations","extension","directory","connection","database","defaultOptions","test","fixture_local","devMasterOptions","environments","development","devSlaveOptions","development_slave","development_master","fixture_remote","prodMasterOptions","production","prodSlaveOptions","production_slave","production_master"],"mappings":"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"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkUZ2IY5VEjs = require('../../../chunk-UZ2IY5VE.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkEXHKSVTEjs = require('../../../chunk-EXHKSVTE.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunk2WAC2GERjs = require('../../../chunk-2WAC2GER.js');
|
|
11
11
|
|
|
12
12
|
// src/database/drivers/knex/base-model.ts
|
|
13
|
-
var BaseModelClass = class extends
|
|
13
|
+
var BaseModelClass = class extends _chunkUZ2IY5VEjs.BaseModelClassAbstract {
|
|
14
14
|
getDB(which) {
|
|
15
|
-
return
|
|
15
|
+
return _chunk2WAC2GERjs.DB.getDB(which);
|
|
16
16
|
}
|
|
17
17
|
async destroy() {
|
|
18
|
-
return
|
|
18
|
+
return _chunk2WAC2GERjs.DB.destroy();
|
|
19
19
|
}
|
|
20
20
|
getUpsertBuilder() {
|
|
21
|
-
return new (0,
|
|
21
|
+
return new (0, _chunkEXHKSVTEjs.UpsertBuilder)();
|
|
22
22
|
}
|
|
23
23
|
applyJoins(clonedQb, joins) {
|
|
24
24
|
for (const join of joins) {
|
|
25
|
-
if (
|
|
25
|
+
if (_chunk2WAC2GERjs.isCustomJoinClause.call(void 0, join)) {
|
|
26
26
|
if (join.join === "inner") {
|
|
27
27
|
clonedQb.qb = clonedQb.qb.innerJoin(
|
|
28
28
|
`${join.table} as ${join.as}`,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseModelClassAbstract
|
|
3
|
-
} from "../../../chunk-
|
|
3
|
+
} from "../../../chunk-HGIBJYOU.mjs";
|
|
4
4
|
import {
|
|
5
5
|
UpsertBuilder
|
|
6
|
-
} from "../../../chunk-
|
|
6
|
+
} from "../../../chunk-JKSOJRQA.mjs";
|
|
7
7
|
import {
|
|
8
8
|
DB,
|
|
9
9
|
isCustomJoinClause
|
|
10
|
-
} from "../../../chunk-
|
|
10
|
+
} from "../../../chunk-FCERKIIF.mjs";
|
|
11
11
|
import "../../../chunk-PTFDTOJU.mjs";
|
|
12
12
|
|
|
13
13
|
// src/database/drivers/knex/base-model.ts
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkUZ2IY5VEjs = require('../../../chunk-UZ2IY5VE.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkEXHKSVTEjs = require('../../../chunk-EXHKSVTE.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunk2WAC2GERjs = require('../../../chunk-2WAC2GER.js');
|
|
12
12
|
|
|
13
13
|
// src/database/drivers/kysely/base-model.ts
|
|
14
14
|
var _inflection = require('inflection'); var _inflection2 = _interopRequireDefault(_inflection);
|
|
15
|
-
var BaseModelClass = class extends
|
|
15
|
+
var BaseModelClass = class extends _chunkUZ2IY5VEjs.BaseModelClassAbstract {
|
|
16
16
|
getDB(which) {
|
|
17
|
-
return
|
|
17
|
+
return _chunk2WAC2GERjs.DB.getDB(which);
|
|
18
18
|
}
|
|
19
19
|
async destroy() {
|
|
20
|
-
return
|
|
20
|
+
return _chunk2WAC2GERjs.DB.destroy();
|
|
21
21
|
}
|
|
22
22
|
getUpsertBuilder() {
|
|
23
|
-
return new (0,
|
|
23
|
+
return new (0, _chunkEXHKSVTEjs.UpsertBuilder)();
|
|
24
24
|
}
|
|
25
25
|
applyJoins(clonedQb, joins) {
|
|
26
26
|
for (const join of joins) {
|
|
27
|
-
if (
|
|
27
|
+
if (_chunk2WAC2GERjs.isCustomJoinClause.call(void 0, join)) {
|
|
28
28
|
throw new Error("Custom join clause is not supported in Kysely");
|
|
29
29
|
}
|
|
30
30
|
if (join.join === "inner") {
|
|
@@ -48,7 +48,7 @@ var BaseModelClass = class extends _chunkJ6S43O7Gjs.BaseModelClassAbstract {
|
|
|
48
48
|
if (!column) {
|
|
49
49
|
throw new Error("parseOrderBy: Invalid column");
|
|
50
50
|
}
|
|
51
|
-
const entity =
|
|
51
|
+
const entity = _chunk2WAC2GERjs.EntityManager.get(_inflection2.default.classify(table));
|
|
52
52
|
if (!entity.props.find((p) => p.name === column)) {
|
|
53
53
|
throw new Error("parseOrderBy: \uD604\uC7AC \uC5D4\uD2F0\uD2F0\uC5D0 \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uCEEC\uB7FC\uC785\uB2C8\uB2E4: ");
|
|
54
54
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseModelClassAbstract
|
|
3
|
-
} from "../../../chunk-
|
|
3
|
+
} from "../../../chunk-HGIBJYOU.mjs";
|
|
4
4
|
import {
|
|
5
5
|
UpsertBuilder
|
|
6
|
-
} from "../../../chunk-
|
|
6
|
+
} from "../../../chunk-JKSOJRQA.mjs";
|
|
7
7
|
import {
|
|
8
8
|
DB,
|
|
9
9
|
EntityManager,
|
|
10
10
|
isCustomJoinClause
|
|
11
|
-
} from "../../../chunk-
|
|
11
|
+
} from "../../../chunk-FCERKIIF.mjs";
|
|
12
12
|
import "../../../chunk-PTFDTOJU.mjs";
|
|
13
13
|
|
|
14
14
|
// src/database/drivers/kysely/base-model.ts
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knex-on-duplicate-update.d.ts","sourceRoot":"","sources":["../../../src/database/knex-plugins/knex-on-duplicate-update.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,SA0CtC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"attachOnDuplicateUpdate",{enumerable:true,get:function(){return attachOnDuplicateUpdate}});var _knex=/*#__PURE__*/_interop_require_default(require("knex"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function attachOnDuplicateUpdate(){try{_knex.default.QueryBuilder.extend("onDuplicateUpdate",function(){for(var _len=arguments.length,columns=new Array(_len),_key=0;_key<_len;_key++){columns[_key]=arguments[_key]}if(columns.length===0){var _this_toSQL=this.toSQL(),originalSQL=_this_toSQL.sql,originalBindings=_this_toSQL.bindings;return this.client.raw(originalSQL,originalBindings)}var _columns_reduce=columns.reduce(function(result,column){if(typeof column==="string"){result.placeholders.push("?? = Values(??)");result.bindings.push(column,column)}else if(column&&(typeof column==="undefined"?"undefined":_type_of(column))==="object"){Object.keys(column).forEach(function(key){result.placeholders.push("?? = ?");result.bindings.push(key,column[key])})}else{throw new Error("onDuplicateUpdate error: expected column name to be string or object.")}return result},{placeholders:[],bindings:[]}),placeholders=_columns_reduce.placeholders,bindings=_columns_reduce.bindings;var _this_toSQL1=this.toSQL(),originalSQL1=_this_toSQL1.sql,originalBindings1=_this_toSQL1.bindings;var newBindings=_to_consumable_array(originalBindings1).concat(_to_consumable_array(bindings));return this.client.raw("".concat(originalSQL1," ON DUPLICATE KEY UPDATE ").concat(placeholders.join(", ")),newBindings)})}catch(e){}}
|
|
2
|
+
//# sourceMappingURL=knex-on-duplicate-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/database/knex-plugins/knex-on-duplicate-update.ts"],"sourcesContent":["import knex from \"knex\";\n\nexport function attachOnDuplicateUpdate() {\n try {\n knex.QueryBuilder.extend(\"onDuplicateUpdate\", function (...columns) {\n if (columns.length === 0) {\n // 업데이트 할 컬럼이 없으면 onDuplicateUpdate 구문 처리 패스\n const { sql: originalSQL, bindings: originalBindings } = this.toSQL();\n return this.client.raw(originalSQL, originalBindings);\n }\n\n const { placeholders, bindings } = columns.reduce(\n (result, column) => {\n if (typeof column === \"string\") {\n result.placeholders.push(`?? = Values(??)`);\n result.bindings.push(column, column);\n } else if (column && typeof column === \"object\") {\n Object.keys(column).forEach((key) => {\n result.placeholders.push(`?? = ?`);\n result.bindings.push(key, column[key]);\n });\n } else {\n throw new Error(\n \"onDuplicateUpdate error: expected column name to be string or object.\"\n );\n }\n\n return result;\n },\n { placeholders: [], bindings: [] }\n );\n\n const { sql: originalSQL, bindings: originalBindings } = this.toSQL();\n\n const newBindings = [...originalBindings, ...bindings];\n\n return this.client.raw(\n `${originalSQL} ON DUPLICATE KEY UPDATE ${placeholders.join(\", \")}`,\n newBindings\n );\n });\n } catch {\n // ignored\n }\n}"],"names":["attachOnDuplicateUpdate","knex","QueryBuilder","extend","columns","length","toSQL","sql","originalSQL","bindings","originalBindings","client","raw","reduce","result","column","placeholders","push","Object","keys","forEach","key","Error","newBindings","join"],"mappings":"oGAEgBA,iEAAAA,mFAFC,yzCAEV,SAASA,0BACd,GAAI,CACFC,aAAI,CAACC,YAAY,CAACC,MAAM,CAAC,oBAAqB,WAAU,IAAA,IAAA,KAAA,UAAA,OAAA,AAAGC,QAAH,UAAA,MAAA,KAAA,EAAA,KAAA,KAAA,QAAGA,QAAH,MAAA,SAAA,CAAA,KAAU,CAChE,GAAIA,QAAQC,MAAM,GAAK,EAAG,CAExB,IAAyD,YAAA,IAAI,CAACC,KAAK,GAA3DC,AAAKC,YAA4C,YAAjDD,IAAkBE,AAAUC,iBAAqB,YAA/BD,SAC1B,OAAO,IAAI,CAACE,MAAM,CAACC,GAAG,CAACJ,YAAaE,iBACtC,CAEA,IAAmCN,gBAAAA,QAAQS,MAAM,CAC/C,SAACC,OAAQC,QACP,GAAI,OAAOA,SAAW,SAAU,CAC9BD,OAAOE,YAAY,CAACC,IAAI,CAAC,mBACzBH,OAAOL,QAAQ,CAACQ,IAAI,CAACF,OAAQA,OAC/B,MAAO,GAAIA,QAAU,CAAA,OAAOA,iCAAP,SAAOA,OAAK,IAAM,SAAU,CAC/CG,OAAOC,IAAI,CAACJ,QAAQK,OAAO,CAAC,SAACC,KAC3BP,OAAOE,YAAY,CAACC,IAAI,CAAC,UACzBH,OAAOL,QAAQ,CAACQ,IAAI,CAACI,IAAKN,MAAM,CAACM,IAAI,CACvC,EACF,KAAO,CACL,MAAM,IAAIC,MACR,wEAEJ,CAEA,OAAOR,MACT,EACA,CAAEE,aAAc,EAAE,CAAEP,SAAU,EAAE,AAAC,GAlB3BO,aAA2BZ,gBAA3BY,aAAcP,SAAaL,gBAAbK,SAqBtB,IAAyD,aAAA,IAAI,CAACH,KAAK,GAA3DC,AAAKC,aAA4C,aAAjDD,IAAkBE,AAAUC,kBAAqB,aAA/BD,SAE1B,IAAMc,YAAc,AAAC,qBAAGb,0BAAkB,qBAAGD,WAE7C,OAAO,IAAI,CAACE,MAAM,CAACC,GAAG,CACpB,AAAC,GAAyCI,OAAvCR,aAAY,6BAAmD,OAAxBQ,aAAaQ,IAAI,CAAC,OAC5DD,YAEJ,EACF,CAAE,QAAM,CAER,CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Knex } from "knex";
|
|
2
|
+
import { Puri } from "./puri";
|
|
3
|
+
import { UBRef, UpsertBuilder } from "./upsert-builder";
|
|
4
|
+
import { DatabaseSchemaExtend } from "../types/types";
|
|
5
|
+
import { DBPreset } from "./db";
|
|
6
|
+
type TableName<DBSchema extends DatabaseSchemaExtend> = Extract<keyof DBSchema, string>;
|
|
7
|
+
export type TransactionalOptions = {
|
|
8
|
+
isolation?: Exclude<Knex.IsolationLevels, "snapshot">;
|
|
9
|
+
dbPreset?: DBPreset;
|
|
10
|
+
readOnly?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare class PuriWrapper<DBSchema extends DatabaseSchemaExtend = DatabaseSchemaExtend> {
|
|
13
|
+
knex: Knex;
|
|
14
|
+
upsertBuilder: UpsertBuilder;
|
|
15
|
+
constructor(knex: Knex, upsertBuilder: UpsertBuilder);
|
|
16
|
+
raw(sql: string): Knex.Raw;
|
|
17
|
+
table<TTable extends TableName<DBSchema>>(tableName: TTable): Puri<DBSchema, TTable>;
|
|
18
|
+
fromSubquery<TSubResult, TAlias extends string>(subquery: Puri<DBSchema, any, any, TSubResult, any>, alias: TAlias extends string ? TAlias : never): Puri<DBSchema, TAlias, TSubResult, TSubResult, {}>;
|
|
19
|
+
transaction<T>(callback: (trx: PuriWrapper) => Promise<T>, options?: TransactionalOptions): Promise<T>;
|
|
20
|
+
ubRegister<TTable extends TableName<DBSchema>>(tableName: TTable, row: Partial<{
|
|
21
|
+
[K in keyof DBSchema[TTable]]: DBSchema[TTable][K] | UBRef;
|
|
22
|
+
}>): UBRef;
|
|
23
|
+
ubUpsert(tableName: TableName<DBSchema>, chunkSize?: number): Promise<number[]>;
|
|
24
|
+
ubInsertOnly(tableName: TableName<DBSchema>, chunkSize?: number): Promise<number[]>;
|
|
25
|
+
ubUpsertOrInsert(tableName: TableName<DBSchema>, mode: "upsert" | "insert", chunkSize?: number): Promise<number[]>;
|
|
26
|
+
ubUpdateBatch(tableName: TableName<DBSchema>, options?: {
|
|
27
|
+
chunkSize?: number;
|
|
28
|
+
where?: string | string[];
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
debugTransaction(): Promise<void>;
|
|
31
|
+
private getTransactionInfo;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=puri-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puri-wrapper.d.ts","sourceRoot":"","sources":["../../src/database/puri-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,KAAK,SAAS,CAAC,QAAQ,SAAS,oBAAoB,IAAI,OAAO,CAC7D,MAAM,QAAQ,EACd,MAAM,CACP,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,WAAW,CACtB,QAAQ,SAAS,oBAAoB,GAAG,oBAAoB;IAEzC,IAAI,EAAE,IAAI;IAAS,aAAa,EAAE,aAAa;gBAA/C,IAAI,EAAE,IAAI,EAAS,aAAa,EAAE,aAAa;IAElE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAI1B,KAAK,CAAC,MAAM,SAAS,SAAS,CAAC,QAAQ,CAAC,EACtC,SAAS,EAAE,MAAM,GAChB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;IAKzB,YAAY,CAAC,UAAU,EAAE,MAAM,SAAS,MAAM,EAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,EACnD,KAAK,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,GAC5C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;IAI/C,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,CAAC;IAWb,UAAU,CAAC,MAAM,SAAS,SAAS,CAAC,QAAQ,CAAC,EAC3C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,CAAC;SACV,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;KAC3D,CAAC,GACD,KAAK;IAIR,QAAQ,CACN,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpB,YAAY,CACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpB,gBAAgB,CACd,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IASpB,aAAa,CACX,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GAC1D,OAAO,CAAC,IAAI,CAAC;IAKV,gBAAgB;YAKR,kBAAkB;CAwBjC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"PuriWrapper",{enumerable:true,get:function(){return PuriWrapper}});var _puri=require("./puri");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var PuriWrapper=/*#__PURE__*/function(){"use strict";function PuriWrapper(knex,upsertBuilder){_class_call_check(this,PuriWrapper);_define_property(this,"knex",void 0);_define_property(this,"upsertBuilder",void 0);this.knex=knex;this.upsertBuilder=upsertBuilder}_create_class(PuriWrapper,[{key:"raw",value:function raw(sql){return this.knex.raw(sql)}},{key:"table",value:function table(tableName){return new _puri.Puri(this.knex,tableName)}},{key:"fromSubquery",value:function fromSubquery(subquery,alias){return new _puri.Puri(this.knex,subquery,alias)}},{key:"transaction",value:function transaction(_0){return _async_to_generator(function(callback){var _this,options,isolation,readOnly;var _arguments=arguments;return _ts_generator(this,function(_state){_this=this;options=_arguments.length>1&&_arguments[1]!==void 0?_arguments[1]:{};isolation=options.isolation,readOnly=options.readOnly;return[2,this.knex.transaction(function(trx){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,callback(new PuriWrapper(trx,this.upsertBuilder))]})}).call(_this)},{isolationLevel:isolation,readOnly:readOnly})]})}).apply(this,arguments)}},{key:"ubRegister",value:function ubRegister(tableName,row){return this.upsertBuilder.register(tableName,row)}},{key:"ubUpsert",value:function ubUpsert(tableName,chunkSize){return this.upsertBuilder.upsert(this.knex,tableName,chunkSize)}},{key:"ubInsertOnly",value:function ubInsertOnly(tableName,chunkSize){return this.upsertBuilder.insertOnly(this.knex,tableName,chunkSize)}},{key:"ubUpsertOrInsert",value:function ubUpsertOrInsert(tableName,mode,chunkSize){return this.upsertBuilder.upsertOrInsert(this.knex,tableName,mode,chunkSize)}},{key:"ubUpdateBatch",value:function ubUpdateBatch(tableName,options){return this.upsertBuilder.updateBatch(this.knex,tableName,options)}},{key:"debugTransaction",value:function debugTransaction(){return _async_to_generator(function(){var info;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getTransactionInfo()];case 1:info=_state.sent();console.log("".concat(_chalk.default.cyan("[Puri Transaction]")," ").concat(_chalk.default.magenta(info)));return[2]}})}).call(this)}},{key:"getTransactionInfo",value:function getTransactionInfo(){return _async_to_generator(function(){var _ref,connectionIdRows,connectionId,_ref1,trxRows,trx;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.knex.raw("SELECT CONNECTION_ID() as connection_id")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),connectionIdRows=_ref[0];connectionId=connectionIdRows[0].connection_id;return[4,this.knex.raw("\n SELECT STATE, ISOLATION_LEVEL, THREAD_ID, EVENT_ID\n FROM performance_schema.events_transactions_current\n WHERE THREAD_ID = \n (SELECT THREAD_ID\n FROM performance_schema.threads \n WHERE PROCESSLIST_ID = CONNECTION_ID())\n ")];case 2:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),trxRows=_ref1[0];if(trxRows.length>0&&trxRows[0].STATE!=="COMMITTED"){trx=trxRows[0];return[2,"In Transaction, ConnID: ".concat(connectionId,", ThreadID: ").concat(trx.THREAD_ID,", EventID: ").concat(trx.EVENT_ID,", InnoDB TRX: ").concat(trx.STATE,"(").concat(trx.ISOLATION_LEVEL,")")]}else{return[2,"Not in Transaction, ConnID: ".concat(connectionId)]}return[2]}})}).call(this)}}]);return PuriWrapper}();
|
|
2
|
+
//# sourceMappingURL=puri-wrapper.js.map
|