@acorex/platform 20.6.0-next.2 → 20.6.0-next.21
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/common/index.d.ts +7 -3
- package/core/index.d.ts +210 -56
- package/fesm2022/acorex-platform-auth.mjs +19 -19
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-CLb2KMfv.mjs → acorex-platform-common-common-settings.provider-zhqNP3xb.mjs} +28 -4
- package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +104 -103
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +279 -78
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +65 -20
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +56 -135
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +1322 -409
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +73 -73
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +7736 -3813
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +58 -40
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +91 -82
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-lHfg4JFJ.mjs → acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-lHfg4JFJ.mjs.map → acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CMSnecnD.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CMSnecnD.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-DN-sIFYe.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-DN-sIFYe.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-Bn9w0SEz.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-Bn9w0SEz.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-B8mgcvoX.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-B8mgcvoX.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-Bhof2SY8.mjs → acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-Bhof2SY8.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-CeQIvKVV.mjs → acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-CeQIvKVV.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BOP7jFp4.mjs → acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs} +6 -6
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BOP7jFp4.mjs.map → acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs +30 -0
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-C57lyBs3.mjs → acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-C57lyBs3.mjs.map → acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-fr77M8Z0.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-CvZTRhct.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-DHES_0ot.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-DHES_0ot.mjs.map → acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +3809 -2060
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +7 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +119 -43
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-C_XmJV7Y.mjs → acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs} +30 -9
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D5K0XUqM.mjs +1522 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D5K0XUqM.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-DJPDil7w.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BArdGNfr.mjs → acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs} +7 -7
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-D7rEInHg.mjs → acorex-platform-themes-default-error-401.component-cfREo88K.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-401.component-D7rEInHg.mjs.map → acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-404.component-BTZlVrd8.mjs → acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-404.component-BTZlVrd8.mjs.map → acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-BhvEi6nX.mjs → acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-BhvEi6nX.mjs.map → acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +156 -53
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs +55 -0
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BXV40gay.mjs → acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BXV40gay.mjs.map → acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-BpIf4s53.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-BpIf4s53.mjs.map → acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-C9gvfQfX.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-C9gvfQfX.mjs.map → acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +58 -153
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +327 -151
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/index.d.ts +6 -33
- package/layout/components/index.d.ts +306 -61
- package/layout/designer/index.d.ts +1 -1
- package/layout/entity/index.d.ts +595 -94
- package/layout/views/index.d.ts +6 -58
- package/layout/widget-core/index.d.ts +31 -26
- package/layout/widgets/README.md +0 -1
- package/layout/widgets/index.d.ts +325 -99
- package/package.json +1 -1
- package/runtime/index.d.ts +36 -8
- package/themes/default/index.d.ts +32 -77
- package/themes/shared/index.d.ts +1 -39
- package/workflow/index.d.ts +909 -457
- package/fesm2022/acorex-platform-common-common-settings.provider-CLb2KMfv.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-entity-create-entity.command-BsLbiAdA.mjs +0 -52
- package/fesm2022/acorex-platform-layout-entity-create-entity.command-BsLbiAdA.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-fr77M8Z0.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-CvZTRhct.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-C_XmJV7Y.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BkY9HXcT.mjs +0 -782
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BkY9HXcT.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DJPDil7w.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BArdGNfr.mjs.map +0 -1
|
@@ -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 { AXMEntityCrudServiceImpl } 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 for (const entityKey of entityKeys) {\n const service = new AXMEntityCrudServiceImpl(entityKey);\n // Register Commands\n commandRegistry.register(`${entityKey}:Create`, async () => ({\n execute: async (input) => {\n const id = await service.insertOne(input);\n return service.getOne(id);\n }\n }));\n commandRegistry.register(`${entityKey}:Update`, async () => ({\n execute: ({ id, ...rest }) => service.updateOne(id, rest)\n }));\n commandRegistry.register(`${entityKey}:Delete`, async () => ({\n execute: (id) => service.deleteOne(id)\n }));\n // Register Queries\n queryRegistry.register(`${entityKey}:GetById`, async () => ({\n fetch: (id) => service.getOne(id)\n }));\n queryRegistry.register(`${entityKey}:GetList`, async () => ({\n fetch: (request) => service.query(request)\n }));\n queryRegistry.register(`${entityKey}:GetRoots`, async () => ({\n fetch: (request) => service.getRoots(request)\n }));\n queryRegistry.register(`${entityKey}:GetChildren`, async () => ({\n fetch: (request) => service.getChildren(request)\n }));\n queryRegistry.register(`${entityKey}:GetByCategory`, async () => ({\n fetch: (request) => service.getByCategory(request)\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3Byb3ZpZGUtZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxNQUFNLEVBQ04sd0JBQXdCLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixHQUFHLE1BQU0sMEJBQTBCLENBQUM7QUFHakYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQU8sdUJBQXVCLENBQUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQW9CO0lBQzlDLE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDYixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRS9DLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7b0JBRWpDLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRXhELG9CQUFvQjtvQkFFcEIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDckIsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFP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LFxuICAgIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTUVudGl0eUNydWRTZXJ2aWNlSW1wbCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ29tbWFuZFJlZ2lzdHJ5LCBBWFBRdWVyeVJlZ2lzdHJ5LCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWFBfUEVSTUlTU0lPTl9ERUZJTklUSU9OX1BST1ZJREVSLCBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcblxuZXhwb3J0IGNvbnN0IEFYUF9FTlRJVFlfQ1JVRF9TRVRVUCA9IG5ldyBJbmplY3Rpb25Ub2tlbjx2b2lkPignQVhQX0VOVElUWV9DUlVEX1NFVFVQJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRW50aXR5KGVudGl0eUtleXM6IHN0cmluZ1tdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWFBfRU5USVRZX0NSVURfU0VUVVAsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kUmVnaXN0cnkgPSBpbmplY3QoQVhQQ29tbWFuZFJlZ2lzdHJ5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVJlZ2lzdHJ5ID0gaW5qZWN0KEFYUFF1ZXJ5UmVnaXN0cnkpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRpdHlLZXkgb2YgZW50aXR5S2V5cykge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsKGVudGl0eUtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgQ29tbWFuZHNcblxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpDcmVhdGVgLCBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBhd2FpdCBzZXJ2aWNlLmluc2VydE9uZShpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuZ2V0T25lKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OlVwZGF0ZWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiAoeyBpZCwgLi4ucmVzdCB9KSA9PiBzZXJ2aWNlLnVwZGF0ZU9uZShpZCwgcmVzdClcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OkRlbGV0ZWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiAoaWQpID0+IHNlcnZpY2UuZGVsZXRlT25lKGlkKVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgUXVlcmllc1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRCeUlkYCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoOiAoaWQpID0+IHNlcnZpY2UuZ2V0T25lKGlkKVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OkdldExpc3RgLCBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2g6IChyZXF1ZXN0KSA9PiBzZXJ2aWNlLnF1ZXJ5KHJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06R2V0Um9vdHNgLCBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2g6IChyZXF1ZXN0KSA9PiBzZXJ2aWNlLmdldFJvb3RzKHJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06R2V0Q2hpbGRyZW5gLCBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2g6IChyZXF1ZXN0KSA9PiBzZXJ2aWNlLmdldENoaWxkcmVuKHJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06R2V0QnlDYXRlZ29yeWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaDogKHJlcXVlc3QpID0+IHNlcnZpY2UuZ2V0QnlDYXRlZ29yeShyZXF1ZXN0KVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIHByb3ZpZGU6IEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgICAgIC8vICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgLy8gICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBwcm92aWRlcjogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciA9IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZGVmaW5lOiBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRpdHlLZXkgb2YgZW50aXR5S2V5cykge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZW50aXR5S2V5LnNwbGl0KCcuJylbMF07XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRHcm91cChncm91cCwgZ3JvdXApXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRQZXJtaXNzaW9uKGVudGl0eUtleSwgZW50aXR5S2V5KVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2hpbGQoYCR7ZW50aXR5S2V5fTpDcmVhdGVgLCBgJHtlbnRpdHlLZXl9OkNyZWF0ZWApXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDaGlsZChgJHtlbnRpdHlLZXl9OlVwZGF0ZWAsIGAke2VudGl0eUtleX06VXBkYXRlYClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENoaWxkKGAke2VudGl0eUtleX06RGVsZXRlYCwgYCR7ZW50aXR5S2V5fTpEZWxldGVgKVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAuZW5kUGVybWlzc2lvbigpXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5lbmRHcm91cCgpO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBwcm92aWRlcjtcblxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBwcm92aWRlOiBBWFBfRU5USVRZX0NSVURfU0VUVVAsXG4gICAgICAgIC8vICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgLy8gICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIF0pO1xufVxuXG5cbiJdfQ==","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.10\", ngImport: i0, type: AXPDomainModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPDomainModule, imports: [AXPRuntimeModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPDomainModule, imports: [AXPRuntimeModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLHNDQUFzQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBUXZCLFlBQVksVUFBK0I7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFBWTtJQUVaLHlDQUF5QztJQUV6Qzs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU07UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZO0lBRVoseUNBQXlDO0lBRXpDOztPQUVHO0lBQ0ksYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBWTtJQUVaLHVDQUF1QztJQUV2Qzs7T0FFRztJQUNJLFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDO0lBQ3JELENBQUM7SUFFRCxZQUFZO0lBSVosMENBQTBDO0lBRTFDOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFFBQVE7UUFDakIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLHFCQUFxQjtRQUNyQixNQUFNLGNBQWMsR0FBd0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVk7SUFFWix1Q0FBdUM7SUFFdkM7O09BRUc7SUFDSSxlQUFlO1FBU2xCLE9BQU87WUFDSCxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMvQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzlCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBUWIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUUzRSxPQUFPO1lBQ0gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzVCLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQ3BDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDakUsZUFBZTtTQUNsQixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBNZXRhRGF0YSwgQVhQT3B0aW9uc0RhdGEsIEFYUFZhbGlkYXRpb25SdWxlcyB9IGZyb20gXCJAYWNvcmV4L3BsYXRmb3JtL2NvcmVcIjtcbmltcG9ydCB7IEFYUFNjaGVtYURlZmluaXRpb24sIEFYUFNjaGVtYURhdGFUeXBlLCBBWFBTY2hlbWFJbnRlcmZhY2UsIEFYUFNjaGVtYUZlYXR1cmVzIH0gZnJvbSBcIi4uL2RlZmluaXRpb25zL3NjaGVtYS1kZWZpbml0aW9uLnR5cGVzXCI7XG5cbi8vI3JlZ2lvbiAtLS0tICAgQVhQU2NoZW1hTW9kZWwgICAtLS0tXG5cbi8qKlxuICogUnVudGltZSBtb2RlbCBmb3Igc2NoZW1hIGRlZmluaXRpb25zIHdpdGggaGVscGVyIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGNsYXNzIEFYUFNjaGVtYU1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhVHlwZTogQVhQU2NoZW1hRGF0YVR5cGU7XG4gICAgcHVibGljIHJlYWRvbmx5IGludGVyZmFjZTogQVhQU2NoZW1hSW50ZXJmYWNlO1xuICAgIHB1YmxpYyByZWFkb25seSB2YWxpZGF0aW9uczogQVhQVmFsaWRhdGlvblJ1bGVzO1xuICAgIHB1YmxpYyByZWFkb25seSBmZWF0dXJlczogQVhQU2NoZW1hRmVhdHVyZXM7XG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhPzogQVhQTWV0YURhdGE7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBBWFBTY2hlbWFEZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGRlZmluaXRpb24ubmFtZTtcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9IGRlZmluaXRpb24uZGF0YVR5cGU7XG4gICAgICAgIHRoaXMuaW50ZXJmYWNlID0gZGVmaW5pdGlvbi5pbnRlcmZhY2U7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbnMgPSBkZWZpbml0aW9uLnZhbGlkYXRpb25zID8/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.10\", ngImport: i0, type: AXPSchemaRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPSchemaRegistry, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", 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.10\", ngImport: i0, type: AXPSchemaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPSchemaService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", 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.10\", ngImport: i0, type: AXPDomainRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPDomainRegistry, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPDomainRegistry, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL2RvbWFpbi9kb21haW4ucmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUF1QiwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUU3QywrQ0FBK0M7QUFFL0M7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUVJLG9EQUFvRDtRQUNuQyxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUUzRSx1Q0FBdUM7UUFDdEIsc0JBQWlCLEdBQTBCLEVBQUUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBMEIsRUFBRSxDQUFDO1FBQ2pELHNCQUFpQixHQUEwQixFQUFFLENBQUM7UUFFL0QsMkNBQTJDO1FBQ25DLGFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRXpDLHdCQUF3QjtRQUNQLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0EwUTdEO0lBeFFHLDhDQUE4QztJQUU5Qzs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFJLElBQVk7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QywrQkFBK0I7UUFDL0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDZCxtQ0FBbUM7WUFDbkMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELG9FQUFvRTtRQUNwRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVGLHNEQUFzRDtRQUN0RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFNLENBQUM7SUFDaEUsQ0FBQztJQUVELFlBQVk7SUFFWixvQ0FBb0M7SUFFcEM7Ozs7O09BS0c7SUFDSyxTQUFTLENBQUMsSUFBWTtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPO2dCQUNILE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDO1FBQ04sQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNILE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUM7UUFDTixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU87Z0JBQ0gsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7YUFDakIsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLGtFQUFrRSxDQUFDLENBQUM7SUFDM0gsQ0FBQztJQUVELFlBQVk7SUFFWix5Q0FBeUM7SUFFekM7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBWSxFQUFFLElBQXVDO1FBQy9FLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDO29CQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pELElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksU0FBUyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQ2hFLE9BQU8sVUFBVSxDQUFDLENBQUMsaUNBQWlDO29CQUN4RCxDQUFDO2dCQUNMLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGVBQWUsSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQy9FLDhDQUE4QztnQkFDbEQsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsQ0FBQyx5Q0FBeUM7SUFDL0QsQ0FBQztJQUVELFlBQVk7SUFFWiw2Q0FBNkM7SUFFN0M7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxVQUErQjtRQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLFVBQStCO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsVUFBK0I7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLEtBQUssQ0FBQyxtQkFBbUIsQ0FDN0IsVUFBK0IsRUFDL0IsSUFBdUMsRUFDdkMsSUFBWTtRQUVaLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxVQUFVLENBQUMsQ0FBQyx5QkFBeUI7UUFDaEQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQTBCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpFLHFDQUFxQztRQUNyQyxLQUFLLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzFCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssb0JBQW9CLENBQUMsSUFBdUM7UUFDaEUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDN0MsS0FBSyxXQUFXLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUNuRCxLQUFLLFFBQVEsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7Ozs7O0dBTUQ7SUFDUyxXQUFXLENBQUMsVUFBK0IsRUFBRSxRQUEyQjtRQUM1RSxRQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixLQUFLLFFBQVE7Z0JBQ1QsT0FBTyxJQUFJLGNBQWMsQ0FBQyxVQUFpQixDQUFDLENBQUM7WUFFakQsS0FBSyxXQUFXO2dCQUNaLHdEQUF3RDtnQkFDeEQsc0RBQXNEO2dCQUN0RCxNQUFNLGdCQUFnQixHQUFHO29CQUNyQixJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3JCLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTTtvQkFDdEIsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUMzQixDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFDLGdCQUF1QixDQUFDLENBQUM7Z0JBQ2pFLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxVQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBRWxFLEtBQUssUUFBUTtnQkFDVCx3REFBd0Q7Z0JBQ3hELHNEQUFzRDtnQkFDdEQsTUFBTSx5QkFBeUIsR0FBRztvQkFDOUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTO29CQUN4QixLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFO29CQUMvQixRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7b0JBQ3RCLFNBQVMsRUFBRSxFQUFFO29CQUNiLFdBQVcsRUFBRSxFQUFFO29CQUNmLE9BQU8sRUFBRSxFQUFFO2lCQUNkLENBQUM7Z0JBQ0YsTUFBTSxzQkFBc0IsR0FBRztvQkFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO29CQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3RCLFVBQVUsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2lCQUMxQyxDQUFDO2dCQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFDLHNCQUE2QixDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sZUFBZSxHQUFHLElBQUksaUJBQWlCLENBQUMseUJBQWdDLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQzlGLE9BQU8sSUFBSSxjQUFjLENBQUMsVUFBaUIsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXRGO2dCQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtJQUVaLHdDQUF3QztJQUV4Qzs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLElBQVk7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDVCxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO1lBQ2hDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNsRCxDQUFDO0lBQ04sQ0FBQzsrR0FwUlEsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRG9tYWluTG9hZGVyLCBBWFBEb21haW5EZWZpbml0aW9uLCBBWFBEb21haW5QYXRoSW5mbyB9IGZyb20gJy4vZG9tYWluLWxvYWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQVhQRG9tYWluTWlkZGxld2FyZSwgQVhQRG9tYWluTWlkZGxld2FyZUNvbnRleHQgfSBmcm9tICcuL2RvbWFpbi1taWRkbGV3YXJlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBWFBNb2R1bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9tb2R1bGUubW9kZWwnO1xuaW1wb3J0IHsgQVhQQWdncmVnYXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWdncmVnYXRlLm1vZGVsJztcbmltcG9ydCB7IEFYUEVudGl0eU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBWFBTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vc2NoZW1hJztcblxuLy8jcmVnaW9uIC0tLS0gICBEb21haW4gUmVnaXN0cnkgU2VydmljZSAgIC0tLS1cblxuLyoqXG4gKiBDZW50cmFsIHJlZ2lzdHJ5IGZvciBtYW5hZ2luZyBkb21haW4gZGVmaW5pdGlvbnMsIG1pZGRsZXdhcmUsIGFuZCBkeW5hbWljIGxvYWRpbmcuXG4gKiBcbiAqIFByb3ZpZGVzOlxuICogLSBQYXRoLWJhc2VkIGRvbWFpbiByZXNvbHV0aW9uIChtb2R1bGUuYWdncmVnYXRlLmVudGl0eSlcbiAqIC0gRGVmaW5pdGlvbi1sZXZlbCBjYWNoaW5nIHdpdGggZnJlc2ggbW9kZWwgY3JlYXRpb25cbiAqIC0gVHlwZS1zcGVjaWZpYyBtaWRkbGV3YXJlIHByb2Nlc3NpbmdcbiAqIC0gT24tZGVtYW5kIGRvbWFpbiBsb2FkaW5nIHdpdGggZmlyc3Qtd2lucyBzdHJhdGVneVxuICogLSBNb2RlbCBjcmVhdGlvbiBhbmQgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWFBEb21haW5SZWdpc3RyeSB7XG4gICAgLy8gQ2FjaGUgZGVmaW5pdGlvbnMgKGJlZm9yZSBtaWRkbGV3YXJlKSwgbm90IG1vZGVsc1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmluaXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBEb21haW5EZWZpbml0aW9uPigpO1xuXG4gICAgLy8gVHlwZS1zcGVjaWZpYyBtaWRkbGV3YXJlIGNvbGxlY3Rpb25zXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kdWxlTWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWdncmVnYXRlTWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZW50aXR5TWlkZGxld2FyZTogQVhQRG9tYWluTWlkZGxld2FyZVtdID0gW107XG5cbiAgICAvLyBSZWdpc3RlcmVkIGxvYWRlcnMgZm9yIG9uLWRlbWFuZCBsb2FkaW5nXG4gICAgcHJpdmF0ZSBfbG9hZGVyczogQVhQRG9tYWluTG9hZGVyW10gPSBbXTtcblxuICAgIC8vIEluamVjdGVkIGRlcGVuZGVuY2llc1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hU2VydmljZSA9IGluamVjdChBWFBTY2hlbWFTZXJ2aWNlKTtcblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgTWFpbiBSZXNvbHV0aW9uIE1ldGhvZCAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgYSBkb21haW4gb2JqZWN0IGJ5IHBhdGggd2l0aCBmdWxsIG1pZGRsZXdhcmUgcHJvY2Vzc2luZy5cbiAgICAgKiBTdXBwb3J0cyBkZWZpbml0aW9uLWxldmVsIGNhY2hpbmcgd2l0aCBmcmVzaCBtb2RlbCBjcmVhdGlvbi5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcGF0aCBEb21haW4gcGF0aCAoZS5nLiwgXCJ1c2VyLW1hbmFnZW1lbnQudXNlci1hZ2dyZWdhdGUudXNlclwiKVxuICAgICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZG9tYWluIG1vZGVsXG4gICAgICovXG4gICAgYXN5bmMgcmVzb2x2ZTxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPFQ+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.10\", ngImport: i0, type: AXPDomainService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPDomainService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", 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":["../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 { AXMEntityCrudServiceImpl } 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 for (const entityKey of entityKeys) {\n const service = new AXMEntityCrudServiceImpl(entityKey);\n // Register Commands\n commandRegistry.register(`${entityKey}:Create`, async () => ({\n execute: async (input) => {\n try {\n const id = await service.insertOne(input);\n const entity = await service.getOne(id);\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 service.updateOne(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 service.deleteOne(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) => service.getOne(id)\n }));\n queryRegistry.register(`${entityKey}:GetList`, async () => ({\n fetch: (request) => service.query(request)\n }));\n queryRegistry.register(`${entityKey}:GetRoots`, async () => ({\n fetch: (request) => service.getRoots(request)\n }));\n queryRegistry.register(`${entityKey}:GetChildren`, async () => ({\n fetch: (request) => service.getChildren(request)\n }));\n queryRegistry.register(`${entityKey}:GetByCategory`, async () => ({\n fetch: (request) => service.getByCategory(request)\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2RvbWFpbi9zcmMvbGliL3Byb3ZpZGUtZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxNQUFNLEVBQ04sd0JBQXdCLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixHQUFHLE1BQU0sMEJBQTBCLENBQUM7QUFJakYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQU8sdUJBQXVCLENBQUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQW9CO0lBQzlDLE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDYixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRS9DLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7b0JBRWpDLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRXhELG9CQUFvQjtvQkFFcEIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXlDLEVBQUU7NEJBQzVELElBQUksQ0FBQztnQ0FDRCxNQUFNLEVB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dCxcbiAgICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1FbnRpdHlDcnVkU2VydmljZUltcGwgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmRSZWdpc3RyeSwgQVhQUXVlcnlSZWdpc3RyeSwgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUiwgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5cbmV4cG9ydCBjb25zdCBBWFBfRU5USVRZX0NSVURfU0VUVVAgPSBuZXcgSW5qZWN0aW9uVG9rZW48dm9pZD4oJ0FYUF9FTlRJVFlfQ1JVRF9TRVRVUCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUVudGl0eShlbnRpdHlLZXlzOiBzdHJpbmdbXSk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQVhQX0VOVElUWV9DUlVEX1NFVFVQLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZFJlZ2lzdHJ5ID0gaW5qZWN0KEFYUENvbW1hbmRSZWdpc3RyeSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlSZWdpc3RyeSA9IGluamVjdChBWFBRdWVyeVJlZ2lzdHJ5KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW50aXR5S2V5IG9mIGVudGl0eUtleXMpIHtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gbmV3IEFYTUVudGl0eUNydWRTZXJ2aWNlSW1wbChlbnRpdHlLZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIENvbW1hbmRzXG5cbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06Q3JlYXRlYCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8YW55Pj4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gYXdhaXQgc2VydmljZS5pbnNlcnRPbmUoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBzZXJ2aWNlLmdldE9uZShpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdGYWlsZWQgdG8gY3JlYXRlIGVudGl0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OlVwZGF0ZWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoeyBpZCwgLi4ucmVzdCB9KTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDxhbnk+PiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHNlcnZpY2UudXBkYXRlT25lKGlkLCByZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1cGRhdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdGYWlsZWQgdG8gdXBkYXRlIGVudGl0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OkRlbGV0ZWAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQpOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHZvaWQ+PiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5kZWxldGVPbmUoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGRlbGV0ZSBlbnRpdHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBRdWVyaWVzXG5cbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZWdpc3RyeS5yZWdpc3RlcihgJHtlbnRpdHlLZXl9OkdldEJ5SWRgLCBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2g6IChpZCkgPT4gc2VydmljZS5nZXRPbmUoaWQpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlZ2lzdHJ5LnJlZ2lzdGVyKGAke2VudGl0eUtleX06R2V0TGlzdGAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaDogKHJlcXVlc3QpID0+IHNlcnZpY2UucXVlcnkocmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRSb290c2AsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaDogKHJlcXVlc3QpID0+IHNlcnZpY2UuZ2V0Um9vdHMocmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRDaGlsZHJlbmAsIGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaDogKHJlcXVlc3QpID0+IHNlcnZpY2UuZ2V0Q2hpbGRyZW4ocmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVnaXN0cnkucmVnaXN0ZXIoYCR7ZW50aXR5S2V5fTpHZXRCeUNhdGVnb3J5YCwgYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoOiAocmVxdWVzdCkgPT4gc2VydmljZS5nZXRCeUNhdGVnb3J5KHJlcXVlc3QpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgcHJvdmlkZTogQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUixcbiAgICAgICAgLy8gICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAvLyAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHByb3ZpZGVyOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyID0ge1xuICAgICAgICAvLyAgICAgICAgICAgICBkZWZpbmU6IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUtleSBvZiBlbnRpdHlLZXlzKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRpdHlLZXkuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFkZEdyb3VwKGdyb3VwLCBncm91cClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmFkZFBlcm1pc3Npb24oZW50aXR5S2V5LCBlbnRpdHlLZXkpXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDaGlsZChgJHtlbnRpdHlLZXl9OkNyZWF0ZWAsIGAke2VudGl0eUtleX06Q3JlYXRlYClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENoaWxkKGAke2VudGl0eUtleX06VXBkYXRlYCwgYCR7ZW50aXR5S2V5fTpVcGRhdGVgKVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2hpbGQoYCR7ZW50aXR5S2V5fTpEZWxldGVgLCBgJHtlbnRpdHlLZXl9OkRlbGV0ZWApXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIC5lbmRQZXJtaXNzaW9uKClcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgLmVuZEdyb3VwKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfQ1JVRF9TRVRVUCxcbiAgICAgICAgLy8gICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAvLyAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgXSk7XG59XG5cblxuIl19","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWZpZWxkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9tb2RlbHMvZW50aXR5LWZpZWxkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLDJDQUEyQztBQUUzQzs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFhNUIsWUFBWSxVQUFvQyxFQUFFLE1BQVcsRUFBRSxhQUErQjtRQUMxRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUVwQyw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsWUFBWTtJQUVaLDZDQUE2QztJQUU3Qzs7T0FFRztJQUNJLFVBQVU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUN6RixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7T0FFRztJQUNJLGFBQWE7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDaEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLE1BQWMsR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZO0lBRVosMENBQTBDO0lBRTFDOztPQUVHO0lBQ0ksU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNWLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0csQ0FBQztJQUVELFlBQVk7SUFFWiwwQ0FBMEM7SUFFMUM7O09BRUc7SUFDSSxLQUFLLENBQUMsUUFBUTtRQUNqQixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFNUIsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFeEQsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFVBQVUscUJBQXFCLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0wsQ0FBQztRQUVELCtCQUErQjtRQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFBWTtJQUVaLHVDQUF1QztJQUV2Qzs7T0FFRztJQUNJLGFBQWE7UUFRaEIsT0FBTztZQUNILGNBQWMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2pFLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3JELFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUztZQUNoRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQztZQUM5QyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztTQUN6QyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQVNsQixPQUFPO1lBQ0gsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7U0FDOUIsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzFCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBWYWxpZGF0aW9uUnVsZXMgfSBmcm9tIFwiQGFjb3JleC9wbGF0Zm9ybS9jb3JlXCI7XG5pbXBvcnQgeyBBWFBFbnRpdHlGaWVsZERlZmluaXRpb24sIEFYUEVudGl0eUZpZWxkRmVhdHVyZXMgfSBmcm9tIFwiLi4vZGVmaW5pdGlvbnMvZW50aXR5LWRlZmluaXRpb24udHlwZXNcIjtcbmltcG9ydCB7IEFYUERvbWFpbkFjdGlvbiB9IGZyb20gXCIuLi9kZWZpbml0aW9ucy9iYXNlLnR5cGVzXCI7XG5pbXBvcnQgeyBBWFBTY2hlbWFNb2RlbCB9IGZyb20gXCIuL3NjaGVtYS5tb2RlbFwiO1xuaW1wb3J0IHsgQVhQU2NoZW1hU2VydmljZSB9IGZyb20gXCIuLi9yZWdpc3RyaWVzL3NjaGVtYVwiO1xuXG4vLyNyZWdpb24gLS0tLSAgIEFYUEVudGl0eUZpZWxkTW9kZWwgICAtLS0tXG5cbi8qKlxuICogUnVudGltZSBtb2RlbCBmb3IgZW50aXR5IGZpZWxkIGRlZmluaXRpb25zIHdpdGggcGFyZW50IHJlZmVyZW5jZXMgYW5kIGhlbHBlciBtZXRob2RzXG4gKi9cbmV4cG9ydCBjbGFzcyBBWFBFbnRpdHlGaWVsZE1vZGVsIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRhdGlvbnM/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW1pZGRsZXdhcmUuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9kb21haW4vc3JjL2xpYi9yZWdpc3RyaWVzL3NjaGVtYS9zY2hlbWEtbWlkZGxld2FyZS5mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsaURBQWlEO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBR25DLFlBQVksTUFBMkI7UUFDbkMsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGdEQUFnRDtJQUVoRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO0lBRVosZ0RBQWdEO0lBRWhEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFlBQWlCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBQzlELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZO0lBRVosNkNBQTZDO0lBRTdDOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxJQUFTO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxJQUFTO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsWUFBWTtJQUVaLDRDQUE0QztJQUU1Qzs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxPQUFZO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRztZQUM3QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDakMsR0FBRyxPQUFPO1NBQ2IsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxTQUFpQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFVBQWtCO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFlBQVk7SUFFWiw2Q0FBNkM7SUFFN0M7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFFBQXNCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHO1lBQ3BCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQ3hCLEdBQUcsUUFBUTtTQUNkLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxVQUFtQixJQUFJLEVBQUUsV0FBb0IsS0FBSztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxVQUFtQixJQUFJLEVBQUUsU0FBa0IsS0FBSztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLFVBQW1CLElBQUk7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsWUFBWTtJQUVaLDJDQUEyQztJQUUzQzs7O09BR0c7SUFDSCxZQUFZLENBQUMsUUFBYTtRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRztZQUNwQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtZQUN4QixHQUFHLFFBQVE7U0FDZCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxHQUFXO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsWUFBWTtJQUVaLHlDQUF5QztJQUV6Qzs7O09BR0c7SUFDSCxZQUFZLENBQUMsUUFBMkI7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZO0lBRVosMkNBQTJDO0lBRTNDOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxhQUFzQixJQUFJO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxPQUFnQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLGFBQXNCLElBQUk7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUdKO0FBRUQsWUFBWTtBQUVaLHNEQUFzRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFNjaGVtYURlZmluaXRpb24sIEFYUFNjaGVtYURhdGFUeXBlIH0gZnJvbSAnLi4vLi4vZGVmaW5pdGlvbnMvc2NoZW1hLWRlZmluaXRpb24udHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFNjaGVtYSBNaWRkbGV3YXJlIENvbnRleHQgICAtLS0tXG5cbi8qKlxuICogQ29udGV4dCBjbGFzcyBmb3Igc2NoZW1hIG1pZGRsZXdhcmUgb3BlcmF0aW9ucyBwcm92aWRpbmcgYSBmbHVlbnQgQVBJIGZvciBzY2hlbWEgbWFuaXB1bGF0aW9uLlxuICogXG4gKiBUaGlzIGNsYXNzIHNlcnZlcyBhcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gbWlkZGxld2FyZSBmdW5jdGlvbnMgYW5kIHNjaGVtYSBkZWZpbml0aW9ucyxcbiAqIG9mZmVyaW5nIG1ldGhvZHMgdG8gbW9kaWZ5IHZhcmlvdXMgYXNwZWN0cyBvZiBhIHNjaGVtYSBpbmNsdWRpbmc6XG4gKiAtIFdpZGdldCBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiAtIFZhbGlkYXRpb24gcnVsZXNcbiAqIC0gRmVhdHVyZSBmbGFncyAoc2VhcmNoYWJsZSwgZmlsdGVyYWJsZSwgc29ydGFibGUpXG4gKiAtIE1ldGFkYXRhIGFuZCBjdXN0b20gcHJvcGVydGllc1xuICogLSBVSSBiZWhhdmlvciAodmlzaWJpbGl0eSwgcmVhZG9ubHkgc3RhdGUpXG4gKiBcbiAqIEFsbCBtZXRob2RzIHJldHVybiBgdGhpc2AgdG8gZW5hYmxlIGZsdWVudCBtZXRob2QgY2hhaW5pbmcuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFeGFtcGxlIG1pZGRsZXdhcmUgdXNpbmcgdGhlIGNvbnRleHRcbiAqIChjb250ZXh0KSA9PiB7XG4gKiAgIGNvbnRleHRcbiAqICAgICAuYWRkVmFsaWRhdGlvbih7IHJ1bGU6ICdyZXF1aXJlZCcgfSlcbiAqICAgICAuc2VhcmNoYWJsZSh0cnVlKVxuICogICAgIC53aXRoRGVmYXVsdFZhbHVlKCdkZWZhdWx0IHRleHQnKVxuICogICAgIC5yZWFkb25seShmYWxzZSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFYUFNjaGVtYU1pZGRsZXdhcmVDb250ZXh0IHtcbiAgICBwcml2YXRlIF9zY2hlbWE6IEFYUFNjaGVtYURlZmluaXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzY2hlbWE6IEFYUFNjaGVtYURlZmluaXRpb24pIHtcbiAgICAgICAgLy8gRGVlcCBjbG9uZSB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgc2NoZW1hXG4gICAgICAgIHRoaXMuX3NjaGVtYSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2NoZW1hKSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBTY2hlbWEgQWNjZXNzIFByb3BlcnRpZXMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc2NoZW1hIGRlZmluaXRpb24gKHJlYWRvbmx5IGFjY2VzcylcbiAgICAgKi9cbiAgICBnZXQgc2NoZW1hKCk6IFJlYWRvbmx5PEFYUFNjaGVtYURlZmluaXRpb24+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":";;;;;AAIY,MAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,uBAAuB;AACxE,SAAS,aAAa,CAAC,UAAU,EAAE;AAC1C,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,qBAAqB;AAC1C,YAAY,KAAK,EAAE,IAAI;AACvB,YAAY,UAAU,EAAE,MAAM;AAC9B,gBAAgB,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAClE,gBAAgB,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9D,gBAAgB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AACpD,oBAAoB,MAAM,OAAO,GAAG,IAAI,wBAAwB,CAAC,SAAS,CAAC;AAC3E;AACA,oBAAoB,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa;AACjF,wBAAwB,OAAO,EAAE,OAAO,KAAK,KAAK;AAClD,4BAA4B,IAAI;AAChC,gCAAgC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;AACzE,gCAAgC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvE,gCAAgC,OAAO;AACvC,oCAAoC,OAAO,EAAE,IAAI;AACjD,oCAAoC,IAAI,EAAE,MAAM;AAChD,iCAAiC;AACjC,4BAA4B;AAC5B,4BAA4B,OAAO,KAAK,EAAE;AAC1C,gCAAgC,OAAO;AACvC,oCAAoC,OAAO,EAAE,KAAK;AAClD,oCAAoC,OAAO,EAAE;AAC7C,wCAAwC,IAAI,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,yBAAyB;AAChH,qCAAqC;AACrC,iCAAiC;AACjC,4BAA4B;AAC5B,wBAAwB;AACxB,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa;AACjF,wBAAwB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK;AAC5D,4BAA4B,IAAI;AAChC,gCAAgC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;AACjF,gCAAgC,OAAO;AACvC,oCAAoC,OAAO,EAAE,IAAI;AACjD,oCAAoC,IAAI,EAAE,OAAO;AACjD,iCAAiC;AACjC,4BAA4B;AAC5B,4BAA4B,OAAO,KAAK,EAAE;AAC1C,gCAAgC,OAAO;AACvC,oCAAoC,OAAO,EAAE,KAAK;AAClD,oCAAoC,OAAO,EAAE;AAC7C,wCAAwC,IAAI,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,yBAAyB;AAChH,qCAAqC;AACrC,iCAAiC;AACjC,4BAA4B;AAC5B,wBAAwB;AACxB,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa;AACjF,wBAAwB,OAAO,EAAE,OAAO,EAAE,KAAK;AAC/C,4BAA4B,IAAI;AAChC,gCAAgC,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;AAC3D,gCAAgC,OAAO;AACvC,oCAAoC,OAAO,EAAE,IAAI;AACjD,iCAAiC;AACjC,4BAA4B;AAC5B,4BAA4B,OAAO,KAAK,EAAE;AAC1C,gCAAgC,OAAO;AACvC,oCAAoC,OAAO,EAAE,KAAK;AAClD,oCAAoC,OAAO,EAAE;AAC7C,wCAAwC,IAAI,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,yBAAyB;AAChH,qCAAqC;AACrC,iCAAiC;AACjC,4BAA4B;AAC5B,wBAAwB;AACxB,qBAAqB,CAAC,CAAC;AACvB;AACA,oBAAoB,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa;AAChF,wBAAwB,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE;AACxD,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa;AAChF,wBAAwB,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO;AACjE,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,aAAa;AACjF,wBAAwB,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,OAAO;AACpE,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,aAAa;AACpF,wBAAwB,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,CAAC,OAAO;AACvE,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa;AACtF,wBAAwB,KAAK,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO;AACzE,qBAAqB,CAAC,CAAC;AACvB,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;AACN;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,oBAAoB,GAAG,IAAI,cAAc,CAAC,sBAAsB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,gBAAgB,GAAG,IAAI,cAAc,CAAC,kBAAkB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,2BAA2B,GAAG,IAAI,cAAc,CAAC,6BAA6B;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,uBAAuB,GAAG,IAAI,cAAc,CAAC,yBAAyB;AACnF;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAC,sBAAsB,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAC,kBAAkB,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,2BAA2B,GAAG,IAAI,cAAc,CAAC,6BAA6B,CAAC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAC,yBAAyB,CAAC;AACpF;;AC5BO,MAAM,eAAe,CAAC;AAC7B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7F,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrF,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7F,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAChK,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAChK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAC1H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB;AACxB;AACA,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACzCH,IAAC;AACX,CAAC,UAAU,qBAAqB,EAAE;AAClC,IAAI,qBAAqB,CAAC,WAAW,CAAC,GAAG,WAAW;AACpD,IAAI,qBAAqB,CAAC,UAAU,CAAC,GAAG,UAAU;AAClD,IAAI,qBAAqB,CAAC,YAAY,CAAC,GAAG,YAAY;AACtD,IAAI,qBAAqB,CAAC,SAAS,CAAC,GAAG,SAAS;AAChD,CAAC,EAAE,qBAAqB,KAAK,qBAAqB,GAAG,EAAE,CAAC,CAAC;;ACLzD;;ACDU,IAAC;AACX,CAAC,UAAU,aAAa,EAAE;AAC1B,IAAI,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ;AACzD,IAAI,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,eAAe;AACvE,IAAI,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa;AACnE,CAAC,EAAE,aAAa,KAAK,aAAa,GAAG,EAAE,CAAC,CAAC;;ACL/B,IAAC;AACX,CAAC,UAAU,mBAAmB,EAAE;AAChC,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa;AAC/E,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa;AAC/E,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa;AAC/E,CAAC,EAAE,mBAAmB,KAAK,mBAAmB,GAAG,EAAE,CAAC,CAAC;AAC3C,IAAC;AACX,CAAC,UAAU,0BAA0B,EAAE;AACvC,IAAI,0BAA0B,CAAC,0BAA0B,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;AACvF,IAAI,0BAA0B,CAAC,0BAA0B,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW;AACzF,IAAI,0BAA0B,CAAC,0BAA0B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY;AAC3F,CAAC,EAAE,0BAA0B,KAAK,0BAA0B,GAAG,EAAE,CAAC,CAAC;;ACVnE;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE;AACpC,QAAQ,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,EAAE,MAAM,CAAC;AACrE,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU;AAC/C,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,0BAA0B,CAAC,QAAQ;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,0BAA0B,CAAC,SAAS;AACjE,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,0BAA0B,CAAC,UAAU;AAClE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,WAAW;AAC5D,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,WAAW;AAC5D,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,WAAW;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5G,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,EAAE;AAChE,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAClD,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,UAAU;AACtE,QAAQ,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;AACjE,IAAI;AACJ;AACA;AACA;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,QAAQ,IAAI,CAAC,IAAI;AACzB,YAAY,KAAK,0BAA0B,CAAC,QAAQ;AACpD,gBAAgB,OAAO,YAAY;AACnC,YAAY,KAAK,0BAA0B,CAAC,SAAS;AACrD,gBAAgB,OAAO,aAAa;AACpC,YAAY,KAAK,0BAA0B,CAAC,UAAU;AACtD,gBAAgB,OAAO,cAAc;AACrC,YAAY;AACZ,gBAAgB,OAAO,SAAS;AAChC;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,QAAQ,IAAI,CAAC,IAAI;AACzB,YAAY,KAAK,mBAAmB,CAAC,WAAW;AAChD,gBAAgB,OAAO,aAAa;AACpC,YAAY,KAAK,mBAAmB,CAAC,WAAW;AAChD,gBAAgB,OAAO,aAAa;AACpC,YAAY,KAAK,mBAAmB,CAAC,WAAW;AAChD,gBAAgB,OAAO,aAAa;AACpC,YAAY;AACZ,gBAAgB,OAAO,SAAS;AAChC;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9H,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;AAC/B,YAAY,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACpD,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;AAC5B,YAAY,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACjD;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;AAClC,YAAY,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC;AACvD,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;AAC/B,YAAY,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACpD,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;AAC5B,YAAY,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACjD,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE;AAClD,YAAY,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC3C,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU;AACrC,YAAY,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAY,WAAW,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,UAAU;AACjE,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,cAAc,CAAC,UAAU,EAAE;AAC/B,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;AACrF,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,aAAa,EAAE;AACpC,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,aAAa;AACtD,IAAI;AACJ;AACA;AACA;AACA,IAAI,cAAc,CAAC,UAAU,EAAE;AAC/B,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;AAC/C,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;AACrC,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;AACpD,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;AACrC,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACtC,YAAY,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACtC,YAAY,UAAU,EAAE,IAAI,CAAC;AAC7B,SAAS;AACT,IAAI;AACJ;;AChMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE;AACpC,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE;AACvD,QAAQ,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,EAAE;AAC/C,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACjH;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC;AACjF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,QAAQ,EAAE;AACtC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,OAAO,EAAE;AACrB,QAAQ;AACR,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACrC;AACA,YAAY,MAAM,UAAU,GAAG,EAAE;AACjC,YAAY,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC3C,gBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE;AACjC;AACA,oBAAoB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/F,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC1C;AACA,YAAY,OAAO,EAAE,GAAG,QAAQ,EAAE;AAClC,QAAQ;AACR,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,UAAU,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AAChD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,UAAU,EAAE;AAC9B,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,UAAU,EAAE;AAC1B,QAAQ,OAAO,UAAU,IAAI,IAAI,CAAC,gBAAgB;AAClD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,YAAY,EAAE,YAAY,EAAE;AAC7C,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY;AACtF,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC;AACpD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,UAAU,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;AACtF,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;AAClD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO;AACf,YAAY,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM;AAClE,YAAY,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;AAChD,YAAY,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AAC5C,YAAY,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC;AAC9C,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,QAAQ,EAAE,IAAI,CAAC,gBAAgB;AAC3C,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9E,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,OAAO,EAAE,IAAI,CAAC;AAC1B,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI;AACtB,YAAY,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC;AACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;AACvB,YAAY,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC;AACtD;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC3C,YAAY,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE;AACtD,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACrF,YAAY,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC7D,gBAAgB,MAAM,CAAC,IAAI,CAAC,CAAC,8BAA8B,EAAE,UAAU,CAAC,6BAA6B,CAAC,CAAC;AACvG,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AACrC;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1G,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACnD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACjD,YAAY,MAAM,eAAe,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;AAC5E,YAAY,IAAI,eAAe,EAAE;AACjC,gBAAgB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE;AACrD,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,aAAa,EAAE,UAAU,EAAE;AAC7C,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,aAAa,EAAE;AACpC,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AAC9C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,MAAM,aAAa,GAAG,EAAE;AAChC,QAAQ,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACjD,YAAY,MAAM,mBAAmB,GAAG,SAAS,CAAC,gBAAgB;AAClE,YAAY,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;AACvF;AACA,gBAAgB,MAAM,OAAO,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACjE,gBAAgB,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS;AAClD,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,aAAa;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,YAAY,GAAG,EAAE;AAC/B,QAAQ,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACjD,YAAY,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;AACxD,gBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC1D,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI;AACtB,YAAY,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClD,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;AACvB,YAAY,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACnD;AACA,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACnE,QAAQ,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AAC7G,QAAQ,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,YAAY,MAAM,CAAC,IAAI,CAAC,CAAC,2BAA2B,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClF,QAAQ;AACR;AACA,QAAQ,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACjD,YAAY,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE;AAClD,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACnF,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;AAC9E,QAAQ,OAAO;AACf,YAAY,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAClD,YAAY,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxF,YAAY,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC5F,YAAY,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxF,YAAY,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC/F,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE;AACrE,SAAS;AACT,IAAI;AACJ;AACA;;ACtLA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,CAAC;AACjC,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE;AACnD,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;AACjD,QAAQ,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;AACjD,QAAQ,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;AACzC,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;AAC3C,QAAQ,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY;AACnD,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;AAC1C;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM;AAC3C;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;AAClE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,KAAK;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,KAAK;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,KAAK;AAC5F,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,IAAI,KAAK;AACjE,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,KAAK;AAClE,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,IAAI,KAAK;AACjE,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,IAAI,KAAK;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,IAAI,KAAK;AAC/D,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,IAAI,KAAK;AAChE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU;AAC9B,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACzE,QAAQ,IAAI,CAAC,MAAM,GAAG,SAAS;AAC/B,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI;AACjC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM;AAC1C,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9G,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI;AACtB,YAAY,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACjD,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;AACvB,YAAY,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClD;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,YAAY,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACnE,gBAAgB,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC5E,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC7D,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACzE,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO;AACf,YAAY,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;AAC7E,YAAY,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AACjE,YAAY,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;AACxC,YAAY,eAAe,EAAE,IAAI,CAAC,YAAY,KAAK,SAAS;AAC5D,YAAY,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;AAC1D,YAAY,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI;AACjD,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO;AACf,YAAY,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAY,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AACvC,YAAY,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AACzC,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AACvC,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AACvC,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU;AACrC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,OAAO,EAAE,IAAI,CAAC,OAAO;AACjC,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,YAAY,EAAE,IAAI,CAAC,YAAY;AAC3C,YAAY,MAAM,EAAE,IAAI,CAAC;AACzB,SAAS;AACT,IAAI;AACJ;;ACpMA;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE;AACnD,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AACrC,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;AAC1C;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAC/G,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/B,IAAI;AACJ;AACA;AACA;AACA,IAAI,eAAe,CAAC,QAAQ,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC9E,IAAI;AACJ;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;AAChE,IAAI;AACJ;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,aAAa;AACxD,IAAI;AACJ;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM;AACjD,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW;AACtD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI;AACtB,YAAY,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClD,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;AACvB,YAAY,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACnD;AACA,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACzC,YAAY,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;AACtD,YAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO;AACf,YAAY,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AAC1C,YAAY,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM;AAC/D,YAAY,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM;AAC/D,YAAY,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM;AACnE,YAAY,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM;AACnE,YAAY,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzD,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;AAClE,YAAY,IAAI,EAAE,IAAI,CAAC;AACvB,SAAS;AACT,IAAI;AACJ;;AC1JA;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,IAAI,WAAW,CAAC,UAAU,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AACnC,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;AAC3C,QAAQ,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;AAC7C,QAAQ,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE;AACvD,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE;AACjD,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;AACzC,IAAI;AACJ;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;AACzC,IAAI;AACJ;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS;AAC1C,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,MAAM;AACvC,IAAI;AACJ;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;AACzC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO;AACxC,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,CAAC,QAAQ,KAAK,MAAM;AACvC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM;AACpC,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK;AAC/C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,IAAI,KAAK;AACzD,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,IAAI,KAAK;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,IAAI,KAAK;AACzD,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK;AACxD,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK;AACvD,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,IAAI,KAAK;AACxD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,QAAQ,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;AACjG,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACrD,YAAY,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9D,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACpC,YAAY,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClD,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO;AACf,YAAY,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAY,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,EAAE;AAC3D,YAAY,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAY,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AACvD,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;AACvC,YAAY,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AACzC,YAAY,QAAQ,EAAE,IAAI,CAAC,UAAU;AACrC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AACnD,QAAQ,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;AAClF,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE;AACxC,YAAY,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;AAChD,YAAY,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;AACxC,YAAY,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;AAC7E,YAAY;AACZ,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;AACrC,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACnC,YAAY,QAAQ,EAAE,IAAI,CAAC;AAC3B,SAAS;AACT,IAAI;AACJ;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC5C,QAAQ,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC;AACvG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE;AAC/C,QAAQ,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC;AACrG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE;AAC5C,QAAQ,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC;AACvG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,wBAAwB,CAAC,MAAM,EAAE,cAAc,EAAE;AAC5D,QAAQ,OAAO,CAAC,IAAI,CAAC,uFAAuF,CAAC;AAC7G,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE;AAClD,QAAQ,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC;AACzG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACtC,QAAQ,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC;AACvG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,kBAAkB,CAAC,MAAM,EAAE;AACtC,QAAQ,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC;AACvG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,2BAA2B,CAAC,MAAM,EAAE;AAC/C,QAAQ,OAAO,CAAC,IAAI,CAAC,0FAA0F,CAAC;AAChH,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE;AAClD,QAAQ,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC;AACvG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,cAAc,CAAC,MAAM,EAAE;AAClC,QAAQ,OAAO,MAAM,CAAC,QAAQ,EAAE;AAChC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE;AACrD,QAAQ,OAAO,CAAC,IAAI,CAAC,kFAAkF,CAAC;AACxG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE;AACtD,QAAQ,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC;AAC3G,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,mBAAmB,CAAC,MAAM,EAAE;AACvC,QAAQ,OAAO,MAAM,CAAC,aAAa,EAAE;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,cAAc,CAAC,MAAM,EAAE;AAClC,QAAQ,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC;AACnG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,YAAY,CAAC,MAAM,EAAE;AAChC,QAAQ,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC;AACjG,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,0BAA0B,CAAC;AACxC,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACzD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,YAAY,EAAE;AACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7C,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE;AAC/C,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,YAAY;AACrE,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;AAC5C,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;AACjE,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACvC,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC/C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACvC,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACvC,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE;AACrC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;AAC/B,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACtC,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;AAChG,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC/B,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG;AACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO;AAC7C,YAAY,GAAG;AACf,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,SAAS,EAAE;AAClC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;AAC5C,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5D,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,UAAU,EAAE;AAC/B,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,QAAQ,EAAE;AAC3B,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;AAChC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACpC,YAAY,GAAG;AACf,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE;AACjD,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE;AACtC,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE;AAChE,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE;AAC/C,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE;AACtC,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;AAC9D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,OAAO,GAAG,IAAI,EAAE;AAC7B,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE;AACtC,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,QAAQ,EAAE;AAC3B,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;AAChC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACpC,YAAY,GAAG;AACf,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,GAAG,EAAE;AACxB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnC,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7C,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,QAAQ,EAAE;AAC3B,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ;AACxC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,UAAU,GAAG,IAAI,EAAE;AAChC,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,OAAO,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7C,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE;AAC/C,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO;AAC3D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,UAAU,GAAG,IAAI,EAAE;AAChC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7C,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE;AAC/C,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;AAC/D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;;AChQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE;AACjC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE;AACpC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE;AACvC,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AAC/D,YAAY,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAC1E,QAAQ;AACR,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,IAAI,EAAE,UAAU,CAAC,IAAI;AACjC,YAAY,UAAU;AACtB,YAAY,OAAO;AACnB,YAAY,YAAY,EAAE,IAAI,IAAI;AAClC,SAAS;AACT,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;AACtD,QAAQ,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7C,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC1E,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AACtC,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAClE,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAClD,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACtC,QAAQ;AACR,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE;AACxB;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxC,YAAY,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7C,QAAQ;AACR;AACA,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAChD;AACA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/D,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,UAAU,GAAG;AAC7B,oBAAoB,IAAI;AACxB,oBAAoB,UAAU;AAC9B,oBAAoB,OAAO,EAAE,EAAE;AAC/B,oBAAoB,YAAY,EAAE,IAAI,IAAI;AAC1C,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;AACnD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,gDAAgD,CAAC,CAAC;AAClG,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;AAClE,QAAQ,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,MAAM,CAAC;AAC9D;AACA,QAAQ,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACzD,YAAY,MAAM,UAAU,CAAC,OAAO,CAAC;AACrC,QAAQ;AACR;AACA,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3C,YAAY,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE;AACpE,gBAAgB,MAAM,UAAU,CAAC,OAAO,CAAC;AACzC,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AACxD,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAClD,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACjE,QAAQ;AACR,QAAQ,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC9E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;AAC9C,YAAY,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;AAC5D,QAAQ;AACR,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE;AACvC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC;AAChE,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACxB,YAAY,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACnD,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;AACzC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AACpC,YAAY,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC9B,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;AACxC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA,IAAI,SAAS,CAAC,GAAG,EAAE;AACnB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtG,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,CAAC,UAAU,EAAE;AAC7B,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC;AACrH,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,eAAe,GAAG,EAAE;AAClC,QAAQ,MAAM,YAAY,GAAG,EAAE;AAC/B,QAAQ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACrD,YAAY,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;AAC7D,YAAY,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACxE,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;AACrC,gBAAgB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;AACvD,oBAAoB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACpE,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO;AACf,YAAY,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AAC3C,YAAY,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAChE,YAAY,eAAe;AAC3B,YAAY;AACZ,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAChC,IAAI;AACJ;AACA;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;AACzC,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAChC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,IAAI,EAAE;AAChC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACzC,QAAQ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AACtC,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACtC,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9D,oBAAoB,IAAI,UAAU,EAAE;AACpC,wBAAwB,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9F,wBAAwB,OAAO,UAAU;AACzC,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,OAAO,KAAK,EAAE;AAC9B,oBAAoB,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACtG,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AACpC,YAAY,IAAI;AAChB,gBAAgB,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClC;AACA,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC7C,oBAAoB,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;AACrD,oBAAoB,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;AACrD,oBAAoB,OAAO,SAAS,GAAG,SAAS;AAChD,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC;AAC3E,gBAAgB,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClC,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,QAAQ;AAC5B,IAAI;AACJ;AACA;AACA;AACA,IAAI,eAAe,CAAC,UAAU,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACrD,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACrL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC;;ACnSvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE;AAClC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;AACnD,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC5C,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7C,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;AACjD,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9C,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,YAAY,EAAE;AACxC,QAAQ,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,MAAM,MAAM;AACrF,YAAY,IAAI,EAAE,MAAM,CAAC,IAAI;AAC7B,YAAY,MAAM,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;AACxD,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC;AACrD,IAAI;AACJ;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE;AACvC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC;AAC/D,IAAI;AACJ;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;AAC7C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAChD,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5C,IAAI;AACJ;AACA;AACA;AACA,IAAI,SAAS,CAAC,GAAG,EAAE;AACnB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;AAC3C,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,CAAC,UAAU,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC;AACrD,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AACnD;AACA,QAAQ,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe;AACpE,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAa,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;AACtC,QAAQ,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY;AAC9D,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;AAChC,QAAQ,OAAO;AACf,YAAY,GAAG,KAAK;AACpB,YAAY,eAAe;AAC3B,YAAY;AACZ,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,WAAW,EAAE;AAC1C,QAAQ,MAAM,cAAc,GAAG,EAAE;AACjC,QAAQ,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAC9C,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAChD,gBAAgB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO;AACf,YAAY,KAAK,EAAE,cAAc,CAAC,MAAM,KAAK,CAAC;AAC9C,YAAY;AACZ,SAAS;AACT,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACpL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,CAAC;;ACnKb;;ACEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAE;AAC9C,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,uBAAuB;AAC5C,YAAY,UAAU,EAAE,YAAY;AACpC,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1D;AACA,gBAAgB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC9C,oBAAoB,MAAM,WAAW,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM;AAC7F,oBAAoB,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;AACnD,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,OAAO,EAAE;AAC7C,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,gBAAgB;AACrC,YAAY,UAAU,EAAE,MAAM;AAC9B,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1D;AACA,gBAAgB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC9C,oBAAoB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;AACxE,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE;AACnD,IAAI,OAAO,mBAAmB,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAC,aAAa,EAAE;AACzD,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,gBAAgB;AACrC,YAAY,UAAU,EAAE,YAAY;AACpC,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1D,gBAAgB,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE;AACrD;AACA,gBAAgB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC9C,oBAAoB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;AACxE,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,UAAU,EAAE;AACpD,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,MAAM,QAAQ,GAAG,EAAE;AACvB;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AACpC,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AACzC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAQ;AACR,aAAa;AACb,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,wBAAwB,CAAC;AACpC;AACA,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AACjC,gBAAgB,OAAO,EAAE,2BAA2B;AACpD,gBAAgB,UAAU,EAAE,MAAM;AAClC,oBAAoB,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9D,oBAAoB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;AAC7C,wBAAwB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACxD,oBAAoB;AACpB,oBAAoB,OAAO,IAAI;AAC/B,gBAAgB,CAAC;AACjB,gBAAgB,KAAK,EAAE;AACvB,aAAa,CAAC,GAAG,EAAE,CAAC;AACpB;AACA,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK;AAClC,YAAY,OAAO,EAAE,oBAAoB;AACzC,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,KAAK,EAAE;AACnB,SAAS,CAAC;AACV,KAAK,CAAC;AACN;AACA;;ACnEA;AACA;AAsBA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,0BAA0B,CAAC;AACxC,IAAI,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE;AAClC;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,WAAW;AAC/B,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK;AACzB,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;AAC5B,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW;AACpC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AAC3B,YAAY,GAAG,CAAC,QAAQ,GAAG,EAAE;AAC7B,QAAQ;AACR,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK;AACjC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,CAAC,GAAG,EAAE;AACrB,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW;AACpC,QAAQ,OAAO,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;AAC/C,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE;AAC7E,YAAY,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,eAAe,CAAC,WAAW,EAAE;AACjC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACrE,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1C,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE;AACnE,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/C,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,KAAK;AACtC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC9B,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,QAAQ,CAAC,IAAI,CAAC;AAC1B,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,aAAa,EAAE;AACrC,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACpE,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,EAAE;AACtC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE;AACnC;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC1B;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACrD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE;AACxB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC7C;AACA,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AACxD,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB;AACA,YAAY,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;AACxE,YAAY,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;AACvD,QAAQ;AACR;AACA,QAAQ,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AACnG;AACA,QAAQ,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,QAAQ,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACrC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAY,OAAO;AACnB,gBAAgB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,gBAAgB,QAAQ,EAAE;AAC1B,aAAa;AACb,QAAQ;AACR,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,OAAO;AACnB,gBAAgB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,gBAAgB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AACnC,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,QAAQ,EAAE;AAC1B,aAAa;AACb,QAAQ;AACR,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,OAAO;AACnB,gBAAgB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,gBAAgB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AACnC,gBAAgB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,gBAAgB,QAAQ,EAAE;AAC1B,aAAa;AACb,QAAQ;AACR,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC,gEAAgE,CAAC,CAAC;AAC9H,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AAC3E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE;AACtC,QAAQ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC5C,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AAC5C,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AACpE,oBAAoB,IAAI,UAAU,EAAE;AACpC,wBAAwB,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,wBAAwB,OAAO,UAAU,CAAC;AAC1C,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,OAAO,KAAK,EAAE;AAC9B,oBAAoB,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAClG;AACA,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,SAAS,CAAC;AACzB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE;AACvC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,IAAI;AACJ;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,UAAU,EAAE;AACpC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;AACtD,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC1D,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,OAAO,UAAU,CAAC;AAC9B,QAAQ;AACR,QAAQ,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC;AACxE;AACA,QAAQ,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AACrC,YAAY,MAAM,EAAE,CAAC,OAAO,CAAC;AAC7B,QAAQ;AACR,QAAQ,OAAO,OAAO,CAAC,UAAU;AACjC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,IAAI,EAAE;AAC/B,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,iBAAiB;AACxD,YAAY,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC,oBAAoB;AAC9D,YAAY,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,iBAAiB;AACxD,YAAY,SAAS,OAAO,EAAE;AAC9B;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE;AACtC,QAAQ,QAAQ,QAAQ,CAAC,IAAI;AAC7B,YAAY,KAAK,QAAQ;AACzB,gBAAgB,OAAO,IAAI,cAAc,CAAC,UAAU,CAAC;AACrD,YAAY,KAAK,WAAW;AAC5B;AACA;AACA,gBAAgB,MAAM,gBAAgB,GAAG;AACzC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,MAAM;AACzC,oBAAoB,KAAK,EAAE,QAAQ,CAAC,MAAM;AAC1C,oBAAoB,UAAU,EAAE,CAAC,UAAU;AAC3C,iBAAiB;AACjB,gBAAgB,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC;AACzE,gBAAgB,OAAO,IAAI,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC;AACtE,YAAY,KAAK,QAAQ;AACzB;AACA;AACA,gBAAgB,MAAM,yBAAyB,GAAG;AAClD,oBAAoB,IAAI,EAAE,QAAQ,CAAC,SAAS;AAC5C,oBAAoB,KAAK,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;AACnD,oBAAoB,QAAQ,EAAE,CAAC,UAAU,CAAC;AAC1C,oBAAoB,SAAS,EAAE,EAAE;AACjC,oBAAoB,WAAW,EAAE,EAAE;AACnC,oBAAoB,OAAO,EAAE;AAC7B,iBAAiB;AACjB,gBAAgB,MAAM,sBAAsB,GAAG;AAC/C,oBAAoB,IAAI,EAAE,QAAQ,CAAC,MAAM;AACzC,oBAAoB,KAAK,EAAE,QAAQ,CAAC,MAAM;AAC1C,oBAAoB,UAAU,EAAE,CAAC,yBAAyB;AAC1D,iBAAiB;AACjB,gBAAgB,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC,sBAAsB,CAAC;AAC/E,gBAAgB,MAAM,eAAe,GAAG,IAAI,iBAAiB,CAAC,yBAAyB,EAAE,YAAY,CAAC;AACtG,gBAAgB,OAAO,IAAI,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC;AAC1F,YAAY;AACZ,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI;AAC5C,YAAY,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC1D,SAAS;AACT,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACrL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,CAAC;;AClQb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,CAAC;AAC9B,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,SAAS,CAAC,IAAI,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,IAAI,EAAE;AAC7B,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACtC,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,UAAU,EAAE,aAAa,EAAE;AAClD,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACrD,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,kBAAkB,CAAC,IAAI,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,UAAU,EAAE,aAAa,EAAE;AACrD,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC;AAC9D,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,SAAS,CAAC,IAAI,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE;AAClE,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACnC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,IAAI,EAAE;AAC7B,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACtC,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,UAAU,CAAC,WAAW,EAAE;AAClC,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,CAAC,cAAc,EAAE;AACxC,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,CAAC,WAAW,EAAE;AACnC,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,kBAAkB,CAAC,UAAU,EAAE;AACzC;AACA;AACA,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,CAAC,UAAU,EAAE;AAC1C,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACvD,QAAQ,OAAO,MAAM,CAAC,gBAAgB,EAAE;AACxC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,4BAA4B,CAAC,UAAU,EAAE,aAAa,EAAE;AAClE,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC;AAC5E,QAAQ,OAAO,SAAS,CAAC,gBAAgB;AACzC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,cAAc,CAAC,UAAU,EAAE;AACrC,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC3D,YAAY,OAAO,MAAM,CAAC,QAAQ,EAAE;AACpC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,CAAC,uBAAuB,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;AACzH,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE;AACvD,QAAQ,IAAI;AACZ,YAAY,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC;AAChF,YAAY,OAAO,SAAS,CAAC,QAAQ,EAAE;AACvC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;AAC7I,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,CAAC,UAAU,EAAE;AAC1C,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACvD,QAAQ,OAAO,MAAM,CAAC,aAAa,EAAE;AACrC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE;AAC5D,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC;AAC5E,QAAQ,OAAO,SAAS,CAAC,aAAa,EAAE;AACxC,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,eAAe,CAAC,IAAI,EAAE;AAC1B,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACrC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;AACvD,QAAQ;AACR,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;AAC/E,QAAQ;AACR,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC9F,QAAQ;AACR,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;AACzC,QAAQ,IAAI,MAAM,IAAI,SAAS,EAAE;AACjC,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,QAAQ;AACR,aAAa,IAAI,SAAS,EAAE;AAC5B,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3C,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,MAAM;AACzB,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACpL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,CAAC;;ACjTb;;ACEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAE;AAC9C,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,uBAAuB;AAC5C,YAAY,UAAU,EAAE,YAAY;AACpC,gBAAgB,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC;AACrF,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB;AACA,gBAAgB,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE;AACpD,oBAAoB,IAAI;AACxB,wBAAwB,IAAI,cAAc;AAC1C,wBAAwB,IAAI,QAAQ;AACpC,wBAAwB,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;AAChE;AACA,4BAA4B,cAAc,GAAG,IAAI,YAAY,EAAE;AAC/D,4BAA4B,QAAQ,GAAG,cAAc,CAAC,QAAQ;AAC9D,wBAAwB;AACxB,6BAA6B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,SAAS,IAAI,YAAY,EAAE;AAChG;AACA,4BAA4B,cAAc,GAAG,YAAY;AACzD,4BAA4B,QAAQ,GAAG,cAAc,CAAC,QAAQ;AAC9D,wBAAwB;AACxB,6BAA6B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,QAAQ,IAAI,YAAY,EAAE;AAC/F;AACA,4BAA4B,IAAI,OAAO,YAAY,CAAC,MAAM,KAAK,UAAU,EAAE;AAC3E,gCAAgC,cAAc,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE;AAC1E,4BAA4B;AAC5B,iCAAiC;AACjC,gCAAgC,cAAc,GAAG,YAAY,CAAC,MAAM;AACpE,4BAA4B;AAC5B,4BAA4B,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ;AACvF,wBAAwB;AACxB,6BAA6B;AAC7B,4BAA4B,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,YAAY,CAAC;AACvF,4BAA4B;AAC5B,wBAAwB;AACxB;AACA,wBAAwB,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,cAAc,CAAC,QAAQ,EAAE;AAC5F,4BAA4B,cAAc,CAAC,QAAQ,GAAG,QAAQ;AAC9D,wBAAwB;AACxB,wBAAwB,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC;AAC1D,wBAAwB,OAAO,CAAC,GAAG,CAAC,CAAC,4BAA4B,EAAE,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjJ,oBAAoB;AACpB,oBAAoB,OAAO,KAAK,EAAE;AAClC,wBAAwB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC;AACjF,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,MAAM,EAAE;AAC5C,IAAI,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AACzC;AACA;;ACnGA;AACA;AACA;AACA;AACY,MAAC,2BAA2B,GAAG;AAC/B,MAAC,8BAA8B,GAAG;AAClC,MAAC,2BAA2B,GAAG;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,UAAU,EAAE;AACpD,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,2BAA2B;AAChD,YAAY,UAAU,EAAE,MAAM;AAC9B;AACA,gBAAgB,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC;AAChG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB;AACA,gBAAgB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AAC7C,oBAAoB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACpD,gBAAgB;AAChB,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAC5F,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,0BAA0B,CAAC,UAAU,EAAE;AACvD,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,8BAA8B;AACnD,YAAY,UAAU,EAAE,MAAM;AAC9B;AACA,gBAAgB,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC;AACnG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB;AACA,gBAAgB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AAC7C,oBAAoB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;AACvD,gBAAgB;AAChB,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAC/F,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,UAAU,EAAE;AACpD,IAAI,OAAO,wBAAwB,CAAC;AACpC,QAAQ;AACR,YAAY,OAAO,EAAE,2BAA2B;AAChD,YAAY,UAAU,EAAE,MAAM;AAC9B;AACA,gBAAgB,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC;AAChG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB;AACA,gBAAgB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AAC7C,oBAAoB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACpD,gBAAgB;AAChB,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAC5F,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB;AACA,KAAK,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,MAAM,EAAE;AAChD,IAAI,MAAM,YAAY,GAAG,EAAE;AAC3B;AACA,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,QAAQ,YAAY,CAAC,IAAI,CAAC;AAC1B,YAAY,OAAO,EAAE,2BAA2B;AAChD,YAAY,UAAU,EAAE,MAAM;AAC9B,gBAAgB,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC;AAChG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB,gBAAgB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;AACjD,oBAAoB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACpD,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3D,QAAQ,YAAY,CAAC,IAAI,CAAC;AAC1B,YAAY,OAAO,EAAE,8BAA8B;AACnD,YAAY,UAAU,EAAE,MAAM;AAC9B,gBAAgB,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC;AACnG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB,gBAAgB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE;AACpD,oBAAoB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;AACvD,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,QAAQ,YAAY,CAAC,IAAI,CAAC;AAC1B,YAAY,OAAO,EAAE,2BAA2B;AAChD,YAAY,UAAU,EAAE,MAAM;AAC9B,gBAAgB,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB;AAC9D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC;AAChG,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB,gBAAgB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE;AAClD,oBAAoB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACpD,gBAAgB;AAChB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,CAAC;AACb,YAAY,KAAK,EAAE;AACnB,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,wBAAwB,CAAC,YAAY,CAAC;AACjD;AACA;;ACxQA;AACA;AAaA;;ACYA;;AC1BA;AACA;AACA;;;;"}
|