@acorex/platform 21.0.0-next.3 → 21.0.0-next.33
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/fesm2022/acorex-platform-auth.mjs +295 -45
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-zhqNP3xb.mjs → acorex-platform-common-common-settings.provider-G9XcXXOG.mjs} +60 -4
- package/fesm2022/acorex-platform-common-common-settings.provider-G9XcXXOG.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +960 -319
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +1352 -832
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +554 -826
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +530 -154
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +5969 -2347
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +169 -154
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +15380 -9274
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +393 -110
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +511 -450
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs → acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs} +39 -16
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs +111 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +7865 -4026
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +8 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +220 -169
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs +160 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs +120 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs} +18 -25
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +1717 -66
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs} +11 -11
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs} +9 -9
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +563 -561
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +1735 -1750
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/fesm2022/acorex-platform.mjs.map +1 -1
- package/package.json +31 -31
- package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +247 -10
- package/{common/index.d.ts → types/acorex-platform-common.d.ts} +492 -31
- package/{core/index.d.ts → types/acorex-platform-core.d.ts} +606 -392
- package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +719 -413
- package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +128 -56
- package/types/acorex-platform-layout-components.d.ts +2927 -0
- package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +9 -3
- package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1133 -237
- package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +90 -31
- package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +206 -102
- package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +942 -137
- package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
- package/{runtime/index.d.ts → types/acorex-platform-runtime.d.ts} +237 -74
- package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +113 -5
- package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
- package/types/acorex-platform-workflow.d.ts +1806 -0
- package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
- package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
- package/layout/components/index.d.ts +0 -1669
- package/workflow/index.d.ts +0 -2443
- /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-domain.mjs","sources":["../tmp-esm2022/domain/lib/provide-entity.js","../tmp-esm2022/domain/lib/registries/schema/schema-extension.token.js","../tmp-esm2022/domain/lib/registries/domain/domain-extension.token.js","../tmp-esm2022/domain/lib/domain.module.js","../tmp-esm2022/domain/lib/definitions/base.types.js","../tmp-esm2022/domain/lib/definitions/aggregate-definition.types.js","../tmp-esm2022/domain/lib/definitions/entity-definition.types.js","../tmp-esm2022/domain/lib/definitions/relation-definition.types.js","../tmp-esm2022/domain/lib/models/relation.model.js","../tmp-esm2022/domain/lib/models/aggregate.model.js","../tmp-esm2022/domain/lib/models/module.model.js","../tmp-esm2022/domain/lib/models/entity-field.model.js","../tmp-esm2022/domain/lib/models/entity.model.js","../tmp-esm2022/domain/lib/models/schema.model.js","../tmp-esm2022/domain/lib/helpers/module-helper.js","../tmp-esm2022/domain/lib/registries/schema/schema-middleware.functions.js","../tmp-esm2022/domain/lib/registries/schema/schema.registry.js","../tmp-esm2022/domain/lib/registries/schema/schema.service.js","../tmp-esm2022/domain/lib/registries/schema/schema-loader.interface.js","../tmp-esm2022/domain/lib/registries/schema/provide-schema-loaders.js","../tmp-esm2022/domain/lib/registries/schema/provide-schema-setups.js","../tmp-esm2022/domain/lib/registries/schema/provide-schema-middleware.js","../tmp-esm2022/domain/lib/registries/schema/index.js","../tmp-esm2022/domain/lib/registries/domain/domain-middleware.interface.js","../tmp-esm2022/domain/lib/registries/domain/domain.registry.js","../tmp-esm2022/domain/lib/registries/domain/domain.service.js","../tmp-esm2022/domain/lib/registries/domain/domain-loader.interface.js","../tmp-esm2022/domain/lib/registries/domain/provide-domain-loaders.js","../tmp-esm2022/domain/lib/registries/domain/provide-domain-middleware.js","../tmp-esm2022/domain/lib/registries/domain/index.js","../tmp-esm2022/domain/index.js","../tmp-esm2022/domain/acorex-platform-domain.js"],"sourcesContent":["import { inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { InjectionToken } from '@angular/core';\nimport { AXPCommandRegistry, AXPQueryRegistry, } from '@acorex/platform/runtime';\nexport const AXP_ENTITY_CRUD_SETUP = new InjectionToken('AXP_ENTITY_CRUD_SETUP');\nexport function provideEntity(entityKeys) {\n return makeEnvironmentProviders([\n {\n provide: AXP_ENTITY_CRUD_SETUP,\n multi: true,\n useFactory: () => {\n const commandRegistry = inject(AXPCommandRegistry);\n const queryRegistry = inject(AXPQueryRegistry);\n const entityService = inject(AXPEntityService);\n for (const entityKey of entityKeys) {\n const dataAccessor = entityService.withEntity(entityKey).data();\n // Register Commands\n commandRegistry.register(`${entityKey}:Create`, async () => ({\n execute: async (input) => {\n try {\n const id = await dataAccessor.create(input);\n const entity = await dataAccessor.byKey(id);\n if (!entity) {\n throw new Error('Entity not found after creation');\n }\n return {\n success: true,\n data: entity,\n };\n }\n catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to create entity',\n },\n };\n }\n }\n }));\n commandRegistry.register(`${entityKey}:Update`, async () => ({\n execute: async ({ id, ...rest }) => {\n try {\n const updated = await dataAccessor.update(id, rest);\n return {\n success: true,\n data: updated,\n };\n }\n catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to update entity',\n },\n };\n }\n }\n }));\n commandRegistry.register(`${entityKey}:Delete`, async () => ({\n execute: async (id) => {\n try {\n await dataAccessor.delete(id);\n return {\n success: true,\n };\n }\n catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error ? error.message : 'Failed to delete entity',\n },\n };\n }\n }\n }));\n // Register Queries\n queryRegistry.register(`${entityKey}:GetById`, async () => ({\n fetch: (id) => dataAccessor.byKey(id)\n }));\n queryRegistry.register(`${entityKey}:GetList`, async () => ({\n fetch: (request) => dataAccessor.query(request)\n }));\n // Implement getRoots, getChildren, and getByCategory using query with appropriate filters\n queryRegistry.register(`${entityKey}:GetRoots`, async () => ({\n fetch: async (request) => {\n return await dataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: {\n type: 'isEmpty',\n },\n value: true,\n },\n });\n }\n }));\n queryRegistry.register(`${entityKey}:GetChildren`, async () => ({\n fetch: async (request) => {\n const parentKey = request.parentKey ?? 'parentId';\n return await dataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: parentKey,\n operator: {\n type: 'equal',\n },\n value: request.parentId,\n },\n });\n }\n }));\n queryRegistry.register(`${entityKey}:GetByCategory`, async () => ({\n fetch: async (request) => {\n const categoryKey = request.categoryKey ?? 'categoryIds';\n return await dataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: categoryKey,\n operator: {\n type: 'contains',\n },\n value: request.categoryId,\n },\n });\n }\n }));\n }\n return true;\n }\n },\n // {\n // provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n // multi: true,\n // useFactory: () => {\n // const provider: AXPPermissionDefinitionProvider = {\n // define: async (context) => {\n // for (const entityKey of entityKeys) {\n // const group = entityKey.split('.')[0];\n // context.addGroup(group, group)\n // .addPermission(entityKey, entityKey)\n // .addChild(`${entityKey}:Create`, `${entityKey}:Create`)\n // .addChild(`${entityKey}:Update`, `${entityKey}:Update`)\n // .addChild(`${entityKey}:Delete`, `${entityKey}:Delete`)\n // .endPermission()\n // .endGroup();\n // }\n // }\n // }\n // return provider;\n // }\n // },\n // {\n // provide: AXP_ENTITY_CRUD_SETUP,\n // multi: true,\n // useFactory: () => {\n // return true;\n // }\n // }\n ]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3Byb3ZpZGUtZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxNQUFNLEVBQ04sd0JBQXdCLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixHQUFHLE1BQU0sMEJBQTBCLENBQUM7QUFJakYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQU8sdUJBQXVCLENBQUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQW9CO0lBQzlDLE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDYixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQy9DLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUUvQyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNqQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBWSxDQUFDO29CQUUxRSxvQkFBb0I7b0JBRXBCLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQ3pE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S0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUM5RCxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQWtELEVBQUUsRUFBRTs0QkFDaEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxhQUFhLENBQUM7NEJBQ3pELE9BQU8sTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDO2dDQUM1QixJQUFJLEVBQUUsQ0FBQztnQ0FDUCxJQUFJLEVBQUUsSUFBSTtnQ0FDVixNQUFNLEVBQUU7b0NBQ0osS0FBSyxFQUFFLFdBQVc7b0NBQ2xCLFFBQVEsRUFBRTt3Q0FDTixJQUFJLEVBQUUsVUFBVTtxQ0FDbkI7b0NBQ0QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVO2lDQUM1Qjs2QkFDSixDQUFDLENBQUM7d0JBQ1AsQ0FBQztxQkFDSixDQUFDLENBQUMsQ0FBQztnQkFFUixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7U0FDSjtRQUNELElBQUk7UUFDSixtREFBbUQ7UUFDbkQsbUJBQW1CO1FBQ25CLDBCQUEwQjtRQUMxQiw4REFBOEQ7UUFDOUQsMkNBQTJDO1FBQzNDLHdEQUF3RDtRQUN4RCw2REFBNkQ7UUFDN0QscURBQXFEO1FBQ3JELCtEQUErRDtRQUMvRCxrRkFBa0Y7UUFDbEYsa0ZBQWtGO1FBQ2xGLGtGQUFrRjtRQUNsRiwyQ0FBMkM7UUFDM0MsdUNBQXVDO1FBQ3ZDLG9CQUFvQjtRQUNwQixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLDJCQUEyQjtRQUUzQixRQUFRO1FBQ1IsS0FBSztRQUNMLElBQUk7UUFDSixzQ0FBc0M7UUFDdEMsbUJBQW1CO1FBQ25CLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsUUFBUTtRQUNSLElBQUk7S0FDUCxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgICBpbmplY3QsXG4gICAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRW50aXR5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ29tbWFuZFJlZ2lzdHJ5LCBBWFBRdWVyeVJlZ2lzdHJ5LCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWFBfUEVSTUlTU0lPTl9ERUZJTklUSU9OX1BST1ZJREVSLCBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEFYUF9FTlRJVFlfQ1JVRF9TRVRVUCA9IG5ldyBJbmplY3Rpb25Ub2tlbjx2b2lkPignQVhQX0VOVElUWV9DUlVEX1NFVFVQJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRW50aXR5KGVudGl0eUtleXM6IHN0cmluZ1tdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfRU5USVRZX0NSVURfU0VUVVAsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kUmVnaXN0cnkgPSBpbmplY3QoQVhQQ29tbWFuZFJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVJlZ2lzdHJ5ID0gaW5qZWN0KEFYUFF1ZXJ5UmVnaXN0cnkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUtleSBvZiBlbnRpdHlLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFBY2Nlc3NvciA9IGVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShlbnRpdHlLZXkpLmRhdGE8YW55LCBhbnk+KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgQ29tbWFuZHNcblxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpDcmVhdGVgLCBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0KTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDxhbnk+PiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBhd2FpdCBkYXRhQWNjZXNzb3IuY3JlYXRlKGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYXdhaXQgZGF0YUFjY2Vzc29yLmJ5S2V5KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRW50aXR5IG5vdCBmb3VuZCBhZnRlciBjcmVhdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdGYWlsZWQgdG8gY3JlYXRlIGVudGl0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OlVwZGF0ZWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoeyBpZCwgLi4ucmVzdCB9KTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDxhbnk+PiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IGRhdGFBY2Nlc3Nvci51cGRhdGUoaWQsIHJlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVwZGF0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byB1cGRhdGUgZW50aXR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06RGVsZXRlYCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZCk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8dm9pZD4+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkYXRhQWNjZXNzb3IuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBkZWxldGUgZW50aXR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgUXVlcmllc1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRCeUlkYCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoOiAoaWQpID0+IGRhdGFBY2Nlc3Nvci5ieUtleShpZClcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRMaXN0YCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoOiAocmVxdWVzdCkgPT4gZGF0YUFjY2Vzc29yLnF1ZXJ5KHJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJbXBsZW1lbnQgZ2V0Um9vdHMsIGdldENoaWxkcmVuLCBhbmQgZ2V0QnlDYXRlZ29yeSB1c2luZyBxdWVyeSB3aXRoIGFwcHJvcHJpYXRlIGZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OkdldFJvb3RzYCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoOiBhc3luYyAocmVxdWVzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFBY2Nlc3Nvci5xdWVyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpc0VtcHR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRDaGlsZHJlbmAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaDogYXN5bmMgKHJlcXVlc3Q6IHsgcGFyZW50SWQ6IGFueTsgcGFyZW50S2V5Pzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSByZXF1ZXN0LnBhcmVudEtleSA/PyAncGFyZW50SWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhQWNjZXNzb3IucXVlcnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBwYXJlbnRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlcXVlc3QucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06R2V0QnlDYXRlZ29yeWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaDogYXN5bmMgKHJlcXVlc3Q6IHsgY2F0ZWdvcnlJZDogYW55OyBjYXRlZ29yeUtleT86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlLZXkgPSByZXF1ZXN0LmNhdGVnb3J5S2V5ID8/ICdjYXRlZ29yeUlkcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFBY2Nlc3Nvci5xdWVyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNhdGVnb3J5S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29udGFpbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXF1ZXN0LmNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgcHJvdmlkZTogQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUixcbiAgICAgICAgLy8gICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAvLyAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHByb3ZpZGVyOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyID0ge1xuICAgICAgICAvLyAgICAgICAgICAgICBkZWZpbmU6IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUtleSBvZiBlbnRpdHlLZXlzKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRpdHlLZXkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZEdyb3VwKGdyb3VwLCBncm91cClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmFkZFBlcm1pc3Npb24oZW50aXR5S2V5LCBlbnRpdHlLZXkpXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDaGlsZChgJHtlbnRpdHlLZXl9OkNyZWF0ZWAsIGAke2VudGl0eUtleX06Q3JlYXRlYClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENoaWxkKGAke2VudGl0eUtleX06VXBkYXRlYCwgYCR7ZW50aXR5S2V5fTpVcGRhdGVgKVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2hpbGQoYCR7ZW50aXR5S2V5fTpEZWxldGVgLCBgJHtlbnRpdHlLZXl9OkRlbGV0ZWApXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5lbmRQZXJtaXNzaW9uKClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmVuZEdyb3VwKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfQ1JVRF9TRVRVUCxcbiAgICAgICAgLy8gICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAvLyAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgXSk7XG59XG5cblxuIl19","import { InjectionToken } from '@angular/core';\n//#region ---- Dependency Injection Tokens ----\n/**\n * Injection token for schema-specific middleware extensions.\n *\n * Used for targeted middleware that applies only to schemas matching\n * specific patterns (name or regex). This enables fine-grained control\n * over which schemas receive which middleware.\n */\nexport const AXP_SCHEMA_EXTENSION = new InjectionToken('AXP_SCHEMA_EXTENSION');\n/**\n * Injection token for schema setup initialization.\n *\n * Used during application bootstrap to register schemas that are\n * known at build time. Multiple providers can use this token to\n * contribute schemas to the registry.\n */\nexport const AXP_SCHEMA_SETUP = new InjectionToken('AXP_SCHEMA_SETUP');\n/**\n * Injection token for schema middleware setup initialization.\n *\n * Used during application bootstrap to register global middleware\n * that applies to all schema resolutions. This enables centralized\n * schema processing logic.\n */\nexport const AXP_SCHEMA_MIDDLEWARE_SETUP = new InjectionToken('AXP_SCHEMA_MIDDLEWARE_SETUP');\n/**\n * Injection token for schema loader setup initialization.\n *\n * Used during application bootstrap to register schema loaders\n * that can provide schemas on-demand when they're not found in\n * the registry.\n */\nexport const AXP_SCHEMA_LOADER_SETUP = new InjectionToken('AXP_SCHEMA_LOADER_SETUP');\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWV4dGVuc2lvbi50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvcmVnaXN0cmllcy9zY2hlbWEvc2NoZW1hLWV4dGVuc2lvbi50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLG1EQUFtRDtBQUVuRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FHbkQsc0JBQXNCLENBQUMsQ0FBQztBQUUzQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBTyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdFOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFPLDZCQUE2QixDQUFDLENBQUM7QUFFbkc7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQU8seUJBQXlCLENBQUMsQ0FBQztBQUUzRixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFNjaGVtYU1pZGRsZXdhcmUgfSBmcm9tICcuL3NjaGVtYS5taWRkbGV3YXJlJztcblxuLy8jcmVnaW9uIC0tLS0gICBEZXBlbmRlbmN5IEluamVjdGlvbiBUb2tlbnMgICAtLS0tXG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBzY2hlbWEtc3BlY2lmaWMgbWlkZGxld2FyZSBleHRlbnNpb25zLlxuICogXG4gKiBVc2VkIGZvciB0YXJnZXRlZCBtaWRkbGV3YXJlIHRoYXQgYXBwbGllcyBvbmx5IHRvIHNjaGVtYXMgbWF0Y2hpbmdcbiAqIHNwZWNpZmljIHBhdHRlcm5zIChuYW1lIG9yIHJlZ2V4KS4gVGhpcyBlbmFibGVzIGZpbmUtZ3JhaW5lZCBjb250cm9sXG4gKiBvdmVyIHdoaWNoIHNjaGVtYXMgcmVjZWl2ZSB3aGljaCBtaWRkbGV3YXJlLlxuICovXG5leHBvcnQgY29uc3QgQVhQX1NDSEVNQV9FWFRFTlNJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW48e1xuICAgIHRhcmdldDogc3RyaW5nIHwgUmVnRXhwO1xuICAgIG1pZGRsZXdhcmU6IEFYUFNjaGVtYU1pZGRsZXdhcmU7XG59PignQVhQX1NDSEVNQV9FWFRFTlNJT04nKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHNjaGVtYSBzZXR1cCBpbml0aWFsaXphdGlvbi5cbiAqIFxuICogVXNlZCBkdXJpbmcgYXBwbGljYXRpb24gYm9vdHN0cmFwIHRvIHJlZ2lzdGVyIHNjaGVtYXMgdGhhdCBhcmVcbiAqIGtub3duIGF0IGJ1aWxkIHRpbWUuIE11bHRpcGxlIHByb3ZpZGVycyBjYW4gdXNlIHRoaXMgdG9rZW4gdG9cbiAqIGNvbnRyaWJ1dGUgc2NoZW1hcyB0byB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBBWFBfU0NIRU1BX1NFVFVQID0gbmV3IEluamVjdGlvblRva2VuPHZvaWQ+KCdBWFBfU0NIRU1BX1NFVFVQJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBzY2hlbWEgbWlkZGxld2FyZSBzZXR1cCBpbml0aWFsaXphdGlvbi5cbiAqIFxuICogVXNlZCBkdXJpbmcgYXBwbGljYXRpb24gYm9vdHN0cmFwIHRvIHJlZ2lzdGVyIGdsb2JhbCBtaWRkbGV3YXJlXG4gKiB0aGF0IGFwcGxpZXMgdG8gYWxsIHNjaGVtYSByZXNvbHV0aW9ucy4gVGhpcyBlbmFibGVzIGNlbnRyYWxpemVkXG4gKiBzY2hlbWEgcHJvY2Vzc2luZyBsb2dpYy5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9TQ0hFTUFfTUlERExFV0FSRV9TRVRVUCA9IG5ldyBJbmplY3Rpb25Ub2tlbjx2b2lkPignQVhQX1NDSEVNQV9NSURETEVXQVJFX1NFVFVQJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBzY2hlbWEgbG9hZGVyIHNldHVwIGluaXRpYWxpemF0aW9uLlxuICogXG4gKiBVc2VkIGR1cmluZyBhcHBsaWNhdGlvbiBib290c3RyYXAgdG8gcmVnaXN0ZXIgc2NoZW1hIGxvYWRlcnNcbiAqIHRoYXQgY2FuIHByb3ZpZGUgc2NoZW1hcyBvbi1kZW1hbmQgd2hlbiB0aGV5J3JlIG5vdCBmb3VuZCBpblxuICogdGhlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgQVhQX1NDSEVNQV9MT0FERVJfU0VUVVAgPSBuZXcgSW5qZWN0aW9uVG9rZW48dm9pZD4oJ0FYUF9TQ0hFTUFfTE9BREVSX1NFVFVQJyk7XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","import { InjectionToken } from '@angular/core';\n//#region ---- Dependency Injection Tokens ----\n/**\n * Injection token for schema-specific middleware extensions.\n *\n * Used for targeted middleware that applies only to schemas matching\n * specific patterns (name or regex). This enables fine-grained control\n * over which schemas receive which middleware.\n */\nexport const AXP_DOMAIN_EXTENSION = new InjectionToken('AXP_DOMAIN_EXTENSION');\n/**\n * Injection token for schema setup initialization.\n *\n * Used during application bootstrap to register schemas that are\n * known at build time. Multiple providers can use this token to\n * contribute schemas to the registry.\n */\nexport const AXP_DOMAIN_SETUP = new InjectionToken('AXP_DOMAIN_SETUP');\n/**\n * Injection token for schema middleware setup initialization.\n *\n * Used during application bootstrap to register global middleware\n * that applies to all schema resolutions. This enables centralized\n * schema processing logic.\n */\nexport const AXP_DOMAIN_MIDDLEWARE_SETUP = new InjectionToken('AXP_DOMAIN_MIDDLEWARE_SETUP');\n/**\n * Injection token for schema loader setup initialization.\n *\n * Used during application bootstrap to register schema loaders\n * that can provide schemas on-demand when they're not found in\n * the registry.\n */\nexport const AXP_DOMAIN_LOADER_SETUP = new InjectionToken('AXP_DOMAIN_LOADER_SETUP');\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWV4dGVuc2lvbi50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvcmVnaXN0cmllcy9kb21haW4vZG9tYWluLWV4dGVuc2lvbi50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLG1EQUFtRDtBQUVuRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FHbkQsc0JBQXNCLENBQUMsQ0FBQztBQUUzQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBTyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTdFOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFPLDZCQUE2QixDQUFDLENBQUM7QUFFbkc7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQU8seUJBQXlCLENBQUMsQ0FBQztBQUUzRixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUERvbWFpbk1pZGRsZXdhcmUgfSBmcm9tICcuL2RvbWFpbi1taWRkbGV3YXJlLmludGVyZmFjZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgRGVwZW5kZW5jeSBJbmplY3Rpb24gVG9rZW5zICAgLS0tLVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igc2NoZW1hLXNwZWNpZmljIG1pZGRsZXdhcmUgZXh0ZW5zaW9ucy5cbiAqIFxuICogVXNlZCBmb3IgdGFyZ2V0ZWQgbWlkZGxld2FyZSB0aGF0IGFwcGxpZXMgb25seSB0byBzY2hlbWFzIG1hdGNoaW5nXG4gKiBzcGVjaWZpYyBwYXR0ZXJucyAobmFtZSBvciByZWdleCkuIFRoaXMgZW5hYmxlcyBmaW5lLWdyYWluZWQgY29udHJvbFxuICogb3ZlciB3aGljaCBzY2hlbWFzIHJlY2VpdmUgd2hpY2ggbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9ET01BSU5fRVhURU5TSU9OID0gbmV3IEluamVjdGlvblRva2VuPHtcbiAgICB0YXJnZXQ6IHN0cmluZyB8IFJlZ0V4cDtcbiAgICBtaWRkbGV3YXJlOiBBWFBEb21haW5NaWRkbGV3YXJlO1xufT4oJ0FYUF9ET01BSU5fRVhURU5TSU9OJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBzY2hlbWEgc2V0dXAgaW5pdGlhbGl6YXRpb24uXG4gKiBcbiAqIFVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIGJvb3RzdHJhcCB0byByZWdpc3RlciBzY2hlbWFzIHRoYXQgYXJlXG4gKiBrbm93biBhdCBidWlsZCB0aW1lLiBNdWx0aXBsZSBwcm92aWRlcnMgY2FuIHVzZSB0aGlzIHRva2VuIHRvXG4gKiBjb250cmlidXRlIHNjaGVtYXMgdG8gdGhlIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgQVhQX0RPTUFJTl9TRVRVUCA9IG5ldyBJbmplY3Rpb25Ub2tlbjx2b2lkPignQVhQX0RPTUFJTl9TRVRVUCcpO1xuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igc2NoZW1hIG1pZGRsZXdhcmUgc2V0dXAgaW5pdGlhbGl6YXRpb24uXG4gKiBcbiAqIFVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIGJvb3RzdHJhcCB0byByZWdpc3RlciBnbG9iYWwgbWlkZGxld2FyZVxuICogdGhhdCBhcHBsaWVzIHRvIGFsbCBzY2hlbWEgcmVzb2x1dGlvbnMuIFRoaXMgZW5hYmxlcyBjZW50cmFsaXplZFxuICogc2NoZW1hIHByb2Nlc3NpbmcgbG9naWMuXG4gKi9cbmV4cG9ydCBjb25zdCBBWFBfRE9NQUlOX01JRERMRVdBUkVfU0VUVVAgPSBuZXcgSW5qZWN0aW9uVG9rZW48dm9pZD4oJ0FYUF9ET01BSU5fTUlERExFV0FSRV9TRVRVUCcpO1xuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3Igc2NoZW1hIGxvYWRlciBzZXR1cCBpbml0aWFsaXphdGlvbi5cbiAqIFxuICogVXNlZCBkdXJpbmcgYXBwbGljYXRpb24gYm9vdHN0cmFwIHRvIHJlZ2lzdGVyIHNjaGVtYSBsb2FkZXJzXG4gKiB0aGF0IGNhbiBwcm92aWRlIHNjaGVtYXMgb24tZGVtYW5kIHdoZW4gdGhleSdyZSBub3QgZm91bmQgaW5cbiAqIHRoZSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9ET01BSU5fTE9BREVSX1NFVFVQID0gbmV3IEluamVjdGlvblRva2VuPHZvaWQ+KCdBWFBfRE9NQUlOX0xPQURFUl9TRVRVUCcpO1xuXG4vLyNlbmRyZWdpb24gIl19","import { AXPRuntimeModule } from \"@acorex/platform/runtime\";\nimport { NgModule, inject } from \"@angular/core\";\nimport { AXP_ENTITY_CRUD_SETUP } from \"./provide-entity\";\nimport { AXP_SCHEMA_LOADER_SETUP, AXP_SCHEMA_MIDDLEWARE_SETUP, AXP_SCHEMA_SETUP } from \"./registries/schema/schema-extension.token\";\nimport { AXP_DOMAIN_LOADER_SETUP, AXP_DOMAIN_MIDDLEWARE_SETUP, AXP_DOMAIN_SETUP } from \"./registries/domain/domain-extension.token\";\nimport * as i0 from \"@angular/core\";\nexport class AXPDomainModule {\n constructor() {\n this._commandSetup = inject(AXP_ENTITY_CRUD_SETUP, { optional: true });\n /**\n * Injection token for schema setup initialization.\n *\n * Used during application bootstrap to register global middleware\n * that applies to all schema resolutions. This enables centralized\n * schema processing logic.\n */\n this._schemaSetup = inject(AXP_SCHEMA_SETUP, { optional: true });\n this._schemaMiddlewareSetup = inject(AXP_SCHEMA_MIDDLEWARE_SETUP, { optional: true });\n this._schemaLoaderSetup = inject(AXP_SCHEMA_LOADER_SETUP, { optional: true });\n /**\n * Injection token for domain loader setup initialization.\n *\n * Used during application bootstrap to register domain loaders\n * that can provide domain definitions on-demand when they're not found in\n * the registry.\n */\n this._domainLoaderSetup = inject(AXP_DOMAIN_LOADER_SETUP, { optional: true });\n this._domainMiddlewareSetup = inject(AXP_DOMAIN_MIDDLEWARE_SETUP, { optional: true });\n this._domainSetup = inject(AXP_DOMAIN_SETUP, { optional: true });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainModule, imports: [AXPRuntimeModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainModule, imports: [AXPRuntimeModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n AXPRuntimeModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvZG9tYWluLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFTcEksTUFBTSxPQUFPLGVBQWU7SUFMNUI7UUFNWSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTFFOzs7Ozs7V0FNRztRQUNLLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakYsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFakY7Ozs7OztXQU1HO1FBRUssdUJBQWtCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakYsaUJBQVksR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUN2RTsrR0F6QlksZUFBZTtnSEFBZixlQUFlLFlBSHBCLGdCQUFnQjtnSEFHWCxlQUFlLFlBSHBCLGdCQUFnQjs7NEZBR1gsZUFBZTtrQkFMM0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsZ0JBQWdCO3FCQUNuQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFJ1bnRpbWVNb2R1bGUgfSBmcm9tIFwiQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lXCI7XG5pbXBvcnQgeyBOZ01vZHVsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUF9FTlRJVFlfQ1JVRF9TRVRVUCB9IGZyb20gXCIuL3Byb3ZpZGUtZW50aXR5XCI7XG5pbXBvcnQgeyBBWFBfU0NIRU1BX0xPQURFUl9TRVRVUCwgQVhQX1NDSEVNQV9NSURETEVXQVJFX1NFVFVQLCBBWFBfU0NIRU1BX1NFVFVQIH0gZnJvbSBcIi4vcmVnaXN0cmllcy9zY2hlbWEvc2NoZW1hLWV4dGVuc2lvbi50b2tlblwiO1xuaW1wb3J0IHsgQVhQX0RPTUFJTl9MT0FERVJfU0VUVVAsIEFYUF9ET01BSU5fTUlERExFV0FSRV9TRVRVUCwgQVhQX0RPTUFJTl9TRVRVUCB9IGZyb20gXCIuL3JlZ2lzdHJpZXMvZG9tYWluL2RvbWFpbi1leHRlbnNpb24udG9rZW5cIjtcblxuXG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBBWFBSdW50aW1lTW9kdWxlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBWFBEb21haW5Nb2R1bGUge1xuICAgIHByaXZhdGUgX2NvbW1hbmRTZXR1cCA9IGluamVjdChBWFBfRU5USVRZX0NSVURfU0VUVVAsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3Rpb24gdG9rZW4gZm9yIHNjaGVtYSBzZXR1cCBpbml0aWFsaXphdGlvbi5cbiAgICAgKiBcbiAgICAgKiBVc2VkIGR1cmluZyBhcHBsaWNhdGlvbiBib290c3RyYXAgdG8gcmVnaXN0ZXIgZ2xvYmFsIG1pZGRsZXdhcmVcbiAgICAgKiB0aGF0IGFwcGxpZXMgdG8gYWxsIHNjaGVtYSByZXNvbHV0aW9ucy4gVGhpcyBlbmFibGVzIGNlbnRyYWxpemVkXG4gICAgICogc2NoZW1hIHByb2Nlc3NpbmcgbG9naWMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2NoZW1hU2V0dXAgPSBpbmplY3QoQVhQX1NDSEVNQV9TRVRVUCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIF9zY2hlbWFNaWRkbGV3YXJlU2V0dXAgPSBpbmplY3QoQVhQX1NDSEVNQV9NSURETEVXQVJFX1NFVFVQLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgX3NjaGVtYUxvYWRlclNldHVwID0gaW5qZWN0KEFYUF9TQ0hFTUFfTE9BREVSX1NFVFVQLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICogSW5qZWN0aW9uIHRva2VuIGZvciBkb21haW4gbG9hZGVyIHNldHVwIGluaXRpYWxpemF0aW9uLlxuICAgICAqIFxuICAgICAqIFVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIGJvb3RzdHJhcCB0byByZWdpc3RlciBkb21haW4gbG9hZGVyc1xuICAgICAqIHRoYXQgY2FuIHByb3ZpZGUgZG9tYWluIGRlZmluaXRpb25zIG9uLWRlbWFuZCB3aGVuIHRoZXkncmUgbm90IGZvdW5kIGluXG4gICAgICogdGhlIHJlZ2lzdHJ5LlxuICAgICAqL1xuXG4gICAgcHJpdmF0ZSBfZG9tYWluTG9hZGVyU2V0dXAgPSBpbmplY3QoQVhQX0RPTUFJTl9MT0FERVJfU0VUVVAsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSBfZG9tYWluTWlkZGxld2FyZVNldHVwID0gaW5qZWN0KEFYUF9ET01BSU5fTUlERExFV0FSRV9TRVRVUCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIF9kb21haW5TZXR1cCA9IGluamVjdChBWFBfRE9NQUlOX1NFVFVQLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xufSJdfQ==","export var AXPEntityCommandScope;\n(function (AXPEntityCommandScope) {\n AXPEntityCommandScope[\"TypeLevel\"] = \"typeLevel\";\n AXPEntityCommandScope[\"Selected\"] = \"selected\";\n AXPEntityCommandScope[\"Individual\"] = \"individual\";\n AXPEntityCommandScope[\"Section\"] = \"section\";\n})(AXPEntityCommandScope || (AXPEntityCommandScope = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvZGVmaW5pdGlvbnMvYmFzZS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxNQUFNLENBQU4sSUFBWSxxQkFLWDtBQUxELFdBQVkscUJBQXFCO0lBQzdCLGdEQUF1QixDQUFBO0lBQ3ZCLDhDQUFxQixDQUFBO0lBQ3JCLGtEQUF5QixDQUFBO0lBQ3pCLDRDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFMVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBS2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQRXhwcmVzc2lvbiB9IGZyb20gXCJAYWNvcmV4L3BsYXRmb3JtL2NvcmVcIjtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGRlZmluaW5nIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBEb21haW5BY3Rpb24ge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgc2lkZTogJ2NsaWVudCcgfCAnc2VydmVyJyB8ICdib3RoJztcbiAgICBjb25kaXRpb24/OiBBWFBFeHByZXNzaW9uO1xuICAgIGV4cHJlc3Npb246IEFYUEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBlbnVtIEFYUEVudGl0eUNvbW1hbmRTY29wZSB7XG4gICAgVHlwZUxldmVsID0gJ3R5cGVMZXZlbCcsXG4gICAgU2VsZWN0ZWQgPSAnc2VsZWN0ZWQnLFxuICAgIEluZGl2aWR1YWwgPSAnaW5kaXZpZHVhbCcsXG4gICAgU2VjdGlvbiA9ICdzZWN0aW9uJyxcbn1cblxuIl19","export {};\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLWRlZmluaXRpb24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL2RlZmluaXRpb25zL2FnZ3JlZ2F0ZS1kZWZpbml0aW9uLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUF3QkEsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFZhbGlkYXRpb25SdWxlcyB9IGZyb20gXCJAYWNvcmV4L3BsYXRmb3JtL2NvcmVcIjtcbmltcG9ydCB7IEFYUEVudGl0eURlZmluaXRpb24gfSBmcm9tIFwiLi9lbnRpdHktZGVmaW5pdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgQVhQRG9tYWluQWN0aW9uIH0gZnJvbSBcIi4vYmFzZS50eXBlc1wiO1xuaW1wb3J0IHsgQVhQQWdncmVnYXRlUmVsYXRpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4vcmVsYXRpb24tZGVmaW5pdGlvbi50eXBlc1wiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEVudGl0eSBMb2FkaW5nIFR5cGVzICAgLS0tLVxuXG5leHBvcnQgdHlwZSBBWFBBZ2dyZWdhdGVFbnRpdHlMaXN0ID0ge1xuICAgIFtrZXk6IHN0cmluZ106ICgpID0+IFByb21pc2U8QVhQRW50aXR5RGVmaW5pdGlvbj47XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIEFnZ3JlZ2F0ZSBEZWZpbml0aW9uICAgLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEFnZ3JlZ2F0ZURlZmluaXRpb24ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGVudGl0aWVzOiBBWFBFbnRpdHlEZWZpbml0aW9uW10gfCBBWFBBZ2dyZWdhdGVFbnRpdHlMaXN0IHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICByZWxhdGlvbnM6IEFYUEFnZ3JlZ2F0ZVJlbGF0aW9uRGVmaW5pdGlvbltdO1xuICAgIHZhbGlkYXRpb25zOiBBWFBWYWxpZGF0aW9uUnVsZXM7XG4gICAgYWN0aW9uczogQVhQRG9tYWluQWN0aW9uW107XG59XG5cbi8vI2VuZHJlZ2lvblxuIl19","export var AXPEntityType;\n(function (AXPEntityType) {\n AXPEntityType[AXPEntityType[\"Entity\"] = 0] = \"Entity\";\n AXPEntityType[AXPEntityType[\"AggregateRoot\"] = 1] = \"AggregateRoot\";\n AXPEntityType[AXPEntityType[\"ValueObject\"] = 2] = \"ValueObject\";\n})(AXPEntityType || (AXPEntityType = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRlZmluaXRpb24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL2RlZmluaXRpb25zL2VudGl0eS1kZWZpbml0aW9uLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDckIscURBQU0sQ0FBQTtJQUNOLG1FQUFhLENBQUE7SUFDYiwrREFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGFBQWEsS0FBYixhQUFhLFFBSXhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQVmFsaWRhdGlvblJ1bGVzIH0gZnJvbSBcIkBhY29yZXgvcGxhdGZvcm0vY29yZVwiO1xuaW1wb3J0IHsgQVhQRG9tYWluQWN0aW9uIH0gZnJvbSBcIi4vYmFzZS50eXBlc1wiO1xuXG5leHBvcnQgZW51bSBBWFBFbnRpdHlUeXBlIHtcbiAgICBFbnRpdHksXG4gICAgQWdncmVnYXRlUm9vdCxcbiAgICBWYWx1ZU9iamVjdCxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBFbnRpdHlEZWZpbml0aW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBmaWVsZHM6IEFYUEVudGl0eUZpZWxkRGVmaW5pdGlvbltdO1xuICAgIHR5cGU6IEFYUEVudGl0eVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRW50aXR5RmllbGRGZWF0dXJlcyB7XG4gICAgbnVsbGFibGU6IGJvb2xlYW47XG4gICAgcmVhZE9ubHk6IGJvb2xlYW47IC8vIGZvciB1cGRhdGVcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEVudGl0eUZpZWxkRGVmaW5pdGlvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgdmFsaWRhdGlvbnM/OiBBWFBWYWxpZGF0aW9uUnVsZXM7XG4gICAgYWN0aW9ucz86IEFYUERvbWFpbkFjdGlvbltdO1xuICAgIGZlYXR1cmVzPzogQVhQRW50aXR5RmllbGRGZWF0dXJlcztcbiAgICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gICAgLy9cbiAgICBzY2hlbWE6IHN0cmluZzsgLy8gUmVmZXJlbmNlIHRvIHJlZ2lzdGVyZWQgc2NoZW1hIG5hbWVcbn1cbiJdfQ==","export var AXPRelationshipKind;\n(function (AXPRelationshipKind) {\n AXPRelationshipKind[AXPRelationshipKind[\"Association\"] = 0] = \"Association\";\n AXPRelationshipKind[AXPRelationshipKind[\"Composition\"] = 1] = \"Composition\";\n AXPRelationshipKind[AXPRelationshipKind[\"Aggregation\"] = 2] = \"Aggregation\";\n})(AXPRelationshipKind || (AXPRelationshipKind = {}));\nexport var AXPRelationshipCardinality;\n(function (AXPRelationshipCardinality) {\n AXPRelationshipCardinality[AXPRelationshipCardinality[\"OneToOne\"] = 0] = \"OneToOne\";\n AXPRelationshipCardinality[AXPRelationshipCardinality[\"OneToMany\"] = 1] = \"OneToMany\";\n AXPRelationshipCardinality[AXPRelationshipCardinality[\"ManyToMany\"] = 2] = \"ManyToMany\";\n})(AXPRelationshipCardinality || (AXPRelationshipCardinality = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb24tZGVmaW5pdGlvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvZGVmaW5pdGlvbnMvcmVsYXRpb24tZGVmaW5pdGlvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzNCLDJFQUFXLENBQUE7SUFDWCwyRUFBVyxDQUFBO0lBQ1gsMkVBQVcsQ0FBQTtBQUNmLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBRUQsTUFBTSxDQUFOLElBQVksMEJBSVg7QUFKRCxXQUFZLDBCQUEwQjtJQUNsQyxtRkFBUSxDQUFBO0lBQ1IscUZBQVMsQ0FBQTtJQUNULHVGQUFVLENBQUE7QUFDZCxDQUFDLEVBSlcsMEJBQTBCLEtBQTFCLDBCQUEwQixRQUlyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eVR5cGUgfSBmcm9tICcuL2VudGl0eS1kZWZpbml0aW9uLnR5cGVzJztcblxuZXhwb3J0IGVudW0gQVhQUmVsYXRpb25zaGlwS2luZCB7XG4gICAgQXNzb2NpYXRpb24sXG4gICAgQ29tcG9zaXRpb24sXG4gICAgQWdncmVnYXRpb24sXG59XG5cbmV4cG9ydCBlbnVtIEFYUFJlbGF0aW9uc2hpcENhcmRpbmFsaXR5IHtcbiAgICBPbmVUb09uZSxcbiAgICBPbmVUb01hbnksXG4gICAgTWFueVRvTWFueSxcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGRlZmluaW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhZ2dyZWdhdGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQWdncmVnYXRlUmVsYXRpb25EZWZpbml0aW9uIHtcbiAgICB0eXBlOiBBWFBSZWxhdGlvbnNoaXBDYXJkaW5hbGl0eTtcbiAgICBraW5kOiBBWFBSZWxhdGlvbnNoaXBLaW5kO1xuICAgIHRhcmdldDoge1xuICAgICAgICBhZ2dyZWdhdGU6IHN0cmluZzsgLy8gUHJvZHVjdHNcbiAgICAgICAgZW50aXR5OiBzdHJpbmc7IC8vIFByb2R1Y3RcbiAgICAgICAga2V5OiBzdHJpbmc7IC8vIElkXG4gICAgfTtcbiAgICBzb3VyY2U6IHtcbiAgICAgICAgZW50aXR5OiBzdHJpbmc7IC8vIE9yZGVySXRlbVxuICAgICAgICBrZXk6IHN0cmluZzsgLy8gUHJvZHVjdElkXG4gICAgfTtcbiAgICBpc1JlcXVpcmVkOiBib29sZWFuOyAvLyBMZWZ0IHNpZGUgaXMgcmVxdWlyZWRcbn0iXX0=","import { AXPRelationshipCardinality, AXPRelationshipKind } from \"../definitions/relation-definition.types\";\n//#region ---- AXPRelationModel ----\n/**\n * Runtime model for relation definitions with parent references and helper methods\n */\nexport class AXPRelationModel {\n constructor(definition, parent) {\n console.log('Relation Model Constructor', definition, parent);\n this.type = definition.type;\n this.kind = definition.kind;\n this.target = { ...definition.target };\n this.source = { ...definition.source };\n this.isRequired = definition.isRequired;\n this.parent = parent;\n }\n //#endregion\n //#region ---- Cardinality Methods ----\n /**\n * Check if relation is one-to-one\n */\n isOneToOne() {\n return this.type === AXPRelationshipCardinality.OneToOne;\n }\n /**\n * Check if relation is one-to-many\n */\n isOneToMany() {\n return this.type === AXPRelationshipCardinality.OneToMany;\n }\n /**\n * Check if relation is many-to-many\n */\n isManyToMany() {\n return this.type === AXPRelationshipCardinality.ManyToMany;\n }\n //#endregion\n //#region ---- Kind Methods ----\n /**\n * Check if relation is association\n */\n isAssociation() {\n return this.kind === AXPRelationshipKind.Association;\n }\n /**\n * Check if relation is composition\n */\n isComposition() {\n return this.kind === AXPRelationshipKind.Composition;\n }\n /**\n * Check if relation is aggregation\n */\n isAggregation() {\n return this.kind === AXPRelationshipKind.Aggregation;\n }\n //#endregion\n //#region ---- Navigation Methods ----\n /**\n * Get parent aggregate\n */\n getAggregate() {\n return this.parent;\n }\n /**\n * Get parent module\n */\n getModule() {\n return this.parent?.parent;\n }\n /**\n * Get full path (module.aggregate.relation)\n */\n getPath() {\n return `${this.parent.parent.name}.${this.parent.name}.${this.source.entity}->${this.target.entity}`;\n }\n //#endregion\n //#region ---- Query Methods ----\n /**\n * Get relation description\n */\n getDescription() {\n const cardinalityDesc = this.getCardinalityDescription();\n const kindDesc = this.getKindDescription();\n const requiredDesc = this.isRequired ? 'required' : 'optional';\n return `${cardinalityDesc} ${kindDesc} (${requiredDesc})`;\n }\n /**\n * Get cardinality description\n */\n getCardinalityDescription() {\n switch (this.type) {\n case AXPRelationshipCardinality.OneToOne:\n return 'one-to-one';\n case AXPRelationshipCardinality.OneToMany:\n return 'one-to-many';\n case AXPRelationshipCardinality.ManyToMany:\n return 'many-to-many';\n default:\n return 'unknown';\n }\n }\n /**\n * Get kind description\n */\n getKindDescription() {\n switch (this.kind) {\n case AXPRelationshipKind.Association:\n return 'association';\n case AXPRelationshipKind.Composition:\n return 'composition';\n case AXPRelationshipKind.Aggregation:\n return 'aggregation';\n default:\n return 'unknown';\n }\n }\n /**\n * Get relation summary\n */\n getSummary() {\n return `${this.source.entity}.${this.source.key} -> ${this.target.aggregate}.${this.target.entity}.${this.target.key}`;\n }\n //#endregion\n //#region ---- Validation Methods ----\n /**\n * Validate the relation structure\n */\n validate() {\n const errors = [];\n // Validate source\n if (!this.source.entity)\n errors.push('Source entity is required');\n if (!this.source.key)\n errors.push('Source key is required');\n // Validate target\n if (!this.target.aggregate)\n errors.push('Target aggregate is required');\n if (!this.target.entity)\n errors.push('Target entity is required');\n if (!this.target.key)\n errors.push('Target key is required');\n return errors;\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Get relation characteristics\n */\n getCharacteristics() {\n return {\n type: this.getCardinalityDescription(),\n kind: this.getKindDescription(),\n required: this.isRequired,\n isOwning: this.isComposition(),\n isNavigable: !this.isComposition() || this.isOneToOne()\n };\n }\n /**\n * Check if relation involves entity\n */\n involvesEntity(entityName) {\n return this.source.entity === entityName || this.target.entity === entityName;\n }\n /**\n * Check if relation targets aggregate\n */\n targetsAggregate(aggregateName) {\n return this.target.aggregate === aggregateName;\n }\n /**\n * Get the other entity in the relation\n */\n getOtherEntity(entityName) {\n if (this.source.entity === entityName) {\n return this.target.entity;\n }\n else if (this.target.entity === entityName) {\n return this.source.entity;\n }\n return null;\n }\n /**\n * Convert back to interface definition\n */\n toDefinition() {\n return {\n type: this.type,\n kind: this.kind,\n target: { ...this.target },\n source: { ...this.source },\n isRequired: this.isRequired\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL21vZGVscy9yZWxhdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFM0ksd0NBQXdDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQWV6QixZQUFZLFVBQTBDLEVBQUUsTUFBVztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZO0lBRVosMkNBQTJDO0lBRTNDOztPQUVHO0lBQ0ksVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSywwQkFBMEIsQ0FBQyxRQUFRLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSywwQkFBMEIsQ0FBQyxTQUFTLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFD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SyxhQUFhLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLFVBQWtCO1FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMzQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMxQixNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzlCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBBZ2dyZWdhdGVSZWxhdGlvbkRlZmluaXRpb24sIEFYUFJlbGF0aW9uc2hpcENhcmRpbmFsaXR5LCBBWFBSZWxhdGlvbnNoaXBLaW5kIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL3JlbGF0aW9uLWRlZmluaXRpb24udHlwZXNcIjtcblxuLy8jcmVnaW9uIC0tLS0gICBBWFBSZWxhdGlvbk1vZGVsICAgLS0tLVxuXG4vKipcbiAqIFJ1bnRpbWUgbW9kZWwgZm9yIHJlbGF0aW9uIGRlZmluaXRpb25zIHdpdGggcGFyZW50IHJlZmVyZW5jZXMgYW5kIGhlbHBlciBtZXRob2RzXG4gKi9cbmV4cG9ydCBjbGFzcyBBWFBSZWxhdGlvbk1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogQVhQUmVsYXRpb25zaGlwQ2FyZGluYWxpdHk7XG4gICAgcHVibGljIHJlYWRvbmx5IGtpbmQ6IEFYUFJlbGF0aW9uc2hpcEtpbmQ7XG4gICAgcHVibGljIHJlYWRvbmx5IHRhcmdldDoge1xuICAgICAgICBhZ2dyZWdhdGU6IHN0cmluZztcbiAgICAgICAgZW50aXR5OiBzdHJpbmc7XG4gICAgICAgIGtleTogc3RyaW5nO1xuICAgIH07XG4gICAgcHVibGljIHJlYWRvbmx5IHNvdXJjZToge1xuICAgICAgICBlbnRpdHk6IHN0cmluZztcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgfTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBhbnk7IC8vIFdpbGwgYmUgQVhQQWdncmVnYXRlTW9kZWwsIHVzaW5nIGFueSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBBWFBBZ2dyZWdhdGVSZWxhdGlvbkRlZmluaXRpb24sIHBhcmVudDogYW55KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGlvbiBNb2RlbCBDb25zdHJ1Y3RvcicsIGRlZmluaXRpb24sIHBhcmVudCk7XG4gICAgICAgIHRoaXMudHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICAgICAgdGhpcy5raW5kID0gZGVmaW5pdGlvbi5raW5kO1xuICAgICAgICB0aGlzLnRhcmdldCA9IHsgLi4uZGVmaW5pdGlvbi50YXJnZXQgfTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB7IC4uLmRlZmluaXRpb24uc291cmNlIH07XG4gICAgICAgIHRoaXMuaXNSZXF1aXJlZCA9IGRlZmluaXRpb24uaXNSZXF1aXJlZDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENhcmRpbmFsaXR5IE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiByZWxhdGlvbiBpcyBvbmUtdG8tb25lXG4gICAgICovXG4gICAgcHVibGljIGlzT25lVG9PbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IEFYUFJlbGF0aW9uc2hpcENhcmRpbmFsaXR5Lk9uZVRvT25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHJlbGF0aW9uIGlzIG9uZS10by1tYW55XG4gICAgICovXG4gICAgcHVibGljIGlzT25lVG9NYW55KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBBWFBSZWxhdGlvbnNoaXBDYXJkaW5hbGl0eS5PbmVUb01hbnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgcmVsYXRpb24gaXMgbWFueS10by1tYW55XG4gICAgICovXG4gICAgcHVibGljIGlzTWFueVRvTWFueSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQVhQUmVsYXRpb25zaGlwQ2FyZGluYWxpdHkuTWFueVRvTWFueTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgS2luZCBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgcmVsYXRpb24gaXMgYXNzb2NpYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNBc3NvY2lhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2luZCA9PT0gQVhQUmVsYXRpb25zaGlwS2luZC5Bc3NvY2lhdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiByZWxhdGlvbiBpcyBjb21wb3NpdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NvbXBvc2l0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5raW5kID09PSBBWFBSZWxhdGlvbnNoaXBLaW5kLkNvbXBvc2l0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHJlbGF0aW9uIGlzIGFnZ3JlZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIGlzQWdncmVnYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmtpbmQgPT09IEFYUFJlbGF0aW9uc2hpcEtpbmQuQWdncmVnYXRpb247XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE5hdmlnYXRpb24gTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJlbnQgYWdncmVnYXRlXG4gICAgICovXG4gICAgcHVibGljIGdldEFnZ3JlZ2F0ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHBhcmVudCBtb2R1bGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TW9kdWxlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudD8ucGFyZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBmdWxsIHBhdGggKG1vZHVsZS5hZ2dyZWdhdGUucmVsYXRpb24pXG4gICAgICovXG4gICAgcHVibGljIGdldFBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucGFyZW50LnBhcmVudC5uYW1lfS4ke3RoaXMucGFyZW50Lm5hbWV9LiR7dGhpcy5zb3VyY2UuZW50aXR5fS0+JHt0aGlzLnRhcmdldC5lbnRpdHl9YDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUXVlcnkgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCByZWxhdGlvbiBkZXNjcmlwdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eURlc2MgPSB0aGlzLmdldENhcmRpbmFsaXR5RGVzY3JpcHRpb24oKTtcbiAgICAgICAgY29uc3Qga2luZERlc2MgPSB0aGlzLmdldEtpbmREZXNjcmlwdGlvbigpO1xuICAgICAgICBjb25zdCByZXF1aXJlZERlc2MgPSB0aGlzLmlzUmVxdWlyZWQgPyAncmVxdWlyZWQnIDogJ29wdGlvbmFsJztcblxuICAgICAgICByZXR1cm4gYCR7Y2FyZGluYWxpdHlEZXNjfSAke2tpbmREZXNjfSAoJHtyZXF1aXJlZERlc2N9KWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhcmRpbmFsaXR5IGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldENhcmRpbmFsaXR5RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQVhQUmVsYXRpb25zaGlwQ2FyZGluYWxpdHkuT25lVG9PbmU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdvbmUtdG8tb25lJztcbiAgICAgICAgICAgIGNhc2UgQVhQUmVsYXRpb25zaGlwQ2FyZGluYWxpdHkuT25lVG9NYW55OlxuICAgICAgICAgICAgICAgIHJldHVybiAnb25lLXRvLW1hbnknO1xuICAgICAgICAgICAgY2FzZSBBWFBSZWxhdGlvbnNoaXBDYXJkaW5hbGl0eS5NYW55VG9NYW55OlxuICAgICAgICAgICAgICAgIHJldHVybiAnbWFueS10by1tYW55JztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBraW5kIGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldEtpbmREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgICAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgICAgICAgY2FzZSBBWFBSZWxhdGlvbnNoaXBLaW5kLkFzc29jaWF0aW9uOlxuICAgICAgICAgICAgICAgIHJldHVybiAnYXNzb2NpYXRpb24nO1xuICAgICAgICAgICAgY2FzZSBBWFBSZWxhdGlvbnNoaXBLaW5kLkNvbXBvc2l0aW9uOlxuICAgICAgICAgICAgICAgIHJldHVybiAnY29tcG9zaXRpb24nO1xuICAgICAgICAgICAgY2FzZSBBWFBSZWxhdGlvbnNoaXBLaW5kLkFnZ3JlZ2F0aW9uOlxuICAgICAgICAgICAgICAgIHJldHVybiAnYWdncmVnYXRpb24nO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHJlbGF0aW9uIHN1bW1hcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zb3VyY2UuZW50aXR5fS4ke3RoaXMuc291cmNlLmtleX0gLT4gJHt0aGlzLnRhcmdldC5hZ2dyZWdhdGV9LiR7dGhpcy50YXJnZXQuZW50aXR5fS4ke3RoaXMudGFyZ2V0LmtleX1gO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBWYWxpZGF0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSB0aGUgcmVsYXRpb24gc3RydWN0dXJlXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHNvdXJjZVxuICAgICAgICBpZiAoIXRoaXMuc291cmNlLmVudGl0eSkgZXJyb3JzLnB1c2goJ1NvdXJjZSBlbnRpdHkgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZS5rZXkpIGVycm9ycy5wdXNoKCdTb3VyY2Uga2V5IGlzIHJlcXVpcmVkJyk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGFyZ2V0XG4gICAgICAgIGlmICghdGhpcy50YXJnZXQuYWdncmVnYXRlKSBlcnJvcnMucHVzaCgnVGFyZ2V0IGFnZ3JlZ2F0ZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0LmVudGl0eSkgZXJyb3JzLnB1c2goJ1RhcmdldCBlbnRpdHkgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgaWYgKCF0aGlzLnRhcmdldC5rZXkpIGVycm9ycy5wdXNoKCdUYXJnZXQga2V5IGlzIHJlcXVpcmVkJyk7XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgVXRpbGl0eSBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IHJlbGF0aW9uIGNoYXJhY3RlcmlzdGljc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDaGFyYWN0ZXJpc3RpY3MoKToge1xuICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIGtpbmQ6IHN0cmluZztcbiAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgICAgIGlzT3duaW5nOiBib29sZWFuO1xuICAgICAgICBpc05hdmlnYWJsZTogYm9vbGVhbjtcbiAgICB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0Q2FyZGluYWxpdHlEZXNjcmlwdGlvbigpLFxuICAgICAgICAgICAga2luZDogdGhpcy5nZXRLaW5kRGVzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0aGlzLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICBpc093bmluZzogdGhpcy5pc0NvbXBvc2l0aW9uKCksXG4gICAgICAgICAgICBpc05hdmlnYWJsZTogIXRoaXMuaXNDb21wb3NpdGlvbigpIHx8IHRoaXMuaXNPbmVUb09uZSgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgcmVsYXRpb24gaW52b2x2ZXMgZW50aXR5XG4gICAgICovXG4gICAgcHVibGljIGludm9sdmVzRW50aXR5KGVudGl0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2UuZW50aXR5ID09PSBlbnRpdHlOYW1lIHx8IHRoaXMudGFyZ2V0LmVudGl0eSA9PT0gZW50aXR5TmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiByZWxhdGlvbiB0YXJnZXRzIGFnZ3JlZ2F0ZVxuICAgICAqL1xuICAgIHB1YmxpYyB0YXJnZXRzQWdncmVnYXRlKGFnZ3JlZ2F0ZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQuYWdncmVnYXRlID09PSBhZ2dyZWdhdGVOYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgb3RoZXIgZW50aXR5IGluIHRoZSByZWxhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPdGhlckVudGl0eShlbnRpdHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuc291cmNlLmVudGl0eSA9PT0gZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0LmVudGl0eTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRhcmdldC5lbnRpdHkgPT09IGVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5lbnRpdHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBiYWNrIHRvIGludGVyZmFjZSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgcHVibGljIHRvRGVmaW5pdGlvbigpOiBBWFBBZ2dyZWdhdGVSZWxhdGlvbkRlZmluaXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAga2luZDogdGhpcy5raW5kLFxuICAgICAgICAgICAgdGFyZ2V0OiB7IC4uLnRoaXMudGFyZ2V0IH0sXG4gICAgICAgICAgICBzb3VyY2U6IHsgLi4udGhpcy5zb3VyY2UgfSxcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ6IHRoaXMuaXNSZXF1aXJlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufSAiXX0=","import { AXPRelationModel } from \"./relation.model\";\n//#region ---- AXPAggregateModel ----\n/**\n * Simple runtime model for aggregate definitions with parent references and navigation helpers.\n *\n * This model is a pure data structure that provides:\n * - Access to aggregate properties and metadata\n * - Navigation helpers for finding relations and entity references\n * - Parent module reference for hierarchy navigation\n *\n * All loading and resolution logic has been moved to AXPDomainRegistry.\n */\nexport class AXPAggregateModel {\n constructor(definition, parent) {\n this.relations = [];\n this.name = definition.name;\n this.title = definition.title;\n this.validations = definition.validations || [];\n this.actions = definition.actions || [];\n this.parent = parent;\n // Initialize relations with parent reference\n this.relations = (definition.relations || []).map(relationDef => new AXPRelationModel(relationDef, this));\n // Extract entity references - convert all formats to simple string map\n this.entityReferences = this.extractEntityReferences(definition.entities);\n }\n //#endregion\n //#region ---- Entity Reference Extraction ----\n /**\n * Extract entity references from various entity definition formats\n * and convert to simple string map\n */\n extractEntityReferences(entities) {\n if (!entities) {\n return {};\n }\n if (Array.isArray(entities)) {\n // Format 1: Array of entity definitions - convert to self-references\n const references = {};\n for (const entity of entities) {\n if (entity.name) {\n // Self-reference format: module.aggregate.entity\n references[entity.name] = `${this.parent.name}.${this.name}.${entity.name}`;\n }\n }\n return references;\n }\n if (typeof entities === 'object') {\n // Format 2: Object with string references - use as-is\n return { ...entities };\n }\n return {};\n }\n //#endregion\n //#region ---- Navigation Helpers ----\n /**\n * Get entity reference by name\n *\n * @param entityName Name of the entity\n * @returns Entity reference string or undefined if not found\n */\n getEntityReference(entityName) {\n return this.entityReferences[entityName];\n }\n /**\n * Get full path for an entity in this aggregate\n *\n * @param entityName Name of the entity\n * @returns Full entity path\n */\n getEntityPath(entityName) {\n return `${this.parent.name}.${this.name}.${entityName}`;\n }\n /**\n * Get all available entity names\n *\n * @returns Array of entity names\n */\n getEntityNames() {\n return Object.keys(this.entityReferences);\n }\n /**\n * Check if entity exists in this aggregate\n *\n * @param entityName Name of the entity\n * @returns True if entity exists\n */\n hasEntity(entityName) {\n return entityName in this.entityReferences;\n }\n /**\n * Find relation by source and target entities\n *\n * @param sourceEntity Source entity name\n * @param targetEntity Target entity name\n * @returns Relation model or undefined if not found\n */\n findRelation(sourceEntity, targetEntity) {\n return this.relations.find(relation => relation.source.entity === sourceEntity &&\n relation.target.entity === targetEntity);\n }\n /**\n * Get all relations for a specific entity\n *\n * @param entityName Entity name\n * @returns Array of relations involving the entity\n */\n getEntityRelations(entityName) {\n return this.relations.filter(relation => relation.source.entity === entityName ||\n relation.target.entity === entityName);\n }\n //#endregion\n //#region ---- Parent Navigation ----\n /**\n * Get parent module\n *\n * @returns Parent module model\n */\n getModule() {\n return this.parent;\n }\n /**\n * Get full aggregate path (module.aggregate)\n *\n * @returns Full path string\n */\n getPath() {\n return `${this.parent.name}.${this.name}`;\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Get aggregate statistics\n *\n * @returns Statistics object\n */\n getStatistics() {\n return {\n entityCount: Object.keys(this.entityReferences).length,\n relationCount: this.relations.length,\n actionCount: this.actions.length,\n validationCount: this.validations.length\n };\n }\n /**\n * Convert back to interface definition\n *\n * @returns Aggregate definition\n */\n toDefinition() {\n return {\n name: this.name,\n title: this.title,\n entities: this.entityReferences, // Return as reference map\n relations: this.relations.map(relation => relation.toDefinition()),\n validations: this.validations,\n actions: this.actions\n };\n }\n //#endregion\n //#region ---- Validation Methods ----\n /**\n * Validate the aggregate structure (synchronous validation only)\n *\n * @returns Array of validation errors\n */\n validate() {\n const errors = [];\n // Validate aggregate structure\n if (!this.name)\n errors.push('Aggregate name is required');\n if (!this.title)\n errors.push('Aggregate title is required');\n // Validate relations\n this.relations.forEach(relation => {\n const relationErrors = relation.validate();\n if (relationErrors.length > 0) {\n errors.push(...relationErrors.map(err => `Relation: ${err}`));\n }\n });\n // Validate entity references\n for (const [entityName, entityRef] of Object.entries(this.entityReferences)) {\n if (!entityRef || typeof entityRef !== 'string') {\n errors.push(`Invalid entity reference for '${entityName}': must be a non-empty string`);\n }\n }\n return errors;\n }\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvYWdncmVnYXRlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELHlDQUF5QztBQUV6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBUzFCLFlBQVksVUFBa0MsRUFBRSxNQUFXO1FBTjNDLGNBQVMsR0FBdUIsRUFBRSxDQUFDO1FBTy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDNUQsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQzFDLENBQUM7UUFFRix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFlBQVk7SUFFWixtREFBbUQ7SUFFbkQ7OztPQUdHO0lBQ0ssdUJBQXVCLENBQUMsUUFBYTtRQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFF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QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxVQUFVLCtCQUErQixDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBR0o7QUFFRCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQVmFsaWRhdGlvblJ1bGVzIH0gZnJvbSBcIkBhY29yZXgvcGxhdGZvcm0vY29yZVwiO1xuaW1wb3J0IHsgQVhQQWdncmVnYXRlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9hZ2dyZWdhdGUtZGVmaW5pdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgQVhQRG9tYWluQWN0aW9uIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL2Jhc2UudHlwZXNcIjtcbmltcG9ydCB7IEFYUFJlbGF0aW9uTW9kZWwgfSBmcm9tIFwiLi9yZWxhdGlvbi5tb2RlbFwiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEFYUEFnZ3JlZ2F0ZU1vZGVsICAgLS0tLVxuXG4vKipcbiAqIFNpbXBsZSBydW50aW1lIG1vZGVsIGZvciBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgd2l0aCBwYXJlbnQgcmVmZXJlbmNlcyBhbmQgbmF2aWdhdGlvbiBoZWxwZXJzLlxuICogXG4gKiBUaGlzIG1vZGVsIGlzIGEgcHVyZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHByb3ZpZGVzOlxuICogLSBBY2Nlc3MgdG8gYWdncmVnYXRlIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhXG4gKiAtIE5hdmlnYXRpb24gaGVscGVycyBmb3IgZmluZGluZyByZWxhdGlvbnMgYW5kIGVudGl0eSByZWZlcmVuY2VzXG4gKiAtIFBhcmVudCBtb2R1bGUgcmVmZXJlbmNlIGZvciBoaWVyYXJjaHkgbmF2aWdhdGlvblxuICogXG4gKiBBbGwgbG9hZGluZyBhbmQgcmVzb2x1dGlvbiBsb2dpYyBoYXMgYmVlbiBtb3ZlZCB0byBBWFBEb21haW5SZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFYUEFnZ3JlZ2F0ZU1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSByZWxhdGlvbnM6IEFYUFJlbGF0aW9uTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyByZWFkb25seSB2YWxpZGF0aW9uczogQVhQVmFsaWRhdGlvblJ1bGVzO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25zOiBBWFBEb21haW5BY3Rpb25bXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBhbnk7IC8vIFdpbGwgYmUgQVhQTW9kdWxlTW9kZWwsIHVzaW5nIGFueSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgcHVibGljIHJlYWRvbmx5IGVudGl0eVJlZmVyZW5jZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IC8vIEp1c3Qgc3RyaW5nIHJlZmVyZW5jZXNcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEFYUEFnZ3JlZ2F0ZURlZmluaXRpb24sIHBhcmVudDogYW55KSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRlZmluaXRpb24ubmFtZTtcbiAgICAgICAgdGhpcy50aXRsZSA9IGRlZmluaXRpb24udGl0bGU7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbnMgPSBkZWZpbml0aW9uLnZhbGlkYXRpb25zIHx8IFtdO1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSBkZWZpbml0aW9uLmFjdGlvbnMgfHwgW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgcmVsYXRpb25zIHdpdGggcGFyZW50IHJlZmVyZW5jZVxuICAgICAgICB0aGlzLnJlbGF0aW9ucyA9IChkZWZpbml0aW9uLnJlbGF0aW9ucyB8fCBbXSkubWFwKHJlbGF0aW9uRGVmID0+XG4gICAgICAgICAgICBuZXcgQVhQUmVsYXRpb25Nb2RlbChyZWxhdGlvbkRlZiwgdGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBFeHRyYWN0IGVudGl0eSByZWZlcmVuY2VzIC0gY29udmVydCBhbGwgZm9ybWF0cyB0byBzaW1wbGUgc3RyaW5nIG1hcFxuICAgICAgICB0aGlzLmVudGl0eVJlZmVyZW5jZXMgPSB0aGlzLmV4dHJhY3RFbnRpdHlSZWZlcmVuY2VzKGRlZmluaXRpb24uZW50aXRpZXMpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBFbnRpdHkgUmVmZXJlbmNlIEV4dHJhY3Rpb24gICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0IGVudGl0eSByZWZlcmVuY2VzIGZyb20gdmFyaW91cyBlbnRpdHkgZGVmaW5pdGlvbiBmb3JtYXRzXG4gICAgICogYW5kIGNvbnZlcnQgdG8gc2ltcGxlIHN0cmluZyBtYXBcbiAgICAgKi9cbiAgICBwcml2YXRlIGV4dHJhY3RFbnRpdHlSZWZlcmVuY2VzKGVudGl0aWVzOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICAgICAgaWYgKCFlbnRpdGllcykge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XG4gICAgICAgICAgICAvLyBGb3JtYXQgMTogQXJyYXkgb2YgZW50aXR5IGRlZmluaXRpb25zIC0gY29udmVydCB0byBzZWxmLXJlZmVyZW5jZXNcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNlbGYtcmVmZXJlbmNlIGZvcm1hdDogbW9kdWxlLmFnZ3JlZ2F0ZS5lbnRpdHlcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlc1tlbnRpdHkubmFtZV0gPSBgJHt0aGlzLnBhcmVudC5uYW1lfS4ke3RoaXMubmFtZX0uJHtlbnRpdHkubmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlbnRpdGllcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIEZvcm1hdCAyOiBPYmplY3Qgd2l0aCBzdHJpbmcgcmVmZXJlbmNlcyAtIHVzZSBhcy1pc1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZW50aXRpZXMgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgTmF2aWdhdGlvbiBIZWxwZXJzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IGVudGl0eSByZWZlcmVuY2UgYnkgbmFtZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIGVudGl0eVxuICAgICAqIEByZXR1cm5zIEVudGl0eSByZWZlcmVuY2Ugc3RyaW5nIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBnZXRFbnRpdHlSZWZlcmVuY2UoZW50aXR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50aXR5UmVmZXJlbmNlc1tlbnRpdHlOYW1lXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZnVsbCBwYXRoIGZvciBhbiBlbnRpdHkgaW4gdGhpcyBhZ2dyZWdhdGVcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBlbnRpdHlcbiAgICAgKiBAcmV0dXJucyBGdWxsIGVudGl0eSBwYXRoXG4gICAgICovXG4gICAgZ2V0RW50aXR5UGF0aChlbnRpdHlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXJlbnQubmFtZX0uJHt0aGlzLm5hbWV9LiR7ZW50aXR5TmFtZX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgYXZhaWxhYmxlIGVudGl0eSBuYW1lc1xuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGVudGl0eSBuYW1lc1xuICAgICAqL1xuICAgIGdldEVudGl0eU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZW50aXR5UmVmZXJlbmNlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZW50aXR5IGV4aXN0cyBpbiB0aGlzIGFnZ3JlZ2F0ZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIGVudGl0eVxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgZW50aXR5IGV4aXN0c1xuICAgICAqL1xuICAgIGhhc0VudGl0eShlbnRpdHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGVudGl0eU5hbWUgaW4gdGhpcy5lbnRpdHlSZWZlcmVuY2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgcmVsYXRpb24gYnkgc291cmNlIGFuZCB0YXJnZXQgZW50aXRpZXNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gc291cmNlRW50aXR5IFNvdXJjZSBlbnRpdHkgbmFtZVxuICAgICAqIEBwYXJhbSB0YXJnZXRFbnRpdHkgVGFyZ2V0IGVudGl0eSBuYW1lXG4gICAgICogQHJldHVybnMgUmVsYXRpb24gbW9kZWwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGZpbmRSZWxhdGlvbihzb3VyY2VFbnRpdHk6IHN0cmluZywgdGFyZ2V0RW50aXR5OiBzdHJpbmcpOiBBWFBSZWxhdGlvbk1vZGVsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpb25zLmZpbmQocmVsYXRpb24gPT5cbiAgICAgICAgICAgIHJlbGF0aW9uLnNvdXJjZS5lbnRpdHkgPT09IHNvdXJjZUVudGl0eSAmJlxuICAgICAgICAgICAgcmVsYXRpb24udGFyZ2V0LmVudGl0eSA9PT0gdGFyZ2V0RW50aXR5XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCByZWxhdGlvbnMgZm9yIGEgc3BlY2lmaWMgZW50aXR5XG4gICAgICogXG4gICAgICogQHBhcmFtIGVudGl0eU5hbWUgRW50aXR5IG5hbWVcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiByZWxhdGlvbnMgaW52b2x2aW5nIHRoZSBlbnRpdHlcbiAgICAgKi9cbiAgICBnZXRFbnRpdHlSZWxhdGlvbnMoZW50aXR5TmFtZTogc3RyaW5nKTogQVhQUmVsYXRpb25Nb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpb25zLmZpbHRlcihyZWxhdGlvbiA9PlxuICAgICAgICAgICAgcmVsYXRpb24uc291cmNlLmVudGl0eSA9PT0gZW50aXR5TmFtZSB8fFxuICAgICAgICAgICAgcmVsYXRpb24udGFyZ2V0LmVudGl0eSA9PT0gZW50aXR5TmFtZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQYXJlbnQgTmF2aWdhdGlvbiAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJlbnQgbW9kdWxlXG4gICAgICogXG4gICAgICogQHJldHVybnMgUGFyZW50IG1vZHVsZSBtb2RlbFxuICAgICAqL1xuICAgIGdldE1vZHVsZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGZ1bGwgYWdncmVnYXRlIHBhdGggKG1vZHVsZS5hZ2dyZWdhdGUpXG4gICAgICogXG4gICAgICogQHJldHVybnMgRnVsbCBwYXRoIHN0cmluZ1xuICAgICAqL1xuICAgIGdldFBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucGFyZW50Lm5hbWV9LiR7dGhpcy5uYW1lfWA7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBhZ2dyZWdhdGUgc3RhdGlzdGljc1xuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFN0YXRpc3RpY3Mgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcygpOiB7XG4gICAgICAgIGVudGl0eUNvdW50OiBudW1iZXI7XG4gICAgICAgIHJlbGF0aW9uQ291bnQ6IG51bWJlcjtcbiAgICAgICAgYWN0aW9uQ291bnQ6IG51bWJlcjtcbiAgICAgICAgdmFsaWRhdGlvbkNvdW50OiBudW1iZXI7XG4gICAgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbnRpdHlDb3VudDogT2JqZWN0LmtleXModGhpcy5lbnRpdHlSZWZlcmVuY2VzKS5sZW5ndGgsXG4gICAgICAgICAgICByZWxhdGlvbkNvdW50OiB0aGlzLnJlbGF0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICBhY3Rpb25Db3VudDogdGhpcy5hY3Rpb25zLmxlbmd0aCxcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db3VudDogdGhpcy52YWxpZGF0aW9ucy5sZW5ndGhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGJhY2sgdG8gaW50ZXJmYWNlIGRlZmluaXRpb25cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBBZ2dyZWdhdGUgZGVmaW5pdGlvblxuICAgICAqL1xuICAgIHRvRGVmaW5pdGlvbigpOiBBWFBBZ2dyZWdhdGVEZWZpbml0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgICAgICAgZW50aXRpZXM6IHRoaXMuZW50aXR5UmVmZXJlbmNlcywgLy8gUmV0dXJuIGFzIHJlZmVyZW5jZSBtYXBcbiAgICAgICAgICAgIHJlbGF0aW9uczogdGhpcy5yZWxhdGlvbnMubWFwKHJlbGF0aW9uID0+IHJlbGF0aW9uLnRvRGVmaW5pdGlvbigpKSxcbiAgICAgICAgICAgIHZhbGlkYXRpb25zOiB0aGlzLnZhbGlkYXRpb25zLFxuICAgICAgICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFZhbGlkYXRpb24gTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoZSBhZ2dyZWdhdGUgc3RydWN0dXJlIChzeW5jaHJvbm91cyB2YWxpZGF0aW9uIG9ubHkpXG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBhZ2dyZWdhdGUgc3RydWN0dXJlXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSBlcnJvcnMucHVzaCgnQWdncmVnYXRlIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgaWYgKCF0aGlzLnRpdGxlKSBlcnJvcnMucHVzaCgnQWdncmVnYXRlIHRpdGxlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgcmVsYXRpb25zXG4gICAgICAgIHRoaXMucmVsYXRpb25zLmZvckVhY2gocmVsYXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25FcnJvcnMgPSByZWxhdGlvbi52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHJlbGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCguLi5yZWxhdGlvbkVycm9ycy5tYXAoZXJyID0+IGBSZWxhdGlvbjogJHtlcnJ9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBlbnRpdHkgcmVmZXJlbmNlc1xuICAgICAgICBmb3IgKGNvbnN0IFtlbnRpdHlOYW1lLCBlbnRpdHlSZWZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZW50aXR5UmVmZXJlbmNlcykpIHtcbiAgICAgICAgICAgIGlmICghZW50aXR5UmVmIHx8IHR5cGVvZiBlbnRpdHlSZWYgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYEludmFsaWQgZW50aXR5IHJlZmVyZW5jZSBmb3IgJyR7ZW50aXR5TmFtZX0nOiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuLy8jZW5kcmVnaW9uICJdfQ==","import { AXPAggregateModel } from \"./aggregate.model\";\n//#region ---- AXPModuleModel ----\n/**\n * Simple runtime model for module definitions with navigation helpers.\n *\n * This model is a pure data structure that provides:\n * - Access to module properties and metadata\n * - Navigation helpers for finding aggregates\n * - Hierarchy navigation and path generation\n *\n * All loading and resolution logic has been moved to AXPDomainRegistry.\n */\nexport class AXPModuleModel {\n constructor(definition) {\n this.aggregates = [];\n this.name = definition.name;\n this.title = definition.title;\n // Initialize aggregates with parent reference (simplified constructor)\n this.aggregates = (definition.aggregates || []).map(aggDef => new AXPAggregateModel(aggDef, this));\n }\n //#endregion\n //#region ---- Navigation Helpers ----\n /**\n * Find aggregate by name\n *\n * @param name Aggregate name\n * @returns Aggregate model or undefined if not found\n */\n findAggregate(name) {\n return this.aggregates.find(agg => agg.name === name);\n }\n /**\n * Get all aggregates\n *\n * @returns Array of all aggregate models\n */\n getAllAggregates() {\n return [...this.aggregates];\n }\n /**\n * Check if aggregate exists in this module\n *\n * @param name Aggregate name\n * @returns True if aggregate exists\n */\n hasAggregate(name) {\n return this.aggregates.some(agg => agg.name === name);\n }\n /**\n * Get all aggregate names\n *\n * @returns Array of aggregate names\n */\n getAggregateNames() {\n return this.aggregates.map(agg => agg.name);\n }\n /**\n * Find entity reference across all aggregates\n *\n * @param entityName Entity name to search for\n * @returns Object with aggregate and entity reference, or undefined if not found\n */\n findEntityReference(entityName) {\n for (const aggregate of this.aggregates) {\n const entityReference = aggregate.getEntityReference(entityName);\n if (entityReference) {\n return { aggregate, entityReference };\n }\n }\n return undefined;\n }\n /**\n * Get entity path for a specific entity in a specific aggregate\n *\n * @param aggregateName Aggregate name\n * @param entityName Entity name\n * @returns Full entity path\n */\n getEntityPath(aggregateName, entityName) {\n return `${this.name}.${aggregateName}.${entityName}`;\n }\n /**\n * Get aggregate path\n *\n * @param aggregateName Aggregate name\n * @returns Full aggregate path\n */\n getAggregatePath(aggregateName) {\n return `${this.name}.${aggregateName}`;\n }\n //#endregion\n //#region ---- Query Methods ----\n /**\n * Get all entity references across all aggregates\n *\n * @returns Map of entity name to full path\n */\n getAllEntityReferences() {\n const allReferences = {};\n for (const aggregate of this.aggregates) {\n const aggregateReferences = aggregate.entityReferences;\n for (const [entityName, entityRef] of Object.entries(aggregateReferences)) {\n // Use full path as key to avoid conflicts\n const fullKey = `${aggregate.name}.${entityName}`;\n allReferences[fullKey] = entityRef;\n }\n }\n return allReferences;\n }\n /**\n * Get all relations across all aggregates\n *\n * @returns Array of all relation models\n */\n getAllRelations() {\n const allRelations = [];\n for (const aggregate of this.aggregates) {\n for (const relation of aggregate.relations) {\n allRelations.push({ aggregate, relation });\n }\n }\n return allRelations;\n }\n //#endregion\n //#region ---- Validation Methods ----\n /**\n * Validate the module structure (synchronous validation only)\n *\n * @returns Array of validation errors\n */\n validate() {\n const errors = [];\n // Validate module structure\n if (!this.name)\n errors.push('Module name is required');\n if (!this.title)\n errors.push('Module title is required');\n // Check for duplicate aggregate names\n const aggregateNames = this.aggregates.map(agg => agg.name);\n const duplicateNames = aggregateNames.filter((name, index) => aggregateNames.indexOf(name) !== index);\n if (duplicateNames.length > 0) {\n errors.push(`Duplicate aggregate names: ${duplicateNames.join(', ')}`);\n }\n // Validate aggregates\n for (const aggregate of this.aggregates) {\n const aggErrors = aggregate.validate();\n if (aggErrors.length > 0) {\n errors.push(...aggErrors.map((err) => `${aggregate.name}: ${err}`));\n }\n }\n return errors;\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Get module statistics\n *\n * @returns Statistics object\n */\n getStatistics() {\n const aggregateStats = this.aggregates.map(agg => agg.getStatistics());\n return {\n aggregateCount: this.aggregates.length,\n entityCount: aggregateStats.reduce((sum, stat) => sum + stat.entityCount, 0),\n relationCount: aggregateStats.reduce((sum, stat) => sum + stat.relationCount, 0),\n actionCount: aggregateStats.reduce((sum, stat) => sum + stat.actionCount, 0),\n validationCount: aggregateStats.reduce((sum, stat) => sum + stat.validationCount, 0)\n };\n }\n /**\n * Convert back to interface definition\n *\n * @returns Module definition\n */\n toDefinition() {\n return {\n name: this.name,\n title: this.title,\n aggregates: this.aggregates.map(agg => agg.toDefinition())\n };\n }\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvbW9kdWxlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUt2QixZQUFZLFVBQStCO1FBRjNCLGVBQVUsR0FBd0IsRUFBRSxDQUFDO1FBR2pELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFOUIsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUN6RCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FDdEMsQ0FBQztJQUNOLENBQUM7SUFFRCxZQUFZO0lBRVosMENBQTBDO0lBRTFDOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLElBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0I7UUFDWixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxD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YSxFQUFFLENBQUMsQ0FBQztZQUNoRixXQUFXLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM1RSxlQUFlLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztTQUN2RixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZO1FBQ1IsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDN0QsQ0FBQztJQUNOLENBQUM7Q0FHSjtBQUVELGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBNb2R1bGVEZWZpbml0aW9uIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL21vZHVsZS1kZWZpbml0aW9uLnR5cGVzXCI7XG5pbXBvcnQgeyBBWFBBZ2dyZWdhdGVNb2RlbCB9IGZyb20gXCIuL2FnZ3JlZ2F0ZS5tb2RlbFwiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEFYUE1vZHVsZU1vZGVsICAgLS0tLVxuXG4vKipcbiAqIFNpbXBsZSBydW50aW1lIG1vZGVsIGZvciBtb2R1bGUgZGVmaW5pdGlvbnMgd2l0aCBuYXZpZ2F0aW9uIGhlbHBlcnMuXG4gKiBcbiAqIFRoaXMgbW9kZWwgaXMgYSBwdXJlIGRhdGEgc3RydWN0dXJlIHRoYXQgcHJvdmlkZXM6XG4gKiAtIEFjY2VzcyB0byBtb2R1bGUgcHJvcGVydGllcyBhbmQgbWV0YWRhdGFcbiAqIC0gTmF2aWdhdGlvbiBoZWxwZXJzIGZvciBmaW5kaW5nIGFnZ3JlZ2F0ZXNcbiAqIC0gSGllcmFyY2h5IG5hdmlnYXRpb24gYW5kIHBhdGggZ2VuZXJhdGlvblxuICogXG4gKiBBbGwgbG9hZGluZyBhbmQgcmVzb2x1dGlvbiBsb2dpYyBoYXMgYmVlbiBtb3ZlZCB0byBBWFBEb21haW5SZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFYUE1vZHVsZU1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBhZ2dyZWdhdGVzOiBBWFBBZ2dyZWdhdGVNb2RlbFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBBWFBNb2R1bGVEZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRlZmluaXRpb24ubmFtZTtcbiAgICAgICAgdGhpcy50aXRsZSA9IGRlZmluaXRpb24udGl0bGU7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBhZ2dyZWdhdGVzIHdpdGggcGFyZW50IHJlZmVyZW5jZSAoc2ltcGxpZmllZCBjb25zdHJ1Y3RvcilcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVzID0gKGRlZmluaXRpb24uYWdncmVnYXRlcyB8fCBbXSkubWFwKGFnZ0RlZiA9PlxuICAgICAgICAgICAgbmV3IEFYUEFnZ3JlZ2F0ZU1vZGVsKGFnZ0RlZiwgdGhpcylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgTmF2aWdhdGlvbiBIZWxwZXJzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogRmluZCBhZ2dyZWdhdGUgYnkgbmFtZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBuYW1lIEFnZ3JlZ2F0ZSBuYW1lXG4gICAgICogQHJldHVybnMgQWdncmVnYXRlIG1vZGVsIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBmaW5kQWdncmVnYXRlKG5hbWU6IHN0cmluZyk6IEFYUEFnZ3JlZ2F0ZU1vZGVsIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWdncmVnYXRlcy5maW5kKGFnZyA9PiBhZ2cubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBhZ2dyZWdhdGVzXG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgYWxsIGFnZ3JlZ2F0ZSBtb2RlbHNcbiAgICAgKi9cbiAgICBnZXRBbGxBZ2dyZWdhdGVzKCk6IEFYUEFnZ3JlZ2F0ZU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuYWdncmVnYXRlc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYWdncmVnYXRlIGV4aXN0cyBpbiB0aGlzIG1vZHVsZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBuYW1lIEFnZ3JlZ2F0ZSBuYW1lXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBhZ2dyZWdhdGUgZXhpc3RzXG4gICAgICovXG4gICAgaGFzQWdncmVnYXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGVzLnNvbWUoYWdnID0+IGFnZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGFnZ3JlZ2F0ZSBuYW1lc1xuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGFnZ3JlZ2F0ZSBuYW1lc1xuICAgICAqL1xuICAgIGdldEFnZ3JlZ2F0ZU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWdncmVnYXRlcy5tYXAoYWdnID0+IGFnZy5uYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGVudGl0eSByZWZlcmVuY2UgYWNyb3NzIGFsbCBhZ2dyZWdhdGVzXG4gICAgICogXG4gICAgICogQHBhcmFtIGVudGl0eU5hbWUgRW50aXR5IG5hbWUgdG8gc2VhcmNoIGZvclxuICAgICAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFnZ3JlZ2F0ZSBhbmQgZW50aXR5IHJlZmVyZW5jZSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGZpbmRFbnRpdHlSZWZlcmVuY2UoZW50aXR5TmFtZTogc3RyaW5nKTogeyBhZ2dyZWdhdGU6IEFYUEFnZ3JlZ2F0ZU1vZGVsOyBlbnRpdHlSZWZlcmVuY2U6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgZm9yIChjb25zdCBhZ2dyZWdhdGUgb2YgdGhpcy5hZ2dyZWdhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHlSZWZlcmVuY2UgPSBhZ2dyZWdhdGUuZ2V0RW50aXR5UmVmZXJlbmNlKGVudGl0eU5hbWUpO1xuICAgICAgICAgICAgaWYgKGVudGl0eVJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGFnZ3JlZ2F0ZSwgZW50aXR5UmVmZXJlbmNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZW50aXR5IHBhdGggZm9yIGEgc3BlY2lmaWMgZW50aXR5IGluIGEgc3BlY2lmaWMgYWdncmVnYXRlXG4gICAgICogXG4gICAgICogQHBhcmFtIGFnZ3JlZ2F0ZU5hbWUgQWdncmVnYXRlIG5hbWVcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZSBFbnRpdHkgbmFtZVxuICAgICAqIEByZXR1cm5zIEZ1bGwgZW50aXR5IHBhdGhcbiAgICAgKi9cbiAgICBnZXRFbnRpdHlQYXRoKGFnZ3JlZ2F0ZU5hbWU6IHN0cmluZywgZW50aXR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0uJHthZ2dyZWdhdGVOYW1lfS4ke2VudGl0eU5hbWV9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWdncmVnYXRlIHBhdGhcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYWdncmVnYXRlTmFtZSBBZ2dyZWdhdGUgbmFtZVxuICAgICAqIEByZXR1cm5zIEZ1bGwgYWdncmVnYXRlIHBhdGhcbiAgICAgKi9cbiAgICBnZXRBZ2dyZWdhdGVQYXRoKGFnZ3JlZ2F0ZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9LiR7YWdncmVnYXRlTmFtZX1gO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBlbnRpdHkgcmVmZXJlbmNlcyBhY3Jvc3MgYWxsIGFnZ3JlZ2F0ZXNcbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBNYXAgb2YgZW50aXR5IG5hbWUgdG8gZnVsbCBwYXRoXG4gICAgICovXG4gICAgZ2V0QWxsRW50aXR5UmVmZXJlbmNlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgYWxsUmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgYWdncmVnYXRlIG9mIHRoaXMuYWdncmVnYXRlcykge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlUmVmZXJlbmNlcyA9IGFnZ3JlZ2F0ZS5lbnRpdHlSZWZlcmVuY2VzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZW50aXR5TmFtZSwgZW50aXR5UmVmXSBvZiBPYmplY3QuZW50cmllcyhhZ2dyZWdhdGVSZWZlcmVuY2VzKSkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBmdWxsIHBhdGggYXMga2V5IHRvIGF2b2lkIGNvbmZsaWN0c1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBgJHthZ2dyZWdhdGUubmFtZX0uJHtlbnRpdHlOYW1lfWA7XG4gICAgICAgICAgICAgICAgYWxsUmVmZXJlbmNlc1tmdWxsS2V5XSA9IGVudGl0eVJlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbGxSZWZlcmVuY2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgcmVsYXRpb25zIGFjcm9zcyBhbGwgYWdncmVnYXRlc1xuICAgICAqIFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGFsbCByZWxhdGlvbiBtb2RlbHNcbiAgICAgKi9cbiAgICBnZXRBbGxSZWxhdGlvbnMoKTogQXJyYXk8eyBhZ2dyZWdhdGU6IEFYUEFnZ3JlZ2F0ZU1vZGVsOyByZWxhdGlvbjogYW55IH0+IHtcbiAgICAgICAgY29uc3QgYWxsUmVsYXRpb25zOiBBcnJheTx7IGFnZ3JlZ2F0ZTogQVhQQWdncmVnYXRlTW9kZWw7IHJlbGF0aW9uOiBhbnkgfT4gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFnZ3JlZ2F0ZSBvZiB0aGlzLmFnZ3JlZ2F0ZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVsYXRpb24gb2YgYWdncmVnYXRlLnJlbGF0aW9ucykge1xuICAgICAgICAgICAgICAgIGFsbFJlbGF0aW9ucy5wdXNoKHsgYWdncmVnYXRlLCByZWxhdGlvbiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbGxSZWxhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFZhbGlkYXRpb24gTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoZSBtb2R1bGUgc3RydWN0dXJlIChzeW5jaHJvbm91cyB2YWxpZGF0aW9uIG9ubHkpXG4gICAgICogXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBtb2R1bGUgc3RydWN0dXJlXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSBlcnJvcnMucHVzaCgnTW9kdWxlIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgaWYgKCF0aGlzLnRpdGxlKSBlcnJvcnMucHVzaCgnTW9kdWxlIHRpdGxlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBhZ2dyZWdhdGUgbmFtZXNcbiAgICAgICAgY29uc3QgYWdncmVnYXRlTmFtZXMgPSB0aGlzLmFnZ3JlZ2F0ZXMubWFwKGFnZyA9PiBhZ2cubmFtZSk7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gYWdncmVnYXRlTmFtZXMuZmlsdGVyKChuYW1lLCBpbmRleCkgPT4gYWdncmVnYXRlTmFtZXMuaW5kZXhPZihuYW1lKSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBhZ2dyZWdhdGUgbmFtZXM6ICR7ZHVwbGljYXRlTmFtZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGFnZ3JlZ2F0ZXNcbiAgICAgICAgZm9yIChjb25zdCBhZ2dyZWdhdGUgb2YgdGhpcy5hZ2dyZWdhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dFcnJvcnMgPSBhZ2dyZWdhdGUudmFsaWRhdGUoKTtcbiAgICAgICAgICAgIGlmIChhZ2dFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLmFnZ0Vycm9ycy5tYXAoKGVycjogc3RyaW5nKSA9PiBgJHthZ2dyZWdhdGUubmFtZX06ICR7ZXJyfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBtb2R1bGUgc3RhdGlzdGljc1xuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFN0YXRpc3RpY3Mgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcygpOiB7XG4gICAgICAgIGFnZ3JlZ2F0ZUNvdW50OiBudW1iZXI7XG4gICAgICAgIGVudGl0eUNvdW50OiBudW1iZXI7XG4gICAgICAgIHJlbGF0aW9uQ291bnQ6IG51bWJlcjtcbiAgICAgICAgYWN0aW9uQ291bnQ6IG51bWJlcjtcbiAgICAgICAgdmFsaWRhdGlvbkNvdW50OiBudW1iZXI7XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZVN0YXRzID0gdGhpcy5hZ2dyZWdhdGVzLm1hcChhZ2cgPT4gYWdnLmdldFN0YXRpc3RpY3MoKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUNvdW50OiB0aGlzLmFnZ3JlZ2F0ZXMubGVuZ3RoLFxuICAgICAgICAgICAgZW50aXR5Q291bnQ6IGFnZ3JlZ2F0ZVN0YXRzLnJlZHVjZSgoc3VtLCBzdGF0KSA9PiBzdW0gKyBzdGF0LmVudGl0eUNvdW50LCAwKSxcbiAgICAgICAgICAgIHJlbGF0aW9uQ291bnQ6IGFnZ3JlZ2F0ZVN0YXRzLnJlZHVjZSgoc3VtLCBzdGF0KSA9PiBzdW0gKyBzdGF0LnJlbGF0aW9uQ291bnQsIDApLFxuICAgICAgICAgICAgYWN0aW9uQ291bnQ6IGFnZ3JlZ2F0ZVN0YXRzLnJlZHVjZSgoc3VtLCBzdGF0KSA9PiBzdW0gKyBzdGF0LmFjdGlvbkNvdW50LCAwKSxcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db3VudDogYWdncmVnYXRlU3RhdHMucmVkdWNlKChzdW0sIHN0YXQpID0+IHN1bSArIHN0YXQudmFsaWRhdGlvbkNvdW50LCAwKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYmFjayB0byBpbnRlcmZhY2UgZGVmaW5pdGlvblxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIE1vZHVsZSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgdG9EZWZpbml0aW9uKCk6IEFYUE1vZHVsZURlZmluaXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICBhZ2dyZWdhdGVzOiB0aGlzLmFnZ3JlZ2F0ZXMubWFwKGFnZyA9PiBhZ2cudG9EZWZpbml0aW9uKCkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","//#region ---- AXPEntityFieldModel ----\n/**\n * Runtime model for entity field definitions with parent references and helper methods\n */\nexport class AXPEntityFieldModel {\n constructor(definition, parent, schemaService) {\n this.name = definition.name;\n this.title = definition.title;\n this.description = definition.description;\n this.validations = definition.validations;\n this.actions = definition.actions;\n this.features = definition.features;\n this.defaultValue = definition.defaultValue;\n this.parent = parent;\n this.schemaService = schemaService;\n // Store schema name for toDefinition\n this.schemaName = definition.schema;\n // Resolve schema by name from schema service\n this.schema = schemaService.resolveSync(definition.schema);\n }\n //#endregion\n //#region ---- Feature Check Methods ----\n /**\n * Check if field is nullable\n */\n isNullable() {\n return this.features?.nullable ?? false;\n }\n /**\n * Check if field is readonly\n */\n isReadonly() {\n return this.features?.readOnly ?? false;\n }\n /**\n * Check if field is required (has required validation)\n */\n isRequired() {\n return this.validations?.some(validation => validation.rule === 'required') ?? false;\n }\n /**\n * Check if field is searchable\n */\n isSearchable() {\n return this.schema.features?.searchable?.enabled ?? false;\n }\n /**\n * Check if field supports full text search\n */\n isFullTextSearchable() {\n return this.schema.features?.searchable?.fullText ?? false;\n }\n /**\n * Check if field is filterable\n */\n isFilterable() {\n return this.schema.features?.filterable?.enabled ?? false;\n }\n /**\n * Check if field has inline filtering\n */\n hasInlineFiltering() {\n return this.schema.features?.filterable?.inline ?? false;\n }\n /**\n * Check if field is sortable\n */\n isSortable() {\n return this.schema.features?.sortable?.enabled ?? false;\n }\n /**\n * Check if field is auditable\n */\n isAuditable() {\n return this.schema.features?.auditable?.enabled ?? false;\n }\n //#endregion\n //#region ---- Schema Methods ----\n /**\n * Get the schema name\n */\n getSchemaName() {\n return this.schemaName;\n }\n /**\n * Get schema info from registry\n */\n getSchemaInfo() {\n return this.schemaService.getSchemaInfo(this.schemaName);\n }\n /**\n * Re-resolve schema from registry (useful after schema updates)\n */\n refreshSchema() {\n const newSchema = this.schemaService.resolveSync(this.schemaName);\n this.schema = newSchema;\n this.schema.parent = this;\n }\n //#endregion\n //#region ---- Navigation Methods ----\n /**\n * Get parent entity\n */\n getEntity() {\n return this.parent;\n }\n /**\n * Get parent aggregate\n */\n getAggregate() {\n return this.parent?.parent;\n }\n /**\n * Get parent module\n */\n getModule() {\n return this.parent?.parent?.parent;\n }\n /**\n * Get full path (module.aggregate.entity.field)\n */\n getPath() {\n return `${this.parent.parent.parent.name}.${this.parent.parent.name}.${this.parent.name}.${this.name}`;\n }\n //#endregion\n //#region ---- Validation Methods ----\n /**\n * Validate the field structure\n */\n async validate() {\n const errors = [];\n // Validate field structure\n if (!this.name)\n errors.push('Field name is required');\n if (!this.title)\n errors.push('Field title is required');\n // Validate schema name\n if (!this.schemaName) {\n errors.push('Schema name is required');\n }\n else {\n if (!this.schemaService.isRegistered(this.schemaName)) {\n errors.push(`Schema '${this.schemaName}' is not registered`);\n }\n }\n // Validate schema if it exists\n if (this.schema) {\n const schemaErrors = await this.schema.validate();\n if (schemaErrors.length > 0) {\n errors.push(...schemaErrors.map(err => `Schema: ${err}`));\n }\n }\n return errors;\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Get field statistics\n */\n getStatistics() {\n return {\n hasValidations: !!this.validations && this.validations.length > 0,\n hasActions: !!this.actions && this.actions.length > 0,\n hasFeatures: !!this.features,\n hasDefaultValue: this.defaultValue !== undefined,\n validationCount: this.validations?.length ?? 0,\n actionCount: this.actions?.length ?? 0\n };\n }\n /**\n * Get field capabilities\n */\n getCapabilities() {\n return {\n searchable: this.isSearchable(),\n filterable: this.isFilterable(),\n sortable: this.isSortable(),\n auditable: this.isAuditable(),\n nullable: this.isNullable(),\n readonly: this.isReadonly(),\n required: this.isRequired()\n };\n }\n /**\n * Convert back to interface definition\n */\n toDefinition() {\n return {\n name: this.name,\n title: this.title,\n description: this.description,\n validations: this.validations,\n actions: this.actions,\n features: this.features,\n defaultValue: this.defaultValue,\n schema: this.schemaName\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWZpZWxkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvZW50aXR5LWZpZWxkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLDJDQUEyQztBQUUzQzs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFhNUIsWUFBWSxVQUFvQyxFQUFFLE1BQVcsRUFBRSxhQUErQjtRQUMxRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUVwQyw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsWUFBWTtJQUVaLDZDQUE2QztJQUU3Qzs7T0FFRztJQUNJLFVBQVU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FB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O1lBQ3JELFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUztZQUNoRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQztZQUM5QyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztTQUN6QyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQVNsQixPQUFPO1lBQ0gsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7U0FDOUIsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzFCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBWYWxpZGF0aW9uUnVsZXMgfSBmcm9tIFwiQGFjb3JleC9wbGF0Zm9ybS9jb3JlXCI7XG5pbXBvcnQgeyBBWFBFbnRpdHlGaWVsZERlZmluaXRpb24sIEFYUEVudGl0eUZpZWxkRmVhdHVyZXMgfSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZW50aXR5LWRlZmluaXRpb24udHlwZXNcIjtcbmltcG9ydCB7IEFYUERvbWFpbkFjdGlvbiB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9iYXNlLnR5cGVzXCI7XG5pbXBvcnQgeyBBWFBTY2hlbWFNb2RlbCB9IGZyb20gXCIuL3NjaGVtYS5tb2RlbFwiO1xuaW1wb3J0IHsgQVhQU2NoZW1hU2VydmljZSB9IGZyb20gXCIuLi9yZWdpc3RyaWVzL3NjaGVtYVwiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEFYUEVudGl0eUZpZWxkTW9kZWwgICAtLS0tXG5cbi8qKlxuICogUnVudGltZSBtb2RlbCBmb3IgZW50aXR5IGZpZWxkIGRlZmluaXRpb25zIHdpdGggcGFyZW50IHJlZmVyZW5jZXMgYW5kIGhlbHBlciBtZXRob2RzXG4gKi9cbmV4cG9ydCBjbGFzcyBBWFBFbnRpdHlGaWVsZE1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRhdGlvbnM/OiBBWFBWYWxpZGF0aW9uUnVsZXM7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbnM/OiBBWFBEb21haW5BY3Rpb25bXTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmVhdHVyZXM/OiBBWFBFbnRpdHlGaWVsZEZlYXR1cmVzO1xuICAgIHB1YmxpYyByZWFkb25seSBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYTogQVhQU2NoZW1hTW9kZWw7XG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYU5hbWU6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHNjaGVtYSBuYW1lIGZvciB0b0RlZmluaXRpb25cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBhbnk7IC8vIFdpbGwgYmUgQVhQRW50aXR5TW9kZWwsIHVzaW5nIGFueSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYVNlcnZpY2U6IEFYUFNjaGVtYVNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBBWFBFbnRpdHlGaWVsZERlZmluaXRpb24sIHBhcmVudDogYW55LCBzY2hlbWFTZXJ2aWNlOiBBWFBTY2hlbWFTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRlZmluaXRpb24ubmFtZTtcbiAgICAgICAgdGhpcy50aXRsZSA9IGRlZmluaXRpb24udGl0bGU7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZWZpbml0aW9uLmRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25zID0gZGVmaW5pdGlvbi52YWxpZGF0aW9ucztcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gZGVmaW5pdGlvbi5hY3Rpb25zO1xuICAgICAgICB0aGlzLmZlYXR1cmVzID0gZGVmaW5pdGlvbi5mZWF0dXJlcztcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuc2NoZW1hU2VydmljZSA9IHNjaGVtYVNlcnZpY2U7XG5cbiAgICAgICAgLy8gU3RvcmUgc2NoZW1hIG5hbWUgZm9yIHRvRGVmaW5pdGlvblxuICAgICAgICB0aGlzLnNjaGVtYU5hbWUgPSBkZWZpbml0aW9uLnNjaGVtYTtcblxuICAgICAgICAvLyBSZXNvbHZlIHNjaGVtYSBieSBuYW1lIGZyb20gc2NoZW1hIHNlcnZpY2VcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWFTZXJ2aWNlLnJlc29sdmVTeW5jKGRlZmluaXRpb24uc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRmVhdHVyZSBDaGVjayBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZmllbGQgaXMgbnVsbGFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNOdWxsYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZXM/Lm51bGxhYmxlID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGZpZWxkIGlzIHJlYWRvbmx5XG4gICAgICovXG4gICAgcHVibGljIGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmVzPy5yZWFkT25seSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBmaWVsZCBpcyByZXF1aXJlZCAoaGFzIHJlcXVpcmVkIHZhbGlkYXRpb24pXG4gICAgICovXG4gICAgcHVibGljIGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25zPy5zb21lKHZhbGlkYXRpb24gPT4gdmFsaWRhdGlvbi5ydWxlID09PSAncmVxdWlyZWQnKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBmaWVsZCBpcyBzZWFyY2hhYmxlXG4gICAgICovXG4gICAgcHVibGljIGlzU2VhcmNoYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmZlYXR1cmVzPy5zZWFyY2hhYmxlPy5lbmFibGVkID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGZpZWxkIHN1cHBvcnRzIGZ1bGwgdGV4dCBzZWFyY2hcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGdWxsVGV4dFNlYXJjaGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5mZWF0dXJlcz8uc2VhcmNoYWJsZT8uZnVsbFRleHQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZmllbGQgaXMgZmlsdGVyYWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBpc0ZpbHRlcmFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5mZWF0dXJlcz8uZmlsdGVyYWJsZT8uZW5hYmxlZCA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBmaWVsZCBoYXMgaW5saW5lIGZpbHRlcmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBoYXNJbmxpbmVGaWx0ZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5mZWF0dXJlcz8uZmlsdGVyYWJsZT8uaW5saW5lID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGZpZWxkIGlzIHNvcnRhYmxlXG4gICAgICovXG4gICAgcHVibGljIGlzU29ydGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5mZWF0dXJlcz8uc29ydGFibGU/LmVuYWJsZWQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZmllbGQgaXMgYXVkaXRhYmxlXG4gICAgICovXG4gICAgcHVibGljIGlzQXVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWEuZmVhdHVyZXM/LmF1ZGl0YWJsZT8uZW5hYmxlZCA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgU2NoZW1hIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHNjaGVtYSBuYW1lXG4gICAgICovXG4gICAgcHVibGljIGdldFNjaGVtYU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2NoZW1hIGluZm8gZnJvbSByZWdpc3RyeVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTY2hlbWFJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hSW5mbyh0aGlzLnNjaGVtYU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlLXJlc29sdmUgc2NoZW1hIGZyb20gcmVnaXN0cnkgKHVzZWZ1bCBhZnRlciBzY2hlbWEgdXBkYXRlcylcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVmcmVzaFNjaGVtYSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3U2NoZW1hID0gdGhpcy5zY2hlbWFTZXJ2aWNlLnJlc29sdmVTeW5jKHRoaXMuc2NoZW1hTmFtZSk7XG4gICAgICAgICh0aGlzLnNjaGVtYSBhcyBhbnkpID0gbmV3U2NoZW1hO1xuICAgICAgICAodGhpcy5zY2hlbWEgYXMgYW55KS5wYXJlbnQgPSB0aGlzO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBOYXZpZ2F0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgcGFyZW50IGVudGl0eVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRFbnRpdHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJlbnQgYWdncmVnYXRlXG4gICAgICovXG4gICAgcHVibGljIGdldEFnZ3JlZ2F0ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ/LnBhcmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcGFyZW50IG1vZHVsZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRNb2R1bGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Py5wYXJlbnQ/LnBhcmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZnVsbCBwYXRoIChtb2R1bGUuYWdncmVnYXRlLmVudGl0eS5maWVsZClcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGF0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXJlbnQucGFyZW50LnBhcmVudC5uYW1lfS4ke3RoaXMucGFyZW50LnBhcmVudC5uYW1lfS4ke3RoaXMucGFyZW50Lm5hbWV9LiR7dGhpcy5uYW1lfWA7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFZhbGlkYXRpb24gTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIHRoZSBmaWVsZCBzdHJ1Y3R1cmVcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmllbGQgc3RydWN0dXJlXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSBlcnJvcnMucHVzaCgnRmllbGQgbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICBpZiAoIXRoaXMudGl0bGUpIGVycm9ycy5wdXNoKCdGaWVsZCB0aXRsZSBpcyByZXF1aXJlZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHNjaGVtYSBuYW1lXG4gICAgICAgIGlmICghdGhpcy5zY2hlbWFOYW1lKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCgnU2NoZW1hIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zY2hlbWFTZXJ2aWNlLmlzUmVnaXN0ZXJlZCh0aGlzLnNjaGVtYU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYFNjaGVtYSAnJHt0aGlzLnNjaGVtYU5hbWV9JyBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgc2NoZW1hIGlmIGl0IGV4aXN0c1xuICAgICAgICBpZiAodGhpcy5zY2hlbWEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYUVycm9ycyA9IGF3YWl0IHRoaXMuc2NoZW1hLnZhbGlkYXRlKCk7XG4gICAgICAgICAgICBpZiAoc2NoZW1hRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCguLi5zY2hlbWFFcnJvcnMubWFwKGVyciA9PiBgU2NoZW1hOiAke2Vycn1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBVdGlsaXR5IE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZmllbGQgc3RhdGlzdGljc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0aXN0aWNzKCk6IHtcbiAgICAgICAgaGFzVmFsaWRhdGlvbnM6IGJvb2xlYW47XG4gICAgICAgIGhhc0FjdGlvbnM6IGJvb2xlYW47XG4gICAgICAgIGhhc0ZlYXR1cmVzOiBib29sZWFuO1xuICAgICAgICBoYXNEZWZhdWx0VmFsdWU6IGJvb2xlYW47XG4gICAgICAgIHZhbGlkYXRpb25Db3VudDogbnVtYmVyO1xuICAgICAgICBhY3Rpb25Db3VudDogbnVtYmVyO1xuICAgIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGFzVmFsaWRhdGlvbnM6ICEhdGhpcy52YWxpZGF0aW9ucyAmJiB0aGlzLnZhbGlkYXRpb25zLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBoYXNBY3Rpb25zOiAhIXRoaXMuYWN0aW9ucyAmJiB0aGlzLmFjdGlvbnMubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIGhhc0ZlYXR1cmVzOiAhIXRoaXMuZmVhdHVyZXMsXG4gICAgICAgICAgICBoYXNEZWZhdWx0VmFsdWU6IHRoaXMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICB2YWxpZGF0aW9uQ291bnQ6IHRoaXMudmFsaWRhdGlvbnM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgYWN0aW9uQ291bnQ6IHRoaXMuYWN0aW9ucz8ubGVuZ3RoID8/IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZmllbGQgY2FwYWJpbGl0aWVzXG4gICAgICovXG4gICAgcHVibGljIGdldENhcGFiaWxpdGllcygpOiB7XG4gICAgICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgICAgIGZpbHRlcmFibGU6IGJvb2xlYW47XG4gICAgICAgIHNvcnRhYmxlOiBib29sZWFuO1xuICAgICAgICBhdWRpdGFibGU6IGJvb2xlYW47XG4gICAgICAgIG51bGxhYmxlOiBib29sZWFuO1xuICAgICAgICByZWFkb25seTogYm9vbGVhbjtcbiAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWFyY2hhYmxlOiB0aGlzLmlzU2VhcmNoYWJsZSgpLFxuICAgICAgICAgICAgZmlsdGVyYWJsZTogdGhpcy5pc0ZpbHRlcmFibGUoKSxcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLmlzU29ydGFibGUoKSxcbiAgICAgICAgICAgIGF1ZGl0YWJsZTogdGhpcy5pc0F1ZGl0YWJsZSgpLFxuICAgICAgICAgICAgbnVsbGFibGU6IHRoaXMuaXNOdWxsYWJsZSgpLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuaXNSZWFkb25seSgpLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRoaXMuaXNSZXF1aXJlZCgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBiYWNrIHRvIGludGVyZmFjZSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgcHVibGljIHRvRGVmaW5pdGlvbigpOiBBWFBFbnRpdHlGaWVsZERlZmluaXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHZhbGlkYXRpb25zOiB0aGlzLnZhbGlkYXRpb25zLFxuICAgICAgICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLFxuICAgICAgICAgICAgZmVhdHVyZXM6IHRoaXMuZmVhdHVyZXMsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYU5hbWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn0gIl19","import { AXPEntityType } from \"../definitions/entity-definition.types\";\nimport { AXPEntityFieldModel } from \"./entity-field.model\";\n//#region ---- AXPEntityModel ----\n/**\n * Runtime model for entity definitions with parent references and helper methods\n */\nexport class AXPEntityModel {\n constructor(definition, parent, schemaService) {\n this.fields = [];\n this.name = definition.name;\n this.title = definition.title;\n this.type = definition.type;\n this.parent = parent;\n this.schemaService = schemaService;\n // Initialize fields with parent reference and schema service\n this.fields = definition.fields.map(fieldDef => new AXPEntityFieldModel(fieldDef, this, schemaService));\n }\n //#endregion\n //#region ---- Query Methods ----\n /**\n * Find field by name\n */\n findField(name) {\n return this.fields.find(field => field.name === name);\n }\n /**\n * Get all fields\n */\n getAllFields() {\n return [...this.fields];\n }\n /**\n * Get fields by data type\n */\n getFieldsByType(dataType) {\n return this.fields.filter(field => field.schema.dataType === dataType);\n }\n /**\n * Get required fields\n */\n getRequiredFields() {\n return this.fields.filter(field => field.isRequired());\n }\n /**\n * Get readonly fields\n */\n getReadonlyFields() {\n return this.fields.filter(field => field.isReadonly());\n }\n /**\n * Get searchable fields\n */\n getSearchableFields() {\n return this.fields.filter(field => field.isSearchable());\n }\n /**\n * Get filterable fields\n */\n getFilterableFields() {\n return this.fields.filter(field => field.isFilterable());\n }\n /**\n * Get sortable fields\n */\n getSortableFields() {\n return this.fields.filter(field => field.isSortable());\n }\n //#endregion\n //#region ---- Type Checking Methods ----\n /**\n * Check if this entity is an aggregate root\n */\n isAggregateRoot() {\n return this.type === AXPEntityType.AggregateRoot;\n }\n /**\n * Check if this entity is a regular entity\n */\n isEntity() {\n return this.type === AXPEntityType.Entity;\n }\n /**\n * Check if this entity is a value object\n */\n isValueObject() {\n return this.type === AXPEntityType.ValueObject;\n }\n //#endregion\n //#region ---- Navigation Methods ----\n /**\n * Get parent aggregate\n */\n getAggregate() {\n return this.parent;\n }\n /**\n * Get parent module\n */\n getModule() {\n return this.parent?.parent;\n }\n /**\n * Get full path (module.aggregate.entity)\n */\n getPath() {\n return `${this.parent.parent.name}.${this.parent.name}.${this.name}`;\n }\n //#endregion\n //#region ---- Validation Methods ----\n /**\n * Validate the entity structure\n */\n async validate() {\n const errors = [];\n // Validate entity structure\n if (!this.name)\n errors.push('Entity name is required');\n if (!this.title)\n errors.push('Entity title is required');\n // Validate fields\n for (const field of this.fields) {\n const fieldErrors = await field.validate();\n if (fieldErrors.length > 0) {\n errors.push(...fieldErrors.map(err => `${field.name}: ${err}`));\n }\n }\n return errors;\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Get entity statistics\n */\n getStatistics() {\n return {\n fieldCount: this.fields.length,\n requiredFieldCount: this.getRequiredFields().length,\n readonlyFieldCount: this.getReadonlyFields().length,\n searchableFieldCount: this.getSearchableFields().length,\n filterableFieldCount: this.getFilterableFields().length,\n sortableFieldCount: this.getSortableFields().length\n };\n }\n /**\n * Convert back to interface definition\n */\n toDefinition() {\n return {\n name: this.name,\n title: this.title,\n fields: this.fields.map(field => field.toDefinition()),\n type: this.type\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBdUIsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHM0Qsc0NBQXNDO0FBRXRDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFRdkIsWUFBWSxVQUErQixFQUFFLE1BQVcsRUFBRSxhQUErQjtRQUx6RSxXQUFNLEdBQTBCLEVBQUUsQ0FBQztRQU0vQyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUVuQyw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUMzQyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQ3pELENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWTtJQUVaLHFDQUFxQztJQUVyQzs7T0FFRztJQUNJLFNBQVMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FF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RyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVk7SUFFWix1Q0FBdUM7SUFFdkM7O09BRUc7SUFDSSxhQUFhO1FBUWhCLE9BQU87WUFDSCxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzlCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU07WUFDbkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTTtZQUNuRCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNO1lBQ3ZELG9CQUFvQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU07WUFDdkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTTtTQUN0RCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFDO0lBQ04sQ0FBQztDQUdKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQVmFsaWRhdGlvblJ1bGVzIH0gZnJvbSBcIkBhY29yZXgvcGxhdGZvcm0vY29yZVwiO1xuaW1wb3J0IHsgQVhQRW50aXR5RGVmaW5pdGlvbiwgQVhQRW50aXR5VHlwZSB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9lbnRpdHktZGVmaW5pdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgQVhQRW50aXR5RmllbGRNb2RlbCB9IGZyb20gXCIuL2VudGl0eS1maWVsZC5tb2RlbFwiO1xuaW1wb3J0IHsgQVhQU2NoZW1hU2VydmljZSB9IGZyb20gXCIuLi9yZWdpc3RyaWVzL3NjaGVtYVwiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEFYUEVudGl0eU1vZGVsICAgLS0tLVxuXG4vKipcbiAqIFJ1bnRpbWUgbW9kZWwgZm9yIGVudGl0eSBkZWZpbml0aW9ucyB3aXRoIHBhcmVudCByZWZlcmVuY2VzIGFuZCBoZWxwZXIgbWV0aG9kc1xuICovXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TW9kZWwge1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpZWxkczogQVhQRW50aXR5RmllbGRNb2RlbFtdID0gW107XG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGU6IEFYUEVudGl0eVR5cGU7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhcmVudDogYW55OyAvLyBXaWxsIGJlIEFYUEFnZ3JlZ2F0ZU1vZGVsLCB1c2luZyBhbnkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgIHB1YmxpYyByZWFkb25seSBzY2hlbWFTZXJ2aWNlOiBBWFBTY2hlbWFTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogQVhQRW50aXR5RGVmaW5pdGlvbiwgcGFyZW50OiBhbnksIHNjaGVtYVNlcnZpY2U6IEFYUFNjaGVtYVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gZGVmaW5pdGlvbi5uYW1lO1xuICAgICAgICB0aGlzLnRpdGxlID0gZGVmaW5pdGlvbi50aXRsZTtcbiAgICAgICAgdGhpcy50eXBlID0gZGVmaW5pdGlvbi50eXBlO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5zY2hlbWFTZXJ2aWNlID0gc2NoZW1hU2VydmljZTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIGZpZWxkcyB3aXRoIHBhcmVudCByZWZlcmVuY2UgYW5kIHNjaGVtYSBzZXJ2aWNlXG4gICAgICAgIHRoaXMuZmllbGRzID0gZGVmaW5pdGlvbi5maWVsZHMubWFwKGZpZWxkRGVmID0+XG4gICAgICAgICAgICBuZXcgQVhQRW50aXR5RmllbGRNb2RlbChmaWVsZERlZiwgdGhpcywgc2NoZW1hU2VydmljZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUXVlcnkgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgZmllbGQgYnkgbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kRmllbGQobmFtZTogc3RyaW5nKTogQVhQRW50aXR5RmllbGRNb2RlbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgZmllbGRzXG4gICAgICovXG4gICAgcHVibGljIGdldEFsbEZpZWxkcygpOiBBWFBFbnRpdHlGaWVsZE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZmllbGRzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZmllbGRzIGJ5IGRhdGEgdHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGaWVsZHNCeVR5cGUoZGF0YVR5cGU6IHN0cmluZyk6IEFYUEVudGl0eUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuc2NoZW1hLmRhdGFUeXBlID09PSBkYXRhVHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHJlcXVpcmVkIGZpZWxkc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZXF1aXJlZEZpZWxkcygpOiBBWFBFbnRpdHlGaWVsZE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmlzUmVxdWlyZWQoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHJlYWRvbmx5IGZpZWxkc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSZWFkb25seUZpZWxkcygpOiBBWFBFbnRpdHlGaWVsZE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmlzUmVhZG9ubHkoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNlYXJjaGFibGUgZmllbGRzXG4gICAgICovXG4gICAgcHVibGljIGdldFNlYXJjaGFibGVGaWVsZHMoKTogQVhQRW50aXR5RmllbGRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5pc1NlYXJjaGFibGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGZpbHRlcmFibGUgZmllbGRzXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlcmFibGVGaWVsZHMoKTogQVhQRW50aXR5RmllbGRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5pc0ZpbHRlcmFibGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNvcnRhYmxlIGZpZWxkc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTb3J0YWJsZUZpZWxkcygpOiBBWFBFbnRpdHlGaWVsZE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmlzU29ydGFibGUoKSk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFR5cGUgQ2hlY2tpbmcgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgZW50aXR5IGlzIGFuIGFnZ3JlZ2F0ZSByb290XG4gICAgICovXG4gICAgcHVibGljIGlzQWdncmVnYXRlUm9vdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQVhQRW50aXR5VHlwZS5BZ2dyZWdhdGVSb290O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgZW50aXR5IGlzIGEgcmVndWxhciBlbnRpdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFbnRpdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IEFYUEVudGl0eVR5cGUuRW50aXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoaXMgZW50aXR5IGlzIGEgdmFsdWUgb2JqZWN0XG4gICAgICovXG4gICAgcHVibGljIGlzVmFsdWVPYmplY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IEFYUEVudGl0eVR5cGUuVmFsdWVPYmplY3Q7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE5hdmlnYXRpb24gTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJlbnQgYWdncmVnYXRlXG4gICAgICovXG4gICAgcHVibGljIGdldEFnZ3JlZ2F0ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHBhcmVudCBtb2R1bGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TW9kdWxlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudD8ucGFyZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBmdWxsIHBhdGggKG1vZHVsZS5hZ2dyZWdhdGUuZW50aXR5KVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnBhcmVudC5wYXJlbnQubmFtZX0uJHt0aGlzLnBhcmVudC5uYW1lfS4ke3RoaXMubmFtZX1gO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBWYWxpZGF0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSB0aGUgZW50aXR5IHN0cnVjdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBlbnRpdHkgc3RydWN0dXJlXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSBlcnJvcnMucHVzaCgnRW50aXR5IG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgaWYgKCF0aGlzLnRpdGxlKSBlcnJvcnMucHVzaCgnRW50aXR5IHRpdGxlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmllbGRzXG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gYXdhaXQgZmllbGQudmFsaWRhdGUoKTtcbiAgICAgICAgICAgIGlmIChmaWVsZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4uZmllbGRFcnJvcnMubWFwKGVyciA9PiBgJHtmaWVsZC5uYW1lfTogJHtlcnJ9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgVXRpbGl0eSBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IGVudGl0eSBzdGF0aXN0aWNzXG4gICAgICovXG4gICAgcHVibGljIGdldFN0YXRpc3RpY3MoKToge1xuICAgICAgICBmaWVsZENvdW50OiBudW1iZXI7XG4gICAgICAgIHJlcXVpcmVkRmllbGRDb3VudDogbnVtYmVyO1xuICAgICAgICByZWFkb25seUZpZWxkQ291bnQ6IG51bWJlcjtcbiAgICAgICAgc2VhcmNoYWJsZUZpZWxkQ291bnQ6IG51bWJlcjtcbiAgICAgICAgZmlsdGVyYWJsZUZpZWxkQ291bnQ6IG51bWJlcjtcbiAgICAgICAgc29ydGFibGVGaWVsZENvdW50OiBudW1iZXI7XG4gICAgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWVsZENvdW50OiB0aGlzLmZpZWxkcy5sZW5ndGgsXG4gICAgICAgICAgICByZXF1aXJlZEZpZWxkQ291bnQ6IHRoaXMuZ2V0UmVxdWlyZWRGaWVsZHMoKS5sZW5ndGgsXG4gICAgICAgICAgICByZWFkb25seUZpZWxkQ291bnQ6IHRoaXMuZ2V0UmVhZG9ubHlGaWVsZHMoKS5sZW5ndGgsXG4gICAgICAgICAgICBzZWFyY2hhYmxlRmllbGRDb3VudDogdGhpcy5nZXRTZWFyY2hhYmxlRmllbGRzKCkubGVuZ3RoLFxuICAgICAgICAgICAgZmlsdGVyYWJsZUZpZWxkQ291bnQ6IHRoaXMuZ2V0RmlsdGVyYWJsZUZpZWxkcygpLmxlbmd0aCxcbiAgICAgICAgICAgIHNvcnRhYmxlRmllbGRDb3VudDogdGhpcy5nZXRTb3J0YWJsZUZpZWxkcygpLmxlbmd0aFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYmFjayB0byBpbnRlcmZhY2UgZGVmaW5pdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyB0b0RlZmluaXRpb24oKTogQVhQRW50aXR5RGVmaW5pdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgICAgICAgIGZpZWxkczogdGhpcy5maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLnRvRGVmaW5pdGlvbigpKSxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufSAiXX0=","//#region ---- AXPSchemaModel ----\n/**\n * Runtime model for schema definitions with helper methods\n */\nexport class AXPSchemaModel {\n constructor(definition) {\n this.name = definition.name;\n this.dataType = definition.dataType;\n this.interface = definition.interface;\n this.validations = definition.validations ?? [];\n this.features = definition.features ?? {};\n this.metadata = definition.metadata;\n }\n //#endregion\n //#region ---- Data Type Methods ----\n /**\n * Check if schema is for string data\n */\n isString() {\n return this.dataType === 'string';\n }\n /**\n * Check if schema is for number data\n */\n isNumber() {\n return this.dataType === 'number';\n }\n /**\n * Check if schema is for boolean data\n */\n isBoolean() {\n return this.dataType === 'boolean';\n }\n /**\n * Check if schema is for date data\n */\n isDate() {\n return this.dataType === 'date';\n }\n /**\n * Check if schema is for object data\n */\n isObject() {\n return this.dataType === 'object';\n }\n /**\n * Check if schema is for array data\n */\n isArray() {\n return this.dataType === 'array';\n }\n /**\n * Check if schema is for blob data\n */\n isBlob() {\n return this.dataType === 'blob';\n }\n //#endregion\n //#region ---- Interface Methods ----\n /**\n * Get widget type\n */\n getWidgetType() {\n return this.interface.widget;\n }\n /**\n * Get widget options\n */\n getWidgetOptions() {\n return this.interface.options;\n }\n /**\n * Check if interface is disabled\n */\n isDisabled() {\n return this.interface.disabled ?? false;\n }\n //#endregion\n //#region ---- Feature Methods ----\n /**\n * Check if searchable\n */\n isSearchable() {\n return this.features.searchable?.enabled ?? false;\n }\n /**\n * Check if full text searchable\n */\n isFullTextSearchable() {\n return this.features.searchable?.fullText ?? false;\n }\n /**\n * Check if filterable\n */\n isFilterable() {\n return this.features.filterable?.enabled ?? false;\n }\n /**\n * Check if inline filterable\n */\n isInlineFilterable() {\n return this.features.filterable?.inline ?? false;\n }\n /**\n * Check if sortable\n */\n isSortable() {\n return this.features.sortable?.enabled ?? false;\n }\n /**\n * Check if auditable\n */\n isAuditable() {\n return this.features.auditable?.enabled ?? false;\n }\n //#endregion\n //#region ---- Validation Methods ----\n /**\n * Validate the schema structure\n */\n async validate() {\n const errors = [];\n // Validate data type\n const validDataTypes = ['string', 'number', 'boolean', 'date', 'object', 'array', 'blob'];\n if (!validDataTypes.includes(this.dataType)) {\n errors.push(`Invalid data type: ${this.dataType}`);\n }\n // Validate interface\n if (!this.interface.widget) {\n errors.push('Widget type is required');\n }\n return errors;\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Get schema capabilities\n */\n getCapabilities() {\n return {\n searchable: this.isSearchable(),\n fullTextSearchable: this.isFullTextSearchable(),\n filterable: this.isFilterable(),\n inlineFilterable: this.isInlineFilterable(),\n sortable: this.isSortable(),\n auditable: this.isAuditable(),\n disabled: this.isDisabled()\n };\n }\n /**\n * Get schema summary\n */\n getSummary() {\n const capabilities = this.getCapabilities();\n const capabilityCount = Object.values(capabilities).filter(Boolean).length;\n return {\n dataType: this.dataType,\n widget: this.getWidgetType(),\n hasOptions: !!this.interface.options,\n hasMetadata: !!this.metadata,\n hasValidations: !!this.validations && this.validations.length > 0,\n capabilityCount\n };\n }\n /**\n * Convert back to interface definition\n */\n toDefinition() {\n return {\n name: this.name,\n dataType: this.dataType,\n interface: this.interface,\n validations: this.validations,\n features: this.features,\n metadata: this.metadata\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLHNDQUFzQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBUXZCLFlBQVksVUFBK0I7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBWTtJQUVaLHlDQUF5QztJQUV6Qzs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxD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LENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBUWIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUUzRSxPQUFPO1lBQ0gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzVCLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQ3BDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDakUsZUFBZTtTQUNsQixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBNZXRhRGF0YSwgQVhQT3B0aW9uc0RhdGEsIEFYUFZhbGlkYXRpb25SdWxlcyB9IGZyb20gXCJAYWNvcmV4L3BsYXRmb3JtL2NvcmVcIjtcbmltcG9ydCB7IEFYUFNjaGVtYURlZmluaXRpb24sIEFYUFNjaGVtYURhdGFUeXBlLCBBWFBTY2hlbWFJbnRlcmZhY2UsIEFYUFNjaGVtYUZlYXR1cmVzIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL3NjaGVtYS1kZWZpbml0aW9uLnR5cGVzXCI7XG5cbi8vI3JlZ2lvbiAtLS0tICAgQVhQU2NoZW1hTW9kZWwgICAtLS0tXG5cbi8qKlxuICogUnVudGltZSBtb2RlbCBmb3Igc2NoZW1hIGRlZmluaXRpb25zIHdpdGggaGVscGVyIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGNsYXNzIEFYUFNjaGVtYU1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhVHlwZTogQVhQU2NoZW1hRGF0YVR5cGU7XG4gICAgcHVibGljIHJlYWRvbmx5IGludGVyZmFjZTogQVhQU2NoZW1hSW50ZXJmYWNlO1xuICAgIHB1YmxpYyByZWFkb25seSB2YWxpZGF0aW9uczogQVhQVmFsaWRhdGlvblJ1bGVzO1xuICAgIHB1YmxpYyByZWFkb25seSBmZWF0dXJlczogQVhQU2NoZW1hRmVhdHVyZXM7XG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhPzogQVhQTWV0YURhdGE7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBBWFBTY2hlbWFEZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRlZmluaXRpb24ubmFtZTtcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9IGRlZmluaXRpb24uZGF0YVR5cGU7XG4gICAgICAgIHRoaXMuaW50ZXJmYWNlID0gZGVmaW5pdGlvbi5pbnRlcmZhY2U7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbnMgPSBkZWZpbml0aW9uLnZhbGlkYXRpb25zID8/IFtdO1xuICAgICAgICB0aGlzLmZlYXR1cmVzID0gZGVmaW5pdGlvbi5mZWF0dXJlcyA/PyB7fTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IGRlZmluaXRpb24ubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIERhdGEgVHlwZSBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgc2NoZW1hIGlzIGZvciBzdHJpbmcgZGF0YVxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N0cmluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVR5cGUgPT09ICdzdHJpbmcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHNjaGVtYSBpcyBmb3IgbnVtYmVyIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNOdW1iZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFUeXBlID09PSAnbnVtYmVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBzY2hlbWEgaXMgZm9yIGJvb2xlYW4gZGF0YVxuICAgICAqL1xuICAgIHB1YmxpYyBpc0Jvb2xlYW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFUeXBlID09PSAnYm9vbGVhbic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgc2NoZW1hIGlzIGZvciBkYXRlIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHNjaGVtYSBpcyBmb3Igb2JqZWN0IGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNPYmplY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFUeXBlID09PSAnb2JqZWN0JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBzY2hlbWEgaXMgZm9yIGFycmF5IGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNBcnJheSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVR5cGUgPT09ICdhcnJheSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgc2NoZW1hIGlzIGZvciBibG9iIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNCbG9iKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVHlwZSA9PT0gJ2Jsb2InO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbnRlcmZhY2UgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCB3aWRnZXQgdHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXaWRnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyZmFjZS53aWRnZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHdpZGdldCBvcHRpb25zXG4gICAgICovXG4gICAgcHVibGljIGdldFdpZGdldE9wdGlvbnMoKTogQVhQT3B0aW9uc0RhdGEgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2Uub3B0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBpbnRlcmZhY2UgaXMgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlLmRpc2FibGVkID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBGZWF0dXJlIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBzZWFyY2hhYmxlXG4gICAgICovXG4gICAgcHVibGljIGlzU2VhcmNoYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZXMuc2VhcmNoYWJsZT8uZW5hYmxlZCA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBmdWxsIHRleHQgc2VhcmNoYWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBpc0Z1bGxUZXh0U2VhcmNoYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZXMuc2VhcmNoYWJsZT8uZnVsbFRleHQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZmlsdGVyYWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBpc0ZpbHRlcmFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmVzLmZpbHRlcmFibGU/LmVuYWJsZWQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgaW5saW5lIGZpbHRlcmFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNJbmxpbmVGaWx0ZXJhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlcy5maWx0ZXJhYmxlPy5pbmxpbmUgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgc29ydGFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTb3J0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZXMuc29ydGFibGU/LmVuYWJsZWQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYXVkaXRhYmxlXG4gICAgICovXG4gICAgcHVibGljIGlzQXVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlcy5hdWRpdGFibGU/LmVuYWJsZWQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBWYWxpZGF0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSB0aGUgc2NoZW1hIHN0cnVjdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBkYXRhIHR5cGVcbiAgICAgICAgY29uc3QgdmFsaWREYXRhVHlwZXM6IEFYUFNjaGVtYURhdGFUeXBlW10gPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdkYXRlJywgJ29iamVjdCcsICdhcnJheScsICdibG9iJ107XG4gICAgICAgIGlmICghdmFsaWREYXRhVHlwZXMuaW5jbHVkZXModGhpcy5kYXRhVHlwZSkpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGBJbnZhbGlkIGRhdGEgdHlwZTogJHt0aGlzLmRhdGFUeXBlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgaW50ZXJmYWNlXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmZhY2Uud2lkZ2V0KSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCgnV2lkZ2V0IHR5cGUgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBzY2hlbWEgY2FwYWJpbGl0aWVzXG4gICAgICovXG4gICAgcHVibGljIGdldENhcGFiaWxpdGllcygpOiB7XG4gICAgICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgICAgIGZ1bGxUZXh0U2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgICAgICAgZmlsdGVyYWJsZTogYm9vbGVhbjtcbiAgICAgICAgaW5saW5lRmlsdGVyYWJsZTogYm9vbGVhbjtcbiAgICAgICAgc29ydGFibGU6IGJvb2xlYW47XG4gICAgICAgIGF1ZGl0YWJsZTogYm9vbGVhbjtcbiAgICAgICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWFyY2hhYmxlOiB0aGlzLmlzU2VhcmNoYWJsZSgpLFxuICAgICAgICAgICAgZnVsbFRleHRTZWFyY2hhYmxlOiB0aGlzLmlzRnVsbFRleHRTZWFyY2hhYmxlKCksXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLmlzRmlsdGVyYWJsZSgpLFxuICAgICAgICAgICAgaW5saW5lRmlsdGVyYWJsZTogdGhpcy5pc0lubGluZUZpbHRlcmFibGUoKSxcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLmlzU29ydGFibGUoKSxcbiAgICAgICAgICAgIGF1ZGl0YWJsZTogdGhpcy5pc0F1ZGl0YWJsZSgpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlZCgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNjaGVtYSBzdW1tYXJ5XG4gICAgICovXG4gICAgcHVibGljIGdldFN1bW1hcnkoKToge1xuICAgICAgICBkYXRhVHlwZTogQVhQU2NoZW1hRGF0YVR5cGU7XG4gICAgICAgIHdpZGdldDogc3RyaW5nO1xuICAgICAgICBoYXNPcHRpb25zOiBib29sZWFuO1xuICAgICAgICBoYXNNZXRhZGF0YTogYm9vbGVhbjtcbiAgICAgICAgaGFzVmFsaWRhdGlvbnM6IGJvb2xlYW47XG4gICAgICAgIGNhcGFiaWxpdHlDb3VudDogbnVtYmVyO1xuICAgIH0ge1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSB0aGlzLmdldENhcGFiaWxpdGllcygpO1xuICAgICAgICBjb25zdCBjYXBhYmlsaXR5Q291bnQgPSBPYmplY3QudmFsdWVzKGNhcGFiaWxpdGllcykuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YVR5cGU6IHRoaXMuZGF0YVR5cGUsXG4gICAgICAgICAgICB3aWRnZXQ6IHRoaXMuZ2V0V2lkZ2V0VHlwZSgpLFxuICAgICAgICAgICAgaGFzT3B0aW9uczogISF0aGlzLmludGVyZmFjZS5vcHRpb25zLFxuICAgICAgICAgICAgaGFzTWV0YWRhdGE6ICEhdGhpcy5tZXRhZGF0YSxcbiAgICAgICAgICAgIGhhc1ZhbGlkYXRpb25zOiAhIXRoaXMudmFsaWRhdGlvbnMgJiYgdGhpcy52YWxpZGF0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgY2FwYWJpbGl0eUNvdW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBiYWNrIHRvIGludGVyZmFjZSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgcHVibGljIHRvRGVmaW5pdGlvbigpOiBBWFBTY2hlbWFEZWZpbml0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLmRhdGFUeXBlLFxuICAgICAgICAgICAgaW50ZXJmYWNlOiB0aGlzLmludGVyZmFjZSxcbiAgICAgICAgICAgIHZhbGlkYXRpb25zOiB0aGlzLnZhbGlkYXRpb25zLFxuICAgICAgICAgICAgZmVhdHVyZXM6IHRoaXMuZmVhdHVyZXMsXG4gICAgICAgICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufSAiXX0=","//#region ---- AXPModuleHelper ----\n/**\n * Helper utility class for working with module models\n *\n * @deprecated This helper class is deprecated and will be updated to work with the new domain registry system.\n * Use AXPDomainService for domain operations instead.\n *\n * TODO: Update this helper to work with the new simplified models and domain registry system.\n */\nexport class AXPModuleHelper {\n //#endregion\n //#region ---- Deprecated Methods - To Be Updated ----\n /**\n * @deprecated Use AXPDomainService.findEntitiesByName() instead\n */\n static findEntitiesByName(module, name) {\n console.warn('AXPModuleHelper.findEntitiesByName is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with entity field queries instead\n */\n static findFieldsByName(module, fieldName) {\n console.warn('AXPModuleHelper.findFieldsByName is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with entity type queries instead\n */\n static findEntitiesByType(module, type) {\n console.warn('AXPModuleHelper.findEntitiesByType is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with field validation queries instead\n */\n static findFieldsWithValidation(module, validationRule) {\n console.warn('AXPModuleHelper.findFieldsWithValidation is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with field queries instead\n */\n static findFieldsByDataType(module, dataType) {\n console.warn('AXPModuleHelper.findFieldsByDataType is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with required field queries instead\n */\n static findRequiredFields(module) {\n console.warn('AXPModuleHelper.findRequiredFields is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with nullable field queries instead\n */\n static findNullableFields(module) {\n console.warn('AXPModuleHelper.findNullableFields is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with default value queries instead\n */\n static findFieldsWithDefaultValues(module) {\n console.warn('AXPModuleHelper.findFieldsWithDefaultValues is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with field schema queries instead\n */\n static findFieldsBySchema(module, schemaName) {\n console.warn('AXPModuleHelper.findFieldsBySchema is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use module.validate() method instead\n */\n static validateModule(module) {\n return module.validate();\n }\n /**\n * @deprecated Use aggregate relation queries instead\n */\n static findRelationsByType(module, relationType) {\n console.warn('AXPModuleHelper.findRelationsByType is deprecated. Use relation queries instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with entity dependency queries instead\n */\n static findEntityDependencies(module, entityName) {\n console.warn('AXPModuleHelper.findEntityDependencies is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use module.getStatistics() method instead\n */\n static getModuleStatistics(module) {\n return module.getStatistics();\n }\n /**\n * @deprecated Use AXPDomainService with entity queries instead\n */\n static getAllEntities(module) {\n console.warn('AXPModuleHelper.getAllEntities is deprecated. Use AXPDomainService instead.');\n return [];\n }\n /**\n * @deprecated Use AXPDomainService with field queries instead\n */\n static getAllFields(module) {\n console.warn('AXPModuleHelper.getAllFields is deprecated. Use AXPDomainService instead.');\n return [];\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvaGVscGVycy9tb2R1bGUtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLHVDQUF1QztBQUV2Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFFeEIsWUFBWTtJQUVaLDBEQUEwRDtJQUUxRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFzQixFQUFFLElBQVk7UUFDakUsT0FBTyxDQUFDLElBQUksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQ2hHLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQXNCLEVBQUUsU0FBaUI7UUFDcEUsT0FBTyxDQUFDLElBQUksQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQXNCLEVBQUUsSUFBbUI7UUFDeEUsT0FBTyxDQUFDLElBQUksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQ2hHLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQXNCLEVBQUUsY0FBc0I7UUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyx1RkFBdUYsQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQXNCLEVBQUUsUUFBZ0I7UUFDdkUsT0FBTyxDQUFDLElBQUksQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQXNCO1FBQ25ELE9BQU8sQ0FBQyxJQUFJLENBQUMsaUZBQWlGLENBQUMsQ0FBQztRQUNoRyxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFzQjtRQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDaEcsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsMkJBQTJCLENBQUMsTUFBc0I7UUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1FBQ3pHLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQXNCLEVBQUUsVUFBa0I7UUFDdkUsT0FBTyxDQUFDLElBQUksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQ2hHLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFzQjtRQUMvQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBc0IsRUFBRSxZQUFvQjtRQUMxRSxPQUFPLENBQUMsSUFBSSxDQUFDLGtGQUFrRixDQUFDLENBQUM7UUFDakcsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBc0IsRUFBRSxVQUFrQjtRQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLHFGQUFxRixDQUFDLENBQUM7UUFDcEcsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBc0I7UUFDcEQsT0FBTyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFzQjtRQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxDQUFDLENBQUM7UUFDNUYsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQXNCO1FBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztRQUMxRixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUE1vZHVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9tb2R1bGUubW9kZWxcIjtcbmltcG9ydCB7IEFYUEVudGl0eU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9lbnRpdHkubW9kZWxcIjtcbmltcG9ydCB7IEFYUEVudGl0eUZpZWxkTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2VudGl0eS1maWVsZC5tb2RlbFwiO1xuaW1wb3J0IHsgQVhQRW50aXR5VHlwZSB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9lbnRpdHktZGVmaW5pdGlvbi50eXBlc1wiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEFYUE1vZHVsZUhlbHBlciAgIC0tLS1cblxuLyoqXG4gKiBIZWxwZXIgdXRpbGl0eSBjbGFzcyBmb3Igd29ya2luZyB3aXRoIG1vZHVsZSBtb2RlbHNcbiAqIFxuICogQGRlcHJlY2F0ZWQgVGhpcyBoZWxwZXIgY2xhc3MgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSB1cGRhdGVkIHRvIHdvcmsgd2l0aCB0aGUgbmV3IGRvbWFpbiByZWdpc3RyeSBzeXN0ZW0uXG4gKiBVc2UgQVhQRG9tYWluU2VydmljZSBmb3IgZG9tYWluIG9wZXJhdGlvbnMgaW5zdGVhZC5cbiAqIFxuICogVE9ETzogVXBkYXRlIHRoaXMgaGVscGVyIHRvIHdvcmsgd2l0aCB0aGUgbmV3IHNpbXBsaWZpZWQgbW9kZWxzIGFuZCBkb21haW4gcmVnaXN0cnkgc3lzdGVtLlxuICovXG5leHBvcnQgY2xhc3MgQVhQTW9kdWxlSGVscGVyIHtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBEZXByZWNhdGVkIE1ldGhvZHMgLSBUbyBCZSBVcGRhdGVkICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIEFYUERvbWFpblNlcnZpY2UuZmluZEVudGl0aWVzQnlOYW1lKCkgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZEVudGl0aWVzQnlOYW1lKG1vZHVsZTogQVhQTW9kdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IEFYUEVudGl0eU1vZGVsW10ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0FYUE1vZHVsZUhlbHBlci5maW5kRW50aXRpZXNCeU5hbWUgaXMgZGVwcmVjYXRlZC4gVXNlIEFYUERvbWFpblNlcnZpY2UgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggZW50aXR5IGZpZWxkIHF1ZXJpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZEZpZWxkc0J5TmFtZShtb2R1bGU6IEFYUE1vZHVsZU1vZGVsLCBmaWVsZE5hbWU6IHN0cmluZyk6IEFYUEVudGl0eUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQVhQTW9kdWxlSGVscGVyLmZpbmRGaWVsZHNCeU5hbWUgaXMgZGVwcmVjYXRlZC4gVXNlIEFYUERvbWFpblNlcnZpY2UgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggZW50aXR5IHR5cGUgcXVlcmllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmaW5kRW50aXRpZXNCeVR5cGUobW9kdWxlOiBBWFBNb2R1bGVNb2RlbCwgdHlwZTogQVhQRW50aXR5VHlwZSk6IEFYUEVudGl0eU1vZGVsW10ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0FYUE1vZHVsZUhlbHBlci5maW5kRW50aXRpZXNCeVR5cGUgaXMgZGVwcmVjYXRlZC4gVXNlIEFYUERvbWFpblNlcnZpY2UgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggZmllbGQgdmFsaWRhdGlvbiBxdWVyaWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbmRGaWVsZHNXaXRoVmFsaWRhdGlvbihtb2R1bGU6IEFYUE1vZHVsZU1vZGVsLCB2YWxpZGF0aW9uUnVsZTogc3RyaW5nKTogQVhQRW50aXR5RmllbGRNb2RlbFtdIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdBWFBNb2R1bGVIZWxwZXIuZmluZEZpZWxkc1dpdGhWYWxpZGF0aW9uIGlzIGRlcHJlY2F0ZWQuIFVzZSBBWFBEb21haW5TZXJ2aWNlIGluc3RlYWQuJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgQVhQRG9tYWluU2VydmljZSB3aXRoIGZpZWxkIHF1ZXJpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZEZpZWxkc0J5RGF0YVR5cGUobW9kdWxlOiBBWFBNb2R1bGVNb2RlbCwgZGF0YVR5cGU6IHN0cmluZyk6IEFYUEVudGl0eUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQVhQTW9kdWxlSGVscGVyLmZpbmRGaWVsZHNCeURhdGFUeXBlIGlzIGRlcHJlY2F0ZWQuIFVzZSBBWFBEb21haW5TZXJ2aWNlIGluc3RlYWQuJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgQVhQRG9tYWluU2VydmljZSB3aXRoIHJlcXVpcmVkIGZpZWxkIHF1ZXJpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZFJlcXVpcmVkRmllbGRzKG1vZHVsZTogQVhQTW9kdWxlTW9kZWwpOiBBWFBFbnRpdHlGaWVsZE1vZGVsW10ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0FYUE1vZHVsZUhlbHBlci5maW5kUmVxdWlyZWRGaWVsZHMgaXMgZGVwcmVjYXRlZC4gVXNlIEFYUERvbWFpblNlcnZpY2UgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggbnVsbGFibGUgZmllbGQgcXVlcmllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmaW5kTnVsbGFibGVGaWVsZHMobW9kdWxlOiBBWFBNb2R1bGVNb2RlbCk6IEFYUEVudGl0eUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQVhQTW9kdWxlSGVscGVyLmZpbmROdWxsYWJsZUZpZWxkcyBpcyBkZXByZWNhdGVkLiBVc2UgQVhQRG9tYWluU2VydmljZSBpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIEFYUERvbWFpblNlcnZpY2Ugd2l0aCBkZWZhdWx0IHZhbHVlIHF1ZXJpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZEZpZWxkc1dpdGhEZWZhdWx0VmFsdWVzKG1vZHVsZTogQVhQTW9kdWxlTW9kZWwpOiBBWFBFbnRpdHlGaWVsZE1vZGVsW10ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0FYUE1vZHVsZUhlbHBlci5maW5kRmllbGRzV2l0aERlZmF1bHRWYWx1ZXMgaXMgZGVwcmVjYXRlZC4gVXNlIEFYUERvbWFpblNlcnZpY2UgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggZmllbGQgc2NoZW1hIHF1ZXJpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZmluZEZpZWxkc0J5U2NoZW1hKG1vZHVsZTogQVhQTW9kdWxlTW9kZWwsIHNjaGVtYU5hbWU6IHN0cmluZyk6IEFYUEVudGl0eUZpZWxkTW9kZWxbXSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQVhQTW9kdWxlSGVscGVyLmZpbmRGaWVsZHNCeVNjaGVtYSBpcyBkZXByZWNhdGVkLiBVc2UgQVhQRG9tYWluU2VydmljZSBpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIG1vZHVsZS52YWxpZGF0ZSgpIG1ldGhvZCBpbnN0ZWFkXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZU1vZHVsZShtb2R1bGU6IEFYUE1vZHVsZU1vZGVsKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gbW9kdWxlLnZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGFnZ3JlZ2F0ZSByZWxhdGlvbiBxdWVyaWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZpbmRSZWxhdGlvbnNCeVR5cGUobW9kdWxlOiBBWFBNb2R1bGVNb2RlbCwgcmVsYXRpb25UeXBlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQVhQTW9kdWxlSGVscGVyLmZpbmRSZWxhdGlvbnNCeVR5cGUgaXMgZGVwcmVjYXRlZC4gVXNlIHJlbGF0aW9uIHF1ZXJpZXMgaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggZW50aXR5IGRlcGVuZGVuY3kgcXVlcmllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmaW5kRW50aXR5RGVwZW5kZW5jaWVzKG1vZHVsZTogQVhQTW9kdWxlTW9kZWwsIGVudGl0eU5hbWU6IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdBWFBNb2R1bGVIZWxwZXIuZmluZEVudGl0eURlcGVuZGVuY2llcyBpcyBkZXByZWNhdGVkLiBVc2UgQVhQRG9tYWluU2VydmljZSBpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIG1vZHVsZS5nZXRTdGF0aXN0aWNzKCkgbWV0aG9kIGluc3RlYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldE1vZHVsZVN0YXRpc3RpY3MobW9kdWxlOiBBWFBNb2R1bGVNb2RlbCk6IGFueSB7XG4gICAgICAgIHJldHVybiBtb2R1bGUuZ2V0U3RhdGlzdGljcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBBWFBEb21haW5TZXJ2aWNlIHdpdGggZW50aXR5IHF1ZXJpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWxsRW50aXRpZXMobW9kdWxlOiBBWFBNb2R1bGVNb2RlbCk6IEFYUEVudGl0eU1vZGVsW10ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0FYUE1vZHVsZUhlbHBlci5nZXRBbGxFbnRpdGllcyBpcyBkZXByZWNhdGVkLiBVc2UgQVhQRG9tYWluU2VydmljZSBpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIEFYUERvbWFpblNlcnZpY2Ugd2l0aCBmaWVsZCBxdWVyaWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEFsbEZpZWxkcyhtb2R1bGU6IEFYUE1vZHVsZU1vZGVsKTogQVhQRW50aXR5RmllbGRNb2RlbFtdIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdBWFBNb2R1bGVIZWxwZXIuZ2V0QWxsRmllbGRzIGlzIGRlcHJlY2F0ZWQuIFVzZSBBWFBEb21haW5TZXJ2aWNlIGluc3RlYWQuJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn0gIl19","//#region ---- Schema Middleware Context ----\n/**\n * Context class for schema middleware operations providing a fluent API for schema manipulation.\n *\n * This class serves as the interface between middleware functions and schema definitions,\n * offering methods to modify various aspects of a schema including:\n * - Widget configuration and options\n * - Validation rules\n * - Feature flags (searchable, filterable, sortable)\n * - Metadata and custom properties\n * - UI behavior (visibility, readonly state)\n *\n * All methods return `this` to enable fluent method chaining.\n *\n * @example\n * ```typescript\n * // Example middleware using the context\n * (context) => {\n * context\n * .addValidation({ rule: 'required' })\n * .searchable(true)\n * .withDefaultValue('default text')\n * .readonly(false);\n * }\n * ```\n */\nexport class AXPSchemaMiddlewareContext {\n constructor(schema) {\n // Deep clone to avoid mutating the original schema\n this._schema = JSON.parse(JSON.stringify(schema));\n }\n //#region ---- Schema Access Properties ----\n /**\n * Get the current schema definition (readonly access)\n */\n get schema() {\n return this._schema;\n }\n /**\n * Get the schema name for conditional logic\n */\n get name() {\n return this._schema.name;\n }\n //#endregion\n //#region ---- Default Value Management ----\n /**\n * Set a default value for the widget\n * @param defaultValue The default value to set\n */\n withDefaultValue(defaultValue) {\n if (!this._schema.interface.options) {\n this._schema.interface.options = {};\n }\n this._schema.interface.options['defaultValue'] = defaultValue;\n return this;\n }\n /**\n * Remove the default value from the widget\n */\n removeDefaultValue() {\n if (this._schema.interface.options) {\n delete this._schema.interface.options['defaultValue'];\n }\n return this;\n }\n //#endregion\n //#region ---- Validation Management ----\n /**\n * Add multiple validation rules to the schema\n * @param rules Array of validation rules to add\n */\n withValidation(rules) {\n if (!this._schema.validations) {\n this._schema.validations = [];\n }\n this._schema.validations.push(...rules);\n return this;\n }\n /**\n * Add a single validation rule to the schema\n * @param rule The validation rule to add\n */\n addValidation(rule) {\n if (!this._schema.validations) {\n this._schema.validations = [];\n }\n this._schema.validations.push(rule);\n return this;\n }\n /**\n * Add a single validation rule (alias for addValidation for backward compatibility)\n * @param rule The validation rule to add\n */\n withValidationRule(rule) {\n return this.addValidation(rule);\n }\n /**\n * Remove all validation rules from the schema\n */\n clearValidations() {\n this._schema.validations = [];\n return this;\n }\n /**\n * Remove a specific validation rule by its rule name\n * @param ruleName The name of the rule to remove (e.g., 'required', 'email')\n */\n removeValidation(ruleName) {\n if (this._schema.validations) {\n this._schema.validations = this._schema.validations.filter(v => v.rule !== ruleName);\n }\n return this;\n }\n //#endregion\n //#region ---- Widget Configuration ----\n /**\n * Set or merge widget options\n * @param options Object containing widget-specific options to merge\n */\n withWidgetOptions(options) {\n this._schema.interface.options = {\n ...this._schema.interface.options,\n ...options\n };\n return this;\n }\n /**\n * Remove a specific widget option by key\n * @param optionKey The key of the option to remove\n */\n removeWidgetOption(optionKey) {\n if (this._schema.interface.options) {\n delete this._schema.interface.options[optionKey];\n }\n return this;\n }\n /**\n * Change the widget type for this schema\n * @param widgetType The new widget type identifier\n */\n withWidgetType(widgetType) {\n this._schema.interface.widget = widgetType;\n return this;\n }\n //#endregion\n //#region ---- Feature Configuration ----\n /**\n * Configure general features using an object\n * @param features Object containing feature configurations to merge\n */\n withFeatures(features) {\n this._schema.features = {\n ...this._schema.features,\n ...features\n };\n return this;\n }\n /**\n * Configure searchable feature with fine-grained control\n * @param enabled Whether searching is enabled\n * @param fullText Whether full-text search is enabled\n */\n searchable(enabled = true, fullText = false) {\n if (!this._schema.features) {\n this._schema.features = {};\n }\n this._schema.features.searchable = { enabled, fullText };\n return this;\n }\n /**\n * Configure filterable feature with inline filter support\n * @param enabled Whether filtering is enabled\n * @param inline Whether inline filtering is supported\n */\n filterable(enabled = true, inline = false) {\n if (!this._schema.features) {\n this._schema.features = {};\n }\n this._schema.features.filterable = { enabled, inline };\n return this;\n }\n /**\n * Configure sortable feature\n * @param enabled Whether sorting is enabled\n */\n sortable(enabled = true) {\n if (!this._schema.features) {\n this._schema.features = {};\n }\n this._schema.features.sortable = { enabled };\n return this;\n }\n //#endregion\n //#region ---- Metadata Management ----\n /**\n * Add or merge metadata to the schema\n * @param metadata Object containing metadata to merge\n */\n withMetadata(metadata) {\n this._schema.metadata = {\n ...this._schema.metadata,\n ...metadata\n };\n return this;\n }\n /**\n * Remove a specific metadata property by key\n * @param key The metadata key to remove\n */\n removeMetadata(key) {\n if (this._schema.metadata) {\n delete this._schema.metadata[key];\n }\n return this;\n }\n //#endregion\n //#region ---- Schema Properties ----\n /**\n * Set the data type for this schema\n * @param dataType The new data type (string, number, boolean, etc.)\n */\n withDataType(dataType) {\n this._schema.dataType = dataType;\n return this;\n }\n //#endregion\n //#region ---- UI State Management ----\n /**\n * Set the disabled state of the widget\n * @param isDisabled Whether the widget should be disabled\n */\n disabled(isDisabled = true) {\n this._schema.interface.disabled = isDisabled;\n return this;\n }\n /**\n * Set the visibility of the widget\n * @param visible Whether the widget should be visible\n */\n withVisibility(visible) {\n if (!this._schema.interface.options) {\n this._schema.interface.options = {};\n }\n this._schema.interface.options['visible'] = visible;\n return this;\n }\n /**\n * Set the readonly state of the widget\n * @param isReadonly Whether the widget should be readonly\n */\n readonly(isReadonly = true) {\n if (!this._schema.interface.options) {\n this._schema.interface.options = {};\n }\n this._schema.interface.options['readonly'] = isReadonly;\n return this;\n }\n}\n//#endregion\n//#region ---- Builder-Based Middleware Types ----\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW1pZGRsZXdhcmUuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL3NjaGVtYS9zY2hlbWEtbWlkZGxld2FyZS5mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsaURBQWlEO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBR25DLFlBQVksTUFBMkI7UUFDbkMsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGdEQUFnRDtJQUVoRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO0lBRVosZ0RBQWdEO0lBRWhEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFlBQWlCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBQzlELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FB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UyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUdKO0FBRUQsWUFBWTtBQUVaLHNEQUFzRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFNjaGVtYURlZmluaXRpb24sIEFYUFNjaGVtYURhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGVmaW5pdGlvbnMvc2NoZW1hLWRlZmluaXRpb24udHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBNaWRkbGV3YXJlIENvbnRleHQgICAtLS0tXG5cbi8qKlxuICogQ29udGV4dCBjbGFzcyBmb3Igc2NoZW1hIG1pZGRsZXdhcmUgb3BlcmF0aW9ucyBwcm92aWRpbmcgYSBmbHVlbnQgQVBJIGZvciBzY2hlbWEgbWFuaXB1bGF0aW9uLlxuICogXG4gKiBUaGlzIGNsYXNzIHNlcnZlcyBhcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gbWlkZGxld2FyZSBmdW5jdGlvbnMgYW5kIHNjaGVtYSBkZWZpbml0aW9ucyxcbiAqIG9mZmVyaW5nIG1ldGhvZHMgdG8gbW9kaWZ5IHZhcmlvdXMgYXNwZWN0cyBvZiBhIHNjaGVtYSBpbmNsdWRpbmc6XG4gKiAtIFdpZGdldCBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiAtIFZhbGlkYXRpb24gcnVsZXNcbiAqIC0gRmVhdHVyZSBmbGFncyAoc2VhcmNoYWJsZSwgZmlsdGVyYWJsZSwgc29ydGFibGUpXG4gKiAtIE1ldGFkYXRhIGFuZCBjdXN0b20gcHJvcGVydGllc1xuICogLSBVSSBiZWhhdmlvciAodmlzaWJpbGl0eSwgcmVhZG9ubHkgc3RhdGUpXG4gKiBcbiAqIEFsbCBtZXRob2RzIHJldHVybiBgdGhpc2AgdG8gZW5hYmxlIGZsdWVudCBtZXRob2QgY2hhaW5pbmcuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFeGFtcGxlIG1pZGRsZXdhcmUgdXNpbmcgdGhlIGNvbnRleHRcbiAqIChjb250ZXh0KSA9PiB7XG4gKiAgIGNvbnRleHRcbiAqICAgICAuYWRkVmFsaWRhdGlvbih7IHJ1bGU6ICdyZXF1aXJlZCcgfSlcbiAqICAgICAuc2VhcmNoYWJsZSh0cnVlKVxuICogICAgIC53aXRoRGVmYXVsdFZhbHVlKCdkZWZhdWx0IHRleHQnKVxuICogICAgIC5yZWFkb25seShmYWxzZSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFYUFNjaGVtYU1pZGRsZXdhcmVDb250ZXh0IHtcbiAgICBwcml2YXRlIF9zY2hlbWE6IEFYUFNjaGVtYURlZmluaXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzY2hlbWE6IEFYUFNjaGVtYURlZmluaXRpb24pIHtcbiAgICAgICAgLy8gRGVlcCBjbG9uZSB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgc2NoZW1hXG4gICAgICAgIHRoaXMuX3NjaGVtYSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2NoZW1hKSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBTY2hlbWEgQWNjZXNzIFByb3BlcnRpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc2NoZW1hIGRlZmluaXRpb24gKHJlYWRvbmx5IGFjY2VzcylcbiAgICAgKi9cbiAgICBnZXQgc2NoZW1hKCk6IFJlYWRvbmx5PEFYUFNjaGVtYURlZmluaXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtYTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHNjaGVtYSBuYW1lIGZvciBjb25kaXRpb25hbCBsb2dpY1xuICAgICAqL1xuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY2hlbWEubmFtZTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRGVmYXVsdCBWYWx1ZSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogU2V0IGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHdpZGdldFxuICAgICAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgdG8gc2V0XG4gICAgICovXG4gICAgd2l0aERlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWU6IGFueSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuX3NjaGVtYS5pbnRlcmZhY2Uub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zWydkZWZhdWx0VmFsdWUnXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHJlbW92ZURlZmF1bHRWYWx1ZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX3NjaGVtYS5pbnRlcmZhY2Uub3B0aW9ucykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVtYS5pbnRlcmZhY2Uub3B0aW9uc1snZGVmYXVsdFZhbHVlJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFZhbGlkYXRpb24gTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEFkZCBtdWx0aXBsZSB2YWxpZGF0aW9uIHJ1bGVzIHRvIHRoZSBzY2hlbWFcbiAgICAgKiBAcGFyYW0gcnVsZXMgQXJyYXkgb2YgdmFsaWRhdGlvbiBydWxlcyB0byBhZGRcbiAgICAgKi9cbiAgICB3aXRoVmFsaWRhdGlvbihydWxlczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zY2hlbWEudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NjaGVtYS52YWxpZGF0aW9ucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NjaGVtYS52YWxpZGF0aW9ucy5wdXNoKC4uLnJ1bGVzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgc2luZ2xlIHZhbGlkYXRpb24gcnVsZSB0byB0aGUgc2NoZW1hXG4gICAgICogQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZSB0byBhZGRcbiAgICAgKi9cbiAgICBhZGRWYWxpZGF0aW9uKHJ1bGU6IGFueSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuX3NjaGVtYS52YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fc2NoZW1hLnZhbGlkYXRpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NoZW1hLnZhbGlkYXRpb25zLnB1c2gocnVsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHNpbmdsZSB2YWxpZGF0aW9uIHJ1bGUgKGFsaWFzIGZvciBhZGRWYWxpZGF0aW9uIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgICAqIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUgdG8gYWRkXG4gICAgICovXG4gICAgd2l0aFZhbGlkYXRpb25SdWxlKHJ1bGU6IGFueSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRWYWxpZGF0aW9uKHJ1bGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgdmFsaWRhdGlvbiBydWxlcyBmcm9tIHRoZSBzY2hlbWFcbiAgICAgKi9cbiAgICBjbGVhclZhbGlkYXRpb25zKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zY2hlbWEudmFsaWRhdGlvbnMgPSBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgc3BlY2lmaWMgdmFsaWRhdGlvbiBydWxlIGJ5IGl0cyBydWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gcnVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJ1bGUgdG8gcmVtb3ZlIChlLmcuLCAncmVxdWlyZWQnLCAnZW1haWwnKVxuICAgICAqL1xuICAgIHJlbW92ZVZhbGlkYXRpb24ocnVsZU5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fc2NoZW1hLnZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9zY2hlbWEudmFsaWRhdGlvbnMgPSB0aGlzLl9zY2hlbWEudmFsaWRhdGlvbnMuZmlsdGVyKHYgPT4gdi5ydWxlICE9PSBydWxlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFdpZGdldCBDb25maWd1cmF0aW9uICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogU2V0IG9yIG1lcmdlIHdpZGdldCBvcHRpb25zXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT2JqZWN0IGNvbnRhaW5pbmcgd2lkZ2V0LXNwZWNpZmljIG9wdGlvbnMgdG8gbWVyZ2VcbiAgICAgKi9cbiAgICB3aXRoV2lkZ2V0T3B0aW9ucyhvcHRpb25zOiBhbnkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zLFxuICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBzcGVjaWZpYyB3aWRnZXQgb3B0aW9uIGJ5IGtleVxuICAgICAqIEBwYXJhbSBvcHRpb25LZXkgVGhlIGtleSBvZiB0aGUgb3B0aW9uIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIHJlbW92ZVdpZGdldE9wdGlvbihvcHRpb25LZXk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zW29wdGlvbktleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSB3aWRnZXQgdHlwZSBmb3IgdGhpcyBzY2hlbWFcbiAgICAgKiBAcGFyYW0gd2lkZ2V0VHlwZSBUaGUgbmV3IHdpZGdldCB0eXBlIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICB3aXRoV2lkZ2V0VHlwZSh3aWRnZXRUeXBlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2NoZW1hLmludGVyZmFjZS53aWRnZXQgPSB3aWRnZXRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRmVhdHVyZSBDb25maWd1cmF0aW9uICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGdlbmVyYWwgZmVhdHVyZXMgdXNpbmcgYW4gb2JqZWN0XG4gICAgICogQHBhcmFtIGZlYXR1cmVzIE9iamVjdCBjb250YWluaW5nIGZlYXR1cmUgY29uZmlndXJhdGlvbnMgdG8gbWVyZ2VcbiAgICAgKi9cbiAgICB3aXRoRmVhdHVyZXMoZmVhdHVyZXM6IFBhcnRpYWw8YW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9zY2hlbWEuZmVhdHVyZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLl9zY2hlbWEuZmVhdHVyZXMsXG4gICAgICAgICAgICAuLi5mZWF0dXJlc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgc2VhcmNoYWJsZSBmZWF0dXJlIHdpdGggZmluZS1ncmFpbmVkIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHNlYXJjaGluZyBpcyBlbmFibGVkXG4gICAgICogQHBhcmFtIGZ1bGxUZXh0IFdoZXRoZXIgZnVsbC10ZXh0IHNlYXJjaCBpcyBlbmFibGVkXG4gICAgICovXG4gICAgc2VhcmNoYWJsZShlbmFibGVkOiBib29sZWFuID0gdHJ1ZSwgZnVsbFRleHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuX3NjaGVtYS5mZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5fc2NoZW1hLmZlYXR1cmVzID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NoZW1hLmZlYXR1cmVzLnNlYXJjaGFibGUgPSB7IGVuYWJsZWQsIGZ1bGxUZXh0IH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBmaWx0ZXJhYmxlIGZlYXR1cmUgd2l0aCBpbmxpbmUgZmlsdGVyIHN1cHBvcnRcbiAgICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIGZpbHRlcmluZyBpcyBlbmFibGVkXG4gICAgICogQHBhcmFtIGlubGluZSBXaGV0aGVyIGlubGluZSBmaWx0ZXJpbmcgaXMgc3VwcG9ydGVkXG4gICAgICovXG4gICAgZmlsdGVyYWJsZShlbmFibGVkOiBib29sZWFuID0gdHJ1ZSwgaW5saW5lOiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zY2hlbWEuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3NjaGVtYS5mZWF0dXJlcyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NjaGVtYS5mZWF0dXJlcy5maWx0ZXJhYmxlID0geyBlbmFibGVkLCBpbmxpbmUgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHNvcnRhYmxlIGZlYXR1cmVcbiAgICAgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHNvcnRpbmcgaXMgZW5hYmxlZFxuICAgICAqL1xuICAgIHNvcnRhYmxlKGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5fc2NoZW1hLmZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLl9zY2hlbWEuZmVhdHVyZXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zY2hlbWEuZmVhdHVyZXMuc29ydGFibGUgPSB7IGVuYWJsZWQgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE1ldGFkYXRhIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBBZGQgb3IgbWVyZ2UgbWV0YWRhdGEgdG8gdGhlIHNjaGVtYVxuICAgICAqIEBwYXJhbSBtZXRhZGF0YSBPYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSB0byBtZXJnZVxuICAgICAqL1xuICAgIHdpdGhNZXRhZGF0YShtZXRhZGF0YTogYW55KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NjaGVtYS5tZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX3NjaGVtYS5tZXRhZGF0YSxcbiAgICAgICAgICAgIC4uLm1ldGFkYXRhXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIHNwZWNpZmljIG1ldGFkYXRhIHByb3BlcnR5IGJ5IGtleVxuICAgICAqIEBwYXJhbSBrZXkgVGhlIG1ldGFkYXRhIGtleSB0byByZW1vdmVcbiAgICAgKi9cbiAgICByZW1vdmVNZXRhZGF0YShrZXk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fc2NoZW1hLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZW1hLm1ldGFkYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBQcm9wZXJ0aWVzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkYXRhIHR5cGUgZm9yIHRoaXMgc2NoZW1hXG4gICAgICogQHBhcmFtIGRhdGFUeXBlIFRoZSBuZXcgZGF0YSB0eXBlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZXRjLilcbiAgICAgKi9cbiAgICB3aXRoRGF0YVR5cGUoZGF0YVR5cGU6IEFYUFNjaGVtYURhdGFUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NjaGVtYS5kYXRhVHlwZSA9IGRhdGFUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgVUkgU3RhdGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHdpZGdldFxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIHdpZGdldCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zY2hlbWEuaW50ZXJmYWNlLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gdmlzaWJsZSBXaGV0aGVyIHRoZSB3aWRnZXQgc2hvdWxkIGJlIHZpc2libGVcbiAgICAgKi9cbiAgICB3aXRoVmlzaWJpbGl0eSh2aXNpYmxlOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9zY2hlbWEuaW50ZXJmYWNlLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zY2hlbWEuaW50ZXJmYWNlLm9wdGlvbnNbJ3Zpc2libGUnXSA9IHZpc2libGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgcmVhZG9ubHkgc3RhdGUgb2YgdGhlIHdpZGdldFxuICAgICAqIEBwYXJhbSBpc1JlYWRvbmx5IFdoZXRoZXIgdGhlIHdpZGdldCBzaG91bGQgYmUgcmVhZG9ubHlcbiAgICAgKi9cbiAgICByZWFkb25seShpc1JlYWRvbmx5OiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuX3NjaGVtYS5pbnRlcmZhY2Uub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NoZW1hLmludGVyZmFjZS5vcHRpb25zWydyZWFkb25seSddID0gaXNSZWFkb25seTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIEJ1aWxkZXItQmFzZWQgTWlkZGxld2FyZSBUeXBlcyAgIC0tLS1cblxuXG5cblxuXG4iXX0=","import { Injectable } from '@angular/core';\nimport { AXPSchemaModel } from '../../models/schema.model';\nimport { AXPSchemaMiddlewareContext } from './schema-middleware.functions';\nimport * as i0 from \"@angular/core\";\n//#endregion\n//#region ---- Schema Registry Service ----\n/**\n * Central registry for managing schema definitions, middleware, and dynamic loading.\n *\n * Provides:\n * - Schema registration and retrieval\n * - Middleware processing pipeline\n * - On-demand schema loading\n * - Caching and performance optimization\n */\nexport class AXPSchemaRegistry {\n constructor() {\n this._schemas = new Map();\n this._globalMiddleware = [];\n this._modelCache = new Map();\n this._loaders = null;\n }\n //#region ---- Registration Methods ----\n /**\n * Register a schema definition with optional metadata and middleware\n */\n register(definition, options = {}) {\n if (!definition.name || definition.name.trim() === '') {\n throw new Error('Schema name is required and cannot be empty');\n }\n const registered = {\n name: definition.name,\n definition,\n options,\n registeredAt: new Date()\n };\n this._schemas.set(definition.name, registered);\n this.invalidateCache(definition.name);\n console.log(`Schema '${definition.name}' registered successfully`);\n }\n /**\n * Register multiple schemas at once for batch operations\n */\n registerBatch(schemas) {\n for (const schema of schemas) {\n this.register(schema.definition, schema.options || {});\n }\n }\n /**\n * Remove a schema from the registry\n */\n unregister(name) {\n const removed = this._schemas.delete(name);\n if (removed) {\n this.invalidateCache(name);\n }\n return removed;\n }\n /**\n * Check if a schema is currently registered\n */\n isRegistered(name) {\n return this._schemas.has(name);\n }\n //#endregion\n //#region ---- Resolution Methods ----\n /**\n * Resolve a schema by name with full middleware processing and caching.\n * Supports on-demand loading if schema is not registered.\n */\n async resolve(name) {\n // Check cache first for performance\n if (this._modelCache.has(name)) {\n return this._modelCache.get(name);\n }\n // Try to get from registered schemas first\n let registered = this._schemas.get(name);\n // If not found, attempt on-demand loading\n if (!registered) {\n const definition = await this.loadFromLoaders(name);\n if (definition) {\n registered = {\n name,\n definition,\n options: {},\n registeredAt: new Date()\n };\n this._schemas.set(name, registered);\n }\n else {\n throw new Error(`Schema '${name}' is not registered and no loader can provide it`);\n }\n }\n // Clone and process through middleware pipeline\n const schema = this.cloneDefinition(registered.definition);\n const context = new AXPSchemaMiddlewareContext(schema);\n // Apply global middleware first\n for (const middleware of this._globalMiddleware) {\n await middleware(context);\n }\n // Apply schema-specific middleware\n if (registered.options.middleware) {\n for (const middleware of registered.options.middleware) {\n await middleware(context);\n }\n }\n // Create final model and cache it\n const model = new AXPSchemaModel(context.schema);\n this._modelCache.set(name, model);\n return model;\n }\n /**\n * Synchronous resolution without middleware processing.\n * Use only when middleware is not needed for performance.\n */\n resolveSync(name) {\n const registered = this._schemas.get(name);\n if (!registered) {\n throw new Error(`Schema '${name}' is not registered`);\n }\n return new AXPSchemaModel(this.cloneDefinition(registered.definition));\n }\n //#endregion\n //#region ---- Middleware Management ----\n /**\n * Add global middleware that applies to all schema resolutions\n */\n addGlobalMiddleware(middleware) {\n if (typeof middleware !== 'function') {\n throw new Error('Middleware must be a function');\n }\n this._globalMiddleware.push(middleware);\n }\n /**\n * Remove specific global middleware\n */\n removeGlobalMiddleware(middleware) {\n const index = this._globalMiddleware.indexOf(middleware);\n if (index > -1) {\n this._globalMiddleware.splice(index, 1);\n return true;\n }\n return false;\n }\n /**\n * Clear all global middleware\n */\n clearGlobalMiddleware() {\n this._globalMiddleware.length = 0;\n }\n //#endregion\n //#region ---- Loader Management ----\n /**\n * Add a schema loader for on-demand loading\n */\n addLoader(loader) {\n if (this._loaders === null) {\n this._loaders = [];\n }\n this._loaders.push(new loader());\n }\n //#endregion\n //#region ---- Query Methods ----\n /**\n * Get all registered schema names\n */\n getRegisteredNames() {\n return Array.from(this._schemas.keys());\n }\n /**\n * Get detailed registration information for a schema\n */\n getSchemaInfo(name) {\n return this._schemas.get(name);\n }\n /**\n * Get all registered schemas with their metadata\n */\n getAllSchemas() {\n return Array.from(this._schemas.values());\n }\n /**\n * Find schemas by tag for categorization\n */\n findByTag(tag) {\n return Array.from(this._schemas.values()).filter(schema => schema.options.tags?.includes(tag));\n }\n /**\n * Find schemas by widget type for widget-specific operations\n */\n findByWidget(widgetType) {\n return Array.from(this._schemas.values()).filter(schema => schema.definition.interface.widget === widgetType);\n }\n /**\n * Get comprehensive registry statistics\n */\n getStatistics() {\n const schemasByWidget = {};\n const schemasByTag = {};\n for (const schema of this._schemas.values()) {\n const widget = schema.definition.interface.widget;\n schemasByWidget[widget] = (schemasByWidget[widget] || 0) + 1;\n if (schema.options.tags) {\n for (const tag of schema.options.tags) {\n schemasByTag[tag] = (schemasByTag[tag] || 0) + 1;\n }\n }\n }\n return {\n schemaCount: this._schemas.size,\n globalMiddlewareCount: this._globalMiddleware.length,\n schemasByWidget,\n schemasByTag\n };\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Clear all cached models (useful when schemas need to be reloaded)\n */\n clearCache() {\n this._modelCache.clear();\n }\n /**\n * Invalidate cache for a specific schema\n */\n invalidateCache(name) {\n this._modelCache.delete(name);\n }\n /**\n * Clear all registered schemas, middleware, and cached models\n */\n clear() {\n this._schemas.clear();\n this._globalMiddleware.length = 0;\n this._modelCache.clear();\n this._loaders = null;\n }\n //#endregion\n //#region ---- Private Helper Methods ----\n /**\n * Attempt to load schema from registered loaders\n */\n async loadFromLoaders(name) {\n const loaders = this.getLoaders();\n for (const loader of loaders) {\n if (loader.canLoad(name)) {\n try {\n const definition = await loader.load(name);\n if (definition) {\n console.log(`Schema '${name}' loaded from ${loader.constructor.name}`);\n return definition;\n }\n }\n catch (error) {\n console.warn(`Loader ${loader.constructor.name} failed to load '${name}':`, error);\n }\n }\n }\n return null;\n }\n /**\n * Get loaders sorted by priority (lazy initialization)\n */\n getLoaders() {\n if (this._loaders === null) {\n try {\n this._loaders = [];\n // Sort by priority (higher priority first)\n this._loaders.sort((a, b) => {\n const priorityA = a.priority ?? 0;\n const priorityB = b.priority ?? 0;\n return priorityB - priorityA;\n });\n }\n catch (error) {\n console.warn('Failed to initialize schema loaders:', error);\n this._loaders = [];\n }\n }\n return this._loaders;\n }\n /**\n * Create a deep clone of a schema definition to prevent mutations\n */\n cloneDefinition(definition) {\n return JSON.parse(JSON.stringify(definition));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSchemaRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSchemaRegistry, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSchemaRegistry, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL3NjaGVtYS9zY2hlbWEucmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHM0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0MzRSxZQUFZO0FBRVosK0NBQStDO0FBRS9DOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQU0xQjtRQUxpQixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDbEQsc0JBQWlCLEdBQTBCLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO1FBQ3pELGFBQVEsR0FBNkIsSUFBSSxDQUFDO0lBRWxDLENBQUM7SUFFakIsNENBQTRDO0lBRTVDOztPQUVHO0lBQ0gsUUFBUSxDQUNKLFVBQStCLEVBQy9CLFVBQXdDLEVBQUU7UUFFMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUF3QjtZQUNwQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsVUFBVTtZQUNWLE9BQU87WUFDUCxZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDM0IsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFB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QixJQUFJLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLDJDQUEyQztnQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO29CQUNsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztvQkFDbEMsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxVQUErQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7K0dBNVVRLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBTY2hlbWFEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZGVmaW5pdGlvbnMvc2NoZW1hLWRlZmluaXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQU2NoZW1hTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2NoZW1hLm1vZGVsJztcbmltcG9ydCB7IEFYUFNjaGVtYUxvYWRlciB9IGZyb20gJy4vc2NoZW1hLWxvYWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQVhQU2NoZW1hTWlkZGxld2FyZSB9IGZyb20gJy4vc2NoZW1hLm1pZGRsZXdhcmUnO1xuaW1wb3J0IHsgQVhQU2NoZW1hTWlkZGxld2FyZUNvbnRleHQgfSBmcm9tICcuL3NjaGVtYS1taWRkbGV3YXJlLmZ1bmN0aW9ucyc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgYW5kIEludGVyZmFjZXMgICAtLS0tXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcmVnaXN0ZXJpbmcgYSBzY2hlbWEgd2l0aCBhZGRpdGlvbmFsIG1ldGFkYXRhIGFuZCBtaWRkbGV3YXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQU2NoZW1hUmVnaXN0cmF0aW9uT3B0aW9ucyB7XG4gICAgLyoqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzICovXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgLyoqIFRhZ3MgZm9yIGNhdGVnb3JpemluZyBhbmQgZmluZGluZyBzY2hlbWFzICovXG4gICAgdGFncz86IHN0cmluZ1tdO1xuICAgIC8qKiBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBzY2hlbWEgZXZvbHV0aW9uICovXG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICAvKiogU2NoZW1hLXNwZWNpZmljIG1pZGRsZXdhcmUgdGhhdCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBzY2hlbWEgKi9cbiAgICBtaWRkbGV3YXJlPzogQVhQU2NoZW1hTWlkZGxld2FyZVtdO1xufVxuXG4vKipcbiAqIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVnaXN0ZXJlZCBzY2hlbWEgd2l0aCBtZXRhZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUFJlZ2lzdGVyZWRTY2hlbWEge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHNjaGVtYSAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIGFjdHVhbCBzY2hlbWEgZGVmaW5pdGlvbiAqL1xuICAgIGRlZmluaXRpb246IEFYUFNjaGVtYURlZmluaXRpb247XG4gICAgLyoqIFJlZ2lzdHJhdGlvbiBvcHRpb25zIGFuZCBtZXRhZGF0YSAqL1xuICAgIG9wdGlvbnM6IEFYUFNjaGVtYVJlZ2lzdHJhdGlvbk9wdGlvbnM7XG4gICAgLyoqIFRpbWVzdGFtcCB3aGVuIHRoZSBzY2hlbWEgd2FzIHJlZ2lzdGVyZWQgKi9cbiAgICByZWdpc3RlcmVkQXQ6IERhdGU7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBSZWdpc3RyeSBTZXJ2aWNlICAgLS0tLVxuXG4vKipcbiAqIENlbnRyYWwgcmVnaXN0cnkgZm9yIG1hbmFnaW5nIHNjaGVtYSBkZWZpbml0aW9ucywgbWlkZGxld2FyZSwgYW5kIGR5bmFtaWMgbG9hZGluZy5cbiAqIFxuICogUHJvdmlkZXM6XG4gKiAtIFNjaGVtYSByZWdpc3RyYXRpb24gYW5kIHJldHJpZXZhbFxuICogLSBNaWRkbGV3YXJlIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAqIC0gT24tZGVtYW5kIHNjaGVtYSBsb2FkaW5nXG4gKiAtIENhY2hpbmcgYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFYUFNjaGVtYVJlZ2lzdHJ5IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIEFYUFJlZ2lzdGVyZWRTY2hlbWE+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZ2xvYmFsTWlkZGxld2FyZTogQVhQU2NoZW1hTWlkZGxld2FyZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWxDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBTY2hlbWFNb2RlbD4oKTtcbiAgICBwcml2YXRlIF9sb2FkZXJzOiBBWFBTY2hlbWFMb2FkZXJbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUmVnaXN0cmF0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIHNjaGVtYSBkZWZpbml0aW9uIHdpdGggb3B0aW9uYWwgbWV0YWRhdGEgYW5kIG1pZGRsZXdhcmVcbiAgICAgKi9cbiAgICByZWdpc3RlcihcbiAgICAgICAgZGVmaW5pdGlvbjogQVhQU2NoZW1hRGVmaW5pdGlvbixcbiAgICAgICAgb3B0aW9uczogQVhQU2NoZW1hUmVnaXN0cmF0aW9uT3B0aW9ucyA9IHt9XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghZGVmaW5pdGlvbi5uYW1lIHx8IGRlZmluaXRpb24ubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjaGVtYSBuYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWQ6IEFYUFJlZ2lzdGVyZWRTY2hlbWEgPSB7XG4gICAgICAgICAgICBuYW1lOiBkZWZpbml0aW9uLm5hbWUsXG4gICAgICAgICAgICBkZWZpbml0aW9uLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHJlZ2lzdGVyZWRBdDogbmV3IERhdGUoKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX3NjaGVtYXMuc2V0KGRlZmluaXRpb24ubmFtZSwgcmVnaXN0ZXJlZCk7XG4gICAgICAgIHRoaXMuaW52YWxpZGF0ZUNhY2hlKGRlZmluaXRpb24ubmFtZSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coYFNjaGVtYSAnJHtkZWZpbml0aW9uLm5hbWV9JyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIG11bHRpcGxlIHNjaGVtYXMgYXQgb25jZSBmb3IgYmF0Y2ggb3BlcmF0aW9uc1xuICAgICAqL1xuICAgIHJlZ2lzdGVyQmF0Y2goc2NoZW1hczogeyBuYW1lOiBzdHJpbmc7IGRlZmluaXRpb246IEFYUFNjaGVtYURlZmluaXRpb247IG9wdGlvbnM/OiBBWFBTY2hlbWFSZWdpc3RyYXRpb25PcHRpb25zIH1bXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKHNjaGVtYS5kZWZpbml0aW9uLCBzY2hlbWEub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBzY2hlbWEgZnJvbSB0aGUgcmVnaXN0cnlcbiAgICAgKi9cbiAgICB1bnJlZ2lzdGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fc2NoZW1hcy5kZWxldGUobmFtZSk7XG4gICAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVDYWNoZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHNjaGVtYSBpcyBjdXJyZW50bHkgcmVnaXN0ZXJlZFxuICAgICAqL1xuICAgIGlzUmVnaXN0ZXJlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtYXMuaGFzKG5hbWUpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBSZXNvbHV0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIGEgc2NoZW1hIGJ5IG5hbWUgd2l0aCBmdWxsIG1pZGRsZXdhcmUgcHJvY2Vzc2luZyBhbmQgY2FjaGluZy5cbiAgICAgKiBTdXBwb3J0cyBvbi1kZW1hbmQgbG9hZGluZyBpZiBzY2hlbWEgaXMgbm90IHJlZ2lzdGVyZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFNjaGVtYU1vZGVsPiB7XG4gICAgICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0IGZvciBwZXJmb3JtYW5jZVxuICAgICAgICBpZiAodGhpcy5fbW9kZWxDYWNoZS5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RlbENhY2hlLmdldChuYW1lKSE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnkgdG8gZ2V0IGZyb20gcmVnaXN0ZXJlZCBzY2hlbWFzIGZpcnN0XG4gICAgICAgIGxldCByZWdpc3RlcmVkID0gdGhpcy5fc2NoZW1hcy5nZXQobmFtZSk7XG5cbiAgICAgICAgLy8gSWYgbm90IGZvdW5kLCBhdHRlbXB0IG9uLWRlbWFuZCBsb2FkaW5nXG4gICAgICAgIGlmICghcmVnaXN0ZXJlZCkge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMubG9hZEZyb21Mb2FkZXJzKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEF0OiBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY2hlbWFzLnNldChuYW1lLCByZWdpc3RlcmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlbWEgJyR7bmFtZX0nIGlzIG5vdCByZWdpc3RlcmVkIGFuZCBubyBsb2FkZXIgY2FuIHByb3ZpZGUgaXRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsb25lIGFuZCBwcm9jZXNzIHRocm91Z2ggbWlkZGxld2FyZSBwaXBlbGluZVxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmNsb25lRGVmaW5pdGlvbihyZWdpc3RlcmVkLmRlZmluaXRpb24pO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEFYUFNjaGVtYU1pZGRsZXdhcmVDb250ZXh0KHNjaGVtYSk7XG5cbiAgICAgICAgLy8gQXBwbHkgZ2xvYmFsIG1pZGRsZXdhcmUgZmlyc3RcbiAgICAgICAgZm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMuX2dsb2JhbE1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIGF3YWl0IG1pZGRsZXdhcmUoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBseSBzY2hlbWEtc3BlY2lmaWMgbWlkZGxld2FyZVxuICAgICAgICBpZiAocmVnaXN0ZXJlZC5vcHRpb25zLm1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWlkZGxld2FyZSBvZiByZWdpc3RlcmVkLm9wdGlvbnMubWlkZGxld2FyZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG1pZGRsZXdhcmUoY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgZmluYWwgbW9kZWwgYW5kIGNhY2hlIGl0XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEFYUFNjaGVtYU1vZGVsKGNvbnRleHQuc2NoZW1hKTtcbiAgICAgICAgdGhpcy5fbW9kZWxDYWNoZS5zZXQobmFtZSwgbW9kZWwpO1xuXG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyByZXNvbHV0aW9uIHdpdGhvdXQgbWlkZGxld2FyZSBwcm9jZXNzaW5nLlxuICAgICAqIFVzZSBvbmx5IHdoZW4gbWlkZGxld2FyZSBpcyBub3QgbmVlZGVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgKi9cbiAgICByZXNvbHZlU3luYyhuYW1lOiBzdHJpbmcpOiBBWFBTY2hlbWFNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyZWQgPSB0aGlzLl9zY2hlbWFzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFyZWdpc3RlcmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVtYSAnJHtuYW1lfScgaXMgbm90IHJlZ2lzdGVyZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQVhQU2NoZW1hTW9kZWwodGhpcy5jbG9uZURlZmluaXRpb24ocmVnaXN0ZXJlZC5kZWZpbml0aW9uKSk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE1pZGRsZXdhcmUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEFkZCBnbG9iYWwgbWlkZGxld2FyZSB0aGF0IGFwcGxpZXMgdG8gYWxsIHNjaGVtYSByZXNvbHV0aW9uc1xuICAgICAqL1xuICAgIGFkZEdsb2JhbE1pZGRsZXdhcmUobWlkZGxld2FyZTogQVhQU2NoZW1hTWlkZGxld2FyZSk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIG1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlkZGxld2FyZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9nbG9iYWxNaWRkbGV3YXJlLnB1c2gobWlkZGxld2FyZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHNwZWNpZmljIGdsb2JhbCBtaWRkbGV3YXJlXG4gICAgICovXG4gICAgcmVtb3ZlR2xvYmFsTWlkZGxld2FyZShtaWRkbGV3YXJlOiBBWFBTY2hlbWFNaWRkbGV3YXJlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZ2xvYmFsTWlkZGxld2FyZS5pbmRleE9mKG1pZGRsZXdhcmUpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5fZ2xvYmFsTWlkZGxld2FyZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBnbG9iYWwgbWlkZGxld2FyZVxuICAgICAqL1xuICAgIGNsZWFyR2xvYmFsTWlkZGxld2FyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ2xvYmFsTWlkZGxld2FyZS5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBMb2FkZXIgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHNjaGVtYSBsb2FkZXIgZm9yIG9uLWRlbWFuZCBsb2FkaW5nXG4gICAgICovXG4gICAgYWRkTG9hZGVyKGxvYWRlcjogVHlwZTxBWFBTY2hlbWFMb2FkZXI+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9sb2FkZXJzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbG9hZGVycy5wdXNoKG5ldyBsb2FkZXIoKSk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgc2NoZW1hIG5hbWVzXG4gICAgICovXG4gICAgZ2V0UmVnaXN0ZXJlZE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2NoZW1hcy5rZXlzKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBkZXRhaWxlZCByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgc2NoZW1hXG4gICAgICovXG4gICAgZ2V0U2NoZW1hSW5mbyhuYW1lOiBzdHJpbmcpOiBBWFBSZWdpc3RlcmVkU2NoZW1hIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtYXMuZ2V0KG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgcmVnaXN0ZXJlZCBzY2hlbWFzIHdpdGggdGhlaXIgbWV0YWRhdGFcbiAgICAgKi9cbiAgICBnZXRBbGxTY2hlbWFzKCk6IEFYUFJlZ2lzdGVyZWRTY2hlbWFbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3NjaGVtYXMudmFsdWVzKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgc2NoZW1hcyBieSB0YWcgZm9yIGNhdGVnb3JpemF0aW9uXG4gICAgICovXG4gICAgZmluZEJ5VGFnKHRhZzogc3RyaW5nKTogQVhQUmVnaXN0ZXJlZFNjaGVtYVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2NoZW1hcy52YWx1ZXMoKSkuZmlsdGVyKHNjaGVtYSA9PlxuICAgICAgICAgICAgc2NoZW1hLm9wdGlvbnMudGFncz8uaW5jbHVkZXModGFnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgc2NoZW1hcyBieSB3aWRnZXQgdHlwZSBmb3Igd2lkZ2V0LXNwZWNpZmljIG9wZXJhdGlvbnNcbiAgICAgKi9cbiAgICBmaW5kQnlXaWRnZXQod2lkZ2V0VHlwZTogc3RyaW5nKTogQVhQUmVnaXN0ZXJlZFNjaGVtYVtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2NoZW1hcy52YWx1ZXMoKSkuZmlsdGVyKHNjaGVtYSA9PlxuICAgICAgICAgICAgc2NoZW1hLmRlZmluaXRpb24uaW50ZXJmYWNlLndpZGdldCA9PT0gd2lkZ2V0VHlwZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjb21wcmVoZW5zaXZlIHJlZ2lzdHJ5IHN0YXRpc3RpY3NcbiAgICAgKi9cbiAgICBnZXRTdGF0aXN0aWNzKCk6IHtcbiAgICAgICAgc2NoZW1hQ291bnQ6IG51bWJlcjtcbiAgICAgICAgZ2xvYmFsTWlkZGxld2FyZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNjaGVtYXNCeVdpZGdldDogeyBbd2lkZ2V0OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgICAgICAgc2NoZW1hc0J5VGFnOiB7IFt0YWc6IHN0cmluZ106IG51bWJlciB9O1xuICAgIH0ge1xuICAgICAgICBjb25zdCBzY2hlbWFzQnlXaWRnZXQ6IHsgW3dpZGdldDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICAgICAgY29uc3Qgc2NoZW1hc0J5VGFnOiB7IFt0YWc6IHN0cmluZ106IG51bWJlciB9ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2YgdGhpcy5fc2NoZW1hcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gc2NoZW1hLmRlZmluaXRpb24uaW50ZXJmYWNlLndpZGdldDtcbiAgICAgICAgICAgIHNjaGVtYXNCeVdpZGdldFt3aWRnZXRdID0gKHNjaGVtYXNCeVdpZGdldFt3aWRnZXRdIHx8IDApICsgMTtcblxuICAgICAgICAgICAgaWYgKHNjaGVtYS5vcHRpb25zLnRhZ3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiBzY2hlbWEub3B0aW9ucy50YWdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYXNCeVRhZ1t0YWddID0gKHNjaGVtYXNCeVRhZ1t0YWddIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hQ291bnQ6IHRoaXMuX3NjaGVtYXMuc2l6ZSxcbiAgICAgICAgICAgIGdsb2JhbE1pZGRsZXdhcmVDb3VudDogdGhpcy5fZ2xvYmFsTWlkZGxld2FyZS5sZW5ndGgsXG4gICAgICAgICAgICBzY2hlbWFzQnlXaWRnZXQsXG4gICAgICAgICAgICBzY2hlbWFzQnlUYWdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBjYWNoZWQgbW9kZWxzICh1c2VmdWwgd2hlbiBzY2hlbWFzIG5lZWQgdG8gYmUgcmVsb2FkZWQpXG4gICAgICovXG4gICAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW9kZWxDYWNoZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludmFsaWRhdGUgY2FjaGUgZm9yIGEgc3BlY2lmaWMgc2NoZW1hXG4gICAgICovXG4gICAgaW52YWxpZGF0ZUNhY2hlKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tb2RlbENhY2hlLmRlbGV0ZShuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgcmVnaXN0ZXJlZCBzY2hlbWFzLCBtaWRkbGV3YXJlLCBhbmQgY2FjaGVkIG1vZGVsc1xuICAgICAqL1xuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zY2hlbWFzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX2dsb2JhbE1pZGRsZXdhcmUubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fbW9kZWxDYWNoZS5jbGVhcigpO1xuICAgICAgICB0aGlzLl9sb2FkZXJzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBIZWxwZXIgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gbG9hZCBzY2hlbWEgZnJvbSByZWdpc3RlcmVkIGxvYWRlcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGxvYWRGcm9tTG9hZGVycyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFNjaGVtYURlZmluaXRpb24gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IGxvYWRlcnMgPSB0aGlzLmdldExvYWRlcnMoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICAgICAgICBpZiAobG9hZGVyLmNhbkxvYWQobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gYXdhaXQgbG9hZGVyLmxvYWQobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2NoZW1hICcke25hbWV9JyBsb2FkZWQgZnJvbSAke2xvYWRlci5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYExvYWRlciAke2xvYWRlci5jb25zdHJ1Y3Rvci5uYW1lfSBmYWlsZWQgdG8gbG9hZCAnJHtuYW1lfSc6YCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBsb2FkZXJzIHNvcnRlZCBieSBwcmlvcml0eSAobGF6eSBpbml0aWFsaXphdGlvbilcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExvYWRlcnMoKTogQVhQU2NoZW1hTG9hZGVyW10ge1xuICAgICAgICBpZiAodGhpcy5fbG9hZGVycyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZXJzID0gW107XG4gICAgICAgICAgICAgICAgLy8gU29ydCBieSBwcmlvcml0eSAoaGlnaGVyIHByaW9yaXR5IGZpcnN0KVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlcnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmlvcml0eUEgPSBhLnByaW9yaXR5ID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5QiA9IGIucHJpb3JpdHkgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW9yaXR5QiAtIHByaW9yaXR5QTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBzY2hlbWEgbG9hZGVyczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVycyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgYSBzY2hlbWEgZGVmaW5pdGlvbiB0byBwcmV2ZW50IG11dGF0aW9uc1xuICAgICAqL1xuICAgIHByaXZhdGUgY2xvbmVEZWZpbml0aW9uKGRlZmluaXRpb246IEFYUFNjaGVtYURlZmluaXRpb24pOiBBWFBTY2hlbWFEZWZpbml0aW9uIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmaW5pdGlvbikpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb24gIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPSchemaRegistry } from './schema.registry';\nimport * as i0 from \"@angular/core\";\n//#region ---- Schema Service ----\n/**\n * High-level facade service for schema operations.\n *\n * Provides a simplified interface to the schema registry with additional\n * business logic and convenience methods for common operations.\n */\nexport class AXPSchemaService {\n constructor() {\n this.registry = inject(AXPSchemaRegistry);\n }\n //#region ---- Core Schema Management ----\n /**\n * Register a schema with optional configuration\n */\n register(definition, options) {\n this.registry.register(definition, options);\n }\n /**\n * Register multiple schemas at once\n */\n registerBatch(schemas) {\n this.registry.registerBatch(schemas);\n }\n /**\n * Remove a schema from the registry\n */\n unregister(name) {\n return this.registry.unregister(name);\n }\n /**\n * Check if a schema is registered\n */\n isRegistered(name) {\n return this.registry.isRegistered(name);\n }\n /**\n * Get all registered schema names\n */\n getRegisteredNames() {\n return this.registry.getRegisteredNames();\n }\n /**\n * Clear all schemas and reset the registry\n */\n clear() {\n this.registry.clear();\n }\n //#endregion\n //#region ---- Schema Resolution ----\n /**\n * Resolve a schema with full middleware processing\n */\n async resolve(name) {\n return this.registry.resolve(name);\n }\n /**\n * Resolve schema synchronously without middleware (for performance)\n */\n resolveSync(name) {\n return this.registry.resolveSync(name);\n }\n /**\n * Resolve multiple schemas for form building and batch operations\n */\n async resolveMultiple(fieldConfigs) {\n const resolvedFields = await Promise.all(fieldConfigs.map(async (config) => ({\n name: config.name,\n schema: await this.resolve(config.schemaName)\n })));\n return resolvedFields;\n }\n //#endregion\n //#region ---- Middleware Management ----\n /**\n * Add global middleware that applies to all schema resolutions\n */\n addGlobalMiddleware(middleware) {\n this.registry.addGlobalMiddleware(middleware);\n }\n /**\n * Remove specific global middleware\n */\n removeGlobalMiddleware(middleware) {\n return this.registry.removeGlobalMiddleware(middleware);\n }\n /**\n * Clear all global middleware\n */\n clearGlobalMiddleware() {\n this.registry.clearGlobalMiddleware();\n }\n //#endregion\n //#region ---- Query and Discovery ----\n /**\n * Get detailed information about a registered schema\n */\n getSchemaInfo(name) {\n return this.registry.getSchemaInfo(name);\n }\n /**\n * Get all registered schemas with their metadata\n */\n getAllSchemas() {\n return this.registry.getAllSchemas();\n }\n /**\n * Find schemas by tag for categorization and grouping\n */\n findByTag(tag) {\n return this.registry.findByTag(tag);\n }\n /**\n * Find schemas by widget type for widget-specific operations\n */\n findByWidget(widgetType) {\n return this.registry.findByWidget(widgetType);\n }\n /**\n * Get comprehensive registry statistics and analytics\n */\n getStatistics() {\n const stats = this.registry.getStatistics();\n // Enhance with top-used analytics\n const mostUsedWidgets = Object.entries(stats.schemasByWidget)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 5)\n .map(([widget]) => widget);\n const mostUsedTags = Object.entries(stats.schemasByTag)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 5)\n .map(([tag]) => tag);\n return {\n ...stats,\n mostUsedWidgets,\n mostUsedTags\n };\n }\n //#endregion\n //#region ---- Validation and Analysis ----\n /**\n * Validate that all referenced schemas exist in the registry\n */\n validateSchemaReferences(schemaNames) {\n const missingSchemas = [];\n for (const schemaName of schemaNames) {\n if (!this.isRegistered(schemaName)) {\n missingSchemas.push(schemaName);\n }\n }\n return {\n valid: missingSchemas.length === 0,\n missingSchemas\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSchemaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSchemaService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSchemaService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3JlZ2lzdHJpZXMvc2NoZW1hL3NjaGVtYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBcUQsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHekcsc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUVxQixhQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FxTHpEO0lBbkxHLDhDQUE4QztJQUU5Qzs7T0FFRztJQUNILFFBQVEsQ0FBQyxVQUErQixFQUFFLE9BQXNDO1FBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsT0FBb0c7UUFDOUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLElBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsSUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNI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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsT0FBTztZQUNILEdBQUcsS0FBSztZQUNSLGVBQWU7WUFDZixZQUFZO1NBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCxZQUFZO0lBRVosK0NBQStDO0lBRS9DOztPQUVHO0lBQ0gsd0JBQXdCLENBQUMsV0FBcUI7UUFDMUMsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBRXBDLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU87WUFDSCxLQUFLLEVBQUUsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2xDLGNBQWM7U0FDakIsQ0FBQztJQUNOLENBQUM7K0dBbkxRLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFNjaGVtYURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9kZWZpbml0aW9ucy9zY2hlbWEtZGVmaW5pdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBTY2hlbWFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgQVhQU2NoZW1hUmVnaXN0cnksIEFYUFNjaGVtYVJlZ2lzdHJhdGlvbk9wdGlvbnMsIEFYUFJlZ2lzdGVyZWRTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS5yZWdpc3RyeSc7XG5pbXBvcnQgeyBBWFBTY2hlbWFNaWRkbGV3YXJlIH0gZnJvbSAnLi9zY2hlbWEubWlkZGxld2FyZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgU2NoZW1hIFNlcnZpY2UgICAtLS0tXG5cbi8qKlxuICogSGlnaC1sZXZlbCBmYWNhZGUgc2VydmljZSBmb3Igc2NoZW1hIG9wZXJhdGlvbnMuXG4gKiBcbiAqIFByb3ZpZGVzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gdGhlIHNjaGVtYSByZWdpc3RyeSB3aXRoIGFkZGl0aW9uYWxcbiAqIGJ1c2luZXNzIGxvZ2ljIGFuZCBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBjb21tb24gb3BlcmF0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWFBTY2hlbWFTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5ID0gaW5qZWN0KEFYUFNjaGVtYVJlZ2lzdHJ5KTtcblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ29yZSBTY2hlbWEgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGEgc2NoZW1hIHdpdGggb3B0aW9uYWwgY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIHJlZ2lzdGVyKGRlZmluaXRpb246IEFYUFNjaGVtYURlZmluaXRpb24sIG9wdGlvbnM/OiBBWFBTY2hlbWFSZWdpc3RyYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkucmVnaXN0ZXIoZGVmaW5pdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgbXVsdGlwbGUgc2NoZW1hcyBhdCBvbmNlXG4gICAgICovXG4gICAgcmVnaXN0ZXJCYXRjaChzY2hlbWFzOiB7IG5hbWU6IHN0cmluZzsgZGVmaW5pdGlvbjogQVhQU2NoZW1hRGVmaW5pdGlvbjsgb3B0aW9ucz86IEFYUFNjaGVtYVJlZ2lzdHJhdGlvbk9wdGlvbnMgfVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVnaXN0cnkucmVnaXN0ZXJCYXRjaChzY2hlbWFzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSBzY2hlbWEgZnJvbSB0aGUgcmVnaXN0cnlcbiAgICAgKi9cbiAgICB1bnJlZ2lzdGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyKG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgc2NoZW1hIGlzIHJlZ2lzdGVyZWRcbiAgICAgKi9cbiAgICBpc1JlZ2lzdGVyZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmlzUmVnaXN0ZXJlZChuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgc2NoZW1hIG5hbWVzXG4gICAgICovXG4gICAgZ2V0UmVnaXN0ZXJlZE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZE5hbWVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIHNjaGVtYXMgYW5kIHJlc2V0IHRoZSByZWdpc3RyeVxuICAgICAqL1xuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBSZXNvbHV0aW9uICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBhIHNjaGVtYSB3aXRoIGZ1bGwgbWlkZGxld2FyZSBwcm9jZXNzaW5nXG4gICAgICovXG4gICAgYXN5bmMgcmVzb2x2ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFNjaGVtYU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LnJlc29sdmUobmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBzY2hlbWEgc3luY2hyb25vdXNseSB3aXRob3V0IG1pZGRsZXdhcmUgKGZvciBwZXJmb3JtYW5jZSlcbiAgICAgKi9cbiAgICByZXNvbHZlU3luYyhuYW1lOiBzdHJpbmcpOiBBWFBTY2hlbWFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LnJlc29sdmVTeW5jKG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgbXVsdGlwbGUgc2NoZW1hcyBmb3IgZm9ybSBidWlsZGluZyBhbmQgYmF0Y2ggb3BlcmF0aW9uc1xuICAgICAqL1xuICAgIGFzeW5jIHJlc29sdmVNdWx0aXBsZShmaWVsZENvbmZpZ3M6IHsgbmFtZTogc3RyaW5nOyBzY2hlbWFOYW1lOiBzdHJpbmcgfVtdKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgc2NoZW1hOiBBWFBTY2hlbWFNb2RlbCB9W10+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRGaWVsZHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGZpZWxkQ29uZmlncy5tYXAoYXN5bmMgY29uZmlnID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnJlc29sdmUoY29uZmlnLnNjaGVtYU5hbWUpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRmllbGRzO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBNaWRkbGV3YXJlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBBZGQgZ2xvYmFsIG1pZGRsZXdhcmUgdGhhdCBhcHBsaWVzIHRvIGFsbCBzY2hlbWEgcmVzb2x1dGlvbnNcbiAgICAgKi9cbiAgICBhZGRHbG9iYWxNaWRkbGV3YXJlKG1pZGRsZXdhcmU6IEFYUFNjaGVtYU1pZGRsZXdhcmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeS5hZGRHbG9iYWxNaWRkbGV3YXJlKG1pZGRsZXdhcmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBzcGVjaWZpYyBnbG9iYWwgbWlkZGxld2FyZVxuICAgICAqL1xuICAgIHJlbW92ZUdsb2JhbE1pZGRsZXdhcmUobWlkZGxld2FyZTogQVhQU2NoZW1hTWlkZGxld2FyZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5yZW1vdmVHbG9iYWxNaWRkbGV3YXJlKG1pZGRsZXdhcmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBnbG9iYWwgbWlkZGxld2FyZVxuICAgICAqL1xuICAgIGNsZWFyR2xvYmFsTWlkZGxld2FyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeS5jbGVhckdsb2JhbE1pZGRsZXdhcmUoKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUXVlcnkgYW5kIERpc2NvdmVyeSAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHJlZ2lzdGVyZWQgc2NoZW1hXG4gICAgICovXG4gICAgZ2V0U2NoZW1hSW5mbyhuYW1lOiBzdHJpbmcpOiBBWFBSZWdpc3RlcmVkU2NoZW1hIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZ2V0U2NoZW1hSW5mbyhuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgc2NoZW1hcyB3aXRoIHRoZWlyIG1ldGFkYXRhXG4gICAgICovXG4gICAgZ2V0QWxsU2NoZW1hcygpOiBBWFBSZWdpc3RlcmVkU2NoZW1hW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXRBbGxTY2hlbWFzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCBzY2hlbWFzIGJ5IHRhZyBmb3IgY2F0ZWdvcml6YXRpb24gYW5kIGdyb3VwaW5nXG4gICAgICovXG4gICAgZmluZEJ5VGFnKHRhZzogc3RyaW5nKTogQVhQUmVnaXN0ZXJlZFNjaGVtYVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZmluZEJ5VGFnKHRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCBzY2hlbWFzIGJ5IHdpZGdldCB0eXBlIGZvciB3aWRnZXQtc3BlY2lmaWMgb3BlcmF0aW9uc1xuICAgICAqL1xuICAgIGZpbmRCeVdpZGdldCh3aWRnZXRUeXBlOiBzdHJpbmcpOiBBWFBSZWdpc3RlcmVkU2NoZW1hW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5maW5kQnlXaWRnZXQod2lkZ2V0VHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNvbXByZWhlbnNpdmUgcmVnaXN0cnkgc3RhdGlzdGljcyBhbmQgYW5hbHl0aWNzXG4gICAgICovXG4gICAgZ2V0U3RhdGlzdGljcygpIHtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSB0aGlzLnJlZ2lzdHJ5LmdldFN0YXRpc3RpY3MoKTtcblxuICAgICAgICAvLyBFbmhhbmNlIHdpdGggdG9wLXVzZWQgYW5hbHl0aWNzXG4gICAgICAgIGNvbnN0IG1vc3RVc2VkV2lkZ2V0cyA9IE9iamVjdC5lbnRyaWVzKHN0YXRzLnNjaGVtYXNCeVdpZGdldClcbiAgICAgICAgICAgIC5zb3J0KChbLCBhXSwgWywgYl0pID0+IGIgLSBhKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDUpXG4gICAgICAgICAgICAubWFwKChbd2lkZ2V0XSkgPT4gd2lkZ2V0KTtcblxuICAgICAgICBjb25zdCBtb3N0VXNlZFRhZ3MgPSBPYmplY3QuZW50cmllcyhzdGF0cy5zY2hlbWFzQnlUYWcpXG4gICAgICAgICAgICAuc29ydCgoWywgYV0sIFssIGJdKSA9PiBiIC0gYSlcbiAgICAgICAgICAgIC5zbGljZSgwLCA1KVxuICAgICAgICAgICAgLm1hcCgoW3RhZ10pID0+IHRhZyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRzLFxuICAgICAgICAgICAgbW9zdFVzZWRXaWRnZXRzLFxuICAgICAgICAgICAgbW9zdFVzZWRUYWdzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFZhbGlkYXRpb24gYW5kIEFuYWx5c2lzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgdGhhdCBhbGwgcmVmZXJlbmNlZCBzY2hlbWFzIGV4aXN0IGluIHRoZSByZWdpc3RyeVxuICAgICAqL1xuICAgIHZhbGlkYXRlU2NoZW1hUmVmZXJlbmNlcyhzY2hlbWFOYW1lczogc3RyaW5nW10pOiB7IHZhbGlkOiBib29sZWFuOyBtaXNzaW5nU2NoZW1hczogc3RyaW5nW10gfSB7XG4gICAgICAgIGNvbnN0IG1pc3NpbmdTY2hlbWFzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVnaXN0ZXJlZChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgICAgIG1pc3NpbmdTY2hlbWFzLnB1c2goc2NoZW1hTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWQ6IG1pc3NpbmdTY2hlbWFzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIG1pc3NpbmdTY2hlbWFzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","export {};\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3JlZ2lzdHJpZXMvc2NoZW1hL3NjaGVtYS1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUE2QkEsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFNjaGVtYURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9kZWZpbml0aW9ucy9zY2hlbWEtZGVmaW5pdGlvbi50eXBlcyc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgU2NoZW1hIExvYWRlciBJbnRlcmZhY2UgICAtLS0tXG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBzY2hlbWEgbG9hZGVycyB0aGF0IGNhbiBwcm92aWRlIHNjaGVtYXMgb24tZGVtYW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQU2NoZW1hTG9hZGVyIHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBwcmlvcml0eSBmb3IgbG9hZGVyIG9yZGVyaW5nLiBIaWdoZXIgbnVtYmVycyA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB1c2VzIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAgICAgKi9cbiAgICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhpcyBsb2FkZXIgY2FuIGhhbmRsZSB0aGUgZ2l2ZW4gc2NoZW1hIG5hbWVcbiAgICAgKiBAcGFyYW0gc2NoZW1hTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NoZW1hIHRvIGxvYWRcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoaXMgbG9hZGVyIGNhbiBsb2FkIHRoZSBzY2hlbWFcbiAgICAgKi9cbiAgICBjYW5Mb2FkKHNjaGVtYU5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyB0aGUgc2NoZW1hIGRlZmluaXRpb24gZm9yIHRoZSBnaXZlbiBuYW1lXG4gICAgICogQHBhcmFtIHNjaGVtYU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjaGVtYSB0byBsb2FkXG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzY2hlbWEgZGVmaW5pdGlvbiBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGxvYWQoc2NoZW1hTmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBTY2hlbWFEZWZpbml0aW9uIHwgbnVsbD47XG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","import { inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXP_SCHEMA_LOADER_SETUP } from './schema-extension.token';\nimport { AXPSchemaRegistry } from './schema.registry';\n//#endregion\n//#region ---- Provider Functions ----\n/**\n * Provide schema loaders for on-demand schema loading.\n *\n * Schema loaders enable the registry to load schemas that are not registered\n * at build time. This is useful for:\n * - Loading schemas from external APIs\n * - Dynamic schema generation\n * - Lazy loading of large schema sets\n * - Development-time schema hot-reloading\n *\n * @param loaders Array of loader classes or loader configurations\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * // Simple loader registration\n * provideSchemaLoaders([\n * HttpSchemaLoader,\n * FileSystemSchemaLoader\n * ])\n *\n * // With priority configuration\n * provideSchemaLoaders([\n * { loader: HttpSchemaLoader, priority: 10 },\n * { loader: FileSystemSchemaLoader, priority: 5 }\n * ])\n * ```\n */\nexport function provideSchemaLoaders(loaders) {\n return makeEnvironmentProviders([\n {\n provide: AXP_SCHEMA_LOADER_SETUP,\n useFactory: async () => {\n const registry = inject(AXPSchemaRegistry);\n // Register each loader with the registry\n for (const loader of loaders) {\n const loaderClass = typeof loader === 'function' ? loader : loader.loader;\n registry.addLoader(loaderClass);\n }\n return true;\n },\n multi: true\n }\n ]);\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1zY2hlbWEtbG9hZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvcmVnaXN0cmllcy9zY2hlbWEvcHJvdmlkZS1zY2hlbWEtbG9hZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLE1BQU0sRUFBRSx3QkFBd0IsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWN0RCxZQUFZO0FBRVosMENBQTBDO0FBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLE9BQTZEO0lBRTdELE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRTNDLHlDQUF5QztnQkFDekMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQzFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBpbmplY3QsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycywgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQU2NoZW1hTG9hZGVyIH0gZnJvbSAnLi9zY2hlbWEtbG9hZGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBWFBfU0NIRU1BX0xPQURFUl9TRVRVUCB9IGZyb20gJy4vc2NoZW1hLWV4dGVuc2lvbi50b2tlbic7XG5pbXBvcnQgeyBBWFBTY2hlbWFSZWdpc3RyeSB9IGZyb20gJy4vc2NoZW1hLnJlZ2lzdHJ5JztcblxuLy8jcmVnaW9uIC0tLS0gICBTY2hlbWEgTG9hZGVyIENvbmZpZ3VyYXRpb24gICAtLS0tXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBzY2hlbWEgbG9hZGVyIHdpdGggb3B0aW9uYWwgcHJpb3JpdHkgc2V0dGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUFNjaGVtYUxvYWRlckNvbmZpZyB7XG4gICAgLyoqIFRoZSBsb2FkZXIgY2xhc3MgdG8gaW5zdGFudGlhdGUgKi9cbiAgICBsb2FkZXI6IFR5cGU8QVhQU2NoZW1hTG9hZGVyPjtcbiAgICAvKiogT3B0aW9uYWwgcHJpb3JpdHkgZm9yIGxvYWRlciBvcmRlcmluZyAoaGlnaGVyID0gaGlnaGVyIHByaW9yaXR5KSAqL1xuICAgIHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBQcm92aWRlciBGdW5jdGlvbnMgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZSBzY2hlbWEgbG9hZGVycyBmb3Igb24tZGVtYW5kIHNjaGVtYSBsb2FkaW5nLlxuICogXG4gKiBTY2hlbWEgbG9hZGVycyBlbmFibGUgdGhlIHJlZ2lzdHJ5IHRvIGxvYWQgc2NoZW1hcyB0aGF0IGFyZSBub3QgcmVnaXN0ZXJlZFxuICogYXQgYnVpbGQgdGltZS4gVGhpcyBpcyB1c2VmdWwgZm9yOlxuICogLSBMb2FkaW5nIHNjaGVtYXMgZnJvbSBleHRlcm5hbCBBUElzXG4gKiAtIER5bmFtaWMgc2NoZW1hIGdlbmVyYXRpb25cbiAqIC0gTGF6eSBsb2FkaW5nIG9mIGxhcmdlIHNjaGVtYSBzZXRzXG4gKiAtIERldmVsb3BtZW50LXRpbWUgc2NoZW1hIGhvdC1yZWxvYWRpbmdcbiAqIFxuICogQHBhcmFtIGxvYWRlcnMgQXJyYXkgb2YgbG9hZGVyIGNsYXNzZXMgb3IgbG9hZGVyIGNvbmZpZ3VyYXRpb25zXG4gKiBAcmV0dXJucyBFbnZpcm9ubWVudCBwcm92aWRlcnMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTaW1wbGUgbG9hZGVyIHJlZ2lzdHJhdGlvblxuICogcHJvdmlkZVNjaGVtYUxvYWRlcnMoW1xuICogICBIdHRwU2NoZW1hTG9hZGVyLFxuICogICBGaWxlU3lzdGVtU2NoZW1hTG9hZGVyXG4gKiBdKVxuICogXG4gKiAvLyBXaXRoIHByaW9yaXR5IGNvbmZpZ3VyYXRpb25cbiAqIHByb3ZpZGVTY2hlbWFMb2FkZXJzKFtcbiAqICAgeyBsb2FkZXI6IEh0dHBTY2hlbWFMb2FkZXIsIHByaW9yaXR5OiAxMCB9LFxuICogICB7IGxvYWRlcjogRmlsZVN5c3RlbVNjaGVtYUxvYWRlciwgcHJpb3JpdHk6IDUgfVxuICogXSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNjaGVtYUxvYWRlcnMoXG4gICAgbG9hZGVyczogQXJyYXk8VHlwZTxBWFBTY2hlbWFMb2FkZXI+IHwgQVhQU2NoZW1hTG9hZGVyQ29uZmlnPlxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfU0NIRU1BX0xPQURFUl9TRVRVUCxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IGluamVjdChBWFBTY2hlbWFSZWdpc3RyeSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBlYWNoIGxvYWRlciB3aXRoIHRoZSByZWdpc3RyeVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9hZGVyQ2xhc3MgPSB0eXBlb2YgbG9hZGVyID09PSAnZnVuY3Rpb24nID8gbG9hZGVyIDogbG9hZGVyLmxvYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkuYWRkTG9hZGVyKGxvYWRlckNsYXNzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSk7XG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","import { inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPSchemaRegistry } from './schema.registry';\nimport { AXP_SCHEMA_SETUP } from './schema-extension.token';\n//#endregion\n//#region ---- Provider Functions ----\n/**\n * Provide schema setups for registration during application bootstrap.\n *\n * This is the primary way to register schemas that are known at build time.\n * Schemas registered this way are immediately available in the registry.\n *\n * @param schemas Array of schema entries to register\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideSchemaSetups([\n * {\n * definition: emailSchema,\n * options: {\n * tags: ['user', 'contact'],\n * description: 'Email field schema'\n * }\n * },\n * {\n * definition: phoneSchema,\n * options: { tags: ['contact'] }\n * }\n * ])\n * ```\n */\nexport function provideSchemaSetups(schemas) {\n return makeEnvironmentProviders([\n {\n provide: AXP_SCHEMA_SETUP,\n useFactory: () => {\n const registry = inject(AXPSchemaRegistry);\n // Register all schemas with their options\n for (const schema of schemas) {\n registry.register(schema.definition, schema.options);\n }\n return true;\n },\n multi: true\n }\n ]);\n}\n/**\n * Convenience function to provide a single schema setup.\n *\n * Useful when you need to register just one schema or want to keep\n * schema registrations separate for organizational purposes.\n *\n * @param definition The schema definition to register\n * @param options Optional registration options and metadata\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideSchema(emailSchema, {\n * tags: ['user', 'contact'],\n * description: 'User email field'\n * })\n * ```\n */\nexport function provideSchema(definition, options) {\n return provideSchemaSetups([{ definition, options }]);\n}\n/**\n * Provide schema setups from a factory function for dynamic registration.\n *\n * Useful when schemas need to be generated at runtime, loaded from external\n * sources, or depend on configuration that's not available at build time.\n *\n * @param schemaFactory Factory function that returns schema entries\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideSchemasFromFactory(async () => {\n * const config = await loadConfiguration();\n * return config.schemas.map(schema => ({\n * definition: schema,\n * options: { tags: ['dynamic'] }\n * }));\n * })\n * ```\n */\nexport function provideSchemasFromFactory(schemaFactory) {\n return makeEnvironmentProviders([\n {\n provide: AXP_SCHEMA_SETUP,\n useFactory: async () => {\n const registry = inject(AXPSchemaRegistry);\n const schemas = await schemaFactory();\n // Register all factory-generated schemas\n for (const schema of schemas) {\n registry.register(schema.definition, schema.options);\n }\n return true;\n },\n multi: true\n }\n ]);\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1zY2hlbWEtc2V0dXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL3NjaGVtYS9wcm92aWRlLXNjaGVtYS1zZXR1cHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixNQUFNLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFnQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBYzVELFlBQVk7QUFFWiwwQ0FBMEM7QUFFMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBeUI7SUFDekQsT0FBTyx3QkFBd0IsQ0FBQztRQUM1QjtZQUNJLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDYixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFFM0MsMENBQTBDO2dCQUMxQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUMzQixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQ3pCLFVBQStCLEVBQy9CLE9BQXNDO0lBRXRDLE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUNyQyxhQUFpRTtJQUVqRSxPQUFPLHdCQUF3QixDQUFDO1FBQzVCO1lBQ0ksT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ25CLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsRUFBRSxDQUFDO2dCQUV0Qyx5Q0FBeUM7Z0JBQ3pDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQzNCLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pELENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBpbmplY3QsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQU2NoZW1hRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2RlZmluaXRpb25zL3NjaGVtYS1kZWZpbml0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUFNjaGVtYVJlZ2lzdHJ5LCBBWFBTY2hlbWFSZWdpc3RyYXRpb25PcHRpb25zIH0gZnJvbSAnLi9zY2hlbWEucmVnaXN0cnknO1xuaW1wb3J0IHsgQVhQX1NDSEVNQV9TRVRVUCB9IGZyb20gJy4vc2NoZW1hLWV4dGVuc2lvbi50b2tlbic7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogU2NoZW1hIGVudHJ5IGZvciByZWdpc3RyYXRpb24gY29udGFpbmluZyBkZWZpbml0aW9uIGFuZCBvcHRpb25hbCBtZXRhZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUFNjaGVtYUVudHJ5IHtcbiAgICAvKiogVGhlIHNjaGVtYSBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyICovXG4gICAgZGVmaW5pdGlvbjogQVhQU2NoZW1hRGVmaW5pdGlvbjtcbiAgICAvKiogT3B0aW9uYWwgcmVnaXN0cmF0aW9uIG9wdGlvbnMgYW5kIG1ldGFkYXRhICovXG4gICAgb3B0aW9ucz86IEFYUFNjaGVtYVJlZ2lzdHJhdGlvbk9wdGlvbnM7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVyIEZ1bmN0aW9ucyAgIC0tLS1cblxuLyoqXG4gKiBQcm92aWRlIHNjaGVtYSBzZXR1cHMgZm9yIHJlZ2lzdHJhdGlvbiBkdXJpbmcgYXBwbGljYXRpb24gYm9vdHN0cmFwLlxuICogXG4gKiBUaGlzIGlzIHRoZSBwcmltYXJ5IHdheSB0byByZWdpc3RlciBzY2hlbWFzIHRoYXQgYXJlIGtub3duIGF0IGJ1aWxkIHRpbWUuXG4gKiBTY2hlbWFzIHJlZ2lzdGVyZWQgdGhpcyB3YXkgYXJlIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBpbiB0aGUgcmVnaXN0cnkuXG4gKiBcbiAqIEBwYXJhbSBzY2hlbWFzIEFycmF5IG9mIHNjaGVtYSBlbnRyaWVzIHRvIHJlZ2lzdGVyXG4gKiBAcmV0dXJucyBFbnZpcm9ubWVudCBwcm92aWRlcnMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlU2NoZW1hU2V0dXBzKFtcbiAqICAge1xuICogICAgIGRlZmluaXRpb246IGVtYWlsU2NoZW1hLFxuICogICAgIG9wdGlvbnM6IHtcbiAqICAgICAgIHRhZ3M6IFsndXNlcicsICdjb250YWN0J10sXG4gKiAgICAgICBkZXNjcmlwdGlvbjogJ0VtYWlsIGZpZWxkIHNjaGVtYSdcbiAqICAgICB9XG4gKiAgIH0sXG4gKiAgIHtcbiAqICAgICBkZWZpbml0aW9uOiBwaG9uZVNjaGVtYSxcbiAqICAgICBvcHRpb25zOiB7IHRhZ3M6IFsnY29udGFjdCddIH1cbiAqICAgfVxuICogXSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNjaGVtYVNldHVwcyhzY2hlbWFzOiBBWFBTY2hlbWFFbnRyeVtdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfU0NIRU1BX1NFVFVQLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5qZWN0KEFYUFNjaGVtYVJlZ2lzdHJ5KTtcblxuICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGFsbCBzY2hlbWFzIHdpdGggdGhlaXIgb3B0aW9uc1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoc2NoZW1hLmRlZmluaXRpb24sIHNjaGVtYS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcHJvdmlkZSBhIHNpbmdsZSBzY2hlbWEgc2V0dXAuXG4gKiBcbiAqIFVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIHJlZ2lzdGVyIGp1c3Qgb25lIHNjaGVtYSBvciB3YW50IHRvIGtlZXBcbiAqIHNjaGVtYSByZWdpc3RyYXRpb25zIHNlcGFyYXRlIGZvciBvcmdhbml6YXRpb25hbCBwdXJwb3Nlcy5cbiAqIFxuICogQHBhcmFtIGRlZmluaXRpb24gVGhlIHNjaGVtYSBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCByZWdpc3RyYXRpb24gb3B0aW9ucyBhbmQgbWV0YWRhdGFcbiAqIEByZXR1cm5zIEVudmlyb25tZW50IHByb3ZpZGVycyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByb3ZpZGVTY2hlbWEoZW1haWxTY2hlbWEsIHtcbiAqICAgdGFnczogWyd1c2VyJywgJ2NvbnRhY3QnXSxcbiAqICAgZGVzY3JpcHRpb246ICdVc2VyIGVtYWlsIGZpZWxkJ1xuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNjaGVtYShcbiAgICBkZWZpbml0aW9uOiBBWFBTY2hlbWFEZWZpbml0aW9uLFxuICAgIG9wdGlvbnM/OiBBWFBTY2hlbWFSZWdpc3RyYXRpb25PcHRpb25zXG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIHByb3ZpZGVTY2hlbWFTZXR1cHMoW3sgZGVmaW5pdGlvbiwgb3B0aW9ucyB9XSk7XG59XG5cbi8qKlxuICogUHJvdmlkZSBzY2hlbWEgc2V0dXBzIGZyb20gYSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAqIFxuICogVXNlZnVsIHdoZW4gc2NoZW1hcyBuZWVkIHRvIGJlIGdlbmVyYXRlZCBhdCBydW50aW1lLCBsb2FkZWQgZnJvbSBleHRlcm5hbFxuICogc291cmNlcywgb3IgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb24gdGhhdCdzIG5vdCBhdmFpbGFibGUgYXQgYnVpbGQgdGltZS5cbiAqIFxuICogQHBhcmFtIHNjaGVtYUZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgc2NoZW1hIGVudHJpZXNcbiAqIEByZXR1cm5zIEVudmlyb25tZW50IHByb3ZpZGVycyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByb3ZpZGVTY2hlbWFzRnJvbUZhY3RvcnkoYXN5bmMgKCkgPT4ge1xuICogICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlndXJhdGlvbigpO1xuICogICByZXR1cm4gY29uZmlnLnNjaGVtYXMubWFwKHNjaGVtYSA9PiAoe1xuICogICAgIGRlZmluaXRpb246IHNjaGVtYSxcbiAqICAgICBvcHRpb25zOiB7IHRhZ3M6IFsnZHluYW1pYyddIH1cbiAqICAgfSkpO1xuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNjaGVtYXNGcm9tRmFjdG9yeShcbiAgICBzY2hlbWFGYWN0b3J5OiAoKSA9PiBBWFBTY2hlbWFFbnRyeVtdIHwgUHJvbWlzZTxBWFBTY2hlbWFFbnRyeVtdPlxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfU0NIRU1BX1NFVFVQLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5qZWN0KEFYUFNjaGVtYVJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFzID0gYXdhaXQgc2NoZW1hRmFjdG9yeSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYWxsIGZhY3RvcnktZ2VuZXJhdGVkIHNjaGVtYXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKHNjaGVtYS5kZWZpbml0aW9uLCBzY2hlbWEub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0pO1xufVxuXG4vLyNlbmRyZWdpb24gIl19","import { inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPSchemaRegistry } from './schema.registry';\nimport { AXP_SCHEMA_EXTENSION, AXP_SCHEMA_MIDDLEWARE_SETUP } from './schema-extension.token';\n//#endregion\n//#region ---- Provider Functions ----\n/**\n * Provide schema middleware for registration in the application.\n *\n * Supports both global middleware (applies to all schemas) and targeted middleware\n * (applies only to schemas matching specific patterns).\n *\n * @param middleware Array of middleware entries to register\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * // Global middleware\n * provideSchemaMiddleware([\n * (context) => {\n * if (context.schema.dataType === 'string') {\n * context.searchable(true);\n * }\n * }\n * ])\n *\n * // Targeted middleware\n * provideSchemaMiddleware([\n * {\n * target: /^user_/,\n * middleware: (context) => context.withMetadata({ category: 'user' })\n * }\n * ])\n * ```\n */\nexport function provideSchemaMiddleware(middleware) {\n const global = [];\n const targeted = [];\n // Separate global and targeted middleware for different processing\n for (const entry of middleware) {\n if (typeof entry === 'function') {\n global.push(entry);\n }\n else {\n targeted.push(entry);\n }\n }\n return makeEnvironmentProviders([\n // Setup global middleware that applies to all schemas\n ...(global.length > 0 ? [{\n provide: AXP_SCHEMA_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPSchemaRegistry);\n for (const mw of global) {\n registry.addGlobalMiddleware(mw);\n }\n return true;\n },\n multi: true\n }] : []),\n // Register targeted middleware entries for future extension support\n ...targeted.map(entry => ({\n provide: AXP_SCHEMA_EXTENSION,\n useValue: entry,\n multi: true\n }))\n ]);\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1zY2hlbWEtbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvcmVnaXN0cmllcy9zY2hlbWEvcHJvdmlkZS1zY2hlbWEtbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVc3RixZQUFZO0FBRVosMENBQTBDO0FBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxVQUFzQztJQUd0QyxNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFtRSxFQUFFLENBQUM7SUFFcEYsbUVBQW1FO0lBQ25FLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ0osUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sd0JBQXdCLENBQUM7UUFDNUIsc0RBQXNEO1FBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsT0FBTyxFQUFFLDJCQUEyQjtnQkFDcEMsVUFBVSxFQUFFLEdBQUcsRUFBRTtvQkFDYixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDM0MsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDdEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxDQUFDO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNoQixDQUFDO2dCQUNELEtBQUssRUFBRSxJQUFJO2FBQ2QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUixvRUFBb0U7UUFDcEUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixPQUFPLEVBQUUsb0JBQW9CO1lBQzdCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7S0FDTixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBpbmplY3QsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQU2NoZW1hUmVnaXN0cnkgfSBmcm9tICcuL3NjaGVtYS5yZWdpc3RyeSc7XG5pbXBvcnQgeyBBWFBTY2hlbWFNaWRkbGV3YXJlIH0gZnJvbSAnLi9zY2hlbWEubWlkZGxld2FyZSc7XG5pbXBvcnQgeyBBWFBfU0NIRU1BX0VYVEVOU0lPTiwgQVhQX1NDSEVNQV9NSURETEVXQVJFX1NFVFVQIH0gZnJvbSAnLi9zY2hlbWEtZXh0ZW5zaW9uLnRva2VuJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBNaWRkbGV3YXJlIGVudHJ5IGZvciByZWdpc3RyYXRpb24gLSBjYW4gYmUgZWl0aGVyIGEgc2ltcGxlIGZ1bmN0aW9uIG9yIHRhcmdldGVkIG1pZGRsZXdhcmVcbiAqL1xuZXhwb3J0IHR5cGUgQVhQU2NoZW1hTWlkZGxld2FyZUVudHJ5ID1cbiAgICB8IEFYUFNjaGVtYU1pZGRsZXdhcmVcbiAgICB8IHsgdGFyZ2V0OiBzdHJpbmcgfCBSZWdFeHA7IG1pZGRsZXdhcmU6IEFYUFNjaGVtYU1pZGRsZXdhcmUgfTtcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXIgRnVuY3Rpb25zICAgLS0tLVxuXG4vKipcbiAqIFByb3ZpZGUgc2NoZW1hIG1pZGRsZXdhcmUgZm9yIHJlZ2lzdHJhdGlvbiBpbiB0aGUgYXBwbGljYXRpb24uXG4gKiBcbiAqIFN1cHBvcnRzIGJvdGggZ2xvYmFsIG1pZGRsZXdhcmUgKGFwcGxpZXMgdG8gYWxsIHNjaGVtYXMpIGFuZCB0YXJnZXRlZCBtaWRkbGV3YXJlXG4gKiAoYXBwbGllcyBvbmx5IHRvIHNjaGVtYXMgbWF0Y2hpbmcgc3BlY2lmaWMgcGF0dGVybnMpLlxuICogXG4gKiBAcGFyYW0gbWlkZGxld2FyZSBBcnJheSBvZiBtaWRkbGV3YXJlIGVudHJpZXMgdG8gcmVnaXN0ZXJcbiAqIEByZXR1cm5zIEVudmlyb25tZW50IHByb3ZpZGVycyBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEdsb2JhbCBtaWRkbGV3YXJlXG4gKiBwcm92aWRlU2NoZW1hTWlkZGxld2FyZShbXG4gKiAgIChjb250ZXh0KSA9PiB7XG4gKiAgICAgaWYgKGNvbnRleHQuc2NoZW1hLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xuICogICAgICAgY29udGV4dC5zZWFyY2hhYmxlKHRydWUpO1xuICogICAgIH1cbiAqICAgfVxuICogXSlcbiAqIFxuICogLy8gVGFyZ2V0ZWQgbWlkZGxld2FyZVxuICogcHJvdmlkZVNjaGVtYU1pZGRsZXdhcmUoW1xuICogICB7XG4gKiAgICAgdGFyZ2V0OiAvXnVzZXJfLyxcbiAqICAgICBtaWRkbGV3YXJlOiAoY29udGV4dCkgPT4gY29udGV4dC53aXRoTWV0YWRhdGEoeyBjYXRlZ29yeTogJ3VzZXInIH0pXG4gKiAgIH1cbiAqIF0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVTY2hlbWFNaWRkbGV3YXJlKFxuICAgIG1pZGRsZXdhcmU6IEFYUFNjaGVtYU1pZGRsZXdhcmVFbnRyeVtdXG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG5cbiAgICBjb25zdCBnbG9iYWw6IEFYUFNjaGVtYU1pZGRsZXdhcmVbXSA9IFtdO1xuICAgIGNvbnN0IHRhcmdldGVkOiB7IHRhcmdldDogc3RyaW5nIHwgUmVnRXhwOyBtaWRkbGV3YXJlOiBBWFBTY2hlbWFNaWRkbGV3YXJlIH1bXSA9IFtdO1xuXG4gICAgLy8gU2VwYXJhdGUgZ2xvYmFsIGFuZCB0YXJnZXRlZCBtaWRkbGV3YXJlIGZvciBkaWZmZXJlbnQgcHJvY2Vzc2luZ1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWlkZGxld2FyZSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBnbG9iYWwucHVzaChlbnRyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRlZC5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICAvLyBTZXR1cCBnbG9iYWwgbWlkZGxld2FyZSB0aGF0IGFwcGxpZXMgdG8gYWxsIHNjaGVtYXNcbiAgICAgICAgLi4uKGdsb2JhbC5sZW5ndGggPiAwID8gW3tcbiAgICAgICAgICAgIHByb3ZpZGU6IEFYUF9TQ0hFTUFfTUlERExFV0FSRV9TRVRVUCxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IGluamVjdChBWFBTY2hlbWFSZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtdyBvZiBnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkuYWRkR2xvYmFsTWlkZGxld2FyZShtdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1dIDogW10pLFxuXG4gICAgICAgIC8vIFJlZ2lzdGVyIHRhcmdldGVkIG1pZGRsZXdhcmUgZW50cmllcyBmb3IgZnV0dXJlIGV4dGVuc2lvbiBzdXBwb3J0XG4gICAgICAgIC4uLnRhcmdldGVkLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQX1NDSEVNQV9FWFRFTlNJT04sXG4gICAgICAgICAgICB1c2VWYWx1ZTogZW50cnksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9KSlcbiAgICBdKTtcbn1cblxuLy8jZW5kcmVnaW9uICJdfQ==","//#region ---- Core Schema Registry ----\n// Core registry and service classes\nexport * from './schema.registry';\nexport * from './schema.service';\n//#endregion\n//#region ---- Schema Middleware System ----\n// Middleware types and context for schema processing\nexport * from './schema.middleware';\nexport * from './schema-middleware.functions';\n//#endregion\n//#region ---- Schema Loading System ----\n// Schema loader interface and providers for on-demand loading\nexport * from './schema-loader.interface';\nexport * from './provide-schema-loaders';\n//#endregion\n//#region ---- Configuration Providers ----\n// Provider functions for configuring schemas and middleware\nexport * from './provide-schema-setups';\nexport * from './provide-schema-middleware';\n//#endregion\n//#region ---- Dependency Injection Tokens ----\n// DI tokens for internal system coordination\nexport * from './schema-extension.token';\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3JlZ2lzdHJpZXMvc2NoZW1hL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRDQUE0QztBQUU1QyxvQ0FBb0M7QUFDcEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFlBQVk7QUFFWixnREFBZ0Q7QUFFaEQscURBQXFEO0FBQ3JELGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywrQkFBK0IsQ0FBQztBQUU5QyxZQUFZO0FBRVosNkNBQTZDO0FBRTdDLDhEQUE4RDtBQUM5RCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsWUFBWTtBQUVaLCtDQUErQztBQUUvQyw0REFBNEQ7QUFDNUQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLFlBQVk7QUFFWixtREFBbUQ7QUFFbkQsNkNBQTZDO0FBQzdDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiAtLS0tICAgQ29yZSBTY2hlbWEgUmVnaXN0cnkgICAtLS0tXG5cbi8vIENvcmUgcmVnaXN0cnkgYW5kIHNlcnZpY2UgY2xhc3Nlc1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEucmVnaXN0cnknO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEuc2VydmljZSc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBNaWRkbGV3YXJlIFN5c3RlbSAgIC0tLS1cblxuLy8gTWlkZGxld2FyZSB0eXBlcyBhbmQgY29udGV4dCBmb3Igc2NoZW1hIHByb2Nlc3NpbmdcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hLm1pZGRsZXdhcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEtbWlkZGxld2FyZS5mdW5jdGlvbnMnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBTY2hlbWEgTG9hZGluZyBTeXN0ZW0gICAtLS0tXG5cbi8vIFNjaGVtYSBsb2FkZXIgaW50ZXJmYWNlIGFuZCBwcm92aWRlcnMgZm9yIG9uLWRlbWFuZCBsb2FkaW5nXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS1sb2FkZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZS1zY2hlbWEtbG9hZGVycyc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIENvbmZpZ3VyYXRpb24gUHJvdmlkZXJzICAgLS0tLVxuXG4vLyBQcm92aWRlciBmdW5jdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHNjaGVtYXMgYW5kIG1pZGRsZXdhcmVcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZS1zY2hlbWEtc2V0dXBzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZS1zY2hlbWEtbWlkZGxld2FyZSc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIERlcGVuZGVuY3kgSW5qZWN0aW9uIFRva2VucyAgIC0tLS1cblxuLy8gREkgdG9rZW5zIGZvciBpbnRlcm5hbCBzeXN0ZW0gY29vcmRpbmF0aW9uXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS1leHRlbnNpb24udG9rZW4nO1xuXG4vLyNlbmRyZWdpb24gIl19","//#region ---- Domain Middleware Context ----\n/**\n * Context class for domain middleware operations providing a fluent API for domain definition manipulation.\n *\n * This class serves as the interface between middleware functions and domain definitions,\n * offering methods to modify various aspects of a domain definition including:\n * - Metadata and custom properties\n * - Validation rules\n * - Feature flags and configuration\n * - Transformations and augmentations\n *\n * All methods return `this` to enable fluent method chaining.\n */\nexport class AXPDomainMiddlewareContext {\n constructor(definition, type) {\n // Deep clone to avoid mutating the original definition\n this._definition = JSON.parse(JSON.stringify(definition));\n this._type = type;\n }\n /**\n * Get the current definition (read-only access)\n */\n get definition() {\n return this._definition;\n }\n /**\n * Get the type of domain object being processed\n */\n get type() {\n return this._type;\n }\n /**\n * Set metadata for the domain definition\n */\n setMetadata(key, value) {\n const def = this._definition;\n if (!def.metadata) {\n def.metadata = {};\n }\n def.metadata[key] = value;\n return this;\n }\n /**\n * Get metadata value\n */\n getMetadata(key) {\n const def = this._definition;\n return def.metadata?.[key];\n }\n /**\n * Add validation rule to the definition (for entities and aggregates)\n */\n addValidation(rule) {\n if ('validations' in this._definition) {\n this._definition.validations = this._definition.validations || [];\n this._definition.validations.push(rule);\n }\n return this;\n }\n /**\n * Transform fields (for entities)\n */\n transformFields(transformer) {\n if ('fields' in this._definition && this._definition.fields) {\n this._definition.fields = this._definition.fields.map(transformer);\n }\n return this;\n }\n /**\n * Add field to entity definition\n */\n addField(field) {\n if ('fields' in this._definition) {\n this._definition.fields = this._definition.fields || [];\n this._definition.fields.push(field);\n }\n return this;\n }\n /**\n * Set title with transformation\n */\n setTitle(title) {\n this._definition.title = title;\n return this;\n }\n /**\n * Apply conditional logic\n */\n when(condition, callback) {\n if (condition) {\n callback(this);\n }\n return this;\n }\n /**\n * Replace the entire definition\n */\n replaceDefinition(newDefinition) {\n this._definition = JSON.parse(JSON.stringify(newDefinition));\n return this;\n }\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLW1pZGRsZXdhcmUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL2RvbWFpbi9kb21haW4tbWlkZGxld2FyZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsaURBQWlEO0FBRWpEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxPQUFPLDBCQUEwQjtJQUluQyxZQUFZLFVBQStCLEVBQUUsSUFBdUM7UUFDaEYsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQWtCLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLEdBQVc7UUFDbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQWtCLENBQUM7UUFDcEMsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLElBQVM7UUFDbkIsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxXQUFnQztRQUM1QyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsS0FBVTtRQUNmLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsS0FBYTtRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLFNBQWtCLEVBQUUsUUFBaUM7UUFDdEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsYUFBa0M7UUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFjRCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQRG9tYWluRGVmaW5pdGlvbiB9IGZyb20gJy4vZG9tYWluLWxvYWRlci5pbnRlcmZhY2UnO1xuXG4vLyNyZWdpb24gLS0tLSAgIERvbWFpbiBNaWRkbGV3YXJlIENvbnRleHQgICAtLS0tXG5cbi8qKlxuICogQ29udGV4dCBjbGFzcyBmb3IgZG9tYWluIG1pZGRsZXdhcmUgb3BlcmF0aW9ucyBwcm92aWRpbmcgYSBmbHVlbnQgQVBJIGZvciBkb21haW4gZGVmaW5pdGlvbiBtYW5pcHVsYXRpb24uXG4gKiBcbiAqIFRoaXMgY2xhc3Mgc2VydmVzIGFzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBhbmQgZG9tYWluIGRlZmluaXRpb25zLFxuICogb2ZmZXJpbmcgbWV0aG9kcyB0byBtb2RpZnkgdmFyaW91cyBhc3BlY3RzIG9mIGEgZG9tYWluIGRlZmluaXRpb24gaW5jbHVkaW5nOlxuICogLSBNZXRhZGF0YSBhbmQgY3VzdG9tIHByb3BlcnRpZXNcbiAqIC0gVmFsaWRhdGlvbiBydWxlc1xuICogLSBGZWF0dXJlIGZsYWdzIGFuZCBjb25maWd1cmF0aW9uXG4gKiAtIFRyYW5zZm9ybWF0aW9ucyBhbmQgYXVnbWVudGF0aW9uc1xuICogXG4gKiBBbGwgbWV0aG9kcyByZXR1cm4gYHRoaXNgIHRvIGVuYWJsZSBmbHVlbnQgbWV0aG9kIGNoYWluaW5nLlxuICovXG5leHBvcnQgY2xhc3MgQVhQRG9tYWluTWlkZGxld2FyZUNvbnRleHQge1xuICAgIHByaXZhdGUgX2RlZmluaXRpb246IEFYUERvbWFpbkRlZmluaXRpb247XG4gICAgcHJpdmF0ZSBfdHlwZTogJ21vZHVsZScgfCAnYWdncmVnYXRlJyB8ICdlbnRpdHknO1xuXG4gICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogQVhQRG9tYWluRGVmaW5pdGlvbiwgdHlwZTogJ21vZHVsZScgfCAnYWdncmVnYXRlJyB8ICdlbnRpdHknKSB7XG4gICAgICAgIC8vIERlZXAgY2xvbmUgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGRlZmluaXRpb25cbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmaW5pdGlvbikpO1xuICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbiAocmVhZC1vbmx5IGFjY2VzcylcbiAgICAgKi9cbiAgICBnZXQgZGVmaW5pdGlvbigpOiBBWFBEb21haW5EZWZpbml0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB0eXBlIG9mIGRvbWFpbiBvYmplY3QgYmVpbmcgcHJvY2Vzc2VkXG4gICAgICovXG4gICAgZ2V0IHR5cGUoKTogJ21vZHVsZScgfCAnYWdncmVnYXRlJyB8ICdlbnRpdHknIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IG1ldGFkYXRhIGZvciB0aGUgZG9tYWluIGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBzZXRNZXRhZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHRoaXMge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLl9kZWZpbml0aW9uIGFzIGFueTtcbiAgICAgICAgaWYgKCFkZWYubWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGRlZi5tZXRhZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGRlZi5tZXRhZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBtZXRhZGF0YSB2YWx1ZVxuICAgICAqL1xuICAgIGdldE1ldGFkYXRhKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmaW5pdGlvbiBhcyBhbnk7XG4gICAgICAgIHJldHVybiBkZWYubWV0YWRhdGE/LltrZXldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB2YWxpZGF0aW9uIHJ1bGUgdG8gdGhlIGRlZmluaXRpb24gKGZvciBlbnRpdGllcyBhbmQgYWdncmVnYXRlcylcbiAgICAgKi9cbiAgICBhZGRWYWxpZGF0aW9uKHJ1bGU6IGFueSk6IHRoaXMge1xuICAgICAgICBpZiAoJ3ZhbGlkYXRpb25zJyBpbiB0aGlzLl9kZWZpbml0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZpbml0aW9uLnZhbGlkYXRpb25zID0gdGhpcy5fZGVmaW5pdGlvbi52YWxpZGF0aW9ucyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuX2RlZmluaXRpb24udmFsaWRhdGlvbnMucHVzaChydWxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gZmllbGRzIChmb3IgZW50aXRpZXMpXG4gICAgICovXG4gICAgdHJhbnNmb3JtRmllbGRzKHRyYW5zZm9ybWVyOiAoZmllbGQ6IGFueSkgPT4gYW55KTogdGhpcyB7XG4gICAgICAgIGlmICgnZmllbGRzJyBpbiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24uZmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZpbml0aW9uLmZpZWxkcyA9IHRoaXMuX2RlZmluaXRpb24uZmllbGRzLm1hcCh0cmFuc2Zvcm1lcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGZpZWxkIHRvIGVudGl0eSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgYWRkRmllbGQoZmllbGQ6IGFueSk6IHRoaXMge1xuICAgICAgICBpZiAoJ2ZpZWxkcycgaW4gdGhpcy5fZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGVmaW5pdGlvbi5maWVsZHMgPSB0aGlzLl9kZWZpbml0aW9uLmZpZWxkcyB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMuX2RlZmluaXRpb24uZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aXRsZSB3aXRoIHRyYW5zZm9ybWF0aW9uXG4gICAgICovXG4gICAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9uLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGNvbmRpdGlvbmFsIGxvZ2ljXG4gICAgICovXG4gICAgd2hlbihjb25kaXRpb246IGJvb2xlYW4sIGNhbGxiYWNrOiAoY29udGV4dDogdGhpcykgPT4gdm9pZCk6IHRoaXMge1xuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlIHRoZSBlbnRpcmUgZGVmaW5pdGlvblxuICAgICAqL1xuICAgIHJlcGxhY2VEZWZpbml0aW9uKG5ld0RlZmluaXRpb246IEFYUERvbWFpbkRlZmluaXRpb24pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobmV3RGVmaW5pdGlvbikpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIERvbWFpbiBNaWRkbGV3YXJlIEludGVyZmFjZSAgIC0tLS1cblxuLyoqXG4gKiBNaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgY2FuIHRyYW5zZm9ybSBkb21haW4gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSBjb250ZXh0IC0gRG9tYWluIG1pZGRsZXdhcmUgY29udGV4dCBwcm92aWRpbmcgZGVmaW5pdGlvbiBpbmZvIGFuZCBjb25maWd1cmF0aW9uIG1ldGhvZHNcbiAqL1xuZXhwb3J0IHR5cGUgQVhQRG9tYWluTWlkZGxld2FyZSA9IChcbiAgICBjb250ZXh0OiBBWFBEb21haW5NaWRkbGV3YXJlQ29udGV4dFxuKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuLy8jZW5kcmVnaW9uICJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXPDomainMiddlewareContext } from './domain-middleware.interface';\nimport { AXPModuleModel } from '../../models/module.model';\nimport { AXPAggregateModel } from '../../models/aggregate.model';\nimport { AXPEntityModel } from '../../models/entity.model';\nimport { AXPSchemaService } from '../schema';\nimport * as i0 from \"@angular/core\";\n//#region ---- Domain Registry Service ----\n/**\n * Central registry for managing domain definitions, middleware, and dynamic loading.\n *\n * Provides:\n * - Path-based domain resolution (module.aggregate.entity)\n * - Definition-level caching with fresh model creation\n * - Type-specific middleware processing\n * - On-demand domain loading with first-wins strategy\n * - Model creation and dependency injection\n */\nexport class AXPDomainRegistry {\n constructor() {\n // Cache definitions (before middleware), not models\n this._definitionCache = new Map();\n // Type-specific middleware collections\n this._moduleMiddleware = [];\n this._aggregateMiddleware = [];\n this._entityMiddleware = [];\n // Registered loaders for on-demand loading\n this._loaders = [];\n // Injected dependencies\n this.schemaService = inject(AXPSchemaService);\n }\n //#region ---- Main Resolution Method ----\n /**\n * Resolve a domain object by path with full middleware processing.\n * Supports definition-level caching with fresh model creation.\n *\n * @param path Domain path (e.g., \"user-management.user-aggregate.user\")\n * @returns Promise that resolves to the domain model\n */\n async resolve(path) {\n const pathInfo = this.parsePath(path);\n // Check definition cache first\n let definition = this._definitionCache.get(path);\n if (!definition) {\n // Load from first available loader\n definition = await this.loadFromLoaders(path, pathInfo.type);\n if (!definition) {\n throw new Error(`Cannot resolve domain path: ${path}`);\n }\n // Cache the raw definition\n this._definitionCache.set(path, definition);\n }\n // Apply type-specific middleware (creates new processed definition)\n const processedDefinition = await this.applyTypeMiddleware(definition, pathInfo.type, path);\n // Create and return fresh model instance (not cached)\n return this.createModel(processedDefinition, pathInfo);\n }\n //#endregion\n //#region ---- Path Parsing ----\n /**\n * Parse domain path string into structured information\n *\n * @param path Domain path to parse\n * @returns Parsed path information\n */\n parsePath(path) {\n const parts = path.split('.');\n if (parts.length === 1) {\n return {\n module: parts[0],\n type: 'module',\n fullPath: path\n };\n }\n else if (parts.length === 2) {\n return {\n module: parts[0],\n aggregate: parts[1],\n type: 'aggregate',\n fullPath: path\n };\n }\n else if (parts.length === 3) {\n return {\n module: parts[0],\n aggregate: parts[1],\n entity: parts[2],\n type: 'entity',\n fullPath: path\n };\n }\n throw new Error(`Invalid domain path format: ${path}. Expected: module, module.aggregate, or module.aggregate.entity`);\n }\n //#endregion\n //#region ---- Loader Management ----\n /**\n * Register a domain loader for on-demand loading\n *\n * @param loader The loader instance to register\n */\n addLoader(loader) {\n this._loaders.push(loader);\n // Sort by priority (highest first) after adding\n this._loaders.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n /**\n * Load definition from registered loaders using first-wins strategy\n *\n * @param path Domain path to load\n * @param type Type of domain object\n * @returns Promise that resolves to definition or undefined\n */\n async loadFromLoaders(path, type) {\n for (const loader of this._loaders) {\n if (loader.canLoad(path, type)) {\n try {\n const definition = await loader.load(path, type);\n if (definition) {\n console.log(`✓ Loaded ${path} from ${loader.constructor.name}`);\n return definition; // Return first successful result\n }\n }\n catch (error) {\n console.warn(`⚠ Loader ${loader.constructor.name} failed for ${path}:`, error);\n // Continue to next loader instead of throwing\n }\n }\n }\n return undefined; // No loader could provide the definition\n }\n //#endregion\n //#region ---- Middleware Management ----\n /**\n * Add middleware for module processing\n */\n addModuleMiddleware(middleware) {\n this._moduleMiddleware.push(middleware);\n }\n /**\n * Add middleware for aggregate processing\n */\n addAggregateMiddleware(middleware) {\n this._aggregateMiddleware.push(middleware);\n }\n /**\n * Add middleware for entity processing\n */\n addEntityMiddleware(middleware) {\n this._entityMiddleware.push(middleware);\n }\n /**\n * Apply type-specific middleware to definition\n *\n * @param definition Raw definition from cache or loader\n * @param type Type of domain object\n * @param path Original path for context\n * @returns Processed definition\n */\n async applyTypeMiddleware(definition, type, path) {\n const middleware = this.getMiddlewareForType(type);\n if (middleware.length === 0) {\n return definition; // No middleware to apply\n }\n const context = new AXPDomainMiddlewareContext(definition, type);\n // Apply all middleware for this type\n for (const mw of middleware) {\n await mw(context);\n }\n return context.definition;\n }\n /**\n * Get middleware collection for specific type\n *\n * @param type Domain object type\n * @returns Array of middleware functions\n */\n getMiddlewareForType(type) {\n switch (type) {\n case 'module': return this._moduleMiddleware;\n case 'aggregate': return this._aggregateMiddleware;\n case 'entity': return this._entityMiddleware;\n default: return [];\n }\n }\n //#endregion\n //#region ---- Model Creation ----\n /**\n * Create domain model from processed definition\n *\n * @param definition Processed definition (after middleware)\n * @param pathInfo Parsed path information\n * @returns Created domain model\n */\n createModel(definition, pathInfo) {\n switch (pathInfo.type) {\n case 'module':\n return new AXPModuleModel(definition);\n case 'aggregate':\n // For aggregate, we need to resolve parent module first\n // This will be simplified when we refactor the models\n const moduleDefinition = {\n name: pathInfo.module,\n title: pathInfo.module,\n aggregates: [definition]\n };\n const parentModule = new AXPModuleModel(moduleDefinition);\n return new AXPAggregateModel(definition, parentModule);\n case 'entity':\n // For entity, we need both module and aggregate parents\n // This will be simplified when we refactor the models\n const entityAggregateDefinition = {\n name: pathInfo.aggregate,\n title: pathInfo.aggregate || '',\n entities: [definition],\n relations: [],\n validations: [],\n actions: []\n };\n const entityModuleDefinition = {\n name: pathInfo.module,\n title: pathInfo.module,\n aggregates: [entityAggregateDefinition]\n };\n const entityModule = new AXPModuleModel(entityModuleDefinition);\n const entityAggregate = new AXPAggregateModel(entityAggregateDefinition, entityModule);\n return new AXPEntityModel(definition, entityAggregate, this.schemaService);\n default:\n throw new Error(`Unknown domain type: ${pathInfo.type}`);\n }\n }\n //#endregion\n //#region ---- Cache Management ----\n /**\n * Clear definition cache for a specific path\n *\n * @param path Path to clear from cache\n */\n invalidateCache(path) {\n this._definitionCache.delete(path);\n }\n /**\n * Clear all cached definitions\n */\n clearCache() {\n this._definitionCache.clear();\n }\n /**\n * Get cache statistics\n */\n getCacheStats() {\n return {\n size: this._definitionCache.size,\n paths: Array.from(this._definitionCache.keys())\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainRegistry, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainRegistry, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL2RvbWFpbi9kb21haW4ucmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUF1QiwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUU3QywrQ0FBK0M7QUFFL0M7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVJLG9EQUFvRDtRQUNuQyxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUUzRSx1Q0FBdUM7UUFDdEIsc0JBQWlCLEdBQTBCLEVBQUUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBMEIsRUFBRSxDQUFDO1FBQ2pELHNCQUFpQixHQUEwQixFQUFFLENBQUM7UUFFL0QsMkNBQTJDO1FBQ25DLGFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRXpDLHdCQUF3QjtRQUNQLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0EwUTdEO0lBeFFHLDhDQUE4QztJQUU5Qzs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFJLElBQVk7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QywrQkFBK0I7UUFD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Q04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDVCxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO1lBQ2hDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsRCxDQUFDO0lBQ04sQ0FBQzsrR0FwUlEsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRG9tYWluTG9hZGVyLCBBWFBEb21haW5EZWZpbml0aW9uLCBBWFBEb21haW5QYXRoSW5mbyB9IGZyb20gJy4vZG9tYWluLWxvYWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQVhQRG9tYWluTWlkZGxld2FyZSwgQVhQRG9tYWluTWlkZGxld2FyZUNvbnRleHQgfSBmcm9tICcuL2RvbWFpbi1taWRkbGV3YXJlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBWFBNb2R1bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9tb2R1bGUubW9kZWwnO1xuaW1wb3J0IHsgQVhQQWdncmVnYXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWdncmVnYXRlLm1vZGVsJztcbmltcG9ydCB7IEFYUEVudGl0eU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBWFBTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vc2NoZW1hJztcblxuLy8jcmVnaW9uIC0tLS0gICBEb21haW4gUmVnaXN0cnkgU2VydmljZSAgIC0tLS1cblxuLyoqXG4gKiBDZW50cmFsIHJlZ2lzdHJ5IGZvciBtYW5hZ2luZyBkb21haW4gZGVmaW5pdGlvbnMsIG1pZGRsZXdhcmUsIGFuZCBkeW5hbWljIGxvYWRpbmcuXG4gKiBcbiAqIFByb3ZpZGVzOlxuICogLSBQYXRoLWJhc2VkIGRvbWFpbiByZXNvbHV0aW9uIChtb2R1bGUuYWdncmVnYXRlLmVudGl0eSlcbiAqIC0gRGVmaW5pdGlvbi1sZXZlbCBjYWNoaW5nIHdpdGggZnJlc2ggbW9kZWwgY3JlYXRpb25cbiAqIC0gVHlwZS1zcGVjaWZpYyBtaWRkbGV3YXJlIHByb2Nlc3NpbmdcbiAqIC0gT24tZGVtYW5kIGRvbWFpbiBsb2FkaW5nIHdpdGggZmlyc3Qtd2lucyBzdHJhdGVneVxuICogLSBNb2RlbCBjcmVhdGlvbiBhbmQgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWFBEb21haW5SZWdpc3RyeSB7XG4gICAgLy8gQ2FjaGUgZGVmaW5pdGlvbnMgKGJlZm9yZSBtaWRkbGV3YXJlKSwgbm90IG1vZGVsc1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmluaXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBEb21haW5EZWZpbml0aW9uPigpO1xuXG4gICAgLy8gVHlwZS1zcGVjaWZpYyBtaWRkbGV3YXJlIGNvbGxlY3Rpb25zXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kdWxlTWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWdncmVnYXRlTWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZW50aXR5TWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdID0gW107XG5cbiAgICAvLyBSZWdpc3RlcmVkIGxvYWRlcnMgZm9yIG9uLWRlbWFuZCBsb2FkaW5nXG4gICAgcHJpdmF0ZSBfbG9hZGVyczogQVhQRG9tYWluTG9hZGVyW10gPSBbXTtcblxuICAgIC8vIEluamVjdGVkIGRlcGVuZGVuY2llc1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hU2VydmljZSA9IGluamVjdChBWFBTY2hlbWFTZXJ2aWNlKTtcblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgTWFpbiBSZXNvbHV0aW9uIE1ldGhvZCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgYSBkb21haW4gb2JqZWN0IGJ5IHBhdGggd2l0aCBmdWxsIG1pZGRsZXdhcmUgcHJvY2Vzc2luZy5cbiAgICAgKiBTdXBwb3J0cyBkZWZpbml0aW9uLWxldmVsIGNhY2hpbmcgd2l0aCBmcmVzaCBtb2RlbCBjcmVhdGlvbi5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcGF0aCBEb21haW4gcGF0aCAoZS5nLiwgXCJ1c2VyLW1hbmFnZW1lbnQudXNlci1hZ2dyZWdhdGUudXNlclwiKVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZG9tYWluIG1vZGVsXG4gICAgICovXG4gICAgYXN5bmMgcmVzb2x2ZTxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcGF0aEluZm8gPSB0aGlzLnBhcnNlUGF0aChwYXRoKTtcblxuICAgICAgICAvLyBDaGVjayBkZWZpbml0aW9uIGNhY2hlIGZpcnN0XG4gICAgICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5fZGVmaW5pdGlvbkNhY2hlLmdldChwYXRoKTtcblxuICAgICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgICAgIC8vIExvYWQgZnJvbSBmaXJzdCBhdmFpbGFibGUgbG9hZGVyXG4gICAgICAgICAgICBkZWZpbml0aW9uID0gYXdhaXQgdGhpcy5sb2FkRnJvbUxvYWRlcnMocGF0aCwgcGF0aEluZm8udHlwZSk7XG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGRvbWFpbiBwYXRoOiAke3BhdGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDYWNoZSB0aGUgcmF3IGRlZmluaXRpb25cbiAgICAgICAgICAgIHRoaXMuX2RlZmluaXRpb25DYWNoZS5zZXQocGF0aCwgZGVmaW5pdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBseSB0eXBlLXNwZWNpZmljIG1pZGRsZXdhcmUgKGNyZWF0ZXMgbmV3IHByb2Nlc3NlZCBkZWZpbml0aW9uKVxuICAgICAgICBjb25zdCBwcm9jZXNzZWREZWZpbml0aW9uID0gYXdhaXQgdGhpcy5hcHBseVR5cGVNaWRkbGV3YXJlKGRlZmluaXRpb24sIHBhdGhJbmZvLnR5cGUsIHBhdGgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIGZyZXNoIG1vZGVsIGluc3RhbmNlIChub3QgY2FjaGVkKVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNb2RlbChwcm9jZXNzZWREZWZpbml0aW9uLCBwYXRoSW5mbykgYXMgVDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgUGF0aCBQYXJzaW5nICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgZG9tYWluIHBhdGggc3RyaW5nIGludG8gc3RydWN0dXJlZCBpbmZvcm1hdGlvblxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXRoIERvbWFpbiBwYXRoIHRvIHBhcnNlXG4gICAgICogQHJldHVybnMgUGFyc2VkIHBhdGggaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlUGF0aChwYXRoOiBzdHJpbmcpOiBBWFBEb21haW5QYXRoSW5mbyB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLicpO1xuXG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlOiBwYXJ0c1swXSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbW9kdWxlJyxcbiAgICAgICAgICAgICAgICBmdWxsUGF0aDogcGF0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbW9kdWxlOiBwYXJ0c1swXSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGU6IHBhcnRzWzFdLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdhZ2dyZWdhdGUnLFxuICAgICAgICAgICAgICAgIGZ1bGxQYXRoOiBwYXRoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb2R1bGU6IHBhcnRzWzBdLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZTogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgZW50aXR5OiBwYXJ0c1syXSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZW50aXR5JyxcbiAgICAgICAgICAgICAgICBmdWxsUGF0aDogcGF0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkb21haW4gcGF0aCBmb3JtYXQ6ICR7cGF0aH0uIEV4cGVjdGVkOiBtb2R1bGUsIG1vZHVsZS5hZ2dyZWdhdGUsIG9yIG1vZHVsZS5hZ2dyZWdhdGUuZW50aXR5YCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIExvYWRlciBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBkb21haW4gbG9hZGVyIGZvciBvbi1kZW1hbmQgbG9hZGluZ1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBsb2FkZXIgVGhlIGxvYWRlciBpbnN0YW5jZSB0byByZWdpc3RlclxuICAgICAqL1xuICAgIGFkZExvYWRlcihsb2FkZXI6IEFYUERvbWFpbkxvYWRlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkZXJzLnB1c2gobG9hZGVyKTtcbiAgICAgICAgLy8gU29ydCBieSBwcmlvcml0eSAoaGlnaGVzdCBmaXJzdCkgYWZ0ZXIgYWRkaW5nXG4gICAgICAgIHRoaXMuX2xvYWRlcnMuc29ydCgoYSwgYikgPT4gKGIucHJpb3JpdHkgPz8gMCkgLSAoYS5wcmlvcml0eSA/PyAwKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBkZWZpbml0aW9uIGZyb20gcmVnaXN0ZXJlZCBsb2FkZXJzIHVzaW5nIGZpcnN0LXdpbnMgc3RyYXRlZ3lcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcGF0aCBEb21haW4gcGF0aCB0byBsb2FkXG4gICAgICogQHBhcmFtIHR5cGUgVHlwZSBvZiBkb21haW4gb2JqZWN0XG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGRlZmluaXRpb24gb3IgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbUxvYWRlcnMocGF0aDogc3RyaW5nLCB0eXBlOiAnbW9kdWxlJyB8ICdhZ2dyZWdhdGUnIHwgJ2VudGl0eScpOiBQcm9taXNlPEFYUERvbWFpbkRlZmluaXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsb2FkZXIgb2YgdGhpcy5fbG9hZGVycykge1xuICAgICAgICAgICAgaWYgKGxvYWRlci5jYW5Mb2FkKHBhdGgsIHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGF3YWl0IGxvYWRlci5sb2FkKHBhdGgsIHR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOKckyBMb2FkZWQgJHtwYXRofSBmcm9tICR7bG9hZGVyLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjsgLy8gUmV0dXJuIGZpcnN0IHN1Y2Nlc3NmdWwgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYOKaoCBMb2FkZXIgJHtsb2FkZXIuY29uc3RydWN0b3IubmFtZX0gZmFpbGVkIGZvciAke3BhdGh9OmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBsb2FkZXIgaW5zdGVhZCBvZiB0aHJvd2luZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vIGxvYWRlciBjb3VsZCBwcm92aWRlIHRoZSBkZWZpbml0aW9uXG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE1pZGRsZXdhcmUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEFkZCBtaWRkbGV3YXJlIGZvciBtb2R1bGUgcHJvY2Vzc2luZ1xuICAgICAqL1xuICAgIGFkZE1vZHVsZU1pZGRsZXdhcmUobWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tb2R1bGVNaWRkbGV3YXJlLnB1c2gobWlkZGxld2FyZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIG1pZGRsZXdhcmUgZm9yIGFnZ3JlZ2F0ZSBwcm9jZXNzaW5nXG4gICAgICovXG4gICAgYWRkQWdncmVnYXRlTWlkZGxld2FyZShtaWRkbGV3YXJlOiBBWFBEb21haW5NaWRkbGV3YXJlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZU1pZGRsZXdhcmUucHVzaChtaWRkbGV3YXJlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgbWlkZGxld2FyZSBmb3IgZW50aXR5IHByb2Nlc3NpbmdcbiAgICAgKi9cbiAgICBhZGRFbnRpdHlNaWRkbGV3YXJlKG1pZGRsZXdhcmU6IEFYUERvbWFpbk1pZGRsZXdhcmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW50aXR5TWlkZGxld2FyZS5wdXNoKG1pZGRsZXdhcmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHR5cGUtc3BlY2lmaWMgbWlkZGxld2FyZSB0byBkZWZpbml0aW9uXG4gICAgICogXG4gICAgICogQHBhcmFtIGRlZmluaXRpb24gUmF3IGRlZmluaXRpb24gZnJvbSBjYWNoZSBvciBsb2FkZXJcbiAgICAgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIGRvbWFpbiBvYmplY3RcbiAgICAgKiBAcGFyYW0gcGF0aCBPcmlnaW5hbCBwYXRoIGZvciBjb250ZXh0XG4gICAgICogQHJldHVybnMgUHJvY2Vzc2VkIGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGFwcGx5VHlwZU1pZGRsZXdhcmUoXG4gICAgICAgIGRlZmluaXRpb246IEFYUERvbWFpbkRlZmluaXRpb24sXG4gICAgICAgIHR5cGU6ICdtb2R1bGUnIHwgJ2FnZ3JlZ2F0ZScgfCAnZW50aXR5JyxcbiAgICAgICAgcGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxBWFBEb21haW5EZWZpbml0aW9uPiB7XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmUgPSB0aGlzLmdldE1pZGRsZXdhcmVGb3JUeXBlKHR5cGUpO1xuXG4gICAgICAgIGlmIChtaWRkbGV3YXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247IC8vIE5vIG1pZGRsZXdhcmUgdG8gYXBwbHlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQVhQRG9tYWluTWlkZGxld2FyZUNvbnRleHQoZGVmaW5pdGlvbiwgdHlwZSk7XG5cbiAgICAgICAgLy8gQXBwbHkgYWxsIG1pZGRsZXdhcmUgZm9yIHRoaXMgdHlwZVxuICAgICAgICBmb3IgKGNvbnN0IG13IG9mIG1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgIGF3YWl0IG13KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgbWlkZGxld2FyZSBjb2xsZWN0aW9uIGZvciBzcGVjaWZpYyB0eXBlXG4gICAgICogXG4gICAgICogQHBhcmFtIHR5cGUgRG9tYWluIG9iamVjdCB0eXBlXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgbWlkZGxld2FyZSBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1pZGRsZXdhcmVGb3JUeXBlKHR5cGU6ICdtb2R1bGUnIHwgJ2FnZ3JlZ2F0ZScgfCAnZW50aXR5Jyk6IEFYUERvbWFpbk1pZGRsZXdhcmVbXSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbW9kdWxlJzogcmV0dXJuIHRoaXMuX21vZHVsZU1pZGRsZXdhcmU7XG4gICAgICAgICAgICBjYXNlICdhZ2dyZWdhdGUnOiByZXR1cm4gdGhpcy5fYWdncmVnYXRlTWlkZGxld2FyZTtcbiAgICAgICAgICAgIGNhc2UgJ2VudGl0eSc6IHJldHVybiB0aGlzLl9lbnRpdHlNaWRkbGV3YXJlO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE1vZGVsIENyZWF0aW9uICAgLS0tLVxuXG4gICAgLyoqXG4gKiBDcmVhdGUgZG9tYWluIG1vZGVsIGZyb20gcHJvY2Vzc2VkIGRlZmluaXRpb25cbiAqIFxuICogQHBhcmFtIGRlZmluaXRpb24gUHJvY2Vzc2VkIGRlZmluaXRpb24gKGFmdGVyIG1pZGRsZXdhcmUpXG4gKiBAcGFyYW0gcGF0aEluZm8gUGFyc2VkIHBhdGggaW5mb3JtYXRpb25cbiAqIEByZXR1cm5zIENyZWF0ZWQgZG9tYWluIG1vZGVsXG4gKi9cbiAgICBwcml2YXRlIGNyZWF0ZU1vZGVsKGRlZmluaXRpb246IEFYUERvbWFpbkRlZmluaXRpb24sIHBhdGhJbmZvOiBBWFBEb21haW5QYXRoSW5mbyk6IGFueSB7XG4gICAgICAgIHN3aXRjaCAocGF0aEluZm8udHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbW9kdWxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYUE1vZHVsZU1vZGVsKGRlZmluaXRpb24gYXMgYW55KTtcblxuICAgICAgICAgICAgY2FzZSAnYWdncmVnYXRlJzpcbiAgICAgICAgICAgICAgICAvLyBGb3IgYWdncmVnYXRlLCB3ZSBuZWVkIHRvIHJlc29sdmUgcGFyZW50IG1vZHVsZSBmaXJzdFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBzaW1wbGlmaWVkIHdoZW4gd2UgcmVmYWN0b3IgdGhlIG1vZGVsc1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZURlZmluaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhdGhJbmZvLm1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhdGhJbmZvLm1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlczogW2RlZmluaXRpb25dXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNb2R1bGUgPSBuZXcgQVhQTW9kdWxlTW9kZWwobW9kdWxlRGVmaW5pdGlvbiBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhQQWdncmVnYXRlTW9kZWwoZGVmaW5pdGlvbiBhcyBhbnksIHBhcmVudE1vZHVsZSk7XG5cbiAgICAgICAgICAgIGNhc2UgJ2VudGl0eSc6XG4gICAgICAgICAgICAgICAgLy8gRm9yIGVudGl0eSwgd2UgbmVlZCBib3RoIG1vZHVsZSBhbmQgYWdncmVnYXRlIHBhcmVudHNcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYmUgc2ltcGxpZmllZCB3aGVuIHdlIHJlZmFjdG9yIHRoZSBtb2RlbHNcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlBZ2dyZWdhdGVEZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXRoSW5mby5hZ2dyZWdhdGUsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYXRoSW5mby5hZ2dyZWdhdGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGVudGl0aWVzOiBbZGVmaW5pdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uczogW10sXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU1vZHVsZURlZmluaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhdGhJbmZvLm1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhdGhJbmZvLm1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlczogW2VudGl0eUFnZ3JlZ2F0ZURlZmluaXRpb25dXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlNb2R1bGUgPSBuZXcgQVhQTW9kdWxlTW9kZWwoZW50aXR5TW9kdWxlRGVmaW5pdGlvbiBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUFnZ3JlZ2F0ZSA9IG5ldyBBWFBBZ2dyZWdhdGVNb2RlbChlbnRpdHlBZ2dyZWdhdGVEZWZpbml0aW9uIGFzIGFueSwgZW50aXR5TW9kdWxlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYUEVudGl0eU1vZGVsKGRlZmluaXRpb24gYXMgYW55LCBlbnRpdHlBZ2dyZWdhdGUsIHRoaXMuc2NoZW1hU2VydmljZSk7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRvbWFpbiB0eXBlOiAke3BhdGhJbmZvLnR5cGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGUgTWFuYWdlbWVudCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGRlZmluaXRpb24gY2FjaGUgZm9yIGEgc3BlY2lmaWMgcGF0aFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggdG8gY2xlYXIgZnJvbSBjYWNoZVxuICAgICAqL1xuICAgIGludmFsaWRhdGVDYWNoZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbkNhY2hlLmRlbGV0ZShwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgY2FjaGVkIGRlZmluaXRpb25zXG4gICAgICovXG4gICAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbkNhY2hlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3NcbiAgICAgKi9cbiAgICBnZXRDYWNoZVN0YXRzKCk6IHsgc2l6ZTogbnVtYmVyOyBwYXRoczogc3RyaW5nW10gfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB0aGlzLl9kZWZpbml0aW9uQ2FjaGUuc2l6ZSxcbiAgICAgICAgICAgIHBhdGhzOiBBcnJheS5mcm9tKHRoaXMuX2RlZmluaXRpb25DYWNoZS5rZXlzKCkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPDomainRegistry } from './domain.registry';\nimport * as i0 from \"@angular/core\";\n//#region ---- Domain Service ----\n/**\n * High-level facade service for domain operations.\n *\n * Provides simplified interfaces to the domain registry with additional\n * business logic and convenience methods for common operations.\n *\n * This service acts as the main entry point for domain model resolution\n * and provides a clean API for consuming applications.\n */\nexport class AXPDomainService {\n constructor() {\n // Injected dependencies\n this.registry = inject(AXPDomainRegistry);\n }\n //#region ---- Module Operations ----\n /**\n * Get module by name\n *\n * @param name Module name\n * @returns Promise that resolves to module model\n */\n async getModule(name) {\n return this.registry.resolve(name);\n }\n /**\n * Check if module exists\n *\n * @param name Module name\n * @returns Promise that resolves to boolean\n */\n async moduleExists(name) {\n try {\n await this.getModule(name);\n return true;\n }\n catch {\n return false;\n }\n }\n //#endregion\n //#region ---- Aggregate Operations ----\n /**\n * Get aggregate by module and aggregate names\n *\n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to aggregate model\n */\n async getAggregate(moduleName, aggregateName) {\n const path = `${moduleName}.${aggregateName}`;\n return this.registry.resolve(path);\n }\n /**\n * Get aggregate by path\n *\n * @param path Aggregate path (module.aggregate)\n * @returns Promise that resolves to aggregate model\n */\n async getAggregateByPath(path) {\n return this.registry.resolve(path);\n }\n /**\n * Check if aggregate exists\n *\n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to boolean\n */\n async aggregateExists(moduleName, aggregateName) {\n try {\n await this.getAggregate(moduleName, aggregateName);\n return true;\n }\n catch {\n return false;\n }\n }\n //#endregion\n //#region ---- Entity Operations ----\n /**\n * Get entity by full path\n *\n * @param path Full entity path (module.aggregate.entity)\n * @returns Promise that resolves to entity model\n */\n async getEntity(path) {\n return this.registry.resolve(path);\n }\n /**\n * Get entity by component parts\n *\n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @param entityName Entity name\n * @returns Promise that resolves to entity model\n */\n async getEntityByParts(moduleName, aggregateName, entityName) {\n const path = `${moduleName}.${aggregateName}.${entityName}`;\n return this.getEntity(path);\n }\n /**\n * Check if entity exists\n *\n * @param path Full entity path\n * @returns Promise that resolves to boolean\n */\n async entityExists(path) {\n try {\n await this.getEntity(path);\n return true;\n }\n catch {\n return false;\n }\n }\n //#endregion\n //#region ---- Batch Operations ----\n /**\n * Get multiple modules in parallel\n *\n * @param moduleNames Array of module names\n * @returns Promise that resolves to array of module models\n */\n async getModules(moduleNames) {\n return Promise.all(moduleNames.map(name => this.getModule(name)));\n }\n /**\n * Get multiple aggregates in parallel\n *\n * @param aggregatePaths Array of aggregate paths\n * @returns Promise that resolves to array of aggregate models\n */\n async getAggregates(aggregatePaths) {\n return Promise.all(aggregatePaths.map(path => this.getAggregateByPath(path)));\n }\n /**\n * Get multiple entities in parallel\n *\n * @param entityPaths Array of entity paths\n * @returns Promise that resolves to array of entity models\n */\n async getEntities(entityPaths) {\n return Promise.all(entityPaths.map(path => this.getEntity(path)));\n }\n //#endregion\n //#region ---- Search and Discovery ----\n /**\n * Find entities by name across all loaded modules\n *\n * @param entityName Entity name to search for\n * @returns Promise that resolves to array of matching entity paths\n */\n async findEntitiesByName(entityName) {\n // This would require additional registry functionality\n // For now, return empty array as placeholder\n return [];\n }\n /**\n * Get all aggregates for a module\n *\n * @param moduleName Module name\n * @returns Promise that resolves to array of aggregate models\n */\n async getModuleAggregates(moduleName) {\n const module = await this.getModule(moduleName);\n return module.getAllAggregates();\n }\n /**\n * Get all entity references for an aggregate\n *\n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to entity references map\n */\n async getAggregateEntityReferences(moduleName, aggregateName) {\n const aggregate = await this.getAggregate(moduleName, aggregateName);\n return aggregate.entityReferences;\n }\n //#endregion\n //#region ---- Validation Operations ----\n /**\n * Validate module and all its components\n *\n * @param moduleName Module name\n * @returns Promise that resolves to validation errors array\n */\n async validateModule(moduleName) {\n try {\n const module = await this.getModule(moduleName);\n return module.validate();\n }\n catch (error) {\n return [`Failed to load module '${moduleName}': ${error instanceof Error ? error.message : 'Unknown error'}`];\n }\n }\n /**\n * Validate aggregate and its components\n *\n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to validation errors array\n */\n async validateAggregate(moduleName, aggregateName) {\n try {\n const aggregate = await this.getAggregate(moduleName, aggregateName);\n return aggregate.validate();\n }\n catch (error) {\n return [`Failed to load aggregate '${moduleName}.${aggregateName}': ${error instanceof Error ? error.message : 'Unknown error'}`];\n }\n }\n //#endregion\n //#region ---- Utility Operations ----\n /**\n * Get statistics for a module\n *\n * @param moduleName Module name\n * @returns Promise that resolves to module statistics\n */\n async getModuleStatistics(moduleName) {\n const module = await this.getModule(moduleName);\n return module.getStatistics();\n }\n /**\n * Get statistics for an aggregate\n *\n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to aggregate statistics\n */\n async getAggregateStatistics(moduleName, aggregateName) {\n const aggregate = await this.getAggregate(moduleName, aggregateName);\n return aggregate.getStatistics();\n }\n /**\n * Clear registry cache\n */\n clearCache() {\n this.registry.clearCache();\n }\n /**\n * Get cache statistics\n *\n * @returns Cache statistics object\n */\n getCacheStatistics() {\n return this.registry.getCacheStats();\n }\n /**\n * Invalidate cache for specific path\n *\n * @param path Domain path to invalidate\n */\n invalidateCache(path) {\n this.registry.invalidateCache(path);\n }\n //#endregion\n //#region ---- Helper Methods ----\n /**\n * Parse domain path into components\n *\n * @param path Domain path to parse\n * @returns Parsed path components\n */\n parsePath(path) {\n const parts = path.split('.');\n if (parts.length === 1) {\n return { module: parts[0], type: 'module' };\n }\n else if (parts.length === 2) {\n return { module: parts[0], aggregate: parts[1], type: 'aggregate' };\n }\n else if (parts.length === 3) {\n return { module: parts[0], aggregate: parts[1], entity: parts[2], type: 'entity' };\n }\n throw new Error(`Invalid domain path format: ${path}`);\n }\n /**\n * Build path from components\n *\n * @param module Module name\n * @param aggregate Aggregate name (optional)\n * @param entity Entity name (optional)\n * @returns Built path string\n */\n buildPath(module, aggregate, entity) {\n if (entity && aggregate) {\n return `${module}.${aggregate}.${entity}`;\n }\n else if (aggregate) {\n return `${module}.${aggregate}`;\n }\n else {\n return module;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPDomainService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3JlZ2lzdHJpZXMvZG9tYWluL2RvbWFpbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUt0RCxzQ0FBc0M7QUFFdEM7Ozs7Ozs7O0dBUUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBR0ksd0JBQXdCO1FBQ1AsYUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBNFR6RDtJQTFURyx5Q0FBeUM7SUFFekM7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZO1FBQzNCLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ0wsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO0lBRVosNENBQTRDO0lBRTVDOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0IsRUFBRSxhQUFxQjtRQUN4RCxNQUFNLElBQUksR0FBRyxHQUFHLFVBQVUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFvQixJQUFJLENBQUMs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SyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxDQUFDLE1BQWMsRUFBRSxTQUFrQixFQUFFLE1BQWU7UUFDekQsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLE1BQU0sSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7UUFDOUMsQ0FBQzthQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbkIsT0FBTyxHQUFHLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDOytHQTVUUSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBEb21haW5SZWdpc3RyeSB9IGZyb20gJy4vZG9tYWluLnJlZ2lzdHJ5JztcbmltcG9ydCB7IEFYUE1vZHVsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZHVsZS5tb2RlbCc7XG5pbXBvcnQgeyBBWFBBZ2dyZWdhdGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hZ2dyZWdhdGUubW9kZWwnO1xuaW1wb3J0IHsgQVhQRW50aXR5TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW50aXR5Lm1vZGVsJztcblxuLy8jcmVnaW9uIC0tLS0gICBEb21haW4gU2VydmljZSAgIC0tLS1cblxuLyoqXG4gKiBIaWdoLWxldmVsIGZhY2FkZSBzZXJ2aWNlIGZvciBkb21haW4gb3BlcmF0aW9ucy5cbiAqIFxuICogUHJvdmlkZXMgc2ltcGxpZmllZCBpbnRlcmZhY2VzIHRvIHRoZSBkb21haW4gcmVnaXN0cnkgd2l0aCBhZGRpdGlvbmFsXG4gKiBidXNpbmVzcyBsb2dpYyBhbmQgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgY29tbW9uIG9wZXJhdGlvbnMuXG4gKiBcbiAqIFRoaXMgc2VydmljZSBhY3RzIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkb21haW4gbW9kZWwgcmVzb2x1dGlvblxuICogYW5kIHByb3ZpZGVzIGEgY2xlYW4gQVBJIGZvciBjb25zdW1pbmcgYXBwbGljYXRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFYUERvbWFpblNlcnZpY2Uge1xuXG4gICAgLy8gSW5qZWN0ZWQgZGVwZW5kZW5jaWVzXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyeSA9IGluamVjdChBWFBEb21haW5SZWdpc3RyeSk7XG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIE1vZHVsZSBPcGVyYXRpb25zICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IG1vZHVsZSBieSBuYW1lXG4gICAgICogXG4gICAgICogQHBhcmFtIG5hbWUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gbW9kdWxlIG1vZGVsXG4gICAgICovXG4gICAgYXN5bmMgZ2V0TW9kdWxlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQTW9kdWxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkucmVzb2x2ZTxBWFBNb2R1bGVNb2RlbD4obmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgbW9kdWxlIGV4aXN0c1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBuYW1lIE1vZHVsZSBuYW1lXG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGJvb2xlYW5cbiAgICAgKi9cbiAgICBhc3luYyBtb2R1bGVFeGlzdHMobmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldE1vZHVsZShuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBBZ2dyZWdhdGUgT3BlcmF0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEdldCBhZ2dyZWdhdGUgYnkgbW9kdWxlIGFuZCBhZ2dyZWdhdGUgbmFtZXNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gbW9kdWxlTmFtZSBNb2R1bGUgbmFtZVxuICAgICAqIEBwYXJhbSBhZ2dyZWdhdGVOYW1lIEFnZ3JlZ2F0ZSBuYW1lXG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFnZ3JlZ2F0ZSBtb2RlbFxuICAgICAqL1xuICAgIGFzeW5jIGdldEFnZ3JlZ2F0ZShtb2R1bGVOYW1lOiBzdHJpbmcsIGFnZ3JlZ2F0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWdncmVnYXRlTW9kZWw+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke21vZHVsZU5hbWV9LiR7YWdncmVnYXRlTmFtZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5yZXNvbHZlPEFYUEFnZ3JlZ2F0ZU1vZGVsPihwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWdncmVnYXRlIGJ5IHBhdGhcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcGF0aCBBZ2dyZWdhdGUgcGF0aCAobW9kdWxlLmFnZ3JlZ2F0ZSlcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYWdncmVnYXRlIG1vZGVsXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWdncmVnYXRlQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8QVhQQWdncmVnYXRlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0cnkucmVzb2x2ZTxBWFBBZ2dyZWdhdGVNb2RlbD4ocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYWdncmVnYXRlIGV4aXN0c1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIE1vZHVsZSBuYW1lXG4gICAgICogQHBhcmFtIGFnZ3JlZ2F0ZU5hbWUgQWdncmVnYXRlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYm9vbGVhblxuICAgICAqL1xuICAgIGFzeW5jIGFnZ3JlZ2F0ZUV4aXN0cyhtb2R1bGVOYW1lOiBzdHJpbmcsIGFnZ3JlZ2F0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRBZ2dyZWdhdGUobW9kdWxlTmFtZSwgYWdncmVnYXRlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRW50aXR5IE9wZXJhdGlvbnMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZW50aXR5IGJ5IGZ1bGwgcGF0aFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXRoIEZ1bGwgZW50aXR5IHBhdGggKG1vZHVsZS5hZ2dyZWdhdGUuZW50aXR5KVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBlbnRpdHkgbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBnZXRFbnRpdHkocGF0aDogc3RyaW5nKTogUHJvbWlzZTxBWFBFbnRpdHlNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5yZXNvbHZlPEFYUEVudGl0eU1vZGVsPihwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZW50aXR5IGJ5IGNvbXBvbmVudCBwYXJ0c1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIE1vZHVsZSBuYW1lXG4gICAgICogQHBhcmFtIGFnZ3JlZ2F0ZU5hbWUgQWdncmVnYXRlIG5hbWVcbiAgICAgKiBAcGFyYW0gZW50aXR5TmFtZSBFbnRpdHkgbmFtZVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBlbnRpdHkgbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBnZXRFbnRpdHlCeVBhcnRzKG1vZHVsZU5hbWU6IHN0cmluZywgYWdncmVnYXRlTmFtZTogc3RyaW5nLCBlbnRpdHlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUEVudGl0eU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBgJHttb2R1bGVOYW1lfS4ke2FnZ3JlZ2F0ZU5hbWV9LiR7ZW50aXR5TmFtZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHkocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZW50aXR5IGV4aXN0c1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBwYXRoIEZ1bGwgZW50aXR5IHBhdGhcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYm9vbGVhblxuICAgICAqL1xuICAgIGFzeW5jIGVudGl0eUV4aXN0cyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RW50aXR5KHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIEJhdGNoIE9wZXJhdGlvbnMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgbXVsdGlwbGUgbW9kdWxlcyBpbiBwYXJhbGxlbFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lcyBBcnJheSBvZiBtb2R1bGUgbmFtZXNcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYXJyYXkgb2YgbW9kdWxlIG1vZGVsc1xuICAgICAqL1xuICAgIGFzeW5jIGdldE1vZHVsZXMobW9kdWxlTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxBWFBNb2R1bGVNb2RlbFtdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtb2R1bGVOYW1lcy5tYXAobmFtZSA9PiB0aGlzLmdldE1vZHVsZShuYW1lKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBtdWx0aXBsZSBhZ2dyZWdhdGVzIGluIHBhcmFsbGVsXG4gICAgICogXG4gICAgICogQHBhcmFtIGFnZ3JlZ2F0ZVBhdGhzIEFycmF5IG9mIGFnZ3JlZ2F0ZSBwYXRoc1xuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhcnJheSBvZiBhZ2dyZWdhdGUgbW9kZWxzXG4gICAgICovXG4gICAgYXN5bmMgZ2V0QWdncmVnYXRlcyhhZ2dyZWdhdGVQYXRoczogc3RyaW5nW10pOiBQcm9taXNlPEFYUEFnZ3JlZ2F0ZU1vZGVsW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFnZ3JlZ2F0ZVBhdGhzLm1hcChwYXRoID0+IHRoaXMuZ2V0QWdncmVnYXRlQnlQYXRoKHBhdGgpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG11bHRpcGxlIGVudGl0aWVzIGluIHBhcmFsbGVsXG4gICAgICogXG4gICAgICogQHBhcmFtIGVudGl0eVBhdGhzIEFycmF5IG9mIGVudGl0eSBwYXRoc1xuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhcnJheSBvZiBlbnRpdHkgbW9kZWxzXG4gICAgICovXG4gICAgYXN5bmMgZ2V0RW50aXRpZXMoZW50aXR5UGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTxBWFBFbnRpdHlNb2RlbFtdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChlbnRpdHlQYXRocy5tYXAocGF0aCA9PiB0aGlzLmdldEVudGl0eShwYXRoKSkpO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZWFyY2ggYW5kIERpc2NvdmVyeSAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgZW50aXRpZXMgYnkgbmFtZSBhY3Jvc3MgYWxsIGxvYWRlZCBtb2R1bGVzXG4gICAgICogXG4gICAgICogQHBhcmFtIGVudGl0eU5hbWUgRW50aXR5IG5hbWUgdG8gc2VhcmNoIGZvclxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhcnJheSBvZiBtYXRjaGluZyBlbnRpdHkgcGF0aHNcbiAgICAgKi9cbiAgICBhc3luYyBmaW5kRW50aXRpZXNCeU5hbWUoZW50aXR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICAvLyBUaGlzIHdvdWxkIHJlcXVpcmUgYWRkaXRpb25hbCByZWdpc3RyeSBmdW5jdGlvbmFsaXR5XG4gICAgICAgIC8vIEZvciBub3csIHJldHVybiBlbXB0eSBhcnJheSBhcyBwbGFjZWhvbGRlclxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBhZ2dyZWdhdGVzIGZvciBhIG1vZHVsZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIE1vZHVsZSBuYW1lXG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFycmF5IG9mIGFnZ3JlZ2F0ZSBtb2RlbHNcbiAgICAgKi9cbiAgICBhc3luYyBnZXRNb2R1bGVBZ2dyZWdhdGVzKG1vZHVsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWdncmVnYXRlTW9kZWxbXT4ge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCB0aGlzLmdldE1vZHVsZShtb2R1bGVOYW1lKTtcbiAgICAgICAgcmV0dXJuIG1vZHVsZS5nZXRBbGxBZ2dyZWdhdGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFsbCBlbnRpdHkgcmVmZXJlbmNlcyBmb3IgYW4gYWdncmVnYXRlXG4gICAgICogXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gYWdncmVnYXRlTmFtZSBBZ2dyZWdhdGUgbmFtZVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBlbnRpdHkgcmVmZXJlbmNlcyBtYXBcbiAgICAgKi9cbiAgICBhc3luYyBnZXRBZ2dyZWdhdGVFbnRpdHlSZWZlcmVuY2VzKG1vZHVsZU5hbWU6IHN0cmluZywgYWdncmVnYXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IGF3YWl0IHRoaXMuZ2V0QWdncmVnYXRlKG1vZHVsZU5hbWUsIGFnZ3JlZ2F0ZU5hbWUpO1xuICAgICAgICByZXR1cm4gYWdncmVnYXRlLmVudGl0eVJlZmVyZW5jZXM7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFZhbGlkYXRpb24gT3BlcmF0aW9ucyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIG1vZHVsZSBhbmQgYWxsIGl0cyBjb21wb25lbnRzXG4gICAgICogXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdmFsaWRhdGlvbiBlcnJvcnMgYXJyYXlcbiAgICAgKi9cbiAgICBhc3luYyB2YWxpZGF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCB0aGlzLmdldE1vZHVsZShtb2R1bGVOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGUudmFsaWRhdGUoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBbYEZhaWxlZCB0byBsb2FkIG1vZHVsZSAnJHttb2R1bGVOYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBhZ2dyZWdhdGUgYW5kIGl0cyBjb21wb25lbnRzXG4gICAgICogXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gYWdncmVnYXRlTmFtZSBBZ2dyZWdhdGUgbmFtZVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB2YWxpZGF0aW9uIGVycm9ycyBhcnJheVxuICAgICAqL1xuICAgIGFzeW5jIHZhbGlkYXRlQWdncmVnYXRlKG1vZHVsZU5hbWU6IHN0cmluZywgYWdncmVnYXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlID0gYXdhaXQgdGhpcy5nZXRBZ2dyZWdhdGUobW9kdWxlTmFtZSwgYWdncmVnYXRlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gYWdncmVnYXRlLnZhbGlkYXRlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gW2BGYWlsZWQgdG8gbG9hZCBhZ2dyZWdhdGUgJyR7bW9kdWxlTmFtZX0uJHthZ2dyZWdhdGVOYW1lfSc6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgVXRpbGl0eSBPcGVyYXRpb25zICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogR2V0IHN0YXRpc3RpY3MgZm9yIGEgbW9kdWxlXG4gICAgICogXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gbW9kdWxlIHN0YXRpc3RpY3NcbiAgICAgKi9cbiAgICBhc3luYyBnZXRNb2R1bGVTdGF0aXN0aWNzKG1vZHVsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IHRoaXMuZ2V0TW9kdWxlKG1vZHVsZU5hbWUpO1xuICAgICAgICByZXR1cm4gbW9kdWxlLmdldFN0YXRpc3RpY3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc3RhdGlzdGljcyBmb3IgYW4gYWdncmVnYXRlXG4gICAgICogXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gYWdncmVnYXRlTmFtZSBBZ2dyZWdhdGUgbmFtZVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhZ2dyZWdhdGUgc3RhdGlzdGljc1xuICAgICAqL1xuICAgIGFzeW5jIGdldEFnZ3JlZ2F0ZVN0YXRpc3RpY3MobW9kdWxlTmFtZTogc3RyaW5nLCBhZ2dyZWdhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGUgPSBhd2FpdCB0aGlzLmdldEFnZ3JlZ2F0ZShtb2R1bGVOYW1lLCBhZ2dyZWdhdGVOYW1lKTtcbiAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZS5nZXRTdGF0aXN0aWNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgcmVnaXN0cnkgY2FjaGVcbiAgICAgKi9cbiAgICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5LmNsZWFyQ2FjaGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2FjaGUgc3RhdGlzdGljc1xuICAgICAqIFxuICAgICAqIEByZXR1cm5zIENhY2hlIHN0YXRpc3RpY3Mgb2JqZWN0XG4gICAgICovXG4gICAgZ2V0Q2FjaGVTdGF0aXN0aWNzKCk6IHsgc2l6ZTogbnVtYmVyOyBwYXRoczogc3RyaW5nW10gfSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldENhY2hlU3RhdHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZhbGlkYXRlIGNhY2hlIGZvciBzcGVjaWZpYyBwYXRoXG4gICAgICogXG4gICAgICogQHBhcmFtIHBhdGggRG9tYWluIHBhdGggdG8gaW52YWxpZGF0ZVxuICAgICAqL1xuICAgIGludmFsaWRhdGVDYWNoZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeS5pbnZhbGlkYXRlQ2FjaGUocGF0aCk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIEhlbHBlciBNZXRob2RzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgZG9tYWluIHBhdGggaW50byBjb21wb25lbnRzXG4gICAgICogXG4gICAgICogQHBhcmFtIHBhdGggRG9tYWluIHBhdGggdG8gcGFyc2VcbiAgICAgKiBAcmV0dXJucyBQYXJzZWQgcGF0aCBjb21wb25lbnRzXG4gICAgICovXG4gICAgcGFyc2VQYXRoKHBhdGg6IHN0cmluZyk6IHsgbW9kdWxlOiBzdHJpbmc7IGFnZ3JlZ2F0ZT86IHN0cmluZzsgZW50aXR5Pzogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLicpO1xuXG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZHVsZTogcGFydHNbMF0sIHR5cGU6ICdtb2R1bGUnIH07XG4gICAgICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtb2R1bGU6IHBhcnRzWzBdLCBhZ2dyZWdhdGU6IHBhcnRzWzFdLCB0eXBlOiAnYWdncmVnYXRlJyB9O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kdWxlOiBwYXJ0c1swXSwgYWdncmVnYXRlOiBwYXJ0c1sxXSwgZW50aXR5OiBwYXJ0c1syXSwgdHlwZTogJ2VudGl0eScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkb21haW4gcGF0aCBmb3JtYXQ6ICR7cGF0aH1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZCBwYXRoIGZyb20gY29tcG9uZW50c1xuICAgICAqIFxuICAgICAqIEBwYXJhbSBtb2R1bGUgTW9kdWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gYWdncmVnYXRlIEFnZ3JlZ2F0ZSBuYW1lIChvcHRpb25hbClcbiAgICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eSBuYW1lIChvcHRpb25hbClcbiAgICAgKiBAcmV0dXJucyBCdWlsdCBwYXRoIHN0cmluZ1xuICAgICAqL1xuICAgIGJ1aWxkUGF0aChtb2R1bGU6IHN0cmluZywgYWdncmVnYXRlPzogc3RyaW5nLCBlbnRpdHk/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZW50aXR5ICYmIGFnZ3JlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke21vZHVsZX0uJHthZ2dyZWdhdGV9LiR7ZW50aXR5fWA7XG4gICAgICAgIH0gZWxzZSBpZiAoYWdncmVnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bW9kdWxlfS4ke2FnZ3JlZ2F0ZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb24gIl19","export {};\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWxvYWRlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3JlZ2lzdHJpZXMvZG9tYWluL2RvbWFpbi1sb2FkZXIuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFpREEsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUE1vZHVsZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9kZWZpbml0aW9ucy9tb2R1bGUtZGVmaW5pdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBBZ2dyZWdhdGVEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZGVmaW5pdGlvbnMvYWdncmVnYXRlLWRlZmluaXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQRW50aXR5RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2RlZmluaXRpb25zL2VudGl0eS1kZWZpbml0aW9uLnR5cGVzJztcblxuLy8jcmVnaW9uIC0tLS0gICBEb21haW4gTG9hZGVyIEludGVyZmFjZSAgIC0tLS1cblxuLyoqXG4gKiBVbmlvbiB0eXBlIGZvciBhbGwgZG9tYWluIGRlZmluaXRpb24gdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgQVhQRG9tYWluRGVmaW5pdGlvbiA9IEFYUE1vZHVsZURlZmluaXRpb24gfCBBWFBBZ2dyZWdhdGVEZWZpbml0aW9uIHwgQVhQRW50aXR5RGVmaW5pdGlvbjtcblxuLyoqXG4gKiBEb21haW4gcGF0aCBpbmZvcm1hdGlvbiBwYXJzZWQgZnJvbSBwYXRoIHN0cmluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFYUERvbWFpblBhdGhJbmZvIHtcbiAgICBtb2R1bGU6IHN0cmluZztcbiAgICBhZ2dyZWdhdGU/OiBzdHJpbmc7XG4gICAgZW50aXR5Pzogc3RyaW5nO1xuICAgIHR5cGU6ICdtb2R1bGUnIHwgJ2FnZ3JlZ2F0ZScgfCAnZW50aXR5JztcbiAgICBmdWxsUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZG9tYWluIGxvYWRlcnMgdGhhdCBjYW4gcHJvdmlkZSBkb21haW4gZGVmaW5pdGlvbnMgb24tZGVtYW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRG9tYWluTG9hZGVyIHtcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBwcmlvcml0eSBmb3IgbG9hZGVyIG9yZGVyaW5nLiBIaWdoZXIgbnVtYmVycyA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB1c2VzIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAgICAgKi9cbiAgICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhpcyBsb2FkZXIgY2FuIGhhbmRsZSB0aGUgZ2l2ZW4gZG9tYWluIHBhdGhcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgZG9tYWluIHBhdGggdG8gbG9hZCAoZS5nLiwgXCJ1c2VyLW1hbmFnZW1lbnQudXNlci1hZ2dyZWdhdGUudXNlclwiKVxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGRvbWFpbiBvYmplY3QgYmVpbmcgcmVxdWVzdGVkXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIGxvYWRlciBjYW4gbG9hZCB0aGUgZG9tYWluIGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBjYW5Mb2FkKHBhdGg6IHN0cmluZywgdHlwZTogJ21vZHVsZScgfCAnYWdncmVnYXRlJyB8ICdlbnRpdHknKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBkb21haW4gZGVmaW5pdGlvbiBmb3IgdGhlIGdpdmVuIHBhdGhcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgZG9tYWluIHBhdGggdG8gbG9hZFxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGRvbWFpbiBvYmplY3QgYmVpbmcgcmVxdWVzdGVkXG4gICAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBkb21haW4gZGVmaW5pdGlvbiBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgICAqL1xuICAgIGxvYWQocGF0aDogc3RyaW5nLCB0eXBlOiAnbW9kdWxlJyB8ICdhZ2dyZWdhdGUnIHwgJ2VudGl0eScpOiBQcm9taXNlPEFYUERvbWFpbkRlZmluaXRpb24gfCBudWxsPjtcbn1cblxuLy8jZW5kcmVnaW9uICJdfQ==","import { inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPDomainRegistry } from './domain.registry';\nimport { AXP_DOMAIN_LOADER_SETUP } from './domain-extension.token';\n//#endregion\n//#region ---- Provider Functions ----\n/**\n * Provide domain loaders for on-demand domain loading.\n *\n * Domain loaders enable the registry to load domain definitions that are not registered\n * at build time. This is useful for:\n * - Loading domain definitions from external APIs\n * - Dynamic domain generation\n * - Lazy loading of large domain sets\n * - Development-time domain hot-reloading\n *\n * @param loaders Array of loader classes, instances, or loader configurations\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * // Simple loader registration\n * provideDomainLoaders([\n * HttpDomainLoader,\n * FileSystemDomainLoader,\n * new MemoryDomainLoader()\n * ])\n *\n * // With priority configuration\n * provideDomainLoaders([\n * { loader: HttpDomainLoader, priority: 10 },\n * { loader: FileSystemDomainLoader, priority: 5 },\n * { loader: new MemoryDomainLoader(), priority: 15 }\n * ])\n * ```\n */\nexport function provideDomainLoaders(loaders) {\n return makeEnvironmentProviders([\n {\n provide: AXP_DOMAIN_LOADER_SETUP,\n useFactory: async () => {\n const registry = inject(AXPDomainRegistry);\n if (!registry) {\n console.warn('Domain registry not available during loader setup');\n return false;\n }\n // Register each loader with the registry\n for (const loaderConfig of loaders) {\n try {\n let loaderInstance;\n let priority;\n if (typeof loaderConfig === 'function') {\n // Type<AXPDomainLoader>\n loaderInstance = new loaderConfig();\n priority = loaderInstance.priority;\n }\n else if (typeof loaderConfig === 'object' && 'canLoad' in loaderConfig) {\n // AXPDomainLoader instance\n loaderInstance = loaderConfig;\n priority = loaderInstance.priority;\n }\n else if (typeof loaderConfig === 'object' && 'loader' in loaderConfig) {\n // AXPDomainLoaderConfig\n if (typeof loaderConfig.loader === 'function') {\n loaderInstance = new loaderConfig.loader();\n }\n else {\n loaderInstance = loaderConfig.loader;\n }\n priority = loaderConfig.priority ?? loaderInstance.priority;\n }\n else {\n console.warn('Invalid loader configuration:', loaderConfig);\n continue;\n }\n // Apply custom priority if specified\n if (priority !== undefined && priority !== loaderInstance.priority) {\n loaderInstance.priority = priority;\n }\n registry.addLoader(loaderInstance);\n console.log(`✓ Registered domain loader: ${loaderInstance.constructor.name} (priority: ${loaderInstance.priority ?? 0})`);\n }\n catch (error) {\n console.error('Failed to register domain loader:', error);\n }\n }\n return true;\n },\n multi: true\n }\n ]);\n}\n/**\n * Provide a single domain loader for convenience\n *\n * @param loader Loader class, instance, or configuration\n * @returns Environment providers for dependency injection\n */\nexport function provideDomainLoader(loader) {\n return provideDomainLoaders([loader]);\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1kb21haW4tbG9hZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvcmVnaXN0cmllcy9kb21haW4vcHJvdmlkZS1kb21haW4tbG9hZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLE1BQU0sRUFBRSx3QkFBd0IsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWdCbkUsWUFBWTtBQUVaLDBDQUEwQztBQUUxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLE9BQStFO0lBRS9FLE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7b0JBQ2xFLE9BQU8sS0FBSyxDQUFDO2dCQUNqQixDQUFDO2dCQUVELHlDQUF5QztnQkFDekMsS0FBSyxNQUFNLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDO3dCQUNELElBQUksY0FBK0IsQ0FBQzt3QkFDcEMsSUFBSSxRQUE0QixDQUFDO3dCQUVqQyxJQUFJLE9BQU8sWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUNyQyx3QkFBd0I7NEJBQ3hCLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzRCQUNwQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQzt3QkFDdkMsQ0FBQzs2QkFBTSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksWUFBWSxFQUFFLENBQUM7NEJBQ3ZFLDJCQUEyQjs0QkFDM0IsY0FBYyxHQUFHLFlBQVksQ0FBQzs0QkFDOUIsUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ3ZDLENBQUM7NkJBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLFlBQVksRUFBRSxDQUFDOzRCQUN0RSx3QkFBd0I7NEJBQ3hCLElBQUksT0FBTyxZQUFZLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dDQUM1QyxjQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQy9DLENBQUM7aUNBQU0sQ0FBQztnQ0FDSixjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQzs0QkFDekMsQ0FBQzs0QkFDRCxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDO3dCQUNoRSxDQUFDOzZCQUFNLENBQUM7NEJBQ0osT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxZQUFZLENBQUMsQ0FBQzs0QkFDNUQsU0FBUzt3QkFDYixDQUFDO3dCQUVELHFDQUFxQzt3QkFDckMsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ2hFLGNBQXNCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzt3QkFDaEQsQ0FBQzt3QkFFRCxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksZUFBZSxjQUFjLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBRTlILENBQUM7b0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQzt3QkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM5RCxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQy9CLE1BQXVFO0lBRXZFLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIGluamVjdCwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBEb21haW5Mb2FkZXIgfSBmcm9tICcuL2RvbWFpbi1sb2FkZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFYUERvbWFpblJlZ2lzdHJ5IH0gZnJvbSAnLi9kb21haW4ucmVnaXN0cnknO1xuaW1wb3J0IHsgQVhQX0RPTUFJTl9MT0FERVJfU0VUVVAgfSBmcm9tICcuL2RvbWFpbi1leHRlbnNpb24udG9rZW4nO1xuXG4vLyNyZWdpb24gLS0tLSAgIERvbWFpbiBMb2FkZXIgQ29uZmlndXJhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIGRvbWFpbiBsb2FkZXIgd2l0aCBvcHRpb25hbCBwcmlvcml0eSBzZXR0aW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRG9tYWluTG9hZGVyQ29uZmlnIHtcbiAgICAvKiogVGhlIGxvYWRlciBjbGFzcyBvciBpbnN0YW5jZSB0byByZWdpc3RlciAqL1xuICAgIGxvYWRlcjogVHlwZTxBWFBEb21haW5Mb2FkZXI+IHwgQVhQRG9tYWluTG9hZGVyO1xuICAgIC8qKiBPcHRpb25hbCBwcmlvcml0eSBmb3IgbG9hZGVyIG9yZGVyaW5nIChoaWdoZXIgPSBoaWdoZXIgcHJpb3JpdHkpICovXG4gICAgcHJpb3JpdHk/OiBudW1iZXI7XG59XG5cblxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBQcm92aWRlciBGdW5jdGlvbnMgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZSBkb21haW4gbG9hZGVycyBmb3Igb24tZGVtYW5kIGRvbWFpbiBsb2FkaW5nLlxuICogXG4gKiBEb21haW4gbG9hZGVycyBlbmFibGUgdGhlIHJlZ2lzdHJ5IHRvIGxvYWQgZG9tYWluIGRlZmluaXRpb25zIHRoYXQgYXJlIG5vdCByZWdpc3RlcmVkXG4gKiBhdCBidWlsZCB0aW1lLiBUaGlzIGlzIHVzZWZ1bCBmb3I6XG4gKiAtIExvYWRpbmcgZG9tYWluIGRlZmluaXRpb25zIGZyb20gZXh0ZXJuYWwgQVBJc1xuICogLSBEeW5hbWljIGRvbWFpbiBnZW5lcmF0aW9uXG4gKiAtIExhenkgbG9hZGluZyBvZiBsYXJnZSBkb21haW4gc2V0c1xuICogLSBEZXZlbG9wbWVudC10aW1lIGRvbWFpbiBob3QtcmVsb2FkaW5nXG4gKiBcbiAqIEBwYXJhbSBsb2FkZXJzIEFycmF5IG9mIGxvYWRlciBjbGFzc2VzLCBpbnN0YW5jZXMsIG9yIGxvYWRlciBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2ltcGxlIGxvYWRlciByZWdpc3RyYXRpb25cbiAqIHByb3ZpZGVEb21haW5Mb2FkZXJzKFtcbiAqICAgSHR0cERvbWFpbkxvYWRlcixcbiAqICAgRmlsZVN5c3RlbURvbWFpbkxvYWRlcixcbiAqICAgbmV3IE1lbW9yeURvbWFpbkxvYWRlcigpXG4gKiBdKVxuICogXG4gKiAvLyBXaXRoIHByaW9yaXR5IGNvbmZpZ3VyYXRpb25cbiAqIHByb3ZpZGVEb21haW5Mb2FkZXJzKFtcbiAqICAgeyBsb2FkZXI6IEh0dHBEb21haW5Mb2FkZXIsIHByaW9yaXR5OiAxMCB9LFxuICogICB7IGxvYWRlcjogRmlsZVN5c3RlbURvbWFpbkxvYWRlciwgcHJpb3JpdHk6IDUgfSxcbiAqICAgeyBsb2FkZXI6IG5ldyBNZW1vcnlEb21haW5Mb2FkZXIoKSwgcHJpb3JpdHk6IDE1IH1cbiAqIF0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVEb21haW5Mb2FkZXJzKFxuICAgIGxvYWRlcnM6IEFycmF5PFR5cGU8QVhQRG9tYWluTG9hZGVyPiB8IEFYUERvbWFpbkxvYWRlciB8IEFYUERvbWFpbkxvYWRlckNvbmZpZz5cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQX0RPTUFJTl9MT0FERVJfU0VUVVAsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3QoQVhQRG9tYWluUmVnaXN0cnkpO1xuICAgICAgICAgICAgICAgIGlmICghcmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdEb21haW4gcmVnaXN0cnkgbm90IGF2YWlsYWJsZSBkdXJpbmcgbG9hZGVyIHNldHVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBlYWNoIGxvYWRlciB3aXRoIHRoZSByZWdpc3RyeVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbG9hZGVyQ29uZmlnIG9mIGxvYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsb2FkZXJJbnN0YW5jZTogQVhQRG9tYWluTG9hZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByaW9yaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbG9hZGVyQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZTxBWFBEb21haW5Mb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVySW5zdGFuY2UgPSBuZXcgbG9hZGVyQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBsb2FkZXJJbnN0YW5jZS5wcmlvcml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvYWRlckNvbmZpZyA9PT0gJ29iamVjdCcgJiYgJ2NhbkxvYWQnIGluIGxvYWRlckNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFYUERvbWFpbkxvYWRlciBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlckluc3RhbmNlID0gbG9hZGVyQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gbG9hZGVySW5zdGFuY2UucHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb2FkZXJDb25maWcgPT09ICdvYmplY3QnICYmICdsb2FkZXInIGluIGxvYWRlckNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFYUERvbWFpbkxvYWRlckNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbG9hZGVyQ29uZmlnLmxvYWRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXJJbnN0YW5jZSA9IG5ldyBsb2FkZXJDb25maWcubG9hZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVySW5zdGFuY2UgPSBsb2FkZXJDb25maWcubG9hZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSA9IGxvYWRlckNvbmZpZy5wcmlvcml0eSA/PyBsb2FkZXJJbnN0YW5jZS5wcmlvcml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxvYWRlciBjb25maWd1cmF0aW9uOicsIGxvYWRlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3RvbSBwcmlvcml0eSBpZiBzcGVjaWZpZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmlvcml0eSAhPT0gdW5kZWZpbmVkICYmIHByaW9yaXR5ICE9PSBsb2FkZXJJbnN0YW5jZS5wcmlvcml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkZXJJbnN0YW5jZSBhcyBhbnkpLnByaW9yaXR5ID0gcHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LmFkZExvYWRlcihsb2FkZXJJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyTIFJlZ2lzdGVyZWQgZG9tYWluIGxvYWRlcjogJHtsb2FkZXJJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lfSAocHJpb3JpdHk6ICR7bG9hZGVySW5zdGFuY2UucHJpb3JpdHkgPz8gMH0pYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZWdpc3RlciBkb21haW4gbG9hZGVyOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgc2luZ2xlIGRvbWFpbiBsb2FkZXIgZm9yIGNvbnZlbmllbmNlXG4gKiBcbiAqIEBwYXJhbSBsb2FkZXIgTG9hZGVyIGNsYXNzLCBpbnN0YW5jZSwgb3IgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZURvbWFpbkxvYWRlcihcbiAgICBsb2FkZXI6IFR5cGU8QVhQRG9tYWluTG9hZGVyPiB8IEFYUERvbWFpbkxvYWRlciB8IEFYUERvbWFpbkxvYWRlckNvbmZpZ1xuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBwcm92aWRlRG9tYWluTG9hZGVycyhbbG9hZGVyXSk7XG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","import { makeEnvironmentProviders } from '@angular/core';\n//#region ---- Injection Tokens ----\n/**\n * Injection tokens for type-specific middleware setup\n */\nexport const AXP_MODULE_MIDDLEWARE_SETUP = 'AXP_MODULE_MIDDLEWARE_SETUP';\nexport const AXP_AGGREGATE_MIDDLEWARE_SETUP = 'AXP_AGGREGATE_MIDDLEWARE_SETUP';\nexport const AXP_ENTITY_MIDDLEWARE_SETUP = 'AXP_ENTITY_MIDDLEWARE_SETUP';\n//#endregion\n//#region ---- Provider Functions ----\n/**\n * Provide middleware for module processing.\n *\n * Module middleware is applied when resolving module definitions and can:\n * - Add metadata and custom properties\n * - Validate module structure\n * - Transform module definitions\n * - Add computed properties\n *\n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideModuleMiddleware([\n * (context) => {\n * // Add common module metadata\n * context.setMetadata('loadedAt', new Date());\n * context.setMetadata('version', '1.0.0');\n * },\n * (context) => {\n * // Add namespace prefix if not present\n * if (!context.definition.name.includes('.')) {\n * context.definition.name = `app.${context.definition.name}`;\n * }\n * }\n * ])\n * ```\n */\nexport function provideModuleMiddleware(middleware) {\n return makeEnvironmentProviders([\n {\n provide: AXP_MODULE_MIDDLEWARE_SETUP,\n useFactory: () => {\n // Access registry through DI when available\n const registry = globalThis.__domainRegistry__;\n if (!registry) {\n console.warn('Domain registry not available during module middleware setup');\n return false;\n }\n // Register all module middleware\n for (const mw of middleware) {\n registry.addModuleMiddleware(mw);\n }\n console.log(`✓ Registered ${middleware.length} module middleware functions`);\n return true;\n },\n multi: true\n }\n ]);\n}\n/**\n * Provide middleware for aggregate processing.\n *\n * Aggregate middleware is applied when resolving aggregate definitions and can:\n * - Add metadata and custom properties\n * - Validate aggregate structure\n * - Transform entity references\n * - Add computed relations\n *\n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideAggregateMiddleware([\n * (context) => {\n * // Add aggregate metadata\n * context.setMetadata('type', 'business-aggregate');\n * },\n * (context) => {\n * // Validate entity references\n * const entities = context.definition.entities;\n * if (Object.keys(entities).length === 0) {\n * throw new Error('Aggregate must have at least one entity');\n * }\n * }\n * ])\n * ```\n */\nexport function provideAggregateMiddleware(middleware) {\n return makeEnvironmentProviders([\n {\n provide: AXP_AGGREGATE_MIDDLEWARE_SETUP,\n useFactory: () => {\n // Access registry through DI when available\n const registry = globalThis.__domainRegistry__;\n if (!registry) {\n console.warn('Domain registry not available during aggregate middleware setup');\n return false;\n }\n // Register all aggregate middleware\n for (const mw of middleware) {\n registry.addAggregateMiddleware(mw);\n }\n console.log(`✓ Registered ${middleware.length} aggregate middleware functions`);\n return true;\n },\n multi: true\n }\n ]);\n}\n/**\n * Provide middleware for entity processing.\n *\n * Entity middleware is applied when resolving entity definitions and can:\n * - Add auto-generated fields (id, timestamps)\n * - Apply field transformations\n * - Add validation rules\n * - Set default values\n *\n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideEntityMiddleware([\n * (context) => {\n * // Add auto-generated ID field if not present\n * if (!context.definition.fields.some(f => f.name === 'id')) {\n * context.addField({\n * name: 'id',\n * type: 'uuid',\n * required: true,\n * generated: true\n * });\n * }\n * },\n * (context) => {\n * // Add timestamp fields\n * context.addField({\n * name: 'createdAt',\n * type: 'datetime',\n * required: true,\n * generated: true\n * });\n * context.addField({\n * name: 'updatedAt',\n * type: 'datetime',\n * required: true,\n * generated: true\n * });\n * }\n * ])\n * ```\n */\nexport function provideEntityMiddleware(middleware) {\n return makeEnvironmentProviders([\n {\n provide: AXP_ENTITY_MIDDLEWARE_SETUP,\n useFactory: () => {\n // Access registry through DI when available\n const registry = globalThis.__domainRegistry__;\n if (!registry) {\n console.warn('Domain registry not available during entity middleware setup');\n return false;\n }\n // Register all entity middleware\n for (const mw of middleware) {\n registry.addEntityMiddleware(mw);\n }\n console.log(`✓ Registered ${middleware.length} entity middleware functions`);\n return true;\n },\n multi: true\n }\n ]);\n}\n/**\n * Provide combined middleware for all domain types.\n *\n * This is a convenience function that allows registering middleware for multiple\n * domain types in a single call.\n *\n * @param config Configuration object with middleware for each type\n * @returns Environment providers for dependency injection\n *\n * @example\n * ```typescript\n * provideDomainMiddleware({\n * modules: [\n * (context) => context.setMetadata('loadedAt', new Date())\n * ],\n * aggregates: [\n * (context) => context.setMetadata('type', 'business-aggregate')\n * ],\n * entities: [\n * (context) => {\n * if (!context.definition.fields.some(f => f.name === 'id')) {\n * context.addField({ name: 'id', type: 'uuid', required: true });\n * }\n * }\n * ]\n * })\n * ```\n */\nexport function provideDomainMiddleware(config) {\n const allProviders = [];\n // Add module middleware providers\n if (config.modules && config.modules.length > 0) {\n allProviders.push({\n provide: AXP_MODULE_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = globalThis.__domainRegistry__;\n if (!registry) {\n console.warn('Domain registry not available during module middleware setup');\n return false;\n }\n for (const mw of config.modules) {\n registry.addModuleMiddleware(mw);\n }\n return true;\n },\n multi: true\n });\n }\n // Add aggregate middleware providers\n if (config.aggregates && config.aggregates.length > 0) {\n allProviders.push({\n provide: AXP_AGGREGATE_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = globalThis.__domainRegistry__;\n if (!registry) {\n console.warn('Domain registry not available during aggregate middleware setup');\n return false;\n }\n for (const mw of config.aggregates) {\n registry.addAggregateMiddleware(mw);\n }\n return true;\n },\n multi: true\n });\n }\n // Add entity middleware providers\n if (config.entities && config.entities.length > 0) {\n allProviders.push({\n provide: AXP_ENTITY_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = globalThis.__domainRegistry__;\n if (!registry) {\n console.warn('Domain registry not available during entity middleware setup');\n return false;\n }\n for (const mw of config.entities) {\n registry.addEntityMiddleware(mw);\n }\n return true;\n },\n multi: true\n });\n }\n return makeEnvironmentProviders(allProviders);\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1kb21haW4tbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9saWIvcmVnaXN0cmllcy9kb21haW4vcHJvdmlkZS1kb21haW4tbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9FLHdDQUF3QztBQUV4Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLDZCQUE2QixDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLDZCQUE2QixDQUFDO0FBRXpFLFlBQVk7QUFFWiwwQ0FBMEM7QUFFMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLFVBQWlDO0lBRWpDLE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsNENBQTRDO2dCQUM1QyxNQUFNLFFBQVEsR0FBSSxVQUFrQixDQUFDLGtCQUF1QyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO29CQUM3RSxPQUFPLEtBQUssQ0FBQztnQkFDakIsQ0FBQztnQkFFRCxpQ0FBaUM7Z0JBQ2pDLEtBQUssTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQzFCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixVQUFVLENBQUMs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RUFBRSxJQUFJLE1BQU0sQ0FBQyxRQUFTLEVBQUUsQ0FBQztvQkFDaEMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxLQUFLLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRG9tYWluTWlkZGxld2FyZSB9IGZyb20gJy4vZG9tYWluLW1pZGRsZXdhcmUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFYUERvbWFpblJlZ2lzdHJ5IH0gZnJvbSAnLi9kb21haW4ucmVnaXN0cnknO1xuXG4vLyNyZWdpb24gLS0tLSAgIEluamVjdGlvbiBUb2tlbnMgICAtLS0tXG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VucyBmb3IgdHlwZS1zcGVjaWZpYyBtaWRkbGV3YXJlIHNldHVwXG4gKi9cbmV4cG9ydCBjb25zdCBBWFBfTU9EVUxFX01JRERMRVdBUkVfU0VUVVAgPSAnQVhQX01PRFVMRV9NSURETEVXQVJFX1NFVFVQJztcbmV4cG9ydCBjb25zdCBBWFBfQUdHUkVHQVRFX01JRERMRVdBUkVfU0VUVVAgPSAnQVhQX0FHR1JFR0FURV9NSURETEVXQVJFX1NFVFVQJztcbmV4cG9ydCBjb25zdCBBWFBfRU5USVRZX01JRERMRVdBUkVfU0VUVVAgPSAnQVhQX0VOVElUWV9NSURETEVXQVJFX1NFVFVQJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgUHJvdmlkZXIgRnVuY3Rpb25zICAgLS0tLVxuXG4vKipcbiAqIFByb3ZpZGUgbWlkZGxld2FyZSBmb3IgbW9kdWxlIHByb2Nlc3NpbmcuXG4gKiBcbiAqIE1vZHVsZSBtaWRkbGV3YXJlIGlzIGFwcGxpZWQgd2hlbiByZXNvbHZpbmcgbW9kdWxlIGRlZmluaXRpb25zIGFuZCBjYW46XG4gKiAtIEFkZCBtZXRhZGF0YSBhbmQgY3VzdG9tIHByb3BlcnRpZXNcbiAqIC0gVmFsaWRhdGUgbW9kdWxlIHN0cnVjdHVyZVxuICogLSBUcmFuc2Zvcm0gbW9kdWxlIGRlZmluaXRpb25zXG4gKiAtIEFkZCBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gKiBcbiAqIEBwYXJhbSBtaWRkbGV3YXJlIEFycmF5IG9mIG1pZGRsZXdhcmUgZnVuY3Rpb25zIHRvIHJlZ2lzdGVyXG4gKiBAcmV0dXJucyBFbnZpcm9ubWVudCBwcm92aWRlcnMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlTW9kdWxlTWlkZGxld2FyZShbXG4gKiAgIChjb250ZXh0KSA9PiB7XG4gKiAgICAgLy8gQWRkIGNvbW1vbiBtb2R1bGUgbWV0YWRhdGFcbiAqICAgICBjb250ZXh0LnNldE1ldGFkYXRhKCdsb2FkZWRBdCcsIG5ldyBEYXRlKCkpO1xuICogICAgIGNvbnRleHQuc2V0TWV0YWRhdGEoJ3ZlcnNpb24nLCAnMS4wLjAnKTtcbiAqICAgfSxcbiAqICAgKGNvbnRleHQpID0+IHtcbiAqICAgICAvLyBBZGQgbmFtZXNwYWNlIHByZWZpeCBpZiBub3QgcHJlc2VudFxuICogICAgIGlmICghY29udGV4dC5kZWZpbml0aW9uLm5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICogICAgICAgY29udGV4dC5kZWZpbml0aW9uLm5hbWUgPSBgYXBwLiR7Y29udGV4dC5kZWZpbml0aW9uLm5hbWV9YDtcbiAqICAgICB9XG4gKiAgIH1cbiAqIF0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNb2R1bGVNaWRkbGV3YXJlKFxuICAgIG1pZGRsZXdhcmU6IEFYUERvbWFpbk1pZGRsZXdhcmVbXVxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfTU9EVUxFX01JRERMRVdBUkVfU0VUVVAsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIHJlZ2lzdHJ5IHRocm91Z2ggREkgd2hlbiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IChnbG9iYWxUaGlzIGFzIGFueSkuX19kb21haW5SZWdpc3RyeV9fIGFzIEFYUERvbWFpblJlZ2lzdHJ5O1xuICAgICAgICAgICAgICAgIGlmICghcmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdEb21haW4gcmVnaXN0cnkgbm90IGF2YWlsYWJsZSBkdXJpbmcgbW9kdWxlIG1pZGRsZXdhcmUgc2V0dXAnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGFsbCBtb2R1bGUgbWlkZGxld2FyZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbXcgb2YgbWlkZGxld2FyZSkge1xuICAgICAgICAgICAgICAgICAgICByZWdpc3RyeS5hZGRNb2R1bGVNaWRkbGV3YXJlKG13KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyTIFJlZ2lzdGVyZWQgJHttaWRkbGV3YXJlLmxlbmd0aH0gbW9kdWxlIG1pZGRsZXdhcmUgZnVuY3Rpb25zYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0pO1xufVxuXG4vKipcbiAqIFByb3ZpZGUgbWlkZGxld2FyZSBmb3IgYWdncmVnYXRlIHByb2Nlc3NpbmcuXG4gKiBcbiAqIEFnZ3JlZ2F0ZSBtaWRkbGV3YXJlIGlzIGFwcGxpZWQgd2hlbiByZXNvbHZpbmcgYWdncmVnYXRlIGRlZmluaXRpb25zIGFuZCBjYW46XG4gKiAtIEFkZCBtZXRhZGF0YSBhbmQgY3VzdG9tIHByb3BlcnRpZXNcbiAqIC0gVmFsaWRhdGUgYWdncmVnYXRlIHN0cnVjdHVyZVxuICogLSBUcmFuc2Zvcm0gZW50aXR5IHJlZmVyZW5jZXNcbiAqIC0gQWRkIGNvbXB1dGVkIHJlbGF0aW9uc1xuICogXG4gKiBAcGFyYW0gbWlkZGxld2FyZSBBcnJheSBvZiBtaWRkbGV3YXJlIGZ1bmN0aW9ucyB0byByZWdpc3RlclxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZUFnZ3JlZ2F0ZU1pZGRsZXdhcmUoW1xuICogICAoY29udGV4dCkgPT4ge1xuICogICAgIC8vIEFkZCBhZ2dyZWdhdGUgbWV0YWRhdGFcbiAqICAgICBjb250ZXh0LnNldE1ldGFkYXRhKCd0eXBlJywgJ2J1c2luZXNzLWFnZ3JlZ2F0ZScpO1xuICogICB9LFxuICogICAoY29udGV4dCkgPT4ge1xuICogICAgIC8vIFZhbGlkYXRlIGVudGl0eSByZWZlcmVuY2VzXG4gKiAgICAgY29uc3QgZW50aXRpZXMgPSBjb250ZXh0LmRlZmluaXRpb24uZW50aXRpZXM7XG4gKiAgICAgaWYgKE9iamVjdC5rZXlzKGVudGl0aWVzKS5sZW5ndGggPT09IDApIHtcbiAqICAgICAgIHRocm93IG5ldyBFcnJvcignQWdncmVnYXRlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW50aXR5Jyk7XG4gKiAgICAgfVxuICogICB9XG4gKiBdKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQWdncmVnYXRlTWlkZGxld2FyZShcbiAgICBtaWRkbGV3YXJlOiBBWFBEb21haW5NaWRkbGV3YXJlW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQX0FHR1JFR0FURV9NSURETEVXQVJFX1NFVFVQLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEFjY2VzcyByZWdpc3RyeSB0aHJvdWdoIERJIHdoZW4gYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fZG9tYWluUmVnaXN0cnlfXyBhcyBBWFBEb21haW5SZWdpc3RyeTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRG9tYWluIHJlZ2lzdHJ5IG5vdCBhdmFpbGFibGUgZHVyaW5nIGFnZ3JlZ2F0ZSBtaWRkbGV3YXJlIHNldHVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBhbGwgYWdncmVnYXRlIG1pZGRsZXdhcmVcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG13IG9mIG1pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnkuYWRkQWdncmVnYXRlTWlkZGxld2FyZShtdyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOKckyBSZWdpc3RlcmVkICR7bWlkZGxld2FyZS5sZW5ndGh9IGFnZ3JlZ2F0ZSBtaWRkbGV3YXJlIGZ1bmN0aW9uc2ApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlIG1pZGRsZXdhcmUgZm9yIGVudGl0eSBwcm9jZXNzaW5nLlxuICogXG4gKiBFbnRpdHkgbWlkZGxld2FyZSBpcyBhcHBsaWVkIHdoZW4gcmVzb2x2aW5nIGVudGl0eSBkZWZpbml0aW9ucyBhbmQgY2FuOlxuICogLSBBZGQgYXV0by1nZW5lcmF0ZWQgZmllbGRzIChpZCwgdGltZXN0YW1wcylcbiAqIC0gQXBwbHkgZmllbGQgdHJhbnNmb3JtYXRpb25zXG4gKiAtIEFkZCB2YWxpZGF0aW9uIHJ1bGVzXG4gKiAtIFNldCBkZWZhdWx0IHZhbHVlc1xuICogXG4gKiBAcGFyYW0gbWlkZGxld2FyZSBBcnJheSBvZiBtaWRkbGV3YXJlIGZ1bmN0aW9ucyB0byByZWdpc3RlclxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZUVudGl0eU1pZGRsZXdhcmUoW1xuICogICAoY29udGV4dCkgPT4ge1xuICogICAgIC8vIEFkZCBhdXRvLWdlbmVyYXRlZCBJRCBmaWVsZCBpZiBub3QgcHJlc2VudFxuICogICAgIGlmICghY29udGV4dC5kZWZpbml0aW9uLmZpZWxkcy5zb21lKGYgPT4gZi5uYW1lID09PSAnaWQnKSkge1xuICogICAgICAgY29udGV4dC5hZGRGaWVsZCh7XG4gKiAgICAgICAgIG5hbWU6ICdpZCcsXG4gKiAgICAgICAgIHR5cGU6ICd1dWlkJyxcbiAqICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gKiAgICAgICAgIGdlbmVyYXRlZDogdHJ1ZVxuICogICAgICAgfSk7XG4gKiAgICAgfVxuICogICB9LFxuICogICAoY29udGV4dCkgPT4ge1xuICogICAgIC8vIEFkZCB0aW1lc3RhbXAgZmllbGRzXG4gKiAgICAgY29udGV4dC5hZGRGaWVsZCh7XG4gKiAgICAgICBuYW1lOiAnY3JlYXRlZEF0JyxcbiAqICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gKiAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAqICAgICAgIGdlbmVyYXRlZDogdHJ1ZVxuICogICAgIH0pO1xuICogICAgIGNvbnRleHQuYWRkRmllbGQoe1xuICogICAgICAgbmFtZTogJ3VwZGF0ZWRBdCcsXG4gKiAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICogICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gKiAgICAgICBnZW5lcmF0ZWQ6IHRydWVcbiAqICAgICB9KTtcbiAqICAgfVxuICogXSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUVudGl0eU1pZGRsZXdhcmUoXG4gICAgbWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdXG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfTUlERExFV0FSRV9TRVRVUCxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgcmVnaXN0cnkgdGhyb3VnaCBESSB3aGVuIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKGdsb2JhbFRoaXMgYXMgYW55KS5fX2RvbWFpblJlZ2lzdHJ5X18gYXMgQVhQRG9tYWluUmVnaXN0cnk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RvbWFpbiByZWdpc3RyeSBub3QgYXZhaWxhYmxlIGR1cmluZyBlbnRpdHkgbWlkZGxld2FyZSBzZXR1cCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYWxsIGVudGl0eSBtaWRkbGV3YXJlXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtdyBvZiBtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LmFkZEVudGl0eU1pZGRsZXdhcmUobXcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGDinJMgUmVnaXN0ZXJlZCAke21pZGRsZXdhcmUubGVuZ3RofSBlbnRpdHkgbWlkZGxld2FyZSBmdW5jdGlvbnNgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSk7XG59XG5cbi8qKlxuICogUHJvdmlkZSBjb21iaW5lZCBtaWRkbGV3YXJlIGZvciBhbGwgZG9tYWluIHR5cGVzLlxuICogXG4gKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBhbGxvd3MgcmVnaXN0ZXJpbmcgbWlkZGxld2FyZSBmb3IgbXVsdGlwbGVcbiAqIGRvbWFpbiB0eXBlcyBpbiBhIHNpbmdsZSBjYWxsLlxuICogXG4gKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggbWlkZGxld2FyZSBmb3IgZWFjaCB0eXBlXG4gKiBAcmV0dXJucyBFbnZpcm9ubWVudCBwcm92aWRlcnMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlRG9tYWluTWlkZGxld2FyZSh7XG4gKiAgIG1vZHVsZXM6IFtcbiAqICAgICAoY29udGV4dCkgPT4gY29udGV4dC5zZXRNZXRhZGF0YSgnbG9hZGVkQXQnLCBuZXcgRGF0ZSgpKVxuICogICBdLFxuICogICBhZ2dyZWdhdGVzOiBbXG4gKiAgICAgKGNvbnRleHQpID0+IGNvbnRleHQuc2V0TWV0YWRhdGEoJ3R5cGUnLCAnYnVzaW5lc3MtYWdncmVnYXRlJylcbiAqICAgXSxcbiAqICAgZW50aXRpZXM6IFtcbiAqICAgICAoY29udGV4dCkgPT4ge1xuICogICAgICAgaWYgKCFjb250ZXh0LmRlZmluaXRpb24uZmllbGRzLnNvbWUoZiA9PiBmLm5hbWUgPT09ICdpZCcpKSB7XG4gKiAgICAgICAgIGNvbnRleHQuYWRkRmllbGQoeyBuYW1lOiAnaWQnLCB0eXBlOiAndXVpZCcsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICogICAgICAgfVxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZURvbWFpbk1pZGRsZXdhcmUoY29uZmlnOiB7XG4gICAgbW9kdWxlcz86IEFYUERvbWFpbk1pZGRsZXdhcmVbXTtcbiAgICBhZ2dyZWdhdGVzPzogQVhQRG9tYWluTWlkZGxld2FyZVtdO1xuICAgIGVudGl0aWVzPzogQVhQRG9tYWluTWlkZGxld2FyZVtdO1xufSk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICBjb25zdCBhbGxQcm92aWRlcnM6IGFueVtdID0gW107XG5cbiAgICAvLyBBZGQgbW9kdWxlIG1pZGRsZXdhcmUgcHJvdmlkZXJzXG4gICAgaWYgKGNvbmZpZy5tb2R1bGVzICYmIGNvbmZpZy5tb2R1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWxsUHJvdmlkZXJzLnB1c2goe1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQX01PRFVMRV9NSURETEVXQVJFX1NFVFVQLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKGdsb2JhbFRoaXMgYXMgYW55KS5fX2RvbWFpblJlZ2lzdHJ5X18gYXMgQVhQRG9tYWluUmVnaXN0cnk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RvbWFpbiByZWdpc3RyeSBub3QgYXZhaWxhYmxlIGR1cmluZyBtb2R1bGUgbWlkZGxld2FyZSBzZXR1cCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbXcgb2YgY29uZmlnLm1vZHVsZXMhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LmFkZE1vZHVsZU1pZGRsZXdhcmUobXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYWdncmVnYXRlIG1pZGRsZXdhcmUgcHJvdmlkZXJzXG4gICAgaWYgKGNvbmZpZy5hZ2dyZWdhdGVzICYmIGNvbmZpZy5hZ2dyZWdhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWxsUHJvdmlkZXJzLnB1c2goe1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQX0FHR1JFR0FURV9NSURETEVXQVJFX1NFVFVQLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gKGdsb2JhbFRoaXMgYXMgYW55KS5fX2RvbWFpblJlZ2lzdHJ5X18gYXMgQVhQRG9tYWluUmVnaXN0cnk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RvbWFpbiByZWdpc3RyeSBub3QgYXZhaWxhYmxlIGR1cmluZyBhZ2dyZWdhdGUgbWlkZGxld2FyZSBzZXR1cCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbXcgb2YgY29uZmlnLmFnZ3JlZ2F0ZXMhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LmFkZEFnZ3JlZ2F0ZU1pZGRsZXdhcmUobXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZW50aXR5IG1pZGRsZXdhcmUgcHJvdmlkZXJzXG4gICAgaWYgKGNvbmZpZy5lbnRpdGllcyAmJiBjb25maWcuZW50aXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhbGxQcm92aWRlcnMucHVzaCh7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfRU5USVRZX01JRERMRVdBUkVfU0VUVVAsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fZG9tYWluUmVnaXN0cnlfXyBhcyBBWFBEb21haW5SZWdpc3RyeTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRG9tYWluIHJlZ2lzdHJ5IG5vdCBhdmFpbGFibGUgZHVyaW5nIGVudGl0eSBtaWRkbGV3YXJlIHNldHVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtdyBvZiBjb25maWcuZW50aXRpZXMhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LmFkZEVudGl0eU1pZGRsZXdhcmUobXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKGFsbFByb3ZpZGVycyk7XG59XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","//#region ---- Core Registry System ----\n// Main registry and service\nexport * from './domain.registry';\nexport * from './domain.service';\n//#endregion\n//#region ---- Loader System ----\n// Loader interface and providers\nexport * from './domain-loader.interface';\nexport * from './provide-domain-loaders';\n//#endregion\n//#region ---- Middleware System ----\n// Middleware interface and providers\nexport * from './domain-middleware.interface';\nexport * from './provide-domain-middleware';\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3JlZ2lzdHJpZXMvZG9tYWluL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRDQUE0QztBQUU1Qyw0QkFBNEI7QUFDNUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFlBQVk7QUFFWixxQ0FBcUM7QUFFckMsaUNBQWlDO0FBQ2pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxZQUFZO0FBRVoseUNBQXlDO0FBRXpDLHFDQUFxQztBQUNyQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiAtLS0tICAgQ29yZSBSZWdpc3RyeSBTeXN0ZW0gICAtLS0tXG5cbi8vIE1haW4gcmVnaXN0cnkgYW5kIHNlcnZpY2VcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluLnJlZ2lzdHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluLnNlcnZpY2UnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBMb2FkZXIgU3lzdGVtICAgLS0tLVxuXG4vLyBMb2FkZXIgaW50ZXJmYWNlIGFuZCBwcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluLWxvYWRlci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlLWRvbWFpbi1sb2FkZXJzJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgTWlkZGxld2FyZSBTeXN0ZW0gICAtLS0tXG5cbi8vIE1pZGRsZXdhcmUgaW50ZXJmYWNlIGFuZCBwcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vZG9tYWluLW1pZGRsZXdhcmUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZS1kb21haW4tbWlkZGxld2FyZSc7XG5cbi8vI2VuZHJlZ2lvbiAiXX0=","export * from './lib/provide-entity';\nexport * from './lib/domain.module';\n//#region ---- Type Definitions ----\nexport * from './lib/definitions/base.types';\nexport * from './lib/definitions/module-definition.types';\nexport * from './lib/definitions/aggregate-definition.types';\nexport * from './lib/definitions/entity-definition.types';\nexport * from './lib/definitions/schema-definition.types';\nexport * from './lib/definitions/relation-definition.types';\n//#endregion\n//#region ---- Runtime Models ----\nexport * from './lib/models/module.model';\nexport * from './lib/models/aggregate.model';\nexport * from './lib/models/entity.model';\nexport * from './lib/models/entity-field.model';\nexport * from './lib/models/schema.model';\nexport * from './lib/models/relation.model';\n//#endregion\n//#region ---- Helpers ----\nexport * from './lib/helpers/module-helper';\n//#endregion\n//#region ---- Schema Registry Services ----\nexport * from './lib/registries/schema';\n//#endregion\n//#region ---- Domain Registry Services ----\nexport * from './lib/registries/domain';\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHFCQUFxQixDQUFDO0FBRXBDLHdDQUF3QztBQUV4QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUU1RCxZQUFZO0FBRVosc0NBQXNDO0FBRXRDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLFlBQVk7QUFFWiwrQkFBK0I7QUFFL0IsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxZQUFZO0FBRVosZ0RBQWdEO0FBRWhELGNBQWMseUJBQXlCLENBQUM7QUFFeEMsWUFBWTtBQUVaLGdEQUFnRDtBQUVoRCxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlLWVudGl0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kb21haW4ubW9kdWxlJztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlIERlZmluaXRpb25zICAgLS0tLVxuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZWZpbml0aW9ucy9iYXNlLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlZmluaXRpb25zL21vZHVsZS1kZWZpbml0aW9uLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlZmluaXRpb25zL2FnZ3JlZ2F0ZS1kZWZpbml0aW9uLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlZmluaXRpb25zL2VudGl0eS1kZWZpbml0aW9uLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlZmluaXRpb25zL3NjaGVtYS1kZWZpbml0aW9uLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RlZmluaXRpb25zL3JlbGF0aW9uLWRlZmluaXRpb24udHlwZXMnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBSdW50aW1lIE1vZGVscyAgIC0tLS1cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL21vZHVsZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvYWdncmVnYXRlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9lbnRpdHkubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudGl0eS1maWVsZC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yZWxhdGlvbi5tb2RlbCc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIEhlbHBlcnMgICAtLS0tXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMvbW9kdWxlLWhlbHBlcic7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBSZWdpc3RyeSBTZXJ2aWNlcyAgIC0tLS1cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVnaXN0cmllcy9zY2hlbWEnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBEb21haW4gUmVnaXN0cnkgU2VydmljZXMgICAtLS0tXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlZ2lzdHJpZXMvZG9tYWluJztcblxuLy8jZW5kcmVnaW9uXG5cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLWRvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vZG9tYWluL3NyYy9hY29yZXgtcGxhdGZvcm0tZG9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-domain.mjs","sources":["../../../../libs/platform/domain/src/lib/provide-entity.ts","../../../../libs/platform/domain/src/lib/entity-definition-crud.token.ts","../../../../libs/platform/domain/src/lib/registries/property/property-extension.token.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain-extension.token.ts","../../../../libs/platform/domain/src/lib/domain.module.ts","../../../../libs/platform/domain/src/lib/definitions/base.types.ts","../../../../libs/platform/domain/src/lib/definitions/aggregate-definition.types.ts","../../../../libs/platform/domain/src/lib/definitions/entity-definition.types.ts","../../../../libs/platform/domain/src/lib/definitions/relation-definition.types.ts","../../../../libs/platform/domain/src/lib/definitions/menu-definition.types.ts","../../../../libs/platform/domain/src/lib/definitions/permission-definition.types.ts","../../../../libs/platform/domain/src/lib/definitions/command-registry.types.ts","../../../../libs/platform/domain/src/lib/definitions/query-registry.types.ts","../../../../libs/platform/domain/src/lib/models/aggregate.model.ts","../../../../libs/platform/domain/src/lib/models/module.model.ts","../../../../libs/platform/domain/src/lib/models/property.model.ts","../../../../libs/platform/domain/src/lib/models/entity-field.model.ts","../../../../libs/platform/domain/src/lib/models/entity.model.ts","../../../../libs/platform/domain/src/lib/models/relation.model.ts","../../../../libs/platform/domain/src/lib/helpers/module-helper.ts","../../../../libs/platform/domain/src/lib/registries/property/property-middleware.functions.ts","../../../../libs/platform/domain/src/lib/registries/property/property.registry.ts","../../../../libs/platform/domain/src/lib/registries/property/property.service.ts","../../../../libs/platform/domain/src/lib/registries/property/property-loader.interface.ts","../../../../libs/platform/domain/src/lib/registries/property/provide-property-loaders.ts","../../../../libs/platform/domain/src/lib/registries/property/provide-property-setups.ts","../../../../libs/platform/domain/src/lib/registries/property/provide-property-middleware.ts","../../../../libs/platform/domain/src/lib/registries/property/index.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain-middleware.interface.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain.registry.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain.service.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain-loader.interface.ts","../../../../libs/platform/domain/src/lib/registries/domain/provide-domain-loaders.ts","../../../../libs/platform/domain/src/lib/registries/domain/provide-domain-middleware.ts","../../../../libs/platform/domain/src/lib/registries/domain/index.ts","../../../../libs/platform/domain/src/index.ts","../../../../libs/platform/domain/src/acorex-platform-domain.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Token for entity CRUD setup. Consumed by AXPDomainModule.\n * The actual provider is provideEntity() from @acorex/platform/layout/entity\n * to avoid circular dependency (domain must not depend on layout/entity).\n */\nexport const AXP_ENTITY_CRUD_SETUP = new InjectionToken<void>('AXP_ENTITY_CRUD_SETUP');\n","import { InjectionToken } from '@angular/core';\nimport type { AXPInterfaceDefinition } from './definitions/interface-definition.types';\nimport type { AXPPluginDefinition } from './definitions/plugin-definition.types';\nimport type { AXPValidationRuleDefinition } from './definitions/validation-definition.types';\nimport type { AXPRelationDefinition } from './definitions/relation-definition.types';\nimport type { AXPMenuDefinitionRecord } from './definitions/menu-definition.types';\nimport type { AXPPermissionGroupDefinitionRecord } from './definitions/permission-definition.types';\nimport type { AXPCommandRegistryRecord } from './definitions/command-registry.types';\nimport type { AXPQueryRegistryRecord } from './definitions/query-registry.types';\n\n//#region ---- Entity Definition CRUD Interface ----\n\n/**\n * Service interface for CRUD operations on entity and related definition records stored in Dexie/Firestore.\n * Provided by connectivity mock when using Dexie or Firestore as entity definition source.\n * Use this service from anywhere in the app (not just mock).\n */\nexport interface AXPEntityDefinitionCrudService {\n list(): Promise<{ name: string; module: string; entityName?: string }[]>;\n getRaw(moduleName: string, entityName: string): Promise<Record<string, unknown> | null>;\n create(entityName: string, definition: Record<string, unknown>): Promise<void>;\n update(entityName: string, definition: Record<string, unknown>): Promise<void>;\n delete(entityName: string): Promise<void>;\n\n listInterfaces(): Promise<AXPInterfaceDefinition[]>;\n listInterfacesByCategory(categoryName: string): Promise<AXPInterfaceDefinition[]>;\n getInterface(name: string): Promise<AXPInterfaceDefinition | null>;\n createInterface(name: string, definition: AXPInterfaceDefinition): Promise<void>;\n updateInterface(name: string, definition: AXPInterfaceDefinition): Promise<void>;\n deleteInterface(name: string): Promise<void>;\n\n listPlugins(): Promise<AXPPluginDefinition[]>;\n getPlugin(name: string): Promise<AXPPluginDefinition | null>;\n createPlugin(name: string, definition: AXPPluginDefinition): Promise<void>;\n updatePlugin(name: string, definition: AXPPluginDefinition): Promise<void>;\n deletePlugin(name: string): Promise<void>;\n\n listValidations(): Promise<AXPValidationRuleDefinition[]>;\n getValidation(name: string): Promise<AXPValidationRuleDefinition | null>;\n createValidation(name: string, definition: AXPValidationRuleDefinition): Promise<void>;\n updateValidation(name: string, definition: AXPValidationRuleDefinition): Promise<void>;\n deleteValidation(name: string): Promise<void>;\n\n listRelations(): Promise<Array<AXPRelationDefinition & { id: string }>>;\n getRelation(id: string): Promise<AXPRelationDefinition | null>;\n createRelation(id: string, definition: AXPRelationDefinition): Promise<void>;\n updateRelation(id: string, definition: AXPRelationDefinition): Promise<void>;\n deleteRelation(id: string): Promise<void>;\n\n listModules(): Promise<Array<{ name: string; title?: string; icon?: string }>>;\n getModule(name: string): Promise<{ name: string; title?: string; icon?: string } | null>;\n createModule(name: string, definition: { name: string; title?: string; icon?: string }): Promise<void>;\n updateModule(name: string, definition: { name: string; title?: string; icon?: string }): Promise<void>;\n deleteModule(name: string): Promise<void>;\n\n listAggregates(filter?: { module?: string }): Promise<Array<{ id: string; definition: Record<string, unknown> }>>;\n getAggregate(id: string): Promise<Record<string, unknown> | null>;\n createAggregate(id: string, definition: Record<string, unknown>): Promise<void>;\n updateAggregate(id: string, definition: Record<string, unknown>): Promise<void>;\n deleteAggregate(id: string): Promise<void>;\n\n listMenus(): Promise<Array<{ id: string; definition: AXPMenuDefinitionRecord }>>;\n getMenu(id: string): Promise<AXPMenuDefinitionRecord | null>;\n createMenu(id: string, definition: AXPMenuDefinitionRecord): Promise<void>;\n updateMenu(id: string, definition: AXPMenuDefinitionRecord): Promise<void>;\n deleteMenu(id: string): Promise<void>;\n\n listPermissionGroups(): Promise<Array<{ id: string; definition: AXPPermissionGroupDefinitionRecord }>>;\n getPermissionGroup(id: string): Promise<AXPPermissionGroupDefinitionRecord | null>;\n createPermissionGroup(id: string, definition: AXPPermissionGroupDefinitionRecord): Promise<void>;\n updatePermissionGroup(id: string, definition: AXPPermissionGroupDefinitionRecord): Promise<void>;\n deletePermissionGroup(id: string): Promise<void>;\n\n listCommands(): Promise<Array<{ id: string; definition: AXPCommandRegistryRecord }>>;\n getCommand(id: string): Promise<AXPCommandRegistryRecord | null>;\n createCommand(id: string, definition: AXPCommandRegistryRecord): Promise<void>;\n updateCommand(id: string, definition: AXPCommandRegistryRecord): Promise<void>;\n deleteCommand(id: string): Promise<void>;\n\n listQueries(): Promise<Array<{ id: string; definition: AXPQueryRegistryRecord }>>;\n getQuery(id: string): Promise<AXPQueryRegistryRecord | null>;\n createQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;\n updateQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;\n deleteQuery(id: string): Promise<void>;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\nexport const AXP_ENTITY_DEFINITION_CRUD_SERVICE = new InjectionToken<AXPEntityDefinitionCrudService | null>(\n 'AXP_ENTITY_DEFINITION_CRUD_SERVICE',\n {\n providedIn: null,\n factory: () => null,\n }\n);\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { AXPPropertyMiddleware } from './property.middleware';\n\n//#region ---- Dependency Injection Tokens ----\n\n/**\n * Targeted middleware extension (name or regex) for property resolution.\n */\nexport const AXP_PROPERTY_EXTENSION = new InjectionToken<{\n target: string | RegExp;\n middleware: AXPPropertyMiddleware;\n}>('AXP_PROPERTY_EXTENSION');\n\n/**\n * Bootstrap hook: register property definitions known at build time.\n */\nexport const AXP_PROPERTY_SETUP = new InjectionToken<void>('AXP_PROPERTY_SETUP');\n\n/**\n * Bootstrap hook: register global middleware for every property resolution.\n */\nexport const AXP_PROPERTY_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_PROPERTY_MIDDLEWARE_SETUP');\n\n/**\n * Bootstrap hook: register on-demand property loaders.\n */\nexport const AXP_PROPERTY_LOADER_SETUP = new InjectionToken<void>('AXP_PROPERTY_LOADER_SETUP');\n\n//#endregion ","import { InjectionToken } from '@angular/core';\nimport { AXPDomainMiddleware } from './domain-middleware.interface';\n\n//#region ---- Dependency Injection Tokens ----\n\n/**\n * Injection token for schema-specific middleware extensions.\n * \n * Used for targeted middleware that applies only to schemas matching\n * specific patterns (name or regex). This enables fine-grained control\n * over which schemas receive which middleware.\n */\nexport const AXP_DOMAIN_EXTENSION = new InjectionToken<{\n target: string | RegExp;\n middleware: AXPDomainMiddleware;\n}>('AXP_DOMAIN_EXTENSION');\n\n/**\n * Injection token for schema setup initialization.\n * \n * Used during application bootstrap to register schemas that are\n * known at build time. Multiple providers can use this token to\n * contribute schemas to the registry.\n */\nexport const AXP_DOMAIN_SETUP = new InjectionToken<void>('AXP_DOMAIN_SETUP');\n\n/**\n * Injection token for schema middleware setup initialization.\n * \n * Used during application bootstrap to register global middleware\n * that applies to all schema resolutions. This enables centralized\n * schema processing logic.\n */\nexport const AXP_DOMAIN_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_DOMAIN_MIDDLEWARE_SETUP');\n\n/**\n * Injection token for schema loader setup initialization.\n * \n * Used during application bootstrap to register schema loaders\n * that can provide schemas on-demand when they're not found in\n * the registry.\n */\nexport const AXP_DOMAIN_LOADER_SETUP = new InjectionToken<void>('AXP_DOMAIN_LOADER_SETUP');\n\n//#endregion ","import { AXPRuntimeModule } from \"@acorex/platform/runtime\";\nimport { NgModule, inject } from \"@angular/core\";\nimport { AXP_ENTITY_CRUD_SETUP } from \"./provide-entity\";\nimport { AXP_PROPERTY_LOADER_SETUP, AXP_PROPERTY_MIDDLEWARE_SETUP, AXP_PROPERTY_SETUP } from \"./registries/property/property-extension.token\";\nimport { AXP_DOMAIN_LOADER_SETUP, AXP_DOMAIN_MIDDLEWARE_SETUP, AXP_DOMAIN_SETUP } from \"./registries/domain/domain-extension.token\";\n\n\n\n@NgModule({\n imports: [\n AXPRuntimeModule\n ]\n})\nexport class AXPDomainModule {\n private _commandSetup = inject(AXP_ENTITY_CRUD_SETUP, { optional: true });\n\n /**\n * Optional bootstrap hooks for registered property definitions (see {@link AXP_PROPERTY_SETUP} and related tokens).\n */\n private _propertySetup = inject(AXP_PROPERTY_SETUP, { optional: true });\n private _propertyMiddlewareSetup = inject(AXP_PROPERTY_MIDDLEWARE_SETUP, { optional: true });\n private _propertyLoaderSetup = inject(AXP_PROPERTY_LOADER_SETUP, { optional: true });\n\n /**\n * Injection token for domain loader setup initialization.\n * \n * Used during application bootstrap to register domain loaders\n * that can provide domain definitions on-demand when they're not found in\n * the registry.\n */\n\n private _domainLoaderSetup = inject(AXP_DOMAIN_LOADER_SETUP, { optional: true });\n private _domainMiddlewareSetup = inject(AXP_DOMAIN_MIDDLEWARE_SETUP, { optional: true });\n private _domainSetup = inject(AXP_DOMAIN_SETUP, { optional: true });\n}","import { AXPExpression } from \"@acorex/platform/core\";\n\n\n\nexport enum AXPDomainActionSide {\n Client = 'client',\n Server = 'server',\n Both = 'both',\n}\n\n/**\n * Interface for defining actions\n */\nexport interface AXPDomainAction {\n event: string;\n side: 'client' | 'server' | 'both';\n condition?: AXPExpression;\n expression: AXPExpression;\n}\n\nexport enum AXPEntityCommandScope {\n TypeLevel = 'typeLevel',\n Selected = 'selected',\n Individual = 'individual',\n Section = 'section',\n}\n\nexport interface AXPDomainRealtedModuleEntity {\n moduleId?: string;\n module?: {\n id?: string;\n name?: string;\n title?: string;\n },\n entityId?: string;\n entity?: {\n id?: string;\n name?: string;\n title?: string;\n },\n}\n\n","import { AXPValidationRules } from \"@acorex/platform/core\";\nimport { AXPEntityDefinition } from \"./entity-definition.types\";\nimport { AXPDomainAction } from \"./base.types\";\n\n//#region ---- Entity Loading Types ----\n\nexport type AXPAggregateEntityList = {\n [key: string]: () => Promise<AXPEntityDefinition>;\n}\n\n//#endregion\n\n//#region ---- Aggregate Definition ----\n\n/**\n * Aggregate definition. Relations are stored in a separate collection (like MySQL join table).\n * Join when needed via relations collection.\n */\nexport interface AXPAggregateDefinition {\n name: string;\n title: string;\n entities: AXPEntityDefinition[] | AXPAggregateEntityList | Record<string, string>;\n validations: AXPValidationRules;\n actions: AXPDomainAction[];\n}\n\n//#endregion\n","import { AXPValidationRules } from \"@acorex/platform/core\";\nimport { AXPDomainAction } from \"./base.types\";\nimport type { AXPPluginDefinitionValue } from \"./plugin-definition.types\";\nimport type { AXPPropertyDefinition } from \"./property-definition.types\";\n\nexport enum AXPEntityType {\n Entity,\n AggregateRoot,\n ValueObject,\n}\n\nexport interface AXPEntityDefinition {\n name: string;\n title: string;\n fields: AXPEntityPropertyDefinition[];\n type: AXPEntityType;\n /** Entity plugins (e.g. common.history, common.lock). Name + optional options only. */\n plugins?: AXPPluginDefinitionValue[];\n /** Property groups for layout */\n groups?: Array<{ id: string; title: string }>;\n /** List/table columns */\n columns?: Array<{ name: string }>;\n /** Display formats */\n formats?: { individual?: string; plural?: string };\n /** Layout interfaces (master create/update/single/list). Pass-through for converter. */\n interfaces?: Record<string, unknown>;\n /** Module name (e.g. ContentManagement). Derived from path or explicit. */\n module?: string;\n /** Entity icon. */\n icon?: string;\n}\n\nexport interface AXPEntityPropertyFeatures {\n nullable: boolean;\n readOnly: boolean; // for update\n}\n\n/**\n * Entity field: flattened embedded property definition (interface, validations, features) plus entity-only metadata.\n * Top-level name/title are the entity property name/title.\n */\nexport interface AXPEntityPropertyDefinition extends AXPPropertyDefinition {\n actions?: AXPDomainAction[];\n /** Nullable/readOnly for entity binding; distinct from property.features (searchable, filterable, etc.). */\n fieldFeatures?: AXPEntityPropertyFeatures;\n}\n","export enum AXPRelationshipKind {\n Association,\n Composition,\n Aggregation,\n}\n\nexport enum AXPRelationshipCardinality {\n OneToOne,\n OneToMany,\n ManyToMany,\n}\n\n/**\n * Standalone relation definition with full source and target.\n * Relations live in their own collection, independent of aggregates.\n */\nexport interface AXPRelationDefinition {\n id?: string;\n type: AXPRelationshipCardinality;\n kind: AXPRelationshipKind;\n source: {\n aggregate: string;\n entity: string;\n key: string;\n };\n target: {\n aggregate: string;\n entity: string;\n key: string;\n };\n isRequired: boolean;\n}","//#region ---- Serializable menu definition (storage / CRUD contract) ----\n\n/**\n * Discriminated JSON for `AXPMenuDefinitionRecord.command`.\n * Modal navigation is omitted (Angular `Type` is not JSON-serializable).\n */\nexport type AXPMenuDefinitionStoredCommand =\n | {\n kind: 'navigate';\n navigateType: 'router';\n path: string;\n extras?: Record<string, unknown>;\n }\n | {\n kind: 'execute';\n name: string;\n options?: Record<string, unknown>;\n };\n\n/**\n * Optional reference to an entity list route: resolved at runtime via `AXPEntityService.createPath`.\n */\nexport interface AXPMenuDefinitionEntityListRef {\n module: string;\n entity: string;\n}\n\n/**\n * Serializable menu definition for definition stores (Dexie/Firestore in mock today).\n * Mirrors persisted shape for `AXPEntityDefinitionCrudService` menu APIs — not identical to shell `AXPMenuItem`.\n */\nexport interface AXPMenuDefinitionRecord {\n /** Same as `AXPMenuItem.name` (unique key). */\n name: string;\n text: string;\n description?: string;\n icon?: string;\n priority?: number;\n type?: 'menu' | 'group' | 'break';\n /**\n * Parent menu `name` for `context.find(attachParentName).addItems(...)`.\n * Empty omits attachment (provider may add to root — see implementation).\n */\n attachParentName?: string;\n /** Literal router path; if both this and `entityListRef` are set, implementations may prefer this. */\n path?: string;\n entityListRef?: AXPMenuDefinitionEntityListRef;\n policyFeatures?: string[];\n policyPermissions?: string[];\n badgeKey?: string;\n command?: AXPMenuDefinitionStoredCommand;\n /**\n * Optional module classification (references `PlatformManagement.ModuleDefinitions` when using the category plugin).\n */\n categoryIds?: string[];\n /** Denormalized labels for list/display (mirrors product category pattern). */\n categories?: Array<{ id: string; title?: string }>;\n meta?: Record<string, unknown>;\n}\n\n//#endregion\n","//#region ---- Serializable permission definition (storage / CRUD contract) ----\n\n/**\n * One level of child permissions under a root permission (fluent `addChild` only).\n * Nested `children` under leaves are not part of the storage contract.\n */\nexport interface AXPPermissionLeafRecord {\n name: string;\n title: string;\n description?: string;\n requiredFeatures?: string[];\n}\n\n/**\n * Root permission row: one `addPermission` … `endPermission` chain, with optional sibling `addChild` entries.\n */\nexport interface AXPPermissionDefinitionRecord {\n name: string;\n title: string;\n description?: string;\n requiredFeatures?: string[];\n /** At most one level — matches `AXPPermissionDefinitionProviderContext` fluent API. */\n children?: AXPPermissionLeafRecord[];\n}\n\n/**\n * Serializable permission group for definition stores (Dexie/Firestore).\n * Aligns with `AXPPermissionGroupDefinition` / fluent providers; one row per group.\n */\nexport interface AXPPermissionGroupDefinitionRecord {\n name: string;\n title: string;\n description?: string;\n permissions: AXPPermissionDefinitionRecord[];\n /**\n * Optional module classification (references `PlatformManagement.ModuleDefinitions` when using the category plugin).\n */\n categoryIds?: string[];\n /** Denormalized labels for list/display (mirrors product category pattern). */\n categories?: Array<{ id: string; title?: string }>;\n}\n\n//#endregion\n","import type { AXPPropertyDefinition } from './property-definition.types';\n\n//#region ---- Command registry persisted record ----\n\n/** Surfaces where a command may be exposed (tooling / automation). Build-time: optional on `defineCommand`. */\nexport type AXPCommandCapability = 'ai' | 'workflow';\n\n/**\n * Persisted command registry row (e.g. Dexie/Firestore via AXPEntityDefinitionCrudService).\n * `name` is the runtime command key; `active` is the toggle stored for mock/admin UIs.\n */\nexport interface AXPCommandRegistryRecord {\n name: string;\n active: boolean;\n /** Human / AI-oriented description of what the command does. */\n description?: string;\n /** Input parameters as schema rows (same shape as interface `optionDefinitions`). */\n inputOptionDefinitions?: AXPPropertyDefinition[];\n /** Output shape as schema rows (same shape as interface `optionDefinitions`). */\n outputOptionDefinitions?: AXPPropertyDefinition[];\n /** Display title from build-time command metadata (`*.definition.ts`). */\n catalogTitle?: string;\n /** Where the command runs (metadata). */\n executionMode?: 'frontend' | 'backend' | 'both';\n /** Pretty-printed JSON of the outcomes definition from metadata (readonly display). */\n outcomesDefinitionJson?: string;\n /** Pretty-printed JSON of AI hints from metadata (readonly display). */\n aiMetadataJson?: string;\n /**\n * Optional capability flags (from build-time `capabilities` on command metadata).\n * Omitted or empty means no declared surface; consumers may still apply legacy rules (e.g. AI `ai-tool` tag).\n */\n capabilities?: AXPCommandCapability[];\n}\n\n//#endregion\n","import type { AXPCommandCapability } from './command-registry.types';\nimport type { AXPPropertyDefinition } from './property-definition.types';\n\n//#region ---- Query registry persisted record ----\n\n/**\n * Persisted query registry row (e.g. Dexie/Firestore via AXPEntityDefinitionCrudService).\n * `name` is the runtime query key; `active` is the toggle stored for mock/admin UIs.\n * Queries expose `fetch(input)` only — no command outcomes.\n */\nexport interface AXPQueryRegistryRecord {\n name: string;\n active: boolean;\n /** Human / AI-oriented description of what the query returns. */\n description?: string;\n /** Input parameters (filter / criteria) as property definition rows. */\n inputOptionDefinitions?: AXPPropertyDefinition[];\n /** Result shape as property definition rows (documentation / tooling). */\n outputOptionDefinitions?: AXPPropertyDefinition[];\n /** Display title from build-time query metadata (`*.query.definition.ts`). */\n catalogTitle?: string;\n /** Where the query runs (metadata). */\n executionMode?: 'frontend' | 'backend' | 'both';\n /** Pretty-printed JSON of AI hints from metadata (readonly display). */\n aiMetadataJson?: string;\n /**\n * Optional capability flags (from build-time `capabilities` on query metadata).\n * Omitted or empty means no declared surface; consumers may still apply legacy rules (e.g. AI `ai-tool` tag).\n */\n capabilities?: AXPCommandCapability[];\n}\n\n//#endregion\n","import { AXPValidationRules } from \"@acorex/platform/core\";\nimport { AXPAggregateDefinition } from \"../definitions/aggregate-definition.types\";\nimport { AXPDomainAction } from \"../definitions/base.types\";\n\n//#region ---- AXPAggregateModel ----\n\n/**\n * Simple runtime model for aggregate definitions with parent references and navigation helpers.\n * Relations are stored in a separate collection; join when needed.\n */\nexport class AXPAggregateModel {\n public readonly name: string;\n public readonly title: string;\n public readonly validations: AXPValidationRules;\n public readonly actions: AXPDomainAction[];\n public readonly parent: any; // Will be AXPModuleModel, using any to avoid circular dependency\n public readonly entityReferences: Record<string, string>; // Just string references\n\n constructor(definition: AXPAggregateDefinition, parent: any) {\n this.name = definition.name;\n this.title = definition.title;\n this.validations = definition.validations || [];\n this.actions = definition.actions || [];\n this.parent = parent;\n\n // Extract entity references - convert all formats to simple string map\n this.entityReferences = this.extractEntityReferences(definition.entities);\n }\n\n //#endregion\n\n //#region ---- Entity Reference Extraction ----\n\n /**\n * Extract entity references from various entity definition formats\n * and convert to simple string map\n */\n private extractEntityReferences(entities: any): Record<string, string> {\n if (!entities) {\n return {};\n }\n\n if (Array.isArray(entities)) {\n // Format 1: Array of entity definitions - convert to self-references\n const references: Record<string, string> = {};\n for (const entity of entities) {\n if (entity.name) {\n // Self-reference format: module.aggregate.entity\n references[entity.name] = `${this.parent.name}.${this.name}.${entity.name}`;\n }\n }\n return references;\n }\n\n if (typeof entities === 'object') {\n // Format 2: Object with string references - use as-is\n return { ...entities };\n }\n\n return {};\n }\n\n //#endregion\n\n //#region ---- Navigation Helpers ----\n\n /**\n * Get entity reference by name\n * \n * @param entityName Name of the entity\n * @returns Entity reference string or undefined if not found\n */\n getEntityReference(entityName: string): string | undefined {\n return this.entityReferences[entityName];\n }\n\n /**\n * Get full path for an entity in this aggregate\n * \n * @param entityName Name of the entity\n * @returns Full entity path\n */\n getEntityPath(entityName: string): string {\n return `${this.parent.name}.${this.name}.${entityName}`;\n }\n\n /**\n * Get all available entity names\n * \n * @returns Array of entity names\n */\n getEntityNames(): string[] {\n return Object.keys(this.entityReferences);\n }\n\n /**\n * Check if entity exists in this aggregate\n * \n * @param entityName Name of the entity\n * @returns True if entity exists\n */\n hasEntity(entityName: string): boolean {\n return entityName in this.entityReferences;\n }\n\n //#endregion\n\n //#region ---- Parent Navigation ----\n\n /**\n * Get parent module\n * \n * @returns Parent module model\n */\n getModule(): any {\n return this.parent;\n }\n\n /**\n * Get full aggregate path (module.aggregate)\n * \n * @returns Full path string\n */\n getPath(): string {\n return `${this.parent.name}.${this.name}`;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Get aggregate statistics\n * \n * @returns Statistics object\n */\n getStatistics(): {\n entityCount: number;\n actionCount: number;\n validationCount: number;\n } {\n return {\n entityCount: Object.keys(this.entityReferences).length,\n actionCount: this.actions.length,\n validationCount: this.validations.length\n };\n }\n\n /**\n * Convert back to interface definition\n *\n * @returns Aggregate definition\n */\n toDefinition(): AXPAggregateDefinition {\n return {\n name: this.name,\n title: this.title,\n entities: this.entityReferences, // Return as reference map\n validations: this.validations,\n actions: this.actions\n };\n }\n\n //#endregion\n\n //#region ---- Validation Methods ----\n\n /**\n * Validate the aggregate structure (synchronous validation only)\n * \n * @returns Array of validation errors\n */\n validate(): string[] {\n const errors: string[] = [];\n\n // Validate aggregate structure\n if (!this.name) errors.push('Aggregate name is required');\n if (!this.title) errors.push('Aggregate title is required');\n\n // Validate entity references\n for (const [entityName, entityRef] of Object.entries(this.entityReferences)) {\n if (!entityRef || typeof entityRef !== 'string') {\n errors.push(`Invalid entity reference for '${entityName}': must be a non-empty string`);\n }\n }\n\n return errors;\n }\n\n //#endregion\n}\n\n//#endregion ","import { AXPModuleDefinition } from \"../definitions/module-definition.types\";\nimport { AXPAggregateModel } from \"./aggregate.model\";\n\n//#region ---- AXPModuleModel ----\n\n/**\n * Simple runtime model for module definitions with navigation helpers.\n * \n * This model is a pure data structure that provides:\n * - Access to module properties and metadata\n * - Navigation helpers for finding aggregates\n * - Hierarchy navigation and path generation\n * \n * All loading and resolution logic has been moved to AXPDomainRegistry.\n */\nexport class AXPModuleModel {\n public readonly name: string;\n public readonly title: string;\n public readonly aggregates: AXPAggregateModel[] = [];\n\n constructor(definition: AXPModuleDefinition) {\n this.name = definition.name;\n this.title = definition.title;\n\n // Initialize aggregates with parent reference (simplified constructor)\n this.aggregates = (definition.aggregates || []).map(aggDef =>\n new AXPAggregateModel(aggDef, this)\n );\n }\n\n //#endregion\n\n //#region ---- Navigation Helpers ----\n\n /**\n * Find aggregate by name\n * \n * @param name Aggregate name\n * @returns Aggregate model or undefined if not found\n */\n findAggregate(name: string): AXPAggregateModel | undefined {\n return this.aggregates.find(agg => agg.name === name);\n }\n\n /**\n * Get all aggregates\n * \n * @returns Array of all aggregate models\n */\n getAllAggregates(): AXPAggregateModel[] {\n return [...this.aggregates];\n }\n\n /**\n * Check if aggregate exists in this module\n * \n * @param name Aggregate name\n * @returns True if aggregate exists\n */\n hasAggregate(name: string): boolean {\n return this.aggregates.some(agg => agg.name === name);\n }\n\n /**\n * Get all aggregate names\n * \n * @returns Array of aggregate names\n */\n getAggregateNames(): string[] {\n return this.aggregates.map(agg => agg.name);\n }\n\n /**\n * Find entity reference across all aggregates\n * \n * @param entityName Entity name to search for\n * @returns Object with aggregate and entity reference, or undefined if not found\n */\n findEntityReference(entityName: string): { aggregate: AXPAggregateModel; entityReference: string } | undefined {\n for (const aggregate of this.aggregates) {\n const entityReference = aggregate.getEntityReference(entityName);\n if (entityReference) {\n return { aggregate, entityReference };\n }\n }\n return undefined;\n }\n\n /**\n * Get entity path for a specific entity in a specific aggregate\n * \n * @param aggregateName Aggregate name\n * @param entityName Entity name\n * @returns Full entity path\n */\n getEntityPath(aggregateName: string, entityName: string): string {\n return `${this.name}.${aggregateName}.${entityName}`;\n }\n\n /**\n * Get aggregate path\n * \n * @param aggregateName Aggregate name\n * @returns Full aggregate path\n */\n getAggregatePath(aggregateName: string): string {\n return `${this.name}.${aggregateName}`;\n }\n\n //#endregion\n\n //#region ---- Query Methods ----\n\n /**\n * Get all entity references across all aggregates\n * \n * @returns Map of entity name to full path\n */\n getAllEntityReferences(): Record<string, string> {\n const allReferences: Record<string, string> = {};\n\n for (const aggregate of this.aggregates) {\n const aggregateReferences = aggregate.entityReferences;\n for (const [entityName, entityRef] of Object.entries(aggregateReferences)) {\n // Use full path as key to avoid conflicts\n const fullKey = `${aggregate.name}.${entityName}`;\n allReferences[fullKey] = entityRef;\n }\n }\n\n return allReferences;\n }\n\n /**\n * Relations are stored in a separate collection. Use relation queries for join when needed.\n * @deprecated Relations are no longer nested in aggregates.\n */\n getAllRelations(): Array<{ aggregate: AXPAggregateModel; relation: any }> {\n return [];\n }\n\n //#endregion\n\n //#region ---- Validation Methods ----\n\n /**\n * Validate the module structure (synchronous validation only)\n * \n * @returns Array of validation errors\n */\n validate(): string[] {\n const errors: string[] = [];\n\n // Validate module structure\n if (!this.name) errors.push('Module name is required');\n if (!this.title) errors.push('Module title is required');\n\n // Check for duplicate aggregate names\n const aggregateNames = this.aggregates.map(agg => agg.name);\n const duplicateNames = aggregateNames.filter((name, index) => aggregateNames.indexOf(name) !== index);\n if (duplicateNames.length > 0) {\n errors.push(`Duplicate aggregate names: ${duplicateNames.join(', ')}`);\n }\n\n // Validate aggregates\n for (const aggregate of this.aggregates) {\n const aggErrors = aggregate.validate();\n if (aggErrors.length > 0) {\n errors.push(...aggErrors.map((err: string) => `${aggregate.name}: ${err}`));\n }\n }\n\n return errors;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Get module statistics\n * \n * @returns Statistics object\n */\n getStatistics(): {\n aggregateCount: number;\n entityCount: number;\n actionCount: number;\n validationCount: number;\n } {\n const aggregateStats = this.aggregates.map(agg => agg.getStatistics());\n\n return {\n aggregateCount: this.aggregates.length,\n entityCount: aggregateStats.reduce((sum, stat) => sum + stat.entityCount, 0),\n actionCount: aggregateStats.reduce((sum, stat) => sum + stat.actionCount, 0),\n validationCount: aggregateStats.reduce((sum, stat) => sum + stat.validationCount, 0)\n };\n }\n\n /**\n * Convert back to interface definition\n * \n * @returns Module definition\n */\n toDefinition(): AXPModuleDefinition {\n return {\n name: this.name,\n title: this.title,\n aggregates: this.aggregates.map(agg => agg.toDefinition())\n };\n }\n\n //#endregion\n}\n\n//#endregion ","import { AXPDataType, AXPMetaData, AXPOptionsData, AXPValidationRules } from \"@acorex/platform/core\";\nimport { AXPPropertyDefinition, AXPPropertyFeatures } from \"../definitions/property-definition.types\";\nimport { AXPInterfaceDefinitionValue } from \"../definitions/interface-definition.types\";\n\n//#region ---- AXPPropertyModel ----\n\n/**\n * Runtime model for a {@link AXPPropertyDefinition} with helper methods.\n */\nexport class AXPPropertyModel {\n public readonly name: string;\n public readonly title: string;\n public readonly interface: AXPInterfaceDefinitionValue;\n public readonly validations: AXPValidationRules;\n public readonly features: AXPPropertyFeatures;\n public readonly metadata?: AXPMetaData;\n public readonly description?: string;\n public readonly icon?: string;\n public readonly defaultValue?: unknown;\n public readonly disabled?: boolean;\n public readonly dataType: AXPDataType;\n\n constructor(definition: AXPPropertyDefinition) {\n this.name = definition.name;\n this.title = definition.title;\n this.interface = definition.interface;\n this.disabled = definition.disabled;\n this.dataType = definition.dataType ?? 'string';\n this.validations = definition.validations ?? [];\n this.features = definition.features ?? {};\n this.metadata = definition.metadata;\n this.description = definition.description;\n this.icon = definition.icon;\n this.defaultValue = definition.defaultValue;\n }\n\n //#endregion\n\n /**\n * Get widget options\n */\n public getWidgetOptions(): AXPOptionsData | undefined {\n return this.interface.options;\n }\n\n /**\n * Check if the property is disabled\n */\n public isDisabled(): boolean {\n return this.disabled ?? false;\n }\n\n //#endregion\n\n //#region ---- Feature Methods ----\n\n /**\n * Check if searchable\n */\n public isSearchable(): boolean {\n return this.features.searchable?.enabled ?? false;\n }\n\n /**\n * Check if full text searchable\n */\n public isFullTextSearchable(): boolean {\n return this.features.searchable?.fullText ?? false;\n }\n\n /**\n * Check if filterable\n */\n public isFilterable(): boolean {\n return this.features.filterable?.enabled ?? false;\n }\n\n /**\n * Check if inline filterable\n */\n public isInlineFilterable(): boolean {\n return this.features.filterable?.inline ?? false;\n }\n\n /**\n * Check if sortable\n */\n public isSortable(): boolean {\n return this.features.sortable?.enabled ?? false;\n }\n\n /**\n * Check if auditable\n */\n public isAuditable(): boolean {\n return this.features.auditable?.enabled ?? false;\n }\n\n //#endregion\n\n\n\n //#region ---- Validation Methods ----\n\n /**\n * Validate the property definition structure\n */\n public async validate(): Promise<string[]> {\n const errors: string[] = [];\n\n // Validate interface\n if (!this.interface.name) {\n errors.push('Widget type is required');\n }\n\n return errors;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Get property capabilities\n */\n public getCapabilities(): {\n searchable: boolean;\n fullTextSearchable: boolean;\n filterable: boolean;\n inlineFilterable: boolean;\n sortable: boolean;\n auditable: boolean;\n disabled: boolean;\n } {\n return {\n searchable: this.isSearchable(),\n fullTextSearchable: this.isFullTextSearchable(),\n filterable: this.isFilterable(),\n inlineFilterable: this.isInlineFilterable(),\n sortable: this.isSortable(),\n auditable: this.isAuditable(),\n disabled: this.isDisabled()\n };\n }\n\n /**\n * Get property summary\n */\n public getSummary(): {\n widget: string;\n hasOptions: boolean;\n hasMetadata: boolean;\n hasValidations: boolean;\n capabilityCount: number;\n } {\n const capabilities = this.getCapabilities();\n const capabilityCount = Object.values(capabilities).filter(Boolean).length;\n\n return {\n widget: this.interface.name,\n hasOptions: !!this.interface.options,\n hasMetadata: !!this.metadata,\n hasValidations: !!this.validations && this.validations.length > 0,\n capabilityCount\n };\n }\n\n /**\n * Convert back to interface definition\n */\n public toDefinition(): AXPPropertyDefinition {\n return {\n name: this.name,\n title: this.title,\n description: this.description,\n icon: this.icon,\n dataType: this.dataType,\n defaultValue: this.defaultValue,\n disabled: this.disabled,\n interface: this.interface,\n validations: this.validations,\n features: this.features,\n metadata: this.metadata\n };\n }\n\n //#endregion\n} ","import { AXPValidationRules } from \"@acorex/platform/core\";\nimport {\n AXPEntityPropertyFeatures,\n AXPEntityPropertyDefinition,\n} from \"../definitions/entity-definition.types\";\nimport { AXPDomainAction } from \"../definitions/base.types\";\nimport { AXPPropertyDefinition } from \"../definitions/property-definition.types\";\nimport { AXPPropertyModel } from \"./property.model\";\nimport { AXPPropertyService } from \"../registries/property\";\n\n//#region ---- Property definition helpers ----\n\n/**\n * Strips entity-only fields so the payload matches {@link AXPPropertyDefinition}.\n */\nexport function toPropertyDefinition(def: AXPEntityPropertyDefinition): AXPPropertyDefinition {\n const { actions, fieldFeatures, ...propertyDefinition } = def;\n return propertyDefinition;\n}\n\n//#endregion\n\n//#region ---- AXPEntityFieldModel ----\n\n/**\n * Runtime model for entity field definitions with parent references and helper methods\n */\nexport class AXPEntityFieldModel {\n public readonly name: string;\n public readonly title: string;\n public readonly description?: string;\n public readonly validations?: AXPValidationRules;\n public readonly actions?: AXPDomainAction[];\n public readonly fieldFeatures?: AXPEntityPropertyFeatures;\n public readonly defaultValue?: unknown;\n /** Resolved property definition model (interface, validations, features). */\n public readonly property: AXPPropertyModel;\n /** Same as entity field name; aligns with registered property definition name when applicable. */\n public readonly propertyName: string;\n public readonly parent: any; // Will be AXPEntityModel, using any to avoid circular dependency\n public readonly propertyService: AXPPropertyService;\n\n private readonly entityPropertyDefinition: AXPEntityPropertyDefinition;\n\n constructor(definition: AXPEntityPropertyDefinition, parent: any, propertyService: AXPPropertyService) {\n this.entityPropertyDefinition = definition;\n this.name = definition.name;\n this.title = definition.title;\n this.description = definition.description;\n this.validations = definition.validations;\n this.actions = definition.actions;\n this.fieldFeatures = definition.fieldFeatures;\n this.defaultValue = definition.defaultValue;\n this.parent = parent;\n this.propertyService = propertyService;\n\n this.property = new AXPPropertyModel(toPropertyDefinition(definition));\n this.propertyName = definition.name;\n }\n\n //#region ---- Feature Check Methods ----\n\n /**\n * Check if field is nullable\n */\n public isNullable(): boolean {\n return this.fieldFeatures?.nullable ?? false;\n }\n\n /**\n * Check if field is readonly\n */\n public isReadonly(): boolean {\n return this.fieldFeatures?.readOnly ?? false;\n }\n\n /**\n * Check if field is required (has required validation)\n */\n public isRequired(): boolean {\n return this.validations?.some((validation) => validation.rule === \"required\") ?? false;\n }\n\n /**\n * Check if field is searchable\n */\n public isSearchable(): boolean {\n return this.property.features?.searchable?.enabled ?? false;\n }\n\n /**\n * Check if field supports full text search\n */\n public isFullTextSearchable(): boolean {\n return this.property.features?.searchable?.fullText ?? false;\n }\n\n /**\n * Check if field is filterable\n */\n public isFilterable(): boolean {\n return this.property.features?.filterable?.enabled ?? false;\n }\n\n /**\n * Check if field has inline filtering\n */\n public hasInlineFiltering(): boolean {\n return this.property.features?.filterable?.inline ?? false;\n }\n\n /**\n * Check if field is sortable\n */\n public isSortable(): boolean {\n return this.property.features?.sortable?.enabled ?? false;\n }\n\n /**\n * Check if field is auditable\n */\n public isAuditable(): boolean {\n return this.property.features?.auditable?.enabled ?? false;\n }\n\n //#endregion\n\n //#region ---- Property info ----\n\n /**\n * Registered property name (same as entity field name in the embedded model).\n */\n public getPropertyName(): string {\n return this.propertyName;\n }\n\n /**\n * Registration metadata when this field's definition name is registered; otherwise embedded summary.\n */\n public getPropertyInfo(): unknown {\n if (this.propertyService.isRegistered(this.property.name)) {\n return this.propertyService.getRegisteredProperty(this.property.name);\n }\n return this.property.getSummary();\n }\n\n /**\n * Rebuild the property model from embedded definition (e.g. after definition updates).\n */\n public refreshProperty(): void {\n (this as { property: AXPPropertyModel }).property = new AXPPropertyModel(\n toPropertyDefinition(this.entityPropertyDefinition)\n );\n }\n\n //#endregion\n\n //#region ---- Navigation Methods ----\n\n /**\n * Get parent entity\n */\n public getEntity(): any {\n return this.parent;\n }\n\n /**\n * Get parent aggregate\n */\n public getAggregate(): any {\n return this.parent?.parent;\n }\n\n /**\n * Get parent module\n */\n public getModule(): any {\n return this.parent?.parent?.parent;\n }\n\n /**\n * Get full path (module.aggregate.entity.field)\n */\n public getPath(): string {\n return `${this.parent.parent.parent.name}.${this.parent.parent.name}.${this.parent.name}.${this.name}`;\n }\n\n //#endregion\n\n //#region ---- Validation Methods ----\n\n /**\n * Validate the field structure\n */\n public async validate(): Promise<string[]> {\n const errors: string[] = [];\n\n if (!this.name) errors.push(\"Field name is required\");\n if (!this.title) errors.push(\"Field title is required\");\n\n if (!this.property.interface?.name) {\n errors.push(\"Widget type (interface.name) is required\");\n }\n\n if (this.property) {\n const propertyErrors = await this.property.validate();\n if (propertyErrors.length > 0) {\n errors.push(...propertyErrors.map((err) => `Property: ${err}`));\n }\n }\n\n return errors;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Get field statistics\n */\n public getStatistics(): {\n hasValidations: boolean;\n hasActions: boolean;\n hasFieldFeatures: boolean;\n hasDefaultValue: boolean;\n validationCount: number;\n actionCount: number;\n } {\n return {\n hasValidations: !!this.validations && this.validations.length > 0,\n hasActions: !!this.actions && this.actions.length > 0,\n hasFieldFeatures: !!this.fieldFeatures,\n hasDefaultValue: this.defaultValue !== undefined,\n validationCount: this.validations?.length ?? 0,\n actionCount: this.actions?.length ?? 0,\n };\n }\n\n /**\n * Get field capabilities\n */\n public getCapabilities(): {\n searchable: boolean;\n filterable: boolean;\n sortable: boolean;\n auditable: boolean;\n nullable: boolean;\n readonly: boolean;\n required: boolean;\n } {\n return {\n searchable: this.isSearchable(),\n filterable: this.isFilterable(),\n sortable: this.isSortable(),\n auditable: this.isAuditable(),\n nullable: this.isNullable(),\n readonly: this.isReadonly(),\n required: this.isRequired(),\n };\n }\n\n /**\n * Convert back to interface definition\n */\n public toDefinition(): AXPEntityPropertyDefinition {\n return {\n ...this.property.toDefinition(),\n actions: this.actions,\n fieldFeatures: this.fieldFeatures,\n };\n }\n}\n\n//#endregion\n"," \nimport { AXPEntityDefinition, AXPEntityType } from \"../definitions/entity-definition.types\";\nimport { AXPEntityFieldModel } from \"./entity-field.model\";\nimport { AXPPropertyService } from \"../registries/property\";\n\n//#region ---- AXPEntityModel ----\n\n/**\n * Runtime model for entity definitions with parent references and helper methods\n */\nexport class AXPEntityModel {\n public readonly name: string;\n public readonly title: string;\n public readonly fields: AXPEntityFieldModel[] = [];\n public readonly type: AXPEntityType;\n public readonly parent: any; // Will be AXPAggregateModel, using any to avoid circular dependency\n public readonly propertyService: AXPPropertyService;\n\n constructor(definition: AXPEntityDefinition, parent: any, propertyService: AXPPropertyService) {\n this.name = definition.name;\n this.title = definition.title;\n this.type = definition.type;\n this.parent = parent;\n this.propertyService = propertyService;\n\n // Initialize fields with parent reference and property service\n this.fields = definition.fields.map(fieldDef =>\n new AXPEntityFieldModel(fieldDef, this, propertyService)\n );\n }\n\n //#endregion\n\n //#region ---- Query Methods ----\n\n /**\n * Find field by name\n */\n public findField(name: string): AXPEntityFieldModel | undefined {\n return this.fields.find(field => field.name === name);\n }\n\n /**\n * Get all fields\n */\n public getAllFields(): AXPEntityFieldModel[] {\n return [...this.fields];\n }\n\n /**\n * Get required fields\n */\n public getRequiredFields(): AXPEntityFieldModel[] {\n return this.fields.filter(field => field.isRequired());\n }\n\n /**\n * Get readonly fields\n */\n public getReadonlyFields(): AXPEntityFieldModel[] {\n return this.fields.filter(field => field.isReadonly());\n }\n\n /**\n * Get searchable fields\n */\n public getSearchableFields(): AXPEntityFieldModel[] {\n return this.fields.filter(field => field.isSearchable());\n }\n\n /**\n * Get filterable fields\n */\n public getFilterableFields(): AXPEntityFieldModel[] {\n return this.fields.filter(field => field.isFilterable());\n }\n\n /**\n * Get sortable fields\n */\n public getSortableFields(): AXPEntityFieldModel[] {\n return this.fields.filter(field => field.isSortable());\n }\n\n //#endregion\n\n //#region ---- Type Checking Methods ----\n\n /**\n * Check if this entity is an aggregate root\n */\n public isAggregateRoot(): boolean {\n return this.type === AXPEntityType.AggregateRoot;\n }\n\n /**\n * Check if this entity is a regular entity\n */\n public isEntity(): boolean {\n return this.type === AXPEntityType.Entity;\n }\n\n /**\n * Check if this entity is a value object\n */\n public isValueObject(): boolean {\n return this.type === AXPEntityType.ValueObject;\n }\n\n //#endregion\n\n //#region ---- Navigation Methods ----\n\n /**\n * Get parent aggregate\n */\n public getAggregate(): any {\n return this.parent;\n }\n\n /**\n * Get parent module\n */\n public getModule(): any {\n return this.parent?.parent;\n }\n\n /**\n * Get full path (module.aggregate.entity)\n */\n public getPath(): string {\n return `${this.parent.parent.name}.${this.parent.name}.${this.name}`;\n }\n\n //#endregion\n\n //#region ---- Validation Methods ----\n\n /**\n * Validate the entity structure\n */\n public async validate(): Promise<string[]> {\n const errors: string[] = [];\n\n // Validate entity structure\n if (!this.name) errors.push('Entity name is required');\n if (!this.title) errors.push('Entity title is required');\n\n // Validate fields\n for (const field of this.fields) {\n const fieldErrors = await field.validate();\n if (fieldErrors.length > 0) {\n errors.push(...fieldErrors.map(err => `${field.name}: ${err}`));\n }\n }\n\n return errors;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Get entity statistics\n */\n public getStatistics(): {\n fieldCount: number;\n requiredFieldCount: number;\n readonlyFieldCount: number;\n searchableFieldCount: number;\n filterableFieldCount: number;\n sortableFieldCount: number;\n } {\n return {\n fieldCount: this.fields.length,\n requiredFieldCount: this.getRequiredFields().length,\n readonlyFieldCount: this.getReadonlyFields().length,\n searchableFieldCount: this.getSearchableFields().length,\n filterableFieldCount: this.getFilterableFields().length,\n sortableFieldCount: this.getSortableFields().length\n };\n }\n\n /**\n * Convert back to interface definition\n */\n public toDefinition(): AXPEntityDefinition {\n return {\n name: this.name,\n title: this.title,\n fields: this.fields.map(field => field.toDefinition()),\n type: this.type\n };\n }\n\n //#endregion\n} ","import {\n AXPRelationDefinition,\n AXPRelationshipCardinality,\n AXPRelationshipKind,\n} from \"../definitions/relation-definition.types\";\n\n//#region ---- AXPRelationModel ----\n\n/**\n * Runtime model for standalone relation definitions.\n * Relations live in their own collection; join when needed.\n */\nexport class AXPRelationModel {\n public readonly type: AXPRelationshipCardinality;\n public readonly kind: AXPRelationshipKind;\n public readonly target: {\n aggregate: string;\n entity: string;\n key: string;\n };\n public readonly source: {\n aggregate: string;\n entity: string;\n key: string;\n };\n public readonly isRequired: boolean;\n public readonly parent: any; // Will be AXPAggregateModel, using any to avoid circular dependency\n\n constructor(definition: AXPRelationDefinition, parent: any) {\n this.type = definition.type;\n this.kind = definition.kind;\n this.target = { ...definition.target };\n this.source = { ...definition.source };\n this.isRequired = definition.isRequired;\n this.parent = parent;\n }\n\n //#endregion\n\n //#region ---- Cardinality Methods ----\n\n /**\n * Check if relation is one-to-one\n */\n public isOneToOne(): boolean {\n return this.type === AXPRelationshipCardinality.OneToOne;\n }\n\n /**\n * Check if relation is one-to-many\n */\n public isOneToMany(): boolean {\n return this.type === AXPRelationshipCardinality.OneToMany;\n }\n\n /**\n * Check if relation is many-to-many\n */\n public isManyToMany(): boolean {\n return this.type === AXPRelationshipCardinality.ManyToMany;\n }\n\n //#endregion\n\n //#region ---- Kind Methods ----\n\n /**\n * Check if relation is association\n */\n public isAssociation(): boolean {\n return this.kind === AXPRelationshipKind.Association;\n }\n\n /**\n * Check if relation is composition\n */\n public isComposition(): boolean {\n return this.kind === AXPRelationshipKind.Composition;\n }\n\n /**\n * Check if relation is aggregation\n */\n public isAggregation(): boolean {\n return this.kind === AXPRelationshipKind.Aggregation;\n }\n\n //#endregion\n\n //#region ---- Navigation Methods ----\n\n /**\n * Get parent aggregate\n */\n public getAggregate(): any {\n return this.parent;\n }\n\n /**\n * Get parent module\n */\n public getModule(): any {\n return this.parent?.parent;\n }\n\n /**\n * Get full path (module.aggregate.relation)\n */\n public getPath(): string {\n return `${this.parent.parent.name}.${this.parent.name}.${this.source.entity}->${this.target.entity}`;\n }\n\n //#endregion\n\n //#region ---- Query Methods ----\n\n /**\n * Get relation description\n */\n public getDescription(): string {\n const cardinalityDesc = this.getCardinalityDescription();\n const kindDesc = this.getKindDescription();\n const requiredDesc = this.isRequired ? 'required' : 'optional';\n\n return `${cardinalityDesc} ${kindDesc} (${requiredDesc})`;\n }\n\n /**\n * Get cardinality description\n */\n public getCardinalityDescription(): string {\n switch (this.type) {\n case AXPRelationshipCardinality.OneToOne:\n return 'one-to-one';\n case AXPRelationshipCardinality.OneToMany:\n return 'one-to-many';\n case AXPRelationshipCardinality.ManyToMany:\n return 'many-to-many';\n default:\n return 'unknown';\n }\n }\n\n /**\n * Get kind description\n */\n public getKindDescription(): string {\n switch (this.kind) {\n case AXPRelationshipKind.Association:\n return 'association';\n case AXPRelationshipKind.Composition:\n return 'composition';\n case AXPRelationshipKind.Aggregation:\n return 'aggregation';\n default:\n return 'unknown';\n }\n }\n\n /**\n * Get relation summary\n */\n public getSummary(): string {\n return `${this.source.entity}.${this.source.key} -> ${this.target.aggregate}.${this.target.entity}.${this.target.key}`;\n }\n\n //#endregion\n\n //#region ---- Validation Methods ----\n\n /**\n * Validate the relation structure\n */\n public validate(): string[] {\n const errors: string[] = [];\n\n // Validate source\n if (!this.source.entity) errors.push('Source entity is required');\n if (!this.source.key) errors.push('Source key is required');\n\n // Validate target\n if (!this.target.aggregate) errors.push('Target aggregate is required');\n if (!this.target.entity) errors.push('Target entity is required');\n if (!this.target.key) errors.push('Target key is required');\n\n return errors;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Get relation characteristics\n */\n public getCharacteristics(): {\n type: string;\n kind: string;\n required: boolean;\n isOwning: boolean;\n isNavigable: boolean;\n } {\n return {\n type: this.getCardinalityDescription(),\n kind: this.getKindDescription(),\n required: this.isRequired,\n isOwning: this.isComposition(),\n isNavigable: !this.isComposition() || this.isOneToOne()\n };\n }\n\n /**\n * Check if relation involves entity\n */\n public involvesEntity(entityName: string): boolean {\n return this.source.entity === entityName || this.target.entity === entityName;\n }\n\n /**\n * Check if relation targets aggregate\n */\n public targetsAggregate(aggregateName: string): boolean {\n return this.target.aggregate === aggregateName;\n }\n\n /**\n * Get the other entity in the relation\n */\n public getOtherEntity(entityName: string): string | null {\n if (this.source.entity === entityName) {\n return this.target.entity;\n } else if (this.target.entity === entityName) {\n return this.source.entity;\n }\n return null;\n }\n\n /**\n * Convert back to interface definition (AXPRelationDefinition with full source/target)\n */\n public toDefinition(): AXPRelationDefinition {\n return {\n type: this.type,\n kind: this.kind,\n target: { ...this.target },\n source: { ...this.source },\n isRequired: this.isRequired\n };\n }\n\n //#endregion\n} ","import { AXPModuleModel } from \"../models/module.model\";\nimport { AXPEntityModel } from \"../models/entity.model\";\nimport { AXPEntityFieldModel } from \"../models/entity-field.model\";\nimport { AXPEntityType } from \"../definitions/entity-definition.types\";\n\n//#region ---- AXPModuleHelper ----\n\n/**\n * Helper utility class for working with module models\n * \n * @deprecated This helper class is deprecated and will be updated to work with the new domain registry system.\n * Use AXPDomainService for domain operations instead.\n * \n * TODO: Update this helper to work with the new simplified models and domain registry system.\n */\nexport class AXPModuleHelper {\n\n //#endregion\n\n //#region ---- Deprecated Methods - To Be Updated ----\n\n /**\n * @deprecated Use AXPDomainService.findEntitiesByName() instead\n */\n public static findEntitiesByName(module: AXPModuleModel, name: string): AXPEntityModel[] {\n console.warn('AXPModuleHelper.findEntitiesByName is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with entity field queries instead\n */\n public static findFieldsByName(module: AXPModuleModel, fieldName: string): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findFieldsByName is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with entity type queries instead\n */\n public static findEntitiesByType(module: AXPModuleModel, type: AXPEntityType): AXPEntityModel[] {\n console.warn('AXPModuleHelper.findEntitiesByType is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with field validation queries instead\n */\n public static findFieldsWithValidation(module: AXPModuleModel, validationRule: string): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findFieldsWithValidation is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with field queries instead\n */\n public static findFieldsByDataType(module: AXPModuleModel, dataType: string): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findFieldsByDataType is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with required field queries instead\n */\n public static findRequiredFields(module: AXPModuleModel): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findRequiredFields is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with nullable field queries instead\n */\n public static findNullableFields(module: AXPModuleModel): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findNullableFields is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with default value queries instead\n */\n public static findFieldsWithDefaultValues(module: AXPModuleModel): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findFieldsWithDefaultValues is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with registered property name queries instead\n */\n public static findFieldsByRegisteredPropertyName(module: AXPModuleModel, propertyName: string): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.findFieldsByRegisteredPropertyName is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use module.validate() method instead\n */\n public static validateModule(module: AXPModuleModel): string[] {\n return module.validate();\n }\n\n /**\n * @deprecated Use aggregate relation queries instead\n */\n public static findRelationsByType(module: AXPModuleModel, relationType: string): any[] {\n console.warn('AXPModuleHelper.findRelationsByType is deprecated. Use relation queries instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with entity dependency queries instead\n */\n public static findEntityDependencies(module: AXPModuleModel, entityName: string): any[] {\n console.warn('AXPModuleHelper.findEntityDependencies is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use module.getStatistics() method instead\n */\n public static getModuleStatistics(module: AXPModuleModel): any {\n return module.getStatistics();\n }\n\n /**\n * @deprecated Use AXPDomainService with entity queries instead\n */\n public static getAllEntities(module: AXPModuleModel): AXPEntityModel[] {\n console.warn('AXPModuleHelper.getAllEntities is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n /**\n * @deprecated Use AXPDomainService with field queries instead\n */\n public static getAllFields(module: AXPModuleModel): AXPEntityFieldModel[] {\n console.warn('AXPModuleHelper.getAllFields is deprecated. Use AXPDomainService instead.');\n return [];\n }\n\n //#endregion\n} ","import { AXPMetaData, AXPValidationRule } from '@acorex/platform/core';\nimport { AXPPropertyDefinition } from '../../definitions/property-definition.types';\n\n//#region ---- Schema Middleware Context ----\n\n/**\n * Context class for schema middleware operations providing a fluent API for schema manipulation.\n * \n * This class serves as the interface between middleware functions and schema definitions,\n * offering methods to modify various aspects of a schema including:\n * - Widget configuration and options\n * - Validation rules\n * - Feature flags (searchable, filterable, sortable)\n * - Metadata and custom properties\n * - UI behavior (visibility, readonly state)\n * \n * All methods return `this` to enable fluent method chaining.\n * \n * @example\n * ```typescript\n * // Example middleware using the context\n * (context) => {\n * context\n * .addValidation({ rule: 'required' })\n * .searchable(true)\n * .withDefaultValue('default text')\n * .readonly(false);\n * }\n * ```\n */\nexport class AXPPropertyMiddlewareContext {\n private _definition: AXPPropertyDefinition;\n\n constructor(definition: AXPPropertyDefinition) {\n // Deep clone to avoid mutating the original definition\n this._definition = JSON.parse(JSON.stringify(definition));\n }\n\n //#region ---- Schema Access Properties ----\n\n /**\n * Get the current schema definition (readonly access)\n */\n get definition(): Readonly<AXPPropertyDefinition> {\n return this._definition;\n }\n\n /**\n * Get the schema name for conditional logic\n */\n get name(): string {\n return this._definition.name;\n }\n\n //#endregion\n\n //#region ---- Default Value Management ----\n\n /**\n * Set a default value for the widget\n * @param defaultValue The default value to set\n */\n withDefaultValue(defaultValue: unknown): this {\n if (!this._definition.interface.options) {\n this._definition.interface.options = {};\n }\n (this._definition.interface.options as Record<string, unknown>)['defaultValue'] = defaultValue;\n return this;\n }\n\n /**\n * Remove the default value from the widget\n */\n removeDefaultValue(): this {\n if (this._definition.interface.options) {\n delete (this._definition.interface.options as Record<string, unknown>)['defaultValue'];\n }\n return this;\n }\n\n //#endregion\n\n //#region ---- Validation Management ----\n\n /**\n * Add multiple validation rules to the schema\n * @param rules Array of validation rules to add\n */\n withValidation(rules: any[]): this {\n if (!this._definition.validations) {\n this._definition.validations = [];\n }\n this._definition.validations.push(...rules);\n return this;\n }\n\n /**\n * Add a single validation rule to the schema\n * @param rule The validation rule to add\n */\n addValidation(rule: any): this {\n if (!this._definition.validations) {\n this._definition.validations = [];\n }\n this._definition.validations.push(rule);\n return this;\n }\n\n /**\n * Add a single validation rule (alias for addValidation for backward compatibility)\n * @param rule The validation rule to add\n */\n withValidationRule(rule: any): this {\n return this.addValidation(rule);\n }\n\n /**\n * Remove all validation rules from the schema\n */\n clearValidations(): this {\n this._definition.validations = [];\n return this;\n }\n\n /**\n * Remove a specific validation rule by its rule name\n * @param ruleName The name of the rule to remove (e.g., 'required', 'email')\n */\n removeValidation(ruleName: string): this {\n if (this._definition.validations) {\n this._definition.validations = this._definition.validations.filter(\n (v: { rule?: string }) => v.rule !== ruleName\n );\n }\n return this;\n }\n\n //#endregion\n\n //#region ---- Widget Configuration ----\n\n /**\n * Set or merge widget options\n * @param options Object containing widget-specific options to merge\n */\n withWidgetOptions(options: Record<string, unknown>): this {\n const current = this._definition.interface.options ?? {};\n this._definition.interface.options = {\n ...current,\n ...options\n } as AXPMetaData;\n return this;\n }\n\n /**\n * Remove a specific widget option by key\n * @param optionKey The key of the option to remove\n */\n removeWidgetOption(optionKey: string): this {\n if (this._definition.interface.options) {\n delete (this._definition.interface.options as Record<string, unknown>)[optionKey];\n }\n return this;\n }\n\n /**\n * Change the widget type for this schema\n * @param widgetType The new widget type identifier\n */\n withWidgetType(widgetType: string): this {\n this._definition.interface.name = widgetType;\n return this;\n }\n\n //#endregion\n\n //#region ---- Feature Configuration ----\n\n /**\n * Configure general features using an object\n * @param features Object containing feature configurations to merge\n */\n withFeatures(features: Partial<any>): this {\n this._definition.features = {\n ...this._definition.features,\n ...features\n };\n return this;\n }\n\n /**\n * Configure searchable feature with fine-grained control\n * @param enabled Whether searching is enabled\n * @param fullText Whether full-text search is enabled\n */\n searchable(enabled: boolean = true, fullText: boolean = false): this {\n if (!this._definition.features) {\n this._definition.features = {};\n }\n this._definition.features.searchable = { enabled, fullText };\n return this;\n }\n\n /**\n * Configure filterable feature with inline filter support\n * @param enabled Whether filtering is enabled\n * @param inline Whether inline filtering is supported\n */\n filterable(enabled: boolean = true, inline: boolean = false): this {\n if (!this._definition.features) {\n this._definition.features = {};\n }\n this._definition.features.filterable = { enabled, inline };\n return this;\n }\n\n /**\n * Configure sortable feature\n * @param enabled Whether sorting is enabled\n */\n sortable(enabled: boolean = true): this {\n if (!this._definition.features) {\n this._definition.features = {};\n }\n this._definition.features.sortable = { enabled };\n return this;\n }\n\n //#endregion\n\n //#region ---- Metadata Management ----\n\n /**\n * Add or merge metadata to the schema\n * @param metadata Object containing metadata to merge\n */\n withMetadata(metadata: any): this {\n this._definition.metadata = {\n ...this._definition.metadata,\n ...metadata\n };\n return this;\n }\n\n /**\n * Remove a specific metadata property by key\n * @param key The metadata key to remove\n */\n removeMetadata(key: string): this {\n if (this._definition.metadata) {\n delete this._definition.metadata[key];\n }\n return this;\n }\n\n //#endregion\n\n //#region ---- UI State Management ----\n\n /**\n * Set the disabled state of the widget\n * @param isDisabled Whether the widget should be disabled\n */\n disabled(isDisabled: boolean = true): this {\n this._definition.disabled = isDisabled;\n return this;\n }\n\n /**\n * Set the visibility of the widget\n * @param visible Whether the widget should be visible\n */\n withVisibility(visible: boolean): this {\n if (!this._definition.interface.options) {\n this._definition.interface.options = {};\n }\n (this._definition.interface.options as Record<string, unknown>)['visible'] = visible;\n return this;\n }\n\n /**\n * Set the readonly state of the widget\n * @param isReadonly Whether the widget should be readonly\n */\n readonly(isReadonly: boolean = true): this {\n if (!this._definition.interface.options) {\n this._definition.interface.options = {};\n }\n (this._definition.interface.options as Record<string, unknown>)['readonly'] = isReadonly;\n return this;\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Builder-Based Middleware Types ----\n\n\n\n\n\n","import { Injectable, Type } from '@angular/core';\nimport { AXPPropertyDefinition } from '../../definitions/property-definition.types';\nimport { AXPPropertyModel } from '../../models/property.model';\nimport { AXPPropertyLoader } from './property-loader.interface';\nimport { AXPPropertyMiddleware } from './property.middleware';\nimport { AXPPropertyMiddlewareContext } from './property-middleware.functions';\n\n//#region ---- Types and Interfaces ----\n\n/**\n * Options for registering a schema with additional metadata and middleware\n */\nexport interface AXPPropertyRegistrationOptions {\n /** Optional description for documentation purposes */\n description?: string;\n /** Tags for categorizing and finding schemas */\n tags?: string[];\n /** Version information for schema evolution */\n version?: string;\n /** Schema-specific middleware that applies only to this schema */\n middleware?: AXPPropertyMiddleware[];\n}\n\n/**\n * Internal representation of a registered schema with metadata\n */\nexport interface AXPRegisteredProperty {\n /** Unique identifier for the schema */\n name: string;\n /** The actual schema definition */\n definition: AXPPropertyDefinition;\n /** Registration options and metadata */\n options: AXPPropertyRegistrationOptions;\n /** Timestamp when the schema was registered */\n registeredAt: Date;\n}\n\n//#endregion\n\n//#region ---- Schema Registry Service ----\n\n/**\n * Central registry for managing schema definitions, middleware, and dynamic loading.\n * \n * Provides:\n * - Schema registration and retrieval\n * - Middleware processing pipeline\n * - On-demand schema loading\n * - Caching and performance optimization\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPropertyRegistry {\n private readonly _registrations = new Map<string, AXPRegisteredProperty>();\n private readonly _globalMiddleware: AXPPropertyMiddleware[] = [];\n private readonly _modelCache = new Map<string, AXPPropertyModel>();\n private _loaders: AXPPropertyLoader[] | null = null;\n\n constructor() { }\n\n //#region ---- Registration Methods ----\n\n /**\n * Register a schema definition with optional metadata and middleware\n */\n register(\n definition: AXPPropertyDefinition,\n options: AXPPropertyRegistrationOptions = {}\n ): void {\n if (!definition.name || definition.name.trim() === '') {\n throw new Error('Property name is required and cannot be empty');\n }\n\n const registered: AXPRegisteredProperty = {\n name: definition.name,\n definition,\n options,\n registeredAt: new Date()\n };\n\n this._registrations.set(definition.name, registered);\n this.invalidateCache(definition.name);\n }\n\n /**\n * Register multiple schemas at once for batch operations\n */\n registerBatch(entries: { name: string; definition: AXPPropertyDefinition; options?: AXPPropertyRegistrationOptions }[]): void {\n for (const entry of entries) {\n this.register(entry.definition, entry.options || {});\n }\n }\n\n /**\n * Remove a schema from the registry\n */\n unregister(name: string): boolean {\n const removed = this._registrations.delete(name);\n if (removed) {\n this.invalidateCache(name);\n }\n return removed;\n }\n\n /**\n * Check if a schema is currently registered\n */\n isRegistered(name: string): boolean {\n return this._registrations.has(name);\n }\n\n //#endregion\n\n //#region ---- Resolution Methods ----\n\n /**\n * Resolve a schema by name with full middleware processing and caching.\n * Supports on-demand loading if schema is not registered.\n */\n async resolve(name: string): Promise<AXPPropertyModel> {\n // Check cache first for performance\n if (this._modelCache.has(name)) {\n return this._modelCache.get(name)!;\n }\n\n // Try to get from registered schemas first\n let registered = this._registrations.get(name);\n\n // If not found, attempt on-demand loading\n if (!registered) {\n const definition = await this.loadFromLoaders(name);\n if (definition) {\n registered = {\n name,\n definition,\n options: {},\n registeredAt: new Date()\n };\n this._registrations.set(name, registered);\n } else {\n throw new Error(`Property '${name}' is not registered and no loader can provide it`);\n }\n }\n\n // Clone and process through middleware pipeline\n const definition = this.cloneDefinition(registered.definition);\n const context = new AXPPropertyMiddlewareContext(definition);\n\n // Apply global middleware first\n for (const middleware of this._globalMiddleware) {\n await middleware(context);\n }\n\n // Apply registration-specific middleware\n if (registered.options.middleware) {\n for (const middleware of registered.options.middleware) {\n await middleware(context);\n }\n }\n\n // Create final model and cache it\n const model = new AXPPropertyModel(context.definition);\n this._modelCache.set(name, model);\n\n return model;\n }\n\n /**\n * Synchronous resolution without middleware processing.\n * Use only when middleware is not needed for performance.\n */\n resolveSync(name: string): AXPPropertyModel {\n const registered = this._registrations.get(name);\n if (!registered) {\n throw new Error(`Property '${name}' is not registered`);\n }\n\n return new AXPPropertyModel(this.cloneDefinition(registered.definition));\n }\n\n //#endregion\n\n //#region ---- Middleware Management ----\n\n /**\n * Add global middleware that applies to all schema resolutions\n */\n addGlobalMiddleware(middleware: AXPPropertyMiddleware): void {\n if (typeof middleware !== 'function') {\n throw new Error('Middleware must be a function');\n }\n this._globalMiddleware.push(middleware);\n }\n\n /**\n * Remove specific global middleware\n */\n removeGlobalMiddleware(middleware: AXPPropertyMiddleware): boolean {\n const index = this._globalMiddleware.indexOf(middleware);\n if (index > -1) {\n this._globalMiddleware.splice(index, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all global middleware\n */\n clearGlobalMiddleware(): void {\n this._globalMiddleware.length = 0;\n }\n\n //#endregion\n\n //#region ---- Loader Management ----\n\n /**\n * Add a schema loader for on-demand loading\n */\n addLoader(loader: Type<AXPPropertyLoader>): void {\n if (this._loaders === null) {\n this._loaders = [];\n }\n this._loaders.push(new loader());\n }\n\n //#endregion\n\n //#region ---- Query Methods ----\n\n /**\n * Get all registered schema names\n */\n getRegisteredNames(): string[] {\n return Array.from(this._registrations.keys());\n }\n\n /**\n * Get detailed registration information for a schema\n */\n getRegisteredProperty(name: string): AXPRegisteredProperty | undefined {\n return this._registrations.get(name);\n }\n\n /**\n * Get all registered properties with their metadata\n */\n getAllRegisteredProperties(): AXPRegisteredProperty[] {\n return Array.from(this._registrations.values());\n }\n\n /**\n * Find registered properties by tag for categorization\n */\n findByTag(tag: string): AXPRegisteredProperty[] {\n return Array.from(this._registrations.values()).filter((registration) =>\n registration.options.tags?.includes(tag)\n );\n }\n\n /**\n * Find registered properties by widget type for widget-specific operations\n */\n findByWidget(widgetType: string): AXPRegisteredProperty[] {\n return Array.from(this._registrations.values()).filter((registration) =>\n registration.definition.interface.name === widgetType\n );\n }\n\n /**\n * Get comprehensive registry statistics\n */\n getStatistics(): {\n propertyCount: number;\n globalMiddlewareCount: number;\n propertiesByWidget: { [widget: string]: number };\n propertiesByTag: { [tag: string]: number };\n } {\n const propertiesByWidget: { [widget: string]: number } = {};\n const propertiesByTag: { [tag: string]: number } = {};\n\n for (const registration of this._registrations.values()) {\n const widget = registration.definition.interface.name;\n propertiesByWidget[widget] = (propertiesByWidget[widget] || 0) + 1;\n\n if (registration.options.tags) {\n for (const tag of registration.options.tags) {\n propertiesByTag[tag] = (propertiesByTag[tag] || 0) + 1;\n }\n }\n }\n\n return {\n propertyCount: this._registrations.size,\n globalMiddlewareCount: this._globalMiddleware.length,\n propertiesByWidget,\n propertiesByTag\n };\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /**\n * Clear all cached models (useful when schemas need to be reloaded)\n */\n clearCache(): void {\n this._modelCache.clear();\n }\n\n /**\n * Invalidate cache for a specific schema\n */\n invalidateCache(name: string): void {\n this._modelCache.delete(name);\n }\n\n /**\n * Clear all registered schemas, middleware, and cached models\n */\n clear(): void {\n this._registrations.clear();\n this._globalMiddleware.length = 0;\n this._modelCache.clear();\n this._loaders = null;\n }\n\n //#endregion\n\n //#region ---- Private Helper Methods ----\n\n /**\n * Attempt to load schema from registered loaders\n */\n private async loadFromLoaders(name: string): Promise<AXPPropertyDefinition | null> {\n const loaders = this.getLoaders();\n\n for (const loader of loaders) {\n if (loader.canLoad(name)) {\n try {\n const definition = await loader.load(name);\n if (definition) {\n console.log(`Property '${name}' loaded from ${loader.constructor.name}`);\n return definition;\n }\n } catch (error) {\n console.warn(`Loader ${loader.constructor.name} failed to load '${name}':`, error);\n }\n }\n }\n\n return null;\n }\n\n /**\n * Get loaders sorted by priority (lazy initialization)\n */\n private getLoaders(): AXPPropertyLoader[] {\n if (this._loaders === null) {\n try {\n this._loaders = [];\n // Sort by priority (higher priority first)\n this._loaders.sort((a, b) => {\n const priorityA = a.priority ?? 0;\n const priorityB = b.priority ?? 0;\n return priorityB - priorityA;\n });\n } catch (error) {\n console.warn('Failed to initialize property loaders:', error);\n this._loaders = [];\n }\n }\n return this._loaders;\n }\n\n /**\n * Create a deep clone of a schema definition to prevent mutations\n */\n private cloneDefinition(definition: AXPPropertyDefinition): AXPPropertyDefinition {\n return JSON.parse(JSON.stringify(definition));\n }\n\n //#endregion\n}\n\n//#endregion ","import { Injectable, inject } from '@angular/core';\nimport { AXPPropertyDefinition } from '../../definitions/property-definition.types';\nimport { AXPPropertyModel } from '../../models/property.model';\nimport { AXPPropertyRegistry, AXPPropertyRegistrationOptions, AXPRegisteredProperty } from './property.registry';\nimport { AXPPropertyMiddleware } from './property.middleware';\n\n//#region ---- Property Service ----\n\n/**\n * High-level facade for registered property definitions ({@link AXPPropertyDefinition}).\n *\n * Wraps {@link AXPPropertyRegistry} with convenience methods for resolution and discovery.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPropertyService {\n private readonly registry = inject(AXPPropertyRegistry);\n\n //#region ---- Registration ----\n\n /**\n * Register a property definition with optional configuration\n */\n register(definition: AXPPropertyDefinition, options?: AXPPropertyRegistrationOptions): void {\n this.registry.register(definition, options);\n }\n\n /**\n * Register multiple property definitions at once\n */\n registerBatch(entries: { name: string; definition: AXPPropertyDefinition; options?: AXPPropertyRegistrationOptions }[]): void {\n this.registry.registerBatch(entries);\n }\n\n /**\n * Remove a property definition from the registry\n */\n unregister(name: string): boolean {\n return this.registry.unregister(name);\n }\n\n /**\n * Check if a property definition is registered by name\n */\n isRegistered(name: string): boolean {\n return this.registry.isRegistered(name);\n }\n\n /**\n * Get all registered property names\n */\n getRegisteredNames(): string[] {\n return this.registry.getRegisteredNames();\n }\n\n /**\n * Clear all registrations and reset the registry\n */\n clear(): void {\n this.registry.clear();\n }\n\n //#endregion\n\n //#region ---- Resolution ----\n\n /**\n * Resolve a registered property by name with full middleware processing\n */\n async resolve(name: string): Promise<AXPPropertyModel> {\n return this.registry.resolve(name);\n }\n\n /**\n * Resolve synchronously without middleware (for performance)\n */\n resolveSync(name: string): AXPPropertyModel {\n return this.registry.resolveSync(name);\n }\n\n /**\n * Resolve multiple registered properties for form building and batch operations\n */\n async resolveMultiple(\n fieldConfigs: { name: string; propertyName: string }[],\n ): Promise<{ name: string; property: AXPPropertyModel }[]> {\n const resolvedFields = await Promise.all(\n fieldConfigs.map(async (config) => ({\n name: config.name,\n property: await this.resolve(config.propertyName),\n })),\n );\n return resolvedFields;\n }\n\n //#endregion\n\n //#region ---- Middleware Management ----\n\n /**\n * Add global middleware that applies to all property resolutions\n */\n addGlobalMiddleware(middleware: AXPPropertyMiddleware): void {\n this.registry.addGlobalMiddleware(middleware);\n }\n\n /**\n * Remove specific global middleware\n */\n removeGlobalMiddleware(middleware: AXPPropertyMiddleware): boolean {\n return this.registry.removeGlobalMiddleware(middleware);\n }\n\n /**\n * Clear all global middleware\n */\n clearGlobalMiddleware(): void {\n this.registry.clearGlobalMiddleware();\n }\n\n //#endregion\n\n //#region ---- Query and Discovery ----\n\n /**\n * Get detailed information about a registered property definition\n */\n getRegisteredProperty(name: string): AXPRegisteredProperty | undefined {\n return this.registry.getRegisteredProperty(name);\n }\n\n /**\n * Get all registered property definitions with their metadata\n */\n getAllRegisteredProperties(): AXPRegisteredProperty[] {\n return this.registry.getAllRegisteredProperties();\n }\n\n /**\n * Find registered properties by tag for categorization and grouping\n */\n findByTag(tag: string): AXPRegisteredProperty[] {\n return this.registry.findByTag(tag);\n }\n\n /**\n * Find registered properties by widget type for widget-specific operations\n */\n findByWidget(widgetType: string): AXPRegisteredProperty[] {\n return this.registry.findByWidget(widgetType);\n }\n\n /**\n * Get comprehensive registry statistics and analytics\n */\n getStatistics() {\n const stats = this.registry.getStatistics();\n\n // Enhance with top-used analytics\n const mostUsedWidgets = Object.entries(stats.propertiesByWidget)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 5)\n .map(([widget]) => widget);\n\n const mostUsedTags = Object.entries(stats.propertiesByTag)\n .sort(([, a], [, b]) => b - a)\n .slice(0, 5)\n .map(([tag]) => tag);\n\n return {\n ...stats,\n mostUsedWidgets,\n mostUsedTags\n };\n }\n\n //#endregion\n\n //#region ---- Validation and Analysis ----\n\n /**\n * Validate that all referenced property names exist in the registry\n */\n validatePropertyReferences(propertyNames: string[]): { valid: boolean; missingPropertyNames: string[] } {\n const missingPropertyNames: string[] = [];\n\n for (const propertyName of propertyNames) {\n if (!this.isRegistered(propertyName)) {\n missingPropertyNames.push(propertyName);\n }\n }\n\n return {\n valid: missingPropertyNames.length === 0,\n missingPropertyNames,\n };\n }\n\n //#endregion\n}\n\n//#endregion ","import { AXPPropertyDefinition } from '../../definitions/property-definition.types';\n\n//#region ---- Property loader interface ----\n\n/**\n * Loads {@link AXPPropertyDefinition} instances on demand when not registered in {@link AXPPropertyRegistry}.\n */\nexport interface AXPPropertyLoader {\n /**\n * Optional priority for loader ordering. Higher numbers = higher priority.\n * If not specified, uses registration order.\n */\n readonly priority?: number;\n\n /**\n * Determines if this loader can handle the given registered property name.\n */\n canLoad(propertyName: string): boolean;\n\n /**\n * Loads the property definition for the given name, or null if not found.\n */\n load(propertyName: string): Promise<AXPPropertyDefinition | null>;\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders, Type } from '@angular/core';\nimport { AXPPropertyLoader } from './property-loader.interface';\nimport { AXP_PROPERTY_LOADER_SETUP } from './property-extension.token';\nimport { AXPPropertyRegistry } from './property.registry';\n\n//#region ---- Schema Loader Configuration ----\n\n/**\n * Configuration for a schema loader with optional priority setting\n */\nexport interface AXPPropertyLoaderConfig {\n /** The loader class to instantiate */\n loader: Type<AXPPropertyLoader>;\n /** Optional priority for loader ordering (higher = higher priority) */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider Functions ----\n\n/**\n * Provide schema loaders for on-demand schema loading.\n * \n * Schema loaders enable the registry to load schemas that are not registered\n * at build time. This is useful for:\n * - Loading schemas from external APIs\n * - Dynamic schema generation\n * - Lazy loading of large schema sets\n * - Development-time schema hot-reloading\n * \n * @param loaders Array of loader classes or loader configurations\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * // Simple loader registration\n * providePropertyLoaders([\n * HttpSchemaLoader,\n * FileSystemSchemaLoader\n * ])\n * \n * // With priority configuration\n * providePropertyLoaders([\n * { loader: HttpSchemaLoader, priority: 10 },\n * { loader: FileSystemSchemaLoader, priority: 5 }\n * ])\n * ```\n */\nexport function providePropertyLoaders(\n loaders: Array<Type<AXPPropertyLoader> | AXPPropertyLoaderConfig>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_PROPERTY_LOADER_SETUP,\n useFactory: async () => {\n const registry = inject(AXPPropertyRegistry);\n\n // Register each loader with the registry\n for (const loader of loaders) {\n const loaderClass = typeof loader === 'function' ? loader : loader.loader;\n registry.addLoader(loaderClass);\n }\n\n return true;\n },\n multi: true\n }\n ]);\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPPropertyDefinition } from '../../definitions/property-definition.types';\nimport { AXPPropertyRegistry, AXPPropertyRegistrationOptions } from './property.registry';\nimport { AXP_PROPERTY_SETUP } from './property-extension.token';\n\n//#region ---- Types ----\n\n/**\n * Schema entry for registration containing definition and optional metadata\n */\nexport interface AXPPropertyEntry {\n /** The schema definition to register */\n definition: AXPPropertyDefinition;\n /** Optional registration options and metadata */\n options?: AXPPropertyRegistrationOptions;\n}\n\n//#endregion\n\n//#region ---- Provider Functions ----\n\n/**\n * Provide schema setups for registration during application bootstrap.\n * \n * This is the primary way to register schemas that are known at build time.\n * Schemas registered this way are immediately available in the registry.\n * \n * @param schemas Array of schema entries to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * providePropertySetups([\n * {\n * definition: emailSchema,\n * options: {\n * tags: ['user', 'contact'],\n * description: 'Email field schema'\n * }\n * },\n * {\n * definition: phoneSchema,\n * options: { tags: ['contact'] }\n * }\n * ])\n * ```\n */\nexport function providePropertySetups(entries: AXPPropertyEntry[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_PROPERTY_SETUP,\n useFactory: () => {\n const registry = inject(AXPPropertyRegistry);\n\n for (const entry of entries) {\n registry.register(entry.definition, entry.options);\n }\n\n return true;\n },\n multi: true\n }\n ]);\n}\n\n/**\n * Convenience function to provide a single schema setup.\n * \n * Useful when you need to register just one schema or want to keep\n * schema registrations separate for organizational purposes.\n * \n * @param definition The schema definition to register\n * @param options Optional registration options and metadata\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideProperty(emailSchema, {\n * tags: ['user', 'contact'],\n * description: 'User email field'\n * })\n * ```\n */\nexport function provideProperty(\n definition: AXPPropertyDefinition,\n options?: AXPPropertyRegistrationOptions\n): EnvironmentProviders {\n return providePropertySetups([{ definition, options }]);\n}\n\n/**\n * Provide schema setups from a factory function for dynamic registration.\n * \n * Useful when schemas need to be generated at runtime, loaded from external\n * sources, or depend on configuration that's not available at build time.\n * \n * @param schemaFactory Factory function that returns schema entries\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * providePropertiesFromFactory(async () => {\n * const config = await loadConfiguration();\n * return config.schemas.map(schema => ({\n * definition: schema,\n * options: { tags: ['dynamic'] }\n * }));\n * })\n * ```\n */\nexport function providePropertiesFromFactory(\n factory: () => AXPPropertyEntry[] | Promise<AXPPropertyEntry[]>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_PROPERTY_SETUP,\n useFactory: async () => {\n const registry = inject(AXPPropertyRegistry);\n const entries = await factory();\n\n for (const entry of entries) {\n registry.register(entry.definition, entry.options);\n }\n\n return true;\n },\n multi: true\n }\n ]);\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPPropertyRegistry } from './property.registry';\nimport { AXPPropertyMiddleware } from './property.middleware';\nimport { AXP_PROPERTY_EXTENSION, AXP_PROPERTY_MIDDLEWARE_SETUP } from './property-extension.token';\n\n//#region ---- Types ----\n\n/**\n * Middleware entry for registration - can be either a simple function or targeted middleware\n */\nexport type AXPPropertyMiddlewareEntry =\n | AXPPropertyMiddleware\n | { target: string | RegExp; middleware: AXPPropertyMiddleware };\n\n//#endregion\n\n//#region ---- Provider Functions ----\n\n/**\n * Provide schema middleware for registration in the application.\n * \n * Supports both global middleware (applies to all schemas) and targeted middleware\n * (applies only to schemas matching specific patterns).\n * \n * @param middleware Array of middleware entries to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * // Global middleware\n * providePropertyMiddleware([\n * (context) => {\n * if (context.definition.dataType === 'string') {\n * context.searchable(true);\n * }\n * }\n * ])\n * \n * // Targeted middleware\n * providePropertyMiddleware([\n * {\n * target: /^user_/,\n * middleware: (context) => context.withMetadata({ category: 'user' })\n * }\n * ])\n * ```\n */\nexport function providePropertyMiddleware(\n middleware: AXPPropertyMiddlewareEntry[]\n): EnvironmentProviders {\n\n const global: AXPPropertyMiddleware[] = [];\n const targeted: { target: string | RegExp; middleware: AXPPropertyMiddleware }[] = [];\n\n // Separate global and targeted middleware for different processing\n for (const entry of middleware) {\n if (typeof entry === 'function') {\n global.push(entry);\n } else {\n targeted.push(entry);\n }\n }\n\n return makeEnvironmentProviders([\n // Setup global middleware that applies to all schemas\n ...(global.length > 0 ? [{\n provide: AXP_PROPERTY_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPPropertyRegistry);\n for (const mw of global) {\n registry.addGlobalMiddleware(mw);\n }\n return true;\n },\n multi: true\n }] : []),\n\n // Register targeted middleware entries for future extension support\n ...targeted.map(entry => ({\n provide: AXP_PROPERTY_EXTENSION,\n useValue: entry,\n multi: true\n }))\n ]);\n}\n\n//#endregion ","//#region ---- Property registry core ----\n\nexport * from './property.registry';\nexport * from './property.service';\n\n//#endregion\n\n//#region ---- Property middleware ----\n\nexport * from './property.middleware';\nexport * from './property-middleware.functions';\n\n//#endregion\n\n//#region ---- Property loaders ----\n\nexport * from './property-loader.interface';\nexport * from './provide-property-loaders';\n\n//#endregion\n\n//#region ---- Providers ----\n\nexport * from './provide-property-setups';\nexport * from './provide-property-middleware';\n\n//#endregion\n\n//#region ---- DI tokens ----\n\nexport * from './property-extension.token';\n\n//#endregion\n","import { AXPDomainDefinition } from './domain-loader.interface';\n\n//#region ---- Domain Middleware Context ----\n\n/**\n * Context class for domain middleware operations providing a fluent API for domain definition manipulation.\n * \n * This class serves as the interface between middleware functions and domain definitions,\n * offering methods to modify various aspects of a domain definition including:\n * - Metadata and custom properties\n * - Validation rules\n * - Feature flags and configuration\n * - Transformations and augmentations\n * \n * All methods return `this` to enable fluent method chaining.\n */\nexport class AXPDomainMiddlewareContext {\n private _definition: AXPDomainDefinition;\n private _type: 'module' | 'aggregate' | 'entity';\n\n constructor(definition: AXPDomainDefinition, type: 'module' | 'aggregate' | 'entity') {\n // Deep clone to avoid mutating the original definition\n this._definition = JSON.parse(JSON.stringify(definition));\n this._type = type;\n }\n\n /**\n * Get the current definition (read-only access)\n */\n get definition(): AXPDomainDefinition {\n return this._definition;\n }\n\n /**\n * Get the type of domain object being processed\n */\n get type(): 'module' | 'aggregate' | 'entity' {\n return this._type;\n }\n\n /**\n * Set metadata for the domain definition\n */\n setMetadata(key: string, value: any): this {\n const def = this._definition as any;\n if (!def.metadata) {\n def.metadata = {};\n }\n def.metadata[key] = value;\n return this;\n }\n\n /**\n * Get metadata value\n */\n getMetadata(key: string): any {\n const def = this._definition as any;\n return def.metadata?.[key];\n }\n\n /**\n * Add validation rule to the definition (for entities and aggregates)\n */\n addValidation(rule: any): this {\n if ('validations' in this._definition) {\n this._definition.validations = this._definition.validations || [];\n this._definition.validations.push(rule);\n }\n return this;\n }\n\n /**\n * Transform fields (for entities)\n */\n transformFields(transformer: (field: any) => any): this {\n if ('fields' in this._definition && this._definition.fields) {\n this._definition.fields = this._definition.fields.map(transformer);\n }\n return this;\n }\n\n /**\n * Add field to entity definition\n */\n addField(field: any): this {\n if ('fields' in this._definition) {\n this._definition.fields = this._definition.fields || [];\n this._definition.fields.push(field);\n }\n return this;\n }\n\n /**\n * Set title with transformation\n */\n setTitle(title: string): this {\n this._definition.title = title;\n return this;\n }\n\n /**\n * Apply conditional logic\n */\n when(condition: boolean, callback: (context: this) => void): this {\n if (condition) {\n callback(this);\n }\n return this;\n }\n\n /**\n * Replace the entire definition\n */\n replaceDefinition(newDefinition: AXPDomainDefinition): this {\n this._definition = JSON.parse(JSON.stringify(newDefinition));\n return this;\n }\n}\n\n//#endregion\n\n//#region ---- Domain Middleware Interface ----\n\n/**\n * Middleware function that can transform domain definitions\n * @param context - Domain middleware context providing definition info and configuration methods\n */\nexport type AXPDomainMiddleware = (\n context: AXPDomainMiddlewareContext\n) => void | Promise<void>;\n\n//#endregion ","import { Injectable, inject } from '@angular/core';\nimport { AXPDomainLoader, AXPDomainDefinition, AXPDomainPathInfo } from './domain-loader.interface';\nimport { AXPDomainMiddleware, AXPDomainMiddlewareContext } from './domain-middleware.interface';\nimport { AXPModuleModel } from '../../models/module.model';\nimport { AXPAggregateModel } from '../../models/aggregate.model';\nimport { AXPEntityModel } from '../../models/entity.model';\nimport { AXPPropertyService } from '../property';\n\n//#region ---- Domain Registry Service ----\n\n/**\n * Central registry for managing domain definitions, middleware, and dynamic loading.\n * \n * Provides:\n * - Path-based domain resolution (module.aggregate.entity)\n * - Definition-level caching with fresh model creation\n * - Type-specific middleware processing\n * - On-demand domain loading with first-wins strategy\n * - Model creation and dependency injection\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDomainRegistry {\n // Cache definitions (before middleware), not models\n private readonly _definitionCache = new Map<string, AXPDomainDefinition>();\n\n // Type-specific middleware collections\n private readonly _moduleMiddleware: AXPDomainMiddleware[] = [];\n private readonly _aggregateMiddleware: AXPDomainMiddleware[] = [];\n private readonly _entityMiddleware: AXPDomainMiddleware[] = [];\n\n // Registered loaders for on-demand loading\n private _loaders: AXPDomainLoader[] = [];\n\n // Injected dependencies\n private readonly propertyService = inject(AXPPropertyService);\n\n //#region ---- Main Resolution Method ----\n\n /**\n * Resolve a domain object by path with full middleware processing.\n * Supports definition-level caching with fresh model creation.\n * \n * @param path Domain path (e.g., \"user-management.user-aggregate.user\")\n * @returns Promise that resolves to the domain model\n */\n async resolve<T>(path: string): Promise<T> {\n const pathInfo = this.parsePath(path);\n\n // Check definition cache first\n let definition = this._definitionCache.get(path);\n\n if (!definition) {\n // Load from first available loader\n definition = await this.loadFromLoaders(path, pathInfo.type);\n if (!definition) {\n throw new Error(`Cannot resolve domain path: ${path}`);\n }\n // Cache the raw definition\n this._definitionCache.set(path, definition);\n }\n\n // Apply type-specific middleware (creates new processed definition)\n const processedDefinition = await this.applyTypeMiddleware(definition, pathInfo.type, path);\n\n // Create and return fresh model instance (not cached)\n return this.createModel(processedDefinition, pathInfo) as T;\n }\n\n //#endregion\n\n //#region ---- Path Parsing ----\n\n /**\n * Parse domain path string into structured information\n * \n * @param path Domain path to parse\n * @returns Parsed path information\n */\n private parsePath(path: string): AXPDomainPathInfo {\n const parts = path.split('.');\n\n if (parts.length === 1) {\n return {\n module: parts[0],\n type: 'module',\n fullPath: path\n };\n } else if (parts.length === 2) {\n return {\n module: parts[0],\n aggregate: parts[1],\n type: 'aggregate',\n fullPath: path\n };\n } else if (parts.length === 3) {\n return {\n module: parts[0],\n aggregate: parts[1],\n entity: parts[2],\n type: 'entity',\n fullPath: path\n };\n }\n\n throw new Error(`Invalid domain path format: ${path}. Expected: module, module.aggregate, or module.aggregate.entity`);\n }\n\n //#endregion\n\n //#region ---- Loader Management ----\n\n /**\n * Register a domain loader for on-demand loading\n * \n * @param loader The loader instance to register\n */\n addLoader(loader: AXPDomainLoader): void {\n this._loaders.push(loader);\n // Sort by priority (highest first) after adding\n this._loaders.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n }\n\n /**\n * Load definition from registered loaders using first-wins strategy\n * \n * @param path Domain path to load\n * @param type Type of domain object\n * @returns Promise that resolves to definition or undefined\n */\n private async loadFromLoaders(path: string, type: 'module' | 'aggregate' | 'entity'): Promise<AXPDomainDefinition | undefined> {\n for (const loader of this._loaders) {\n if (loader.canLoad(path, type)) {\n try {\n const definition = await loader.load(path, type);\n if (definition) {\n console.log(`✓ Loaded ${path} from ${loader.constructor.name}`);\n return definition; // Return first successful result\n }\n } catch (error) {\n console.warn(`⚠ Loader ${loader.constructor.name} failed for ${path}:`, error);\n // Continue to next loader instead of throwing\n }\n }\n }\n\n return undefined; // No loader could provide the definition\n }\n\n //#endregion\n\n //#region ---- Middleware Management ----\n\n /**\n * Add middleware for module processing\n */\n addModuleMiddleware(middleware: AXPDomainMiddleware): void {\n this._moduleMiddleware.push(middleware);\n }\n\n /**\n * Add middleware for aggregate processing\n */\n addAggregateMiddleware(middleware: AXPDomainMiddleware): void {\n this._aggregateMiddleware.push(middleware);\n }\n\n /**\n * Add middleware for entity processing\n */\n addEntityMiddleware(middleware: AXPDomainMiddleware): void {\n this._entityMiddleware.push(middleware);\n }\n\n /**\n * Apply type-specific middleware to definition\n * \n * @param definition Raw definition from cache or loader\n * @param type Type of domain object\n * @param path Original path for context\n * @returns Processed definition\n */\n private async applyTypeMiddleware(\n definition: AXPDomainDefinition,\n type: 'module' | 'aggregate' | 'entity',\n path: string\n ): Promise<AXPDomainDefinition> {\n const middleware = this.getMiddlewareForType(type);\n\n if (middleware.length === 0) {\n return definition; // No middleware to apply\n }\n\n const context = new AXPDomainMiddlewareContext(definition, type);\n\n // Apply all middleware for this type\n for (const mw of middleware) {\n await mw(context);\n }\n\n return context.definition;\n }\n\n /**\n * Get middleware collection for specific type\n * \n * @param type Domain object type\n * @returns Array of middleware functions\n */\n private getMiddlewareForType(type: 'module' | 'aggregate' | 'entity'): AXPDomainMiddleware[] {\n switch (type) {\n case 'module': return this._moduleMiddleware;\n case 'aggregate': return this._aggregateMiddleware;\n case 'entity': return this._entityMiddleware;\n default: return [];\n }\n }\n\n //#endregion\n\n //#region ---- Model Creation ----\n\n /**\n * Create domain model from processed definition\n * \n * @param definition Processed definition (after middleware)\n * @param pathInfo Parsed path information\n * @returns Created domain model\n */\n private createModel(definition: AXPDomainDefinition, pathInfo: AXPDomainPathInfo): any {\n switch (pathInfo.type) {\n case 'module':\n return new AXPModuleModel(definition as any);\n\n case 'aggregate':\n // For aggregate, we need to resolve parent module first\n // This will be simplified when we refactor the models\n const moduleDefinition = {\n name: pathInfo.module,\n title: pathInfo.module,\n aggregates: [definition]\n };\n const parentModule = new AXPModuleModel(moduleDefinition as any);\n return new AXPAggregateModel(definition as any, parentModule);\n\n case 'entity':\n // For entity, we need both module and aggregate parents\n // This will be simplified when we refactor the models\n const entityAggregateDefinition = {\n name: pathInfo.aggregate,\n title: pathInfo.aggregate || '',\n entities: [definition],\n validations: [],\n actions: []\n };\n const entityModuleDefinition = {\n name: pathInfo.module,\n title: pathInfo.module,\n aggregates: [entityAggregateDefinition]\n };\n const entityModule = new AXPModuleModel(entityModuleDefinition as any);\n const entityAggregate = new AXPAggregateModel(entityAggregateDefinition as any, entityModule);\n return new AXPEntityModel(definition as any, entityAggregate, this.propertyService);\n\n default:\n throw new Error(`Unknown domain type: ${pathInfo.type}`);\n }\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /**\n * Clear definition cache for a specific path\n * \n * @param path Path to clear from cache\n */\n invalidateCache(path: string): void {\n this._definitionCache.delete(path);\n }\n\n /**\n * Clear all cached definitions\n */\n clearCache(): void {\n this._definitionCache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): { size: number; paths: string[] } {\n return {\n size: this._definitionCache.size,\n paths: Array.from(this._definitionCache.keys())\n };\n }\n\n //#endregion\n}\n\n//#endregion ","import { Injectable, inject } from '@angular/core';\nimport { AXPDomainRegistry } from './domain.registry';\nimport { AXPModuleModel } from '../../models/module.model';\nimport { AXPAggregateModel } from '../../models/aggregate.model';\nimport { AXPEntityModel } from '../../models/entity.model';\n\n//#region ---- Domain Service ----\n\n/**\n * High-level facade service for domain operations.\n * \n * Provides simplified interfaces to the domain registry with additional\n * business logic and convenience methods for common operations.\n * \n * This service acts as the main entry point for domain model resolution\n * and provides a clean API for consuming applications.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDomainService {\n\n // Injected dependencies\n private readonly registry = inject(AXPDomainRegistry);\n\n //#region ---- Module Operations ----\n\n /**\n * Get module by name\n * \n * @param name Module name\n * @returns Promise that resolves to module model\n */\n async getModule(name: string): Promise<AXPModuleModel> {\n return this.registry.resolve<AXPModuleModel>(name);\n }\n\n /**\n * Check if module exists\n * \n * @param name Module name\n * @returns Promise that resolves to boolean\n */\n async moduleExists(name: string): Promise<boolean> {\n try {\n await this.getModule(name);\n return true;\n } catch {\n return false;\n }\n }\n\n //#endregion\n\n //#region ---- Aggregate Operations ----\n\n /**\n * Get aggregate by module and aggregate names\n * \n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to aggregate model\n */\n async getAggregate(moduleName: string, aggregateName: string): Promise<AXPAggregateModel> {\n const path = `${moduleName}.${aggregateName}`;\n return this.registry.resolve<AXPAggregateModel>(path);\n }\n\n /**\n * Get aggregate by path\n * \n * @param path Aggregate path (module.aggregate)\n * @returns Promise that resolves to aggregate model\n */\n async getAggregateByPath(path: string): Promise<AXPAggregateModel> {\n return this.registry.resolve<AXPAggregateModel>(path);\n }\n\n /**\n * Check if aggregate exists\n * \n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to boolean\n */\n async aggregateExists(moduleName: string, aggregateName: string): Promise<boolean> {\n try {\n await this.getAggregate(moduleName, aggregateName);\n return true;\n } catch {\n return false;\n }\n }\n\n //#endregion\n\n //#region ---- Entity Operations ----\n\n /**\n * Get entity by full path\n * \n * @param path Full entity path (module.aggregate.entity)\n * @returns Promise that resolves to entity model\n */\n async getEntity(path: string): Promise<AXPEntityModel> {\n return this.registry.resolve<AXPEntityModel>(path);\n }\n\n /**\n * Get entity by component parts\n * \n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @param entityName Entity name\n * @returns Promise that resolves to entity model\n */\n async getEntityByParts(moduleName: string, aggregateName: string, entityName: string): Promise<AXPEntityModel> {\n const path = `${moduleName}.${aggregateName}.${entityName}`;\n return this.getEntity(path);\n }\n\n /**\n * Check if entity exists\n * \n * @param path Full entity path\n * @returns Promise that resolves to boolean\n */\n async entityExists(path: string): Promise<boolean> {\n try {\n await this.getEntity(path);\n return true;\n } catch {\n return false;\n }\n }\n\n //#endregion\n\n //#region ---- Batch Operations ----\n\n /**\n * Get multiple modules in parallel\n * \n * @param moduleNames Array of module names\n * @returns Promise that resolves to array of module models\n */\n async getModules(moduleNames: string[]): Promise<AXPModuleModel[]> {\n return Promise.all(moduleNames.map(name => this.getModule(name)));\n }\n\n /**\n * Get multiple aggregates in parallel\n * \n * @param aggregatePaths Array of aggregate paths\n * @returns Promise that resolves to array of aggregate models\n */\n async getAggregates(aggregatePaths: string[]): Promise<AXPAggregateModel[]> {\n return Promise.all(aggregatePaths.map(path => this.getAggregateByPath(path)));\n }\n\n /**\n * Get multiple entities in parallel\n * \n * @param entityPaths Array of entity paths\n * @returns Promise that resolves to array of entity models\n */\n async getEntities(entityPaths: string[]): Promise<AXPEntityModel[]> {\n return Promise.all(entityPaths.map(path => this.getEntity(path)));\n }\n\n //#endregion\n\n //#region ---- Search and Discovery ----\n\n /**\n * Find entities by name across all loaded modules\n * \n * @param entityName Entity name to search for\n * @returns Promise that resolves to array of matching entity paths\n */\n async findEntitiesByName(entityName: string): Promise<string[]> {\n // This would require additional registry functionality\n // For now, return empty array as placeholder\n return [];\n }\n\n /**\n * Get all aggregates for a module\n * \n * @param moduleName Module name\n * @returns Promise that resolves to array of aggregate models\n */\n async getModuleAggregates(moduleName: string): Promise<AXPAggregateModel[]> {\n const module = await this.getModule(moduleName);\n return module.getAllAggregates();\n }\n\n /**\n * Get all entity references for an aggregate\n * \n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to entity references map\n */\n async getAggregateEntityReferences(moduleName: string, aggregateName: string): Promise<Record<string, string>> {\n const aggregate = await this.getAggregate(moduleName, aggregateName);\n return aggregate.entityReferences;\n }\n\n //#endregion\n\n //#region ---- Validation Operations ----\n\n /**\n * Validate module and all its components\n * \n * @param moduleName Module name\n * @returns Promise that resolves to validation errors array\n */\n async validateModule(moduleName: string): Promise<string[]> {\n try {\n const module = await this.getModule(moduleName);\n return module.validate();\n } catch (error) {\n return [`Failed to load module '${moduleName}': ${error instanceof Error ? error.message : 'Unknown error'}`];\n }\n }\n\n /**\n * Validate aggregate and its components\n * \n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to validation errors array\n */\n async validateAggregate(moduleName: string, aggregateName: string): Promise<string[]> {\n try {\n const aggregate = await this.getAggregate(moduleName, aggregateName);\n return aggregate.validate();\n } catch (error) {\n return [`Failed to load aggregate '${moduleName}.${aggregateName}': ${error instanceof Error ? error.message : 'Unknown error'}`];\n }\n }\n\n //#endregion\n\n //#region ---- Utility Operations ----\n\n /**\n * Get statistics for a module\n * \n * @param moduleName Module name\n * @returns Promise that resolves to module statistics\n */\n async getModuleStatistics(moduleName: string): Promise<any> {\n const module = await this.getModule(moduleName);\n return module.getStatistics();\n }\n\n /**\n * Get statistics for an aggregate\n * \n * @param moduleName Module name\n * @param aggregateName Aggregate name\n * @returns Promise that resolves to aggregate statistics\n */\n async getAggregateStatistics(moduleName: string, aggregateName: string): Promise<any> {\n const aggregate = await this.getAggregate(moduleName, aggregateName);\n return aggregate.getStatistics();\n }\n\n /**\n * Clear registry cache\n */\n clearCache(): void {\n this.registry.clearCache();\n }\n\n /**\n * Get cache statistics\n * \n * @returns Cache statistics object\n */\n getCacheStatistics(): { size: number; paths: string[] } {\n return this.registry.getCacheStats();\n }\n\n /**\n * Invalidate cache for specific path\n * \n * @param path Domain path to invalidate\n */\n invalidateCache(path: string): void {\n this.registry.invalidateCache(path);\n }\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Parse domain path into components\n * \n * @param path Domain path to parse\n * @returns Parsed path components\n */\n parsePath(path: string): { module: string; aggregate?: string; entity?: string; type: string } {\n const parts = path.split('.');\n\n if (parts.length === 1) {\n return { module: parts[0], type: 'module' };\n } else if (parts.length === 2) {\n return { module: parts[0], aggregate: parts[1], type: 'aggregate' };\n } else if (parts.length === 3) {\n return { module: parts[0], aggregate: parts[1], entity: parts[2], type: 'entity' };\n }\n\n throw new Error(`Invalid domain path format: ${path}`);\n }\n\n /**\n * Build path from components\n * \n * @param module Module name\n * @param aggregate Aggregate name (optional)\n * @param entity Entity name (optional)\n * @returns Built path string\n */\n buildPath(module: string, aggregate?: string, entity?: string): string {\n if (entity && aggregate) {\n return `${module}.${aggregate}.${entity}`;\n } else if (aggregate) {\n return `${module}.${aggregate}`;\n } else {\n return module;\n }\n }\n\n //#endregion\n}\n\n//#endregion ","import { AXPModuleDefinition } from '../../definitions/module-definition.types';\nimport { AXPAggregateDefinition } from '../../definitions/aggregate-definition.types';\nimport { AXPEntityDefinition } from '../../definitions/entity-definition.types';\n\n//#region ---- Domain Loader Interface ----\n\n/**\n * Union type for all domain definition types\n */\nexport type AXPDomainDefinition = AXPModuleDefinition | AXPAggregateDefinition | AXPEntityDefinition;\n\n/**\n * Domain path information parsed from path string\n */\nexport interface AXPDomainPathInfo {\n module: string;\n aggregate?: string;\n entity?: string;\n type: 'module' | 'aggregate' | 'entity';\n fullPath: string;\n}\n\n/**\n * Interface for domain loaders that can provide domain definitions on-demand\n */\nexport interface AXPDomainLoader {\n /**\n * Optional priority for loader ordering. Higher numbers = higher priority.\n * If not specified, uses registration order.\n */\n readonly priority?: number;\n\n /**\n * Determines if this loader can handle the given domain path\n * @param path The domain path to load (e.g., \"user-management.user-aggregate.user\")\n * @param type The type of domain object being requested\n * @returns true if this loader can load the domain definition\n */\n canLoad(path: string, type: 'module' | 'aggregate' | 'entity'): boolean;\n\n /**\n * Loads the domain definition for the given path\n * @param path The domain path to load\n * @param type The type of domain object being requested\n * @returns Promise that resolves to the domain definition or null if not found\n */\n load(path: string, type: 'module' | 'aggregate' | 'entity'): Promise<AXPDomainDefinition | null>;\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders, Type } from '@angular/core';\nimport { AXPDomainLoader } from './domain-loader.interface';\nimport { AXPDomainRegistry } from './domain.registry';\nimport { AXP_DOMAIN_LOADER_SETUP } from './domain-extension.token';\n\n//#region ---- Domain Loader Configuration ----\n\n/**\n * Configuration for a domain loader with optional priority setting\n */\nexport interface AXPDomainLoaderConfig {\n /** The loader class or instance to register */\n loader: Type<AXPDomainLoader> | AXPDomainLoader;\n /** Optional priority for loader ordering (higher = higher priority) */\n priority?: number;\n}\n\n\n\n//#endregion\n\n//#region ---- Provider Functions ----\n\n/**\n * Provide domain loaders for on-demand domain loading.\n * \n * Domain loaders enable the registry to load domain definitions that are not registered\n * at build time. This is useful for:\n * - Loading domain definitions from external APIs\n * - Dynamic domain generation\n * - Lazy loading of large domain sets\n * - Development-time domain hot-reloading\n * \n * @param loaders Array of loader classes, instances, or loader configurations\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * // Simple loader registration\n * provideDomainLoaders([\n * HttpDomainLoader,\n * FileSystemDomainLoader,\n * new MemoryDomainLoader()\n * ])\n * \n * // With priority configuration\n * provideDomainLoaders([\n * { loader: HttpDomainLoader, priority: 10 },\n * { loader: FileSystemDomainLoader, priority: 5 },\n * { loader: new MemoryDomainLoader(), priority: 15 }\n * ])\n * ```\n */\nexport function provideDomainLoaders(\n loaders: Array<Type<AXPDomainLoader> | AXPDomainLoader | AXPDomainLoaderConfig>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_DOMAIN_LOADER_SETUP,\n useFactory: async () => {\n const registry = inject(AXPDomainRegistry);\n if (!registry) {\n console.warn('Domain registry not available during loader setup');\n return false;\n }\n\n // Register each loader with the registry\n for (const loaderConfig of loaders) {\n try {\n let loaderInstance: AXPDomainLoader;\n let priority: number | undefined;\n\n if (typeof loaderConfig === 'function') {\n // Type<AXPDomainLoader>\n loaderInstance = new loaderConfig();\n priority = loaderInstance.priority;\n } else if (typeof loaderConfig === 'object' && 'canLoad' in loaderConfig) {\n // AXPDomainLoader instance\n loaderInstance = loaderConfig;\n priority = loaderInstance.priority;\n } else if (typeof loaderConfig === 'object' && 'loader' in loaderConfig) {\n // AXPDomainLoaderConfig\n if (typeof loaderConfig.loader === 'function') {\n loaderInstance = new loaderConfig.loader();\n } else {\n loaderInstance = loaderConfig.loader;\n }\n priority = loaderConfig.priority ?? loaderInstance.priority;\n } else {\n console.warn('Invalid loader configuration:', loaderConfig);\n continue;\n }\n\n // Apply custom priority if specified\n if (priority !== undefined && priority !== loaderInstance.priority) {\n (loaderInstance as any).priority = priority;\n }\n\n registry.addLoader(loaderInstance);\n console.log(`✓ Registered domain loader: ${loaderInstance.constructor.name} (priority: ${loaderInstance.priority ?? 0})`);\n\n } catch (error) {\n console.error('Failed to register domain loader:', error);\n }\n }\n\n return true;\n },\n multi: true\n }\n ]);\n}\n\n/**\n * Provide a single domain loader for convenience\n * \n * @param loader Loader class, instance, or configuration\n * @returns Environment providers for dependency injection\n */\nexport function provideDomainLoader(\n loader: Type<AXPDomainLoader> | AXPDomainLoader | AXPDomainLoaderConfig\n): EnvironmentProviders {\n return provideDomainLoaders([loader]);\n}\n\n//#endregion ","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXPDomainMiddleware } from './domain-middleware.interface';\nimport { AXPDomainRegistry } from './domain.registry';\n\n//#region ---- Injection Tokens ----\n\n/**\n * Injection tokens for type-specific middleware setup\n */\nexport const AXP_MODULE_MIDDLEWARE_SETUP = 'AXP_MODULE_MIDDLEWARE_SETUP';\nexport const AXP_AGGREGATE_MIDDLEWARE_SETUP = 'AXP_AGGREGATE_MIDDLEWARE_SETUP';\nexport const AXP_ENTITY_MIDDLEWARE_SETUP = 'AXP_ENTITY_MIDDLEWARE_SETUP';\n\n//#endregion\n\n//#region ---- Provider Functions ----\n\n/**\n * Provide middleware for module processing.\n * \n * Module middleware is applied when resolving module definitions and can:\n * - Add metadata and custom properties\n * - Validate module structure\n * - Transform module definitions\n * - Add computed properties\n * \n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideModuleMiddleware([\n * (context) => {\n * // Add common module metadata\n * context.setMetadata('loadedAt', new Date());\n * context.setMetadata('version', '1.0.0');\n * },\n * (context) => {\n * // Add namespace prefix if not present\n * if (!context.definition.name.includes('.')) {\n * context.definition.name = `app.${context.definition.name}`;\n * }\n * }\n * ])\n * ```\n */\nexport function provideModuleMiddleware(\n middleware: AXPDomainMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_MODULE_MIDDLEWARE_SETUP,\n useFactory: () => {\n // Access registry through DI when available\n const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n if (!registry) {\n console.warn('Domain registry not available during module middleware setup');\n return false;\n }\n\n // Register all module middleware\n for (const mw of middleware) {\n registry.addModuleMiddleware(mw);\n }\n\n console.log(`✓ Registered ${middleware.length} module middleware functions`);\n return true;\n },\n multi: true\n }\n ]);\n}\n\n/**\n * Provide middleware for aggregate processing.\n * \n * Aggregate middleware is applied when resolving aggregate definitions and can:\n * - Add metadata and custom properties\n * - Validate aggregate structure\n * - Transform entity references\n * - Add computed relations\n * \n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideAggregateMiddleware([\n * (context) => {\n * // Add aggregate metadata\n * context.setMetadata('type', 'business-aggregate');\n * },\n * (context) => {\n * // Validate entity references\n * const entities = context.definition.entities;\n * if (Object.keys(entities).length === 0) {\n * throw new Error('Aggregate must have at least one entity');\n * }\n * }\n * ])\n * ```\n */\nexport function provideAggregateMiddleware(\n middleware: AXPDomainMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_AGGREGATE_MIDDLEWARE_SETUP,\n useFactory: () => {\n // Access registry through DI when available\n const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n if (!registry) {\n console.warn('Domain registry not available during aggregate middleware setup');\n return false;\n }\n\n // Register all aggregate middleware\n for (const mw of middleware) {\n registry.addAggregateMiddleware(mw);\n }\n\n console.log(`✓ Registered ${middleware.length} aggregate middleware functions`);\n return true;\n },\n multi: true\n }\n ]);\n}\n\n/**\n * Provide middleware for entity processing.\n * \n * Entity middleware is applied when resolving entity definitions and can:\n * - Add auto-generated fields (id, timestamps)\n * - Apply field transformations\n * - Add validation rules\n * - Set default values\n * \n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideEntityMiddleware([\n * (context) => {\n * // Add auto-generated ID field if not present\n * if (!context.definition.fields.some(f => f.name === 'id')) {\n * context.addField({\n * name: 'id',\n * type: 'uuid',\n * required: true,\n * generated: true\n * });\n * }\n * },\n * (context) => {\n * // Add timestamp fields\n * context.addField({\n * name: 'createdAt',\n * type: 'datetime',\n * required: true,\n * generated: true\n * });\n * context.addField({\n * name: 'updatedAt',\n * type: 'datetime',\n * required: true,\n * generated: true\n * });\n * }\n * ])\n * ```\n */\nexport function provideEntityMiddleware(\n middleware: AXPDomainMiddleware[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_ENTITY_MIDDLEWARE_SETUP,\n useFactory: () => {\n // Access registry through DI when available\n const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n if (!registry) {\n console.warn('Domain registry not available during entity middleware setup');\n return false;\n }\n\n // Register all entity middleware\n for (const mw of middleware) {\n registry.addEntityMiddleware(mw);\n }\n\n console.log(`✓ Registered ${middleware.length} entity middleware functions`);\n return true;\n },\n multi: true\n }\n ]);\n}\n\n/**\n * Provide combined middleware for all domain types.\n * \n * This is a convenience function that allows registering middleware for multiple\n * domain types in a single call.\n * \n * @param config Configuration object with middleware for each type\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideDomainMiddleware({\n * modules: [\n * (context) => context.setMetadata('loadedAt', new Date())\n * ],\n * aggregates: [\n * (context) => context.setMetadata('type', 'business-aggregate')\n * ],\n * entities: [\n * (context) => {\n * if (!context.definition.fields.some(f => f.name === 'id')) {\n * context.addField({ name: 'id', type: 'uuid', required: true });\n * }\n * }\n * ]\n * })\n * ```\n */\nexport function provideDomainMiddleware(config: {\n modules?: AXPDomainMiddleware[];\n aggregates?: AXPDomainMiddleware[];\n entities?: AXPDomainMiddleware[];\n}): EnvironmentProviders {\n const allProviders: any[] = [];\n\n // Add module middleware providers\n if (config.modules && config.modules.length > 0) {\n allProviders.push({\n provide: AXP_MODULE_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n if (!registry) {\n console.warn('Domain registry not available during module middleware setup');\n return false;\n }\n for (const mw of config.modules!) {\n registry.addModuleMiddleware(mw);\n }\n return true;\n },\n multi: true\n });\n }\n\n // Add aggregate middleware providers\n if (config.aggregates && config.aggregates.length > 0) {\n allProviders.push({\n provide: AXP_AGGREGATE_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n if (!registry) {\n console.warn('Domain registry not available during aggregate middleware setup');\n return false;\n }\n for (const mw of config.aggregates!) {\n registry.addAggregateMiddleware(mw);\n }\n return true;\n },\n multi: true\n });\n }\n\n // Add entity middleware providers\n if (config.entities && config.entities.length > 0) {\n allProviders.push({\n provide: AXP_ENTITY_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n if (!registry) {\n console.warn('Domain registry not available during entity middleware setup');\n return false;\n }\n for (const mw of config.entities!) {\n registry.addEntityMiddleware(mw);\n }\n return true;\n },\n multi: true\n });\n }\n\n return makeEnvironmentProviders(allProviders);\n}\n\n//#endregion ","//#region ---- Core Registry System ----\n\n// Main registry and service\nexport * from './domain.registry';\nexport * from './domain.service';\n\n//#endregion\n\n//#region ---- Loader System ----\n\n// Loader interface and providers\nexport * from './domain-loader.interface';\nexport * from './provide-domain-loaders';\n\n//#endregion\n\n//#region ---- Middleware System ----\n\n// Middleware interface and providers\nexport * from './domain-middleware.interface';\nexport * from './provide-domain-middleware';\n\n//#endregion ","export * from './lib/provide-entity';\nexport * from './lib/entity-definition-crud.token';\nexport * from './lib/domain.module';\n\n//#region ---- Type Definitions ----\n\nexport * from './lib/definitions/base.types';\nexport * from './lib/definitions/module-definition.types';\nexport * from './lib/definitions/aggregate-definition.types';\nexport * from './lib/definitions/entity-definition.types';\nexport * from './lib/definitions/plugin-definition.types';\nexport * from './lib/definitions/property-definition.types';\nexport * from './lib/definitions/relation-definition.types';\nexport * from './lib/definitions/interface-definition.types';\nexport * from './lib/definitions/validation-definition.types';\nexport * from './lib/definitions/menu-definition.types';\nexport * from './lib/definitions/permission-definition.types';\nexport * from './lib/definitions/command-registry.types';\nexport * from './lib/definitions/query-registry.types';\n\n//#endregion\n\n//#region ---- Runtime Models ----\n\nexport * from './lib/models/module.model';\nexport * from './lib/models/aggregate.model';\nexport * from './lib/models/entity.model';\nexport * from './lib/models/entity-field.model';\nexport * from './lib/models/property.model';\nexport * from './lib/models/relation.model';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nexport * from './lib/helpers/module-helper';\n\n//#endregion\n\n//#region ---- Property registry services ----\n\nexport * from './lib/registries/property';\n\n//#endregion\n\n//#region ---- Domain Registry Services ----\n\nexport * from './lib/registries/domain';\n\n//#endregion\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|