sonamu 0.4.14 → 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/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/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/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/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
|
@@ -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 UpsertBuilder(){return UpsertBuilder},get isRefField(){return isRefField}});var _crypto=require("crypto");var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _entitymanager=require("../entity/entity-manager");var _utils=require("../utils/utils");var _batch_update=require("./_batch_update");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 _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 _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}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 _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 _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 _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 _object_without_properties(source,excluded){if(source==null)return{};var target=_object_without_properties_loose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key]}}return target}function _object_without_properties_loose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key]}return target}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 _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 _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 isRefField(field){return field!==undefined&&field!==null&&field.of!==undefined&&field.uuid!==undefined}var UpsertBuilder=/*#__PURE__*/function(){"use strict";function UpsertBuilder(){_class_call_check(this,UpsertBuilder);_define_property(this,"tables",void 0);this.tables=new Map}_create_class(UpsertBuilder,[{key:"getTable",value:function getTable(tableName){var table=this.tables.get(tableName);if(table===undefined){var tableSpec=function(){try{return _entitymanager.EntityManager.getTableSpec(tableName)}catch(e){return null}}();var _tableSpec_uniqueIndexes;this.tables.set(tableName,{references:new Set,rows:[],uniqueIndexes:(_tableSpec_uniqueIndexes=tableSpec===null||tableSpec===void 0?void 0:tableSpec.uniqueIndexes)!==null&&_tableSpec_uniqueIndexes!==void 0?_tableSpec_uniqueIndexes:[],uniquesMap:new Map})}return this.tables.get(tableName)}},{key:"hasTable",value:function hasTable(tableName){return this.tables.has(tableName)}},{key:"register",value:function register(tableName,row){var table=this.getTable(tableName);var uniqueKeys=table.uniqueIndexes.map(function(unqIndex){var uniqueKeyArray=unqIndex.columns.map(function(unqCol){var val=row[unqCol];if(isRefField(val)){return val.uuid}else{var _row_unqCol;return(_row_unqCol=row[unqCol])!==null&&_row_unqCol!==void 0?_row_unqCol:(0,_crypto.randomUUID)()}});if(uniqueKeyArray.length===0){return null}return uniqueKeyArray.join("---delimiter--")}).filter(_utils.nonNullable);var uuid=function(){if(uniqueKeys.length>0){var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=uniqueKeys[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var uniqueKey=_step.value;if(table.uniquesMap.has(uniqueKey)){return table.uniquesMap.get(uniqueKey)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}return(0,_crypto.randomUUID)()}();if(uniqueKeys.length>0){var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=uniqueKeys[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var uniqueKey=_step.value;table.uniquesMap.set(uniqueKey,uuid)}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}row=Object.keys(row).reduce(function(r,rowKey){var rowValue=row[rowKey];if(isRefField(rowValue)){var _rowValue;var _use;(_use=(_rowValue=rowValue).use)!==null&&_use!==void 0?_use:_rowValue.use="id";table.references.add(rowValue.of+"."+rowValue.use);r[rowKey]=rowValue}else if((typeof rowValue==="undefined"?"undefined":_type_of(rowValue))==="object"&&!_instanceof(rowValue,Date)){r[rowKey]=rowValue===null?null:JSON.stringify(rowValue)}else{r[rowKey]=rowValue}return r},{});table.rows.push(_object_spread({uuid:uuid},row));var _row_uuid;return{of:tableName,uuid:(_row_uuid=row.uuid)!==null&&_row_uuid!==void 0?_row_uuid:uuid}}},{key:"upsert",value:function upsert(wdb,tableName,chunkSize){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.upsertOrInsert(wdb,tableName,"upsert",chunkSize)]})}).call(this)}},{key:"insertOnly",value:function insertOnly(wdb,tableName,chunkSize){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.upsertOrInsert(wdb,tableName,"insert",chunkSize)]})}).call(this)}},{key:"upsertOrInsert",value:function upsertOrInsert(wdb,tableName,mode,chunkSize){return _async_to_generator(function(){var table,_Array_from_reduce,references,refTables,extractFields,groups,_groups_normal,normalRows,_groups_selfRef,selfRefRows,chunks,uuidMap,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,chunk,q,uuids,upsertedRows,err,allIds,_allIds,selfRefIds;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.hasTable(tableName)===false){return[2,[]]}table=this.tables.get(tableName);if(table===undefined){throw new Error("존재하지 않는 테이블 ".concat(tableName,"에 upsert 요청"))}else if(table.rows.length===0){throw new Error("".concat(tableName,"에 upsert 할 데이터가 없습니다."))}if(table.rows.some(function(row){return Object.entries(row).some(function(param){var _param=_sliced_to_array(param,2),value=_param[1];return isRefField(value)&&value.of!==tableName})})){throw new Error("".concat(tableName," 해결되지 않은 참조가 있습니다."))}_Array_from_reduce=Array.from(this.tables).reduce(function(r,param){var _param=_sliced_to_array(param,2),table=_param[1];var reference=Array.from(table.references.values()).find(function(ref){return ref.includes(tableName+".")});if(reference){r.references.push(reference);r.refTables.push(table)}return r},{references:[],refTables:[]}),references=_Array_from_reduce.references,refTables=_Array_from_reduce.refTables;extractFields=_lodash.default.uniq(references).map(function(reference){return reference.split(".")[1]});groups=_lodash.default.groupBy(table.rows,function(row){return Object.entries(row).some(function(param){var _param=_sliced_to_array(param,2),value=_param[1];return isRefField(value)})?"selfRef":"normal"});normalRows=(_groups_normal=groups.normal)!==null&&_groups_normal!==void 0?_groups_normal:[];selfRefRows=(_groups_selfRef=groups.selfRef)!==null&&_groups_selfRef!==void 0?_groups_selfRef:[];chunks=chunkSize?_lodash.default.chunk(normalRows,chunkSize):[normalRows];uuidMap=new Map;_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,10,11,12]);_iterator=chunks[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,9];chunk=_step.value;q=wdb.insert(chunk).into(tableName);if(!(mode==="insert"))return[3,4];return[4,q];case 3:_state.sent();return[3,6];case 4:if(!(mode==="upsert"))return[3,6];return[4,q.onDuplicateUpdate.apply(q,Object.keys(normalRows[0]))];case 5:_state.sent();_state.label=6;case 6:uuids=chunk.map(function(row){return row.uuid});return[4,wdb(tableName).select(_lodash.default.uniq(["uuid","id"].concat(_to_consumable_array(extractFields)))).whereIn("uuid",uuids)];case 7:upsertedRows=_state.sent();upsertedRows.forEach(function(row){uuidMap.set(row.uuid,row)});_state.label=8;case 8:_iteratorNormalCompletion=true;return[3,2];case 9:return[3,12];case 10:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,12];case 11:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 12:refTables.map(function(table){table.rows=table.rows.map(function(row){Object.keys(row).map(function(key){var prop=row[key];if(isRefField(prop)&&prop.of===tableName){var parent=uuidMap.get(prop.uuid);if(parent===undefined){console.error(prop);throw new Error("존재하지 않는 uuid ".concat(prop.uuid," -- in ").concat(tableName))}var _prop_use;row[key]=parent[(_prop_use=prop.use)!==null&&_prop_use!==void 0?_prop_use:"id"]}});return row})});allIds=Array.from(uuidMap.values()).map(function(row){return row.id});if(!(selfRefRows.length>0))return[3,14];table.rows=selfRefRows;return[4,this.upsert(wdb,tableName,chunkSize)];case 13:selfRefIds=_state.sent();(_allIds=allIds).push.apply(_allIds,_to_consumable_array(selfRefIds));return[3,15];case 14:table.rows=[];table.references.clear();table.uniquesMap.clear();_state.label=15;case 15:return[2,allIds]}})}).call(this)}},{key:"updateBatch",value:function updateBatch(wdb,tableName,options){return _async_to_generator(function(){var table,_options_where,whereColumns,rows;return _ts_generator(this,function(_state){switch(_state.label){case 0:options=_lodash.default.defaults(options,{chunkSize:500,where:"id"});if(this.hasTable(tableName)===false){return[2]}table=this.tables.get(tableName);if(table.rows.length===0){return[2]}whereColumns=Array.isArray(options.where)?options.where:[(_options_where=options.where)!==null&&_options_where!==void 0?_options_where:"id"];rows=table.rows.map(function(_row){var uuid=_row.uuid,row=_object_without_properties(_row,["uuid"]);return row});return[4,(0,_batch_update.batchUpdate)(wdb,tableName,whereColumns,rows,options.chunkSize)];case 1:_state.sent();table.rows=[];table.references.clear();table.uniquesMap.clear();return[2]}})}).call(this)}}]);return UpsertBuilder}();
|
|
2
|
+
//# sourceMappingURL=upsert-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/database/upsert-builder.ts"],"sourcesContent":["import { randomUUID } from \"crypto\";\nimport _ from \"lodash\";\nimport { Knex } from \"knex\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { nonNullable } from \"../utils/utils\";\nimport { RowWithId, batchUpdate } from \"./_batch_update\";\n\ntype TableData = {\n references: Set<string>;\n rows: any[];\n uniqueIndexes: { name?: string; columns: string[] }[];\n uniquesMap: Map<string, string>;\n};\nexport type UBRef = {\n uuid: string;\n of: string;\n use?: string;\n};\nexport function isRefField(field: any): field is UBRef {\n return (\n field !== undefined &&\n field !== null &&\n field.of !== undefined &&\n field.uuid !== undefined\n );\n}\n\nexport class UpsertBuilder {\n tables: Map<string, TableData>;\n constructor() {\n this.tables = new Map();\n }\n\n getTable(tableName: string): TableData {\n const table = this.tables.get(tableName);\n if (table === undefined) {\n const tableSpec = (() => {\n try {\n return EntityManager.getTableSpec(tableName);\n } catch {\n return null;\n }\n })();\n\n this.tables.set(tableName, {\n references: new Set(),\n rows: [],\n uniqueIndexes: tableSpec?.uniqueIndexes ?? [],\n uniquesMap: new Map<string, string>(),\n });\n }\n\n return this.tables.get(tableName)!;\n }\n\n hasTable(tableName: string): boolean {\n return this.tables.has(tableName);\n }\n\n register<T extends string>(\n tableName: string,\n row: {\n [key in T]?:\n | UBRef\n | string\n | number\n | boolean\n | bigint\n | null\n | object\n | unknown;\n }\n ): UBRef {\n const table = this.getTable(tableName);\n\n // 해당 테이블의 unique 인덱스를 순회하며 키 생성\n const uniqueKeys = table.uniqueIndexes\n .map((unqIndex) => {\n const uniqueKeyArray = unqIndex.columns.map((unqCol) => {\n const val = row[unqCol as keyof typeof row];\n if (isRefField(val)) {\n return val.uuid;\n } else {\n return row[unqCol as keyof typeof row] ?? randomUUID(); // nullable인 경우 uuid로 랜덤값 삽입\n }\n });\n\n // 값이 모두 null인 경우 키 생성 패스\n if (uniqueKeyArray.length === 0) {\n return null;\n }\n return uniqueKeyArray.join(\"---delimiter--\");\n })\n .filter(nonNullable);\n\n // uuid 생성 로직\n const uuid: string = (() => {\n // 키를 순회하여 이미 존재하는 키가 있는지 확인\n if (uniqueKeys.length > 0) {\n for (const uniqueKey of uniqueKeys) {\n if (table.uniquesMap.has(uniqueKey)) {\n return table.uniquesMap.get(uniqueKey)!; // 이미 has 체크를 했으므로 undefined 불가능\n }\n }\n }\n\n // 찾을 수 없는 경우 생성\n return randomUUID();\n })();\n\n // 모든 유니크키에 대해 유니크맵에 uuid 저장\n if (uniqueKeys.length > 0) {\n for (const uniqueKey of uniqueKeys) {\n table.uniquesMap.set(uniqueKey, uuid);\n }\n }\n\n // 이 테이블에 사용된 RefField를 순회하여, 현재 테이블 정보에 어떤 필드를 참조하는지 추가\n // 이 정보를 나중에 치환할 때 사용\n row = Object.keys(row).reduce((r, rowKey) => {\n const rowValue = row[rowKey as keyof typeof row];\n\n if (isRefField(rowValue)) {\n rowValue.use ??= \"id\";\n table.references.add(rowValue.of + \".\" + rowValue.use);\n r[rowKey] = rowValue;\n } else if (typeof rowValue === \"object\" && !(rowValue instanceof Date)) {\n // object인 경우 JSON으로 변환\n r[rowKey] = rowValue === null ? null : JSON.stringify(rowValue);\n } else {\n r[rowKey] = rowValue;\n }\n return r;\n }, {} as any);\n\n table.rows.push({\n uuid,\n ...row,\n });\n\n return {\n of: tableName,\n uuid: (row as { uuid?: string }).uuid ?? uuid,\n };\n }\n\n async upsert(\n wdb: Knex,\n tableName: string,\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertOrInsert(wdb, tableName, \"upsert\", chunkSize);\n }\n async insertOnly(\n wdb: Knex,\n tableName: string,\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertOrInsert(wdb, tableName, \"insert\", chunkSize);\n }\n\n async upsertOrInsert(\n wdb: Knex,\n tableName: string,\n mode: \"upsert\" | \"insert\",\n chunkSize?: number\n ): Promise<number[]> {\n if (this.hasTable(tableName) === false) {\n return [];\n }\n\n const table = this.tables.get(tableName);\n if (table === undefined) {\n throw new Error(`존재하지 않는 테이블 ${tableName}에 upsert 요청`);\n } else if (table.rows.length === 0) {\n throw new Error(`${tableName}에 upsert 할 데이터가 없습니다.`);\n }\n\n if (\n table.rows.some((row) =>\n Object.entries(row).some(\n ([, value]) => isRefField(value) && value.of !== tableName\n )\n )\n ) {\n throw new Error(`${tableName} 해결되지 않은 참조가 있습니다.`);\n }\n\n // 전체 테이블 순회하여 현재 테이블 참조하는 모든 테이블 추출\n const { references, refTables } = Array.from(this.tables).reduce(\n (r, [, table]) => {\n const reference = Array.from(table.references.values()).find((ref) =>\n ref.includes(tableName + \".\")\n );\n if (reference) {\n r.references.push(reference);\n r.refTables.push(table);\n }\n\n return r;\n },\n {\n references: [] as string[],\n refTables: [] as TableData[],\n }\n );\n const extractFields = _.uniq(references).map(\n (reference) => reference.split(\".\")[1]\n );\n\n // 내부 참조 있는 경우 필터하여 분리\n const groups = _.groupBy(table.rows, (row) =>\n Object.entries(row).some(([, value]) => isRefField(value))\n ? \"selfRef\"\n : \"normal\"\n );\n const normalRows = groups.normal ?? [];\n const selfRefRows = groups.selfRef ?? [];\n\n const chunks = chunkSize ? _.chunk(normalRows, chunkSize) : [normalRows];\n const uuidMap = new Map<string, any>();\n\n for (const chunk of chunks) {\n const q = wdb.insert(chunk).into(tableName);\n if (mode === \"insert\") {\n await q;\n } else if (mode === \"upsert\") {\n await q.onDuplicateUpdate.apply(q, Object.keys(normalRows[0]));\n }\n\n // upsert된 row들을 다시 조회하여 uuidMap에 저장\n const uuids = chunk.map((row) => row.uuid);\n const upsertedRows = await wdb(tableName)\n .select(_.uniq([\"uuid\", \"id\", ...extractFields]))\n .whereIn(\"uuid\", uuids);\n upsertedRows.forEach((row: any) => {\n uuidMap.set(row.uuid, row);\n });\n }\n\n // 해당 테이블 참조를 실제 밸류로 변경\n refTables.map((table) => {\n table.rows = table.rows.map((row) => {\n Object.keys(row).map((key) => {\n const prop = row[key];\n if (isRefField(prop) && prop.of === tableName) {\n const parent = uuidMap.get(prop.uuid);\n if (parent === undefined) {\n console.error(prop);\n throw new Error(\n `존재하지 않는 uuid ${prop.uuid} -- in ${tableName}`\n );\n }\n row[key] = parent[prop.use ?? \"id\"];\n }\n });\n return row;\n });\n });\n\n const allIds = Array.from(uuidMap.values()).map((row) => row.id);\n\n // 자기 참조가 있는 경우 재귀적으로 upsert\n if (selfRefRows.length > 0) {\n // 처리된 데이터를 제외하고 다시 upsert\n table.rows = selfRefRows;\n const selfRefIds = await this.upsert(wdb, tableName, chunkSize);\n allIds.push(...selfRefIds);\n } else {\n // 자기 참조가 없으면 해당 테이블의 데이터 초기화\n table.rows = [];\n table.references.clear();\n table.uniquesMap.clear();\n }\n\n return allIds;\n }\n\n async updateBatch(\n wdb: Knex,\n tableName: string,\n options?: {\n chunkSize?: number;\n where?: string | string[];\n }\n ): Promise<void> {\n options = _.defaults(options, {\n chunkSize: 500,\n where: \"id\",\n });\n\n if (this.hasTable(tableName) === false) {\n return;\n }\n const table = this.tables.get(tableName)!;\n if (table.rows.length === 0) {\n return;\n }\n\n const whereColumns = Array.isArray(options.where)\n ? options.where\n : [options.where ?? \"id\"];\n const rows = table.rows.map((_row) => {\n const { uuid, ...row } = _row;\n return row as RowWithId<string>;\n });\n\n await batchUpdate(wdb, tableName, whereColumns, rows, options.chunkSize);\n\n // updateBatch 완료 후 처리된 데이터 제거\n table.rows = [];\n table.references.clear();\n table.uniquesMap.clear();\n }\n}\n"],"names":["UpsertBuilder","isRefField","field","undefined","of","uuid","tables","Map","getTable","tableName","table","get","tableSpec","EntityManager","getTableSpec","set","references","Set","rows","uniqueIndexes","uniquesMap","hasTable","has","register","row","uniqueKeys","map","unqIndex","uniqueKeyArray","columns","unqCol","val","randomUUID","length","join","filter","nonNullable","uniqueKey","Object","keys","reduce","r","rowKey","rowValue","use","add","Date","JSON","stringify","push","upsert","wdb","chunkSize","upsertOrInsert","insertOnly","mode","Array","refTables","extractFields","groups","normalRows","selfRefRows","chunks","uuidMap","chunk","q","uuids","upsertedRows","allIds","selfRefIds","Error","some","entries","value","from","reference","values","find","ref","includes","_","uniq","split","groupBy","normal","selfRef","insert","into","onDuplicateUpdate","apply","select","whereIn","forEach","key","prop","parent","console","error","id","clear","updateBatch","options","whereColumns","defaults","where","isArray","_row","batchUpdate"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Entity } from "./entity";
|
|
2
|
+
import { EntityJson } from "../types/types";
|
|
3
|
+
export type EntityNamesRecord = Record<"fs" | "fsPlural" | "camel" | "camelPlural" | "capital" | "capitalPlural" | "upper" | "constant", string>;
|
|
4
|
+
type TableSpec = {
|
|
5
|
+
name: string;
|
|
6
|
+
uniqueIndexes: {
|
|
7
|
+
name?: string;
|
|
8
|
+
columns: string[];
|
|
9
|
+
}[];
|
|
10
|
+
};
|
|
11
|
+
declare class EntityManagerClass {
|
|
12
|
+
private entities;
|
|
13
|
+
modulePaths: Map<string, string>;
|
|
14
|
+
private tableSpecs;
|
|
15
|
+
isAutoloaded: boolean;
|
|
16
|
+
autoload(doSilent?: boolean): Promise<void>;
|
|
17
|
+
reload(doSilent?: boolean): Promise<void>;
|
|
18
|
+
register(json: EntityJson): Promise<void>;
|
|
19
|
+
get(entityId: string): Entity;
|
|
20
|
+
exists(entityId: string): boolean;
|
|
21
|
+
getAllIds(): string[];
|
|
22
|
+
getAllParentIds(): string[];
|
|
23
|
+
getChildrenIds(parentId: string): string[];
|
|
24
|
+
setModulePath(key: string, modulePath: string): void;
|
|
25
|
+
getModulePath(key: string): string;
|
|
26
|
+
setTableSpec(tableSpec: TableSpec): void;
|
|
27
|
+
getTableSpec(key: string): TableSpec;
|
|
28
|
+
getNamesFromId(entityId: string): EntityNamesRecord;
|
|
29
|
+
}
|
|
30
|
+
export declare const EntityManager: EntityManagerClass;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=entity-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAClC,IAAI,GACJ,UAAU,GACV,OAAO,GACP,aAAa,GACb,SAAS,GACT,eAAe,GACf,OAAO,GACP,UAAU,EACZ,MAAM,CACP,CAAC;AACF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CACvD,CAAC;AACF,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAkC;IAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACpD,OAAO,CAAC,UAAU,CAAqC;IAChD,YAAY,EAAE,OAAO,CAAS;IAG/B,QAAQ,CAAC,QAAQ,GAAE,OAAe;IAgBlC,MAAM,CAAC,QAAQ,GAAE,OAAe;IAmBhC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS7B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjC,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe,IAAI,MAAM,EAAE;IAO3B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAO1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASlC,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;CAoBpD;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"EntityManager",{enumerable:true,get:function(){return EntityManager}});var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _promises=require("fs/promises");var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _path=/*#__PURE__*/_interop_require_default(require("path"));var _entity=require("./entity");var _sonamu=require("../api/sonamu");function _async_iterator(iterable){var method,async,sync,retry=2;for("undefined"!=typeof Symbol&&(async=Symbol.asyncIterator,sync=Symbol.iterator);retry--;){if(async&&null!=(method=iterable[async]))return method.call(iterable);if(sync&&null!=(method=iterable[sync]))return new AsyncFromSyncIterator(method.call(iterable));async="@@asyncIterator",sync="@@iterator"}throw new TypeError("Object is not async iterable")}function AsyncFromSyncIterator(s){function AsyncFromSyncIteratorContinuation(r){if(Object(r)!==r)return Promise.reject(new TypeError(r+" is not an object."));var done=r.done;return Promise.resolve(r.value).then(function(value){return{value:value,done:done}})}return AsyncFromSyncIterator=function(s){this.s=s,this.n=s.next},AsyncFromSyncIterator.prototype={s:null,n:null,next:function(){return AsyncFromSyncIteratorContinuation(this.n.apply(this.s,arguments))},return:function(value){var ret=this.s.return;return void 0===ret?Promise.resolve({value:value,done:!0}):AsyncFromSyncIteratorContinuation(ret.apply(this.s,arguments))},throw:function(value){var thr=this.s.return;return void 0===thr?Promise.reject(value):AsyncFromSyncIteratorContinuation(thr.apply(this.s,arguments))}},new AsyncFromSyncIterator(s)}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 _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 EntityManagerClass=/*#__PURE__*/function(){"use strict";function EntityManagerClass(){_class_call_check(this,EntityManagerClass);_define_property(this,"entities",new Map);_define_property(this,"modulePaths",new Map);_define_property(this,"tableSpecs",new Map);_define_property(this,"isAutoloaded",false)}_create_class(EntityManagerClass,[{key:"autoload",value:function autoload(){var doSilent=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false;return _async_to_generator(function(){var pathPattern,_iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,file,_,_1,_2,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.isAutoloaded){return[2]}pathPattern=_path.default.join(_sonamu.Sonamu.apiRootPath,"/src/application/**/*.entity.json");!doSilent&&console.log(_chalk.default.yellow("autoload ".concat(pathPattern)));_iteratorAbruptCompletion=false,_didIteratorError=false;_state.label=1;case 1:_state.trys.push([1,8,9,14]);_iterator=_async_iterator((0,_promises.glob)(_path.default.resolve(pathPattern)));_state.label=2;case 2:return[4,_iterator.next()];case 3:if(!(_iteratorAbruptCompletion=!(_step=_state.sent()).done))return[3,7];_value=_step.value;file=_value;_1=(_=this).register;_2=JSON.parse;return[4,(0,_promises.readFile)(file)];case 4:return[4,_1.apply(_,[_2.apply(JSON,[_state.sent().toString()])])];case 5:_state.sent();_state.label=6;case 6:_iteratorAbruptCompletion=false;return[3,2];case 7:return[3,14];case 8:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,14];case 9:_state.trys.push([9,,12,13]);if(!(_iteratorAbruptCompletion&&_iterator.return!=null))return[3,11];return[4,_iterator.return()];case 10:_state.sent();_state.label=11;case 11:return[3,13];case 12:if(_didIteratorError){throw _iteratorError}return[7];case 13:return[7];case 14:this.isAutoloaded=true;return[2]}})}).call(this)}},{key:"reload",value:function reload(){var doSilent=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false;return _async_to_generator(function(){var _require,sonamuPath;return _ts_generator(this,function(_state){switch(_state.label){case 0:console.log("reload");this.entities.clear();this.modulePaths.clear();this.tableSpecs.clear();this.isAutoloaded=false;sonamuPath=_path.default.join(_sonamu.Sonamu.apiRootPath,"dist/application/sonamu.generated.js");if(((_require=require)===null||_require===void 0?void 0:_require.cache)&&require.cache[sonamuPath]){delete require.cache[sonamuPath]}return[4,this.autoload(doSilent)];case 1:return[2,_state.sent()]}})}).call(this)}},{key:"register",value:function register(json){return _async_to_generator(function(){var entity;return _ts_generator(this,function(_state){switch(_state.label){case 0:entity=new _entity.Entity(json);return[4,entity.registerModulePaths()];case 1:_state.sent();entity.registerTableSpecs();this.entities.set(json.id,entity);return[2]}})}).call(this)}},{key:"get",value:function get(entityId){var entity=this.entities.get(entityId);if(entity===undefined){throw new Error("존재하지 않는 Entity 요청 ".concat(entityId))}return entity}},{key:"exists",value:function exists(entityId){var entity=this.entities.get(entityId);return entity!==undefined}},{key:"getAllIds",value:function getAllIds(){return Array.from(EntityManager.entities.keys()).sort()}},{key:"getAllParentIds",value:function getAllParentIds(){var _this=this;return this.getAllIds().filter(function(entityId){var entity=_this.get(entityId);return entity.parentId===undefined})}},{key:"getChildrenIds",value:function getChildrenIds(parentId){var _this=this;return this.getAllIds().filter(function(entityId){var entity=_this.get(entityId);return entity.parentId===parentId})}},{key:"setModulePath",value:function setModulePath(key,modulePath){this.modulePaths.set(key,modulePath)}},{key:"getModulePath",value:function getModulePath(key){var modulePath=this.modulePaths.get(key);if(modulePath===undefined){throw new Error("존재하지 않는 모듈 패스 요청 ".concat(key))}return modulePath}},{key:"setTableSpec",value:function setTableSpec(tableSpec){this.tableSpecs.set(tableSpec.name,tableSpec)}},{key:"getTableSpec",value:function getTableSpec(key){var tableSpec=this.tableSpecs.get(key);if(tableSpec===undefined){throw new Error("존재하지 않는 테이블 스펙 요청 ".concat(key))}return tableSpec}},{key:"getNamesFromId",value:function getNamesFromId(entityId){var pluralized=_inflection.default.pluralize(entityId)===entityId?"".concat(entityId,"List"):_inflection.default.pluralize(entityId);return{fs:_inflection.default.dasherize(_inflection.default.underscore(entityId)).toLowerCase(),fsPlural:_inflection.default.dasherize(_inflection.default.underscore(pluralized)).toLowerCase(),camel:_inflection.default.camelize(entityId,true),camelPlural:_inflection.default.camelize(pluralized,true),capital:entityId,capitalPlural:pluralized,upper:entityId.toUpperCase(),constant:_inflection.default.underscore(entityId).toUpperCase()}}}]);return EntityManagerClass}();var EntityManager=new EntityManagerClass;
|
|
2
|
+
//# sourceMappingURL=entity-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/entity/entity-manager.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport { glob } from \"fs/promises\";\nimport inflection from \"inflection\";\nimport _ from \"lodash\";\nimport path from \"path\";\nimport { Entity } from \"./entity\";\nimport { EntityJson } from \"../types/types\";\nimport { Sonamu } from \"../api/sonamu\";\nimport { readFile } from \"fs/promises\";\n\nexport type EntityNamesRecord = Record<\n | \"fs\"\n | \"fsPlural\"\n | \"camel\"\n | \"camelPlural\"\n | \"capital\"\n | \"capitalPlural\"\n | \"upper\"\n | \"constant\",\n string\n>;\ntype TableSpec = {\n name: string;\n uniqueIndexes: { name?: string; columns: string[] }[];\n};\nclass EntityManagerClass {\n private entities: Map<string, Entity> = new Map();\n public modulePaths: Map<string, string> = new Map();\n private tableSpecs: Map<string, TableSpec> = new Map();\n public isAutoloaded: boolean = false;\n\n // 경로 전달받아 모든 entity.json 파일 로드\n async autoload(doSilent: boolean = false) {\n if (this.isAutoloaded) {\n return;\n }\n const pathPattern = path.join(\n Sonamu.apiRootPath,\n \"/src/application/**/*.entity.json\"\n );\n !doSilent && console.log(chalk.yellow(`autoload ${pathPattern}`));\n\n for await (const file of glob(path.resolve(pathPattern!))) {\n await this.register(JSON.parse((await readFile(file)).toString()));\n }\n this.isAutoloaded = true;\n }\n\n async reload(doSilent: boolean = false) {\n console.log(\"reload\");\n this.entities.clear();\n this.modulePaths.clear();\n this.tableSpecs.clear();\n this.isAutoloaded = false;\n\n const sonamuPath = path.join(\n Sonamu.apiRootPath,\n `dist/application/sonamu.generated.js`\n );\n // CJS\n if (require?.cache && require.cache[sonamuPath]) {\n delete require.cache[sonamuPath];\n }\n\n return await this.autoload(doSilent);\n }\n\n async register(json: EntityJson): Promise<void> {\n const entity = new Entity(json);\n await entity.registerModulePaths();\n entity.registerTableSpecs();\n this.entities.set(json.id, entity);\n // console.debug(chalk.cyan(`register :: ${entity.id}`));\n }\n\n get(entityId: string): Entity {\n const entity = this.entities.get(entityId);\n if (entity === undefined) {\n throw new Error(`존재하지 않는 Entity 요청 ${entityId}`);\n }\n\n return entity;\n }\n\n exists(entityId: string): boolean {\n const entity = this.entities.get(entityId);\n return entity !== undefined;\n }\n\n getAllIds(): string[] {\n return Array.from(EntityManager.entities.keys()).sort();\n }\n\n getAllParentIds(): string[] {\n return this.getAllIds().filter((entityId) => {\n const entity = this.get(entityId);\n return entity.parentId === undefined;\n });\n }\n\n getChildrenIds(parentId: string): string[] {\n return this.getAllIds().filter((entityId) => {\n const entity = this.get(entityId);\n return entity.parentId === parentId;\n });\n }\n\n setModulePath(key: string, modulePath: string): void {\n // console.debug(chalk.cyan(`setModulePath :: ${key} :: ${modulePath}`));\n this.modulePaths.set(key, modulePath);\n }\n\n getModulePath(key: string): string {\n const modulePath = this.modulePaths.get(key);\n if (modulePath === undefined) {\n throw new Error(`존재하지 않는 모듈 패스 요청 ${key}`);\n }\n\n return modulePath;\n }\n\n setTableSpec(tableSpec: TableSpec) {\n this.tableSpecs.set(tableSpec.name, tableSpec);\n }\n\n getTableSpec(key: string): TableSpec {\n const tableSpec = this.tableSpecs.get(key);\n if (tableSpec === undefined) {\n throw new Error(`존재하지 않는 테이블 스펙 요청 ${key}`);\n }\n\n return tableSpec;\n }\n\n getNamesFromId(entityId: string): EntityNamesRecord {\n // entityId가 단복수 동형 단어인 경우 List 붙여서 생성\n const pluralized =\n inflection.pluralize(entityId) === entityId\n ? `${entityId}List`\n : inflection.pluralize(entityId);\n\n return {\n fs: inflection.dasherize(inflection.underscore(entityId)).toLowerCase(),\n fsPlural: inflection\n .dasherize(inflection.underscore(pluralized))\n .toLowerCase(),\n camel: inflection.camelize(entityId, true),\n camelPlural: inflection.camelize(pluralized, true),\n capital: entityId,\n capitalPlural: pluralized,\n upper: entityId.toUpperCase(),\n constant: inflection.underscore(entityId).toUpperCase(),\n };\n }\n}\n\nexport const EntityManager = new EntityManagerClass();\n"],"names":["EntityManager","EntityManagerClass","entities","Map","modulePaths","tableSpecs","isAutoloaded","autoload","doSilent","pathPattern","file","path","join","Sonamu","apiRootPath","console","log","chalk","yellow","glob","resolve","register","JSON","parse","readFile","toString","reload","require","sonamuPath","clear","cache","json","entity","Entity","registerModulePaths","registerTableSpecs","set","id","get","entityId","undefined","Error","exists","getAllIds","Array","from","keys","sort","getAllParentIds","filter","parentId","getChildrenIds","setModulePath","key","modulePath","getModulePath","setTableSpec","tableSpec","name","getTableSpec","getNamesFromId","pluralized","inflection","pluralize","fs","dasherize","underscore","toLowerCase","fsPlural","camel","camelize","camelPlural","capital","capitalPlural","upper","toUpperCase","constant"],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { BelongsToOneRelationProp, BigIntegerProp, BooleanProp, DateProp, DateTimeProp, DecimalProp, DistributiveOmit, DoubleProp, EnumProp, FloatProp, HasManyRelationProp, IntegerProp, JsonProp, ManyToManyRelationProp, OneToOneRelationProp, EntityIndex, StringProp, TextProp, TimeProp, TimestampProp, UuidProp, VirtualProp } from "../types/types";
|
|
2
|
+
export declare const p: {
|
|
3
|
+
integer: typeof integer;
|
|
4
|
+
bigInteger: typeof bigInteger;
|
|
5
|
+
text: typeof text;
|
|
6
|
+
string: typeof string;
|
|
7
|
+
float: typeof float;
|
|
8
|
+
double: typeof double;
|
|
9
|
+
decimal: typeof decimal;
|
|
10
|
+
boolean: typeof boolean;
|
|
11
|
+
date: typeof date;
|
|
12
|
+
dateTime: typeof dateTime;
|
|
13
|
+
time: typeof time;
|
|
14
|
+
timestamp: typeof timestamp;
|
|
15
|
+
json: typeof json;
|
|
16
|
+
uuid: typeof uuid;
|
|
17
|
+
enums: typeof enums;
|
|
18
|
+
virtual: typeof virtual;
|
|
19
|
+
relationOneToOne: typeof relationOneToOne;
|
|
20
|
+
relationBelongsToOne: typeof relationBelongsToOne;
|
|
21
|
+
relationHasMany: typeof relationHasMany;
|
|
22
|
+
relationManyToMany: typeof relationManyToMany;
|
|
23
|
+
};
|
|
24
|
+
declare function integer(name: string, option?: Omit<IntegerProp, "name" | "type">): IntegerProp;
|
|
25
|
+
declare function bigInteger(name: string, option?: Omit<BigIntegerProp, "name" | "type">): BigIntegerProp;
|
|
26
|
+
declare function text(name: string, option: Omit<TextProp, "name" | "type">): TextProp;
|
|
27
|
+
declare function string(name: string, option: Omit<StringProp, "name" | "type">): StringProp;
|
|
28
|
+
declare function float(name: string, option?: Omit<FloatProp, "name" | "type">): FloatProp;
|
|
29
|
+
declare function double(name: string, option?: Omit<DoubleProp, "name" | "type">): DoubleProp;
|
|
30
|
+
declare function decimal(name: string, option?: Omit<DecimalProp, "name" | "type">): DecimalProp;
|
|
31
|
+
declare function boolean(name: string, option?: Omit<BooleanProp, "name" | "type">): BooleanProp;
|
|
32
|
+
declare function date(name: string, option?: Omit<DateProp, "name" | "type"> & {
|
|
33
|
+
now?: true;
|
|
34
|
+
}): DateProp;
|
|
35
|
+
declare function dateTime(name: string, option?: Omit<DateTimeProp, "name" | "type"> & {
|
|
36
|
+
now?: true;
|
|
37
|
+
}): DateTimeProp;
|
|
38
|
+
declare function time(name: string, option?: Omit<TimeProp, "name" | "type"> & {
|
|
39
|
+
now?: true;
|
|
40
|
+
}): TimeProp;
|
|
41
|
+
declare function timestamp(name: string, option?: Omit<TimestampProp, "name" | "type"> & {
|
|
42
|
+
now?: true;
|
|
43
|
+
}): TimestampProp;
|
|
44
|
+
declare function json(name: string, option: Omit<JsonProp, "name" | "type">): JsonProp;
|
|
45
|
+
declare function uuid(name: string, option: Omit<UuidProp, "name" | "type">): UuidProp;
|
|
46
|
+
declare function enums(name: string, option: Omit<EnumProp, "name" | "type" | "id"> & {
|
|
47
|
+
id?: string;
|
|
48
|
+
}): EnumProp;
|
|
49
|
+
declare function virtual(name: string, option: Omit<VirtualProp, "name" | "type" | "dbDefault" | "toFilter">): VirtualProp;
|
|
50
|
+
declare function relationOneToOne(name: string, option: DistributiveOmit<OneToOneRelationProp, "name" | "type" | "relationType">): OneToOneRelationProp;
|
|
51
|
+
declare function relationBelongsToOne(name: string, option: Omit<BelongsToOneRelationProp, "name" | "type" | "relationType">): BelongsToOneRelationProp;
|
|
52
|
+
declare function relationHasMany(name: string, option: Omit<HasManyRelationProp, "name" | "type" | "relationType">): HasManyRelationProp;
|
|
53
|
+
declare function relationManyToMany(name: string, option: Omit<ManyToManyRelationProp, "name" | "type" | "relationType">): ManyToManyRelationProp;
|
|
54
|
+
export declare const i: {
|
|
55
|
+
index: typeof index;
|
|
56
|
+
unique: typeof unique;
|
|
57
|
+
};
|
|
58
|
+
declare function index(columns: string | string[]): EntityIndex;
|
|
59
|
+
declare function unique(columns: string | string[]): EntityIndex;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=entity-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-utils.d.ts","sourceRoot":"","sources":["../../src/entity/entity-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 i(){return i},get p(){return p}});var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _model=require("../utils/model");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 _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}var p={integer:integer,bigInteger:bigInteger,text:text,string:string,float:float,double:double,decimal:decimal,boolean:boolean,date:date,dateTime:dateTime,time:time,timestamp:timestamp,json:json,uuid:uuid,enums:enums,virtual:virtual,relationOneToOne:relationOneToOne,relationBelongsToOne:relationBelongsToOne,relationHasMany:relationHasMany,relationManyToMany:relationManyToMany};function integer(name,option){return _object_spread({name:name,type:"integer"},option)}function bigInteger(name,option){return _object_spread({name:name,type:"bigInteger"},option)}function text(name,option){return _object_spread({name:name,type:"text"},option)}function string(name,option){return _object_spread({name:name,type:"string"},option)}function float(name,option){return _object_spread({name:name,type:"float",precision:8,scale:2},option)}function double(name,option){return _object_spread({name:name,type:"double",precision:8,scale:2},option)}function decimal(name,option){return _object_spread({name:name,type:"decimal",precision:8,scale:2},option)}function boolean(name,option){return _object_spread({name:name,type:"boolean"},option)}function date(name,option){if((option===null||option===void 0?void 0:option.now)===true){delete option.now;option.dbDefault="CURRENT_TIMESTAMP"}return _object_spread({name:name,type:"date"},option)}function dateTime(name,option){if((option===null||option===void 0?void 0:option.now)===true){delete option.now;option.dbDefault="CURRENT_TIMESTAMP"}return _object_spread({name:name,type:"datetime"},option)}function time(name,option){if((option===null||option===void 0?void 0:option.now)===true){delete option.now;option.dbDefault="CURRENT_TIMESTAMP"}return _object_spread({name:name,type:"time"},option)}function timestamp(name,option){if((option===null||option===void 0?void 0:option.now)===true){delete option.now;option.dbDefault="CURRENT_TIMESTAMP"}return _object_spread({name:name,type:"timestamp"},option)}function json(name,option){return _object_spread({name:name,type:"json"},option)}function uuid(name,option){return _object_spread({name:name,type:"uuid"},option)}function enums(name,option){var _option_id;return _object_spread({name:name,type:"enum",id:(_option_id=option.id)!==null&&_option_id!==void 0?_option_id:"$Model".concat(_inflection.default.camelize(name))},option)}function virtual(name,option){return _object_spread({name:name,type:"virtual"},option)}function relationOneToOne(name,option){return _object_spread({name:name,type:"relation",relationType:"OneToOne"},option)}function relationBelongsToOne(name,option){var _option_useConstraint;option.useConstraint=(_option_useConstraint=option.useConstraint)!==null&&_option_useConstraint!==void 0?_option_useConstraint:true;return _object_spread({name:name,type:"relation",relationType:"BelongsToOne"},option)}function relationHasMany(name,option){return _object_spread({name:name,type:"relation",relationType:"HasMany"},option)}function relationManyToMany(name,option){return _object_spread({name:name,type:"relation",relationType:"ManyToMany"},option)}var i={index:index,unique:unique};function index(columns){return{type:"index",columns:(0,_model.asArray)(columns)}}function unique(columns){return{type:"unique",columns:(0,_model.asArray)(columns)}}
|
|
2
|
+
//# sourceMappingURL=entity-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/entity/entity-utils.ts"],"sourcesContent":["import inflection from \"inflection\";\nimport {\n BelongsToOneRelationProp,\n BigIntegerProp,\n BooleanProp,\n DateProp,\n DateTimeProp,\n DecimalProp,\n DistributiveOmit,\n DoubleProp,\n EnumProp,\n FloatProp,\n HasManyRelationProp,\n IntegerProp,\n JsonProp,\n ManyToManyRelationProp,\n OneToOneRelationProp,\n EntityIndex,\n StringProp,\n TextProp,\n TimeProp,\n TimestampProp,\n UuidProp,\n VirtualProp,\n} from \"../types/types\";\nimport { asArray } from \"../utils/model\";\n\nexport const p = {\n integer,\n bigInteger,\n text,\n string,\n float,\n double,\n decimal,\n boolean,\n date,\n dateTime,\n time,\n timestamp,\n json,\n uuid,\n enums,\n virtual,\n relationOneToOne,\n relationBelongsToOne,\n relationHasMany,\n relationManyToMany,\n};\n\nfunction integer(\n name: string,\n option?: Omit<IntegerProp, \"name\" | \"type\">\n): IntegerProp {\n return {\n name,\n type: \"integer\",\n ...option,\n };\n}\nfunction bigInteger(\n name: string,\n option?: Omit<BigIntegerProp, \"name\" | \"type\">\n): BigIntegerProp {\n return {\n name,\n type: \"bigInteger\",\n ...option,\n };\n}\nfunction text(name: string, option: Omit<TextProp, \"name\" | \"type\">): TextProp {\n return {\n name,\n type: \"text\",\n ...option,\n };\n}\nfunction string(\n name: string,\n option: Omit<StringProp, \"name\" | \"type\">\n): StringProp {\n return {\n name,\n type: \"string\",\n ...option,\n };\n}\nfunction float(\n name: string,\n option?: Omit<FloatProp, \"name\" | \"type\">\n): FloatProp {\n return {\n name,\n type: \"float\",\n precision: 8,\n scale: 2,\n ...option,\n };\n}\nfunction double(\n name: string,\n option?: Omit<DoubleProp, \"name\" | \"type\">\n): DoubleProp {\n return {\n name,\n type: \"double\",\n precision: 8,\n scale: 2,\n ...option,\n };\n}\nfunction decimal(\n name: string,\n option?: Omit<DecimalProp, \"name\" | \"type\">\n): DecimalProp {\n return {\n name,\n type: \"decimal\",\n precision: 8,\n scale: 2,\n ...option,\n };\n}\nfunction boolean(\n name: string,\n option?: Omit<BooleanProp, \"name\" | \"type\">\n): BooleanProp {\n return {\n name,\n type: \"boolean\",\n ...option,\n };\n}\nfunction date(\n name: string,\n option?: Omit<DateProp, \"name\" | \"type\"> & { now?: true }\n): DateProp {\n if (option?.now === true) {\n delete option.now;\n option.dbDefault = \"CURRENT_TIMESTAMP\";\n }\n return {\n name,\n type: \"date\",\n ...option,\n };\n}\nfunction dateTime(\n name: string,\n option?: Omit<DateTimeProp, \"name\" | \"type\"> & { now?: true }\n): DateTimeProp {\n if (option?.now === true) {\n delete option.now;\n option.dbDefault = \"CURRENT_TIMESTAMP\";\n }\n return {\n name,\n type: \"datetime\",\n ...option,\n };\n}\nfunction time(\n name: string,\n option?: Omit<TimeProp, \"name\" | \"type\"> & { now?: true }\n): TimeProp {\n if (option?.now === true) {\n delete option.now;\n option.dbDefault = \"CURRENT_TIMESTAMP\";\n }\n return {\n name,\n type: \"time\",\n ...option,\n };\n}\nfunction timestamp(\n name: string,\n option?: Omit<TimestampProp, \"name\" | \"type\"> & { now?: true }\n): TimestampProp {\n if (option?.now === true) {\n delete option.now;\n option.dbDefault = \"CURRENT_TIMESTAMP\";\n }\n return {\n name,\n type: \"timestamp\",\n ...option,\n };\n}\nfunction json(name: string, option: Omit<JsonProp, \"name\" | \"type\">): JsonProp {\n return {\n name,\n type: \"json\",\n ...option,\n };\n}\nfunction uuid(name: string, option: Omit<UuidProp, \"name\" | \"type\">): UuidProp {\n return {\n name,\n type: \"uuid\",\n ...option,\n };\n}\nfunction enums(\n name: string,\n option: Omit<EnumProp, \"name\" | \"type\" | \"id\"> & { id?: string }\n): EnumProp {\n return {\n name,\n type: \"enum\",\n id: option.id ?? `$Model${inflection.camelize(name)}`,\n ...option,\n };\n}\nfunction virtual(\n name: string,\n option: Omit<VirtualProp, \"name\" | \"type\" | \"dbDefault\" | \"toFilter\">\n): VirtualProp {\n return {\n name,\n type: \"virtual\",\n ...option,\n };\n}\nfunction relationOneToOne(\n name: string,\n option: DistributiveOmit<\n OneToOneRelationProp,\n \"name\" | \"type\" | \"relationType\"\n >\n): OneToOneRelationProp {\n return {\n name,\n type: \"relation\",\n relationType: \"OneToOne\",\n ...option,\n };\n}\nfunction relationBelongsToOne(\n name: string,\n option: Omit<BelongsToOneRelationProp, \"name\" | \"type\" | \"relationType\">\n): BelongsToOneRelationProp {\n option.useConstraint = (option.useConstraint ?? true) as false;\n return {\n name,\n type: \"relation\",\n relationType: \"BelongsToOne\",\n ...option,\n };\n}\nfunction relationHasMany(\n name: string,\n option: Omit<HasManyRelationProp, \"name\" | \"type\" | \"relationType\">\n): HasManyRelationProp {\n return {\n name,\n type: \"relation\",\n relationType: \"HasMany\",\n ...option,\n };\n}\nfunction relationManyToMany(\n name: string,\n option: Omit<ManyToManyRelationProp, \"name\" | \"type\" | \"relationType\">\n): ManyToManyRelationProp {\n return {\n name,\n type: \"relation\",\n relationType: \"ManyToMany\",\n ...option,\n };\n}\n\nexport const i = {\n index,\n unique,\n};\n\nfunction index(columns: string | string[]): EntityIndex {\n return {\n type: \"index\",\n columns: asArray(columns),\n };\n}\n\nfunction unique(columns: string | string[]): EntityIndex {\n return {\n type: \"unique\",\n columns: asArray(columns),\n };\n}\n"],"names":["i","p","integer","bigInteger","text","string","float","double","decimal","boolean","date","dateTime","time","timestamp","json","uuid","enums","virtual","relationOneToOne","relationBelongsToOne","relationHasMany","relationManyToMany","name","option","type","precision","scale","now","dbDefault","id","inflection","camelize","relationType","useConstraint","index","unique","columns","asArray"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { EntityProp, RelationProp, SubsetQuery, EntityPropNode, EntityIndex, EntityJson, EntitySubsetRow } from "../types/types";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
export declare class Entity {
|
|
4
|
+
id: string;
|
|
5
|
+
parentId?: string;
|
|
6
|
+
table: string;
|
|
7
|
+
title: string;
|
|
8
|
+
names: {
|
|
9
|
+
parentFs: string;
|
|
10
|
+
fs: string;
|
|
11
|
+
module: string;
|
|
12
|
+
};
|
|
13
|
+
props: EntityProp[];
|
|
14
|
+
propsDict: {
|
|
15
|
+
[key: string]: EntityProp;
|
|
16
|
+
};
|
|
17
|
+
relations: {
|
|
18
|
+
[key: string]: RelationProp;
|
|
19
|
+
};
|
|
20
|
+
indexes: EntityIndex[];
|
|
21
|
+
subsets: {
|
|
22
|
+
[key: string]: string[];
|
|
23
|
+
};
|
|
24
|
+
types: {
|
|
25
|
+
[name: string]: z.ZodTypeAny;
|
|
26
|
+
};
|
|
27
|
+
enums: {
|
|
28
|
+
[enumId: string]: z.ZodEnum<any>;
|
|
29
|
+
};
|
|
30
|
+
enumLabels: {
|
|
31
|
+
[enumId: string]: {
|
|
32
|
+
[key: string]: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
constructor({ id, parentId, table, title, props, indexes, subsets, enums, }: EntityJson);
|
|
36
|
+
getSubsetQuery(subsetKey: string): SubsetQuery;
|
|
37
|
+
resolveSubsetQuery(prefix: string, fields: string[], isAlreadyOuterJoined?: boolean): SubsetQuery;
|
|
38
|
+
fieldExprsToPropNodes(fieldExprs: string[], entity?: Entity): EntityPropNode[];
|
|
39
|
+
getFieldExprs(prefix?: string, maxDepth?: number, froms?: string[]): string[];
|
|
40
|
+
getTableColumns(): {
|
|
41
|
+
name: string;
|
|
42
|
+
type: string;
|
|
43
|
+
}[];
|
|
44
|
+
registerModulePaths(): Promise<void>;
|
|
45
|
+
registerTableSpecs(): void;
|
|
46
|
+
toJson(): EntityJson;
|
|
47
|
+
save(): Promise<void>;
|
|
48
|
+
getSubsetRows(_subsets?: {
|
|
49
|
+
[key: string]: string[];
|
|
50
|
+
}, prefixes?: string[]): EntitySubsetRow[];
|
|
51
|
+
subsetRowsToSubsetFields(subsetRows: EntitySubsetRow[], subsetKey: string): string[];
|
|
52
|
+
createProp(prop: EntityProp, at?: number): Promise<void>;
|
|
53
|
+
analyzeSubsetField(subsetField: string): {
|
|
54
|
+
entityId: string;
|
|
55
|
+
propName: string;
|
|
56
|
+
}[];
|
|
57
|
+
modifyProp(newProp: EntityProp, at: number): Promise<void>;
|
|
58
|
+
delProp(at: number): Promise<void>;
|
|
59
|
+
getEntityIdFromSubsetField(subsetField: string): string;
|
|
60
|
+
moveProp(at: number, to: number): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Entity",{enumerable:true,get:function(){return Entity}});var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _entitymanager=require("./entity-manager");var _types=require("../types/types");var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _path=/*#__PURE__*/_interop_require_default(require("path"));var _promises=require("fs/promises");var _zod=require("zod");var _sonamu=require("../api/sonamu");var _prettier=/*#__PURE__*/_interop_require_default(require("prettier"));var _utils=require("../utils/utils");var _fsutils=require("../utils/fs-utils");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 _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 _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 _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}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 _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 _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 ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}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 _to_array(arr){return _array_with_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_rest()}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}}}var Entity=/*#__PURE__*/function(){"use strict";function Entity(param){var id=param.id,parentId=param.parentId,table=param.table,title=param.title,props=param.props,indexes=param.indexes,subsets=param.subsets,enums=param.enums;_class_call_check(this,Entity);_define_property(this,"id",void 0);_define_property(this,"parentId",void 0);_define_property(this,"table",void 0);_define_property(this,"title",void 0);_define_property(this,"names",void 0);_define_property(this,"props",void 0);_define_property(this,"propsDict",void 0);_define_property(this,"relations",void 0);_define_property(this,"indexes",void 0);_define_property(this,"subsets",void 0);_define_property(this,"types",{});_define_property(this,"enums",{});_define_property(this,"enumLabels",{});this.id=id;this.parentId=parentId;this.title=title!==null&&title!==void 0?title:this.id;this.table=table!==null&&table!==void 0?table:_inflection.default.underscore(_inflection.default.pluralize(id));if(props){this.props=props.map(function(prop){if((0,_types.isEnumProp)(prop)){if(prop.id.includes("$Model")){prop.id=prop.id.replace("$Model",id)}}return prop});this.propsDict=props.reduce(function(result,prop){return _object_spread_props(_object_spread({},result),_define_property({},prop.name,prop))},{});this.relations=props.filter(function(prop){return(0,_types.isRelationProp)(prop)}).reduce(function(result,prop){return _object_spread_props(_object_spread({},result),_define_property({},prop.name,prop))},{})}else{this.props=[];this.propsDict={};this.relations={}}this.indexes=indexes!==null&&indexes!==void 0?indexes:[];this.subsets=subsets!==null&&subsets!==void 0?subsets:{};this.enumLabels=enums!==null&&enums!==void 0?enums:{};this.enums=Object.fromEntries(Object.entries(this.enumLabels).map(function(param){var _param=_sliced_to_array(param,2),key=_param[0],enumLabel=_param[1];return[key,_zod.z.enum(Object.keys(enumLabel))]}));this.names={parentFs:_inflection.default.dasherize(_inflection.default.underscore(parentId!==null&&parentId!==void 0?parentId:id)).toLowerCase(),fs:_inflection.default.dasherize(_inflection.default.underscore(id)).toLowerCase(),module:id}}_create_class(Entity,[{key:"getSubsetQuery",value:function getSubsetQuery(subsetKey){var subset=this.subsets[subsetKey];var result=this.resolveSubsetQuery("",subset);return result}},{key:"resolveSubsetQuery",value:function resolveSubsetQuery(prefix,fields){var _this=this;var isAlreadyOuterJoined=arguments.length>2&&arguments[2]!==void 0?arguments[2]:false;prefix=prefix.replace(/\./g,"__");var subsetGroup=_lodash.default.groupBy(fields,function(field){if(field.includes(".")){var _field_split=_sliced_to_array(field.split("."),1),rel=_field_split[0];return rel}else{return""}});var result=Object.keys(subsetGroup).reduce(function(r,groupKey){var _$fields=subsetGroup[groupKey];if(groupKey===""){var realFields=_$fields.filter(function(field){return!(0,_types.isVirtualProp)(_this.propsDict[field])});var virtualFields=_$fields.filter(function(field){return(0,_types.isVirtualProp)(_this.propsDict[field])});if(prefix===""){r.select=r.select.concat(realFields.map(function(field){return"".concat(_this.table,".").concat(field)}));r.virtual=r.virtual.concat(virtualFields)}else{r.select=r.select.concat(realFields.map(function(field){return"".concat(prefix,".").concat(field," as ").concat(prefix,"__").concat(field)}))}return r}var relation=_this.relations[groupKey];if(relation===undefined){throw new Error("존재하지 않는 relation 참조 ".concat(groupKey))}var relEntity=_entitymanager.EntityManager.get(relation.with);if((0,_types.isOneToOneRelationProp)(relation)||(0,_types.isBelongsToOneRelationProp)(relation)){var relFields=_$fields.map(function(field){return field.split(".").slice(1).join(".")});if(relFields.length===1&&relFields[0]==="id"){if(prefix===""){r.select=r.select.concat("".concat(_this.table,".").concat(groupKey,"_id"))}else{r.select=r.select.concat("".concat(prefix,".").concat(groupKey,"_id as ").concat(prefix,"__").concat(groupKey,"_id"))}return r}var innerOrOuter=function(){if(isAlreadyOuterJoined){return"outer"}if((0,_types.isOneToOneRelationProp)(relation)){var _relation_nullable;if(relation.hasJoinColumn===true&&((_relation_nullable=relation.nullable)!==null&&_relation_nullable!==void 0?_relation_nullable:false)===false){return"inner"}else{return"outer"}}else{if(relation.nullable){return"outer"}else{return"inner"}}}();var relSubsetQuery=relEntity.resolveSubsetQuery("".concat(prefix!==""?prefix+".":"").concat(groupKey),relFields,innerOrOuter==="outer");r.select=r.select.concat(relSubsetQuery.select);r.virtual=r.virtual.concat(relSubsetQuery.virtual);var joinAs=prefix===""?groupKey:prefix+"__"+groupKey;var fromTable=prefix===""?_this.table:prefix;var joinClause;if(relation.customJoinClause){joinClause={custom:relation.customJoinClause}}else{var from,to;if((0,_types.isOneToOneRelationProp)(relation)){if(relation.hasJoinColumn){from="".concat(fromTable,".").concat(relation.name,"_id");to="".concat(joinAs,".id")}else{from="".concat(fromTable,".id");to="".concat(joinAs,".").concat(_inflection.default.underscore(_this.names.fs.replace(/\-/g,"_")),"_id")}}else{from="".concat(fromTable,".").concat(relation.name,"_id");to="".concat(joinAs,".id")}joinClause={from:from,to:to}}r.joins.push(_object_spread({as:joinAs,join:innerOrOuter,table:relEntity.table},joinClause));if(relSubsetQuery.loaders.length>0){var convertedLoaders=relSubsetQuery.loaders.map(function(loader){var newAs=[groupKey,loader.as].join("__");return{as:newAs,table:loader.table,manyJoin:loader.manyJoin,oneJoins:loader.oneJoins,select:loader.select,loaders:loader.loaders}});r.loaders=_to_consumable_array(r.loaders).concat(_to_consumable_array(convertedLoaders))}r.joins=r.joins.concat(relSubsetQuery.joins)}else if((0,_types.isHasManyRelationProp)(relation)||(0,_types.isManyToManyRelationProp)(relation)){var relFields1=_$fields.map(function(field){return field.split(".").slice(1).join(".")});var relSubsetQuery1=relEntity.resolveSubsetQuery("",relFields1);var manyJoin;if((0,_types.isHasManyRelationProp)(relation)){var _relation_fromColumn;var fromCol=(_relation_fromColumn=relation===null||relation===void 0?void 0:relation.fromColumn)!==null&&_relation_fromColumn!==void 0?_relation_fromColumn:"id";manyJoin={fromTable:_this.table,fromCol:fromCol,idField:prefix===""?"".concat(fromCol):"".concat(prefix,"__").concat(fromCol),toTable:relEntity.table,toCol:relation.joinColumn}}else if((0,_types.isManyToManyRelationProp)(relation)){manyJoin={fromTable:_this.table,fromCol:"id",idField:prefix===""?"id":"".concat(prefix,"__id"),through:{table:relation.joinTable,fromCol:"".concat(_inflection.default.singularize(_this.table),"_id"),toCol:"".concat(_inflection.default.singularize(relEntity.table),"_id")},toTable:relEntity.table,toCol:"id"}}else{throw new Error}r.loaders.push({as:groupKey,table:relEntity.table,manyJoin:manyJoin,oneJoins:relSubsetQuery1.joins,select:relSubsetQuery1.select,loaders:relSubsetQuery1.loaders})}return r},{select:[],virtual:[],joins:[],loaders:[]});return result}},{key:"fieldExprsToPropNodes",value:function fieldExprsToPropNodes(fieldExprs){var _this=this;var entity=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this;var groups=fieldExprs.reduce(function(result,fieldExpr){var key,value,elseExpr;if(fieldExpr.includes(".")){var ref;ref=_to_array(fieldExpr.split(".")),key=ref[0],elseExpr=ref.slice(1),ref;value=elseExpr.join(".")}else{key="";value=fieldExpr}var _result_key;result[key]=((_result_key=result[key])!==null&&_result_key!==void 0?_result_key:[]).concat(value);return result},{});return Object.keys(groups).map(function(key){var group=groups[key];if(key===""){return group.map(function(propName){if(propName==="uuid"){return{nodeType:"plain",prop:{type:"string",name:"uuid",length:128},children:[]}}var prop=entity.props.find(function(p){return p.name===propName});if(prop===undefined){console.log({propName:propName,groups:groups});throw new Error("".concat(entity.id," -- 잘못된 FieldExpr ").concat(propName))}return{nodeType:"plain",prop:prop,children:[]}})}var prop=entity.propsDict[key];if(!(0,_types.isRelationProp)(prop)){throw new Error("잘못된 FieldExpr ".concat(key,".").concat(group[0]))}var relEntity=_entitymanager.EntityManager.get(prop.with);if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)){if(group.length==1&&(group[0]==="id"||group[0]=="id?")){var idProp=relEntity.propsDict.id;return{nodeType:"plain",prop:_object_spread_props(_object_spread({},idProp),{name:key+"_id",nullable:prop.nullable}),children:[]}}}var children=_this.fieldExprsToPropNodes(group,relEntity);var nodeType=(0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)?"object":"array";return{prop:prop,children:children,nodeType:nodeType}}).flat()}},{key:"getFieldExprs",value:function getFieldExprs(){var _this=this;var prefix=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",maxDepth=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3,froms=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];return this.props.map(function(prop){var propName=[prefix,prop.name].filter(function(v){return v!==""}).join(".");if(propName===prefix){return null}if((0,_types.isRelationProp)(prop)){if(maxDepth<0){return null}if(froms.includes(prop.with)){return null}var relMd=_entitymanager.EntityManager.get(prop.with);return relMd.getFieldExprs(propName,maxDepth-1,_to_consumable_array(froms).concat([_this.id]))}return propName}).flat().filter(function(f){return f!==null})}},{key:"getTableColumns",value:function getTableColumns(){return this.props.map(function(prop){if(prop.type==="relation"){if(prop.relationType==="BelongsToOne"||prop.relationType==="OneToOne"&&prop.hasJoinColumn===true){return{name:"".concat(prop.name,"_id"),type:"int_unsigned"}}else{return null}}return{name:prop.name,type:prop.type}}).filter(_utils.nonNullable)}},{key:"registerModulePaths",value:function registerModulePaths(){return _async_to_generator(function(){var _this,basePath,typesModulePath,typesFileDistPath,importPath,t;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;basePath="".concat(this.names.parentFs);_entitymanager.EntityManager.setModulePath("".concat(this.id,"BaseSchema"),"sonamu.generated");if(Object.keys(this.subsets).length>0){_entitymanager.EntityManager.setModulePath("".concat(this.id,"SubsetKey"),"sonamu.generated");_entitymanager.EntityManager.setModulePath("".concat(this.id,"SubsetMapping"),"sonamu.generated");Object.keys(this.subsets).map(function(subsetKey){_entitymanager.EntityManager.setModulePath("".concat(_this.id,"Subset").concat(subsetKey.toUpperCase()),"sonamu.generated")})}Object.keys(this.enumLabels).map(function(enumId){_entitymanager.EntityManager.setModulePath(enumId,"sonamu.generated")});typesModulePath="".concat(basePath,"/").concat(this.names.parentFs,".types");typesFileDistPath=_path.default.join(_sonamu.Sonamu.apiRootPath,"dist/application/".concat(typesModulePath,".js"));return[4,(0,_fsutils.exists)(typesFileDistPath)];case 1:if(!_state.sent())return[3,3];importPath=_path.default.relative(__dirname,typesFileDistPath);return[4,Promise.resolve(importPath).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))})];case 2:t=_state.sent();this.types=Object.keys(t).reduce(function(result,key){_entitymanager.EntityManager.setModulePath(key,typesModulePath);return _object_spread_props(_object_spread({},result),_define_property({},key,t[key]))},{});_state.label=3;case 3:return[2]}})}).call(this)}},{key:"registerTableSpecs",value:function registerTableSpecs(){var uniqueIndexes=this.indexes.filter(function(idx){return idx.type==="unique"});_entitymanager.EntityManager.setTableSpec({name:this.table,uniqueIndexes:uniqueIndexes})}},{key:"toJson",value:function toJson(){return{id:this.id,parentId:this.parentId,table:this.table,title:this.title,props:this.props,indexes:this.indexes,subsets:this.subsets,enums:this.enumLabels}}},{key:"save",value:function save(){return _async_to_generator(function(){var _this,subsetRows,jsonPath,json,_tmp;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;subsetRows=this.getSubsetRows();this.subsets=Object.fromEntries(Object.entries(this.subsets).map(function(param){var _param=_sliced_to_array(param,1),subsetKey=_param[0];return[subsetKey,_this.subsetRowsToSubsetFields(subsetRows,subsetKey)]}));jsonPath=_path.default.join(_sonamu.Sonamu.apiRootPath,"src/application/".concat(this.names.parentFs,"/").concat(this.names.fs,".entity.json"));json=this.toJson();_tmp=[jsonPath];return[4,_prettier.default.format(JSON.stringify(json),{parser:"json"})];case 1:return[4,_promises.writeFile.apply(void 0,_tmp.concat([_state.sent()]))];case 2:_state.sent();return[4,_entitymanager.EntityManager.register(json)];case 3:_state.sent();return[2]}})}).call(this)}},{key:"getSubsetRows",value:function getSubsetRows(_subsets){var prefixes=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];if(prefixes.length>10){return[]}var subsets=_subsets!==null&&_subsets!==void 0?_subsets:this.subsets;var subsetKeys=Object.keys(subsets);var allFields=_lodash.default.uniq(subsetKeys.map(function(key){return subsets[key]}).flat());return this.props.map(function(prop){if(prop.type==="relation"&&allFields.find(function(f){return f.startsWith(_to_consumable_array(prefixes).concat([prop.name]).join(".")+".")})){var relEntity=_entitymanager.EntityManager.get(prop.with);var children=relEntity.getSubsetRows(subsets,_to_consumable_array(prefixes).concat(["".concat(prop.name)]));return{field:prop.name,children:children,relationEntity:prop.with,prefixes:prefixes,isOpen:children.length>0,has:Object.fromEntries(subsetKeys.map(function(subsetKey){return[subsetKey,children.every(function(child){return child.has[subsetKey]===true})]}))}}return{field:prop.name,children:[],relationEntity:prop.type==="relation"?prop.with:undefined,prefixes:prefixes,has:Object.fromEntries(subsetKeys.map(function(subsetKey){var subsetFields=subsets[subsetKey];var has=subsetFields.some(function(f){var field=_to_consumable_array(prefixes).concat([prop.name]).join(".");return f===field||f.startsWith(field+".")});return[subsetKey,has]}))}})}},{key:"subsetRowsToSubsetFields",value:function subsetRowsToSubsetFields(subsetRows,subsetKey){var _this=this;return subsetRows.map(function(subsetRow){if(subsetRow.children.length>0){return _this.subsetRowsToSubsetFields(subsetRow.children,subsetKey)}else if(subsetRow.has[subsetKey]){return subsetRow.prefixes.concat(subsetRow.field).join(".")}else{return null}}).filter(_utils.nonNullable).flat()}},{key:"createProp",value:function createProp(prop,at){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!at){this.props.push(prop)}else{this.props.splice(at,0,prop)}return[4,this.save()];case 1:_state.sent();return[2]}})}).call(this)}},{key:"analyzeSubsetField",value:function analyzeSubsetField(subsetField){var _loop=function(i){var propName=arr[i];result.push({entityId:entityId,propName:propName});var prop=_entitymanager.EntityManager.get(entityId).props.find(function(p){return p.name===propName});if(!prop){throw new Error("".concat(entityId,"의 잘못된 서브셋키 ").concat(subsetField))}if((0,_types.isRelationProp)(prop)){entityId=prop.with}};var arr=subsetField.split(".");var entityId=this.id;var result=[];for(var i=0;i<arr.length;i++)_loop(i);return result}},{key:"modifyProp",value:function modifyProp(newProp,at){return _async_to_generator(function(){var _this,oldName,entities,allEntityIds,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;oldName=this.props[at].name;entities=[this];if(oldName!==newProp.name){allEntityIds=_entitymanager.EntityManager.getAllIds();_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{_loop=function(){var relEntityId=_step.value;var relEntity=_entitymanager.EntityManager.get(relEntityId);var relEntitySubsetKeys=Object.keys(relEntity.subsets);var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=relEntitySubsetKeys[Symbol.iterator](),_step1;!(_iteratorNormalCompletion=(_step1=_iterator.next()).done);_iteratorNormalCompletion=true){var subsetKey=_step1.value;var subset=relEntity.subsets[subsetKey];var modifiedSubsetFields=subset.map(function(subsetField){var analyzed=relEntity.analyzeSubsetField(subsetField);var modified=analyzed.map(function(a){return a.propName===oldName&&a.entityId===_this.id?_object_spread_props(_object_spread({},a),{propName:newProp.name}):a});return modified.map(function(a){return a.propName}).join(".")});if(subset.join(",")!==modifiedSubsetFields.join(",")){relEntity.subsets[subsetKey]=modifiedSubsetFields;entities.push(relEntity)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}};for(_iterator=allEntityIds[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true)_loop()}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}this.props[at]=newProp;return[4,Promise.all(entities.map(function(entity){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,entity.save()]})})()}))];case 1:_state.sent();return[2]}})}).call(this)}},{key:"delProp",value:function delProp(at){return _async_to_generator(function(){var _this,oldName,entities,allEntityIds,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;oldName=this.props[at].name;entities=[this];allEntityIds=_entitymanager.EntityManager.getAllIds();_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{_loop=function(){var relEntityId=_step.value;var relEntity=_entitymanager.EntityManager.get(relEntityId);var relEntitySubsetKeys=Object.keys(relEntity.subsets);var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=relEntitySubsetKeys[Symbol.iterator](),_step1;!(_iteratorNormalCompletion=(_step1=_iterator.next()).done);_iteratorNormalCompletion=true){var subsetKey=_step1.value;var subset=relEntity.subsets[subsetKey];var modifiedSubsetFields=subset.map(function(subsetField){var analyzed=relEntity.analyzeSubsetField(subsetField);if(analyzed.find(function(a){return a.propName===oldName&&a.entityId===_this.id})){return null}else{return subsetField}}).filter(_utils.nonNullable);if(subset.join(",")!==modifiedSubsetFields.join(",")){relEntity.subsets[subsetKey]=modifiedSubsetFields;entities.push(relEntity)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}};for(_iterator=allEntityIds[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true)_loop()}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}_entitymanager.EntityManager.get(this.id).indexes.map(function(index){index.columns=index.columns.filter(function(col){return col!==oldName})});this.props.splice(at,1);return[4,Promise.all(entities.map(function(entity){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,entity.save()]})})()}))];case 1:_state.sent();return[2]}})}).call(this)}},{key:"getEntityIdFromSubsetField",value:function getEntityIdFromSubsetField(subsetField){var _this=this;if(subsetField.includes(".")===false){return this.id}var arr=subsetField.split(".").slice(0,-1);var lastEntityId=arr.reduce(function(entityId,field){var relProp=_entitymanager.EntityManager.get(entityId).props.find(function(p){return p.name===field});if(!relProp||relProp.type!=="relation"){console.debug({arr:arr,thisId:_this.id,entityId:entityId,field:field});throw new Error("잘못된 서브셋키 ".concat(subsetField))}return relProp.with},this.id);return lastEntityId}},{key:"moveProp",value:function moveProp(at,to){return _async_to_generator(function(){var prop,newProps;return _ts_generator(this,function(_state){switch(_state.label){case 0:prop=this.props[at];newProps=_to_consumable_array(this.props);newProps.splice(to,0,prop);newProps.splice(at<to?at:at+1,1);this.props=newProps;return[4,this.save()];case 1:_state.sent();return[2]}})}).call(this)}}]);return Entity}();
|
|
2
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/entity/entity.ts"],"sourcesContent":["import _ from \"lodash\";\nimport { EntityManager as EntityManager } from \"./entity-manager\";\nimport {\n EntityProp,\n RelationProp,\n isRelationProp,\n SubsetQuery,\n isVirtualProp,\n isBelongsToOneRelationProp,\n isOneToOneRelationProp,\n isHasManyRelationProp,\n isManyToManyRelationProp,\n EntityPropNode,\n isEnumProp,\n StringProp,\n EntityIndex,\n EntityJson,\n EntitySubsetRow,\n} from \"../types/types\";\nimport inflection from \"inflection\";\nimport path from \"path\";\nimport { writeFile } from \"fs/promises\";\nimport { z } from \"zod\";\nimport { Sonamu } from \"../api/sonamu\";\nimport prettier from \"prettier\";\nimport { nonNullable } from \"../utils/utils\";\nimport { exists } from \"../utils/fs-utils\";\n\nexport class Entity {\n id: string;\n parentId?: string;\n table: string;\n title: string;\n names: {\n parentFs: string;\n fs: string;\n module: string;\n };\n props: EntityProp[];\n propsDict: {\n [key: string]: EntityProp;\n };\n relations: {\n [key: string]: RelationProp;\n };\n indexes: EntityIndex[];\n subsets: {\n [key: string]: string[];\n };\n types: {\n [name: string]: z.ZodTypeAny;\n } = {};\n enums: {\n [enumId: string]: z.ZodEnum<any>;\n } = {};\n enumLabels: {\n [enumId: string]: {\n [key: string]: string;\n };\n } = {};\n\n constructor({\n id,\n parentId,\n table,\n title,\n props,\n indexes,\n subsets,\n enums,\n }: EntityJson) {\n // id\n this.id = id;\n this.parentId = parentId;\n this.title = title ?? this.id;\n this.table = table ?? inflection.underscore(inflection.pluralize(id));\n\n // props\n if (props) {\n this.props = props.map((prop) => {\n if (isEnumProp(prop)) {\n if (prop.id.includes(\"$Model\")) {\n prop.id = prop.id.replace(\"$Model\", id);\n }\n }\n return prop;\n });\n this.propsDict = props.reduce((result, prop) => {\n return {\n ...result,\n [prop.name]: prop,\n };\n }, {});\n\n // relations\n this.relations = props\n .filter((prop) => isRelationProp(prop))\n .reduce((result, prop) => {\n return {\n ...result,\n [prop.name]: prop,\n };\n }, {});\n } else {\n this.props = [];\n this.propsDict = {};\n this.relations = {};\n }\n\n // indexes\n this.indexes = indexes ?? [];\n\n // subsets\n this.subsets = subsets ?? {};\n\n // enums\n this.enumLabels = enums ?? {};\n this.enums = Object.fromEntries(\n Object.entries(this.enumLabels).map(([key, enumLabel]) => {\n return [\n key,\n z.enum(\n Object.keys(enumLabel) as unknown as readonly [string, ...string[]]\n ),\n ];\n })\n );\n\n // names\n this.names = {\n parentFs: inflection\n .dasherize(inflection.underscore(parentId ?? id))\n .toLowerCase(),\n fs: inflection.dasherize(inflection.underscore(id)).toLowerCase(),\n module: id,\n };\n }\n\n /*\n subset SELECT/JOIN/LOADER 결과 리턴\n */\n getSubsetQuery(subsetKey: string): SubsetQuery {\n const subset = this.subsets[subsetKey];\n\n const result: SubsetQuery = this.resolveSubsetQuery(\"\", subset);\n return result;\n }\n\n /*\n */\n resolveSubsetQuery(\n prefix: string,\n fields: string[],\n isAlreadyOuterJoined: boolean = false\n ): SubsetQuery {\n // prefix 치환 (prefix는 ToOneRelation이 복수로 붙은 경우 모두 __로 변경됨)\n prefix = prefix.replace(/\\./g, \"__\");\n\n // 서브셋을 1뎁스만 분리하여 그룹핑\n const subsetGroup = _.groupBy(fields, (field) => {\n if (field.includes(\".\")) {\n const [rel] = field.split(\".\");\n return rel;\n } else {\n return \"\";\n }\n });\n\n const result = Object.keys(subsetGroup).reduce(\n (r, groupKey) => {\n const fields = subsetGroup[groupKey];\n // 현재 테이블 필드셋은 select, virtual에 추가하고 리턴\n if (groupKey === \"\") {\n const realFields = fields.filter(\n (field) => !isVirtualProp(this.propsDict[field])\n );\n const virtualFields = fields.filter((field) =>\n isVirtualProp(this.propsDict[field])\n );\n\n if (prefix === \"\") {\n // 현재 테이블인 경우\n r.select = r.select.concat(\n realFields.map((field) => `${this.table}.${field}`)\n );\n r.virtual = r.virtual.concat(virtualFields);\n } else {\n // 넘어온 테이블인 경우\n r.select = r.select.concat(\n realFields.map(\n (field) => `${prefix}.${field} as ${prefix}__${field}`\n )\n );\n }\n\n return r;\n }\n\n const relation = this.relations[groupKey];\n if (relation === undefined) {\n throw new Error(`존재하지 않는 relation 참조 ${groupKey}`);\n }\n const relEntity = EntityManager.get(relation.with);\n\n if (\n isOneToOneRelationProp(relation) ||\n isBelongsToOneRelationProp(relation)\n ) {\n // -One Relation: JOIN 으로 처리\n const relFields = fields.map((field) =>\n field.split(\".\").slice(1).join(\".\")\n );\n\n // -One Relation에서 id 필드만 참조하는 경우 릴레이션 넘기지 않고 리턴\n if (relFields.length === 1 && relFields[0] === \"id\") {\n if (prefix === \"\") {\n r.select = r.select.concat(`${this.table}.${groupKey}_id`);\n } else {\n r.select = r.select.concat(\n `${prefix}.${groupKey}_id as ${prefix}__${groupKey}_id`\n );\n }\n return r;\n }\n\n // innerOrOuter\n const innerOrOuter = (() => {\n if (isAlreadyOuterJoined) {\n return \"outer\";\n }\n\n if (isOneToOneRelationProp(relation)) {\n if (\n relation.hasJoinColumn === true &&\n (relation.nullable ?? false) === false\n ) {\n return \"inner\";\n } else {\n return \"outer\";\n }\n } else {\n if (relation.nullable) {\n return \"outer\";\n } else {\n return \"inner\";\n }\n }\n })();\n const relSubsetQuery = relEntity.resolveSubsetQuery(\n `${prefix !== \"\" ? prefix + \".\" : \"\"}${groupKey}`,\n relFields,\n innerOrOuter === \"outer\"\n );\n r.select = r.select.concat(relSubsetQuery.select);\n r.virtual = r.virtual.concat(relSubsetQuery.virtual);\n\n const joinAs = prefix === \"\" ? groupKey : prefix + \"__\" + groupKey;\n const fromTable = prefix === \"\" ? this.table : prefix;\n\n let joinClause;\n if (relation.customJoinClause) {\n joinClause = {\n custom: relation.customJoinClause,\n };\n } else {\n let from, to;\n if (isOneToOneRelationProp(relation)) {\n if (relation.hasJoinColumn) {\n from = `${fromTable}.${relation.name}_id`;\n to = `${joinAs}.id`;\n } else {\n from = `${fromTable}.id`;\n to = `${joinAs}.${inflection.underscore(\n this.names.fs.replace(/\\-/g, \"_\")\n )}_id`;\n }\n } else {\n from = `${fromTable}.${relation.name}_id`;\n to = `${joinAs}.id`;\n }\n joinClause = {\n from,\n to,\n };\n }\n\n r.joins.push({\n as: joinAs,\n join: innerOrOuter,\n table: relEntity.table,\n ...joinClause,\n });\n\n // BelongsToOne 밑에 HasMany가 붙은 경우\n if (relSubsetQuery.loaders.length > 0) {\n const convertedLoaders = relSubsetQuery.loaders.map((loader) => {\n const newAs = [groupKey, loader.as].join(\"__\");\n return {\n as: newAs,\n table: loader.table,\n manyJoin: loader.manyJoin,\n oneJoins: loader.oneJoins,\n select: loader.select,\n loaders: loader.loaders,\n };\n });\n\n r.loaders = [...r.loaders, ...convertedLoaders];\n }\n\n r.joins = r.joins.concat(relSubsetQuery.joins);\n } else if (\n isHasManyRelationProp(relation) ||\n isManyToManyRelationProp(relation)\n ) {\n // -Many Relation: Loader 로 처리\n const relFields = fields.map((field) =>\n field.split(\".\").slice(1).join(\".\")\n );\n const relSubsetQuery = relEntity.resolveSubsetQuery(\"\", relFields);\n\n let manyJoin: SubsetQuery[\"loaders\"][number][\"manyJoin\"];\n if (isHasManyRelationProp(relation)) {\n const fromCol = relation?.fromColumn ?? \"id\";\n manyJoin = {\n fromTable: this.table,\n fromCol,\n idField: prefix === \"\" ? `${fromCol}` : `${prefix}__${fromCol}`,\n toTable: relEntity.table,\n toCol: relation.joinColumn,\n };\n } else if (isManyToManyRelationProp(relation)) {\n manyJoin = {\n fromTable: this.table,\n fromCol: \"id\",\n idField: prefix === \"\" ? `id` : `${prefix}__id`,\n through: {\n table: relation.joinTable,\n fromCol: `${inflection.singularize(this.table)}_id`,\n toCol: `${inflection.singularize(relEntity.table)}_id`,\n },\n toTable: relEntity.table,\n toCol: \"id\",\n };\n } else {\n throw new Error();\n }\n\n r.loaders.push({\n as: groupKey,\n table: relEntity.table,\n manyJoin,\n oneJoins: relSubsetQuery.joins,\n select: relSubsetQuery.select,\n loaders: relSubsetQuery.loaders,\n });\n }\n\n return r;\n },\n {\n select: [],\n virtual: [],\n joins: [],\n loaders: [],\n } as SubsetQuery\n );\n return result;\n }\n\n /*\n FieldExpr[] 을 EntityPropNode[] 로 변환\n */\n fieldExprsToPropNodes(\n fieldExprs: string[],\n entity: Entity = this\n ): EntityPropNode[] {\n const groups = fieldExprs.reduce(\n (result, fieldExpr) => {\n let key, value, elseExpr;\n if (fieldExpr.includes(\".\")) {\n [key, ...elseExpr] = fieldExpr.split(\".\");\n value = elseExpr.join(\".\");\n } else {\n key = \"\";\n value = fieldExpr;\n }\n result[key] = (result[key] ?? []).concat(value);\n\n return result;\n },\n {} as {\n [k: string]: string[];\n }\n );\n\n return Object.keys(groups)\n .map((key) => {\n const group = groups[key];\n\n // 일반 prop 처리\n if (key === \"\") {\n return group.map((propName) => {\n // uuid 개별 처리\n if (propName === \"uuid\") {\n return {\n nodeType: \"plain\" as const,\n prop: {\n type: \"string\",\n name: \"uuid\",\n length: 128,\n } as StringProp,\n children: [],\n };\n }\n\n const prop = entity.props.find((p) => p.name === propName);\n if (prop === undefined) {\n console.log({ propName, groups });\n throw new Error(`${entity.id} -- 잘못된 FieldExpr ${propName}`);\n }\n return {\n nodeType: \"plain\" as const,\n prop,\n children: [],\n };\n });\n }\n\n // relation prop 처리\n const prop = entity.propsDict[key];\n if (!isRelationProp(prop)) {\n throw new Error(`잘못된 FieldExpr ${key}.${group[0]}`);\n }\n const relEntity = EntityManager.get(prop.with);\n\n // relation -One 에 id 필드 하나인 경우\n if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop)) {\n if (group.length == 1 && (group[0] === \"id\" || group[0] == \"id?\")) {\n // id 하나만 있는지 체크해서, 하나만 있으면 상위 prop으로 id를 리턴\n const idProp = relEntity.propsDict.id;\n return {\n nodeType: \"plain\" as const,\n prop: {\n ...idProp,\n name: key + \"_id\",\n nullable: prop.nullable,\n },\n children: [],\n };\n }\n }\n\n // -One 그외의 경우 object로 리턴\n // -Many의 경우 array로 리턴\n // Recursive 로 뎁스 처리\n const children = this.fieldExprsToPropNodes(group, relEntity);\n const nodeType =\n isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop)\n ? (\"object\" as const)\n : (\"array\" as const);\n\n return {\n prop,\n children,\n nodeType,\n };\n })\n .flat();\n }\n\n getFieldExprs(\n prefix = \"\",\n maxDepth: number = 3,\n froms: string[] = []\n ): string[] {\n return this.props\n .map((prop) => {\n const propName = [prefix, prop.name].filter((v) => v !== \"\").join(\".\");\n if (propName === prefix) {\n return null;\n }\n if (isRelationProp(prop)) {\n if (maxDepth < 0) {\n return null;\n }\n if (froms.includes(prop.with)) {\n // 역방향 relation인 경우 제외\n return null;\n }\n // 정방향 relation인 경우 recursive 콜\n const relMd = EntityManager.get(prop.with);\n return relMd.getFieldExprs(propName, maxDepth - 1, [\n ...froms,\n this.id,\n ]);\n }\n return propName;\n })\n .flat()\n .filter((f) => f !== null) as string[];\n }\n\n getTableColumns(): { name: string; type: string }[] {\n return this.props\n .map((prop) => {\n if (prop.type === \"relation\") {\n if (\n prop.relationType === \"BelongsToOne\" ||\n (prop.relationType === \"OneToOne\" && prop.hasJoinColumn === true)\n ) {\n return { name: `${prop.name}_id`, type: \"int_unsigned\" };\n } else {\n return null;\n }\n }\n return { name: prop.name, type: prop.type };\n })\n .filter(nonNullable);\n }\n\n async registerModulePaths() {\n const basePath = `${this.names.parentFs}`;\n\n // base-scheme\n EntityManager.setModulePath(`${this.id}BaseSchema`, `sonamu.generated`);\n\n // subset\n if (Object.keys(this.subsets).length > 0) {\n EntityManager.setModulePath(`${this.id}SubsetKey`, `sonamu.generated`);\n EntityManager.setModulePath(\n `${this.id}SubsetMapping`,\n `sonamu.generated`\n );\n Object.keys(this.subsets).map((subsetKey) => {\n EntityManager.setModulePath(\n `${this.id}Subset${subsetKey.toUpperCase()}`,\n `sonamu.generated`\n );\n });\n }\n\n // enums\n Object.keys(this.enumLabels).map((enumId) => {\n EntityManager.setModulePath(enumId, `sonamu.generated`);\n });\n\n // types\n const typesModulePath = `${basePath}/${this.names.parentFs}.types`;\n const typesFileDistPath = path.join(\n Sonamu.apiRootPath,\n `dist/application/${typesModulePath}.js`\n );\n\n if (await exists(typesFileDistPath)) {\n const importPath = path.relative(__dirname, typesFileDistPath);\n const t = await import(importPath);\n this.types = Object.keys(t).reduce((result, key) => {\n EntityManager.setModulePath(key, typesModulePath);\n return {\n ...result,\n [key]: t[key],\n };\n }, {});\n }\n }\n\n registerTableSpecs(): void {\n const uniqueIndexes = this.indexes.filter((idx) => idx.type === \"unique\");\n\n EntityManager.setTableSpec({\n name: this.table,\n uniqueIndexes,\n });\n }\n\n toJson(): EntityJson {\n return {\n id: this.id,\n parentId: this.parentId,\n table: this.table,\n title: this.title,\n props: this.props,\n indexes: this.indexes,\n subsets: this.subsets,\n enums: this.enumLabels,\n };\n }\n\n async save(): Promise<void> {\n // sort: subsets\n const subsetRows = this.getSubsetRows();\n this.subsets = Object.fromEntries(\n Object.entries(this.subsets).map(([subsetKey]) => {\n return [\n subsetKey,\n this.subsetRowsToSubsetFields(subsetRows, subsetKey),\n ];\n })\n );\n\n // save\n const jsonPath = path.join(\n Sonamu.apiRootPath,\n `src/application/${this.names.parentFs}/${this.names.fs}.entity.json`\n );\n const json = this.toJson();\n await writeFile(\n jsonPath,\n await prettier.format(JSON.stringify(json), {\n parser: \"json\",\n })\n );\n\n // reload\n await EntityManager.register(json);\n }\n\n getSubsetRows(\n _subsets?: { [key: string]: string[] },\n prefixes: string[] = []\n ): EntitySubsetRow[] {\n if (prefixes.length > 10) {\n return [];\n }\n\n const subsets = _subsets ?? this.subsets;\n const subsetKeys = Object.keys(subsets);\n const allFields = _.uniq(subsetKeys.map((key) => subsets[key]).flat());\n\n return this.props.map((prop) => {\n if (\n prop.type === \"relation\" &&\n allFields.find((f) =>\n f.startsWith([...prefixes, prop.name].join(\".\") + \".\")\n )\n ) {\n const relEntity = EntityManager.get(prop.with);\n const children = relEntity.getSubsetRows(subsets, [\n ...prefixes,\n `${prop.name}`,\n ]);\n\n return {\n field: prop.name,\n children,\n relationEntity: prop.with,\n prefixes,\n isOpen: children.length > 0,\n has: Object.fromEntries(\n subsetKeys.map((subsetKey) => {\n return [\n subsetKey,\n children.every((child) => child.has[subsetKey] === true),\n ];\n })\n ),\n };\n }\n\n return {\n field: prop.name,\n children: [],\n relationEntity: prop.type === \"relation\" ? prop.with : undefined,\n prefixes,\n has: Object.fromEntries(\n subsetKeys.map((subsetKey) => {\n const subsetFields = subsets[subsetKey];\n const has = subsetFields.some((f) => {\n const field = [...prefixes, prop.name].join(\".\");\n return f === field || f.startsWith(field + \".\");\n });\n return [subsetKey, has];\n })\n ),\n };\n });\n }\n\n subsetRowsToSubsetFields(\n subsetRows: EntitySubsetRow[],\n subsetKey: string\n ): string[] {\n return subsetRows\n .map((subsetRow) => {\n if (subsetRow.children.length > 0) {\n return this.subsetRowsToSubsetFields(subsetRow.children, subsetKey);\n } else if (subsetRow.has[subsetKey]) {\n return subsetRow.prefixes.concat(subsetRow.field).join(\".\");\n } else {\n return null;\n }\n })\n .filter(nonNullable)\n .flat();\n }\n\n async createProp(prop: EntityProp, at?: number): Promise<void> {\n if (!at) {\n this.props.push(prop);\n } else {\n this.props.splice(at, 0, prop);\n }\n await this.save();\n }\n\n analyzeSubsetField(subsetField: string): {\n entityId: string;\n propName: string;\n }[] {\n const arr = subsetField.split(\".\");\n\n let entityId = this.id;\n const result: {\n entityId: string;\n propName: string;\n }[] = [];\n for (let i = 0; i < arr.length; i++) {\n const propName = arr[i];\n result.push({\n entityId,\n propName,\n });\n\n const prop = EntityManager.get(entityId).props.find(\n (p) => p.name === propName\n );\n if (!prop) {\n throw new Error(`${entityId}의 잘못된 서브셋키 ${subsetField}`);\n }\n if (isRelationProp(prop)) {\n entityId = prop.with;\n }\n }\n return result;\n }\n\n async modifyProp(newProp: EntityProp, at: number): Promise<void> {\n // 이전 프롭 이름 저장\n const oldName = this.props[at].name;\n\n // 저장할 엔티티\n const entities: Entity[] = [this];\n\n // 이름이 바뀐 경우\n if (oldName !== newProp.name) {\n // 전체 엔티티에서 현재 수정된 프롭을 참조하고 있는 모든 서브셋필드 찾아서 수정\n const allEntityIds = EntityManager.getAllIds();\n for (const relEntityId of allEntityIds) {\n const relEntity = EntityManager.get(relEntityId);\n const relEntitySubsetKeys = Object.keys(relEntity.subsets);\n for (const subsetKey of relEntitySubsetKeys) {\n const subset = relEntity.subsets[subsetKey];\n\n // 서브셋 필드를 순회하며, 엔티티-프롭 단위로 분석한 후 현재 엔티티-프롭과 일치하는 경우 수정 처리\n const modifiedSubsetFields = subset.map((subsetField) => {\n const analyzed = relEntity.analyzeSubsetField(subsetField);\n const modified = analyzed.map((a) =>\n a.propName === oldName && a.entityId === this.id\n ? {\n ...a,\n propName: newProp.name,\n }\n : a\n );\n // 분석한 필드를 다시 서브셋 필드로 복구\n return modified.map((a) => a.propName).join(\".\");\n });\n\n if (subset.join(\",\") !== modifiedSubsetFields.join(\",\")) {\n relEntity.subsets[subsetKey] = modifiedSubsetFields;\n entities.push(relEntity);\n }\n }\n }\n }\n\n // 프롭 수정\n this.props[at] = newProp;\n\n await Promise.all(entities.map(async (entity) => entity.save()));\n }\n\n async delProp(at: number): Promise<void> {\n // 이전 프롭 이름 저장\n const oldName = this.props[at].name;\n\n // 저장할 엔티티\n const entities: Entity[] = [this];\n\n // 전체 엔티티에서 현재 삭제된 프롭을 참조하고 있는 모든 서브셋필드 찾아서 제외\n const allEntityIds = EntityManager.getAllIds();\n for (const relEntityId of allEntityIds) {\n const relEntity = EntityManager.get(relEntityId);\n const relEntitySubsetKeys = Object.keys(relEntity.subsets);\n for (const subsetKey of relEntitySubsetKeys) {\n const subset = relEntity.subsets[subsetKey];\n // 서브셋 필드를 순회하며, 엔티티-프롭 단위로 분석한 후 현재 엔티티-프롭과 일치하는 경우 이후의 필드를 제외\n const modifiedSubsetFields = subset\n .map((subsetField) => {\n const analyzed = relEntity.analyzeSubsetField(subsetField);\n if (\n analyzed.find(\n (a) => a.propName === oldName && a.entityId === this.id\n )\n ) {\n return null;\n } else {\n return subsetField;\n }\n })\n .filter(nonNullable);\n\n if (subset.join(\",\") !== modifiedSubsetFields.join(\",\")) {\n relEntity.subsets[subsetKey] = modifiedSubsetFields;\n entities.push(relEntity);\n }\n }\n }\n\n // 현재 엔티티의 인덱스에서 제외\n EntityManager.get(this.id).indexes.map((index) => {\n index.columns = index.columns.filter((col) => col !== oldName);\n });\n\n // 프롭 삭제\n this.props.splice(at, 1);\n\n await Promise.all(entities.map(async (entity) => entity.save()));\n }\n\n getEntityIdFromSubsetField(subsetField: string): string {\n if (subsetField.includes(\".\") === false) {\n return this.id;\n }\n\n // 서브셋 필드의 마지막은 프롭이므로 제외\n const arr = subsetField.split(\".\").slice(0, -1);\n\n // 서브셋 필드를 내려가면서 마지막으로 relation된 엔티티를 찾음\n const lastEntityId = arr.reduce((entityId, field) => {\n const relProp = EntityManager.get(entityId).props.find(\n (p) => p.name === field\n );\n if (!relProp || relProp.type !== \"relation\") {\n console.debug({ arr, thisId: this.id, entityId, field });\n throw new Error(`잘못된 서브셋키 ${subsetField}`);\n }\n return relProp.with;\n }, this.id);\n return lastEntityId;\n }\n\n async moveProp(at: number, to: number): Promise<void> {\n const prop = this.props[at];\n const newProps = [...this.props];\n newProps.splice(to, 0, prop);\n newProps.splice(at < to ? at : at + 1, 1);\n this.props = newProps;\n\n await this.save();\n }\n}\n"],"names":["Entity","id","parentId","table","title","props","indexes","subsets","enums","names","propsDict","relations","types","enumLabels","inflection","underscore","pluralize","map","prop","isEnumProp","includes","replace","reduce","result","name","filter","isRelationProp","Object","fromEntries","entries","key","enumLabel","z","enum","keys","parentFs","dasherize","toLowerCase","fs","module","getSubsetQuery","subsetKey","subset","resolveSubsetQuery","prefix","fields","isAlreadyOuterJoined","subsetGroup","_","groupBy","field","split","rel","r","groupKey","realFields","isVirtualProp","virtualFields","select","concat","virtual","relation","undefined","Error","relEntity","EntityManager","get","with","isOneToOneRelationProp","isBelongsToOneRelationProp","relFields","slice","join","length","innerOrOuter","hasJoinColumn","nullable","relSubsetQuery","joinAs","fromTable","joinClause","customJoinClause","custom","from","to","joins","push","as","loaders","convertedLoaders","loader","newAs","manyJoin","oneJoins","isHasManyRelationProp","isManyToManyRelationProp","fromCol","fromColumn","idField","toTable","toCol","joinColumn","through","joinTable","singularize","fieldExprsToPropNodes","fieldExprs","entity","groups","fieldExpr","value","elseExpr","group","propName","nodeType","type","children","find","p","console","log","idProp","flat","getFieldExprs","maxDepth","froms","v","relMd","f","getTableColumns","relationType","nonNullable","registerModulePaths","basePath","typesModulePath","typesFileDistPath","importPath","t","setModulePath","toUpperCase","enumId","path","Sonamu","apiRootPath","exists","relative","__dirname","registerTableSpecs","uniqueIndexes","idx","setTableSpec","toJson","save","subsetRows","jsonPath","json","getSubsetRows","subsetRowsToSubsetFields","prettier","format","JSON","stringify","parser","writeFile","register","_subsets","prefixes","subsetKeys","allFields","uniq","startsWith","relationEntity","isOpen","has","every","child","subsetFields","some","subsetRow","createProp","at","splice","analyzeSubsetField","subsetField","arr","i","entityId","modifyProp","newProp","oldName","entities","allEntityIds","getAllIds","relEntityId","relEntitySubsetKeys","modifiedSubsetFields","analyzed","modified","a","Promise","all","delProp","index","columns","col","getEntityIdFromSubsetField","lastEntityId","relProp","debug","thisId","moveProp","newProps"],"mappings":"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"}
|