sonamu 0.5.7 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.swcrc.project-default +18 -0
- package/bin/cli.js +24 -0
- package/dist/ai/agents/agent.d.ts +11 -0
- package/dist/ai/agents/agent.d.ts.map +1 -0
- package/dist/ai/agents/agent.js +65 -0
- package/dist/ai/agents/index.d.ts +3 -0
- package/dist/ai/agents/index.d.ts.map +1 -0
- package/dist/ai/agents/index.js +4 -0
- package/dist/ai/agents/types.d.ts +43 -0
- package/dist/ai/agents/types.d.ts.map +1 -0
- package/dist/ai/agents/types.js +3 -0
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +3 -0
- package/dist/ai/providers/rtzr/api.d.ts +22 -0
- package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/api.js +28 -0
- package/dist/ai/providers/rtzr/error.d.ts +18 -0
- package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/error.js +29 -0
- package/dist/ai/providers/rtzr/index.d.ts +5 -0
- package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/index.js +6 -0
- package/dist/ai/providers/rtzr/model.d.ts +52 -0
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/model.js +137 -0
- package/dist/ai/providers/rtzr/options.d.ts +7 -0
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/options.js +47 -0
- package/dist/ai/providers/rtzr/provider.d.ts +18 -0
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/provider.js +54 -0
- package/dist/ai/providers/rtzr/utils.d.ts +19 -0
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
- package/dist/ai/providers/rtzr/utils.js +88 -0
- package/dist/api/base-frame.d.ts +2 -2
- package/dist/api/base-frame.d.ts.map +1 -1
- package/dist/api/base-frame.js +13 -2
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +71 -2
- package/dist/api/code-converters.d.ts +58 -14
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +258 -2
- package/dist/api/config.d.ts +90 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +25 -0
- package/dist/api/context.d.ts +4 -2
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +3 -2
- package/dist/api/decorators.d.ts +20 -6
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +235 -2
- package/dist/api/index.d.ts +2 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +9 -2
- package/dist/api/sonamu.d.ts +10 -24
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +514 -2
- package/dist/api/validator.d.ts +6 -0
- package/dist/api/validator.d.ts.map +1 -0
- package/dist/api/validator.js +81 -0
- package/dist/bin/build-config.d.ts +6 -1
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +15 -2
- package/dist/bin/cli.js +519 -2
- package/dist/bin/hot-hook-register.d.ts +11 -0
- package/dist/bin/hot-hook-register.d.ts.map +1 -0
- package/dist/bin/hot-hook-register.js +21 -0
- package/dist/bin/loader-register.d.ts +2 -0
- package/dist/bin/loader-register.d.ts.map +1 -0
- package/dist/bin/loader-register.js +34 -0
- package/dist/database/_batch_update.d.ts +5 -3
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +95 -2
- package/dist/database/base-model.d.ts +96 -10
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +390 -2
- package/dist/database/base-model.types.d.ts +93 -0
- package/dist/database/base-model.types.d.ts.map +1 -0
- package/dist/database/base-model.types.js +10 -0
- package/dist/database/code-generator.d.ts +1 -1
- package/dist/database/code-generator.d.ts.map +1 -1
- package/dist/database/code-generator.js +54 -2
- package/dist/database/db.d.ts +6 -21
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +129 -2
- package/dist/database/puri-subset.test-d.js +81 -0
- package/dist/database/puri-subset.types.d.ts +123 -0
- package/dist/database/puri-subset.types.d.ts.map +1 -0
- package/dist/database/puri-subset.types.js +16 -0
- package/dist/database/puri-wrapper.d.ts +13 -11
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +109 -2
- package/dist/database/puri.d.ts +41 -23
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +601 -2
- package/dist/database/puri.types.d.ts +25 -6
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +6 -2
- package/dist/database/transaction-context.d.ts +1 -1
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +14 -2
- package/dist/database/upsert-builder.d.ts +9 -3
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +365 -2
- package/dist/entity/entity-manager.d.ts +167 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +130 -2
- package/dist/entity/entity.d.ts +5 -3
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +750 -2
- package/dist/exceptions/error-handler.d.ts +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +29 -2
- package/dist/exceptions/so-exceptions.d.ts +1 -1
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +85 -2
- package/dist/file-storage/driver.d.ts +1 -1
- package/dist/file-storage/driver.d.ts.map +1 -1
- package/dist/file-storage/driver.js +79 -2
- package/dist/file-storage/file-storage.js +75 -2
- package/dist/index.d.ts +18 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -2
- package/dist/migration/code-generation.d.ts +1 -1
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +614 -2
- package/dist/migration/migration-set.d.ts +2 -10
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +213 -2
- package/dist/migration/migrator.d.ts +24 -82
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +330 -2
- package/dist/migration/postgresql-schema-reader.d.ts +51 -0
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
- package/dist/migration/postgresql-schema-reader.js +245 -0
- package/dist/migration/types.d.ts +6 -38
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/migration/types.js +3 -2
- package/dist/naite/messaging-types.d.ts +43 -0
- package/dist/naite/messaging-types.d.ts.map +1 -0
- package/dist/naite/messaging-types.js +7 -0
- package/dist/naite/naite-reporter.d.ts +41 -0
- package/dist/naite/naite-reporter.d.ts.map +1 -0
- package/dist/naite/naite-reporter.js +102 -0
- package/dist/naite/naite.d.ts +95 -0
- package/dist/naite/naite.d.ts.map +1 -0
- package/dist/naite/naite.js +316 -0
- package/dist/stream/index.js +3 -2
- package/dist/stream/sse.d.ts +2 -2
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +38 -2
- package/dist/syncer/api-parser.d.ts +10 -0
- package/dist/syncer/api-parser.d.ts.map +1 -0
- package/dist/syncer/api-parser.js +240 -0
- package/dist/syncer/checksum.d.ts +21 -0
- package/dist/syncer/checksum.d.ts.map +1 -0
- package/dist/syncer/checksum.js +98 -0
- package/dist/syncer/code-generator.d.ts +20 -0
- package/dist/syncer/code-generator.d.ts.map +1 -0
- package/dist/syncer/code-generator.js +161 -0
- package/dist/syncer/entity-operations.d.ts +17 -0
- package/dist/syncer/entity-operations.d.ts.map +1 -0
- package/dist/syncer/entity-operations.js +59 -0
- package/dist/syncer/file-patterns.d.ts +29 -0
- package/dist/syncer/file-patterns.d.ts.map +1 -0
- package/dist/syncer/file-patterns.js +38 -0
- package/dist/syncer/index.d.ts +6 -0
- package/dist/syncer/index.d.ts.map +1 -1
- package/dist/syncer/index.js +9 -2
- package/dist/syncer/module-loader.d.ts +35 -0
- package/dist/syncer/module-loader.d.ts.map +1 -0
- package/dist/syncer/module-loader.js +87 -0
- package/dist/syncer/syncer.d.ts +98 -106
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +422 -2
- package/dist/template/entity-converter.d.ts +14 -0
- package/dist/template/entity-converter.d.ts.map +1 -0
- package/dist/template/entity-converter.js +108 -0
- package/dist/template/helpers.d.ts +23 -0
- package/dist/template/helpers.d.ts.map +1 -0
- package/dist/template/helpers.js +64 -0
- package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
- package/dist/template/implementations/entity.template.d.ts.map +1 -0
- package/dist/template/implementations/entity.template.js +86 -0
- package/dist/{templates → template/implementations}/generated.template.d.ts +3 -4
- package/dist/template/implementations/generated.template.d.ts.map +1 -0
- package/dist/template/implementations/generated.template.js +249 -0
- package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -4
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
- package/dist/template/implementations/generated_http.template.js +131 -0
- package/dist/{templates → template/implementations}/generated_sso.template.d.ts +4 -5
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
- package/dist/template/implementations/generated_sso.template.js +134 -0
- package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
- package/dist/template/implementations/init_types.template.d.ts.map +1 -0
- package/dist/template/implementations/init_types.template.js +38 -0
- package/dist/template/implementations/model.template.d.ts +17 -0
- package/dist/template/implementations/model.template.d.ts.map +1 -0
- package/dist/template/implementations/model.template.js +181 -0
- package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
- package/dist/template/implementations/model_test.template.d.ts.map +1 -0
- package/dist/template/implementations/model_test.template.js +35 -0
- package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
- package/dist/template/implementations/service.template.d.ts.map +1 -0
- package/dist/template/implementations/service.template.js +201 -0
- package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
- package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
- package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
- package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
- package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
- package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
- package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
- package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
- package/dist/template/implementations/view_enums_select.template.js +55 -0
- package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
- package/dist/template/implementations/view_form.template.d.ts.map +1 -0
- package/dist/template/implementations/view_form.template.js +337 -0
- package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
- package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
- package/dist/template/implementations/view_id_all_select.template.js +31 -0
- package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
- package/dist/template/implementations/view_id_async_select.template.js +105 -0
- package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
- package/dist/template/implementations/view_list.template.d.ts.map +1 -0
- package/dist/template/implementations/view_list.template.js +475 -0
- package/dist/template/implementations/view_list_columns.template.d.ts +17 -0
- package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
- package/dist/template/implementations/view_list_columns.template.js +49 -0
- package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
- package/dist/template/implementations/view_search_input.template.js +64 -0
- package/dist/template/index.d.ts +7 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +8 -0
- package/dist/template/template-manager.d.ts +56 -0
- package/dist/template/template-manager.d.ts.map +1 -0
- package/dist/template/template-manager.js +125 -0
- package/dist/template/template-types.d.ts +16 -0
- package/dist/template/template-types.d.ts.map +1 -0
- package/dist/template/template-types.js +7 -0
- package/dist/template/template.d.ts +49 -0
- package/dist/template/template.d.ts.map +1 -0
- package/dist/template/template.js +60 -0
- package/dist/template/zod-converter.d.ts +51 -0
- package/dist/template/zod-converter.d.ts.map +1 -0
- package/dist/template/zod-converter.js +449 -0
- package/dist/testing/_relation-graph.d.ts +1 -1
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +89 -2
- package/dist/testing/fixture-manager.d.ts +42 -11
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +623 -2
- package/dist/types/types.d.ts +747 -143
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +546 -2
- package/dist/typings/knex.d.js +3 -2
- package/dist/utils/async-utils.d.ts +7 -0
- package/dist/utils/async-utils.d.ts.map +1 -1
- package/dist/utils/async-utils.js +57 -2
- package/dist/utils/console-util.d.ts +2 -0
- package/dist/utils/console-util.d.ts.map +1 -0
- package/dist/utils/console-util.js +6 -0
- package/dist/utils/controller.d.ts +1 -0
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +29 -2
- package/dist/utils/esm-utils.d.ts +39 -0
- package/dist/utils/esm-utils.d.ts.map +1 -0
- package/dist/utils/esm-utils.js +49 -0
- package/dist/utils/formatter.d.ts +3 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +110 -0
- package/dist/utils/fs-utils.d.ts +1 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +17 -2
- package/dist/utils/lodash-able.d.ts.map +1 -1
- package/dist/utils/lodash-able.js +6 -2
- package/dist/utils/model.js +22 -2
- package/dist/utils/object-utils.d.ts +44 -0
- package/dist/utils/object-utils.d.ts.map +1 -0
- package/dist/utils/object-utils.js +191 -0
- package/dist/utils/path-utils.d.ts +89 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +60 -0
- package/dist/utils/process-utils.d.ts +13 -0
- package/dist/utils/process-utils.d.ts.map +1 -0
- package/dist/utils/process-utils.js +36 -0
- package/dist/utils/sql-parser.d.ts +5 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +46 -2
- package/dist/utils/type-utils.d.ts +23 -0
- package/dist/utils/type-utils.d.ts.map +1 -0
- package/dist/utils/type-utils.js +45 -0
- package/dist/utils/utils.d.ts +10 -7
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +72 -2
- package/dist/utils/zod-error.d.ts +1 -1
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +19 -2
- package/package.json +65 -27
- package/src/ai/agents/agent.ts +87 -0
- package/src/ai/agents/index.ts +2 -0
- package/src/ai/agents/types.ts +47 -0
- package/src/ai/index.ts +1 -0
- package/src/ai/providers/rtzr/api.ts +37 -0
- package/src/ai/providers/rtzr/error.ts +34 -0
- package/src/ai/providers/rtzr/index.ts +4 -0
- package/src/ai/providers/rtzr/model.ts +201 -0
- package/src/ai/providers/rtzr/options.ts +49 -0
- package/src/ai/providers/rtzr/provider.ts +91 -0
- package/src/ai/providers/rtzr/utils.ts +127 -0
- package/src/api/base-frame.ts +4 -2
- package/src/api/caster.ts +17 -23
- package/src/api/code-converters.ts +178 -535
- package/src/api/config.ts +125 -0
- package/src/api/context.ts +7 -17
- package/src/api/decorators.ts +176 -46
- package/src/api/index.ts +2 -2
- package/src/api/sonamu.ts +190 -167
- package/src/api/validator.ts +83 -0
- package/src/bin/build-config.ts +8 -1
- package/src/bin/cli.ts +258 -124
- package/src/bin/hot-hook-register.ts +22 -0
- package/src/bin/loader-register.ts +38 -0
- package/src/database/_batch_update.ts +46 -31
- package/src/database/base-model.ts +390 -182
- package/src/database/base-model.types.ts +155 -0
- package/src/database/code-generator.ts +13 -32
- package/src/database/db.ts +40 -96
- package/src/database/puri-subset.test-d.ts +471 -0
- package/src/database/puri-subset.types.ts +195 -0
- package/src/database/puri-wrapper.ts +58 -67
- package/src/database/puri.ts +229 -148
- package/src/database/puri.types.ts +76 -30
- package/src/database/transaction-context.ts +1 -1
- package/src/database/upsert-builder.ts +262 -132
- package/src/entity/entity-manager.ts +48 -36
- package/src/entity/entity.ts +330 -248
- package/src/exceptions/error-handler.ts +3 -3
- package/src/exceptions/so-exceptions.ts +11 -11
- package/src/file-storage/driver.ts +5 -5
- package/src/file-storage/file-storage.ts +2 -2
- package/src/index.ts +18 -10
- package/src/migration/code-generation.ts +185 -172
- package/src/migration/migration-set.ts +80 -293
- package/src/migration/migrator.ts +199 -571
- package/src/migration/mysql-schema-reader.ts.txt +272 -0
- package/src/migration/postgresql-schema-reader.ts +310 -0
- package/src/migration/types.ts +6 -39
- package/src/naite/messaging-types.ts +51 -0
- package/src/naite/naite-reporter.ts +128 -0
- package/src/naite/naite.ts +415 -0
- package/src/shared/web.shared.ts.txt +20 -24
- package/src/stream/sse.ts +5 -5
- package/src/syncer/api-parser.ts +282 -0
- package/src/syncer/checksum.ts +140 -0
- package/src/syncer/code-generator.ts +198 -0
- package/src/syncer/entity-operations.ts +65 -0
- package/src/syncer/file-patterns.ts +56 -0
- package/src/syncer/index.ts +6 -0
- package/src/syncer/module-loader.ts +128 -0
- package/src/syncer/syncer.ts +389 -1453
- package/src/template/entity-converter.ts +114 -0
- package/src/template/helpers.ts +81 -0
- package/src/{templates → template/implementations}/entity.template.ts +7 -7
- package/src/{templates → template/implementations}/generated.template.ts +101 -101
- package/src/{templates → template/implementations}/generated_http.template.ts +27 -57
- package/src/template/implementations/generated_sso.template.ts +151 -0
- package/src/{templates → template/implementations}/init_types.template.ts +5 -7
- package/src/{templates → template/implementations}/model.template.ts +52 -43
- package/src/{templates → template/implementations}/model_test.template.ts +5 -5
- package/src/{templates → template/implementations}/service.template.ts +66 -82
- package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
- package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +4 -20
- package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
- package/src/{templates → template/implementations}/view_form.template.ts +40 -83
- package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
- package/src/{templates → template/implementations}/view_id_async_select.template.ts +10 -24
- package/src/{templates → template/implementations}/view_list.template.ts +60 -152
- package/src/{templates → template/implementations}/view_list_columns.template.ts +5 -11
- package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
- package/src/template/index.ts +6 -0
- package/src/template/template-manager.ts +166 -0
- package/src/template/template-types.ts +16 -0
- package/src/template/template.ts +105 -0
- package/src/template/zod-converter.ts +525 -0
- package/src/testing/_relation-graph.ts +18 -11
- package/src/testing/fixture-manager.ts +472 -359
- package/src/types/types.ts +553 -308
- package/src/typings/knex.d.ts +7 -9
- package/src/utils/async-utils.ts +23 -10
- package/src/utils/console-util.ts +4 -0
- package/src/utils/controller.ts +3 -0
- package/src/utils/esm-utils.ts +59 -0
- package/src/utils/formatter.ts +109 -0
- package/src/utils/fs-utils.ts +1 -1
- package/src/utils/lodash-able.ts +1 -4
- package/src/utils/object-utils.ts +217 -0
- package/src/utils/path-utils.ts +99 -0
- package/src/utils/process-utils.ts +46 -0
- package/src/utils/sql-parser.ts +23 -5
- package/src/utils/type-utils.ts +83 -0
- package/src/utils/utils.ts +66 -43
- package/src/utils/zod-error.ts +3 -4
- package/dist/api/base-frame.js.map +0 -1
- package/dist/api/caster.js.map +0 -1
- package/dist/api/code-converters.js.map +0 -1
- package/dist/api/context.js.map +0 -1
- package/dist/api/decorators.js.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/sonamu.js.map +0 -1
- package/dist/bin/build-config.js.map +0 -1
- package/dist/bin/cli-wrapper.d.ts +0 -3
- package/dist/bin/cli-wrapper.d.ts.map +0 -1
- package/dist/bin/cli-wrapper.js +0 -3
- package/dist/bin/cli-wrapper.js.map +0 -1
- package/dist/bin/cli.js.map +0 -1
- package/dist/database/_batch_update.js.map +0 -1
- package/dist/database/base-model.js.map +0 -1
- package/dist/database/code-generator.js.map +0 -1
- package/dist/database/db.js.map +0 -1
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
- package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
- package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -2
- package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
- package/dist/database/puri-wrapper.js.map +0 -1
- package/dist/database/puri.js.map +0 -1
- package/dist/database/puri.types.js.map +0 -1
- package/dist/database/transaction-context.js.map +0 -1
- package/dist/database/upsert-builder.js.map +0 -1
- package/dist/entity/entity-manager.js.map +0 -1
- package/dist/entity/entity-utils.d.ts +0 -61
- package/dist/entity/entity-utils.d.ts.map +0 -1
- package/dist/entity/entity-utils.js +0 -2
- package/dist/entity/entity-utils.js.map +0 -1
- package/dist/entity/entity.js.map +0 -1
- package/dist/exceptions/error-handler.js.map +0 -1
- package/dist/exceptions/so-exceptions.js.map +0 -1
- package/dist/file-storage/driver.js.map +0 -1
- package/dist/file-storage/file-storage.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/migration/code-generation.js.map +0 -1
- package/dist/migration/migration-set.js.map +0 -1
- package/dist/migration/migrator.js.map +0 -1
- package/dist/migration/types.js.map +0 -1
- package/dist/stream/index.js.map +0 -1
- package/dist/stream/sse.js.map +0 -1
- package/dist/syncer/index.js.map +0 -1
- package/dist/syncer/syncer.js.map +0 -1
- package/dist/templates/base-template.d.ts +0 -13
- package/dist/templates/base-template.d.ts.map +0 -1
- package/dist/templates/base-template.js +0 -2
- package/dist/templates/base-template.js.map +0 -1
- package/dist/templates/entity.template.d.ts.map +0 -1
- package/dist/templates/entity.template.js +0 -2
- package/dist/templates/entity.template.js.map +0 -1
- package/dist/templates/generated.template.d.ts.map +0 -1
- package/dist/templates/generated.template.js +0 -2
- package/dist/templates/generated.template.js.map +0 -1
- package/dist/templates/generated_http.template.d.ts.map +0 -1
- package/dist/templates/generated_http.template.js +0 -2
- package/dist/templates/generated_http.template.js.map +0 -1
- package/dist/templates/generated_sso.template.d.ts.map +0 -1
- package/dist/templates/generated_sso.template.js +0 -2
- package/dist/templates/generated_sso.template.js.map +0 -1
- package/dist/templates/index.d.ts +0 -2
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js +0 -2
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/init_types.template.d.ts.map +0 -1
- package/dist/templates/init_types.template.js +0 -2
- package/dist/templates/init_types.template.js.map +0 -1
- package/dist/templates/model.template.d.ts +0 -17
- package/dist/templates/model.template.d.ts.map +0 -1
- package/dist/templates/model.template.js +0 -2
- package/dist/templates/model.template.js.map +0 -1
- package/dist/templates/model_test.template.d.ts.map +0 -1
- package/dist/templates/model_test.template.js +0 -2
- package/dist/templates/model_test.template.js.map +0 -1
- package/dist/templates/service.template.d.ts.map +0 -1
- package/dist/templates/service.template.js +0 -2
- package/dist/templates/service.template.js.map +0 -1
- package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
- package/dist/templates/view_enums_buttonset.template.js +0 -2
- package/dist/templates/view_enums_buttonset.template.js.map +0 -1
- package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
- package/dist/templates/view_enums_dropdown.template.js +0 -2
- package/dist/templates/view_enums_dropdown.template.js.map +0 -1
- package/dist/templates/view_enums_select.template.d.ts.map +0 -1
- package/dist/templates/view_enums_select.template.js +0 -2
- package/dist/templates/view_enums_select.template.js.map +0 -1
- package/dist/templates/view_form.template.d.ts.map +0 -1
- package/dist/templates/view_form.template.js +0 -2
- package/dist/templates/view_form.template.js.map +0 -1
- package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
- package/dist/templates/view_id_all_select.template.js +0 -2
- package/dist/templates/view_id_all_select.template.js.map +0 -1
- package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
- package/dist/templates/view_id_async_select.template.js +0 -2
- package/dist/templates/view_id_async_select.template.js.map +0 -1
- package/dist/templates/view_list.template.d.ts.map +0 -1
- package/dist/templates/view_list.template.js +0 -2
- package/dist/templates/view_list.template.js.map +0 -1
- package/dist/templates/view_list_columns.template.d.ts +0 -17
- package/dist/templates/view_list_columns.template.d.ts.map +0 -1
- package/dist/templates/view_list_columns.template.js +0 -2
- package/dist/templates/view_list_columns.template.js.map +0 -1
- package/dist/templates/view_search_input.template.d.ts.map +0 -1
- package/dist/templates/view_search_input.template.js +0 -2
- package/dist/templates/view_search_input.template.js.map +0 -1
- package/dist/testing/_relation-graph.js.map +0 -1
- package/dist/testing/fixture-manager.js.map +0 -1
- package/dist/types/types.js.map +0 -1
- package/dist/typings/knex.d.js.map +0 -1
- package/dist/utils/async-utils.js.map +0 -1
- package/dist/utils/controller.js.map +0 -1
- package/dist/utils/fs-utils.js.map +0 -1
- package/dist/utils/lodash-able.js.map +0 -1
- package/dist/utils/model.js.map +0 -1
- package/dist/utils/sql-parser.js.map +0 -1
- package/dist/utils/utils.js.map +0 -1
- package/dist/utils/zod-error.js.map +0 -1
- package/src/bin/cli-wrapper.ts +0 -75
- package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
- package/src/entity/entity-utils.ts +0 -291
- package/src/templates/base-template.ts +0 -19
- package/src/templates/generated_sso.template.ts +0 -138
- package/src/templates/index.ts +0 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 값이 Vitest worker/process 간 전달 가능한지 검증합니다.
|
|
3
|
+
* Serializable하다는 것은 결국 message port와 process.send를 통해 전달 가능한 것을 의미합니다.
|
|
4
|
+
*
|
|
5
|
+
* @param value - 검증할 값
|
|
6
|
+
* @param path - 현재 경로 (에러 메시지용, 내부 재귀에서 사용)
|
|
7
|
+
* @param seen - 순환 참조 감지용 WeakSet (내부 재귀에서 사용)
|
|
8
|
+
* @returns 검증 결과 { valid: boolean, reason?: string }
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* isSerializable({ a: 1, b: "hello" }) // { valid: true }
|
|
12
|
+
* isSerializable({ fn: () => {} }) // { valid: false, reason: "Function at fn" }
|
|
13
|
+
* isSerializable({ deep: { nested: Promise.resolve() } }) // { valid: false, reason: "Promise at deep.nested" }
|
|
14
|
+
*/ export function isSerializable(value, path = [], seen = new WeakSet()) {
|
|
15
|
+
// typeof null === 'object'이므로 먼저 처리
|
|
16
|
+
if (value === null) {
|
|
17
|
+
return {
|
|
18
|
+
valid: true
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const type = typeof value;
|
|
22
|
+
if (type === "string" || type === "number" || type === "boolean" || type === "undefined") {
|
|
23
|
+
return {
|
|
24
|
+
valid: true
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (type === "bigint") {
|
|
28
|
+
return {
|
|
29
|
+
valid: true
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (type === "function") {
|
|
33
|
+
return {
|
|
34
|
+
valid: false,
|
|
35
|
+
reason: `Function at ${formatPath(path)}`
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (type === "symbol") {
|
|
39
|
+
return {
|
|
40
|
+
valid: false,
|
|
41
|
+
reason: `Symbol at ${formatPath(path)}`
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (type === "object") {
|
|
45
|
+
const obj = value;
|
|
46
|
+
if (obj instanceof Promise) {
|
|
47
|
+
return {
|
|
48
|
+
valid: false,
|
|
49
|
+
reason: `Promise at ${formatPath(path)}`
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (obj instanceof RegExp) {
|
|
53
|
+
return {
|
|
54
|
+
valid: false,
|
|
55
|
+
reason: `RegExp at ${formatPath(path)}`
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (obj instanceof WeakMap) {
|
|
59
|
+
return {
|
|
60
|
+
valid: false,
|
|
61
|
+
reason: `WeakMap at ${formatPath(path)}`
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (obj instanceof WeakSet) {
|
|
65
|
+
return {
|
|
66
|
+
valid: false,
|
|
67
|
+
reason: `WeakSet at ${formatPath(path)}`
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (typeof WeakRef !== "undefined" && obj instanceof WeakRef) {
|
|
71
|
+
return {
|
|
72
|
+
valid: false,
|
|
73
|
+
reason: `WeakRef at ${formatPath(path)}`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// 순환 참조 허용하되 무한루프 방지
|
|
77
|
+
if (seen.has(obj)) {
|
|
78
|
+
return {
|
|
79
|
+
valid: true
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
seen.add(obj);
|
|
83
|
+
if (obj instanceof Date) {
|
|
84
|
+
return {
|
|
85
|
+
valid: true
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (obj instanceof ArrayBuffer) {
|
|
89
|
+
return {
|
|
90
|
+
valid: true
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (ArrayBuffer.isView(obj)) {
|
|
94
|
+
return {
|
|
95
|
+
valid: true
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (obj instanceof Map) {
|
|
99
|
+
let i = 0;
|
|
100
|
+
for (const [k, v] of obj){
|
|
101
|
+
const keyResult = isSerializable(k, [
|
|
102
|
+
...path,
|
|
103
|
+
`Map.key[${i}]`
|
|
104
|
+
], seen);
|
|
105
|
+
if (!keyResult.valid) return keyResult;
|
|
106
|
+
const valResult = isSerializable(v, [
|
|
107
|
+
...path,
|
|
108
|
+
`Map.value[${i}]`
|
|
109
|
+
], seen);
|
|
110
|
+
if (!valResult.valid) return valResult;
|
|
111
|
+
i++;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
valid: true
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (obj instanceof Set) {
|
|
118
|
+
let i = 0;
|
|
119
|
+
for (const item of obj){
|
|
120
|
+
const result = isSerializable(item, [
|
|
121
|
+
...path,
|
|
122
|
+
`Set[${i}]`
|
|
123
|
+
], seen);
|
|
124
|
+
if (!result.valid) return result;
|
|
125
|
+
i++;
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
valid: true
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (Array.isArray(obj)) {
|
|
132
|
+
for(let i = 0; i < obj.length; i++){
|
|
133
|
+
const result = isSerializable(obj[i], [
|
|
134
|
+
...path,
|
|
135
|
+
`[${i}]`
|
|
136
|
+
], seen);
|
|
137
|
+
if (!result.valid) return result;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
valid: true
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Vitest는 Error를 허용하지만 속성은 직렬화 필요
|
|
144
|
+
if (obj instanceof Error) {
|
|
145
|
+
const errorProps = Object.keys(obj).filter((k)=>![
|
|
146
|
+
"name",
|
|
147
|
+
"message",
|
|
148
|
+
"stack"
|
|
149
|
+
].includes(k));
|
|
150
|
+
for (const key of errorProps){
|
|
151
|
+
const result = isSerializable(obj[key], [
|
|
152
|
+
...path,
|
|
153
|
+
key
|
|
154
|
+
], seen);
|
|
155
|
+
if (!result.valid) return result;
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
valid: true
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// Object.prototype 또는 null을 프로토타입으로 가지는 경우만 plain object
|
|
162
|
+
const proto = Object.getPrototypeOf(obj);
|
|
163
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
164
|
+
const constructorName = obj.constructor?.name ?? "Unknown";
|
|
165
|
+
return {
|
|
166
|
+
valid: false,
|
|
167
|
+
reason: `Class instance (${constructorName}) at ${formatPath(path)}`
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
for (const key of Object.keys(obj)){
|
|
171
|
+
const result = isSerializable(obj[key], [
|
|
172
|
+
...path,
|
|
173
|
+
key
|
|
174
|
+
], seen);
|
|
175
|
+
if (!result.valid) return result;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
valid: true
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
valid: false,
|
|
183
|
+
reason: `Unknown type (${type}) at ${formatPath(path)}`
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function formatPath(path) {
|
|
187
|
+
if (path.length === 0) return "(root)";
|
|
188
|
+
return path.join(".");
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9vYmplY3QtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsidHlwZSBQcmltaXRpdmUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxudHlwZSBUeXBlZEFycmF5ID1cbiAgfCBJbnQ4QXJyYXlcbiAgfCBVaW50OEFycmF5XG4gIHwgVWludDhDbGFtcGVkQXJyYXlcbiAgfCBJbnQxNkFycmF5XG4gIHwgVWludDE2QXJyYXlcbiAgfCBJbnQzMkFycmF5XG4gIHwgVWludDMyQXJyYXlcbiAgfCBGbG9hdDMyQXJyYXlcbiAgfCBGbG9hdDY0QXJyYXlcbiAgfCBCaWdJbnQ2NEFycmF5XG4gIHwgQmlnVWludDY0QXJyYXk7XG5cbnR5cGUgU3RydWN0dXJlZENsb25lYWJsZSA9IERhdGUgfCBBcnJheUJ1ZmZlciB8IFR5cGVkQXJyYXk7XG5cbi8qKiDsp4HroKztmZQg67aI6rCAIO2DgOyehSAo66qF7Iuc7KCBIOygnOyZuOyaqSkgKi9cbnR5cGUgTm9uU2VyaWFsaXphYmxlID1cbiAgfCBGdW5jdGlvblxuICB8IFByb21pc2U8dW5rbm93bj5cbiAgfCBSZWdFeHBcbiAgfCBzeW1ib2xcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBXZWFrTWFw7J2YIOygnOuEpOumrSDtjIzrnbzrr7jthLBcbiAgfCBXZWFrTWFwPGFueSwgYW55PlxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFdlYWtTZXTsnZgg7KCc64Sk66atIO2MjOudvOuvuO2EsFxuICB8IFdlYWtTZXQ8YW55PlxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFdlYWtSZWbsnZgg7KCc64Sk66atIO2MjOudvOuvuO2EsFxuICB8IFdlYWtSZWY8YW55PjtcblxuLyoqIOyerOq3gOyggSDsp4HroKztmZQg6rCA64qlIO2DgOyehSAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXphYmxlID1cbiAgfCBQcmltaXRpdmVcbiAgfCBTdHJ1Y3R1cmVkQ2xvbmVhYmxlXG4gIHwgU2VyaWFsaXphYmxlQXJyYXlcbiAgfCBTZXJpYWxpemFibGVNYXBcbiAgfCBTZXJpYWxpemFibGVTZXRcbiAgfCBTZXJpYWxpemFibGVPYmplY3Q7XG5cbmludGVyZmFjZSBTZXJpYWxpemFibGVBcnJheSBleHRlbmRzIEFycmF5PFNlcmlhbGl6YWJsZT4ge31cblxuaW50ZXJmYWNlIFNlcmlhbGl6YWJsZU1hcCBleHRlbmRzIE1hcDxTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZT4ge31cblxuaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVNldCBleHRlbmRzIFNldDxTZXJpYWxpemFibGU+IHt9XG5cbmludGVyZmFjZSBTZXJpYWxpemFibGVPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBTZXJpYWxpemFibGU7XG59XG5cbi8qKlxuICog7KO87Ja07KeEIO2DgOyehSBU6rCAIOyngeugrO2ZlCDqsIDriqXtlZzsp4Ag6rKA7Kad7ZWY64qUIOyhsOqxtOu2gCDtg4DsnoVcbiAqIOyngeugrO2ZlCDrtojqsIDtlZwg6rCS7J20IO2PrO2VqOuQmOyWtCDsnojsnLzrqbQgbmV2ZXLrpbwg67CY7ZmY7ZWY7JesIO2DgOyehSDsl5Drn6zqsIAg67Cc7IOd7ZWp64uI64ukXG4gKi9cbmV4cG9ydCB0eXBlIEFzc2VydFNlcmlhbGl6YWJsZTxUPiA9IFQgZXh0ZW5kcyBOb25TZXJpYWxpemFibGVcbiAgPyBuZXZlclxuICA6IFQgZXh0ZW5kcyBQcmltaXRpdmUgfCBTdHJ1Y3R1cmVkQ2xvbmVhYmxlXG4gICAgPyBUXG4gICAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gICAgICA/IE1hcDxBc3NlcnRTZXJpYWxpemFibGU8Sz4sIEFzc2VydFNlcmlhbGl6YWJsZTxWPj5cbiAgICAgIDogVCBleHRlbmRzIFNldDxpbmZlciBVPlxuICAgICAgICA/IFNldDxBc3NlcnRTZXJpYWxpemFibGU8VT4+XG4gICAgICAgIDogVCBleHRlbmRzIEFycmF5PGluZmVyIFU+XG4gICAgICAgICAgPyBBc3NlcnRTZXJpYWxpemFibGU8VT5bXVxuICAgICAgICAgIDogVCBleHRlbmRzIG9iamVjdFxuICAgICAgICAgICAgPyB7IFtLIGluIGtleW9mIFRdOiBBc3NlcnRTZXJpYWxpemFibGU8VFtLXT4gfVxuICAgICAgICAgICAgOiBUO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZUNoZWNrUmVzdWx0IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiDqsJLsnbQgVml0ZXN0IHdvcmtlci9wcm9jZXNzIOqwhCDsoITri6wg6rCA64ql7ZWc7KeAIOqygOymne2VqeuLiOuLpC5cbiAqIFNlcmlhbGl6YWJsZe2VmOuLpOuKlCDqsoPsnYAg6rKw6rWtIG1lc3NhZ2UgcG9ydOyZgCBwcm9jZXNzLnNlbmTrpbwg7Ya17ZW0IOyghOuLrCDqsIDriqXtlZwg6rKD7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSDqsoDspp3tlaAg6rCSXG4gKiBAcGFyYW0gcGF0aCAtIO2YhOyerCDqsr3roZwgKOyXkOufrCDrqZTsi5zsp4DsmqksIOuCtOu2gCDsnqzqt4Dsl5DshJwg7IKs7JqpKVxuICogQHBhcmFtIHNlZW4gLSDsiJztmZgg7LC47KGwIOqwkOyngOyaqSBXZWFrU2V0ICjrgrTrtoAg7J6s6reA7JeQ7IScIOyCrOyaqSlcbiAqIEByZXR1cm5zIOqygOymnSDqsrDqs7wgeyB2YWxpZDogYm9vbGVhbiwgcmVhc29uPzogc3RyaW5nIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogaXNTZXJpYWxpemFibGUoeyBhOiAxLCBiOiBcImhlbGxvXCIgfSkgLy8geyB2YWxpZDogdHJ1ZSB9XG4gKiBpc1NlcmlhbGl6YWJsZSh7IGZuOiAoKSA9PiB7fSB9KSAvLyB7IHZhbGlkOiBmYWxzZSwgcmVhc29uOiBcIkZ1bmN0aW9uIGF0IGZuXCIgfVxuICogaXNTZXJpYWxpemFibGUoeyBkZWVwOiB7IG5lc3RlZDogUHJvbWlzZS5yZXNvbHZlKCkgfSB9KSAvLyB7IHZhbGlkOiBmYWxzZSwgcmVhc29uOiBcIlByb21pc2UgYXQgZGVlcC5uZXN0ZWRcIiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcmlhbGl6YWJsZShcbiAgdmFsdWU6IHVua25vd24sXG4gIHBhdGg6IHN0cmluZ1tdID0gW10sXG4gIHNlZW46IFdlYWtTZXQ8b2JqZWN0PiA9IG5ldyBXZWFrU2V0KCksXG4pOiBTZXJpYWxpemFibGVDaGVja1Jlc3VsdCB7XG4gIC8vIHR5cGVvZiBudWxsID09PSAnb2JqZWN0J+ydtOuvgOuhnCDrqLzsoIAg7LKY66asXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiIHx8IHR5cGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcImJpZ2ludFwiKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHJlYXNvbjogYEZ1bmN0aW9uIGF0ICR7Zm9ybWF0UGF0aChwYXRoKX1gIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwic3ltYm9sXCIpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHJlYXNvbjogYFN5bWJvbCBhdCAke2Zvcm1hdFBhdGgocGF0aCl9YCB9O1xuICB9XG5cbiAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBvYmogPSB2YWx1ZSBhcyBvYmplY3Q7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb246IGBQcm9taXNlIGF0ICR7Zm9ybWF0UGF0aChwYXRoKX1gIH07XG4gICAgfVxuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb246IGBSZWdFeHAgYXQgJHtmb3JtYXRQYXRoKHBhdGgpfWAgfTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgV2Vha01hcCkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb246IGBXZWFrTWFwIGF0ICR7Zm9ybWF0UGF0aChwYXRoKX1gIH07XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHJlYXNvbjogYFdlYWtTZXQgYXQgJHtmb3JtYXRQYXRoKHBhdGgpfWAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBXZWFrUmVmICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIFdlYWtSZWYpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uOiBgV2Vha1JlZiBhdCAke2Zvcm1hdFBhdGgocGF0aCl9YCB9O1xuICAgIH1cblxuICAgIC8vIOyInO2ZmCDssLjsobAg7ZeI7Jqp7ZWY65CYIOustO2VnOujqO2UhCDrsKnsp4BcbiAgICBpZiAoc2Vlbi5oYXMob2JqKSkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgICB9XG4gICAgc2Vlbi5hZGQob2JqKTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgfVxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKSkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBvYmopIHtcbiAgICAgICAgY29uc3Qga2V5UmVzdWx0ID0gaXNTZXJpYWxpemFibGUoaywgWy4uLnBhdGgsIGBNYXAua2V5WyR7aX1dYF0sIHNlZW4pO1xuICAgICAgICBpZiAoIWtleVJlc3VsdC52YWxpZCkgcmV0dXJuIGtleVJlc3VsdDtcblxuICAgICAgICBjb25zdCB2YWxSZXN1bHQgPSBpc1NlcmlhbGl6YWJsZSh2LCBbLi4ucGF0aCwgYE1hcC52YWx1ZVske2l9XWBdLCBzZWVuKTtcbiAgICAgICAgaWYgKCF2YWxSZXN1bHQudmFsaWQpIHJldHVybiB2YWxSZXN1bHQ7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iaikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc1NlcmlhbGl6YWJsZShpdGVtLCBbLi4ucGF0aCwgYFNldFske2l9XWBdLCBzZWVuKTtcbiAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNTZXJpYWxpemFibGUob2JqW2ldLCBbLi4ucGF0aCwgYFske2l9XWBdLCBzZWVuKTtcbiAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8vIFZpdGVzdOuKlCBFcnJvcuulvCDtl4jsmqntlZjsp4Drp4wg7IaN7ISx7J2AIOyngeugrO2ZlCDtlYTsmpRcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yUHJvcHMgPSBPYmplY3Qua2V5cyhvYmopLmZpbHRlcigoaykgPT4gIVtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwic3RhY2tcIl0uaW5jbHVkZXMoaykpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXJyb3JQcm9wcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc1NlcmlhbGl6YWJsZShcbiAgICAgICAgICAob2JqIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sXG4gICAgICAgICAgWy4uLnBhdGgsIGtleV0sXG4gICAgICAgICAgc2VlbixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZXN1bHQudmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8vIE9iamVjdC5wcm90b3R5cGUg65iQ64qUIG51bGzsnYQg7ZSE66Gc7Yag7YOA7J6F7Jy866GcIOqwgOyngOuKlCDqsr3smrDrp4wgcGxhaW4gb2JqZWN0XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IG9iai5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBcIlVua25vd25cIjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgcmVhc29uOiBgQ2xhc3MgaW5zdGFuY2UgKCR7Y29uc3RydWN0b3JOYW1lfSkgYXQgJHtmb3JtYXRQYXRoKHBhdGgpfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzU2VyaWFsaXphYmxlKChvYmogYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sIFsuLi5wYXRoLCBrZXldLCBzZWVuKTtcbiAgICAgIGlmICghcmVzdWx0LnZhbGlkKSByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb246IGBVbmtub3duIHR5cGUgKCR7dHlwZX0pIGF0ICR7Zm9ybWF0UGF0aChwYXRoKX1gIH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBhdGgocGF0aDogc3RyaW5nW10pOiBzdHJpbmcge1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiBcIihyb290KVwiO1xuICByZXR1cm4gcGF0aC5qb2luKFwiLlwiKTtcbn1cbiJdLCJuYW1lcyI6WyJpc1NlcmlhbGl6YWJsZSIsInZhbHVlIiwicGF0aCIsInNlZW4iLCJXZWFrU2V0IiwidmFsaWQiLCJ0eXBlIiwicmVhc29uIiwiZm9ybWF0UGF0aCIsIm9iaiIsIlByb21pc2UiLCJSZWdFeHAiLCJXZWFrTWFwIiwiV2Vha1JlZiIsImhhcyIsImFkZCIsIkRhdGUiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsIk1hcCIsImkiLCJrIiwidiIsImtleVJlc3VsdCIsInZhbFJlc3VsdCIsIlNldCIsIml0ZW0iLCJyZXN1bHQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImVycm9yUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJrZXkiLCJwcm90byIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3JOYW1lIiwibmFtZSIsImpvaW4iXSwibWFwcGluZ3MiOiJBQXdFQTs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0QsT0FBTyxTQUFTQSxlQUNkQyxLQUFjLEVBQ2RDLE9BQWlCLEVBQUUsRUFDbkJDLE9BQXdCLElBQUlDLFNBQVM7SUFFckMsb0NBQW9DO0lBQ3BDLElBQUlILFVBQVUsTUFBTTtRQUNsQixPQUFPO1lBQUVJLE9BQU87UUFBSztJQUN2QjtJQUVBLE1BQU1DLE9BQU8sT0FBT0w7SUFDcEIsSUFBSUssU0FBUyxZQUFZQSxTQUFTLFlBQVlBLFNBQVMsYUFBYUEsU0FBUyxhQUFhO1FBQ3hGLE9BQU87WUFBRUQsT0FBTztRQUFLO0lBQ3ZCO0lBQ0EsSUFBSUMsU0FBUyxVQUFVO1FBQ3JCLE9BQU87WUFBRUQsT0FBTztRQUFLO0lBQ3ZCO0lBRUEsSUFBSUMsU0FBUyxZQUFZO1FBQ3ZCLE9BQU87WUFBRUQsT0FBTztZQUFPRSxRQUFRLENBQUMsWUFBWSxFQUFFQyxXQUFXTixPQUFPO1FBQUM7SUFDbkU7SUFDQSxJQUFJSSxTQUFTLFVBQVU7UUFDckIsT0FBTztZQUFFRCxPQUFPO1lBQU9FLFFBQVEsQ0FBQyxVQUFVLEVBQUVDLFdBQVdOLE9BQU87UUFBQztJQUNqRTtJQUVBLElBQUlJLFNBQVMsVUFBVTtRQUNyQixNQUFNRyxNQUFNUjtRQUVaLElBQUlRLGVBQWVDLFNBQVM7WUFDMUIsT0FBTztnQkFBRUwsT0FBTztnQkFBT0UsUUFBUSxDQUFDLFdBQVcsRUFBRUMsV0FBV04sT0FBTztZQUFDO1FBQ2xFO1FBRUEsSUFBSU8sZUFBZUUsUUFBUTtZQUN6QixPQUFPO2dCQUFFTixPQUFPO2dCQUFPRSxRQUFRLENBQUMsVUFBVSxFQUFFQyxXQUFXTixPQUFPO1lBQUM7UUFDakU7UUFFQSxJQUFJTyxlQUFlRyxTQUFTO1lBQzFCLE9BQU87Z0JBQUVQLE9BQU87Z0JBQU9FLFFBQVEsQ0FBQyxXQUFXLEVBQUVDLFdBQVdOLE9BQU87WUFBQztRQUNsRTtRQUNBLElBQUlPLGVBQWVMLFNBQVM7WUFDMUIsT0FBTztnQkFBRUMsT0FBTztnQkFBT0UsUUFBUSxDQUFDLFdBQVcsRUFBRUMsV0FBV04sT0FBTztZQUFDO1FBQ2xFO1FBQ0EsSUFBSSxPQUFPVyxZQUFZLGVBQWVKLGVBQWVJLFNBQVM7WUFDNUQsT0FBTztnQkFBRVIsT0FBTztnQkFBT0UsUUFBUSxDQUFDLFdBQVcsRUFBRUMsV0FBV04sT0FBTztZQUFDO1FBQ2xFO1FBRUEscUJBQXFCO1FBQ3JCLElBQUlDLEtBQUtXLEdBQUcsQ0FBQ0wsTUFBTTtZQUNqQixPQUFPO2dCQUFFSixPQUFPO1lBQUs7UUFDdkI7UUFDQUYsS0FBS1ksR0FBRyxDQUFDTjtRQUVULElBQUlBLGVBQWVPLE1BQU07WUFDdkIsT0FBTztnQkFBRVgsT0FBTztZQUFLO1FBQ3ZCO1FBQ0EsSUFBSUksZUFBZVEsYUFBYTtZQUM5QixPQUFPO2dCQUFFWixPQUFPO1lBQUs7UUFDdkI7UUFDQSxJQUFJWSxZQUFZQyxNQUFNLENBQUNULE1BQU07WUFDM0IsT0FBTztnQkFBRUosT0FBTztZQUFLO1FBQ3ZCO1FBRUEsSUFBSUksZUFBZVUsS0FBSztZQUN0QixJQUFJQyxJQUFJO1lBQ1IsS0FBSyxNQUFNLENBQUNDLEdBQUdDLEVBQUUsSUFBSWIsSUFBSztnQkFDeEIsTUFBTWMsWUFBWXZCLGVBQWVxQixHQUFHO3VCQUFJbkI7b0JBQU0sQ0FBQyxRQUFRLEVBQUVrQixFQUFFLENBQUMsQ0FBQztpQkFBQyxFQUFFakI7Z0JBQ2hFLElBQUksQ0FBQ29CLFVBQVVsQixLQUFLLEVBQUUsT0FBT2tCO2dCQUU3QixNQUFNQyxZQUFZeEIsZUFBZXNCLEdBQUc7dUJBQUlwQjtvQkFBTSxDQUFDLFVBQVUsRUFBRWtCLEVBQUUsQ0FBQyxDQUFDO2lCQUFDLEVBQUVqQjtnQkFDbEUsSUFBSSxDQUFDcUIsVUFBVW5CLEtBQUssRUFBRSxPQUFPbUI7Z0JBQzdCSjtZQUNGO1lBQ0EsT0FBTztnQkFBRWYsT0FBTztZQUFLO1FBQ3ZCO1FBRUEsSUFBSUksZUFBZWdCLEtBQUs7WUFDdEIsSUFBSUwsSUFBSTtZQUNSLEtBQUssTUFBTU0sUUFBUWpCLElBQUs7Z0JBQ3RCLE1BQU1rQixTQUFTM0IsZUFBZTBCLE1BQU07dUJBQUl4QjtvQkFBTSxDQUFDLElBQUksRUFBRWtCLEVBQUUsQ0FBQyxDQUFDO2lCQUFDLEVBQUVqQjtnQkFDNUQsSUFBSSxDQUFDd0IsT0FBT3RCLEtBQUssRUFBRSxPQUFPc0I7Z0JBQzFCUDtZQUNGO1lBQ0EsT0FBTztnQkFBRWYsT0FBTztZQUFLO1FBQ3ZCO1FBRUEsSUFBSXVCLE1BQU1DLE9BQU8sQ0FBQ3BCLE1BQU07WUFDdEIsSUFBSyxJQUFJVyxJQUFJLEdBQUdBLElBQUlYLElBQUlxQixNQUFNLEVBQUVWLElBQUs7Z0JBQ25DLE1BQU1PLFNBQVMzQixlQUFlUyxHQUFHLENBQUNXLEVBQUUsRUFBRTt1QkFBSWxCO29CQUFNLENBQUMsQ0FBQyxFQUFFa0IsRUFBRSxDQUFDLENBQUM7aUJBQUMsRUFBRWpCO2dCQUMzRCxJQUFJLENBQUN3QixPQUFPdEIsS0FBSyxFQUFFLE9BQU9zQjtZQUM1QjtZQUNBLE9BQU87Z0JBQUV0QixPQUFPO1lBQUs7UUFDdkI7UUFFQSxrQ0FBa0M7UUFDbEMsSUFBSUksZUFBZXNCLE9BQU87WUFDeEIsTUFBTUMsYUFBYUMsT0FBT0MsSUFBSSxDQUFDekIsS0FBSzBCLE1BQU0sQ0FBQyxDQUFDZCxJQUFNLENBQUM7b0JBQUM7b0JBQVE7b0JBQVc7aUJBQVEsQ0FBQ2UsUUFBUSxDQUFDZjtZQUN6RixLQUFLLE1BQU1nQixPQUFPTCxXQUFZO2dCQUM1QixNQUFNTCxTQUFTM0IsZUFDYixBQUFDUyxHQUEwQyxDQUFDNEIsSUFBSSxFQUNoRDt1QkFBSW5DO29CQUFNbUM7aUJBQUksRUFDZGxDO2dCQUVGLElBQUksQ0FBQ3dCLE9BQU90QixLQUFLLEVBQUUsT0FBT3NCO1lBQzVCO1lBQ0EsT0FBTztnQkFBRXRCLE9BQU87WUFBSztRQUN2QjtRQUVBLHlEQUF5RDtRQUN6RCxNQUFNaUMsUUFBUUwsT0FBT00sY0FBYyxDQUFDOUI7UUFDcEMsSUFBSTZCLFVBQVVMLE9BQU9PLFNBQVMsSUFBSUYsVUFBVSxNQUFNO1lBQ2hELE1BQU1HLGtCQUFrQmhDLElBQUksV0FBVyxFQUFFaUMsUUFBUTtZQUNqRCxPQUFPO2dCQUNMckMsT0FBTztnQkFDUEUsUUFBUSxDQUFDLGdCQUFnQixFQUFFa0MsZ0JBQWdCLEtBQUssRUFBRWpDLFdBQVdOLE9BQU87WUFDdEU7UUFDRjtRQUVBLEtBQUssTUFBTW1DLE9BQU9KLE9BQU9DLElBQUksQ0FBQ3pCLEtBQU07WUFDbEMsTUFBTWtCLFNBQVMzQixlQUFlLEFBQUNTLEdBQStCLENBQUM0QixJQUFJLEVBQUU7bUJBQUluQztnQkFBTW1DO2FBQUksRUFBRWxDO1lBQ3JGLElBQUksQ0FBQ3dCLE9BQU90QixLQUFLLEVBQUUsT0FBT3NCO1FBQzVCO1FBQ0EsT0FBTztZQUFFdEIsT0FBTztRQUFLO0lBQ3ZCO0lBRUEsT0FBTztRQUFFQSxPQUFPO1FBQU9FLFFBQVEsQ0FBQyxjQUFjLEVBQUVELEtBQUssS0FBSyxFQUFFRSxXQUFXTixPQUFPO0lBQUM7QUFDakY7QUFFQSxTQUFTTSxXQUFXTixJQUFjO0lBQ2hDLElBQUlBLEtBQUs0QixNQUFNLEtBQUssR0FBRyxPQUFPO0lBQzlCLE9BQU81QixLQUFLeUMsSUFBSSxDQUFDO0FBQ25CIn0=
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API 패키지 내부 상대 경로 (src/ 또는 dist/로 시작)
|
|
3
|
+
*
|
|
4
|
+
* **사용 위치**: API 패키지 내부 파일 참조
|
|
5
|
+
* **예시**:
|
|
6
|
+
* - `"src/application/user/user.model.ts"`
|
|
7
|
+
* - `"dist/application/user/user.model.js"`
|
|
8
|
+
*
|
|
9
|
+
* **기준점**: `Sonamu.apiRootPath` (일반적으로 프로젝트의 `/api` 디렉토리)
|
|
10
|
+
*/
|
|
11
|
+
export type ApiRelativePath = `${"src" | "dist"}/${string}` | "sonamu.config.ts";
|
|
12
|
+
/**
|
|
13
|
+
* 앱 루트 기준 상대 경로 (api/, web/ 등 타겟 디렉토리로 시작)
|
|
14
|
+
*
|
|
15
|
+
* **사용 위치**: 다른 타겟(api, web 등)의 파일 참조
|
|
16
|
+
* **예시**:
|
|
17
|
+
* - `"api/src/application/user/user.model.ts"`
|
|
18
|
+
* - `"web/src/pages/admin/users/index.tsx"`
|
|
19
|
+
* - `"app/dist/index.js"`
|
|
20
|
+
*
|
|
21
|
+
* **기준점**: `Sonamu.appRootPath` (일반적으로 모노레포 루트)
|
|
22
|
+
*/
|
|
23
|
+
export type AppRelativePath = `${string}/${"src" | "dist"}/${string}`;
|
|
24
|
+
/**
|
|
25
|
+
* 시스템 절대 경로 (루트 / 부터 시작)
|
|
26
|
+
*
|
|
27
|
+
* **사용 위치**: 파일시스템 직접 접근, glob 패턴
|
|
28
|
+
* **예시**: `"/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"`
|
|
29
|
+
*
|
|
30
|
+
* **중요**:
|
|
31
|
+
* - import 시에는 로더가 알아서 src/dist 변환해주므로 어느 경로든 가능
|
|
32
|
+
* - fs 직접 접근 시에는 실제 존재하는 경로를 사용해야 함
|
|
33
|
+
* - Dev: src/*.ts 경로 사용
|
|
34
|
+
* - Prod: dist/*.js 경로 사용
|
|
35
|
+
*/
|
|
36
|
+
export type AbsolutePath = `/${string}`;
|
|
37
|
+
/**
|
|
38
|
+
* 어떤 경로가 들어오든, 현재 실행 환경에 맞는 경로로 바꿔줍니다.
|
|
39
|
+
*
|
|
40
|
+
* "src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
|
|
41
|
+
* -> "src/application/user/user.model.ts"
|
|
42
|
+
* "src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
|
|
43
|
+
* -> "dist/application/user/user.model.js"
|
|
44
|
+
* "dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
|
|
45
|
+
* -> "src/application/user/user.model.ts"
|
|
46
|
+
* "dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
|
|
47
|
+
* -> "dist/application/user/user.model.js"
|
|
48
|
+
*
|
|
49
|
+
* "/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
|
|
50
|
+
* -> "/src/application/user/user.model.ts"
|
|
51
|
+
* "/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
|
|
52
|
+
* -> "/dist/application/user/user.model.js"
|
|
53
|
+
* "/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
|
|
54
|
+
* -> "/dist/application/user/user.model.js"
|
|
55
|
+
* "/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
|
|
56
|
+
* -> "/dist/application/user/user.model.js"
|
|
57
|
+
*
|
|
58
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
|
|
59
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
|
|
60
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
|
|
61
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
|
|
62
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
|
|
63
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
|
|
64
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
|
|
65
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
|
|
66
|
+
*
|
|
67
|
+
* "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
68
|
+
* -> "src/application/user/user.model.ts?hot=1234567890"
|
|
69
|
+
* "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
70
|
+
* -> "dist/application/user/user.model.js?hot=1234567890"
|
|
71
|
+
* "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
72
|
+
* -> "src/application/user/user.model.ts?hot=1234567890"
|
|
73
|
+
* "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
74
|
+
* -> "dist/application/user/user.model.js?hot=1234567890"
|
|
75
|
+
*
|
|
76
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
77
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
|
|
78
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
79
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
|
|
80
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
81
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
|
|
82
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
83
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
|
|
84
|
+
*
|
|
85
|
+
* @param anyPath
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
export declare function runtimePath(anyPath: string, isDev?: boolean): string;
|
|
89
|
+
//# sourceMappingURL=path-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,GAAG,kBAAkB,CAAC;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,OAAyC,GAAG,MAAM,CAMrG"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { isHotReloadServer, isTest } from "./controller.js";
|
|
2
|
+
/**
|
|
3
|
+
* 어떤 경로가 들어오든, 현재 실행 환경에 맞는 경로로 바꿔줍니다.
|
|
4
|
+
*
|
|
5
|
+
* "src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
|
|
6
|
+
* -> "src/application/user/user.model.ts"
|
|
7
|
+
* "src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
|
|
8
|
+
* -> "dist/application/user/user.model.js"
|
|
9
|
+
* "dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
|
|
10
|
+
* -> "src/application/user/user.model.ts"
|
|
11
|
+
* "dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
|
|
12
|
+
* -> "dist/application/user/user.model.js"
|
|
13
|
+
*
|
|
14
|
+
* "/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
|
|
15
|
+
* -> "/src/application/user/user.model.ts"
|
|
16
|
+
* "/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
|
|
17
|
+
* -> "/dist/application/user/user.model.js"
|
|
18
|
+
* "/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
|
|
19
|
+
* -> "/dist/application/user/user.model.js"
|
|
20
|
+
* "/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
|
|
21
|
+
* -> "/dist/application/user/user.model.js"
|
|
22
|
+
*
|
|
23
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
|
|
24
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
|
|
25
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
|
|
26
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
|
|
27
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
|
|
28
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
|
|
29
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
|
|
30
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
|
|
31
|
+
*
|
|
32
|
+
* "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
33
|
+
* -> "src/application/user/user.model.ts?hot=1234567890"
|
|
34
|
+
* "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
35
|
+
* -> "dist/application/user/user.model.js?hot=1234567890"
|
|
36
|
+
* "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
37
|
+
* -> "src/application/user/user.model.ts?hot=1234567890"
|
|
38
|
+
* "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
39
|
+
* -> "dist/application/user/user.model.js?hot=1234567890"
|
|
40
|
+
*
|
|
41
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
42
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
|
|
43
|
+
* "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
44
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
|
|
45
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
|
|
46
|
+
* -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
|
|
47
|
+
* "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
|
|
48
|
+
* -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
|
|
49
|
+
*
|
|
50
|
+
* @param anyPath
|
|
51
|
+
* @returns
|
|
52
|
+
*/ export function runtimePath(anyPath, isDev = isHotReloadServer() || isTest()) {
|
|
53
|
+
if (isDev) {
|
|
54
|
+
return anyPath.replace(/dist\//, "src/").replace(/\.js/, ".ts");
|
|
55
|
+
} else {
|
|
56
|
+
return anyPath.replace(/src\//, "dist/").replace(/\.ts/, ".js");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wYXRoLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSG90UmVsb2FkU2VydmVyLCBpc1Rlc3QgfSBmcm9tIFwiLi9jb250cm9sbGVyLmpzXCI7XG5cbi8qKlxuICogQVBJIO2MqO2CpOyngCDrgrTrtoAg7IOB64yAIOqyveuhnCAoc3JjLyDrmJDripQgZGlzdC/roZwg7Iuc7J6RKVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBBUEkg7Yyo7YKk7KeAIOuCtOu2gCDtjIzsnbwg7LC47KGwXG4gKiAqKuyYiOyLnCoqOlxuICogLSBgXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJgXG4gKiAtIGBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJgXG4gKlxuICogKirquLDspIDsoJAqKjogYFNvbmFtdS5hcGlSb290UGF0aGAgKOydvOuwmOyggeycvOuhnCDtlITroZzsoJ3tirjsnZggYC9hcGlgIOuUlOugie2GoOumrClcbiAqL1xuZXhwb3J0IHR5cGUgQXBpUmVsYXRpdmVQYXRoID0gYCR7XCJzcmNcIiB8IFwiZGlzdFwifS8ke3N0cmluZ31gIHwgXCJzb25hbXUuY29uZmlnLnRzXCI7XG5cbi8qKlxuICog7JWxIOujqO2KuCDquLDspIAg7IOB64yAIOqyveuhnCAoYXBpLywgd2ViLyDrk7Eg7YOA6rKfIOuUlOugie2GoOumrOuhnCDsi5zsnpEpXG4gKlxuICogKirsgqzsmqkg7JyE7LmYKio6IOuLpOuluCDtg4Dqsp8oYXBpLCB3ZWIg65OxKeydmCDtjIzsnbwg7LC47KGwXG4gKiAqKuyYiOyLnCoqOlxuICogLSBgXCJhcGkvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50c1wiYFxuICogLSBgXCJ3ZWIvc3JjL3BhZ2VzL2FkbWluL3VzZXJzL2luZGV4LnRzeFwiYFxuICogLSBgXCJhcHAvZGlzdC9pbmRleC5qc1wiYFxuICpcbiAqICoq6riw7KSA7KCQKio6IGBTb25hbXUuYXBwUm9vdFBhdGhgICjsnbzrsJjsoIHsnLzroZwg66qo64W466CI7Y+sIOujqO2KuClcbiAqL1xuZXhwb3J0IHR5cGUgQXBwUmVsYXRpdmVQYXRoID0gYCR7c3RyaW5nfS8ke1wic3JjXCIgfCBcImRpc3RcIn0vJHtzdHJpbmd9YDtcblxuLyoqXG4gKiDsi5zsiqTthZwg7KCI64yAIOqyveuhnCAo66Oo7Yq4IC8g67aA7YSwIOyLnOyekSlcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjog7YyM7J287Iuc7Iqk7YWcIOyngeygkSDsoJHqt7wsIGdsb2Ig7Yyo7YS0XG4gKiAqKuyYiOyLnCoqOiBgXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcImBcbiAqXG4gKiAqKuykkeyalCoqOlxuICogLSBpbXBvcnQg7Iuc7JeQ64qUIOuhnOuNlOqwgCDslYzslYTshJwgc3JjL2Rpc3Qg67OA7ZmY7ZW07KO866+A66GcIOyWtOuKkCDqsr3roZzrk6Ag6rCA64qlXG4gKiAtIGZzIOyngeygkSDsoJHqt7wg7Iuc7JeQ64qUIOyLpOygnCDsobTsnqztlZjripQg6rK966Gc66W8IOyCrOyaqe2VtOyVvCDtlahcbiAqICAgLSBEZXY6IHNyYy8qLnRzIOqyveuhnCDsgqzsmqlcbiAqICAgLSBQcm9kOiBkaXN0LyouanMg6rK966GcIOyCrOyaqVxuICovXG5leHBvcnQgdHlwZSBBYnNvbHV0ZVBhdGggPSBgLyR7c3RyaW5nfWA7XG5cbi8qKlxuICog7Ja065akIOqyveuhnOqwgCDrk6TslrTsmKTrk6AsIO2YhOyerCDsi6Ttlokg7ZmY6rK97JeQIOunnuuKlCDqsr3roZzroZwg67CU6r+U7KSN64uI64ukLlxuICpcbiAqIFwic3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50c1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwic3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50c1wiXG4gKiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOuwsO2PrCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJcbiAqIFwiZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIlxuICogXCJkaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg67Cw7Y+sIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIlxuICpcbiAqIFwiL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAqIFwiL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOuwsO2PrCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wiXG4gKiBcIi9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJcbiAqIFwiL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCIvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIlxuICpcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDqsJzrsJwg66qo65Oc652866m0P1xuICogLT4gXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIlxuICogXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOuwsO2PrCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIlxuICogXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDqsJzrsJwg66qo65Oc652866m0P1xuICogLT4gXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIlxuICogXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJcbiAqXG4gKiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHM/aG90PTEyMzQ1Njc4OTBcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHM/aG90PTEyMzQ1Njc4OTBcIlxuICogXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCJkaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKiBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzP2hvdD0xMjM0NTY3ODkwXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDqsJzrsJwg66qo65Oc652866m0P1xuICogLT4gXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCJcbiAqIFwiZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanM/aG90PTEyMzQ1Njc4OTBcIuqwgCDrk6TslrTsmZTsnYQg65WMIOuwsO2PrCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzP2hvdD0xMjM0NTY3ODkwXCJcbiAqXG4gKiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50cz9ob3Q9MTIzNDU2Nzg5MFwi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCJcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzP2hvdD0xMjM0NTY3ODkwXCJcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCJcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwi6rCAIOuTpOyWtOyZlOydhCDrlYwg67Cw7Y+sIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKlxuICogQHBhcmFtIGFueVBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW50aW1lUGF0aChhbnlQYXRoOiBzdHJpbmcsIGlzRGV2OiBib29sZWFuID0gaXNIb3RSZWxvYWRTZXJ2ZXIoKSB8fCBpc1Rlc3QoKSk6IHN0cmluZyB7XG4gIGlmIChpc0Rldikge1xuICAgIHJldHVybiBhbnlQYXRoLnJlcGxhY2UoL2Rpc3RcXC8vLCBcInNyYy9cIikucmVwbGFjZSgvXFwuanMvLCBcIi50c1wiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYW55UGF0aC5yZXBsYWNlKC9zcmNcXC8vLCBcImRpc3QvXCIpLnJlcGxhY2UoL1xcLnRzLywgXCIuanNcIik7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpc0hvdFJlbG9hZFNlcnZlciIsImlzVGVzdCIsInJ1bnRpbWVQYXRoIiwiYW55UGF0aCIsImlzRGV2IiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsaUJBQWlCLEVBQUVDLE1BQU0sUUFBUSxrQkFBa0I7QUF5QzVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtEQyxHQUNELE9BQU8sU0FBU0MsWUFBWUMsT0FBZSxFQUFFQyxRQUFpQkosdUJBQXVCQyxRQUFRO0lBQzNGLElBQUlHLE9BQU87UUFDVCxPQUFPRCxRQUFRRSxPQUFPLENBQUMsVUFBVSxRQUFRQSxPQUFPLENBQUMsUUFBUTtJQUMzRCxPQUFPO1FBQ0wsT0FBT0YsUUFBUUUsT0FBTyxDQUFDLFNBQVMsU0FBU0EsT0FBTyxDQUFDLFFBQVE7SUFDM0Q7QUFDRiJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 주어진 작업을 실행합니다.
|
|
3
|
+
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(delayBeforeShutdown) 동안 작업을 기다린 후 종료합니다.
|
|
4
|
+
* @param {() => Promise<void>} job - 실행할 작업
|
|
5
|
+
* @param {event: NodeJS.Signals; delayBeforeShutdown: number} options - 옵션
|
|
6
|
+
* @param {NodeJS.Signals} options.event - 프로세스 이벤트
|
|
7
|
+
* @param {number} options.delayBeforeShutdown - 최대 한계 시간
|
|
8
|
+
*/
|
|
9
|
+
export declare function runWithGracefulShutdown(job: () => Promise<void>, { whenThisHappens: event, waitForUpTo: delayBeforeShutdown, }?: {
|
|
10
|
+
whenThisHappens: NodeJS.Signals;
|
|
11
|
+
waitForUpTo: number;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=process-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/utils/process-utils.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACxB,EACE,eAAe,EAAE,KAAK,EACtB,WAAW,EAAE,mBAAmB,GACjC,GAAE;IAAE,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAGxD,GACA,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { setTimeout as setTimeoutPromises } from "node:timers/promises";
|
|
3
|
+
/**
|
|
4
|
+
* 주어진 작업을 실행합니다.
|
|
5
|
+
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(delayBeforeShutdown) 동안 작업을 기다린 후 종료합니다.
|
|
6
|
+
* @param {() => Promise<void>} job - 실행할 작업
|
|
7
|
+
* @param {event: NodeJS.Signals; delayBeforeShutdown: number} options - 옵션
|
|
8
|
+
* @param {NodeJS.Signals} options.event - 프로세스 이벤트
|
|
9
|
+
* @param {number} options.delayBeforeShutdown - 최대 한계 시간
|
|
10
|
+
*/ export async function runWithGracefulShutdown(job, { whenThisHappens: event, waitForUpTo: delayBeforeShutdown } = {
|
|
11
|
+
whenThisHappens: "SIGUSR2",
|
|
12
|
+
waitForUpTo: 20000
|
|
13
|
+
}) {
|
|
14
|
+
let isRunning = true;
|
|
15
|
+
const abortController = new AbortController();
|
|
16
|
+
const onEvent = async ()=>{
|
|
17
|
+
if (!isRunning) {
|
|
18
|
+
process.exit(0);
|
|
19
|
+
}
|
|
20
|
+
console.log(chalk.magentaBright(`wait for syncing done....`));
|
|
21
|
+
try {
|
|
22
|
+
await setTimeoutPromises(delayBeforeShutdown, "waiting-sync", {
|
|
23
|
+
signal: abortController.signal
|
|
24
|
+
});
|
|
25
|
+
} catch {}
|
|
26
|
+
console.log(chalk.magentaBright(`Syncing DONE!`));
|
|
27
|
+
process.exit(0);
|
|
28
|
+
};
|
|
29
|
+
process.on(event, onEvent);
|
|
30
|
+
await job();
|
|
31
|
+
isRunning = false;
|
|
32
|
+
abortController.abort();
|
|
33
|
+
process.off(event, onEvent);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wcm9jZXNzLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2V0VGltZW91dFByb21pc2VzIH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuXG4vKipcbiAqIOyjvOyWtOynhCDsnpHsl4XsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICog7KO87Ja07KeEIO2UhOuhnOyEuOyKpCDsnbTrsqTtirgoPeyLnOq3uOuEkCnqsIAg67Cc7IOd7ZWY7JiA7J2EIOuVjOyXkOuPhCDstZzrjIAg7ZWc6rOEKGRlbGF5QmVmb3JlU2h1dGRvd24pIOuPmeyViCDsnpHsl4XsnYQg6riw64uk66awIO2bhCDsooXro4ztlanri4jri6QuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGpvYiAtIOyLpO2Wie2VoCDsnpHsl4VcbiAqIEBwYXJhbSB7ZXZlbnQ6IE5vZGVKUy5TaWduYWxzOyBkZWxheUJlZm9yZVNodXRkb3duOiBudW1iZXJ9IG9wdGlvbnMgLSDsmLXshZhcbiAqIEBwYXJhbSB7Tm9kZUpTLlNpZ25hbHN9IG9wdGlvbnMuZXZlbnQgLSDtlITroZzshLjsiqQg7J2067Kk7Yq4XG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5kZWxheUJlZm9yZVNodXRkb3duIC0g7LWc64yAIO2VnOqzhCDsi5zqsIRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhHcmFjZWZ1bFNodXRkb3duKFxuICBqb2I6ICgpID0+IFByb21pc2U8dm9pZD4sXG4gIHtcbiAgICB3aGVuVGhpc0hhcHBlbnM6IGV2ZW50LFxuICAgIHdhaXRGb3JVcFRvOiBkZWxheUJlZm9yZVNodXRkb3duLFxuICB9OiB7IHdoZW5UaGlzSGFwcGVuczogTm9kZUpTLlNpZ25hbHM7IHdhaXRGb3JVcFRvOiBudW1iZXIgfSA9IHtcbiAgICB3aGVuVGhpc0hhcHBlbnM6IFwiU0lHVVNSMlwiLFxuICAgIHdhaXRGb3JVcFRvOiAyMDAwMCxcbiAgfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgaXNSdW5uaW5nID0gdHJ1ZSBhcyBib29sZWFuO1xuXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3Qgb25FdmVudCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWlzUnVubmluZykge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhjaGFsay5tYWdlbnRhQnJpZ2h0KGB3YWl0IGZvciBzeW5jaW5nIGRvbmUuLi4uYCkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNldFRpbWVvdXRQcm9taXNlcyhkZWxheUJlZm9yZVNodXRkb3duLCBcIndhaXRpbmctc3luY1wiLCB7XG4gICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge31cbiAgICBjb25zb2xlLmxvZyhjaGFsay5tYWdlbnRhQnJpZ2h0KGBTeW5jaW5nIERPTkUhYCkpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfTtcbiAgcHJvY2Vzcy5vbihldmVudCwgb25FdmVudCk7XG5cbiAgYXdhaXQgam9iKCk7XG5cbiAgaXNSdW5uaW5nID0gZmFsc2U7XG4gIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICBwcm9jZXNzLm9mZihldmVudCwgb25FdmVudCk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJzZXRUaW1lb3V0Iiwic2V0VGltZW91dFByb21pc2VzIiwicnVuV2l0aEdyYWNlZnVsU2h1dGRvd24iLCJqb2IiLCJ3aGVuVGhpc0hhcHBlbnMiLCJldmVudCIsIndhaXRGb3JVcFRvIiwiZGVsYXlCZWZvcmVTaHV0ZG93biIsImlzUnVubmluZyIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsIm9uRXZlbnQiLCJwcm9jZXNzIiwiZXhpdCIsImNvbnNvbGUiLCJsb2ciLCJtYWdlbnRhQnJpZ2h0Iiwic2lnbmFsIiwib24iLCJhYm9ydCIsIm9mZiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLFNBQVNDLGNBQWNDLGtCQUFrQixRQUFRLHVCQUFrQjtBQUVuRTs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxlQUFlQyx3QkFDcEJDLEdBQXdCLEVBQ3hCLEVBQ0VDLGlCQUFpQkMsS0FBSyxFQUN0QkMsYUFBYUMsbUJBQW1CLEVBQ3lCLEdBQUc7SUFDNURILGlCQUFpQjtJQUNqQkUsYUFBYTtBQUNmLENBQUM7SUFFRCxJQUFJRSxZQUFZO0lBRWhCLE1BQU1DLGtCQUFrQixJQUFJQztJQUM1QixNQUFNQyxVQUFVO1FBQ2QsSUFBSSxDQUFDSCxXQUFXO1lBQ2RJLFFBQVFDLElBQUksQ0FBQztRQUNmO1FBQ0FDLFFBQVFDLEdBQUcsQ0FBQ2hCLE1BQU1pQixhQUFhLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQztRQUUzRCxJQUFJO1lBQ0YsTUFBTWYsbUJBQW1CTSxxQkFBcUIsZ0JBQWdCO2dCQUM1RFUsUUFBUVIsZ0JBQWdCUSxNQUFNO1lBQ2hDO1FBQ0YsRUFBRSxPQUFNLENBQUM7UUFDVEgsUUFBUUMsR0FBRyxDQUFDaEIsTUFBTWlCLGFBQWEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUMvQ0osUUFBUUMsSUFBSSxDQUFDO0lBQ2Y7SUFDQUQsUUFBUU0sRUFBRSxDQUFDYixPQUFPTTtJQUVsQixNQUFNUjtJQUVOSyxZQUFZO0lBQ1pDLGdCQUFnQlUsS0FBSztJQUNyQlAsUUFBUVEsR0FBRyxDQUFDZixPQUFPTTtBQUNyQiJ9
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { AST, ColumnRef } from "node-sql-parser";
|
|
1
|
+
import type { AST, ColumnRef, Join } from "node-sql-parser";
|
|
2
2
|
export declare function getTableName(expr: ColumnRef): string | null;
|
|
3
3
|
export declare function getTableNamesFromWhere(ast: AST | AST[]): string[];
|
|
4
|
+
/**
|
|
5
|
+
* 주의: table명이 아닌 alias를 반환함
|
|
6
|
+
*/
|
|
7
|
+
export declare function getJoinTables(ast: AST | AST[], joinTypes: Join["join"][]): string[];
|
|
4
8
|
//# sourceMappingURL=sql-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-parser.d.ts","sourceRoot":"","sources":["../../src/utils/sql-parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sql-parser.d.ts","sourceRoot":"","sources":["../../src/utils/sql-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAA+B,IAAI,EAAU,MAAM,iBAAiB,CAAC;AAIjG,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,iBAO3C;AAGD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CA0BjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAYnF"}
|
package/dist/utils/sql-parser.js
CHANGED
|
@@ -1,2 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { unique } from "radashi";
|
|
2
|
+
import { nonNullable } from "./utils.js";
|
|
3
|
+
export function getTableName(expr) {
|
|
4
|
+
if ("table" in expr && expr.table !== null) {
|
|
5
|
+
return typeof expr.table === "string" ? expr.table : expr.table.value;
|
|
6
|
+
}
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
// where 조건에 사용된 테이블명을 추출
|
|
10
|
+
export function getTableNamesFromWhere(ast) {
|
|
11
|
+
const extractTableNames = (where)=>{
|
|
12
|
+
if (where === null || !(where.type === "binary_expr" && "left" in where)) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
const extractTableName = (expr)=>{
|
|
16
|
+
if (expr.type === "column_ref") {
|
|
17
|
+
const table = getTableName(expr);
|
|
18
|
+
return table ? [
|
|
19
|
+
table
|
|
20
|
+
] : [];
|
|
21
|
+
} else if (expr.type === "binary_expr" && "left" in expr) {
|
|
22
|
+
return extractTableNames(expr);
|
|
23
|
+
}
|
|
24
|
+
return [];
|
|
25
|
+
};
|
|
26
|
+
return [
|
|
27
|
+
...extractTableName(where.left),
|
|
28
|
+
...extractTableName(where.right)
|
|
29
|
+
];
|
|
30
|
+
};
|
|
31
|
+
return unique((Array.isArray(ast) ? ast : [
|
|
32
|
+
ast
|
|
33
|
+
]).flatMap((a)=>a.type === "select" || a.type === "update" || a.type === "delete" ? extractTableNames(a.where) : []));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 주의: table명이 아닌 alias를 반환함
|
|
37
|
+
*/ export function getJoinTables(ast, joinTypes) {
|
|
38
|
+
const extractJoinTables = (froms)=>{
|
|
39
|
+
return froms.map((f)=>"join" in f && joinTypes.includes(f.join) ? f.as : null).filter(nonNullable);
|
|
40
|
+
};
|
|
41
|
+
return unique((Array.isArray(ast) ? ast : [
|
|
42
|
+
ast
|
|
43
|
+
]).flatMap((a)=>a.type === "select" && Array.isArray(a.from) ? extractJoinTables(a.from) : []));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zcWwtcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVNULCBDb2x1bW5SZWYsIEV4cHIsIEV4cHJlc3Npb25WYWx1ZSwgRnJvbSwgSm9pbiwgU2VsZWN0IH0gZnJvbSBcIm5vZGUtc3FsLXBhcnNlclwiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTmFtZShleHByOiBDb2x1bW5SZWYpIHtcbiAgaWYgKFwidGFibGVcIiBpbiBleHByICYmIGV4cHIudGFibGUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHlwZW9mIGV4cHIudGFibGUgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZXhwci50YWJsZVxuICAgICAgOiAoZXhwci50YWJsZSBhcyB7IHR5cGU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KS52YWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gd2hlcmUg7KGw6rG07JeQIOyCrOyaqeuQnCDthYzsnbTruJTrqoXsnYQg7LaU7LacXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVOYW1lc0Zyb21XaGVyZShhc3Q6IEFTVCB8IEFTVFtdKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRyYWN0VGFibGVOYW1lcyA9ICh3aGVyZTogU2VsZWN0W1wid2hlcmVcIl0pOiBzdHJpbmdbXSA9PiB7XG4gICAgaWYgKHdoZXJlID09PSBudWxsIHx8ICEod2hlcmUudHlwZSA9PT0gXCJiaW5hcnlfZXhwclwiICYmIFwibGVmdFwiIGluIHdoZXJlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dHJhY3RUYWJsZU5hbWUgPSAoZXhwcjogRXhwciB8IEV4cHJlc3Npb25WYWx1ZSk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGlmIChleHByLnR5cGUgPT09IFwiY29sdW1uX3JlZlwiKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gZ2V0VGFibGVOYW1lKGV4cHIgYXMgQ29sdW1uUmVmKTtcbiAgICAgICAgcmV0dXJuIHRhYmxlID8gW3RhYmxlXSA6IFtdO1xuICAgICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IFwiYmluYXJ5X2V4cHJcIiAmJiBcImxlZnRcIiBpbiBleHByKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0VGFibGVOYW1lcyhleHByKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFsuLi5leHRyYWN0VGFibGVOYW1lKHdoZXJlLmxlZnQpLCAuLi5leHRyYWN0VGFibGVOYW1lKHdoZXJlLnJpZ2h0KV07XG4gIH07XG5cbiAgcmV0dXJuIHVuaXF1ZShcbiAgICAoQXJyYXkuaXNBcnJheShhc3QpID8gYXN0IDogW2FzdF0pLmZsYXRNYXAoKGEpID0+XG4gICAgICBhLnR5cGUgPT09IFwic2VsZWN0XCIgfHwgYS50eXBlID09PSBcInVwZGF0ZVwiIHx8IGEudHlwZSA9PT0gXCJkZWxldGVcIlxuICAgICAgICA/IGV4dHJhY3RUYWJsZU5hbWVzKGEud2hlcmUpXG4gICAgICAgIDogW10sXG4gICAgKSxcbiAgKTtcbn1cblxuLyoqXG4gKiDso7zsnZg6IHRhYmxl66qF7J20IOyVhOuLjCBhbGlhc+ulvCDrsJjtmZjtlahcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEpvaW5UYWJsZXMoYXN0OiBBU1QgfCBBU1RbXSwgam9pblR5cGVzOiBKb2luW1wiam9pblwiXVtdKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRyYWN0Sm9pblRhYmxlcyA9IChmcm9tczogRnJvbVtdKTogc3RyaW5nW10gPT4ge1xuICAgIHJldHVybiBmcm9tc1xuICAgICAgLm1hcCgoZikgPT4gKFwiam9pblwiIGluIGYgJiYgam9pblR5cGVzLmluY2x1ZGVzKGYuam9pbikgPyBmLmFzIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKG5vbk51bGxhYmxlKTtcbiAgfTtcblxuICByZXR1cm4gdW5pcXVlKFxuICAgIChBcnJheS5pc0FycmF5KGFzdCkgPyBhc3QgOiBbYXN0XSkuZmxhdE1hcCgoYSkgPT5cbiAgICAgIGEudHlwZSA9PT0gXCJzZWxlY3RcIiAmJiBBcnJheS5pc0FycmF5KGEuZnJvbSkgPyBleHRyYWN0Sm9pblRhYmxlcyhhLmZyb20pIDogW10sXG4gICAgKSxcbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1bmlxdWUiLCJub25OdWxsYWJsZSIsImdldFRhYmxlTmFtZSIsImV4cHIiLCJ0YWJsZSIsInZhbHVlIiwiZ2V0VGFibGVOYW1lc0Zyb21XaGVyZSIsImFzdCIsImV4dHJhY3RUYWJsZU5hbWVzIiwid2hlcmUiLCJ0eXBlIiwiZXh0cmFjdFRhYmxlTmFtZSIsImxlZnQiLCJyaWdodCIsIkFycmF5IiwiaXNBcnJheSIsImZsYXRNYXAiLCJhIiwiZ2V0Sm9pblRhYmxlcyIsImpvaW5UeXBlcyIsImV4dHJhY3RKb2luVGFibGVzIiwiZnJvbXMiLCJtYXAiLCJmIiwiaW5jbHVkZXMiLCJqb2luIiwiYXMiLCJmaWx0ZXIiLCJmcm9tIl0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxNQUFNLFFBQVEsVUFBVTtBQUNqQyxTQUFTQyxXQUFXLFFBQVEsYUFBVTtBQUV0QyxPQUFPLFNBQVNDLGFBQWFDLElBQWU7SUFDMUMsSUFBSSxXQUFXQSxRQUFRQSxLQUFLQyxLQUFLLEtBQUssTUFBTTtRQUMxQyxPQUFPLE9BQU9ELEtBQUtDLEtBQUssS0FBSyxXQUN6QkQsS0FBS0MsS0FBSyxHQUNWLEFBQUNELEtBQUtDLEtBQUssQ0FBcUNDLEtBQUs7SUFDM0Q7SUFDQSxPQUFPO0FBQ1Q7QUFFQSx5QkFBeUI7QUFDekIsT0FBTyxTQUFTQyx1QkFBdUJDLEdBQWdCO0lBQ3JELE1BQU1DLG9CQUFvQixDQUFDQztRQUN6QixJQUFJQSxVQUFVLFFBQVEsQ0FBRUEsQ0FBQUEsTUFBTUMsSUFBSSxLQUFLLGlCQUFpQixVQUFVRCxLQUFJLEdBQUk7WUFDeEUsT0FBTyxFQUFFO1FBQ1g7UUFFQSxNQUFNRSxtQkFBbUIsQ0FBQ1I7WUFDeEIsSUFBSUEsS0FBS08sSUFBSSxLQUFLLGNBQWM7Z0JBQzlCLE1BQU1OLFFBQVFGLGFBQWFDO2dCQUMzQixPQUFPQyxRQUFRO29CQUFDQTtpQkFBTSxHQUFHLEVBQUU7WUFDN0IsT0FBTyxJQUFJRCxLQUFLTyxJQUFJLEtBQUssaUJBQWlCLFVBQVVQLE1BQU07Z0JBQ3hELE9BQU9LLGtCQUFrQkw7WUFDM0I7WUFDQSxPQUFPLEVBQUU7UUFDWDtRQUVBLE9BQU87ZUFBSVEsaUJBQWlCRixNQUFNRyxJQUFJO2VBQU1ELGlCQUFpQkYsTUFBTUksS0FBSztTQUFFO0lBQzVFO0lBRUEsT0FBT2IsT0FDTCxBQUFDYyxDQUFBQSxNQUFNQyxPQUFPLENBQUNSLE9BQU9BLE1BQU07UUFBQ0E7S0FBSSxBQUFELEVBQUdTLE9BQU8sQ0FBQyxDQUFDQyxJQUMxQ0EsRUFBRVAsSUFBSSxLQUFLLFlBQVlPLEVBQUVQLElBQUksS0FBSyxZQUFZTyxFQUFFUCxJQUFJLEtBQUssV0FDckRGLGtCQUFrQlMsRUFBRVIsS0FBSyxJQUN6QixFQUFFO0FBR1o7QUFFQTs7Q0FFQyxHQUNELE9BQU8sU0FBU1MsY0FBY1gsR0FBZ0IsRUFBRVksU0FBeUI7SUFDdkUsTUFBTUMsb0JBQW9CLENBQUNDO1FBQ3pCLE9BQU9BLE1BQ0pDLEdBQUcsQ0FBQyxDQUFDQyxJQUFPLFVBQVVBLEtBQUtKLFVBQVVLLFFBQVEsQ0FBQ0QsRUFBRUUsSUFBSSxJQUFJRixFQUFFRyxFQUFFLEdBQUcsTUFDL0RDLE1BQU0sQ0FBQzFCO0lBQ1o7SUFFQSxPQUFPRCxPQUNMLEFBQUNjLENBQUFBLE1BQU1DLE9BQU8sQ0FBQ1IsT0FBT0EsTUFBTTtRQUFDQTtLQUFJLEFBQUQsRUFBR1MsT0FBTyxDQUFDLENBQUNDLElBQzFDQSxFQUFFUCxJQUFJLEtBQUssWUFBWUksTUFBTUMsT0FBTyxDQUFDRSxFQUFFVyxJQUFJLElBQUlSLGtCQUFrQkgsRUFBRVcsSUFBSSxJQUFJLEVBQUU7QUFHbkYifQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type Expand<T> = T extends infer O ? {
|
|
2
|
+
[K in keyof O]: O[K];
|
|
3
|
+
} : never;
|
|
4
|
+
type SetPath<T, P extends string, V> = T extends readonly (infer U)[] ? SetPath<U, P, V>[] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Expand<{
|
|
5
|
+
[Key in keyof T]: Key extends K ? SetPath<T[K], Rest, V> : T[Key];
|
|
6
|
+
}> : Expand<T & {
|
|
7
|
+
[Key in K]: SetPath<{}, Rest, V>;
|
|
8
|
+
}> : P extends keyof T ? Expand<{
|
|
9
|
+
[Key in keyof T]: Key extends P ? V : T[Key];
|
|
10
|
+
}> : Expand<T & {
|
|
11
|
+
[Key in P]: V;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function withProp<T extends object, P extends string, V>(obj: T, path: P, value: V): SetPath<T, P, V>;
|
|
14
|
+
interface ChainWrapper<T> {
|
|
15
|
+
set<P extends string, V>(path: P, value: V): ChainWrapper<SetPath<T, P, V>>;
|
|
16
|
+
value(): T;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 객체를 감싸서 체이닝을 시작합니다.
|
|
20
|
+
*/
|
|
21
|
+
export declare function withProps<T extends object>(obj: T): ChainWrapper<T>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=type-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../../src/utils/type-utils.ts"],"names":[],"mappings":"AACA,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAGtE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAElB,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,IAAI,EAAE,GAClC,CAAC,SAAS,MAAM,CAAC,GAEf,MAAM,CAAC;KACJ,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GACtB,CAAC,CAAC,GAAG,CAAC;CACX,CAAC,GAEF,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;CAAE,CAAC,GAElD,CAAC,SAAS,MAAM,CAAC,GAEf,MAAM,CAAC;KAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;CAAE,CAAC,GAExD,MAAM,CAAC,CAAC,GAAG;KAAG,GAAG,IAAI,CAAC,GAAG,CAAC;CAAE,CAAC,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,EAC5D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAiClB;AAED,UAAU,YAAY,CAAC,CAAC;IAEtB,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAG5E,KAAK,IAAI,CAAC,CAAC;CACZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQnE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// 타입을 펼쳐서 보여주는 유틸리티 (객체에만 사용해야 함)
|
|
2
|
+
export function withProp(obj, path, value) {
|
|
3
|
+
const keys = path.split(".");
|
|
4
|
+
if (keys.length === 0) throw new Error("Path cannot be empty");
|
|
5
|
+
const result = structuredClone(obj);
|
|
6
|
+
const setDeep = (current, keys, value)=>{
|
|
7
|
+
if (keys.length === 0) return;
|
|
8
|
+
const [key, ...rest] = keys;
|
|
9
|
+
if (rest.length === 0) {
|
|
10
|
+
if (Array.isArray(current)) {
|
|
11
|
+
current.forEach((item)=>{
|
|
12
|
+
item[key] = value;
|
|
13
|
+
});
|
|
14
|
+
} else {
|
|
15
|
+
current[key] = value;
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
if (!(key in current) || typeof current[key] !== "object") {
|
|
19
|
+
current[key] = {};
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(current[key])) {
|
|
22
|
+
current[key].forEach((item)=>{
|
|
23
|
+
setDeep(item, rest, value);
|
|
24
|
+
});
|
|
25
|
+
} else {
|
|
26
|
+
setDeep(current[key], rest, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
setDeep(result, keys, value);
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 객체를 감싸서 체이닝을 시작합니다.
|
|
35
|
+
*/ export function withProps(obj) {
|
|
36
|
+
return {
|
|
37
|
+
set: (path, value)=>{
|
|
38
|
+
const nextObj = withProp(obj, path, value);
|
|
39
|
+
return withProps(nextObj);
|
|
40
|
+
},
|
|
41
|
+
value: ()=>obj
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90eXBlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIO2DgOyeheydhCDtjrzss5DshJwg67O07Jes7KO864qUIOycoO2LuOumrO2LsCAo6rCd7LK07JeQ66eMIOyCrOyaqe2VtOyVvCDtlagpXG50eXBlIEV4cGFuZDxUPiA9IFQgZXh0ZW5kcyBpbmZlciBPID8geyBbSyBpbiBrZXlvZiBPXTogT1tLXSB9IDogbmV2ZXI7XG5cbi8vIO2VteyLrCDroZzsp4FcbnR5cGUgU2V0UGF0aDxULCBQIGV4dGVuZHMgc3RyaW5nLCBWPiA9IFQgZXh0ZW5kcyByZWFkb25seSAoaW5mZXIgVSlbXSAvLyBbU3RlcCAxXSDtmITsnqwg7YOA7J6F7J20IOuwsOyXtOyduOqwgD8gLT4g7JqU7IaMKFUp7JeQIOuMgO2VtCDsnqzqt4Ag7Zi47LacIO2bhCDrsLDsl7TroZwg6rCQ7IyIXG4gID8gU2V0UGF0aDxVLCBQLCBWPltdXG4gIDogLy8gW1N0ZXAgMl0g6rK966Gc6rCAIOygkCguKeycvOuhnCDrgpjriZjripTqsIA/XG4gICAgUCBleHRlbmRzIGAke2luZmVyIEt9LiR7aW5mZXIgUmVzdH1gXG4gICAgPyBLIGV4dGVuZHMga2V5b2YgVFxuICAgICAgPyAvLyBbU3RlcCAyLTFdIO2CpOqwgCDsobTsnqztlahcbiAgICAgICAgRXhwYW5kPHtcbiAgICAgICAgICBbS2V5IGluIGtleW9mIFRdOiBLZXkgZXh0ZW5kcyBLXG4gICAgICAgICAgICA/IFNldFBhdGg8VFtLXSwgUmVzdCwgVj4gLy8g7J6s6reAIO2YuOy2nFxuICAgICAgICAgICAgOiBUW0tleV07XG4gICAgICAgIH0+XG4gICAgICA6IC8vIFtTdGVwIDItMl0g7YKk6rCAIOyXhuydjCAo7IOI66Gc7Jq0IOqwneyytCDqsr3roZwg7IOd7ISxKVxuICAgICAgICBFeHBhbmQ8VCAmIHsgW0tleSBpbiBLXTogU2V0UGF0aDx7fSwgUmVzdCwgVj4gfT5cbiAgICA6IC8vIFtTdGVwIDNdIOqyveuhnOydmCDrp4jsp4Drp4kgKEJhc2UgQ2FzZSlcbiAgICAgIFAgZXh0ZW5kcyBrZXlvZiBUXG4gICAgICA/IC8vIFtTdGVwIDMtMV0g6riw7KG0IO2CpCDrja7slrTsk7DquLAgKOq1kOywqCDtg4DsnoUgJiDrjIDsi6Ag7KGw6rG067aAIO2DgOyeheycvOuhnCDsmYTsoIQg6rWQ7LK0KVxuICAgICAgICBFeHBhbmQ8eyBbS2V5IGluIGtleW9mIFRdOiBLZXkgZXh0ZW5kcyBQID8gViA6IFRbS2V5XSB9PlxuICAgICAgOiAvLyBbU3RlcCAzLTJdIOyDiCDtgqQg7LaU6rCAXG4gICAgICAgIEV4cGFuZDxUICYgeyBbS2V5IGluIFBdOiBWIH0+O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb3A8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIHN0cmluZywgVj4oXG4gIG9iajogVCxcbiAgcGF0aDogUCxcbiAgdmFsdWU6IFYsXG4pOiBTZXRQYXRoPFQsIFAsIFY+IHtcbiAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIlBhdGggY2Fubm90IGJlIGVtcHR5XCIpO1xuICBjb25zdCByZXN1bHQgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqKTtcblxuICBjb25zdCBzZXREZWVwID0gKGN1cnJlbnQ6IGFueSwga2V5czogc3RyaW5nW10sIHZhbHVlOiBWKTogdm9pZCA9PiB7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgW2tleSwgLi4ucmVzdF0gPSBrZXlzO1xuXG4gICAgaWYgKHJlc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICBjdXJyZW50LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpdGVtW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnQpIHx8IHR5cGVvZiBjdXJyZW50W2tleV0gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY3VycmVudFtrZXldID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgIGN1cnJlbnRba2V5XS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBzZXREZWVwKGl0ZW0sIHJlc3QsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXREZWVwKGN1cnJlbnRba2V5XSwgcmVzdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzZXREZWVwKHJlc3VsdCwga2V5cywgdmFsdWUpO1xuICByZXR1cm4gcmVzdWx0IGFzIFNldFBhdGg8VCwgUCwgVj47XG59XG5cbmludGVyZmFjZSBDaGFpbldyYXBwZXI8VD4ge1xuICAvLyDqsr3roZzsl5Ag6rCS7J2EIOyEpOygle2VmOqzoCDrs4Dqsr3rkJwg7YOA7J6F7J2YIOyDiOuhnOyatCDssrTsnbgg656Y7Y2866W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgc2V0PFAgZXh0ZW5kcyBzdHJpbmcsIFY+KHBhdGg6IFAsIHZhbHVlOiBWKTogQ2hhaW5XcmFwcGVyPFNldFBhdGg8VCwgUCwgVj4+O1xuXG4gIC8vIOy1nOyihSDqsrDqs7wg6rCd7LK066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgdmFsdWUoKTogVDtcbn1cblxuLyoqXG4gKiDqsJ3ssrTrpbwg6rCQ7Iu47IScIOyytOydtOuLneydhCDsi5zsnpHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJvcHM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogQ2hhaW5XcmFwcGVyPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXQ6IDxQIGV4dGVuZHMgc3RyaW5nLCBWPihwYXRoOiBQLCB2YWx1ZTogVikgPT4ge1xuICAgICAgY29uc3QgbmV4dE9iaiA9IHdpdGhQcm9wKG9iaiwgcGF0aCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHdpdGhQcm9wcyhuZXh0T2JqKSBhcyBDaGFpbldyYXBwZXI8U2V0UGF0aDxULCBQLCBWPj47XG4gICAgfSxcbiAgICB2YWx1ZTogKCkgPT4gb2JqLFxuICB9O1xufVxuIl0sIm5hbWVzIjpbIndpdGhQcm9wIiwib2JqIiwicGF0aCIsInZhbHVlIiwia2V5cyIsInNwbGl0IiwibGVuZ3RoIiwiRXJyb3IiLCJyZXN1bHQiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJzZXREZWVwIiwiY3VycmVudCIsImtleSIsInJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaXRlbSIsIndpdGhQcm9wcyIsInNldCIsIm5leHRPYmoiXSwibWFwcGluZ3MiOiJBQUFBLGtDQUFrQztBQXdCbEMsT0FBTyxTQUFTQSxTQUNkQyxHQUFNLEVBQ05DLElBQU8sRUFDUEMsS0FBUTtJQUVSLE1BQU1DLE9BQU9GLEtBQUtHLEtBQUssQ0FBQztJQUN4QixJQUFJRCxLQUFLRSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUlDLE1BQU07SUFDdkMsTUFBTUMsU0FBU0MsZ0JBQWdCUjtJQUUvQixNQUFNUyxVQUFVLENBQUNDLFNBQWNQLE1BQWdCRDtRQUM3QyxJQUFJQyxLQUFLRSxNQUFNLEtBQUssR0FBRztRQUN2QixNQUFNLENBQUNNLEtBQUssR0FBR0MsS0FBSyxHQUFHVDtRQUV2QixJQUFJUyxLQUFLUCxNQUFNLEtBQUssR0FBRztZQUNyQixJQUFJUSxNQUFNQyxPQUFPLENBQUNKLFVBQVU7Z0JBQzFCQSxRQUFRSyxPQUFPLENBQUMsQ0FBQ0M7b0JBQ2ZBLElBQUksQ0FBQ0wsSUFBSSxHQUFHVDtnQkFDZDtZQUNGLE9BQU87Z0JBQ0xRLE9BQU8sQ0FBQ0MsSUFBSSxHQUFHVDtZQUNqQjtRQUNGLE9BQU87WUFDTCxJQUFJLENBQUVTLENBQUFBLE9BQU9ELE9BQU0sS0FBTSxPQUFPQSxPQUFPLENBQUNDLElBQUksS0FBSyxVQUFVO2dCQUN6REQsT0FBTyxDQUFDQyxJQUFJLEdBQUcsQ0FBQztZQUNsQjtZQUNBLElBQUlFLE1BQU1DLE9BQU8sQ0FBQ0osT0FBTyxDQUFDQyxJQUFJLEdBQUc7Z0JBQy9CRCxPQUFPLENBQUNDLElBQUksQ0FBQ0ksT0FBTyxDQUFDLENBQUNDO29CQUNwQlAsUUFBUU8sTUFBTUosTUFBTVY7Z0JBQ3RCO1lBQ0YsT0FBTztnQkFDTE8sUUFBUUMsT0FBTyxDQUFDQyxJQUFJLEVBQUVDLE1BQU1WO1lBQzlCO1FBQ0Y7SUFDRjtJQUVBTyxRQUFRRixRQUFRSixNQUFNRDtJQUN0QixPQUFPSztBQUNUO0FBVUE7O0NBRUMsR0FDRCxPQUFPLFNBQVNVLFVBQTRCakIsR0FBTTtJQUNoRCxPQUFPO1FBQ0xrQixLQUFLLENBQXNCakIsTUFBU0M7WUFDbEMsTUFBTWlCLFVBQVVwQixTQUFTQyxLQUFLQyxNQUFNQztZQUNwQyxPQUFPZSxVQUFVRTtRQUNuQjtRQUNBakIsT0FBTyxJQUFNRjtJQUNmO0FBQ0YifQ==
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function
|
|
3
|
-
|
|
4
|
-
imported: any;
|
|
5
|
-
}[]>;
|
|
6
|
-
export declare function findAppRootPath(): Promise<string>;
|
|
7
|
-
export declare function findApiRootPath(): string;
|
|
1
|
+
import type { AbsolutePath } from "./path-utils";
|
|
2
|
+
export declare function findAppRootPath(): Promise<AbsolutePath>;
|
|
3
|
+
export declare function findApiRootPath(): AbsolutePath;
|
|
8
4
|
export declare function nonNullable<T>(value: T): value is NonNullable<T>;
|
|
5
|
+
export declare function exhaustive(_param: never): void;
|
|
6
|
+
export declare function assertExists<T>(value: T | null | undefined, message?: string): T;
|
|
7
|
+
export declare function assertNotNull<T>(value: T | null, message?: string): T;
|
|
8
|
+
export declare function assertDefined<T>(value: T | undefined, message?: string): T;
|
|
9
|
+
export declare function chunk<T>(array: T[], size: number): T[][];
|
|
10
|
+
export declare function intersectionBy<T, K>(arr1: readonly T[], arr2: readonly T[], iteratee: (item: T) => K): T[];
|
|
11
|
+
export declare function differenceWith<T>(arr1: readonly T[], arr2: readonly T[], comparator: (a: T, b: T) => boolean): T[];
|
|
9
12
|
//# sourceMappingURL=utils.d.ts.map
|