sonamu 0.5.6 → 0.6.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/dist/api/base-frame.js +12 -2
- package/dist/api/caster.js +66 -2
- package/dist/api/code-converters.js +489 -2
- package/dist/api/config.d.ts +76 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +32 -0
- package/dist/api/context.d.ts +1 -0
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +3 -2
- package/dist/api/decorators.d.ts +1 -0
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +142 -2
- package/dist/api/index.js +9 -2
- package/dist/api/sonamu.d.ts +8 -22
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +482 -2
- package/dist/bin/build-config.d.ts +2 -1
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +12 -2
- package/dist/bin/cli-wrapper.js +71 -2
- package/dist/bin/cli.js +418 -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/database/_batch_update.js +78 -2
- package/dist/database/base-model.js +247 -2
- package/dist/database/code-generator.js +53 -2
- package/dist/database/db.d.ts +5 -16
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +132 -2
- package/dist/database/knex-plugins/knex-on-duplicate-update.js +39 -2
- package/dist/database/puri-wrapper.d.ts +22 -10
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +109 -2
- package/dist/database/puri.d.ts +105 -73
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +539 -2
- package/dist/database/puri.types.d.ts +33 -42
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +3 -2
- package/dist/database/transaction-context.d.ts +3 -3
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +14 -2
- package/dist/database/upsert-builder.js +215 -2
- package/dist/entity/entity-manager.d.ts +3 -1
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +114 -2
- package/dist/entity/entity-utils.js +210 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +651 -2
- package/dist/exceptions/error-handler.js +29 -2
- package/dist/exceptions/so-exceptions.js +85 -2
- package/dist/file-storage/driver.js +79 -2
- package/dist/file-storage/file-storage.js +75 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/migration/code-generation.js +558 -2
- package/dist/migration/migration-set.js +364 -2
- package/dist/migration/migrator.d.ts +0 -9
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +510 -2
- package/dist/migration/types.js +3 -2
- package/dist/naite/naite.d.ts +12 -0
- package/dist/naite/naite.d.ts.map +1 -0
- package/dist/naite/naite.js +72 -0
- package/dist/stream/index.js +3 -2
- package/dist/stream/sse.js +38 -2
- package/dist/syncer/api-parser.d.ts +20 -0
- package/dist/syncer/api-parser.d.ts.map +1 -0
- package/dist/syncer/api-parser.js +229 -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 +141 -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 +58 -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 +82 -0
- package/dist/syncer/syncer.d.ts +93 -108
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +375 -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 +101 -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 +87 -0
- package/dist/{templates → template/implementations}/generated.template.d.ts +3 -3
- package/dist/template/implementations/generated.template.d.ts.map +1 -0
- package/dist/template/implementations/generated.template.js +232 -0
- package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -3
- 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 +3 -3
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
- package/dist/template/implementations/generated_sso.template.js +105 -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 +171 -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 +193 -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 +465 -0
- package/dist/{templates → template/implementations}/view_list_columns.template.d.ts +3 -3
- 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 +5 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +6 -0
- package/dist/template/template.d.ts +39 -0
- package/dist/template/template.d.ts.map +1 -0
- package/dist/template/template.js +47 -0
- package/dist/template/zod-converter.d.ts +18 -0
- package/dist/template/zod-converter.d.ts.map +1 -0
- package/dist/template/zod-converter.js +166 -0
- package/dist/testing/_relation-graph.js +80 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +521 -2
- package/dist/types/types.d.ts +39 -40
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +289 -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.js +26 -2
- package/dist/utils/esm-utils.d.ts +45 -0
- package/dist/utils/esm-utils.d.ts.map +1 -0
- package/dist/utils/esm-utils.js +56 -0
- package/dist/utils/fs-utils.js +17 -2
- package/dist/utils/lodash-able.js +6 -2
- package/dist/utils/model.js +22 -2
- 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.js +35 -2
- package/dist/utils/utils.d.ts +4 -7
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +33 -2
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +19 -2
- package/package.json +21 -9
- package/src/api/code-converters.ts +2 -2
- package/src/api/config.ts +142 -0
- package/src/api/context.ts +1 -0
- package/src/api/decorators.ts +15 -5
- package/src/api/sonamu.ts +102 -87
- package/src/bin/build-config.ts +2 -1
- package/src/bin/cli-wrapper.ts +10 -3
- package/src/bin/cli.ts +108 -56
- package/src/bin/hot-hook-register.ts +22 -0
- package/src/database/base-model.ts +1 -1
- package/src/database/code-generator.ts +1 -1
- package/src/database/db.ts +53 -60
- package/src/database/puri-wrapper.ts +104 -26
- package/src/database/puri.ts +477 -580
- package/src/database/puri.types.ts +111 -201
- package/src/database/transaction-context.ts +4 -4
- package/src/database/upsert-builder.ts +1 -1
- package/src/entity/entity-manager.ts +19 -15
- package/src/entity/entity.ts +4 -3
- package/src/index.ts +2 -0
- package/src/migration/code-generation.ts +1 -1
- package/src/migration/migration-set.ts +1 -1
- package/src/migration/migrator.ts +23 -152
- package/src/naite/naite.ts +70 -0
- package/src/syncer/api-parser.ts +299 -0
- package/src/syncer/checksum.ts +152 -0
- package/src/syncer/code-generator.ts +202 -0
- package/src/syncer/entity-operations.ts +68 -0
- package/src/syncer/file-patterns.ts +56 -0
- package/src/syncer/index.ts +6 -0
- package/src/syncer/module-loader.ts +125 -0
- package/src/syncer/syncer.ts +363 -1420
- package/src/template/entity-converter.ts +123 -0
- package/src/template/helpers.ts +84 -0
- package/src/{templates → template/implementations}/entity.template.ts +4 -4
- package/src/{templates → template/implementations}/generated.template.ts +9 -9
- package/src/{templates → template/implementations}/generated_http.template.ts +9 -6
- package/src/{templates → template/implementations}/generated_sso.template.ts +7 -7
- package/src/{templates → template/implementations}/init_types.template.ts +4 -4
- package/src/{templates → template/implementations}/model.template.ts +9 -9
- package/src/{templates → template/implementations}/model_test.template.ts +5 -5
- package/src/{templates → template/implementations}/service.template.ts +29 -12
- package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
- package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +5 -21
- package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
- package/src/{templates → template/implementations}/view_form.template.ts +11 -13
- package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
- package/src/{templates → template/implementations}/view_id_async_select.template.ts +3 -3
- package/src/{templates → template/implementations}/view_list.template.ts +13 -64
- package/src/{templates → template/implementations}/view_list_columns.template.ts +3 -3
- package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
- package/src/template/index.ts +4 -0
- package/src/template/template.ts +86 -0
- package/src/template/zod-converter.ts +219 -0
- package/src/testing/fixture-manager.ts +8 -1
- package/src/types/types.ts +39 -62
- package/src/utils/async-utils.ts +17 -0
- package/src/utils/console-util.ts +4 -0
- package/src/utils/esm-utils.ts +69 -0
- package/src/utils/path-utils.ts +102 -0
- package/src/utils/process-utils.ts +46 -0
- package/src/utils/sql-parser.ts +1 -1
- package/src/utils/utils.ts +14 -40
- package/src/utils/zod-error.ts +0 -1
- 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.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.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.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.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/templates/base-template.ts +0 -19
- package/src/templates/index.ts +0 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { EntityManager } from "../entity/entity-manager.js";
|
|
3
|
+
import { ServiceUnavailableException } from "../exceptions/so-exceptions.js";
|
|
4
|
+
import { zodTypeToRenderingNode, propToZodType } from "./zod-converter.js";
|
|
5
|
+
/**
|
|
6
|
+
* 엔티티의 특정 subset을 RenderingNode로 변환합니다.
|
|
7
|
+
* subset의 필드들을 Zod 타입으로 변환한 후 UI 렌더링용 노드로 만듭니다.
|
|
8
|
+
* object와 array의 경우 적절한 pick 필드를 자동으로 선택합니다.
|
|
9
|
+
*/ export async function getColumnsNode(entityId, subsetKey) {
|
|
10
|
+
const entity = EntityManager.get(entityId);
|
|
11
|
+
const subset = entity.subsets[subsetKey];
|
|
12
|
+
if (subset === undefined) {
|
|
13
|
+
throw new ServiceUnavailableException(`Subset ${subsetKey} 가 없습니다.`);
|
|
14
|
+
}
|
|
15
|
+
const propNodes = entity.fieldExprsToPropNodes(subset);
|
|
16
|
+
const rootPropNode = {
|
|
17
|
+
nodeType: "object",
|
|
18
|
+
children: propNodes
|
|
19
|
+
};
|
|
20
|
+
const columnsZodType = await propNodeToZodType(rootPropNode);
|
|
21
|
+
const columnsNode = zodTypeToRenderingNode(columnsZodType);
|
|
22
|
+
columnsNode.children = columnsNode.children.map((child)=>{
|
|
23
|
+
if (child.renderType === "object") {
|
|
24
|
+
const pickedCol = child.children.find((cc)=>[
|
|
25
|
+
"title",
|
|
26
|
+
"name"
|
|
27
|
+
].includes(cc.name));
|
|
28
|
+
if (pickedCol) {
|
|
29
|
+
return {
|
|
30
|
+
...child,
|
|
31
|
+
renderType: "object-pick",
|
|
32
|
+
config: {
|
|
33
|
+
picked: pickedCol.name
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
} else {
|
|
37
|
+
return child;
|
|
38
|
+
}
|
|
39
|
+
} else if (child.renderType === "array" && child.element && child.element.renderType === "object") {
|
|
40
|
+
const pickedCol = child.element.children.find((cc)=>[
|
|
41
|
+
"title",
|
|
42
|
+
"name"
|
|
43
|
+
].includes(cc.name));
|
|
44
|
+
if (pickedCol) {
|
|
45
|
+
return {
|
|
46
|
+
...child,
|
|
47
|
+
element: {
|
|
48
|
+
...child.element,
|
|
49
|
+
renderType: "object-pick",
|
|
50
|
+
config: {
|
|
51
|
+
picked: pickedCol.name
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
} else {
|
|
56
|
+
return child;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return child;
|
|
60
|
+
});
|
|
61
|
+
return columnsNode;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* EntityPropNode를 Zod 타입으로 변환합니다.
|
|
65
|
+
* plain, array, object 세 가지 nodeType을 재귀적으로 처리합니다.
|
|
66
|
+
*/ export async function propNodeToZodType(propNode) {
|
|
67
|
+
if (propNode.nodeType === "plain") {
|
|
68
|
+
return propToZodType(propNode.prop);
|
|
69
|
+
} else if (propNode.nodeType === "array") {
|
|
70
|
+
if (propNode.prop === undefined) {
|
|
71
|
+
throw new Error();
|
|
72
|
+
} else if (propNode.children.length > 0) {
|
|
73
|
+
return (await propNodeToZodType({
|
|
74
|
+
...propNode,
|
|
75
|
+
nodeType: "object"
|
|
76
|
+
})).array();
|
|
77
|
+
} else {
|
|
78
|
+
const innerType = await propToZodType(propNode.prop);
|
|
79
|
+
if (propNode.prop.nullable === true) {
|
|
80
|
+
return z.array(innerType).nullable();
|
|
81
|
+
} else {
|
|
82
|
+
return z.array(innerType);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else if (propNode.nodeType === "object") {
|
|
86
|
+
const obj = await propNode.children.reduce(async (promise, childPropNode)=>{
|
|
87
|
+
const result = await promise;
|
|
88
|
+
result[childPropNode.prop.name] = await propNodeToZodType(childPropNode);
|
|
89
|
+
return result;
|
|
90
|
+
}, {});
|
|
91
|
+
if (propNode.prop?.nullable === true) {
|
|
92
|
+
return z.object(obj).nullable();
|
|
93
|
+
} else {
|
|
94
|
+
return z.object(obj);
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
throw Error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9lbnRpdHktY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBFbnRpdHlQcm9wTm9kZSwgUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSwgcHJvcFRvWm9kVHlwZSB9IGZyb20gXCIuL3pvZC1jb252ZXJ0ZXJcIjtcblxuLyoqXG4gKiDsl5Tti7Dti7DsnZgg7Yq57KCVIHN1YnNldOydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN1YnNldOydmCDtlYTrk5zrk6TsnYQgWm9kIO2DgOyeheycvOuhnCDrs4DtmZjtlZwg7ZuEIFVJIOugjOuNlOungeyaqSDrhbjrk5zroZwg66eM65Ot64uI64ukLlxuICogb2JqZWN07JmAIGFycmF57J2YIOqyveyasCDsoIHsoIjtlZwgcGljayDtlYTrk5zrpbwg7J6Q64+Z7Jy866GcIOyEoO2Dne2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbHVtbnNOb2RlKFxuICBlbnRpdHlJZDogc3RyaW5nLFxuICBzdWJzZXRLZXk6IHN0cmluZ1xuKTogUHJvbWlzZTxSZW5kZXJpbmdOb2RlPiB7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3Qgc3Vic2V0ID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgaWYgKHN1YnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihgU3Vic2V0ICR7c3Vic2V0S2V5fSDqsIAg7JeG7Iq164uI64ukLmApO1xuICB9XG4gIGNvbnN0IHByb3BOb2RlcyA9IGVudGl0eS5maWVsZEV4cHJzVG9Qcm9wTm9kZXMoc3Vic2V0KTtcbiAgY29uc3Qgcm9vdFByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICBjaGlsZHJlbjogcHJvcE5vZGVzLFxuICB9O1xuXG4gIGNvbnN0IGNvbHVtbnNab2RUeXBlID0gKGF3YWl0IHByb3BOb2RlVG9ab2RUeXBlKFxuICAgIHJvb3RQcm9wTm9kZVxuICApKSBhcyB6LlpvZE9iamVjdDxhbnk+O1xuXG4gIGNvbnN0IGNvbHVtbnNOb2RlID0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShjb2x1bW5zWm9kVHlwZSk7XG4gIGNvbHVtbnNOb2RlLmNoaWxkcmVuID0gY29sdW1uc05vZGUuY2hpbGRyZW4hLm1hcCgoY2hpbGQpID0+IHtcbiAgICBpZiAoY2hpbGQucmVuZGVyVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgcGlja2VkQ29sID0gY2hpbGQuY2hpbGRyZW4hLmZpbmQoKGNjKSA9PlxuICAgICAgICBbXCJ0aXRsZVwiLCBcIm5hbWVcIl0uaW5jbHVkZXMoY2MubmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAocGlja2VkQ29sKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3QtcGlja1wiLFxuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgcGlja2VkOiBwaWNrZWRDb2wubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaGlsZC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiZcbiAgICAgIGNoaWxkLmVsZW1lbnQgJiZcbiAgICAgIGNoaWxkLmVsZW1lbnQucmVuZGVyVHlwZSA9PT0gXCJvYmplY3RcIlxuICAgICkge1xuICAgICAgY29uc3QgcGlja2VkQ29sID0gY2hpbGQuZWxlbWVudCEuY2hpbGRyZW4hLmZpbmQoKGNjKSA9PlxuICAgICAgICBbXCJ0aXRsZVwiLCBcIm5hbWVcIl0uaW5jbHVkZXMoY2MubmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAocGlja2VkQ29sKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgLi4uY2hpbGQuZWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0LXBpY2tcIixcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zTm9kZTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9wTm9kZeulvCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHBsYWluLCBhcnJheSwgb2JqZWN0IOyEuCDqsIDsp4Agbm9kZVR5cGXsnYQg7J6s6reA7KCB7Jy866GcIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3BOb2RlVG9ab2RUeXBlKFxuICBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGVcbik6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJwbGFpblwiKSB7XG4gICAgcmV0dXJuIHByb3BUb1pvZFR5cGUocHJvcE5vZGUucHJvcCk7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIGlmIChwcm9wTm9kZS5wcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gZWxzZSBpZiAocHJvcE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoe1xuICAgICAgICAgIC4uLnByb3BOb2RlLFxuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9KVxuICAgICAgKS5hcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSBhd2FpdCBwcm9wVG9ab2RUeXBlKHByb3BOb2RlLnByb3ApO1xuICAgICAgaWYgKHByb3BOb2RlLnByb3AubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKS5udWxsYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBvYmogPSBhd2FpdCBwcm9wTm9kZS5jaGlsZHJlbi5yZWR1Y2UoXG4gICAgICBhc3luYyAocHJvbWlzZSwgY2hpbGRQcm9wTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgICByZXN1bHRbY2hpbGRQcm9wTm9kZS5wcm9wIS5uYW1lXSA9XG4gICAgICAgICAgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoY2hpbGRQcm9wTm9kZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICAge30gYXMgYW55XG4gICAgKTtcblxuICAgIGlmIChwcm9wTm9kZS5wcm9wPy5udWxsYWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHoub2JqZWN0KG9iaikubnVsbGFibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHoub2JqZWN0KG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yO1xuICB9XG59XG4iXSwibmFtZXMiOlsieiIsIkVudGl0eU1hbmFnZXIiLCJTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24iLCJ6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIiwicHJvcFRvWm9kVHlwZSIsImdldENvbHVtbnNOb2RlIiwiZW50aXR5SWQiLCJzdWJzZXRLZXkiLCJlbnRpdHkiLCJnZXQiLCJzdWJzZXQiLCJzdWJzZXRzIiwidW5kZWZpbmVkIiwicHJvcE5vZGVzIiwiZmllbGRFeHByc1RvUHJvcE5vZGVzIiwicm9vdFByb3BOb2RlIiwibm9kZVR5cGUiLCJjaGlsZHJlbiIsImNvbHVtbnNab2RUeXBlIiwicHJvcE5vZGVUb1pvZFR5cGUiLCJjb2x1bW5zTm9kZSIsIm1hcCIsImNoaWxkIiwicmVuZGVyVHlwZSIsInBpY2tlZENvbCIsImZpbmQiLCJjYyIsImluY2x1ZGVzIiwibmFtZSIsImNvbmZpZyIsInBpY2tlZCIsImVsZW1lbnQiLCJwcm9wTm9kZSIsInByb3AiLCJFcnJvciIsImxlbmd0aCIsImFycmF5IiwiaW5uZXJUeXBlIiwibnVsbGFibGUiLCJvYmoiLCJyZWR1Y2UiLCJwcm9taXNlIiwiY2hpbGRQcm9wTm9kZSIsInJlc3VsdCIsIm9iamVjdCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsT0FBTyxNQUFNO0FBQ3BCLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FBU0MsMkJBQTJCLFFBQVEsaUNBQThCO0FBRTFFLFNBQVNDLHNCQUFzQixFQUFFQyxhQUFhLFFBQVEscUJBQWtCO0FBRXhFOzs7O0NBSUMsR0FDRCxPQUFPLGVBQWVDLGVBQ3BCQyxRQUFnQixFQUNoQkMsU0FBaUI7SUFFakIs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
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { EntityNamesRecord } from "../entity/entity-manager";
|
|
2
|
+
import { RelationProp } from "../types/types";
|
|
3
|
+
/**
|
|
4
|
+
* Enum의 표시용 라벨을 가져옵니다.
|
|
5
|
+
* OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getLabel(entityId: string, enumId: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* 컬럼 이름으로부터 Enum 정보를 추출합니다.
|
|
10
|
+
* Entity의 prop 중 enum 타입인 것을 찾아 관련 정보를 반환합니다.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getEnumInfoFromColName(entityId: string, colName: string): {
|
|
13
|
+
id: string;
|
|
14
|
+
targetEntityNames: EntityNamesRecord;
|
|
15
|
+
targetEntityId: string;
|
|
16
|
+
title: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* 컬럼 이름으로부터 Relation prop 정보를 가져옵니다.
|
|
20
|
+
* 관계형 prop이 아닌 경우 에러를 발생시킵니다.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getRelationPropFromColName(entityId: string, colName: string): RelationProp;
|
|
23
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/template/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IACD,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CA0BA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,YAAY,CAYd"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import inflection from "inflection";
|
|
2
|
+
import { EntityManager } from "../entity/entity-manager.js";
|
|
3
|
+
import { isEnumProp, isRelationProp } from "../types/types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Enum의 표시용 라벨을 가져옵니다.
|
|
6
|
+
* OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
|
|
7
|
+
*/ export function getLabel(entityId, enumId) {
|
|
8
|
+
if (enumId.endsWith("OrderBy")) {
|
|
9
|
+
return "정렬";
|
|
10
|
+
} else if (enumId.endsWith("SearchField")) {
|
|
11
|
+
return "검색";
|
|
12
|
+
} else {
|
|
13
|
+
const enumProp = EntityManager.get(entityId).props.find((prop)=>`${entityId}${inflection.camelize(prop.name)}` === enumId);
|
|
14
|
+
if (enumProp && enumProp.desc) {
|
|
15
|
+
return enumProp.desc;
|
|
16
|
+
}
|
|
17
|
+
return enumId;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 컬럼 이름으로부터 Enum 정보를 추출합니다.
|
|
22
|
+
* Entity의 prop 중 enum 타입인 것을 찾아 관련 정보를 반환합니다.
|
|
23
|
+
*/ export function getEnumInfoFromColName(entityId, colName) {
|
|
24
|
+
const baseEntity = EntityManager.get(entityId);
|
|
25
|
+
const prop = baseEntity.props.find((p)=>p.name === colName);
|
|
26
|
+
if (prop && isEnumProp(prop)) {
|
|
27
|
+
return {
|
|
28
|
+
id: prop.id,
|
|
29
|
+
targetEntityId: entityId,
|
|
30
|
+
targetEntityNames: EntityManager.getNamesFromId(entityId),
|
|
31
|
+
title: prop.desc ?? prop.id
|
|
32
|
+
};
|
|
33
|
+
} else {
|
|
34
|
+
const idCandidate = inflection.camelize(inflection.underscore(entityId) + "_" + inflection.underscore(colName), false);
|
|
35
|
+
try {
|
|
36
|
+
const targetEntityNames = EntityManager.getNamesFromId(entityId);
|
|
37
|
+
return {
|
|
38
|
+
id: idCandidate,
|
|
39
|
+
targetEntityId: entityId,
|
|
40
|
+
targetEntityNames: targetEntityNames,
|
|
41
|
+
title: idCandidate
|
|
42
|
+
};
|
|
43
|
+
} catch {}
|
|
44
|
+
throw new Error(`찾을 수 없는 EnumProp ${colName}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 컬럼 이름으로부터 Relation prop 정보를 가져옵니다.
|
|
49
|
+
* 관계형 prop이 아닌 경우 에러를 발생시킵니다.
|
|
50
|
+
*/ export function getRelationPropFromColName(entityId, colName) {
|
|
51
|
+
const baseEntity = EntityManager.get(entityId);
|
|
52
|
+
const relProp = baseEntity.props.find((prop)=>prop.name === colName);
|
|
53
|
+
if (isRelationProp(relProp)) {
|
|
54
|
+
const relEntity = EntityManager.get(relProp.with);
|
|
55
|
+
if (relEntity.parentId !== undefined) {
|
|
56
|
+
throw new Error("Only parent entities can be used as relation props");
|
|
57
|
+
}
|
|
58
|
+
return relProp;
|
|
59
|
+
} else {
|
|
60
|
+
throw new Error(`찾을 수 없는 Relation ${colName}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wLCBSZWxhdGlvblByb3AgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuLyoqXG4gKiBFbnVt7J2YIO2RnOyLnOyaqSDrnbzrsqjsnYQg6rCA7KC47Ji164uI64ukLlxuICogT3JkZXJCeSwgU2VhcmNoRmllbGQg65OxIO2KueyImO2VnCDqsr3smrDsmYAg7J2867CYIEVudW3snYQg6rWs67aE7ZWY7JesIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsKGVudGl0eUlkOiBzdHJpbmcsIGVudW1JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVudW1JZC5lbmRzV2l0aChcIk9yZGVyQnlcIikpIHtcbiAgICByZXR1cm4gXCLsoJXroKxcIjtcbiAgfSBlbHNlIGlmIChlbnVtSWQuZW5kc1dpdGgoXCJTZWFyY2hGaWVsZFwiKSkge1xuICAgIHJldHVybiBcIuqygOyDiVwiO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVudW1Qcm9wID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzLmZpbmQoXG4gICAgICAocHJvcCkgPT4gYCR7ZW50aXR5SWR9JHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3AubmFtZSl9YCA9PT0gZW51bUlkXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3AgJiYgZW51bVByb3AuZGVzYykge1xuICAgICAgcmV0dXJuIGVudW1Qcm9wLmRlc2M7XG4gICAgfVxuICAgIHJldHVybiBlbnVtSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIEVudW0g7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEVudGl0eeydmCBwcm9wIOykkSBlbnVtIO2DgOyeheyduCDqsoPsnYQg7LC+7JWEIOq0gOugqCDsoJXrs7Trpbwg67CY7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShcbiAgZW50aXR5SWQ6IHN0cmluZyxcbiAgY29sTmFtZTogc3RyaW5nXG4pOiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRhcmdldEVudGl0eU5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgdGFyZ2V0RW50aXR5SWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn0ge1xuICBjb25zdCBiYXNlRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBjb25zdCBwcm9wID0gYmFzZUVudGl0eS5wcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGNvbE5hbWUpO1xuICBpZiAocHJvcCAmJiBpc0VudW1Qcm9wKHByb3ApKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBwcm9wLmlkLFxuICAgICAgdGFyZ2V0RW50aXR5SWQ6IGVudGl0eUlkLFxuICAgICAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpLFxuICAgICAgdGl0bGU6IHByb3AuZGVzYyA/PyBwcm9wLmlkLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaWRDYW5kaWRhdGUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKSArIFwiX1wiICsgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGNvbE5hbWUpLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ2FuZGlkYXRlLFxuICAgICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICAgIHRhcmdldEVudGl0eU5hbWVzOiB0YXJnZXRFbnRpdHlOYW1lcyxcbiAgICAgICAgdGl0bGU6IGlkQ2FuZGlkYXRlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHt9XG4gICAgdGhyb3cgbmV3IEVycm9yKGDssL7snYQg7IiYIOyXhuuKlCBFbnVtUHJvcCAke2NvbE5hbWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIFJlbGF0aW9uIHByb3Ag7KCV67O066W8IOqwgOyguOyYteuLiOuLpC5cbiAqIOq0gOqzhO2YlSBwcm9w7J20IOyVhOuLjCDqsr3smrAg7JeQ65+s66W8IOuwnOyDneyLnO2CteuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKFxuICBlbnRpdHlJZDogc3RyaW5nLFxuICBjb2xOYW1lOiBzdHJpbmdcbik6IFJlbGF0aW9uUHJvcCB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHJlbFByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChyZWxQcm9wKSkge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHJlbFByb3Aud2l0aCk7XG4gICAgaWYgKHJlbEVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHBhcmVudCBlbnRpdGllcyBjYW4gYmUgdXNlZCBhcyByZWxhdGlvbiBwcm9wc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbFByb3A7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDssL7snYQg7IiYIOyXhuuKlCBSZWxhdGlvbiAke2NvbE5hbWV9YCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiRW50aXR5TWFuYWdlciIsImlzRW51bVByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImdldExhYmVsIiwiZW50aXR5SWQiLCJlbnVtSWQiLCJlbmRzV2l0aCIsImVudW1Qcm9wIiwiZ2V0IiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImNhbWVsaXplIiwibmFtZSIsImRlc2MiLCJnZXRFbnVtSW5mb0Zyb21Db2xOYW1lIiwiY29sTmFtZSIsImJhc2VFbnRpdHkiLCJwIiwiaWQiLCJ0YXJnZXRFbnRpdHlJZCIsInRhcmdldEVudGl0eU5hbWVzIiwiZ2V0TmFtZXNGcm9tSWQiLCJ0aXRsZSIsImlkQ2FuZGlkYXRlIiwidW5kZXJzY29yZSIsIkVycm9yIiwiZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUiLCJyZWxQcm9wIiwicmVsRW50aXR5Iiwid2l0aCIsInBhcmVudElkIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxhQUFhLFFBQTJCLDhCQUEyQjtBQUM1RSxTQUFTQyxVQUFVLEVBQUVDLGNBQWMsUUFBc0Isb0JBQWlCO0FBRTFFOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0MsU0FBU0MsUUFBZ0IsRUFBRUMsTUFBYztJQUN2RCxJQUFJQSxPQUFPQyxRQUFRLENBQUMsWUFBWTtRQUM5QixPQUFPO0lBQ1QsT0FBTyxJQUFJRCxPQUFPQyxRQUFRLENBQUMsZ0JBQWdCO1FBQ3pDLE9BQU87SUFDVCxPQUFPO1FBQ0wsTUFBTUMsV0FBV1AsY0FBY1EsR0FBRyxDQUFDSixVQUFVSyxLQUFLLENBQUNDLElBQUksQ0FDckQsQ0FBQ0MsT0FBUyxHQUFHUCxXQUFXTCxXQUFXYSxRQUFRLENBQUNELEtBQUtFLElBQUksR0FBRyxLQUFLUjtRQUUvRCxJQUFJRSxZQUFZQSxTQUFTTyxJQUFJLEVBQUU7WUFDN0IsT0FBT1AsU0FBU08sSUFBSTtRQUN0QjtRQUNBLE9BQU9UO0lBQ1Q7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU1UsdUJBQ2RYLFFBQWdCLEVBQ2hCWSxPQUFlO0lBT2YsTUFBTUMsYUFBYWpCLGNBQWNRLEdBQUcsQ0FBQ0o7SUFDckMsTUFBTU8sT0FBT00sV0FBV1IsS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ1EsSUFBTUEsRUFBRUwsSUFBSSxLQUFLRztJQUNyRCxJQUFJTCxRQUFRVixXQUFXVSxPQUFPO1FBQzVCLE9BQU87WUFDTFEsSUFBSVIsS0FBS1EsRUFBRTtZQUNYQyxnQkFBZ0JoQjtZQUNoQmlCLG1CQUFtQnJCLGNBQWNzQixjQUFjLENBQUNsQjtZQUNoRG1CLE9BQU9aLEtBQUtHLElBQUksSUFBSUgsS0FBS1EsRUFBRTtRQUM3QjtJQUNGLE9BQU87UUFDTCxNQUFNSyxjQUFjekIsV0FBV2EsUUFBUSxDQUNyQ2IsV0FBVzBCLFVBQVUsQ0FBQ3JCLFlBQVksTUFBTUwsV0FBVzBCLFVBQVUsQ0FBQ1QsVUFDOUQ7UUFFRixJQUFJO1lBQ0YsTUFBTUssb0JBQW9CckIsY0FBY3NCLGNBQWMsQ0FBQ2xCO1lBQ3ZELE9BQU87Z0JBQ0xlLElBQUlLO2dCQUNKSixnQkFBZ0JoQjtnQkFDaEJpQixtQkFBbUJBO2dCQUNuQkUsT0FBT0M7WUFDVDtRQUNGLEVBQUUsT0FBTSxDQUFDO1FBQ1QsTUFBTSxJQUFJRSxNQUFNLENBQUMsaUJBQWlCLEVBQUVWLFNBQVM7SUFDL0M7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU1csMkJBQ2R2QixRQUFnQixFQUNoQlksT0FBZTtJQUVmLE1BQU1DLGFBQWFqQixjQUFjUSxHQUFHLENBQUNKO0lBQ3JDLE1BQU13QixVQUFVWCxXQUFXUixLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxLQUFLRSxJQUFJLEtBQUtHO0lBQzlELElBQUlkLGVBQWUwQixVQUFVO1FBQzNCLE1BQU1DLFlBQVk3QixjQUFjUSxHQUFHLENBQUNvQixRQUFRRSxJQUFJO1FBQ2hELElBQUlELFVBQVVFLFFBQVEsS0FBS0MsV0FBVztZQUNwQyxNQUFNLElBQUlOLE1BQU07UUFDbEI7UUFDQSxPQUFPRTtJQUNULE9BQU87UUFDTCxNQUFNLElBQUlGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRVYsU0FBUztJQUMvQztBQUNGIn0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TemplateOptions } from "
|
|
2
|
-
import { EntityNamesRecord } from "
|
|
3
|
-
import { Template } from "
|
|
1
|
+
import { TemplateOptions } from "../../types/types";
|
|
2
|
+
import { EntityNamesRecord } from "../../entity/entity-manager";
|
|
3
|
+
import { Template } from "../template";
|
|
4
4
|
export declare class Template__entity extends Template {
|
|
5
5
|
constructor();
|
|
6
6
|
getTargetAndPath(names: EntityNamesRecord, parentNames?: EntityNamesRecord): {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/entity.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,qBAAa,gBAAiB,SAAQ,QAAQ;;IAK5C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB;;;;IAS1E,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;;;;;;CAoE1C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { EntityManager } from "../../entity/entity-manager.js";
|
|
2
|
+
import { Template } from "../template.js";
|
|
3
|
+
import { Sonamu } from "../../api/index.js";
|
|
4
|
+
export class Template__entity extends Template {
|
|
5
|
+
constructor(){
|
|
6
|
+
super("entity");
|
|
7
|
+
}
|
|
8
|
+
getTargetAndPath(names, parentNames) {
|
|
9
|
+
const { dir } = Sonamu.config.api;
|
|
10
|
+
return {
|
|
11
|
+
target: `${dir}/src/application`,
|
|
12
|
+
path: `${(parentNames ?? names).fs}/${names.fs}.entity.json`
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
render(options) {
|
|
16
|
+
const { entityId, title, parentId, table } = options;
|
|
17
|
+
const names = EntityManager.getNamesFromId(entityId);
|
|
18
|
+
const parent = (()=>{
|
|
19
|
+
if (parentId) {
|
|
20
|
+
return {
|
|
21
|
+
names: EntityManager.getNamesFromId(parentId),
|
|
22
|
+
entity: EntityManager.get(parentId)
|
|
23
|
+
};
|
|
24
|
+
} else {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
})();
|
|
28
|
+
return {
|
|
29
|
+
...this.getTargetAndPath(names, parent?.names ?? names),
|
|
30
|
+
body: JSON.stringify({
|
|
31
|
+
id: entityId,
|
|
32
|
+
title: title ?? entityId,
|
|
33
|
+
parentId,
|
|
34
|
+
table: table ?? names.fsPlural.replace(/\-/g, "_"),
|
|
35
|
+
props: options.props?.length ? options.props : [
|
|
36
|
+
{
|
|
37
|
+
name: "id",
|
|
38
|
+
type: "integer",
|
|
39
|
+
unsigned: true,
|
|
40
|
+
desc: "ID"
|
|
41
|
+
},
|
|
42
|
+
...parent ? [
|
|
43
|
+
{
|
|
44
|
+
type: "relation",
|
|
45
|
+
name: parent.names.camel,
|
|
46
|
+
relationType: "BelongsToOne",
|
|
47
|
+
with: parentId,
|
|
48
|
+
onUpdate: "CASCADE",
|
|
49
|
+
onDelete: "CASCADE",
|
|
50
|
+
desc: parent.entity.title
|
|
51
|
+
}
|
|
52
|
+
] : [],
|
|
53
|
+
{
|
|
54
|
+
name: "created_at",
|
|
55
|
+
type: "timestamp",
|
|
56
|
+
desc: "등록일시",
|
|
57
|
+
dbDefault: "CURRENT_TIMESTAMP"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
indexes: [
|
|
61
|
+
...options.indexes ?? []
|
|
62
|
+
],
|
|
63
|
+
subsets: options.subsets ?? {
|
|
64
|
+
...parentId ? {} : {
|
|
65
|
+
A: [
|
|
66
|
+
"id",
|
|
67
|
+
"created_at"
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
enums: options.enums ?? {
|
|
72
|
+
...parentId ? {} : {
|
|
73
|
+
[`${names.capital}OrderBy`]: {
|
|
74
|
+
"id-desc": "ID최신순"
|
|
75
|
+
},
|
|
76
|
+
[`${names.capital}SearchField`]: {
|
|
77
|
+
id: "ID"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}).trim(),
|
|
82
|
+
importKeys: []
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudGl0eSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRpdHlcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCwgcGFyZW50TmFtZXM/OiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGAkeyhwYXJlbnROYW1lcyA/PyBuYW1lcykuZnN9LyR7bmFtZXMuZnN9LmVudGl0eS5qc29uYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tcImVudGl0eVwiXSkge1xuICAgIGNvbnN0IHsgZW50aXR5SWQsIHRpdGxlLCBwYXJlbnRJZCwgdGFibGUgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIGNvbnN0IHBhcmVudCA9ICgoKSA9PiB7XG4gICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChwYXJlbnRJZCksXG4gICAgICAgICAgZW50aXR5OiBFbnRpdHlNYW5hZ2VyLmdldChwYXJlbnRJZCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcywgcGFyZW50Py5uYW1lcyA/PyBuYW1lcyksXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkOiBlbnRpdHlJZCxcbiAgICAgICAgdGl0bGU6IHRpdGxlID8/IGVudGl0eUlkLFxuICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgdGFibGU6IHRhYmxlID8/IG5hbWVzLmZzUGx1cmFsLnJlcGxhY2UoL1xcLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCB1bnNpZ25lZDogdHJ1ZSwgZGVzYzogXCJJRFwiIH0sXG4gICAgICAgICAgICAgIC4uLihwYXJlbnRcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmVsYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXJlbnQubmFtZXMuY2FtZWwsXG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UeXBlOiBcIkJlbG9uZ3NUb09uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpdGg6IHBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZTogXCJDQVNDQURFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZGVzYzogcGFyZW50LmVudGl0eS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6IG9wdGlvbnMuc3Vic2V0cyA/PyB7XG4gICAgICAgICAgLi4uKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICBlbnVtczogb3B0aW9ucy5lbnVtcyA/PyB7XG4gICAgICAgICAgLi4uKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRW50aXR5TWFuYWdlciIsIlRlbXBsYXRlIiwiU29uYW11IiwiVGVtcGxhdGVfX2VudGl0eSIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInBhcmVudE5hbWVzIiwiZGlyIiwiY29uZmlnIiwiYXBpIiwidGFyZ2V0IiwicGF0aCIsImZzIiwicmVuZGVyIiwib3B0aW9ucyIsImVudGl0eUlkIiwidGl0bGUiLCJwYXJlbnRJZCIsInRhYmxlIiwiZ2V0TmFtZXNGcm9tSWQiLCJwYXJlbnQiLCJlbnRpdHkiLCJnZXQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImlkIiwiZnNQbHVyYWwiLCJyZXBsYWNlIiwicHJvcHMiLCJsZW5ndGgiLCJuYW1lIiwidHlwZSIsInVuc2lnbmVkIiwiZGVzYyIsImNhbWVsIiwicmVsYXRpb25UeXBlIiwid2l0aCIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJkYkRlZmF1bHQiLCJpbmRleGVzIiwic3Vic2V0cyIsIkEiLCJlbnVtcyIsImNhcGl0YWwiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsYUFBYSxRQUEyQixpQ0FBOEI7QUFDL0UsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLE1BQU0sUUFBUSxxQkFBWTtBQUVuQyxPQUFPLE1BQU1DLHlCQUF5QkY7SUFDcEMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFHLGlCQUFpQkMsS0FBd0IsRUFBRUMsV0FBK0IsRUFBRTtRQUMxRSxNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHTCxPQUFPTSxNQUFNLENBQUNDLEdBQUc7UUFFakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sR0FBRyxBQUFDTCxDQUFBQSxlQUFlRCxLQUFJLEVBQUdPLEVBQUUsQ0FBQyxDQUFDLEVBQUVQLE1BQU1PLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDOUQ7SUFDRjtJQUVBQyxPQUFPQyxPQUFrQyxFQUFFO1FBQ3pDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFLEdBQUdKO1FBQzdDLE1BQU1ULFFBQVFMLGNBQWNtQixjQUFjLENBQUNKO1FBRTNDLE1BQU1LLFNBQVMsQUFBQyxDQUFBO1lBQ2QsSUFBSUgsVUFBVTtnQkFDWixPQUFPO29CQUNMWixPQUFPTCxjQUFjbUIsY0FBYyxDQUFDRjtvQkFDcENJLFFBQVFyQixjQUFjc0IsR0FBRyxDQUFDTDtnQkFDNUI7WUFDRixPQUFPO2dCQUNMLE9BQU87WUFDVDtRQUNGLENBQUE7UUFFQSxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNiLGdCQUFnQixDQUFDQyxPQUFPZSxRQUFRZixTQUFTQSxNQUFNO1lBQ3ZEa0IsTUFBTUMsS0FBS0MsU0FBUyxDQUFDO2dCQUNuQkMsSUFBSVg7Z0JBQ0pDLE9BQU9BLFNBQVNEO2dCQUNoQkU7Z0JBQ0FDLE9BQU9BLFNBQVNiLE1BQU1zQixRQUFRLENBQUNDLE9BQU8sQ0FBQyxPQUFPO2dCQUM5Q0MsT0FBT2YsUUFBUWUsS0FBSyxFQUFFQyxTQUNsQmhCLFFBQVFlLEtBQUssR0FDYjtvQkFDRTt3QkFBRUUsTUFBTTt3QkFBTUMsTUFBTTt3QkFBV0MsVUFBVTt3QkFBTUMsTUFBTTtvQkFBSzt1QkFDdERkLFNBQ0E7d0JBQ0U7NEJBQ0VZLE1BQU07NEJBQ05ELE1BQU1YLE9BQU9mLEtBQUssQ0FBQzhCLEtBQUs7NEJBQ3hCQyxjQUFjOzRCQUNkQyxNQUFNcEI7NEJBQ05xQixVQUFVOzRCQUNWQyxVQUFVOzRCQUNWTCxNQUFNZCxPQUFPQyxNQUFNLENBQUNMLEtBQUs7d0JBQzNCO3FCQUNELEdBQ0QsRUFBRTtvQkFDTjt3QkFDRWUsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTkUsTUFBTTt3QkFDTk0sV0FBVztvQkFDYjtpQkFDRDtnQkFDTEMsU0FBUzt1QkFBSzNCLFFBQVEyQixPQUFPLElBQUksRUFBRTtpQkFBRTtnQkFDckNDLFNBQVM1QixRQUFRNEIsT0FBTyxJQUFJO29CQUMxQixHQUFJekIsV0FDQSxDQUFDLElBQ0Q7d0JBQ0UwQixHQUFHOzRCQUFDOzRCQUFNO3lCQUFhO29CQUN6QixDQUFDO2dCQUNQO2dCQUNBQyxPQUFPOUIsUUFBUThCLEtBQUssSUFBSTtvQkFDdEIsR0FBSTNCLFdBQ0EsQ0FBQyxJQUNEO3dCQUNFLENBQUMsR0FBR1osTUFBTXdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFOzRCQUMzQixXQUFXO3dCQUNiO3dCQUNBLENBQUMsR0FBR3hDLE1BQU13QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTs0QkFBRW5CLElBQUk7d0JBQUs7b0JBQzlDLENBQUM7Z0JBQ1A7WUFDRixHQUFHb0IsSUFBSTtZQUNQQyxZQUFZLEVBQUU7UUFDaEI7SUFDRjtBQUNGIn0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TemplateOptions } from "
|
|
2
|
-
import { Entity } from "
|
|
3
|
-
import { Template } from "
|
|
1
|
+
import { TemplateOptions } from "../../types/types";
|
|
2
|
+
import { Entity } from "../../entity/entity";
|
|
3
|
+
import { Template } from "../template";
|
|
4
4
|
export type SourceCode = {
|
|
5
5
|
label: string;
|
|
6
6
|
lines: string[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAShB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;IAyGvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsBrD,uBAAuB,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAM,EAAO,GACxB,UAAU;IAsCb,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAiD9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CAmDvD"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import * as _ from "lodash-es";
|
|
2
|
+
import { EntityManager } from "../../entity/entity-manager.js";
|
|
3
|
+
import { propNodeToZodTypeDef, zodTypeToZodCode } from "../../api/code-converters.js";
|
|
4
|
+
import { Template } from "../template.js";
|
|
5
|
+
import { nonNullable } from "../../utils/utils.js";
|
|
6
|
+
import { Sonamu } from "../../api/index.js";
|
|
7
|
+
export class Template__generated extends Template {
|
|
8
|
+
constructor(){
|
|
9
|
+
super("generated");
|
|
10
|
+
}
|
|
11
|
+
getTargetAndPath() {
|
|
12
|
+
const { dir } = Sonamu.config.api;
|
|
13
|
+
return {
|
|
14
|
+
target: `${dir}/src/application`,
|
|
15
|
+
path: `sonamu.generated.ts`
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
render({}) {
|
|
19
|
+
const entityIds = EntityManager.getAllIds();
|
|
20
|
+
const entities = entityIds.map((id)=>EntityManager.get(id));
|
|
21
|
+
// 전체 SourceCode 생성
|
|
22
|
+
const sourceCodes = entities.map((entity)=>{
|
|
23
|
+
return [
|
|
24
|
+
this.getEnumsSourceCode(entity),
|
|
25
|
+
this.getBaseSchemaSourceCode(entity),
|
|
26
|
+
this.getBaseListParamsSourceCode(entity),
|
|
27
|
+
this.getSubsetSourceCode(entity)
|
|
28
|
+
].filter(nonNullable);
|
|
29
|
+
}).flat();
|
|
30
|
+
// Sort
|
|
31
|
+
const LABEL_KEY_ORDER = [
|
|
32
|
+
"Enums",
|
|
33
|
+
"BaseSchema",
|
|
34
|
+
"BaseListParams",
|
|
35
|
+
"Subsets",
|
|
36
|
+
"SubsetQueries"
|
|
37
|
+
];
|
|
38
|
+
sourceCodes.sort((a, b)=>{
|
|
39
|
+
const [aKey] = a.label.split(":");
|
|
40
|
+
const [bKey] = b.label.split(":");
|
|
41
|
+
const aIndex = LABEL_KEY_ORDER.indexOf(aKey);
|
|
42
|
+
const bIndex = LABEL_KEY_ORDER.indexOf(bKey);
|
|
43
|
+
if (aIndex > bIndex) {
|
|
44
|
+
return 1;
|
|
45
|
+
} else if (aIndex < bIndex) {
|
|
46
|
+
return -1;
|
|
47
|
+
} else {
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const sourceCode = sourceCodes.reduce((result, ts)=>{
|
|
52
|
+
if (ts === null) {
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
lines: [
|
|
57
|
+
...result.lines,
|
|
58
|
+
`// ${ts.label}`,
|
|
59
|
+
...ts.lines,
|
|
60
|
+
""
|
|
61
|
+
],
|
|
62
|
+
importKeys: _.uniq([
|
|
63
|
+
...result.importKeys,
|
|
64
|
+
...ts.importKeys
|
|
65
|
+
].sort())
|
|
66
|
+
};
|
|
67
|
+
}, {
|
|
68
|
+
lines: [],
|
|
69
|
+
importKeys: []
|
|
70
|
+
});
|
|
71
|
+
// .types.ts의 타입을 참조하는 경우 순환참조(상호참조)가 발생하므로 타입을 가져와 인라인 처리
|
|
72
|
+
const allTypeKeys = entities.map((entity)=>Object.keys(entity.types)).flat();
|
|
73
|
+
const cdImportKeys = sourceCode.importKeys.filter((importKey)=>allTypeKeys.includes(importKey));
|
|
74
|
+
if (cdImportKeys.length > 0) {
|
|
75
|
+
const customScalarLines = cdImportKeys.map((importKey)=>{
|
|
76
|
+
const entity = entities.find((entity)=>entity.types[importKey]);
|
|
77
|
+
if (!entity) {
|
|
78
|
+
throw new Error(`ZodType not found ${importKey}`);
|
|
79
|
+
}
|
|
80
|
+
const zodType = entity.types[importKey];
|
|
81
|
+
return [
|
|
82
|
+
`// CustomScalar: ${importKey}`,
|
|
83
|
+
`const ${importKey} = ${zodTypeToZodCode(zodType)};`,
|
|
84
|
+
`type ${importKey} = z.infer<typeof ${importKey}>`,
|
|
85
|
+
""
|
|
86
|
+
];
|
|
87
|
+
}).flat();
|
|
88
|
+
sourceCode.lines = [
|
|
89
|
+
...customScalarLines,
|
|
90
|
+
...sourceCode.lines
|
|
91
|
+
];
|
|
92
|
+
sourceCode.importKeys = sourceCode.importKeys.filter((importKey)=>!cdImportKeys.includes(importKey));
|
|
93
|
+
}
|
|
94
|
+
const body = sourceCode.lines.join("\n");
|
|
95
|
+
// import
|
|
96
|
+
const sonamuImports = [
|
|
97
|
+
"zArrayable",
|
|
98
|
+
"SQLDateTimeString",
|
|
99
|
+
"SubsetQuery",
|
|
100
|
+
"SonamuQueryMode"
|
|
101
|
+
].filter((mod)=>body.includes(mod));
|
|
102
|
+
return {
|
|
103
|
+
...this.getTargetAndPath(),
|
|
104
|
+
body,
|
|
105
|
+
importKeys: sourceCode.importKeys,
|
|
106
|
+
customHeaders: [
|
|
107
|
+
`import { z } from 'zod';`,
|
|
108
|
+
`import { ${sonamuImports.join(",")} } from "sonamu";`
|
|
109
|
+
]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
getEnumsSourceCode(entity) {
|
|
113
|
+
if (Object.keys(entity.enumLabels).length === 0) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
label: `Enums: ${entity.id}`,
|
|
118
|
+
lines: [
|
|
119
|
+
...Object.entries(entity.enumLabels).filter(([_, enumLabel])=>Object.keys(enumLabel).length > 0).map(([enumId, enumLabel])=>[
|
|
120
|
+
`export const ${enumId} = z.enum([${Object.keys(enumLabel).map((el)=>`"${el}"`)}]).describe("${enumId}");`,
|
|
121
|
+
`export type ${enumId} = z.infer<typeof ${enumId}>`,
|
|
122
|
+
`export const ${enumId}Label = ${JSON.stringify(enumLabel)}`
|
|
123
|
+
]).flat()
|
|
124
|
+
],
|
|
125
|
+
importKeys: []
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
getBaseSchemaSourceCode(entity, importKeys = []) {
|
|
129
|
+
const schemaName = `${entity.names.module}BaseSchema`;
|
|
130
|
+
const propNode = {
|
|
131
|
+
nodeType: "object",
|
|
132
|
+
children: entity.props.map((prop)=>{
|
|
133
|
+
return {
|
|
134
|
+
nodeType: "plain",
|
|
135
|
+
prop
|
|
136
|
+
};
|
|
137
|
+
})
|
|
138
|
+
};
|
|
139
|
+
const schemaBody = propNodeToZodTypeDef(propNode, importKeys);
|
|
140
|
+
// fulltext index에 포함된 컬럼들 추출
|
|
141
|
+
const fulltextColumns = _.uniq(entity.indexes.filter((index)=>index.type === "fulltext").flatMap((index)=>index.columns));
|
|
142
|
+
const lines = [
|
|
143
|
+
`export const ${schemaName} = ${schemaBody}`,
|
|
144
|
+
`export type ${schemaName} = z.infer<typeof ${schemaName}>` + (fulltextColumns.length > 0 ? ` & { readonly __fulltext__: readonly [${fulltextColumns.map((col)=>`"${col}"`).join(", ")}] }` : "")
|
|
145
|
+
];
|
|
146
|
+
return {
|
|
147
|
+
label: `BaseSchema: ${entity.id}`,
|
|
148
|
+
importKeys,
|
|
149
|
+
lines
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
getBaseListParamsSourceCode(entity) {
|
|
153
|
+
// Prop 없는 MD인 경우 생성 제외
|
|
154
|
+
if (entity.props.length === 0) {
|
|
155
|
+
return null;
|
|
156
|
+
} else if (entity.parentId !== undefined) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const schemaName = `${entity.names.module}BaseListParams`;
|
|
160
|
+
const filterProps = entity.props.filter((prop)=>prop.toFilter === true);
|
|
161
|
+
const propNodes = filterProps.map((prop)=>{
|
|
162
|
+
return {
|
|
163
|
+
nodeType: "plain",
|
|
164
|
+
prop,
|
|
165
|
+
children: []
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
const importKeys = [];
|
|
169
|
+
const filterBody = propNodes.map((propNode)=>propNodeToZodTypeDef(propNode, importKeys)).join("\n");
|
|
170
|
+
const schemaBody = `
|
|
171
|
+
z.object({
|
|
172
|
+
num: z.number().int().nonnegative(),
|
|
173
|
+
page: z.number().int().min(1),
|
|
174
|
+
search: ${entity.id}SearchField,
|
|
175
|
+
keyword: z.string(),
|
|
176
|
+
orderBy: ${entity.id}OrderBy,
|
|
177
|
+
queryMode: SonamuQueryMode,
|
|
178
|
+
id: zArrayable(z.number().int().positive()),${filterBody}
|
|
179
|
+
}).partial();
|
|
180
|
+
`.trim();
|
|
181
|
+
const lines = [
|
|
182
|
+
`export const ${schemaName} = ${schemaBody}`,
|
|
183
|
+
`export type ${schemaName} = z.infer<typeof ${schemaName}>`
|
|
184
|
+
];
|
|
185
|
+
return {
|
|
186
|
+
label: `BaseListParams: ${entity.id}`,
|
|
187
|
+
importKeys,
|
|
188
|
+
lines
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
getSubsetSourceCode(entity) {
|
|
192
|
+
if (Object.keys(entity.subsets).length == 0) {
|
|
193
|
+
return null;
|
|
194
|
+
} else if (entity.parentId !== undefined) {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
const subsetKeys = Object.keys(entity.subsets);
|
|
198
|
+
const importKeys = [];
|
|
199
|
+
const lines = [
|
|
200
|
+
...subsetKeys.map((subsetKey)=>{
|
|
201
|
+
// 서브셋에서 FieldExpr[] 가져옴
|
|
202
|
+
const fieldExprs = entity.subsets[subsetKey];
|
|
203
|
+
// FieldExpr[]로 EntityPropNode[] 가져옴
|
|
204
|
+
const propNodes = entity.fieldExprsToPropNodes(fieldExprs);
|
|
205
|
+
const schemaName = `${entity.names.module}Subset${subsetKey}`;
|
|
206
|
+
const propNode = {
|
|
207
|
+
nodeType: "object",
|
|
208
|
+
children: propNodes
|
|
209
|
+
};
|
|
210
|
+
// EntityPropNode[]로 ZodTypeDef(string)을 가져옴
|
|
211
|
+
const body = propNodeToZodTypeDef(propNode, importKeys);
|
|
212
|
+
return [
|
|
213
|
+
`export const ${schemaName} = ${body}`,
|
|
214
|
+
`export type ${schemaName} = z.infer<typeof ${schemaName}>`
|
|
215
|
+
];
|
|
216
|
+
}).flat(),
|
|
217
|
+
`export type ${entity.names.module}SubsetMapping = {`,
|
|
218
|
+
...subsetKeys.map((subsetKey)=>` ${subsetKey}: ${entity.names.module}Subset${subsetKey};`),
|
|
219
|
+
"}",
|
|
220
|
+
`export const ${entity.names.module}SubsetKey = z.enum([${subsetKeys.map((k)=>`"${k}"`).join(",")}]);`,
|
|
221
|
+
`export type ${entity.names.module}SubsetKey = z.infer<typeof ${entity.names.module}SubsetKey>`,
|
|
222
|
+
""
|
|
223
|
+
];
|
|
224
|
+
return {
|
|
225
|
+
label: `Subsets: ${entity.id}`,
|
|
226
|
+
lines,
|
|
227
|
+
importKeys: _.uniq(importKeys)
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eVByb3BOb2RlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBwcm9wTm9kZVRvWm9kVHlwZURlZiwgem9kVHlwZVRvWm9kQ29kZSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJnZW5lcmF0ZWRcIl0pIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyDsoITssrQgU291cmNlQ29kZSDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlcyA9IGVudGl0aWVzXG4gICAgICAubWFwKChlbnRpdHkpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB0aGlzLmdldEVudW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgICB0aGlzLmdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICAgIHRoaXMuZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgICB9KVxuICAgICAgLmZsYXQoKTtcblxuICAgIC8vIFNvcnRcbiAgICBjb25zdCBMQUJFTF9LRVlfT1JERVIgPSBbXG4gICAgICBcIkVudW1zXCIsXG4gICAgICBcIkJhc2VTY2hlbWFcIixcbiAgICAgIFwiQmFzZUxpc3RQYXJhbXNcIixcbiAgICAgIFwiU3Vic2V0c1wiLFxuICAgICAgXCJTdWJzZXRRdWVyaWVzXCIsXG4gICAgXTtcbiAgICBzb3VyY2VDb2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBbYUtleV0gPSBhLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IFtiS2V5XSA9IGIubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgYUluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYUtleSk7XG4gICAgICBjb25zdCBiSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihiS2V5KTtcbiAgICAgIGlmIChhSW5kZXggPiBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQhLmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogXy51bmlxKFsuLi5yZXN1bHQhLmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdLnNvcnQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj5cbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzXG4gICAgICAubWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpXG4gICAgICAuZmxhdCgpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSlcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXNcbiAgICAgICAgLm1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXMuZmluZCgoZW50aXR5KSA9PiBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XSk7XG4gICAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XSE7XG5cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSl9O2AsXG4gICAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZsYXQoKTtcbiAgICAgIHNvdXJjZUNvZGUubGluZXMgPSBbLi4uY3VzdG9tU2NhbGFyTGluZXMsIC4uLnNvdXJjZUNvZGUubGluZXNdO1xuICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcihcbiAgICAgICAgKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBpbXBvcnRcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgICAubWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW51bUlkfSA9IHouZW51bShbJHtPYmplY3Qua2V5cyhlbnVtTGFiZWwpLm1hcChcbiAgICAgICAgICAgICAgKGVsKSA9PiBgXCIke2VsfVwiYFxuICAgICAgICAgICAgKX1dKS5kZXNjcmliZShcIiR7ZW51bUlkfVwiKTtgLFxuICAgICAgICAgICAgYGV4cG9ydCB0eXBlICR7ZW51bUlkfSA9IHouaW5mZXI8dHlwZW9mICR7ZW51bUlkfT5gLFxuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX1gLFxuICAgICAgICAgIF0pXG4gICAgICAgICAgLmZsYXQoKSxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXVxuICApOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1ucyA9IF8udW5pcShcbiAgICAgIGVudGl0eS5pbmRleGVzXG4gICAgICAgIC5maWx0ZXIoKGluZGV4KSA9PiBpbmRleC50eXBlID09PSBcImZ1bGx0ZXh0XCIpXG4gICAgICAgIC5mbGF0TWFwKChpbmRleCkgPT4gaW5kZXguY29sdW1ucylcbiAgICApO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gICtcbiAgICAgICAgKGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBgICYgeyByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dIH1gXG4gICAgICAgICAgOiBcIlwiKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBgXG56Lm9iamVjdCh7XG4gIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgc2VhcmNoOiAke2VudGl0eS5pZH1TZWFyY2hGaWVsZCxcbiAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgb3JkZXJCeTogJHtlbnRpdHkuaWR9T3JkZXJCeSxcbiAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gIGlkOiB6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSksJHtmaWx0ZXJCb2R5fVxufSkucGFydGlhbCgpO1xuYC50cmltKCk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX1gLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VMaXN0UGFyYW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cykubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAuLi5zdWJzZXRLZXlzXG4gICAgICAgIC5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgICBjb25zdCBmaWVsZEV4cHJzID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcblxuICAgICAgICAgIC8vIEZpZWxkRXhwcltd66GcIEVudGl0eVByb3BOb2RlW10g6rCA7KC47Ji0XG4gICAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX1gO1xuICAgICAgICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgICAgY29uc3QgYm9keSA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHl9YCxcbiAgICAgICAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gLFxuICAgICAgICAgIF07XG4gICAgICAgIH0pXG4gICAgICAgIC5mbGF0KCksXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldE1hcHBpbmcgPSB7YCxcbiAgICAgIC4uLnN1YnNldEtleXMubWFwKFxuICAgICAgICAoc3Vic2V0S2V5KSA9PlxuICAgICAgICAgIGAgICR7c3Vic2V0S2V5fTogJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fTtgXG4gICAgICApLFxuICAgICAgXCJ9XCIsXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmVudW0oWyR7c3Vic2V0S2V5c1xuICAgICAgICAubWFwKChrKSA9PiBgXCIke2t9XCJgKVxuICAgICAgICAuam9pbihcIixcIil9XSk7YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleT5gLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgU3Vic2V0czogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogXy51bmlxKGltcG9ydEtleXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfIiwiRW50aXR5TWFuYWdlciIsInByb3BOb2RlVG9ab2RUeXBlRGVmIiwiem9kVHlwZVRvWm9kQ29kZSIsIlRlbXBsYXRlIiwibm9uTnVsbGFibGUiLCJTb25hbXUiLCJUZW1wbGF0ZV9fZ2VuZXJhdGVkIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsImRpciIsImNvbmZpZyIsImFwaSIsInRhcmdldCIsInBhdGgiLCJyZW5kZXIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdGllcyIsIm1hcCIsImlkIiwiZ2V0Iiwic291cmNlQ29kZXMiLCJlbnRpdHkiLCJnZXRFbnVtc1NvdXJjZUNvZGUiLCJnZXRCYXNlU2NoZW1hU291cmNlQ29kZSIsImdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZSIsImdldFN1YnNldFNvdXJjZUNvZGUiLCJmaWx0ZXIiLCJmbGF0IiwiTEFCRUxfS0VZX09SREVSIiwic29ydCIsImEiLCJiIiwiYUtleSIsImxhYmVsIiwic3BsaXQiLCJiS2V5IiwiYUluZGV4IiwiaW5kZXhPZiIsImJJbmRleCIsInNvdXJjZUNvZGUiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ0cyIsImxpbmVzIiwiaW1wb3J0S2V5cyIsInVuaXEiLCJhbGxUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJ0eXBlcyIsImNkSW1wb3J0S2V5cyIsImltcG9ydEtleSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiY3VzdG9tU2NhbGFyTGluZXMiLCJmaW5kIiwiRXJyb3IiLCJ6b2RUeXBlIiwiYm9keSIsImpvaW4iLCJzb25hbXVJbXBvcnRzIiwibW9kIiwiY3VzdG9tSGVhZGVycyIsImVudW1MYWJlbHMiLCJlbnRyaWVzIiwiZW51bUxhYmVsIiwiZW51bUlkIiwiZWwiLCJKU09OIiwic3RyaW5naWZ5Iiwic2NoZW1hTmFtZSIsIm5hbWVzIiwibW9kdWxlIiwicHJvcE5vZGUiLCJub2RlVHlwZSIsImNoaWxkcmVuIiwicHJvcHMiLCJwcm9wIiwic2NoZW1hQm9keSIsImZ1bGx0ZXh0Q29sdW1ucyIsImluZGV4ZXMiLCJpbmRleCIsInR5cGUiLCJmbGF0TWFwIiwiY29sdW1ucyIsImNvbCIsInBhcmVudElkIiwidW5kZWZpbmVkIiwiZmlsdGVyUHJvcHMiLCJ0b0ZpbHRlciIsInByb3BOb2RlcyIsImZpbHRlckJvZHkiLCJ0cmltIiwic3Vic2V0cyIsInN1YnNldEtleXMiLCJzdWJzZXRLZXkiLCJmaWVsZEV4cHJzIiwiZmllbGRFeHByc1RvUHJvcE5vZGVzIiwiayJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWUEsT0FBTyxZQUFZO0FBRS9CLFNBQVNDLGFBQWEsUUFBUSxpQ0FBOEI7QUFHNUQsU0FBU0Msb0JBQW9CLEVBQUVDLGdCQUFnQixRQUFRLCtCQUE0QjtBQUNuRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFDdkMsU0FBU0MsV0FBVyxRQUFRLHVCQUFvQjtBQUNoRCxTQUFTQyxNQUFNLFFBQVEscUJBQVk7QUFPbkMsT0FBTyxNQUFNQyw0QkFBNEJIO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBSSxtQkFBbUI7UUFDakIsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR0gsT0FBT0ksTUFBTSxDQUFDQyxHQUFHO1FBRWpDLE9BQU87WUFDTEMsUUFBUSxHQUFHSCxJQUFJLGdCQUFnQixDQUFDO1lBQ2hDSSxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDN0I7SUFDRjtJQUVBQyxPQUFPLEVBQWdDLEVBQUU7UUFDdkMsTUFBTUMsWUFBWWQsY0FBY2UsU0FBUztRQUN6QyxNQUFNQyxXQUFXRixVQUFVRyxHQUFHLENBQUMsQ0FBQ0MsS0FBT2xCLGNBQWNtQixHQUFHLENBQUNEO1FBRXpELG1CQUFtQjtRQUNuQixNQUFNRSxjQUFjSixTQUNqQkMsR0FBRyxDQUFDLENBQUNJO1lBQ0osT0FBTztnQkFDTCxJQUFJLENBQUNDLGtCQUFrQixDQUFDRDtnQkFDeEIsSUFBSSxDQUFDRSx1QkFBdUIsQ0FBQ0Y7Z0JBQzdCLElBQUksQ0FBQ0csMkJBQTJCLENBQUNIO2dCQUNqQyxJQUFJLENBQUNJLG1CQUFtQixDQUFDSjthQUMxQixDQUFDSyxNQUFNLENBQUN0QjtRQUNYLEdBQ0N1QixJQUFJO1FBRVAsT0FBTztRQUNQLE1BQU1DLGtCQUFrQjtZQUN0QjtZQUNBO1lBQ0E7WUFDQTtZQUNBO1NBQ0Q7UUFDRFIsWUFBWVMsSUFBSSxDQUFDLENBQUNDLEdBQUdDO1lBQ25CLE1BQU0sQ0FBQ0MsS0FBSyxHQUFHRixFQUFFRyxLQUFLLENBQUNDLEtBQUssQ0FBQztZQUM3QixNQUFNLENBQUNDLEtBQUssR0FBR0osRUFBRUUsS0FBSyxDQUFDQyxLQUFLLENBQUM7WUFDN0IsTUFBTUUsU0FBU1IsZ0JBQWdCUyxPQUFPLENBQUNMO1lBQ3ZDLE1BQU1NLFNBQVNWLGdCQUFnQlMsT0FBTyxDQUFDRjtZQUN2QyxJQUFJQyxTQUFTRSxRQUFRO2dCQUNuQixPQUFPO1lBQ1QsT0FBTyxJQUFJRixTQUFTRSxRQUFRO2dCQUMxQixPQUFPLENBQUM7WUFDVixPQUFPO2dCQUNMLE9BQU87WUFDVDtRQUNGO1FBRUEsTUFBTUMsYUFBYW5CLFlBQVlvQixNQUFNLENBQ25DLENBQUNDLFFBQVFDO1lBQ1AsSUFBSUEsT0FBTyxNQUFNO2dCQUNmLE9BQU9EO1lBQ1Q7WUFDQSxPQUFPO2dCQUNMRSxPQUFPO3VCQUFJRixPQUFRRSxLQUFLO29CQUFFLENBQUMsR0FBRyxFQUFFRCxHQUFHVCxLQUFLLEVBQUU7dUJBQUtTLEdBQUdDLEtBQUs7b0JBQUU7aUJBQUc7Z0JBQzVEQyxZQUFZN0MsRUFBRThDLElBQUksQ0FBQzt1QkFBSUosT0FBUUcsVUFBVTt1QkFBS0YsR0FBR0UsVUFBVTtpQkFBQyxDQUFDZixJQUFJO1lBQ25FO1FBQ0YsR0FDQTtZQUNFYyxPQUFPLEVBQUU7WUFDVEMsWUFBWSxFQUFFO1FBQ2hCO1FBR0YsMERBQTBEO1FBQzFELE1BQU1FLGNBQWM5QixTQUNqQkMsR0FBRyxDQUFDLENBQUNJLFNBQVcwQixPQUFPQyxJQUFJLENBQUMzQixPQUFPNEIsS0FBSyxHQUN4Q3RCLElBQUk7UUFDUCxNQUFNdUIsZUFBZVgsV0FBV0ssVUFBVSxDQUFDbEIsTUFBTSxDQUFDLENBQUN5QixZQUNqREwsWUFBWU0sUUFBUSxDQUFDRDtRQUV2QixJQUFJRCxhQUFhRyxNQUFNLEdBQUcsR0FBRztZQUMzQixNQUFNQyxvQkFBb0JKLGFBQ3ZCakMsR0FBRyxDQUFDLENBQUNrQztnQkFDSixNQUFNOUIsU0FBU0wsU0FBU3VDLElBQUksQ0FBQyxDQUFDbEMsU0FBV0EsT0FBTzRCLEtBQUssQ0FBQ0UsVUFBVTtnQkFDaEUsSUFBSSxDQUFDOUIsUUFBUTtvQkFDWCxNQUFNLElBQUltQyxNQUFNLENBQUMsa0JBQWtCLEVBQUVMLFdBQVc7Z0JBQ2xEO2dCQUNBLE1BQU1NLFVBQVVwQyxPQUFPNEIsS0FBSyxDQUFDRSxVQUFVO2dCQUV2QyxPQUFPO29CQUNMLENBQUMsaUJBQWlCLEVBQUVBLFdBQVc7b0JBQy9CLENBQUMsTUFBTSxFQUFFQSxVQUFVLEdBQUcsRUFBRWpELGlCQUFpQnVELFNBQVMsQ0FBQyxDQUFDO29CQUNwRCxDQUFDLEtBQUssRUFBRU4sVUFBVSxrQkFBa0IsRUFBRUEsVUFBVSxDQUFDLENBQUM7b0JBQ2xEO2lCQUNEO1lBQ0gsR0FDQ3hCLElBQUk7WUFDUFksV0FBV0ksS0FBSyxHQUFHO21CQUFJVzttQkFBc0JmLFdBQVdJLEtBQUs7YUFBQztZQUM5REosV0FBV0ssVUFBVSxHQUFHTCxXQUFXSyxVQUFVLENBQUNsQixNQUFNLENBQ2xELENBQUN5QixZQUFjLENBQUNELGFBQWFFLFFBQVEsQ0FBQ0Q7UUFFMUM7UUFFQSxNQUFNTyxPQUFPbkIsV0FBV0ksS0FBSyxDQUFDZ0IsSUFBSSxDQUFDO1FBRW5DLFNBQVM7UUFDVCxNQUFNQyxnQkFBZ0I7WUFDcEI7WUFDQTtZQUNBO1lBQ0E7U0FDRCxDQUFDbEMsTUFBTSxDQUFDLENBQUNtQyxNQUFRSCxLQUFLTixRQUFRLENBQUNTO1FBRWhDLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQ3RELGdCQUFnQixFQUFFO1lBQzFCbUQ7WUFDQWQsWUFBWUwsV0FBV0ssVUFBVTtZQUNqQ2tCLGVBQWU7Z0JBQ2IsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDMUIsQ0FBQyxTQUFTLEVBQUVGLGNBQWNELElBQUksQ0FBQyxLQUFLLGlCQUFpQixDQUFDO2FBQ3ZEO1FBQ0g7SUFDRjtJQUVBckMsbUJBQW1CRCxNQUFjLEVBQXFCO1FBQ3BELElBQUkwQixPQUFPQyxJQUFJLENBQUMzQixPQUFPMEMsVUFBVSxFQUFFVixNQUFNLEtBQUssR0FBRztZQUMvQyxPQUFPO1FBQ1Q7UUFDQSxPQUFPO1lBQ0xwQixPQUFPLENBQUMsT0FBTyxFQUFFWixPQUFPSCxFQUFFLEVBQUU7WUFDNUJ5QixPQUFPO21CQUNGSSxPQUFPaUIsT0FBTyxDQUFDM0MsT0FBTzBDLFVBQVUsRUFDaENyQyxNQUFNLENBQUMsQ0FBQyxDQUFDM0IsR0FBR2tFLFVBQVUsR0FBS2xCLE9BQU9DLElBQUksQ0FBQ2lCLFdBQVdaLE1BQU0sR0FBRyxHQUMzRHBDLEdBQUcsQ0FBQyxDQUFDLENBQUNpRCxRQUFRRCxVQUFVLEdBQUs7d0JBQzVCLENBQUMsYUFBYSxFQUFFQyxPQUFPLFdBQVcsRUFBRW5CLE9BQU9DLElBQUksQ0FBQ2lCLFdBQVdoRCxHQUFHLENBQzVELENBQUNrRCxLQUFPLENBQUMsQ0FBQyxFQUFFQSxHQUFHLENBQUMsQ0FBQyxFQUNqQixhQUFhLEVBQUVELE9BQU8sR0FBRyxDQUFDO3dCQUM1QixDQUFDLFlBQVksRUFBRUEsT0FBTyxrQkFBa0IsRUFBRUEsT0FBTyxDQUFDLENBQUM7d0JBQ25ELENBQUMsYUFBYSxFQUFFQSxPQUFPLFFBQVEsRUFBRUUsS0FBS0MsU0FBUyxDQUFDSixZQUFZO3FCQUM3RCxFQUNBdEMsSUFBSTthQUNSO1lBQ0RpQixZQUFZLEVBQUU7UUFDaEI7SUFDRjtJQUVBckIsd0JBQ0VGLE1BQWMsRUFDZHVCLGFBQXVCLEVBQUUsRUFDYjtRQUNaLE1BQU0wQixhQUFhLEdBQUdqRCxPQUFPa0QsS0FBSyxDQUFDQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3JELE1BQU1DLFdBQTJCO1lBQy9CQyxVQUFVO1lBQ1ZDLFVBQVV0RCxPQUFPdUQsS0FBSyxDQUFDM0QsR0FBRyxDQUFDLENBQUM0RDtnQkFDMUIsT0FBTztvQkFDTEgsVUFBVTtvQkFDVkc7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsTUFBTUMsYUFBYTdFLHFCQUFxQndFLFVBQVU3QjtRQUVsRCw2QkFBNkI7UUFDN0IsTUFBTW1DLGtCQUFrQmhGLEVBQUU4QyxJQUFJLENBQzVCeEIsT0FBTzJELE9BQU8sQ0FDWHRELE1BQU0sQ0FBQyxDQUFDdUQsUUFBVUEsTUFBTUMsSUFBSSxLQUFLLFlBQ2pDQyxPQUFPLENBQUMsQ0FBQ0YsUUFBVUEsTUFBTUcsT0FBTztRQUdyQyxNQUFNekMsUUFBUTtZQUNaLENBQUMsYUFBYSxFQUFFMkIsV0FBVyxHQUFHLEVBQUVRLFlBQVk7WUFDNUMsQ0FBQyxZQUFZLEVBQUVSLFdBQVcsa0JBQWtCLEVBQUVBLFdBQVcsQ0FBQyxDQUFDLEdBQ3hEUyxDQUFBQSxnQkFBZ0IxQixNQUFNLEdBQUcsSUFDdEIsQ0FBQyxzQ0FBc0MsRUFBRTBCLGdCQUN0QzlELEdBQUcsQ0FBQyxDQUFDb0UsTUFBUSxDQUFDLENBQUMsRUFBRUEsSUFBSSxDQUFDLENBQUMsRUFDdkIxQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FDbEIsRUFBQztTQUNSO1FBRUQsT0FBTztZQUNMMUIsT0FBTyxDQUFDLFlBQVksRUFBRVosT0FBT0gsRUFBRSxFQUFFO1lBQ2pDMEI7WUFDQUQ7UUFDRjtJQUNGO0lBRUFuQiw0QkFBNEJILE1BQWMsRUFBcUI7UUFDN0QsdUJBQXVCO1FBQ3ZCLElBQUlBLE9BQU91RCxLQUFLLENBQUN2QixNQUFNLEtBQUssR0FBRztZQUM3QixPQUFPO1FBQ1QsT0FBTyxJQUFJaEMsT0FBT2lFLFFBQVEsS0FBS0MsV0FBVztZQUN4QyxPQUFPO1FBQ1Q7UUFFQSxNQUFNakIsYUFBYSxHQUFHakQsT0FBT2tELEtBQUssQ0FBQ0MsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUV6RCxNQUFNZ0IsY0FBY25FLE9BQU91RCxLQUFLLENBQUNsRCxNQUFNLENBQUMsQ0FBQ21ELE9BQVNBLEtBQUtZLFFBQVEsS0FBSztRQUVwRSxNQUFNQyxZQUE4QkYsWUFBWXZFLEdBQUcsQ0FBQyxDQUFDNEQ7WUFDbkQsT0FBTztnQkFDTEgsVUFBVTtnQkFDVkc7Z0JBQ0FGLFVBQVUsRUFBRTtZQUNkO1FBQ0Y7UUFFQSxNQUFNL0IsYUFBdUIsRUFBRTtRQUMvQixNQUFNK0MsYUFBYUQsVUFDaEJ6RSxHQUFHLENBQUMsQ0FBQ3dELFdBQWF4RSxxQkFBcUJ3RSxVQUFVN0IsYUFDakRlLElBQUksQ0FBQztRQUVSLE1BQU1tQixhQUFhLENBQUM7Ozs7VUFJZCxFQUFFekQsT0FBT0gsRUFBRSxDQUFDOztXQUVYLEVBQUVHLE9BQU9ILEVBQUUsQ0FBQzs7OENBRXVCLEVBQUV5RSxXQUFXOztBQUUzRCxDQUFDLENBQUNDLElBQUk7UUFFRixNQUFNakQsUUFBUTtZQUNaLENBQUMsYUFBYSxFQUFFMkIsV0FBVyxHQUFHLEVBQUVRLFlBQVk7WUFDNUMsQ0FBQyxZQUFZLEVBQUVSLFdBQVcsa0JBQWtCLEVBQUVBLFdBQVcsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsT0FBTztZQUNMckMsT0FBTyxDQUFDLGdCQUFnQixFQUFFWixPQUFPSCxFQUFFLEVBQUU7WUFDckMwQjtZQUNBRDtRQUNGO0lBQ0Y7SUFFQWxCLG9CQUFvQkosTUFBYyxFQUFxQjtRQUNyRCxJQUFJMEIsT0FBT0MsSUFBSSxDQUFDM0IsT0FBT3dFLE9BQU8sRUFBRXhDLE1BQU0sSUFBSSxHQUFHO1lBQzNDLE9BQU87UUFDVCxPQUFPLElBQUloQyxPQUFPaUUsUUFBUSxLQUFLQyxXQUFXO1lBQ3hDLE9BQU87UUFDVDtRQUVBLE1BQU1PLGFBQWEvQyxPQUFPQyxJQUFJLENBQUMzQixPQUFPd0UsT0FBTztRQUM3QyxNQUFNakQsYUFBdUIsRUFBRTtRQUMvQixNQUFNRCxRQUFrQjtlQUNuQm1ELFdBQ0E3RSxHQUFHLENBQUMsQ0FBQzhFO2dCQUNKLHdCQUF3QjtnQkFDeEIsTUFBTUMsYUFBYTNFLE9BQU93RSxPQUFPLENBQUNFLFVBQVU7Z0JBRTVDLG9DQUFvQztnQkFDcEMsTUFBTUwsWUFBWXJFLE9BQU80RSxxQkFBcUIsQ0FBQ0Q7Z0JBQy9DLE1BQU0xQixhQUFhLEdBQUdqRCxPQUFPa0QsS0FBSyxDQUFDQyxNQUFNLENBQUMsTUFBTSxFQUFFdUIsV0FBVztnQkFDN0QsTUFBTXRCLFdBQTJCO29CQUMvQkMsVUFBVTtvQkFDVkMsVUFBVWU7Z0JBQ1o7Z0JBRUEsNENBQTRDO2dCQUM1QyxNQUFNaEMsT0FBT3pELHFCQUFxQndFLFVBQVU3QjtnQkFFNUMsT0FBTztvQkFDTCxDQUFDLGFBQWEsRUFBRTBCLFdBQVcsR0FBRyxFQUFFWixNQUFNO29CQUN0QyxDQUFDLFlBQVksRUFBRVksV0FBVyxrQkFBa0IsRUFBRUEsV0FBVyxDQUFDLENBQUM7aUJBQzVEO1lBQ0gsR0FDQzNDLElBQUk7WUFDUCxDQUFDLFlBQVksRUFBRU4sT0FBT2tELEtBQUssQ0FBQ0MsTUFBTSxDQUFDLGlCQUFpQixDQUFDO2VBQ2xEc0IsV0FBVzdFLEdBQUcsQ0FDZixDQUFDOEUsWUFDQyxDQUFDLEVBQUUsRUFBRUEsVUFBVSxFQUFFLEVBQUUxRSxPQUFPa0QsS0FBSyxDQUFDQyxNQUFNLENBQUMsTUFBTSxFQUFFdUIsVUFBVSxDQUFDLENBQUM7WUFFL0Q7WUFDQSxDQUFDLGFBQWEsRUFBRTFFLE9BQU9rRCxLQUFLLENBQUNDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRXNCLFdBQ3ZEN0UsR0FBRyxDQUFDLENBQUNpRixJQUFNLENBQUMsQ0FBQyxFQUFFQSxFQUFFLENBQUMsQ0FBQyxFQUNuQnZDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztZQUNqQixDQUFDLFlBQVksRUFBRXRDLE9BQU9rRCxLQUFLLENBQUNDLE1BQU0sQ0FBQywyQkFBMkIsRUFBRW5ELE9BQU9rRCxLQUFLLENBQUNDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDL0Y7U0FDRDtRQUVELE9BQU87WUFDTHZDLE9BQU8sQ0FBQyxTQUFTLEVBQUVaLE9BQU9ILEVBQUUsRUFBRTtZQUM5QnlCO1lBQ0FDLFlBQVk3QyxFQUFFOEMsSUFBSSxDQUFDRDtRQUNyQjtJQUNGO0FBQ0YifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { TemplateOptions } from "
|
|
3
|
-
import { ExtendedApi } from "
|
|
4
|
-
import { Template } from "
|
|
2
|
+
import { TemplateOptions } from "../../types/types";
|
|
3
|
+
import { ExtendedApi } from "../../api/decorators";
|
|
4
|
+
import { Template } from "../template";
|
|
5
5
|
export declare class Template__generated_http extends Template {
|
|
6
6
|
constructor();
|
|
7
7
|
getTargetAndPath(): {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated_http.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated_http.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,qBAAa,wBAAyB,SAAQ,QAAQ;;IAKpD,gBAAgB;;;;IASV,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC;;;;;;IAwDlD,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAoFvE,gBAAgB,CACd,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KAAE,GACnD;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;CAc9B"}
|