@acorex-platform/framework-client 0.0.32 → 0.0.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-framework-client-auth.mjs +172 -17
- package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-common-settings-dialog.helper-DQNOCRL6.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-common.mjs +17 -34
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +81 -72
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +8 -8
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bu8LLCVa.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-C74cBc-K.mjs} +858 -253
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-C74cBc-K.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-EU1dgVH_.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-B6nG9dIS.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-EU1dgVH_.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-B6nG9dIS.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DNBhGkO8.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DLQA_Q2Y.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DNBhGkO8.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-DLQA_Q2Y.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-B3__csKW.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-B3__csKW.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DtNSVjeF.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-B4wC1iqZ.mjs} +3 -3
- package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-B4wC1iqZ.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +3 -3
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +16 -10
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs.map → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-D7P08nHH.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-D7P08nHH.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1236 -1278
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +2 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-CT7WWWG0.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs.map → acorex-platform-framework-client-themes-default-entity-master-create-view.component-CT7WWWG0.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DienTcPE.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs.map → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DienTcPE.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs.map → acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs → acorex-platform-framework-client-themes-default-error-401.component-CaV3MdRr.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs.map → acorex-platform-framework-client-themes-default-error-401.component-CaV3MdRr.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs → acorex-platform-framework-client-themes-default-error-404.component-CTA-lxYp.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs.map → acorex-platform-framework-client-themes-default-error-404.component-CTA-lxYp.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs → acorex-platform-framework-client-themes-default-error-offline.component-B85b0lsa.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs.map → acorex-platform-framework-client-themes-default-error-offline.component-B85b0lsa.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +22 -22
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +40 -29
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-auth.d.ts +56 -10
- package/types/acorex-platform-framework-client-common.d.ts +11 -9
- package/types/acorex-platform-framework-client-layout-components.d.ts +28 -9
- package/types/acorex-platform-framework-client-layout-entity.d.ts +55 -23
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +43 -152
- package/types/acorex-platform-framework-client-realtime.d.ts +20 -2
- package/types/acorex-platform-framework-client-themes-default.d.ts +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bu8LLCVa.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DtNSVjeF.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-framework-client-runtime.mjs","sources":["../../../../../libs/framework/client/runtime/src/lib/runtime-remote.hooks.ts","../../../../../libs/framework/client/runtime/src/lib/commands/bulk-command.service.ts","../../../../../libs/framework/client/runtime/src/lib/commands/bulk-progress.channel.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command-events.service.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.registry.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.executor.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.service.ts","../../../../../libs/framework/client/runtime/src/lib/commands/provide-command-middleware.ts","../../../../../libs/framework/client/runtime/src/lib/commands/provide-command-setups.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.registry.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/queries/provide-query-middleware.ts","../../../../../libs/framework/client/runtime/src/lib/queries/provide-query-setups.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query-events.service.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.executor.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.service.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.registry.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.executor.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.service.ts","../../../../../libs/framework/client/runtime/src/lib/views/provide-view-setups.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.interface.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.registry.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.service.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.directive.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy-middleware-provider.ts","../../../../../libs/framework/client/runtime/src/lib/views/provide-view-middleware.ts","../../../../../libs/framework/client/runtime/src/lib/runtime.module.ts","../../../../../libs/framework/client/runtime/src/lib/runtime-transport.hooks.ts","../../../../../libs/framework/client/runtime/src/lib/runtime-transport.service.ts","../../../../../libs/framework/client/runtime/src/lib/provide-external-runtime-bulk-transport.ts","../../../../../libs/framework/client/runtime/src/lib/provide-external-runtime-command-transport.ts","../../../../../libs/framework/client/runtime/src/lib/provide-external-runtime-query-transport.ts","../../../../../libs/framework/client/runtime/src/lib/provide-bulk-progress-channel.ts","../../../../../libs/framework/client/runtime/src/index.ts","../../../../../libs/framework/client/runtime/src/acorex-platform-framework-client-runtime.ts"],"sourcesContent":["import type {\n AXPRuntimeCommandResult,\n AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBulkCommandProgress,\n AXPBulkCommandRequest,\n AXPBulkCommandResultData,\n AXPCommandExecuteOptions,\n AXPQueryExecuteOptions,\n} from '@acorex-platform/framework-shared/runtime';\n\n//#region ---- Runtime remote execute hooks ----\n\n/**\n * Distributed hook keys for remote (non-local) command/query execution.\n * Connectivity (or another transport) implements these via {@link AXPHookService.runAsync}.\n *\n * Official Nest / demo-api hosts import `AXCRuntimeRemoteApiModule` from\n * `@acorex-platform/client-connectivity-api` (also wired by `AXMSettingsManagementModule`).\n *\n * Host apps that only consume the client lib and call a different API stack should\n * register {@link provideExternalRuntimeQueryTransport},\n * {@link provideExternalRuntimeCommandTransport},\n * {@link provideExternalRuntimeBulkTransport} for {@link AXPRuntimeRemoteHookKeys.CommandExecuteBulk},\n * and {@link provideBulkProgressPollTransport} for {@link AXPRuntimeRemoteHookKeys.CommandBulkProgress}\n * (see `RUNTIME_REMOTE_BULK_TRANSPORT.md`).\n */\nexport const AXPRuntimeRemoteHookKeys = {\n CommandExecute: 'runtime.command.execute',\n CommandExecuteBulk: 'runtime.command.execute-bulk',\n CommandBulkProgress: 'runtime.command.bulk-progress',\n QueryExecute: 'runtime.query.execute',\n} as const;\n\nexport interface AXPRuntimeCommandExecuteHookPayload {\n name: string;\n input: unknown;\n /** Execute knobs — forwarded to the server; not command business input. */\n options?: AXPCommandExecuteOptions;\n /** Set by a provider when it handled the remote call (even if success is false). */\n handled?: boolean;\n result?: AXPRuntimeCommandResult | null;\n}\n\nexport interface AXPRuntimeCommandExecuteBulkHookPayload {\n request: AXPBulkCommandRequest;\n /** Set by a provider when it handled the remote call (even if success is false). */\n handled?: boolean;\n result?: AXPRuntimeCommandResult<AXPBulkCommandResultData> | null;\n}\n\nexport interface AXPRuntimeCommandBulkProgressHookPayload {\n executionId: string;\n /** Set by a provider when it handled the remote call. */\n handled?: boolean;\n progress?: AXPBulkCommandProgress | null;\n}\n\nexport interface AXPRuntimeQueryExecuteHookPayload {\n name: string;\n input: unknown;\n /** Execute knobs (snapshot, …) — forwarded to the server; not query business input. */\n options?: AXPQueryExecuteOptions;\n /** Set by a provider when it handled the remote call. */\n handled?: boolean;\n /** Full runtime query envelope (same shape as local {@link AXPQuery.fetch}). */\n result?: AXPRuntimeQueryResult | null;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBulkCommandRequest,\n AXPBulkCommandResultData, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteBulkHookPayload,\n} from '../runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Bulk command client ----\n\n/**\n * Invokes filter-only bulk execution via the remote hook transport\n * (`runtime.command.execute-bulk`).\n *\n * Default connectivity posts to `/v1/runtime/commands/bulk`. Host apps on another\n * API stack should register {@link provideExternalRuntimeBulkTransport} instead —\n * this service never fans out one-by-one on the client.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBulkCommandService {\n private readonly hooks = inject(AXPHookService);\n\n async execute(request: AXPBulkCommandRequest): AXPCommandExecuteResultPromise<AXPBulkCommandResultData> {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteBulkHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecuteBulk,\n { request },\n );\n\n if (!payload.handled) {\n throw new Error('Bulk command remote handler is not available');\n }\n\n return (\n payload.result ?? {\n success: false,\n message: {\n text: 'Bulk command returned no result.',\n details: { total: 0, succeeded: 0, failed: 0, results: [] },\n },\n }\n );\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable, NgZone } from '@angular/core';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport type { AXPBulkCommandProgress } from '@acorex-platform/framework-shared/runtime';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandBulkProgressHookPayload,\n} from '../runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPBulkProgressWatchOptions {\n /**\n * `true` — poll GET /progress (socket down).\n * `false` / omitted — socket only; never call GET /progress.\n */\n poll?: boolean;\n /** Poll interval when `poll` is enabled. Default 250ms. */\n intervalMs?: number;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_POLL_INTERVAL_MS = 250;\n\n//#endregion\n\n//#region ---- Bulk progress channel ----\n\n/**\n * Actor-only progress bus for in-flight bulk commands.\n *\n * Prefer realtime (`runtime.bulk.progress` → {@link notify}).\n * GET /progress only when the caller sets `poll: true` (socket down).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBulkProgressChannel {\n private readonly hooks = inject(AXPHookService);\n private readonly zone = inject(NgZone);\n private readonly subject = new Subject<AXPBulkCommandProgress>();\n\n /** Called by the realtime topic handler when a socket tick arrives. */\n notify(progress: AXPBulkCommandProgress): void {\n const executionId = progress?.executionId?.trim();\n if (!executionId) {\n return;\n }\n this.emit(progress, executionId);\n }\n\n watch(executionId: string, options?: AXPBulkProgressWatchOptions): Observable<AXPBulkCommandProgress> {\n const id = executionId.trim();\n const stream = this.subject.pipe(filter((progress) => progress.executionId === id));\n if (!options?.poll) {\n return stream;\n }\n\n const intervalMs =\n typeof options?.intervalMs === 'number' && options.intervalMs > 0\n ? options.intervalMs\n : DEFAULT_POLL_INTERVAL_MS;\n\n return new Observable((subscriber) => {\n const sub = stream.subscribe(subscriber);\n const timer = setInterval(() => {\n void this.pollOnce(id);\n }, intervalMs);\n\n return () => {\n sub.unsubscribe();\n this.clearPoll(timer);\n };\n });\n }\n\n private emit(progress: AXPBulkCommandProgress, executionId: string): void {\n this.zone.run(() => {\n this.subject.next({ ...progress, executionId });\n });\n }\n\n private clearPoll(timer: ReturnType<typeof setInterval> | undefined): void {\n if (timer !== undefined) {\n clearInterval(timer);\n }\n }\n\n private async pollOnce(executionId: string): Promise<void> {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandBulkProgressHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandBulkProgress,\n { executionId },\n );\n if (payload.handled && payload.progress) {\n const id = payload.progress.executionId?.trim() || executionId;\n this.emit(payload.progress, id);\n }\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPDistributedEventListenerService } from '@acorex-platform/framework-client/core';\nimport type { AXPCommandExecuteOptions } from '@acorex-platform/framework-shared/runtime';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPCommandExecutionStage = 'before' | 'after';\n\nexport interface AXPCommandExecutionEvent<TInput = unknown, TResult = unknown> {\n executionId: string;\n stage: AXPCommandExecutionStage;\n key: string;\n input: TInput;\n options?: AXPCommandExecuteOptions;\n success?: boolean;\n result?: AXPRuntimeCommandResult<TResult> | null;\n error?: unknown;\n durationMs?: number;\n}\n\ntype CommandExecutionHandler<TInput, TResult> = (event: AXPCommandExecutionEvent<TInput, TResult>) => void;\n\n//#endregion\n\nconst COMMAND_EXECUTION_EVENT_KEY = '@commands:execution';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandEventsService {\n //#region ---- Services & Dependencies ----\n\n private readonly broadcast = inject(AXPBroadcastEventService);\n private readonly distributedEvents = inject(AXPDistributedEventListenerService, { optional: true });\n\n //#endregion\n\n //#region ---- Public API ----\n\n listen<TInput = unknown, TResult = unknown>(\n handler: CommandExecutionHandler<TInput, TResult>,\n ): () => void {\n const subscription = this.broadcast\n .listen<AXPCommandExecutionEvent<TInput, TResult>>(COMMAND_EXECUTION_EVENT_KEY)\n .subscribe(({ data }) => handler(data));\n\n return () => subscription.unsubscribe();\n }\n\n async emit<TInput = unknown, TResult = unknown>(\n event: AXPCommandExecutionEvent<TInput, TResult>,\n ): Promise<void> {\n const safePayload = this.serializeForBroadcast(event);\n this.broadcast.publish(COMMAND_EXECUTION_EVENT_KEY, safePayload);\n await this.distributedEvents?.dispatch(COMMAND_EXECUTION_EVENT_KEY, safePayload);\n }\n\n //#endregion\n\n //#region ---- Broadcast payload (structured-clone safe) ----\n\n /**\n * Removes functions, symbols, and cycles so {@link AXPBroadcastEventService.publish}\n * can use `BroadcastChannel.postMessage` without DataCloneError (e.g. command input with `dialogRef`).\n */\n private serializeForBroadcast<TInput, TResult>(\n event: AXPCommandExecutionEvent<TInput, TResult>,\n ): AXPCommandExecutionEvent {\n return {\n executionId: event.executionId,\n stage: event.stage,\n key: event.key,\n success: event.success,\n durationMs: event.durationMs,\n input: this.stripNonSerializable(event.input),\n result:\n event.result === undefined || event.result === null\n ? event.result\n : (this.stripNonSerializable(event.result) as AXPRuntimeCommandResult<TResult>),\n error:\n event.error instanceof Error\n ? { name: event.error.name, message: event.error.message }\n : this.stripNonSerializable(event.error),\n };\n }\n\n private stripNonSerializable(value: unknown): unknown {\n const seen = new WeakSet<object>();\n\n const walk = (v: unknown): unknown => {\n if (v === null || v === undefined) {\n return v;\n }\n const t = typeof v;\n if (t === 'function' || t === 'symbol') {\n return undefined;\n }\n if (t === 'bigint') {\n return v.toString();\n }\n if (t !== 'object') {\n return v;\n }\n if (v instanceof Date) {\n return v.toISOString();\n }\n if (Array.isArray(v)) {\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n return v.map((item) => walk(item)).filter((item) => item !== undefined);\n }\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n const obj = v as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n const child = walk(obj[key]);\n if (child !== undefined) {\n out[key] = child;\n }\n }\n return out;\n };\n\n return walk(value);\n }\n\n //#endregion\n}\n\n","import { Injectable } from '@angular/core';\nimport { AXPCommand, type AXPCommandMiddleware } from '@acorex-platform/framework-shared/runtime';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandRegistry {\n private registry = new Map<string, () => Promise<AXPCommand>>();\n private middlewares: AXPCommandMiddleware[] = [];\n\n register(key: string, loader: () => Promise<AXPCommand>): void {\n this.registry.set(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.delete(key);\n }\n\n use(middleware: AXPCommandMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getLoader(key: string): (() => Promise<AXPCommand>) | undefined {\n return this.registry.get(key);\n }\n\n getMiddlewares(): readonly AXPCommandMiddleware[] {\n return [...this.middlewares];\n }\n\n getRegisteredKeys(): string[] {\n return Array.from(this.registry.keys());\n }\n\n clear(): void {\n this.registry.clear();\n this.middlewares.length = 0;\n }\n}\n","// plugins/command.extension.token.ts\nimport { InjectionToken } from '@angular/core';\nimport type { AXPCommandMiddleware } from '@acorex-platform/framework-shared/runtime';\n\nexport interface AXPCommandExtension {\n target: string | RegExp;\n middleware: AXPCommandMiddleware;\n}\n\nexport const AXP_COMMAND_EXTENSION = new InjectionToken<AXPCommandExtension[]>('AXP_COMMAND_EXTENSION');\n","import { EnvironmentInjector, Injectable, inject, runInInjectionContext } from '@angular/core';\nimport { AXPRuntimeCommandResult, createRandomUuid } from '@acorex-platform/framework-shared/core';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\n\nimport {\n composeCommandMiddlewares,\n normalizeCommandInputForRemote,\n type AXPCommandExecuteOptions,\n type AXPCommandExecuteResultPromise,\n type AXPCommandMiddleware,\n type AXPCommandMiddlewareContext,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXP_COMMAND_EXTENSION } from './command.extension.token';\nimport { AXPCommandEventsService, AXPCommandExecutionEvent } from './command-events.service';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteHookPayload,\n} from '../runtime-remote.hooks';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandExecutor {\n private readonly injector = inject(EnvironmentInjector);\n private readonly registry = inject(AXPCommandRegistry);\n private readonly extensions = inject(AXP_COMMAND_EXTENSION, { optional: true });\n private readonly commandEvents = inject(AXPCommandEventsService);\n private readonly hooks = inject(AXPHookService);\n\n async execute<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n const handler = this.registry.exists(key)\n ? await this.createLocalHandler<TInput, TResult>(key)\n : this.createRemoteHandler<TInput, TResult>(key);\n\n return this.runWithMiddlewareAndEvents(key, input, handler, options);\n }\n\n /**\n * Always dispatch via {@link AXPRuntimeRemoteHookKeys.CommandExecute}, even when a local\n * command is registered for the same key. Use from gateway/API clients that wrap remote\n * handlers so local UI commands can call them without async recursion.\n *\n * Skips command middlewares (e.g. toast): the local wrapper owns UX. Running toast\n * middleware here would double-notify when the wrapper also returns a failure message.\n */\n async executeRemote<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n return this.runWithEvents(\n key,\n input,\n () => this.createRemoteHandler<TInput, TResult>(key)(input, options),\n options,\n );\n }\n\n private async createLocalHandler<TInput, TResult>(\n key: string,\n ): Promise<(input: TInput) => AXPCommandExecuteResultPromise<TResult>> {\n const loader = this.registry.getLoader(key);\n if (!loader) {\n throw new Error(`Command '${key}' is not registered`);\n }\n\n const command = await loader();\n return (i: TInput) => command.execute(i) as AXPCommandExecuteResultPromise<TResult>;\n }\n\n private createRemoteHandler<TInput, TResult>(\n key: string,\n ): (\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ) => Promise<AXPRuntimeCommandResult<TResult> | null> {\n return async (input: TInput, options?: AXPCommandExecuteOptions) => {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecute,\n {\n name: key,\n input: normalizeCommandInputForRemote(input),\n options,\n },\n );\n\n if (!payload.handled) {\n throw new Error(`Command '${key}' is not registered and no remote handler is available`);\n }\n\n return (payload.result ?? null) as AXPRuntimeCommandResult<TResult> | null;\n };\n }\n\n private async runWithMiddlewareAndEvents<TInput, TResult>(\n key: string,\n input: TInput,\n handler: (\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ) => Promise<AXPRuntimeCommandResult<TResult> | null>,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n const pluginMiddlewares = this.getPluginMiddlewares(key);\n const globalMiddlewares = this.registry.getMiddlewares();\n\n // Registry middlewares are untyped (any); re-wrap in injection context.\n const wrappedMiddlewares: AXPCommandMiddleware<TInput, TResult>[] = [\n ...globalMiddlewares,\n ...pluginMiddlewares,\n ].map((middleware) => {\n const wrapped: AXPCommandMiddleware<TInput, TResult> = (context, next) =>\n runInInjectionContext(this.injector, () =>\n middleware(\n context as AXPCommandMiddlewareContext,\n next as (ctx: AXPCommandMiddlewareContext) => AXPCommandExecuteResultPromise,\n ),\n ) as AXPCommandExecuteResultPromise<TResult>;\n return wrapped;\n });\n\n const composed = composeCommandMiddlewares(wrappedMiddlewares)(\n (context) =>\n handler(context.input, context.options) as AXPCommandExecuteResultPromise<TResult>,\n );\n\n return this.runWithEvents(key, input, () => composed({ input, key, options }), options);\n }\n\n private async runWithEvents<TInput, TResult>(\n key: string,\n input: TInput,\n run: () => Promise<AXPRuntimeCommandResult<TResult> | null>,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n const executionId = createRandomUuid();\n const startedAt = performance.now();\n\n const beforeEvent = {\n executionId,\n stage: 'before' as const,\n key,\n input,\n options,\n } satisfies AXPCommandExecutionEvent<TInput>;\n\n await this.commandEvents.emit(beforeEvent);\n\n try {\n const result = await run();\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: true,\n result,\n durationMs,\n } satisfies AXPCommandExecutionEvent<TInput, TResult>;\n\n await this.commandEvents.emit(afterEvent);\n\n return result;\n } catch (error) {\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: false,\n error,\n durationMs,\n } satisfies AXPCommandExecutionEvent<TInput, TResult>;\n\n await this.commandEvents.emit(afterEvent);\n\n throw error;\n }\n }\n\n private getPluginMiddlewares(key: string): AXPCommandMiddleware[] {\n return (\n this.extensions\n ?.filter((ext) => (ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key))\n .map((ext) => ext.middleware) ?? []\n );\n }\n}\n","/**\n * Re-exports shared command middleware contracts.\n * Registration stays client-side (`provideCommandMiddleware` / registry.use).\n */\nexport {\n composeCommandMiddlewares,\n type AXPCommandExecuteOptions,\n type AXPCommandMiddleware,\n type AXPCommandMiddlewareContext,\n} from '@acorex-platform/framework-shared/runtime';\n","import { Injectable, inject } from '@angular/core';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXPCommand,\n type AXPCommandExecuteOptions,\n type AXPCommandMiddleware,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXPCommandExecutor } from './command.executor';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandService {\n private readonly registry = inject(AXPCommandRegistry);\n private readonly executor = inject(AXPCommandExecutor);\n\n // Registry methods\n register(key: string, loader: () => Promise<AXPCommand>): void {\n this.registry.register(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.unregister(key);\n }\n\n use(middleware: AXPCommandMiddleware): void {\n this.registry.use(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.exists(key);\n }\n\n getRegisteredKeys(): string[] {\n return this.registry.getRegisteredKeys();\n }\n\n clear(): void {\n this.registry.clear();\n }\n\n // Executor methods\n async execute<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n return this.executor.execute<TInput, TResult>(key, input, options);\n }\n\n /**\n * Force remote transport for {@code key}, ignoring any local command registration.\n * Prefer this in gateway/API clients used by local UI command wrappers.\n */\n async executeRemote<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n return this.executor.executeRemote<TInput, TResult>(key, input, options);\n }\n}\n","import {\n EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders\n} from '@angular/core';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXPCommandMiddleware } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_COMMAND_EXTENSION } from './command.extension.token';\n\nexport const AXP_COMMAND_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_COMMAND_MIDDLEWARE_SETUP');\n\ntype AXPCommandMiddlewareEntry =\n (AXPCommandMiddleware | { target: string | RegExp; middleware: AXPCommandMiddleware })[];\n\nexport function provideCommandMiddleware(\n entries: AXPCommandMiddlewareEntry\n): EnvironmentProviders {\n const global: AXPCommandMiddleware[] = [];\n const extensions: { target: string | RegExp; middleware: AXPCommandMiddleware }[] = [];\n\n for (const entry of entries) {\n if (typeof entry === 'function') {\n global.push(entry);\n } else {\n extensions.push(entry);\n }\n }\n\n return makeEnvironmentProviders([\n // Plugin middleware entries\n ...extensions.map(ext => ({\n provide: AXP_COMMAND_EXTENSION,\n useValue: ext,\n multi: true\n })),\n\n // Global middleware setup — multi so every provideCommandMiddleware() registers its globals\n {\n provide: AXP_COMMAND_MIDDLEWARE_SETUP,\n multi: true,\n useFactory: () => {\n const registry = inject(AXPCommandRegistry);\n for (const mw of global) {\n registry.use(mw);\n }\n return true;\n }\n }\n ]);\n}","import { EnvironmentInjector, EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, runInInjectionContext, Type } from '@angular/core';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXPCommand } from '@acorex-platform/framework-shared/runtime';\n\n\nexport const AXP_COMMAND_SETUP = new InjectionToken<void>('AXP_COMMAND_SETUP');\n\n\ntype AXPCommandLoader = {\n key: string;\n command: () => Type<AXPCommand> | Promise<Type<AXPCommand>>;\n};\n\n\nexport function provideCommandSetups(entries: AXPCommandLoader[]): EnvironmentProviders {\n\n return makeEnvironmentProviders([\n {\n provide: AXP_COMMAND_SETUP,\n useFactory: () => {\n const registry = inject(AXPCommandRegistry);\n const injector = inject(EnvironmentInjector);\n\n for (const entry of entries) {\n registry.register(entry.key, async () => {\n const CommandType = await entry.command();\n // Try to get from DI first, if fails create new instance\n try {\n return injector.get(CommandType);\n } catch (e) {\n // If not in DI (e.g., for activities), create new instance\n return runInInjectionContext(injector, () => new CommandType());\n }\n });\n }\n\n return true;\n },\n multi: true\n }\n ]);\n}\n\n\nexport function provideCommand(\n key: string,\n loader: () => Type<AXPCommand> | Promise<Type<AXPCommand>>\n): EnvironmentProviders {\n return provideCommandSetups([\n {\n key,\n command: loader\n }\n ]);\n}\n\n\n","// queries/query.registry.ts\nimport { Injectable } from '@angular/core';\nimport { AXPQuery, type AXPQueryMiddleware } from '@acorex-platform/framework-shared/runtime';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryRegistry {\n private registry = new Map<string, () => Promise<AXPQuery>>();\n private middlewares: AXPQueryMiddleware[] = [];\n\n register(key: string, loader: () => Promise<AXPQuery>): void {\n this.registry.set(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.delete(key);\n }\n\n use(middleware: AXPQueryMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getLoader(key: string): (() => Promise<AXPQuery>) | undefined {\n return this.registry.get(key);\n }\n\n getMiddlewares(): readonly AXPQueryMiddleware[] {\n return [...this.middlewares];\n }\n\n getRegisteredKeys(): string[] {\n return Array.from(this.registry.keys());\n }\n\n clear(): void {\n this.registry.clear();\n this.middlewares.length = 0;\n }\n}\n","// plugins/query.extension.token.ts\nimport { InjectionToken } from '@angular/core';\nimport type { AXPQueryMiddleware } from '@acorex-platform/framework-shared/runtime';\n\nexport interface AXPQueryExtension {\n target: string | RegExp;\n middleware: AXPQueryMiddleware;\n}\n\nexport const AXP_QUERY_EXTENSION = new InjectionToken<AXPQueryExtension[]>('AXP_QUERY_EXTENSION');\n","import {\n EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders\n} from '@angular/core';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXPQueryMiddleware } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_QUERY_EXTENSION } from './query.extension.token';\n\nexport const AXP_QUERY_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_QUERY_MIDDLEWARE_SETUP');\n\ntype AXPQueryMiddlewareEntry =\n (AXPQueryMiddleware | { key?: string; target?: string | RegExp; middleware: AXPQueryMiddleware })[];\n\nexport function provideQueryMiddleware(\n entries: AXPQueryMiddlewareEntry\n): EnvironmentProviders {\n const global: AXPQueryMiddleware[] = [];\n const extensions: { target: string | RegExp; middleware: AXPQueryMiddleware }[] = [];\n\n for (const entry of entries) {\n if (typeof entry === 'function') {\n global.push(entry);\n } else {\n const target = entry.target ?? entry.key;\n if (target == null) {\n throw new Error('provideQueryMiddleware: targeted entry requires `target` or `key`');\n }\n extensions.push({ target, middleware: entry.middleware });\n }\n }\n\n return makeEnvironmentProviders([\n // Plugin middleware entries\n ...extensions.map(ext => ({\n provide: AXP_QUERY_EXTENSION,\n useValue: ext,\n multi: true\n })),\n\n // Global middleware setup — multi so every provideQueryMiddleware() registers its globals\n {\n provide: AXP_QUERY_MIDDLEWARE_SETUP,\n multi: true,\n useFactory: () => {\n const registry = inject(AXPQueryRegistry);\n for (const mw of global) {\n registry.use(mw);\n }\n return true;\n }\n }\n ]);\n} ","import { EnvironmentInjector, EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Provider, Type } from '@angular/core';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXPQuery } from '@acorex-platform/framework-shared/runtime';\n\nexport const AXP_QUERY_SETUP = new InjectionToken<void>('AXP_QUERY_SETUP');\n\ntype AXPQueryLoaderEntry = {\n key: string,\n loader: () => Type<AXPQuery> | Promise<Type<AXPQuery>>;\n};\n\nexport function provideQuerySetups(\n entries: AXPQueryLoaderEntry[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_QUERY_SETUP,\n useFactory: () => {\n const registry = inject(AXPQueryRegistry);\n const injector = inject(EnvironmentInjector);\n\n for (const entry of entries) {\n registry.register(entry.key, async () => {\n const CommandType = await entry.loader();\n return injector.get(CommandType);\n });\n }\n\n return true;\n },\n multi: true\n }\n ]);\n} ","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPDistributedEventListenerService } from '@acorex-platform/framework-client/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPQueryExecutionStage = 'before' | 'after';\n\nexport interface AXPQueryExecutionEvent<TInput = unknown, TResult = unknown> {\n executionId: string;\n stage: AXPQueryExecutionStage;\n key: string;\n input: TInput;\n options?: AXPQueryExecuteOptions;\n success?: boolean;\n result?: TResult | null;\n error?: unknown;\n durationMs?: number;\n}\n\ntype QueryExecutionHandler<TInput, TResult> = (event: AXPQueryExecutionEvent<TInput, TResult>) => void;\n\n//#endregion\n\nconst QUERY_EXECUTION_EVENT_KEY = '@queries:execution';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryEventsService {\n //#region ---- Services & Dependencies ----\n\n private readonly broadcast = inject(AXPBroadcastEventService);\n private readonly distributedEvents = inject(AXPDistributedEventListenerService, { optional: true });\n\n //#endregion\n\n //#region ---- Public API ----\n\n listen<TInput = unknown, TResult = unknown>(\n handler: QueryExecutionHandler<TInput, TResult>,\n ): () => void {\n const subscription = this.broadcast\n .listen<AXPQueryExecutionEvent<TInput, TResult>>(QUERY_EXECUTION_EVENT_KEY)\n .subscribe(({ data }) => handler(data));\n\n return () => subscription.unsubscribe();\n }\n\n async emit<TInput = unknown, TResult = unknown>(\n event: AXPQueryExecutionEvent<TInput, TResult>,\n ): Promise<void> {\n const safePayload = this.serializeForBroadcast(event);\n this.broadcast.publish(QUERY_EXECUTION_EVENT_KEY, safePayload);\n await this.distributedEvents?.dispatch(QUERY_EXECUTION_EVENT_KEY, safePayload);\n }\n\n //#endregion\n\n //#region ---- Broadcast payload ----\n\n private serializeForBroadcast<TInput, TResult>(\n event: AXPQueryExecutionEvent<TInput, TResult>,\n ): AXPQueryExecutionEvent {\n return {\n executionId: event.executionId,\n stage: event.stage,\n key: event.key,\n success: event.success,\n durationMs: event.durationMs,\n input: this.stripNonSerializable(event.input),\n result: event.result === undefined || event.result === null\n ? event.result\n : (this.stripNonSerializable(event.result) as TResult),\n error:\n event.error instanceof Error\n ? { name: event.error.name, message: event.error.message }\n : this.stripNonSerializable(event.error),\n };\n }\n\n private stripNonSerializable(value: unknown): unknown {\n const seen = new WeakSet<object>();\n\n const walk = (v: unknown): unknown => {\n if (v === null || v === undefined) {\n return v;\n }\n const t = typeof v;\n if (t === 'function' || t === 'symbol') {\n return undefined;\n }\n if (t === 'bigint') {\n return v.toString();\n }\n if (t !== 'object') {\n return v;\n }\n if (v instanceof Date) {\n return v.toISOString();\n }\n if (Array.isArray(v)) {\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n return v.map((item) => walk(item)).filter((item) => item !== undefined);\n }\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n const obj = v as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n const child = walk(obj[key]);\n if (child !== undefined) {\n out[key] = child;\n }\n }\n return out;\n };\n\n return walk(value);\n }\n\n //#endregion\n}\n","import { Injectable, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\nimport { createRandomUuid, type AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport {\n composeQueryMiddlewares,\n normalizeCommandInputForRemote,\n type AXPQueryExecuteOptions,\n type AXPQueryMiddleware,\n type AXPQueryMiddlewareContext,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXP_QUERY_EXTENSION } from './query.extension.token';\nimport { AXPQueryEventsService, AXPQueryExecutionEvent } from './query-events.service';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeQueryExecuteHookPayload,\n} from '../runtime-remote.hooks';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryExecutor {\n private readonly injector = inject(EnvironmentInjector);\n private readonly registry = inject(AXPQueryRegistry);\n private readonly extensions = inject(AXP_QUERY_EXTENSION, { optional: true });\n private readonly queryEvents = inject(AXPQueryEventsService);\n private readonly hooks = inject(AXPHookService);\n\n async fetch<TInput = any, TResult = any>(\n key: string,\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n const handler = this.registry.exists(key)\n ? await this.createLocalHandler<TInput, TResult>(key)\n : this.createRemoteHandler<TInput, TResult>(key);\n\n return this.runWithMiddlewareAndEvents(key, input, handler, options);\n }\n\n private async createLocalHandler<TInput, TResult>(\n key: string,\n ): Promise<(input: TInput) => Promise<AXPRuntimeQueryResult<TResult>>> {\n const loader = this.registry.getLoader(key);\n if (!loader) {\n throw new Error(`Query '${key}' is not registered`);\n }\n\n const query = await loader();\n return (i: TInput) => query.fetch(i) as Promise<AXPRuntimeQueryResult<TResult>>;\n }\n\n private createRemoteHandler<TInput, TResult>(\n key: string,\n ): (\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ) => Promise<AXPRuntimeQueryResult<TResult> | null> {\n return async (input: TInput, options?: AXPQueryExecuteOptions) => {\n const payload = await this.hooks.runAsync<AXPRuntimeQueryExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.QueryExecute,\n {\n name: key,\n input: normalizeCommandInputForRemote(input),\n options,\n },\n );\n\n if (!payload.handled) {\n throw new Error(`Query '${key}' is not registered and no remote handler is available`);\n }\n\n return (payload.result ?? null) as AXPRuntimeQueryResult<TResult> | null;\n };\n }\n\n private async runWithMiddlewareAndEvents<TInput, TResult>(\n key: string,\n input: TInput,\n handler: (\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ) => Promise<AXPRuntimeQueryResult<TResult> | null>,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n const pluginMiddlewares = this.getPluginMiddlewares(key);\n const globalMiddlewares = this.registry.getMiddlewares();\n\n type FetchResult = AXPRuntimeQueryResult<TResult> | null;\n\n // Registry middlewares are stored as AXPQueryMiddleware (unknown input/result).\n // Re-wrap in injection context and narrow for this fetch's TInput/TResult.\n const wrappedMiddlewares: AXPQueryMiddleware<TInput, FetchResult>[] = [\n ...globalMiddlewares,\n ...pluginMiddlewares,\n ].map((middleware) => {\n const wrapped: AXPQueryMiddleware<TInput, FetchResult> = (context, next) =>\n runInInjectionContext(this.injector, () =>\n middleware(\n context as AXPQueryMiddlewareContext,\n next as (ctx: AXPQueryMiddlewareContext) => Promise<unknown>,\n ),\n ) as Promise<FetchResult>;\n return wrapped;\n });\n\n const composed = composeQueryMiddlewares(wrappedMiddlewares)((context) =>\n handler(context.input, context.options),\n );\n\n return this.runWithEvents(key, input, () => composed({ input, key, options }), options);\n }\n\n private async runWithEvents<TInput, TResult>(\n key: string,\n input: TInput,\n run: () => Promise<AXPRuntimeQueryResult<TResult> | null>,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n const executionId = createRandomUuid();\n const startedAt = performance.now();\n\n const beforeEvent = {\n executionId,\n stage: 'before' as const,\n key,\n input,\n options,\n } satisfies AXPQueryExecutionEvent<TInput>;\n\n await this.queryEvents.emit(beforeEvent);\n\n try {\n const result = await run();\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: true,\n result,\n durationMs,\n } satisfies AXPQueryExecutionEvent<TInput, AXPRuntimeQueryResult<TResult>>;\n\n await this.queryEvents.emit(afterEvent);\n\n return result;\n } catch (error) {\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: false,\n error,\n durationMs,\n } satisfies AXPQueryExecutionEvent<TInput, AXPRuntimeQueryResult<TResult>>;\n\n await this.queryEvents.emit(afterEvent);\n\n throw error;\n }\n }\n\n private getPluginMiddlewares(key: string): AXPQueryMiddleware[] {\n return (\n this.extensions\n ?.filter((ext) => (ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key))\n .map((ext) => ext.middleware) ?? []\n );\n }\n}\n","/**\n * Re-exports shared query middleware contracts.\n * Registration stays client-side (`provideQueryMiddleware` / registry.use).\n */\nexport {\n composeQueryMiddlewares,\n type AXPQueryExecuteOptions,\n type AXPQueryMiddleware,\n type AXPQueryMiddlewareContext,\n type AXPQuerySnapshotOption,\n} from '@acorex-platform/framework-shared/runtime';\n","import { Injectable, inject } from '@angular/core';\nimport type { AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';\nimport {\n AXPQuery,\n type AXPQueryExecuteOptions,\n type AXPQueryMiddleware,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXPQueryExecutor } from './query.executor';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryService {\n private readonly registry = inject(AXPQueryRegistry);\n private readonly executor = inject(AXPQueryExecutor);\n\n // Registry methods\n register(key: string, loader: () => Promise<AXPQuery>): void {\n this.registry.register(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.unregister(key);\n }\n\n use(middleware: AXPQueryMiddleware): void {\n this.registry.use(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.exists(key);\n }\n\n getRegisteredKeys(): string[] {\n return this.registry.getRegisteredKeys();\n }\n\n clear(): void {\n this.registry.clear();\n }\n\n /** Same envelope pattern as {@link AXPCommandService.execute}. */\n async fetch<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n return this.executor.fetch<TInput, TResult>(key, input, options);\n }\n}","import { AXPViewDefinition } from '@acorex-platform/framework-shared/core';\n\nexport type AXPViewMiddleware<TInput = any> = (\n input: TInput,\n next: (input: TInput) => Promise<AXPViewDefinition>\n) => Promise<AXPViewDefinition>;\n\nexport function composeViewMiddlewares<TInput>(\n middlewares: AXPViewMiddleware<TInput>[]\n): (handler: (input: TInput) => Promise<AXPViewDefinition>) => (input: TInput) => Promise<AXPViewDefinition> {\n return (handler: (input: TInput) => Promise<AXPViewDefinition>) => {\n let composed = handler;\n\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const mw = middlewares[i];\n const next = composed;\n\n composed = (input: TInput) => mw(input, next);\n }\n\n return composed;\n };\n} ","import { Injectable } from '@angular/core';\nimport { AXPViewProvider } from '@acorex-platform/framework-shared/runtime';\nimport { AXPViewMiddleware } from './view.middleware';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPViewRegistry {\n private registry = new Map<string, () => Promise<AXPViewProvider>>();\n private middlewares: AXPViewMiddleware[] = [];\n\n register(key: string, loader: () => Promise<AXPViewProvider>): void {\n this.registry.set(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.delete(key);\n }\n\n use(middleware: AXPViewMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getLoader(key: string): (() => Promise<AXPViewProvider>) | undefined {\n return this.registry.get(key);\n }\n\n getMiddlewares(): readonly AXPViewMiddleware[] {\n return [...this.middlewares];\n }\n\n getRegisteredKeys(): string[] {\n return Array.from(this.registry.keys());\n }\n\n clear(): void {\n this.registry.clear();\n this.middlewares.length = 0;\n }\n} ","import { InjectionToken } from '@angular/core';\nimport { AXPViewMiddleware } from './view.middleware';\n\nexport interface AXPViewExtension {\n target: string | RegExp;\n middleware: AXPViewMiddleware;\n}\n\nexport const AXP_VIEW_EXTENSION = new InjectionToken<AXPViewExtension[]>('AXP_VIEW_EXTENSION'); ","import { Injectable, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\nimport { AXPViewMiddleware, composeViewMiddlewares } from './view.middleware';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXP_VIEW_EXTENSION } from './view.extension.token';\nimport { AXPViewDefinition } from '@acorex-platform/framework-shared/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPViewExecutor {\n private readonly injector = inject(EnvironmentInjector);\n private readonly registry = inject(AXPViewRegistry);\n private readonly extensions = inject(AXP_VIEW_EXTENSION, { optional: true });\n\n async provide<TInput = any>(\n key: string,\n input: TInput\n ): Promise<AXPViewDefinition | null> {\n const loader = this.registry.getLoader(key);\n if (!loader) {\n return null;\n }\n\n const provider = await loader();\n const handler = (i: TInput) => provider.provide(i);\n\n const pluginMiddlewares = this.getPluginMiddlewares(key);\n const globalMiddlewares = this.registry.getMiddlewares();\n\n const wrappedMiddlewares = [...globalMiddlewares, ...pluginMiddlewares].map(middleware => {\n return (input: TInput, next: (input: TInput) => Promise<AXPViewDefinition>) =>\n runInInjectionContext(this.injector, () => middleware(input, next));\n });\n\n const composed = composeViewMiddlewares(wrappedMiddlewares)(handler);\n return composed(input);\n }\n\n private getPluginMiddlewares(key: string): AXPViewMiddleware[] {\n return this.extensions\n ?.filter(ext => ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key)\n .map(ext => ext.middleware) ?? [];\n }\n} ","import { Injectable, inject } from '@angular/core';\nimport { AXPViewProvider } from '@acorex-platform/framework-shared/runtime';\nimport { AXPViewMiddleware } from './view.middleware';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXPViewExecutor } from './view.executor';\nimport { AXPViewDefinition } from '@acorex-platform/framework-shared/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPViewService {\n private readonly registry = inject(AXPViewRegistry);\n private readonly executor = inject(AXPViewExecutor);\n\n //#region ---- Registry Methods ----\n\n register(key: string, loader: () => Promise<AXPViewProvider>): void {\n this.registry.register(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.unregister(key);\n }\n\n use(middleware: AXPViewMiddleware): void {\n this.registry.use(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.exists(key);\n }\n\n getRegisteredKeys(): string[] {\n return this.registry.getRegisteredKeys();\n }\n\n clear(): void {\n this.registry.clear();\n }\n\n //#endregion\n\n //#region ---- Executor Methods ----\n\n async provide<TInput = any>(\n key: string,\n input: TInput\n ): Promise<AXPViewDefinition | null> {\n return this.executor.provide<TInput>(key, input);\n }\n\n //#endregion\n} ","import { EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXPViewProvider } from '@acorex-platform/framework-shared/runtime';\n\nexport const AXP_VIEW_SETUP = new InjectionToken<void>('AXP_VIEW_SETUP');\n\nexport function provideViewSetups(providers: Provider[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...providers,\n {\n provide: AXP_VIEW_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n\n // Setup will be handled by the provided registration functions\n return;\n },\n multi: true\n }\n ]);\n}\n\nexport function provideViewSetup(\n key: string,\n loader: () => Promise<AXPViewProvider>\n): Provider {\n return {\n provide: AXP_VIEW_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n registry.register(key, loader);\n return;\n },\n multi: true\n };\n} ","import { AXPPolicyEngineContext } from \"./policy.interface\";\n\nexport type AXPPolicyEngineMiddleware = (\n context: AXPPolicyEngineContext,\n next: (context: AXPPolicyEngineContext) => Promise<void>,\n) => Promise<void>;\n\nexport function composePolicyEngineMiddlewares(\n middlewares: AXPPolicyEngineMiddleware[]\n): (handler: (context: AXPPolicyEngineContext) => Promise<void>) => (context: AXPPolicyEngineContext) => Promise<void> {\n return (handler) => {\n let composed = handler;\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const mw = middlewares[i];\n const next = composed;\n composed = (context: AXPPolicyEngineContext) => mw(context, next);\n }\n return composed;\n };\n} ","import { AXPPolicyOptions } from \"./policy.types\";\n\nexport interface AXPPolicy {\n apply(context: AXPPolicyEngineContext): Promise<void>;\n}\n\n\nexport class AXPPolicyEngineContext {\n\n private _id: string;\n private _sender: AXPPolicyOptions['sender'];\n private _visible = true;\n private _enabled = true;\n\n constructor(options: AXPPolicyOptions) {\n this._id = options.id;\n this._sender = options.sender;\n }\n\n public get sender(): AXPPolicyOptions['sender'] {\n return this._sender;\n }\n\n public get id() {\n return this._id;\n }\n\n public get visible() {\n return this._visible;\n }\n\n public get enabled() {\n return this._enabled;\n }\n\n setVisible(visible: boolean) {\n this._visible = visible;\n return this;\n }\n setEnabled(enabled: boolean) {\n this._enabled = enabled;\n return this;\n }\n} \n","// plugins/command.extension.token.ts\nimport { InjectionToken } from '@angular/core';\nimport { AXPPolicyEngineMiddleware } from './policy.middleware';\n\nexport interface AXPPolicyExtension {\n key: string;\n middleware: AXPPolicyEngineMiddleware;\n}\n\nexport const AXP_POLICY_EXTENSION = new InjectionToken<AXPPolicyExtension[]>('AXP_POLICY_EXTENSION');\n","import { EnvironmentInjector, Inject, inject, Injectable, Optional, runInInjectionContext } from '@angular/core';\nimport { AXPPolicyEngineMiddleware, composePolicyEngineMiddlewares } from './policy.middleware';\nimport { AXPPolicyEngineContext } from './policy.interface';\nimport { AXPPolicyOptions } from './policy.types';\nimport { AXPPolicy } from './policy.interface';\nimport { AXP_POLICY_EXTENSION } from './policy.extension.token';\nimport { AXPPolicyExtension } from './policy.extension.token';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPPolicyEngineRegistry {\n private registry = new Map<string, () => Promise<AXPPolicy>>();\n private middlewares: AXPPolicyEngineMiddleware[] = [];\n private extensions = inject(AXP_POLICY_EXTENSION, { optional: true });\n\n private injector = inject(EnvironmentInjector);\n\n\n use(mw: AXPPolicyEngineMiddleware): void {\n this.middlewares.push(mw);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getPolicies(): string[] {\n return Array.from(this.registry.keys());\n }\n\n register(key: string, loader: () => Promise<AXPPolicy>): void {\n this.registry.set(key, loader);\n }\n\n\n private getPluginMiddlewares(key: string): AXPPolicyEngineMiddleware[] {\n return this.extensions\n ?.filter(ext => ext.key === key)\n .map(ext => ext.middleware) ?? [];\n }\n\n\n\n async execute(\n policy: string,\n instance: AXPPolicyOptions\n ): Promise<AXPPolicyEngineContext> {\n const loader = this.registry.get(policy);\n if (!loader) {\n throw new Error(`${policy} not implemented`);\n }\n const context = new AXPPolicyEngineContext(instance);\n const applier = await loader();\n const handler = (i: AXPPolicyEngineContext) => applier.apply(i);\n\n const pluginMws = this.getPluginMiddlewares(policy);\n\n const wrappedMws = [...this.middlewares, ...pluginMws].map(mw => {\n return (input: AXPPolicyEngineContext, next: (input: AXPPolicyEngineContext) => Promise<void>) =>\n runInInjectionContext(this.injector, () => mw(input, next));\n });\n\n const composed = composePolicyEngineMiddlewares(wrappedMws)(handler);\n await composed(context);\n return context;\n }\n} ","import { inject, Injectable } from \"@angular/core\";\nimport { AXPPolicyEngineRegistry } from \"./policy.registry\";\nimport { AXPPolicyOptions } from \"./policy.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPPolicyEngineService {\n private registry = inject(AXPPolicyEngineRegistry);\n\n\n\n async apply(options: AXPPolicyOptions) {\n const allPolicies = this.registry.getPolicies().filter(p => (options.policies?.length ?? 0) == 0 || options.policies?.includes(p));\n\n await Promise.all(allPolicies.map(async policy => {\n const context = await this.registry.execute(policy, options);\n return context;\n }));\n\n\n\n //\n // if (instance instanceof HTMLElement) {\n // if (context.visible === false) {\n // instance.style.display = 'none';\n // } else {\n // instance.style.display = '';\n // }\n // }\n // //\n // if (instance instanceof MXBaseComponent) {\n // if (context.visible === false) {\n // instance.getHostElement().style.display = 'none';\n // } else {\n // instance.getHostElement().style.display = '';\n // }\n // }\n // // Handle disabled state for interactive components\n // if (instance instanceof MXInteractiveComponent) {\n // if (context.enabled === false) {\n // instance.disabled = true;\n // } else {\n // instance.disabled = false;\n // }\n // }\n // // TODO: Handle object properties \n // if (instance instanceof Object) {\n // if (context.visible === false) {\n // set(instance, 'visible', false);\n // }\n // if (context.enabled === false) {\n // set(instance, 'disabled', true);\n // }\n // }\n }\n\n\n\n}\n","import { Directive, ElementRef, input, effect, inject } from '@angular/core';\nimport { AXPPolicyEngineService } from './policy.service';\nimport { castArray } from 'lodash-es';\n\n@Directive({\n selector: '[axp-apply-policy]',\n standalone: true\n})\nexport class AXPPolicyEngineDirective {\n policy = input.required<string | undefined | null>({ alias: 'axp-apply-policy' });\n private service = inject(AXPPolicyEngineService);\n private elementRef = inject(ElementRef<HTMLElement>);\n\n\n #eff = effect(async () => {\n const policy = this.policy();\n if (!policy) {\n return;\n }\n await this.service.apply({\n id: this.elementRef.nativeElement.id,\n policies: castArray(policy),\n sender: this.elementRef.nativeElement\n });\n });\n\n}\n","import { EnvironmentInjector, EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { AXPPolicyEngineRegistry } from './policy.registry';\nimport { AXPPolicy } from './policy.interface';\n\nexport const AXP_POLICY_ENGINE_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_POLICY_ENGINE_MIDDLEWARE_SETUP');\n\n\n\ntype AXPPolicyLoader = {\n key: string;\n policy: () => Type<AXPPolicy> | Promise<Type<AXPPolicy>>;\n};\n\n\nexport function providePolicySetups(entries: AXPPolicyLoader[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_POLICY_ENGINE_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPPolicyEngineRegistry);\n const injector = inject(EnvironmentInjector);\n\n for (const entry of entries) {\n registry.register(entry.key, async () => {\n const PolicyType = await entry.policy();\n return injector.get(PolicyType);\n });\n }\n\n return true;\n }\n }\n ]);\n}","import { EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXPViewMiddleware } from './view.middleware';\n\nexport const AXP_VIEW_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_VIEW_MIDDLEWARE_SETUP');\n\nexport function provideViewMiddleware(middlewares: AXPViewMiddleware[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_VIEW_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n middlewares.forEach(middleware => registry.use(middleware));\n return;\n },\n multi: true\n }\n ]);\n}\n\nexport function provideViewMiddlewareSetup(\n middleware: AXPViewMiddleware\n): Provider {\n return {\n provide: AXP_VIEW_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n registry.use(middleware);\n return;\n },\n multi: true\n };\n} ","import { NgModule, Inject, isDevMode, Optional, inject } from \"@angular/core\";\nimport { AXP_COMMAND_SETUP } from \"./commands/provide-command-setups\";\nimport { AXP_COMMAND_MIDDLEWARE_SETUP } from \"./commands/provide-command-middleware\";\nimport { AXP_QUERY_SETUP } from \"./queries/provide-query-setups\";\nimport { AXP_QUERY_MIDDLEWARE_SETUP } from \"./queries/provide-query-middleware\";\nimport { AXP_VIEW_SETUP } from \"./views/provide-view-setups\";\nimport { AXP_VIEW_MIDDLEWARE_SETUP } from \"./views/provide-view-middleware\";\nimport { AXP_POLICY_ENGINE_MIDDLEWARE_SETUP } from \"./policy/policy-middleware-provider\";\n\n@NgModule()\nexport class AXPRuntimeModule {\n\n private _commandSetup = inject(AXP_COMMAND_SETUP, { optional: true });\n private _commandMiddlewareSetup = inject(AXP_COMMAND_MIDDLEWARE_SETUP, { optional: true });\n\n private _querySetup = inject(AXP_QUERY_SETUP, { optional: true });\n private _queryMiddlewareSetup = inject(AXP_QUERY_MIDDLEWARE_SETUP, { optional: true });\n\n private _viewSetup = inject(AXP_VIEW_SETUP, { optional: true });\n private _viewMiddlewareSetup = inject(AXP_VIEW_MIDDLEWARE_SETUP, { optional: true });\n\n private _policyEngineSetup = inject(AXP_POLICY_ENGINE_MIDDLEWARE_SETUP, { optional: true });\n\n constructor() {\n if (isDevMode() && false) {\n console.log('[AXPRuntimeModule] Command Setup:', this._commandSetup);\n console.log('[AXPRuntimeModule] Command Middleware Setup:', this._commandMiddlewareSetup);\n console.log('[AXPRuntimeModule] Query Setup:', this._querySetup);\n console.log('[AXPRuntimeModule] Query Middleware Setup:', this._queryMiddlewareSetup);\n console.log('[AXPRuntimeModule] View Setup:', this._viewSetup);\n console.log('[AXPRuntimeModule] View Middleware Setup:', this._viewMiddlewareSetup);\n console.log('[AXPRuntimeModule] Policy Engine Setup:', this._policyEngineSetup);\n }\n }\n}\n","//#region ---- Runtime transport hooks ----\n\n/**\n * Distributed hook keys for keyed runtime transports (SSE, beacon, streaming POST).\n * Connectivity implements these via {@link AXPHookService.runAsync}.\n */\nexport const AXPRuntimeTransportHookKeys = {\n Execute: 'runtime.transport.execute',\n} as const;\n\nexport interface AXPRuntimeTransportExecuteHookPayload {\n key: string;\n input: unknown;\n /** Set by a provider when it handled the transport call. */\n handled?: boolean;\n result?: unknown;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXPRuntimeTransportHookKeys,\n type AXPRuntimeTransportExecuteHookPayload,\n} from './runtime-transport.hooks';\n\n//#endregion\n\n//#region ---- Runtime transport service ----\n\n/**\n * Dispatches keyed runtime transports (SSE, beacon, streaming) through distributed hooks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPRuntimeTransportService {\n private readonly hooks = inject(AXPHookService);\n\n async execute<TInput = unknown, TResult = unknown>(key: string, input: TInput): Promise<TResult> {\n const payload = await this.hooks.runAsync<AXPRuntimeTransportExecuteHookPayload>(\n AXPRuntimeTransportHookKeys.Execute,\n { key, input },\n );\n\n if (!payload.handled) {\n throw new Error(`No runtime transport registered for key: ${key}`);\n }\n\n return payload.result as TResult;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBulkCommandRequest,\n AXPBulkCommandResultData, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteBulkHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Host-app transport that performs a single real bulk call against any backend stack.\n * Must not fan out one-by-one on the client.\n */\nexport type AXPExternalRuntimeBulkTransport = (\n request: AXPBulkCommandRequest,\n) => AXPCommandExecuteResultPromise<AXPBulkCommandResultData>;\n\nexport interface AXPExternalRuntimeBulkTransportOptions {\n /**\n * Hook waterfall order (ascending). Default `-100` so this runs before the\n * connectivity default (`priority` unset / `0`) and can mark `handled: true`.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factory ----\n\n/**\n * Registers an external-stack implementation of `runtime.command.execute-bulk`.\n *\n * Use this when the host app consumes only the ACoreX **client** libraries and\n * implements the API in another stack. Entity bulk actions (`Entity:Bulk`,\n * selected delete, etc.) call {@link AXPBulkCommandService}, which runs this hook\n * once — no client-side per-id fan-out.\n *\n * @example\n * ```typescript\n * @NgModule({\n * providers: [\n * ...provideExternalRuntimeBulkTransport(async (request) => {\n * const response = await fetch(`${apiBase}/v1/runtime/commands/bulk`, {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * Authorization: `Bearer ${token}`,\n * },\n * body: JSON.stringify(request),\n * });\n * return response.json();\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\nexport function provideExternalRuntimeBulkTransport(\n transport: AXPExternalRuntimeBulkTransport,\n options: AXPExternalRuntimeBulkTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandExecuteBulkHookPayload,\n AXPRuntimeCommandExecuteBulkHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.CommandExecuteBulk,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const result = await transport(payload.request);\n return { ...payload, handled: true, result };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type { AXPCommandExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Host-app transport for a single remote command. Must POST to the host API and\n * return the full runtime command envelope.\n *\n * Nest reference: `POST {baseUrl}/v1/runtime/commands` with body\n * `{ name, input, options? }`, or `POST {baseUrl}/v1/runtime/commands/invoke?name=…`\n * with body `input` when `options` is omitted.\n */\nexport type AXPExternalRuntimeCommandTransport = (\n name: string,\n input: unknown,\n options?: AXPCommandExecuteOptions,\n) => Promise<AXPRuntimeCommandResult>;\n\nexport interface AXPExternalRuntimeCommandTransportOptions {\n /**\n * Hook waterfall order (ascending). Default `-100` so this runs before the\n * connectivity default (`priority` unset / `0`) and can mark `handled: true`.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factory ----\n\n/**\n * Registers an external-stack implementation of `runtime.command.execute`.\n *\n * Use this when the host app consumes only the ACoreX **client** libraries and\n * implements the API in another stack. Official Nest / demo-api hosts should\n * import `AXCRuntimeRemoteApiModule` from `@acorex-platform/client-connectivity-api`\n * instead.\n *\n * @example\n * ```typescript\n * providers: [\n * ...provideExternalRuntimeCommandTransport(async (name, input, options) => {\n * const response = await fetch(`${apiBase}/v1/runtime/commands`, {\n * method: 'POST',\n * credentials: 'include',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ name, input: input ?? {}, options }),\n * });\n * return response.json();\n * }),\n * ]\n * ```\n */\nexport function provideExternalRuntimeCommandTransport(\n transport: AXPExternalRuntimeCommandTransport,\n options: AXPExternalRuntimeCommandTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandExecuteHookPayload,\n AXPRuntimeCommandExecuteHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.CommandExecute,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const result = await transport(payload.name, payload.input, payload.options);\n return { ...payload, handled: true, result };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeQueryExecuteHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Host-app transport for a single remote query. Must POST to the host API and\n * return the full runtime query envelope (not unwrapped `data`).\n *\n * Nest reference: `POST {baseUrl}/v1/runtime/queries` with body\n * `{ name, input, options? }`, or `POST {baseUrl}/v1/runtime/queries/invoke?name=…`\n * with body `input` when `options` is omitted.\n */\nexport type AXPExternalRuntimeQueryTransport = (\n name: string,\n input: unknown,\n options?: AXPQueryExecuteOptions,\n) => Promise<AXPRuntimeQueryResult>;\n\nexport interface AXPExternalRuntimeQueryTransportOptions {\n /**\n * Hook waterfall order (ascending). Default `-100` so this runs before the\n * connectivity default (`priority` unset / `0`) and can mark `handled: true`.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factory ----\n\n/**\n * Registers an external-stack implementation of `runtime.query.execute`.\n *\n * Use this when the host app consumes only the ACoreX **client** libraries and\n * implements the API in another stack. Official Nest / demo-api hosts should\n * import `AXCRuntimeRemoteApiModule` from `@acorex-platform/client-connectivity-api`\n * instead (also pulled in by `AXMSettingsManagementModule`).\n *\n * @example\n * ```typescript\n * providers: [\n * ...provideExternalRuntimeQueryTransport(async (name, input, options) => {\n * const response = await fetch(`${apiBase}/v1/runtime/queries`, {\n * method: 'POST',\n * credentials: 'include',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ name, input: input ?? {}, options }),\n * });\n * return response.json();\n * }),\n * ]\n * ```\n */\nexport function provideExternalRuntimeQueryTransport(\n transport: AXPExternalRuntimeQueryTransport,\n options: AXPExternalRuntimeQueryTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeQueryExecuteHookPayload,\n AXPRuntimeQueryExecuteHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.QueryExecute,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const result = await transport(payload.name, payload.input, payload.options);\n return { ...payload, handled: true, result };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { type Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPBulkCommandProgress } from '@acorex-platform/framework-shared/runtime';\nimport { AXPBulkProgressChannel } from './commands/bulk-progress.channel';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandBulkProgressHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPBulkProgressPollTransport = (\n executionId: string,\n) => Promise<AXPBulkCommandProgress | null | undefined>;\n\nexport interface AXPBulkProgressPollTransportOptions {\n /** Hook waterfall order (ascending). Default `-100` so this runs before connectivity. */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factories ----\n\n/** Replace the default {@link AXPBulkProgressChannel} (e.g. SSE or a host-specific bus). */\nexport function provideBulkProgressChannel(factory: () => AXPBulkProgressChannel): Provider[] {\n return [\n {\n provide: AXPBulkProgressChannel,\n useFactory: factory,\n },\n ];\n}\n\n/**\n * Registers a poll transport for hosts that have a progress HTTP API but no realtime.\n * Same pattern as {@link provideExternalRuntimeBulkTransport}.\n */\nexport function provideBulkProgressPollTransport(\n transport: AXPBulkProgressPollTransport,\n options: AXPBulkProgressPollTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandBulkProgressHookPayload,\n AXPRuntimeCommandBulkProgressHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.CommandBulkProgress,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const progress = await transport(payload.executionId);\n return { ...payload, handled: true, progress: progress ?? null };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","// Commands\nexport * from './lib/commands';\n\n// Queries\nexport * from './lib/queries';\n\n// Views\nexport * from './lib/views';\n\n// Policy\nexport * from './lib/policy';\n\n// Runtime\nexport * from './lib/runtime.module';\nexport * from './lib/runtime-remote.hooks';\nexport * from './lib/runtime-transport.hooks';\nexport * from './lib/runtime-transport.service';\nexport * from './lib/provide-external-runtime-bulk-transport';\nexport * from './lib/provide-external-runtime-command-transport';\nexport * from './lib/provide-external-runtime-query-transport';\nexport * from './lib/provide-bulk-progress-channel';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-framework-client-runtime.mjs","sources":["../../../../../libs/framework/client/runtime/src/lib/runtime-remote.hooks.ts","../../../../../libs/framework/client/runtime/src/lib/commands/bulk-command.service.ts","../../../../../libs/framework/client/runtime/src/lib/commands/bulk-progress.channel.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command-events.service.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.registry.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.executor.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/commands/command.service.ts","../../../../../libs/framework/client/runtime/src/lib/commands/provide-command-middleware.ts","../../../../../libs/framework/client/runtime/src/lib/commands/provide-command-setups.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.registry.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/queries/provide-query-middleware.ts","../../../../../libs/framework/client/runtime/src/lib/queries/provide-query-setups.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query-events.service.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.executor.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/queries/query.service.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.registry.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.executor.ts","../../../../../libs/framework/client/runtime/src/lib/views/view.service.ts","../../../../../libs/framework/client/runtime/src/lib/views/provide-view-setups.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.middleware.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.interface.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.extension.token.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.registry.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.service.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy.directive.ts","../../../../../libs/framework/client/runtime/src/lib/policy/policy-middleware-provider.ts","../../../../../libs/framework/client/runtime/src/lib/views/provide-view-middleware.ts","../../../../../libs/framework/client/runtime/src/lib/runtime.module.ts","../../../../../libs/framework/client/runtime/src/lib/runtime-transport.hooks.ts","../../../../../libs/framework/client/runtime/src/lib/runtime-transport.service.ts","../../../../../libs/framework/client/runtime/src/lib/provide-external-runtime-bulk-transport.ts","../../../../../libs/framework/client/runtime/src/lib/provide-external-runtime-command-transport.ts","../../../../../libs/framework/client/runtime/src/lib/provide-external-runtime-query-transport.ts","../../../../../libs/framework/client/runtime/src/lib/provide-bulk-progress-channel.ts","../../../../../libs/framework/client/runtime/src/index.ts","../../../../../libs/framework/client/runtime/src/acorex-platform-framework-client-runtime.ts"],"sourcesContent":["import type {\n AXPRuntimeCommandResult,\n AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBulkCommandProgress,\n AXPBulkCommandRequest,\n AXPBulkCommandResultData,\n AXPCommandExecuteOptions,\n AXPQueryExecuteOptions,\n} from '@acorex-platform/framework-shared/runtime';\n\n//#region ---- Runtime remote execute hooks ----\n\n/**\n * Distributed hook keys for remote (non-local) command/query execution.\n * Connectivity (or another transport) implements these via {@link AXPHookService.runAsync}.\n *\n * Official Nest / demo-api hosts import `AXCRuntimeRemoteApiModule` from\n * `@acorex-platform/client-connectivity-api` (also wired by `AXMSettingsManagementModule`).\n *\n * Host apps that only consume the client lib and call a different API stack should\n * register {@link provideExternalRuntimeQueryTransport},\n * {@link provideExternalRuntimeCommandTransport},\n * {@link provideExternalRuntimeBulkTransport} for {@link AXPRuntimeRemoteHookKeys.CommandExecuteBulk},\n * and {@link provideBulkProgressPollTransport} for {@link AXPRuntimeRemoteHookKeys.CommandBulkProgress}\n * (see `RUNTIME_REMOTE_BULK_TRANSPORT.md`).\n */\nexport const AXPRuntimeRemoteHookKeys = {\n CommandExecute: 'runtime.command.execute',\n CommandExecuteBulk: 'runtime.command.execute-bulk',\n CommandBulkProgress: 'runtime.command.bulk-progress',\n QueryExecute: 'runtime.query.execute',\n} as const;\n\nexport interface AXPRuntimeCommandExecuteHookPayload {\n name: string;\n input: unknown;\n /** Execute knobs — forwarded to the server; not command business input. */\n options?: AXPCommandExecuteOptions;\n /** Set by a provider when it handled the remote call (even if success is false). */\n handled?: boolean;\n result?: AXPRuntimeCommandResult | null;\n}\n\nexport interface AXPRuntimeCommandExecuteBulkHookPayload {\n request: AXPBulkCommandRequest;\n /** Set by a provider when it handled the remote call (even if success is false). */\n handled?: boolean;\n result?: AXPRuntimeCommandResult<AXPBulkCommandResultData> | null;\n}\n\nexport interface AXPRuntimeCommandBulkProgressHookPayload {\n executionId: string;\n /** Set by a provider when it handled the remote call. */\n handled?: boolean;\n progress?: AXPBulkCommandProgress | null;\n}\n\nexport interface AXPRuntimeQueryExecuteHookPayload {\n name: string;\n input: unknown;\n /** Execute knobs (snapshot, …) — forwarded to the server; not query business input. */\n options?: AXPQueryExecuteOptions;\n /** Set by a provider when it handled the remote call. */\n handled?: boolean;\n /** Full runtime query envelope (same shape as local {@link AXPQuery.fetch}). */\n result?: AXPRuntimeQueryResult | null;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBulkCommandRequest,\n AXPBulkCommandResultData, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteBulkHookPayload,\n} from '../runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Bulk command client ----\n\n/**\n * Invokes filter-only bulk execution via the remote hook transport\n * (`runtime.command.execute-bulk`).\n *\n * Default connectivity posts to `/v1/runtime/commands/bulk`. Host apps on another\n * API stack should register {@link provideExternalRuntimeBulkTransport} instead —\n * this service never fans out one-by-one on the client.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBulkCommandService {\n private readonly hooks = inject(AXPHookService);\n\n async execute(request: AXPBulkCommandRequest): AXPCommandExecuteResultPromise<AXPBulkCommandResultData> {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteBulkHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecuteBulk,\n { request },\n );\n\n if (!payload.handled) {\n throw new Error('Bulk command remote handler is not available');\n }\n\n return (\n payload.result ?? {\n success: false,\n message: {\n text: 'Bulk command returned no result.',\n details: { total: 0, succeeded: 0, failed: 0, results: [] },\n },\n }\n );\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable, NgZone } from '@angular/core';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport type { AXPBulkCommandProgress } from '@acorex-platform/framework-shared/runtime';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandBulkProgressHookPayload,\n} from '../runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXPBulkProgressWatchOptions {\n /**\n * `true` — poll GET /progress (socket down).\n * `false` / omitted — socket only; never call GET /progress.\n */\n poll?: boolean;\n /** Poll interval when `poll` is enabled. Default 250ms. */\n intervalMs?: number;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_POLL_INTERVAL_MS = 250;\n\n//#endregion\n\n//#region ---- Bulk progress channel ----\n\n/**\n * Actor-only progress bus for in-flight bulk commands.\n *\n * Prefer realtime (`runtime.bulk.progress` → {@link notify}).\n * GET /progress only when the caller sets `poll: true` (socket down).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPBulkProgressChannel {\n private readonly hooks = inject(AXPHookService);\n private readonly zone = inject(NgZone);\n private readonly subject = new Subject<AXPBulkCommandProgress>();\n\n /** Called by the realtime topic handler when a socket tick arrives. */\n notify(progress: AXPBulkCommandProgress): void {\n const executionId = progress?.executionId?.trim();\n if (!executionId) {\n return;\n }\n this.emit(progress, executionId);\n }\n\n watch(executionId: string, options?: AXPBulkProgressWatchOptions): Observable<AXPBulkCommandProgress> {\n const id = executionId.trim();\n const stream = this.subject.pipe(filter((progress) => progress.executionId === id));\n if (!options?.poll) {\n return stream;\n }\n\n const intervalMs =\n typeof options?.intervalMs === 'number' && options.intervalMs > 0\n ? options.intervalMs\n : DEFAULT_POLL_INTERVAL_MS;\n\n return new Observable((subscriber) => {\n const sub = stream.subscribe(subscriber);\n const timer = setInterval(() => {\n void this.pollOnce(id);\n }, intervalMs);\n\n return () => {\n sub.unsubscribe();\n this.clearPoll(timer);\n };\n });\n }\n\n private emit(progress: AXPBulkCommandProgress, executionId: string): void {\n this.zone.run(() => {\n this.subject.next({ ...progress, executionId });\n });\n }\n\n private clearPoll(timer: ReturnType<typeof setInterval> | undefined): void {\n if (timer !== undefined) {\n clearInterval(timer);\n }\n }\n\n private async pollOnce(executionId: string): Promise<void> {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandBulkProgressHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandBulkProgress,\n { executionId },\n );\n if (payload.handled && payload.progress) {\n const id = payload.progress.executionId?.trim() || executionId;\n this.emit(payload.progress, id);\n }\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPDistributedEventListenerService } from '@acorex-platform/framework-client/core';\nimport type { AXPCommandExecuteOptions } from '@acorex-platform/framework-shared/runtime';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPCommandExecutionStage = 'before' | 'after';\n\nexport interface AXPCommandExecutionEvent<TInput = unknown, TResult = unknown> {\n executionId: string;\n stage: AXPCommandExecutionStage;\n key: string;\n input: TInput;\n options?: AXPCommandExecuteOptions;\n success?: boolean;\n result?: AXPRuntimeCommandResult<TResult> | null;\n error?: unknown;\n durationMs?: number;\n}\n\ntype CommandExecutionHandler<TInput, TResult> = (event: AXPCommandExecutionEvent<TInput, TResult>) => void;\n\n//#endregion\n\nconst COMMAND_EXECUTION_EVENT_KEY = '@commands:execution';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandEventsService {\n //#region ---- Services & Dependencies ----\n\n private readonly broadcast = inject(AXPBroadcastEventService);\n private readonly distributedEvents = inject(AXPDistributedEventListenerService, { optional: true });\n\n //#endregion\n\n //#region ---- Public API ----\n\n listen<TInput = unknown, TResult = unknown>(\n handler: CommandExecutionHandler<TInput, TResult>,\n ): () => void {\n const subscription = this.broadcast\n .listen<AXPCommandExecutionEvent<TInput, TResult>>(COMMAND_EXECUTION_EVENT_KEY)\n .subscribe(({ data }) => handler(data));\n\n return () => subscription.unsubscribe();\n }\n\n async emit<TInput = unknown, TResult = unknown>(\n event: AXPCommandExecutionEvent<TInput, TResult>,\n ): Promise<void> {\n const safePayload = this.serializeForBroadcast(event);\n this.broadcast.publish(COMMAND_EXECUTION_EVENT_KEY, safePayload);\n await this.distributedEvents?.dispatch(COMMAND_EXECUTION_EVENT_KEY, safePayload);\n }\n\n //#endregion\n\n //#region ---- Broadcast payload (structured-clone safe) ----\n\n /**\n * Removes functions, symbols, and cycles so {@link AXPBroadcastEventService.publish}\n * can use `BroadcastChannel.postMessage` without DataCloneError (e.g. command input with `dialogRef`).\n */\n private serializeForBroadcast<TInput, TResult>(\n event: AXPCommandExecutionEvent<TInput, TResult>,\n ): AXPCommandExecutionEvent {\n return {\n executionId: event.executionId,\n stage: event.stage,\n key: event.key,\n success: event.success,\n durationMs: event.durationMs,\n input: this.stripNonSerializable(event.input),\n result:\n event.result === undefined || event.result === null\n ? event.result\n : (this.stripNonSerializable(event.result) as AXPRuntimeCommandResult<TResult>),\n error:\n event.error instanceof Error\n ? { name: event.error.name, message: event.error.message }\n : this.stripNonSerializable(event.error),\n };\n }\n\n private stripNonSerializable(value: unknown): unknown {\n const seen = new WeakSet<object>();\n\n const walk = (v: unknown): unknown => {\n if (v === null || v === undefined) {\n return v;\n }\n const t = typeof v;\n if (t === 'function' || t === 'symbol') {\n return undefined;\n }\n if (t === 'bigint') {\n return v.toString();\n }\n if (t !== 'object') {\n return v;\n }\n if (v instanceof Date) {\n return v.toISOString();\n }\n if (Array.isArray(v)) {\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n return v.map((item) => walk(item)).filter((item) => item !== undefined);\n }\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n const obj = v as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n const child = walk(obj[key]);\n if (child !== undefined) {\n out[key] = child;\n }\n }\n return out;\n };\n\n return walk(value);\n }\n\n //#endregion\n}\n\n","import { Injectable } from '@angular/core';\nimport { AXPCommand, type AXPCommandMiddleware } from '@acorex-platform/framework-shared/runtime';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandRegistry {\n private registry = new Map<string, () => Promise<AXPCommand>>();\n private middlewares: AXPCommandMiddleware[] = [];\n\n register(key: string, loader: () => Promise<AXPCommand>): void {\n this.registry.set(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.delete(key);\n }\n\n use(middleware: AXPCommandMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getLoader(key: string): (() => Promise<AXPCommand>) | undefined {\n return this.registry.get(key);\n }\n\n getMiddlewares(): readonly AXPCommandMiddleware[] {\n return [...this.middlewares];\n }\n\n getRegisteredKeys(): string[] {\n return Array.from(this.registry.keys());\n }\n\n clear(): void {\n this.registry.clear();\n this.middlewares.length = 0;\n }\n}\n","// plugins/command.extension.token.ts\nimport { InjectionToken } from '@angular/core';\nimport type { AXPCommandMiddleware } from '@acorex-platform/framework-shared/runtime';\n\nexport interface AXPCommandExtension {\n target: string | RegExp;\n middleware: AXPCommandMiddleware;\n}\n\nexport const AXP_COMMAND_EXTENSION = new InjectionToken<AXPCommandExtension[]>('AXP_COMMAND_EXTENSION');\n","import { EnvironmentInjector, Injectable, inject, runInInjectionContext } from '@angular/core';\nimport { AXPRuntimeCommandResult, createRandomUuid } from '@acorex-platform/framework-shared/core';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\n\nimport {\n composeCommandMiddlewares,\n normalizeCommandInputForRemote,\n type AXPCommandExecuteOptions,\n type AXPCommandExecuteResultPromise,\n type AXPCommandMiddleware,\n type AXPCommandMiddlewareContext,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXP_COMMAND_EXTENSION } from './command.extension.token';\nimport { AXPCommandEventsService, AXPCommandExecutionEvent } from './command-events.service';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteHookPayload,\n} from '../runtime-remote.hooks';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandExecutor {\n private readonly injector = inject(EnvironmentInjector);\n private readonly registry = inject(AXPCommandRegistry);\n private readonly extensions = inject(AXP_COMMAND_EXTENSION, { optional: true });\n private readonly commandEvents = inject(AXPCommandEventsService);\n private readonly hooks = inject(AXPHookService);\n\n async execute<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n const handler = this.registry.exists(key)\n ? await this.createLocalHandler<TInput, TResult>(key)\n : this.createRemoteHandler<TInput, TResult>(key);\n\n return this.runWithMiddlewareAndEvents(key, input, handler, options);\n }\n\n /**\n * Always dispatch via {@link AXPRuntimeRemoteHookKeys.CommandExecute}, even when a local\n * command is registered for the same key. Use from gateway/API clients that wrap remote\n * handlers so local UI commands can call them without async recursion.\n *\n * Skips command middlewares (e.g. toast): the local wrapper owns UX. Running toast\n * middleware here would double-notify when the wrapper also returns a failure message.\n */\n async executeRemote<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n return this.runWithEvents(\n key,\n input,\n () => this.createRemoteHandler<TInput, TResult>(key)(input, options),\n options,\n );\n }\n\n private async createLocalHandler<TInput, TResult>(\n key: string,\n ): Promise<(input: TInput) => AXPCommandExecuteResultPromise<TResult>> {\n const loader = this.registry.getLoader(key);\n if (!loader) {\n throw new Error(`Command '${key}' is not registered`);\n }\n\n const command = await loader();\n return (i: TInput) => command.execute(i) as AXPCommandExecuteResultPromise<TResult>;\n }\n\n private createRemoteHandler<TInput, TResult>(\n key: string,\n ): (\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ) => Promise<AXPRuntimeCommandResult<TResult> | null> {\n return async (input: TInput, options?: AXPCommandExecuteOptions) => {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecute,\n {\n name: key,\n input: normalizeCommandInputForRemote(input),\n options,\n },\n );\n\n if (!payload.handled) {\n throw new Error(`Command '${key}' is not registered and no remote handler is available`);\n }\n\n return (payload.result ?? null) as AXPRuntimeCommandResult<TResult> | null;\n };\n }\n\n private async runWithMiddlewareAndEvents<TInput, TResult>(\n key: string,\n input: TInput,\n handler: (\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ) => Promise<AXPRuntimeCommandResult<TResult> | null>,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n const pluginMiddlewares = this.getPluginMiddlewares(key);\n const globalMiddlewares = this.registry.getMiddlewares();\n\n // Registry middlewares are untyped (any); re-wrap in injection context.\n const wrappedMiddlewares: AXPCommandMiddleware<TInput, TResult>[] = [\n ...globalMiddlewares,\n ...pluginMiddlewares,\n ].map((middleware) => {\n const wrapped: AXPCommandMiddleware<TInput, TResult> = (context, next) =>\n runInInjectionContext(this.injector, () =>\n middleware(\n context as AXPCommandMiddlewareContext,\n next as (ctx: AXPCommandMiddlewareContext) => AXPCommandExecuteResultPromise,\n ),\n ) as AXPCommandExecuteResultPromise<TResult>;\n return wrapped;\n });\n\n const composed = composeCommandMiddlewares(wrappedMiddlewares)(\n (context) =>\n handler(context.input, context.options) as AXPCommandExecuteResultPromise<TResult>,\n );\n\n return this.runWithEvents(key, input, () => composed({ input, key, options }), options);\n }\n\n private async runWithEvents<TInput, TResult>(\n key: string,\n input: TInput,\n run: () => Promise<AXPRuntimeCommandResult<TResult> | null>,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n const executionId = createRandomUuid();\n const startedAt = performance.now();\n\n const beforeEvent = {\n executionId,\n stage: 'before' as const,\n key,\n input,\n options,\n } satisfies AXPCommandExecutionEvent<TInput>;\n\n await this.commandEvents.emit(beforeEvent);\n\n try {\n const result = await run();\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: true,\n result,\n durationMs,\n } satisfies AXPCommandExecutionEvent<TInput, TResult>;\n\n await this.commandEvents.emit(afterEvent);\n\n return result;\n } catch (error) {\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: false,\n error,\n durationMs,\n } satisfies AXPCommandExecutionEvent<TInput, TResult>;\n\n await this.commandEvents.emit(afterEvent);\n\n throw error;\n }\n }\n\n private getPluginMiddlewares(key: string): AXPCommandMiddleware[] {\n return (\n this.extensions\n ?.filter((ext) => (ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key))\n .map((ext) => ext.middleware) ?? []\n );\n }\n}\n","/**\n * Re-exports shared command middleware contracts.\n * Registration stays client-side (`provideCommandMiddleware` / registry.use).\n */\nexport {\n composeCommandMiddlewares,\n type AXPCommandExecuteOptions,\n type AXPCommandMiddleware,\n type AXPCommandMiddlewareContext,\n} from '@acorex-platform/framework-shared/runtime';\n","import { Injectable, inject } from '@angular/core';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXPCommand,\n type AXPCommandExecuteOptions,\n type AXPCommandMiddleware,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXPCommandExecutor } from './command.executor';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPCommandService {\n private readonly registry = inject(AXPCommandRegistry);\n private readonly executor = inject(AXPCommandExecutor);\n\n // Registry methods\n register(key: string, loader: () => Promise<AXPCommand>): void {\n this.registry.register(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.unregister(key);\n }\n\n use(middleware: AXPCommandMiddleware): void {\n this.registry.use(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.exists(key);\n }\n\n getRegisteredKeys(): string[] {\n return this.registry.getRegisteredKeys();\n }\n\n clear(): void {\n this.registry.clear();\n }\n\n // Executor methods\n async execute<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n return this.executor.execute<TInput, TResult>(key, input, options);\n }\n\n /**\n * Force remote transport for {@code key}, ignoring any local command registration.\n * Prefer this in gateway/API clients used by local UI command wrappers.\n */\n async executeRemote<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPCommandExecuteOptions,\n ): Promise<AXPRuntimeCommandResult<TResult> | null> {\n return this.executor.executeRemote<TInput, TResult>(key, input, options);\n }\n}\n","import {\n EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders\n} from '@angular/core';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXPCommandMiddleware } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_COMMAND_EXTENSION } from './command.extension.token';\n\nexport const AXP_COMMAND_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_COMMAND_MIDDLEWARE_SETUP');\n\ntype AXPCommandMiddlewareEntry =\n (AXPCommandMiddleware | { target: string | RegExp; middleware: AXPCommandMiddleware })[];\n\nexport function provideCommandMiddleware(\n entries: AXPCommandMiddlewareEntry\n): EnvironmentProviders {\n const global: AXPCommandMiddleware[] = [];\n const extensions: { target: string | RegExp; middleware: AXPCommandMiddleware }[] = [];\n\n for (const entry of entries) {\n if (typeof entry === 'function') {\n global.push(entry);\n } else {\n extensions.push(entry);\n }\n }\n\n return makeEnvironmentProviders([\n // Plugin middleware entries\n ...extensions.map(ext => ({\n provide: AXP_COMMAND_EXTENSION,\n useValue: ext,\n multi: true\n })),\n\n // Global middleware setup — multi so every provideCommandMiddleware() registers its globals\n {\n provide: AXP_COMMAND_MIDDLEWARE_SETUP,\n multi: true,\n useFactory: () => {\n const registry = inject(AXPCommandRegistry);\n for (const mw of global) {\n registry.use(mw);\n }\n return true;\n }\n }\n ]);\n}","import { EnvironmentInjector, EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, runInInjectionContext, Type } from '@angular/core';\nimport { AXPCommandRegistry } from './command.registry';\nimport { AXPCommand } from '@acorex-platform/framework-shared/runtime';\n\n\nexport const AXP_COMMAND_SETUP = new InjectionToken<void>('AXP_COMMAND_SETUP');\n\n\ntype AXPCommandLoader = {\n key: string;\n command: () => Type<AXPCommand> | Promise<Type<AXPCommand>>;\n};\n\n\nexport function provideCommandSetups(entries: AXPCommandLoader[]): EnvironmentProviders {\n\n return makeEnvironmentProviders([\n {\n provide: AXP_COMMAND_SETUP,\n useFactory: () => {\n const registry = inject(AXPCommandRegistry);\n const injector = inject(EnvironmentInjector);\n\n for (const entry of entries) {\n registry.register(entry.key, async () => {\n const CommandType = await entry.command();\n // Try to get from DI first, if fails create new instance\n try {\n return injector.get(CommandType);\n } catch (e) {\n // If not in DI (e.g., for activities), create new instance\n return runInInjectionContext(injector, () => new CommandType());\n }\n });\n }\n\n return true;\n },\n multi: true\n }\n ]);\n}\n\n\nexport function provideCommand(\n key: string,\n loader: () => Type<AXPCommand> | Promise<Type<AXPCommand>>\n): EnvironmentProviders {\n return provideCommandSetups([\n {\n key,\n command: loader\n }\n ]);\n}\n\n\n","// queries/query.registry.ts\nimport { Injectable } from '@angular/core';\nimport { AXPQuery, type AXPQueryMiddleware } from '@acorex-platform/framework-shared/runtime';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryRegistry {\n private registry = new Map<string, () => Promise<AXPQuery>>();\n private middlewares: AXPQueryMiddleware[] = [];\n\n register(key: string, loader: () => Promise<AXPQuery>): void {\n this.registry.set(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.delete(key);\n }\n\n use(middleware: AXPQueryMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getLoader(key: string): (() => Promise<AXPQuery>) | undefined {\n return this.registry.get(key);\n }\n\n getMiddlewares(): readonly AXPQueryMiddleware[] {\n return [...this.middlewares];\n }\n\n getRegisteredKeys(): string[] {\n return Array.from(this.registry.keys());\n }\n\n clear(): void {\n this.registry.clear();\n this.middlewares.length = 0;\n }\n}\n","// plugins/query.extension.token.ts\nimport { InjectionToken } from '@angular/core';\nimport type { AXPQueryMiddleware } from '@acorex-platform/framework-shared/runtime';\n\nexport interface AXPQueryExtension {\n target: string | RegExp;\n middleware: AXPQueryMiddleware;\n}\n\nexport const AXP_QUERY_EXTENSION = new InjectionToken<AXPQueryExtension[]>('AXP_QUERY_EXTENSION');\n","import {\n EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders\n} from '@angular/core';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXPQueryMiddleware } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_QUERY_EXTENSION } from './query.extension.token';\n\nexport const AXP_QUERY_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_QUERY_MIDDLEWARE_SETUP');\n\ntype AXPQueryMiddlewareEntry =\n (AXPQueryMiddleware | { key?: string; target?: string | RegExp; middleware: AXPQueryMiddleware })[];\n\nexport function provideQueryMiddleware(\n entries: AXPQueryMiddlewareEntry\n): EnvironmentProviders {\n const global: AXPQueryMiddleware[] = [];\n const extensions: { target: string | RegExp; middleware: AXPQueryMiddleware }[] = [];\n\n for (const entry of entries) {\n if (typeof entry === 'function') {\n global.push(entry);\n } else {\n const target = entry.target ?? entry.key;\n if (target == null) {\n throw new Error('provideQueryMiddleware: targeted entry requires `target` or `key`');\n }\n extensions.push({ target, middleware: entry.middleware });\n }\n }\n\n return makeEnvironmentProviders([\n // Plugin middleware entries\n ...extensions.map(ext => ({\n provide: AXP_QUERY_EXTENSION,\n useValue: ext,\n multi: true\n })),\n\n // Global middleware setup — multi so every provideQueryMiddleware() registers its globals\n {\n provide: AXP_QUERY_MIDDLEWARE_SETUP,\n multi: true,\n useFactory: () => {\n const registry = inject(AXPQueryRegistry);\n for (const mw of global) {\n registry.use(mw);\n }\n return true;\n }\n }\n ]);\n} ","import { EnvironmentInjector, EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Provider, Type } from '@angular/core';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXPQuery } from '@acorex-platform/framework-shared/runtime';\n\nexport const AXP_QUERY_SETUP = new InjectionToken<void>('AXP_QUERY_SETUP');\n\ntype AXPQueryLoaderEntry = {\n key: string,\n loader: () => Type<AXPQuery> | Promise<Type<AXPQuery>>;\n};\n\nexport function provideQuerySetups(\n entries: AXPQueryLoaderEntry[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_QUERY_SETUP,\n useFactory: () => {\n const registry = inject(AXPQueryRegistry);\n const injector = inject(EnvironmentInjector);\n\n for (const entry of entries) {\n registry.register(entry.key, async () => {\n const CommandType = await entry.loader();\n return injector.get(CommandType);\n });\n }\n\n return true;\n },\n multi: true\n }\n ]);\n} ","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPDistributedEventListenerService } from '@acorex-platform/framework-client/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPQueryExecutionStage = 'before' | 'after';\n\nexport interface AXPQueryExecutionEvent<TInput = unknown, TResult = unknown> {\n executionId: string;\n stage: AXPQueryExecutionStage;\n key: string;\n input: TInput;\n options?: AXPQueryExecuteOptions;\n success?: boolean;\n result?: TResult | null;\n error?: unknown;\n durationMs?: number;\n}\n\ntype QueryExecutionHandler<TInput, TResult> = (event: AXPQueryExecutionEvent<TInput, TResult>) => void;\n\n//#endregion\n\nconst QUERY_EXECUTION_EVENT_KEY = '@queries:execution';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryEventsService {\n //#region ---- Services & Dependencies ----\n\n private readonly broadcast = inject(AXPBroadcastEventService);\n private readonly distributedEvents = inject(AXPDistributedEventListenerService, { optional: true });\n\n //#endregion\n\n //#region ---- Public API ----\n\n listen<TInput = unknown, TResult = unknown>(\n handler: QueryExecutionHandler<TInput, TResult>,\n ): () => void {\n const subscription = this.broadcast\n .listen<AXPQueryExecutionEvent<TInput, TResult>>(QUERY_EXECUTION_EVENT_KEY)\n .subscribe(({ data }) => handler(data));\n\n return () => subscription.unsubscribe();\n }\n\n async emit<TInput = unknown, TResult = unknown>(\n event: AXPQueryExecutionEvent<TInput, TResult>,\n ): Promise<void> {\n const safePayload = this.serializeForBroadcast(event);\n this.broadcast.publish(QUERY_EXECUTION_EVENT_KEY, safePayload);\n await this.distributedEvents?.dispatch(QUERY_EXECUTION_EVENT_KEY, safePayload);\n }\n\n //#endregion\n\n //#region ---- Broadcast payload ----\n\n private serializeForBroadcast<TInput, TResult>(\n event: AXPQueryExecutionEvent<TInput, TResult>,\n ): AXPQueryExecutionEvent {\n return {\n executionId: event.executionId,\n stage: event.stage,\n key: event.key,\n success: event.success,\n durationMs: event.durationMs,\n input: this.stripNonSerializable(event.input),\n result: event.result === undefined || event.result === null\n ? event.result\n : (this.stripNonSerializable(event.result) as TResult),\n error:\n event.error instanceof Error\n ? { name: event.error.name, message: event.error.message }\n : this.stripNonSerializable(event.error),\n };\n }\n\n private stripNonSerializable(value: unknown): unknown {\n const seen = new WeakSet<object>();\n\n const walk = (v: unknown): unknown => {\n if (v === null || v === undefined) {\n return v;\n }\n const t = typeof v;\n if (t === 'function' || t === 'symbol') {\n return undefined;\n }\n if (t === 'bigint') {\n return v.toString();\n }\n if (t !== 'object') {\n return v;\n }\n if (v instanceof Date) {\n return v.toISOString();\n }\n if (Array.isArray(v)) {\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n return v.map((item) => walk(item)).filter((item) => item !== undefined);\n }\n if (seen.has(v)) {\n return '[Circular]';\n }\n seen.add(v);\n const obj = v as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n const child = walk(obj[key]);\n if (child !== undefined) {\n out[key] = child;\n }\n }\n return out;\n };\n\n return walk(value);\n }\n\n //#endregion\n}\n","import { Injectable, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\nimport { createRandomUuid, type AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport {\n composeQueryMiddlewares,\n normalizeCommandInputForRemote,\n type AXPQueryExecuteOptions,\n type AXPQueryMiddleware,\n type AXPQueryMiddlewareContext,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXP_QUERY_EXTENSION } from './query.extension.token';\nimport { AXPQueryEventsService, AXPQueryExecutionEvent } from './query-events.service';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeQueryExecuteHookPayload,\n} from '../runtime-remote.hooks';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryExecutor {\n private readonly injector = inject(EnvironmentInjector);\n private readonly registry = inject(AXPQueryRegistry);\n private readonly extensions = inject(AXP_QUERY_EXTENSION, { optional: true });\n private readonly queryEvents = inject(AXPQueryEventsService);\n private readonly hooks = inject(AXPHookService);\n\n async fetch<TInput = any, TResult = any>(\n key: string,\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n const handler = this.registry.exists(key)\n ? await this.createLocalHandler<TInput, TResult>(key)\n : this.createRemoteHandler<TInput, TResult>(key);\n\n return this.runWithMiddlewareAndEvents(key, input, handler, options);\n }\n\n private async createLocalHandler<TInput, TResult>(\n key: string,\n ): Promise<(input: TInput) => Promise<AXPRuntimeQueryResult<TResult>>> {\n const loader = this.registry.getLoader(key);\n if (!loader) {\n throw new Error(`Query '${key}' is not registered`);\n }\n\n const query = await loader();\n return (i: TInput) => query.fetch(i) as Promise<AXPRuntimeQueryResult<TResult>>;\n }\n\n private createRemoteHandler<TInput, TResult>(\n key: string,\n ): (\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ) => Promise<AXPRuntimeQueryResult<TResult> | null> {\n return async (input: TInput, options?: AXPQueryExecuteOptions) => {\n const payload = await this.hooks.runAsync<AXPRuntimeQueryExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.QueryExecute,\n {\n name: key,\n input: normalizeCommandInputForRemote(input),\n options,\n },\n );\n\n if (!payload.handled) {\n throw new Error(`Query '${key}' is not registered and no remote handler is available`);\n }\n\n return (payload.result ?? null) as AXPRuntimeQueryResult<TResult> | null;\n };\n }\n\n private async runWithMiddlewareAndEvents<TInput, TResult>(\n key: string,\n input: TInput,\n handler: (\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ) => Promise<AXPRuntimeQueryResult<TResult> | null>,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n const pluginMiddlewares = this.getPluginMiddlewares(key);\n const globalMiddlewares = this.registry.getMiddlewares();\n\n type FetchResult = AXPRuntimeQueryResult<TResult> | null;\n\n // Registry middlewares are stored as AXPQueryMiddleware (unknown input/result).\n // Re-wrap in injection context and narrow for this fetch's TInput/TResult.\n const wrappedMiddlewares: AXPQueryMiddleware<TInput, FetchResult>[] = [\n ...globalMiddlewares,\n ...pluginMiddlewares,\n ].map((middleware) => {\n const wrapped: AXPQueryMiddleware<TInput, FetchResult> = (context, next) =>\n runInInjectionContext(this.injector, () =>\n middleware(\n context as AXPQueryMiddlewareContext,\n next as (ctx: AXPQueryMiddlewareContext) => Promise<unknown>,\n ),\n ) as Promise<FetchResult>;\n return wrapped;\n });\n\n const composed = composeQueryMiddlewares(wrappedMiddlewares)((context) =>\n handler(context.input, context.options),\n );\n\n return this.runWithEvents(key, input, () => composed({ input, key, options }), options);\n }\n\n private async runWithEvents<TInput, TResult>(\n key: string,\n input: TInput,\n run: () => Promise<AXPRuntimeQueryResult<TResult> | null>,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n const executionId = createRandomUuid();\n const startedAt = performance.now();\n\n const beforeEvent = {\n executionId,\n stage: 'before' as const,\n key,\n input,\n options,\n } satisfies AXPQueryExecutionEvent<TInput>;\n\n await this.queryEvents.emit(beforeEvent);\n\n try {\n const result = await run();\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: true,\n result,\n durationMs,\n } satisfies AXPQueryExecutionEvent<TInput, AXPRuntimeQueryResult<TResult>>;\n\n await this.queryEvents.emit(afterEvent);\n\n return result;\n } catch (error) {\n const durationMs = Math.round(performance.now() - startedAt);\n\n const afterEvent = {\n executionId,\n stage: 'after' as const,\n key,\n input,\n options,\n success: false,\n error,\n durationMs,\n } satisfies AXPQueryExecutionEvent<TInput, AXPRuntimeQueryResult<TResult>>;\n\n await this.queryEvents.emit(afterEvent);\n\n throw error;\n }\n }\n\n private getPluginMiddlewares(key: string): AXPQueryMiddleware[] {\n return (\n this.extensions\n ?.filter((ext) => (ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key))\n .map((ext) => ext.middleware) ?? []\n );\n }\n}\n","/**\n * Re-exports shared query middleware contracts.\n * Registration stays client-side (`provideQueryMiddleware` / registry.use).\n */\nexport {\n composeQueryMiddlewares,\n type AXPQueryExecuteOptions,\n type AXPQueryMiddleware,\n type AXPQueryMiddlewareContext,\n type AXPQuerySnapshotOption,\n} from '@acorex-platform/framework-shared/runtime';\n","import { Injectable, inject } from '@angular/core';\nimport type { AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';\nimport {\n AXPQuery,\n type AXPQueryExecuteOptions,\n type AXPQueryMiddleware,\n} from '@acorex-platform/framework-shared/runtime';\nimport { AXPQueryRegistry } from './query.registry';\nimport { AXPQueryExecutor } from './query.executor';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPQueryService {\n private readonly registry = inject(AXPQueryRegistry);\n private readonly executor = inject(AXPQueryExecutor);\n\n // Registry methods\n register(key: string, loader: () => Promise<AXPQuery>): void {\n this.registry.register(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.unregister(key);\n }\n\n use(middleware: AXPQueryMiddleware): void {\n this.registry.use(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.exists(key);\n }\n\n getRegisteredKeys(): string[] {\n return this.registry.getRegisteredKeys();\n }\n\n clear(): void {\n this.registry.clear();\n }\n\n /** Same envelope pattern as {@link AXPCommandService.execute}. */\n async fetch<TInput = unknown, TResult = unknown>(\n key: string,\n input: TInput,\n options?: AXPQueryExecuteOptions,\n ): Promise<AXPRuntimeQueryResult<TResult> | null> {\n return this.executor.fetch<TInput, TResult>(key, input, options);\n }\n}","import { AXPViewDefinition } from '@acorex-platform/framework-shared/core';\n\nexport type AXPViewMiddleware<TInput = any> = (\n input: TInput,\n next: (input: TInput) => Promise<AXPViewDefinition>\n) => Promise<AXPViewDefinition>;\n\nexport function composeViewMiddlewares<TInput>(\n middlewares: AXPViewMiddleware<TInput>[]\n): (handler: (input: TInput) => Promise<AXPViewDefinition>) => (input: TInput) => Promise<AXPViewDefinition> {\n return (handler: (input: TInput) => Promise<AXPViewDefinition>) => {\n let composed = handler;\n\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const mw = middlewares[i];\n const next = composed;\n\n composed = (input: TInput) => mw(input, next);\n }\n\n return composed;\n };\n} ","import { Injectable } from '@angular/core';\nimport { AXPViewProvider } from '@acorex-platform/framework-shared/runtime';\nimport { AXPViewMiddleware } from './view.middleware';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPViewRegistry {\n private registry = new Map<string, () => Promise<AXPViewProvider>>();\n private middlewares: AXPViewMiddleware[] = [];\n\n register(key: string, loader: () => Promise<AXPViewProvider>): void {\n this.registry.set(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.delete(key);\n }\n\n use(middleware: AXPViewMiddleware): void {\n this.middlewares.push(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getLoader(key: string): (() => Promise<AXPViewProvider>) | undefined {\n return this.registry.get(key);\n }\n\n getMiddlewares(): readonly AXPViewMiddleware[] {\n return [...this.middlewares];\n }\n\n getRegisteredKeys(): string[] {\n return Array.from(this.registry.keys());\n }\n\n clear(): void {\n this.registry.clear();\n this.middlewares.length = 0;\n }\n} ","import { InjectionToken } from '@angular/core';\nimport { AXPViewMiddleware } from './view.middleware';\n\nexport interface AXPViewExtension {\n target: string | RegExp;\n middleware: AXPViewMiddleware;\n}\n\nexport const AXP_VIEW_EXTENSION = new InjectionToken<AXPViewExtension[]>('AXP_VIEW_EXTENSION'); ","import { Injectable, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\nimport { AXPViewMiddleware, composeViewMiddlewares } from './view.middleware';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXP_VIEW_EXTENSION } from './view.extension.token';\nimport { AXPViewDefinition } from '@acorex-platform/framework-shared/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPViewExecutor {\n private readonly injector = inject(EnvironmentInjector);\n private readonly registry = inject(AXPViewRegistry);\n private readonly extensions = inject(AXP_VIEW_EXTENSION, { optional: true });\n\n async provide<TInput = any>(\n key: string,\n input: TInput\n ): Promise<AXPViewDefinition | null> {\n const loader = this.registry.getLoader(key);\n if (!loader) {\n return null;\n }\n\n const provider = await loader();\n const handler = (i: TInput) => provider.provide(i);\n\n const pluginMiddlewares = this.getPluginMiddlewares(key);\n const globalMiddlewares = this.registry.getMiddlewares();\n\n const wrappedMiddlewares = [...globalMiddlewares, ...pluginMiddlewares].map(middleware => {\n return (input: TInput, next: (input: TInput) => Promise<AXPViewDefinition>) =>\n runInInjectionContext(this.injector, () => middleware(input, next));\n });\n\n const composed = composeViewMiddlewares(wrappedMiddlewares)(handler);\n return composed(input);\n }\n\n private getPluginMiddlewares(key: string): AXPViewMiddleware[] {\n return this.extensions\n ?.filter(ext => ext.target instanceof RegExp ? ext.target.test(key) : ext.target === key)\n .map(ext => ext.middleware) ?? [];\n }\n} ","import { Injectable, inject } from '@angular/core';\nimport { AXPViewProvider } from '@acorex-platform/framework-shared/runtime';\nimport { AXPViewMiddleware } from './view.middleware';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXPViewExecutor } from './view.executor';\nimport { AXPViewDefinition } from '@acorex-platform/framework-shared/core';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPViewService {\n private readonly registry = inject(AXPViewRegistry);\n private readonly executor = inject(AXPViewExecutor);\n\n //#region ---- Registry Methods ----\n\n register(key: string, loader: () => Promise<AXPViewProvider>): void {\n this.registry.register(key, loader);\n }\n\n unregister(key: string): boolean {\n return this.registry.unregister(key);\n }\n\n use(middleware: AXPViewMiddleware): void {\n this.registry.use(middleware);\n }\n\n exists(key: string): boolean {\n return this.registry.exists(key);\n }\n\n getRegisteredKeys(): string[] {\n return this.registry.getRegisteredKeys();\n }\n\n clear(): void {\n this.registry.clear();\n }\n\n //#endregion\n\n //#region ---- Executor Methods ----\n\n async provide<TInput = any>(\n key: string,\n input: TInput\n ): Promise<AXPViewDefinition | null> {\n return this.executor.provide<TInput>(key, input);\n }\n\n //#endregion\n} ","import { EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXPViewProvider } from '@acorex-platform/framework-shared/runtime';\n\nexport const AXP_VIEW_SETUP = new InjectionToken<void>('AXP_VIEW_SETUP');\n\nexport function provideViewSetups(providers: Provider[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...providers,\n {\n provide: AXP_VIEW_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n\n // Setup will be handled by the provided registration functions\n return;\n },\n multi: true\n }\n ]);\n}\n\nexport function provideViewSetup(\n key: string,\n loader: () => Promise<AXPViewProvider>\n): Provider {\n return {\n provide: AXP_VIEW_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n registry.register(key, loader);\n return;\n },\n multi: true\n };\n} ","import { AXPPolicyEngineContext } from \"./policy.interface\";\n\nexport type AXPPolicyEngineMiddleware = (\n context: AXPPolicyEngineContext,\n next: (context: AXPPolicyEngineContext) => Promise<void>,\n) => Promise<void>;\n\nexport function composePolicyEngineMiddlewares(\n middlewares: AXPPolicyEngineMiddleware[]\n): (handler: (context: AXPPolicyEngineContext) => Promise<void>) => (context: AXPPolicyEngineContext) => Promise<void> {\n return (handler) => {\n let composed = handler;\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const mw = middlewares[i];\n const next = composed;\n composed = (context: AXPPolicyEngineContext) => mw(context, next);\n }\n return composed;\n };\n} ","import { AXPPolicyOptions } from \"./policy.types\";\n\nexport interface AXPPolicy {\n apply(context: AXPPolicyEngineContext): Promise<void>;\n}\n\n\nexport class AXPPolicyEngineContext {\n\n private _id: string;\n private _sender: AXPPolicyOptions['sender'];\n private _visible = true;\n private _enabled = true;\n\n constructor(options: AXPPolicyOptions) {\n this._id = options.id;\n this._sender = options.sender;\n }\n\n public get sender(): AXPPolicyOptions['sender'] {\n return this._sender;\n }\n\n public get id() {\n return this._id;\n }\n\n public get visible() {\n return this._visible;\n }\n\n public get enabled() {\n return this._enabled;\n }\n\n setVisible(visible: boolean) {\n this._visible = visible;\n return this;\n }\n setEnabled(enabled: boolean) {\n this._enabled = enabled;\n return this;\n }\n} \n","// plugins/command.extension.token.ts\nimport { InjectionToken } from '@angular/core';\nimport { AXPPolicyEngineMiddleware } from './policy.middleware';\n\nexport interface AXPPolicyExtension {\n key: string;\n middleware: AXPPolicyEngineMiddleware;\n}\n\nexport const AXP_POLICY_EXTENSION = new InjectionToken<AXPPolicyExtension[]>('AXP_POLICY_EXTENSION');\n","import { EnvironmentInjector, Inject, inject, Injectable, Optional, runInInjectionContext } from '@angular/core';\nimport { AXPPolicyEngineMiddleware, composePolicyEngineMiddlewares } from './policy.middleware';\nimport { AXPPolicyEngineContext } from './policy.interface';\nimport { AXPPolicyOptions } from './policy.types';\nimport { AXPPolicy } from './policy.interface';\nimport { AXP_POLICY_EXTENSION } from './policy.extension.token';\nimport { AXPPolicyExtension } from './policy.extension.token';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPPolicyEngineRegistry {\n private registry = new Map<string, () => Promise<AXPPolicy>>();\n private middlewares: AXPPolicyEngineMiddleware[] = [];\n private extensions = inject(AXP_POLICY_EXTENSION, { optional: true });\n\n private injector = inject(EnvironmentInjector);\n\n\n use(mw: AXPPolicyEngineMiddleware): void {\n this.middlewares.push(mw);\n }\n\n exists(key: string): boolean {\n return this.registry.has(key);\n }\n\n getPolicies(): string[] {\n return Array.from(this.registry.keys());\n }\n\n register(key: string, loader: () => Promise<AXPPolicy>): void {\n this.registry.set(key, loader);\n }\n\n\n private getPluginMiddlewares(key: string): AXPPolicyEngineMiddleware[] {\n return this.extensions\n ?.filter(ext => ext.key === key)\n .map(ext => ext.middleware) ?? [];\n }\n\n\n\n async execute(\n policy: string,\n instance: AXPPolicyOptions\n ): Promise<AXPPolicyEngineContext> {\n const loader = this.registry.get(policy);\n if (!loader) {\n throw new Error(`${policy} not implemented`);\n }\n const context = new AXPPolicyEngineContext(instance);\n const applier = await loader();\n const handler = (i: AXPPolicyEngineContext) => applier.apply(i);\n\n const pluginMws = this.getPluginMiddlewares(policy);\n\n const wrappedMws = [...this.middlewares, ...pluginMws].map(mw => {\n return (input: AXPPolicyEngineContext, next: (input: AXPPolicyEngineContext) => Promise<void>) =>\n runInInjectionContext(this.injector, () => mw(input, next));\n });\n\n const composed = composePolicyEngineMiddlewares(wrappedMws)(handler);\n await composed(context);\n return context;\n }\n} ","import { inject, Injectable } from \"@angular/core\";\nimport { AXPPolicyEngineRegistry } from \"./policy.registry\";\nimport { AXPPolicyOptions } from \"./policy.types\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPPolicyEngineService {\n private registry = inject(AXPPolicyEngineRegistry);\n\n\n\n async apply(options: AXPPolicyOptions) {\n const allPolicies = this.registry.getPolicies().filter(p => (options.policies?.length ?? 0) == 0 || options.policies?.includes(p));\n\n await Promise.all(allPolicies.map(async policy => {\n const context = await this.registry.execute(policy, options);\n return context;\n }));\n\n\n\n //\n // if (instance instanceof HTMLElement) {\n // if (context.visible === false) {\n // instance.style.display = 'none';\n // } else {\n // instance.style.display = '';\n // }\n // }\n // //\n // if (instance instanceof MXBaseComponent) {\n // if (context.visible === false) {\n // instance.getHostElement().style.display = 'none';\n // } else {\n // instance.getHostElement().style.display = '';\n // }\n // }\n // // Handle disabled state for interactive components\n // if (instance instanceof MXInteractiveComponent) {\n // if (context.enabled === false) {\n // instance.disabled = true;\n // } else {\n // instance.disabled = false;\n // }\n // }\n // // TODO: Handle object properties \n // if (instance instanceof Object) {\n // if (context.visible === false) {\n // set(instance, 'visible', false);\n // }\n // if (context.enabled === false) {\n // set(instance, 'disabled', true);\n // }\n // }\n }\n\n\n\n}\n","import { Directive, ElementRef, input, effect, inject } from '@angular/core';\nimport { AXPPolicyEngineService } from './policy.service';\nimport { castArray } from 'lodash-es';\n\n@Directive({\n selector: '[axp-apply-policy]',\n standalone: true\n})\nexport class AXPPolicyEngineDirective {\n policy = input.required<string | undefined | null>({ alias: 'axp-apply-policy' });\n private service = inject(AXPPolicyEngineService);\n private elementRef = inject(ElementRef<HTMLElement>);\n\n\n #eff = effect(async () => {\n const policy = this.policy();\n if (!policy) {\n return;\n }\n await this.service.apply({\n id: this.elementRef.nativeElement.id,\n policies: castArray(policy),\n sender: this.elementRef.nativeElement\n });\n });\n\n}\n","import { EnvironmentInjector, EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { AXPPolicyEngineRegistry } from './policy.registry';\nimport { AXPPolicy } from './policy.interface';\n\nexport const AXP_POLICY_ENGINE_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_POLICY_ENGINE_MIDDLEWARE_SETUP');\n\n\n\ntype AXPPolicyLoader = {\n key: string;\n policy: () => Type<AXPPolicy> | Promise<Type<AXPPolicy>>;\n};\n\n\nexport function providePolicySetups(entries: AXPPolicyLoader[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_POLICY_ENGINE_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPPolicyEngineRegistry);\n const injector = inject(EnvironmentInjector);\n\n for (const entry of entries) {\n registry.register(entry.key, async () => {\n const PolicyType = await entry.policy();\n return injector.get(PolicyType);\n });\n }\n\n return true;\n }\n }\n ]);\n}","import { EnvironmentProviders, inject, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { AXPViewRegistry } from './view.registry';\nimport { AXPViewMiddleware } from './view.middleware';\n\nexport const AXP_VIEW_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_VIEW_MIDDLEWARE_SETUP');\n\nexport function provideViewMiddleware(middlewares: AXPViewMiddleware[]): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: AXP_VIEW_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n middlewares.forEach(middleware => registry.use(middleware));\n return;\n },\n multi: true\n }\n ]);\n}\n\nexport function provideViewMiddlewareSetup(\n middleware: AXPViewMiddleware\n): Provider {\n return {\n provide: AXP_VIEW_MIDDLEWARE_SETUP,\n useFactory: () => {\n const registry = inject(AXPViewRegistry);\n registry.use(middleware);\n return;\n },\n multi: true\n };\n} ","import { NgModule, Inject, isDevMode, Optional, inject } from \"@angular/core\";\nimport { AXP_COMMAND_SETUP } from \"./commands/provide-command-setups\";\nimport { AXP_COMMAND_MIDDLEWARE_SETUP } from \"./commands/provide-command-middleware\";\nimport { AXP_QUERY_SETUP } from \"./queries/provide-query-setups\";\nimport { AXP_QUERY_MIDDLEWARE_SETUP } from \"./queries/provide-query-middleware\";\nimport { AXP_VIEW_SETUP } from \"./views/provide-view-setups\";\nimport { AXP_VIEW_MIDDLEWARE_SETUP } from \"./views/provide-view-middleware\";\nimport { AXP_POLICY_ENGINE_MIDDLEWARE_SETUP } from \"./policy/policy-middleware-provider\";\n\n@NgModule()\nexport class AXPRuntimeModule {\n\n private _commandSetup = inject(AXP_COMMAND_SETUP, { optional: true });\n private _commandMiddlewareSetup = inject(AXP_COMMAND_MIDDLEWARE_SETUP, { optional: true });\n\n private _querySetup = inject(AXP_QUERY_SETUP, { optional: true });\n private _queryMiddlewareSetup = inject(AXP_QUERY_MIDDLEWARE_SETUP, { optional: true });\n\n private _viewSetup = inject(AXP_VIEW_SETUP, { optional: true });\n private _viewMiddlewareSetup = inject(AXP_VIEW_MIDDLEWARE_SETUP, { optional: true });\n\n private _policyEngineSetup = inject(AXP_POLICY_ENGINE_MIDDLEWARE_SETUP, { optional: true });\n\n constructor() {\n if (isDevMode() && false) {\n console.log('[AXPRuntimeModule] Command Setup:', this._commandSetup);\n console.log('[AXPRuntimeModule] Command Middleware Setup:', this._commandMiddlewareSetup);\n console.log('[AXPRuntimeModule] Query Setup:', this._querySetup);\n console.log('[AXPRuntimeModule] Query Middleware Setup:', this._queryMiddlewareSetup);\n console.log('[AXPRuntimeModule] View Setup:', this._viewSetup);\n console.log('[AXPRuntimeModule] View Middleware Setup:', this._viewMiddlewareSetup);\n console.log('[AXPRuntimeModule] Policy Engine Setup:', this._policyEngineSetup);\n }\n }\n}\n","//#region ---- Runtime transport hooks ----\n\n/**\n * Distributed hook keys for keyed runtime transports (SSE, beacon, streaming POST).\n * Connectivity implements these via {@link AXPHookService.runAsync}.\n */\nexport const AXPRuntimeTransportHookKeys = {\n Execute: 'runtime.transport.execute',\n} as const;\n\nexport interface AXPRuntimeTransportExecuteHookPayload {\n key: string;\n input: unknown;\n /** Set by a provider when it handled the transport call. */\n handled?: boolean;\n result?: unknown;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXPRuntimeTransportHookKeys,\n type AXPRuntimeTransportExecuteHookPayload,\n} from './runtime-transport.hooks';\n\n//#endregion\n\n//#region ---- Runtime transport service ----\n\n/**\n * Dispatches keyed runtime transports (SSE, beacon, streaming) through distributed hooks.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPRuntimeTransportService {\n private readonly hooks = inject(AXPHookService);\n\n async execute<TInput = unknown, TResult = unknown>(key: string, input: TInput): Promise<TResult> {\n const payload = await this.hooks.runAsync<AXPRuntimeTransportExecuteHookPayload>(\n AXPRuntimeTransportHookKeys.Execute,\n { key, input },\n );\n\n if (!payload.handled) {\n throw new Error(`No runtime transport registered for key: ${key}`);\n }\n\n return payload.result as TResult;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPBulkCommandRequest,\n AXPBulkCommandResultData, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteBulkHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Host-app transport that performs a single real bulk call against any backend stack.\n * Must not fan out one-by-one on the client.\n */\nexport type AXPExternalRuntimeBulkTransport = (\n request: AXPBulkCommandRequest,\n) => AXPCommandExecuteResultPromise<AXPBulkCommandResultData>;\n\nexport interface AXPExternalRuntimeBulkTransportOptions {\n /**\n * Hook waterfall order (ascending). Default `-100` so this runs before the\n * connectivity default (`priority` unset / `0`) and can mark `handled: true`.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factory ----\n\n/**\n * Registers an external-stack implementation of `runtime.command.execute-bulk`.\n *\n * Use this when the host app consumes only the ACoreX **client** libraries and\n * implements the API in another stack. Entity bulk actions (`Entity:Bulk`,\n * selected delete, etc.) call {@link AXPBulkCommandService}, which runs this hook\n * once — no client-side per-id fan-out.\n *\n * @example\n * ```typescript\n * @NgModule({\n * providers: [\n * ...provideExternalRuntimeBulkTransport(async (request) => {\n * const response = await fetch(`${apiBase}/v1/runtime/commands/bulk`, {\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * Authorization: `Bearer ${token}`,\n * },\n * body: JSON.stringify(request),\n * });\n * return response.json();\n * }),\n * ],\n * })\n * export class AppModule {}\n * ```\n */\nexport function provideExternalRuntimeBulkTransport(\n transport: AXPExternalRuntimeBulkTransport,\n options: AXPExternalRuntimeBulkTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandExecuteBulkHookPayload,\n AXPRuntimeCommandExecuteBulkHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.CommandExecuteBulk,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const result = await transport(payload.request);\n return { ...payload, handled: true, result };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type { AXPCommandExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandExecuteHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Host-app transport for a single remote command. Must POST to the host API and\n * return the full runtime command envelope.\n *\n * Nest reference: `POST {baseUrl}/v1/runtime/commands` with body\n * `{ name, input, options? }`, or `POST {baseUrl}/v1/runtime/commands/invoke?name=…`\n * with body `input` when `options` is omitted.\n */\nexport type AXPExternalRuntimeCommandTransport = (\n name: string,\n input: unknown,\n options?: AXPCommandExecuteOptions,\n) => Promise<AXPRuntimeCommandResult>;\n\nexport interface AXPExternalRuntimeCommandTransportOptions {\n /**\n * Hook waterfall order (ascending). Default `-100` so this runs before the\n * connectivity default (`priority` unset / `0`) and can mark `handled: true`.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factory ----\n\n/**\n * Registers an external-stack implementation of `runtime.command.execute`.\n *\n * Use this when the host app consumes only the ACoreX **client** libraries and\n * implements the API in another stack. Official Nest / demo-api hosts should\n * import `AXCRuntimeRemoteApiModule` from `@acorex-platform/client-connectivity-api`\n * instead.\n *\n * @example\n * ```typescript\n * providers: [\n * ...provideExternalRuntimeCommandTransport(async (name, input, options) => {\n * const response = await fetch(`${apiBase}/v1/runtime/commands`, {\n * method: 'POST',\n * credentials: 'include',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ name, input: input ?? {}, options }),\n * });\n * return response.json();\n * }),\n * ]\n * ```\n */\nexport function provideExternalRuntimeCommandTransport(\n transport: AXPExternalRuntimeCommandTransport,\n options: AXPExternalRuntimeCommandTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandExecuteHookPayload,\n AXPRuntimeCommandExecuteHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.CommandExecute,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const result = await transport(payload.name, payload.input, payload.options);\n return { ...payload, handled: true, result };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPRuntimeQueryResult } from '@acorex-platform/framework-shared/core';\nimport type { AXPQueryExecuteOptions } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeQueryExecuteHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Host-app transport for a single remote query. Must POST to the host API and\n * return the full runtime query envelope (not unwrapped `data`).\n *\n * Nest reference: `POST {baseUrl}/v1/runtime/queries` with body\n * `{ name, input, options? }`, or `POST {baseUrl}/v1/runtime/queries/invoke?name=…`\n * with body `input` when `options` is omitted.\n */\nexport type AXPExternalRuntimeQueryTransport = (\n name: string,\n input: unknown,\n options?: AXPQueryExecuteOptions,\n) => Promise<AXPRuntimeQueryResult>;\n\nexport interface AXPExternalRuntimeQueryTransportOptions {\n /**\n * Hook waterfall order (ascending). Default `-100` so this runs before the\n * connectivity default (`priority` unset / `0`) and can mark `handled: true`.\n */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factory ----\n\n/**\n * Registers an external-stack implementation of `runtime.query.execute`.\n *\n * Use this when the host app consumes only the ACoreX **client** libraries and\n * implements the API in another stack. Official Nest / demo-api hosts should\n * import `AXCRuntimeRemoteApiModule` from `@acorex-platform/client-connectivity-api`\n * instead (also pulled in by `AXMSettingsManagementModule`).\n *\n * @example\n * ```typescript\n * providers: [\n * ...provideExternalRuntimeQueryTransport(async (name, input, options) => {\n * const response = await fetch(`${apiBase}/v1/runtime/queries`, {\n * method: 'POST',\n * credentials: 'include',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ name, input: input ?? {}, options }),\n * });\n * return response.json();\n * }),\n * ]\n * ```\n */\nexport function provideExternalRuntimeQueryTransport(\n transport: AXPExternalRuntimeQueryTransport,\n options: AXPExternalRuntimeQueryTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeQueryExecuteHookPayload,\n AXPRuntimeQueryExecuteHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.QueryExecute,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const result = await transport(payload.name, payload.input, payload.options);\n return { ...payload, handled: true, result };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { type Provider } from '@angular/core';\nimport {\n AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n type AXPDistributedEventListenerProvider,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPBulkCommandProgress } from '@acorex-platform/framework-shared/runtime';\nimport { AXPBulkProgressChannel } from './commands/bulk-progress.channel';\nimport {\n AXPRuntimeRemoteHookKeys,\n type AXPRuntimeCommandBulkProgressHookPayload,\n} from './runtime-remote.hooks';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type AXPBulkProgressPollTransport = (\n executionId: string,\n) => Promise<AXPBulkCommandProgress | null | undefined>;\n\nexport interface AXPBulkProgressPollTransportOptions {\n /** Hook waterfall order (ascending). Default `-100` so this runs before connectivity. */\n priority?: number;\n}\n\n//#endregion\n\n//#region ---- Provider factories ----\n\n/** Replace the default {@link AXPBulkProgressChannel} (e.g. SSE or a host-specific bus). */\nexport function provideBulkProgressChannel(factory: () => AXPBulkProgressChannel): Provider[] {\n return [\n {\n provide: AXPBulkProgressChannel,\n useFactory: factory,\n },\n ];\n}\n\n/**\n * Registers a poll transport for hosts that have a progress HTTP API but no realtime.\n * Same pattern as {@link provideExternalRuntimeBulkTransport}.\n */\nexport function provideBulkProgressPollTransport(\n transport: AXPBulkProgressPollTransport,\n options: AXPBulkProgressPollTransportOptions = {},\n): Provider[] {\n const priority = options.priority ?? -100;\n\n const provider: AXPDistributedEventListenerProvider<\n AXPRuntimeCommandBulkProgressHookPayload,\n AXPRuntimeCommandBulkProgressHookPayload\n > = {\n key: AXPRuntimeRemoteHookKeys.CommandBulkProgress,\n priority,\n async execute(payload) {\n if (payload.handled) {\n return payload;\n }\n const progress = await transport(payload.executionId);\n return { ...payload, handled: true, progress: progress ?? null };\n },\n };\n\n return [\n {\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: provider,\n multi: true,\n },\n ];\n}\n\n//#endregion\n","// Commands\nexport * from './lib/commands';\n\n// Queries\nexport * from './lib/queries';\n\n// Views\nexport * from './lib/views';\n\n// Policy\nexport * from './lib/policy';\n\n// Runtime\nexport * from './lib/runtime.module';\nexport * from './lib/runtime-remote.hooks';\nexport * from './lib/runtime-transport.hooks';\nexport * from './lib/runtime-transport.service';\nexport * from './lib/provide-external-runtime-bulk-transport';\nexport * from './lib/provide-external-runtime-command-transport';\nexport * from './lib/provide-external-runtime-query-transport';\nexport * from './lib/provide-bulk-progress-channel';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|