@acorex/connectivity 21.0.0-next.43 → 21.0.0-next.44

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.
Files changed (19) hide show
  1. package/fesm2022/acorex-connectivity-api.mjs +89 -3
  2. package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
  3. package/fesm2022/{acorex-connectivity-mock-acorex-connectivity-mock-Dy--4by0.mjs → acorex-connectivity-mock-acorex-connectivity-mock-QxKVNQo9.mjs} +284 -148
  4. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-QxKVNQo9.mjs.map +1 -0
  5. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-C28tH9lJ.mjs → acorex-connectivity-mock-assign-to-manager.activity-GtNzTHWI.mjs} +2 -2
  6. package/fesm2022/{acorex-connectivity-mock-assign-to-manager.activity-C28tH9lJ.mjs.map → acorex-connectivity-mock-assign-to-manager.activity-GtNzTHWI.mjs.map} +1 -1
  7. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-sx2CDa3S.mjs → acorex-connectivity-mock-chat-generate-image.command-BAMTtIN_.mjs} +2 -2
  8. package/fesm2022/{acorex-connectivity-mock-chat-generate-image.command-sx2CDa3S.mjs.map → acorex-connectivity-mock-chat-generate-image.command-BAMTtIN_.mjs.map} +1 -1
  9. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-DteMILSk.mjs → acorex-connectivity-mock-chat-synthesize-speech.command-C0pQvhMF.mjs} +2 -2
  10. package/fesm2022/{acorex-connectivity-mock-chat-synthesize-speech.command-DteMILSk.mjs.map → acorex-connectivity-mock-chat-synthesize-speech.command-C0pQvhMF.mjs.map} +1 -1
  11. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-ZqjqR8B5.mjs → acorex-connectivity-mock-chat-transcribe-speech.command-BRDl6roP.mjs} +2 -2
  12. package/fesm2022/{acorex-connectivity-mock-chat-transcribe-speech.command-ZqjqR8B5.mjs.map → acorex-connectivity-mock-chat-transcribe-speech.command-BRDl6roP.mjs.map} +1 -1
  13. package/fesm2022/{acorex-connectivity-mock-user-roles-for-list-column.query-Bq_It_Wl.mjs → acorex-connectivity-mock-user-roles-for-list-column.query-DOAMknK8.mjs} +2 -2
  14. package/fesm2022/{acorex-connectivity-mock-user-roles-for-list-column.query-Bq_It_Wl.mjs.map → acorex-connectivity-mock-user-roles-for-list-column.query-DOAMknK8.mjs.map} +1 -1
  15. package/fesm2022/acorex-connectivity-mock.mjs +1 -1
  16. package/package.json +2 -2
  17. package/types/acorex-connectivity-api.d.ts +12 -1
  18. package/types/acorex-connectivity-mock.d.ts +41 -2
  19. package/fesm2022/acorex-connectivity-mock-acorex-connectivity-mock-Dy--4by0.mjs.map +0 -1
@@ -2,8 +2,8 @@ import { AXSafePipe } from '@acorex/core/pipes';
2
2
  import * as i2$2 from '@acorex/platform/auth';
3
3
  import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER, AXP_APPLICATION_LOADER, AXP_FEATURE_LOADER, AXP_PERMISSION_LOADER, AXP_TENANT_LOADER, AXP_PERMISSION_CHECKER, AXP_FEATURE_CHECKER, AXPLoginChallengeComponentBase, AXPLoginChallengeProvider, AXPAuthStrategy, AXPAuthModule, AXP_LOGIN_CHALLENGE_PROVIDER } from '@acorex/platform/auth';
4
4
  import * as i1 from '@acorex/platform/core';
5
- import { applyFilterArray, applySortArray, AXPDataGenerator, AXPIconLogoConfig, AXPModuleManifestRegistry, AXPActivityLogProvider, AXP_ACTIVITY_LOG_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXPDataSourceDefinitionProviderService, AXPPlatformScope, AXPExpressionEvaluatorService, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, provideLazyProvider } from '@acorex/platform/core';
6
- import { AXP_ENTITY_STORAGE_BACKEND, AXPEntityStorageService, isAXPMiddlewareAbortError, AXPEntityResolver, collectEntityQuickSearchFieldPaths, AXP_ENTITY_DEFINITION_CRUD_SERVICE, AXPEntityService, AXP_ENTITY_DEFINITION_LOADER, AXPMiddlewareAbortError, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_STORAGE_MIDDLEWARE, AXPEntityDefinitionRegistryService, eventDispatchMiddleware, AXPDataSeederService } from '@acorex/platform/layout/entity';
5
+ import { AXPDataGenerator, AXPIconLogoConfig, AXPModuleManifestRegistry, AXPActivityLogProvider, AXP_ACTIVITY_LOG_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXPDataSourceDefinitionProviderService, AXPPlatformScope, AXPExpressionEvaluatorService, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, provideLazyProvider } from '@acorex/platform/core';
6
+ import { runEntityQuery, filterSortEntityRows, computeEntityAggregates, AXP_ENTITY_STORAGE_BACKEND, AXPEntityStorageService, isAXPMiddlewareAbortError, AXPEntityResolver, collectEntityQuickSearchFieldPaths, AXP_ENTITY_DEFINITION_CRUD_SERVICE, AXPEntityService, AXP_ENTITY_DEFINITION_LOADER, AXPMiddlewareAbortError, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_STORAGE_MIDDLEWARE, AXPEntityDefinitionRegistryService, eventDispatchMiddleware, AXPDataSeederService } from '@acorex/platform/layout/entity';
7
7
  import * as i0 from '@angular/core';
8
8
  import { InjectionToken, inject, Injectable, NgModule, isDevMode, Injector, Inject, signal, Component } from '@angular/core';
9
9
  import { AXP_MENU_PROVIDER, AXPFileStorageService, AXPSettingsService, AXPSystemStatusType, AXPAppVersionService, AXPFileStorageStatus, AXVChangeType as AXVChangeType$1, AXP_SEARCH_PROVIDER, AXPLockService, AXPVersioningService, AXPSystemStatuses, AXPStatusDefinitionProviderService } from '@acorex/platform/common';
@@ -23,13 +23,14 @@ import { AXMAssetManagementFeatureKeys, RootConfig as RootConfig$4, AXMAssetStat
23
23
  import { AXMAssessmentManagementFeatureKeys, RootConfig as RootConfig$3, AXMAssessmentManagementPermissionKeys } from '@acorex/modules/assessment-management';
24
24
  import { AXPCommonFeatureKeys, AXPWidgetsList } from '@acorex/modules/common';
25
25
  import { AXMDataManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$2, RootConfig as RootConfig$d, AXMQueryServiceImpl, ShowMetaDataFormPopupCommand, ShowMetaDataBuilderPopupCommand, AXMQueryService } from '@acorex/modules/data-management';
26
- import { AXPHumanCapitalManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$4, RootConfig as RootConfig$j, AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS } from '@acorex/modules/human-capital-management';
26
+ import { AXPHumanCapitalManagementFeatureKeys, AXMPermissionsKeys as AXMPermissionsKeys$5, RootConfig as RootConfig$j, AXM_POSITION_ASSIGNMENT_OVERLAPPING_STATUS_IDS } from '@acorex/modules/human-capital-management';
27
27
  import { RootConfig as RootConfig$5 } from '@acorex/modules/locale-management';
28
28
  import { AXMPermissionsKeys as AXMPermissionsKeys$1, AXMSubscriptionManagementSubscriptionEntityService, AXMSubscriptionManagementSubscriptionPlanItemEntityService, RootConfig as RootConfig$w } from '@acorex/modules/subscription-management';
29
29
  import { AXPSecurityManagementPermissionKeys, AXMUserAccessState, resolveAXMUserEffectiveState, RootConfig as RootConfig$6, AXMUsersEntityService, AXMPolicyService } from '@acorex/modules/security-management';
30
30
  import { AXMTenantManagementPermissionsKeys, AXMTenantService, AXMTenantManagementTenantUserEntityService, RootConfig as RootConfig$z } from '@acorex/modules/tenant-management';
31
- import { AXMPermissionsKeys as AXMPermissionsKeys$3, RootConfig as RootConfig$e, AXMDocumentTypeServiceImpl, AXPDocumentManagementService } from '@acorex/modules/document-management';
31
+ import { AXMPermissionsKeys as AXMPermissionsKeys$4, RootConfig as RootConfig$e, AXMDocumentTypeServiceImpl, AXPDocumentManagementService } from '@acorex/modules/document-management';
32
32
  import { AXMSettingsManagementPermissionKeys } from '@acorex/modules/settings-management';
33
+ import { AXMPermissionsKeys as AXMPermissionsKeys$3, RootConfig as RootConfig$y, AXPWorkflowTaskProvider } from '@acorex/modules/task-management';
33
34
  import { RootConfig as RootConfig$7 } from '@acorex/modules/business-core';
34
35
  import { RootConfig as RootConfig$8 } from '@acorex/modules/calendar-management';
35
36
  import { AXFileService } from '@acorex/core/file';
@@ -77,7 +78,6 @@ import { RootConfig as RootConfig$v } from '@acorex/modules/reservation-manageme
77
78
  import { AXMSessionStatusTypes, AXMDeviceSessionsServiceImpl, AXMDeviceSessionsService, AXM_AUTH_CONFIG_TOKEN } from '@acorex/modules/auth';
78
79
  import * as i1$3 from '@acorex/components/dialog';
79
80
  import { RootConfig as RootConfig$x } from '@acorex/modules/supplier-management';
80
- import { RootConfig as RootConfig$y, AXPWorkflowTaskProvider } from '@acorex/modules/task-management';
81
81
  import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
82
82
  import { Router } from '@angular/router';
83
83
  import { AXPWorkflowManager, AXPWorkflowDefinitionService, AXPActivityDefinitionService, AXP_WORKFLOW_PROVIDER, WorkflowExpressionScopeService, AXP_WORKFLOW_ENGINE } from '@acorex/platform/workflow';
@@ -105,112 +105,8 @@ const AXC_FIRESTORE_CONFIG = new InjectionToken('AXC_FIRESTORE_CONFIG', {
105
105
  });
106
106
  //#endregion
107
107
 
108
- //#endregion
109
- //#region ---- Pure helpers ----
110
- /**
111
- * Fields where `contains` means hierarchical category membership (expand to descendants).
112
- * Excludes e.g. `roleIds`, which uses array membership only and must use normal filter logic.
113
- */
114
- function isCategoryContainsFieldName(field) {
115
- if (field === 'categoryIds') {
116
- return true;
117
- }
118
- if (typeof field === 'string' && field.endsWith('Ids') && field !== 'roleIds') {
119
- return true;
120
- }
121
- return false;
122
- }
123
- /**
124
- * Check if the entity is a category entity (ends with 'Category').
125
- */
126
- function isCategoryEntity(entityName) {
127
- return entityName.endsWith('Category');
128
- }
129
- /**
130
- * Check if the filter is a category filter (contains operator on categoryIds field).
131
- * Handles both simple filters and compound filters.
132
- */
133
- function isCategoryFilter(filter) {
134
- if (filter?.operator?.type === 'contains' && isCategoryContainsFieldName(filter.field)) {
135
- return true;
136
- }
137
- if (filter?.logic && filter?.filters && Array.isArray(filter.filters)) {
138
- return filter.filters.some((nestedFilter) => nestedFilter?.operator?.type === 'contains' && isCategoryContainsFieldName(nestedFilter.field));
139
- }
140
- return false;
141
- }
142
- //#endregion
143
- //#region ---- Query execution ----
144
- /**
145
- * Apply recursive category filtering: entities that belong to the category or any of its children.
146
- */
147
- async function applyRecursiveCategoryFilter(result, filter, entityName, getAllChildCategoryIds) {
148
- let categoryFilter = filter;
149
- let otherFilters = [];
150
- if (filter?.logic && filter?.filters && Array.isArray(filter.filters)) {
151
- const categoryFilterIndex = filter.filters.findIndex((f) => f?.operator?.type === 'contains' && isCategoryContainsFieldName(f.field));
152
- if (categoryFilterIndex !== -1) {
153
- categoryFilter = filter.filters[categoryFilterIndex];
154
- otherFilters = filter.filters.filter((_, index) => index !== categoryFilterIndex);
155
- }
156
- }
157
- if (!categoryFilter) {
158
- return applyFilterArray(result, [filter]);
159
- }
160
- const categoryId = categoryFilter.value;
161
- const categoryField = categoryFilter.field;
162
- const allCategoryIds = await getAllChildCategoryIds(categoryId, entityName);
163
- let filteredResult = result.filter((item) => {
164
- const categoryIds = item[categoryField];
165
- if (!categoryIds)
166
- return false;
167
- const itemCategoryIds = Array.isArray(categoryIds) ? categoryIds : [categoryIds];
168
- return itemCategoryIds.some((itemCategoryId) => allCategoryIds.includes(itemCategoryId));
169
- });
170
- if (otherFilters.length > 0) {
171
- filteredResult = applyFilterArray(filteredResult, otherFilters);
172
- }
173
- return filteredResult;
174
- }
175
- /**
176
- * Calculate childrenCount for each category entity when missing.
177
- */
178
- async function calculateChildrenCounts(items, entityName, getDirectChildCount) {
179
- return Promise.all(items.map(async (item) => {
180
- if (typeof item.childrenCount === 'number') {
181
- return { ...item };
182
- }
183
- const childrenCount = await getDirectChildCount(item.id, entityName);
184
- return { ...item, childrenCount };
185
- }));
186
- }
187
- /**
188
- * Shared entity query logic: sort, filter (including recursive category filter), childrenCount, pagination.
189
- * Used by both Dexie and Firestore backends.
190
- */
191
- async function runEntityQuery(entityName, request, adapters) {
192
- let result = await adapters.getRawAll(entityName);
193
- if (request.sort && request.sort.length) {
194
- result = applySortArray(result, request.sort);
195
- }
196
- if (request.filter && isCategoryFilter(request.filter)) {
197
- result = await applyRecursiveCategoryFilter(result, request.filter, entityName, adapters.getAllChildCategoryIds);
198
- }
199
- else {
200
- result = applyFilterArray(result, request.filter ? [request.filter] : []);
201
- }
202
- if (isCategoryEntity(entityName)) {
203
- result = await calculateChildrenCounts(result, entityName, adapters.getDirectChildCount);
204
- }
205
- const skip = request.skip ?? 0;
206
- const take = request.take ?? 0;
207
- return {
208
- total: result.length,
209
- items: result.slice(skip, skip + take),
210
- };
211
- }
212
- //#endregion
213
-
108
+ /** Rows loaded into memory for aggregation on mock backends (safety cap). */
109
+ const ENTITY_AGGREGATE_MAX_ROWS$1 = 500_000;
214
110
  class AXCDexieEntityStorageService extends Dexie {
215
111
  constructor() {
216
112
  super('ACoreXPlatform');
@@ -315,13 +211,61 @@ class AXCDexieEntityStorageService extends Dexie {
315
211
  return await this.table('entity-store').where({ entityName }).toArray();
316
212
  }
317
213
  async query(entityName, request) {
318
- return runEntityQuery(entityName, request, {
214
+ return runEntityQuery(entityName, request, this.createQueryAdapters());
215
+ }
216
+ async count(entityName, request) {
217
+ const rows = await filterSortEntityRows(entityName, request, this.createQueryAdapters());
218
+ return rows.length;
219
+ }
220
+ async queryAll(entityName, request, options) {
221
+ const rows = await filterSortEntityRows(entityName, request, this.createQueryAdapters());
222
+ const maxRows = options?.maxRows ?? Number.POSITIVE_INFINITY;
223
+ const capped = Number.isFinite(maxRows) ? rows.slice(0, maxRows) : rows;
224
+ const truncated = Number.isFinite(maxRows) && rows.length > maxRows;
225
+ return {
226
+ items: capped,
227
+ total: rows.length,
228
+ truncated,
229
+ };
230
+ }
231
+ async getMany(entityName, ids) {
232
+ return Promise.all(ids.map(async (id) => {
233
+ const row = await this.getOne(entityName, id);
234
+ return row ?? null;
235
+ }));
236
+ }
237
+ async exists(entityName, id) {
238
+ const row = await this.getOne(entityName, id);
239
+ return row != null;
240
+ }
241
+ async upsertOne(entityName, entity, options) {
242
+ const id = entity?.id;
243
+ if (id) {
244
+ const existing = await this.getOne(entityName, id);
245
+ if (existing != null) {
246
+ const merge = options?.merge !== false;
247
+ const next = merge ? { ...existing, ...entity } : { ...entity };
248
+ const { id: _omit, ...patch } = next;
249
+ await this.updateOne(entityName, id, patch);
250
+ return id;
251
+ }
252
+ }
253
+ return this.insertOne(entityName, entity);
254
+ }
255
+ async aggregate(entityName, request, options) {
256
+ const maxRows = options?.maxRows ?? ENTITY_AGGREGATE_MAX_ROWS$1;
257
+ const rows = await filterSortEntityRows(entityName, request, this.createQueryAdapters());
258
+ const slice = rows.slice(0, maxRows);
259
+ return { rows: computeEntityAggregates(slice, request) };
260
+ }
261
+ //#region ---- Private Helper Methods (used by runEntityQuery adapters) ----
262
+ createQueryAdapters() {
263
+ return {
319
264
  getRawAll: (name) => this.table('entity-store').where({ entityName: name }).toArray(),
320
265
  getDirectChildCount: (categoryId, name) => this.getDirectChildCount(categoryId, name),
321
266
  getAllChildCategoryIds: (categoryId, name) => this.getAllChildCategoryIds(categoryId, name),
322
- });
267
+ };
323
268
  }
324
- //#region ---- Private Helper Methods (used by runEntityQuery adapters) ----
325
269
  async getDirectChildCount(categoryId, entityName) {
326
270
  const children = await this.table('entity-store')
327
271
  .where({ entityName })
@@ -349,6 +293,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
349
293
  }], ctorParameters: () => [] });
350
294
 
351
295
  const ENTITY_STORE_COLLECTION = 'entity-store';
296
+ /** Rows loaded into memory for aggregation on mock backends (safety cap). */
297
+ const ENTITY_AGGREGATE_MAX_ROWS = 500_000;
352
298
  /** Firestore batch write/delete limit per commit. */
353
299
  const FIRESTORE_BATCH_MAX$1 = 500;
354
300
  /**
@@ -533,14 +479,64 @@ class AXCFirestoreEntityStorageService {
533
479
  return this.getRawAll(entityName);
534
480
  }
535
481
  async query(entityName, request) {
536
- return runEntityQuery(entityName, request, {
482
+ return runEntityQuery(entityName, request, this.createQueryAdapters());
483
+ }
484
+ async count(entityName, request) {
485
+ const rows = await filterSortEntityRows(entityName, request, this.createQueryAdapters());
486
+ return rows.length;
487
+ }
488
+ async queryAll(entityName, request, options) {
489
+ const rows = await filterSortEntityRows(entityName, request, this.createQueryAdapters());
490
+ const maxRows = options?.maxRows ?? Number.POSITIVE_INFINITY;
491
+ const capped = Number.isFinite(maxRows) ? rows.slice(0, maxRows) : rows;
492
+ const truncated = Number.isFinite(maxRows) && rows.length > maxRows;
493
+ return {
494
+ items: capped,
495
+ total: rows.length,
496
+ truncated,
497
+ };
498
+ }
499
+ async getMany(entityName, ids) {
500
+ return Promise.all(ids.map(async (id) => {
501
+ const row = await this.getOne(entityName, id);
502
+ return row ?? null;
503
+ }));
504
+ }
505
+ async exists(entityName, id) {
506
+ const row = await this.getOne(entityName, id);
507
+ return row != null;
508
+ }
509
+ async upsertOne(entityName, entity, options) {
510
+ const id = entity?.id;
511
+ if (id) {
512
+ const existing = await this.getOne(entityName, id);
513
+ if (existing != null) {
514
+ const merge = options?.merge !== false;
515
+ const next = merge
516
+ ? { ...existing, ...entity }
517
+ : { ...entity };
518
+ const { id: _omit, ...patch } = next;
519
+ await this.updateOne(entityName, id, patch);
520
+ return id;
521
+ }
522
+ }
523
+ return this.insertOne(entityName, entity);
524
+ }
525
+ async aggregate(entityName, request, options) {
526
+ const maxRows = options?.maxRows ?? ENTITY_AGGREGATE_MAX_ROWS;
527
+ const rows = await filterSortEntityRows(entityName, request, this.createQueryAdapters());
528
+ const slice = rows.slice(0, maxRows);
529
+ return { rows: computeEntityAggregates(slice, request) };
530
+ }
531
+ //#endregion
532
+ //#region ---- Adapters for runEntityQuery ----
533
+ createQueryAdapters() {
534
+ return {
537
535
  getRawAll: (name) => this.getRawAll(name),
538
536
  getDirectChildCount: (categoryId, name) => this.getDirectChildCount(categoryId, name),
539
537
  getAllChildCategoryIds: (categoryId, name) => this.getAllChildCategoryIds(categoryId, name),
540
- });
538
+ };
541
539
  }
542
- //#endregion
543
- //#region ---- Adapters for runEntityQuery ----
544
540
  /**
545
541
  * Load all documents for an entity (same approach as Dexie: load by entityName, filter in runEntityQuery).
546
542
  * Firestore and Dexie share the same runEntityQuery + applyFilterArray so behavior stays consistent.
@@ -813,6 +809,38 @@ function parseEntityStorageQueryRequest(raw) {
813
809
  };
814
810
  }
815
811
  //#endregion
812
+ //#region ---- Aggregate request parse ----
813
+ /**
814
+ * Parses optional aggregate payload (JSON object or string). Requires `groupBy` and `measures`.
815
+ */
816
+ function parseEntityStorageAggregateRequest(raw) {
817
+ if (raw == null || raw === '') {
818
+ return null;
819
+ }
820
+ let obj = raw;
821
+ if (typeof raw === 'string') {
822
+ try {
823
+ obj = JSON.parse(raw);
824
+ }
825
+ catch {
826
+ return null;
827
+ }
828
+ }
829
+ if (typeof obj !== 'object' || obj === null) {
830
+ return null;
831
+ }
832
+ const o = obj;
833
+ if (!Array.isArray(o['groupBy']) || !Array.isArray(o['measures'])) {
834
+ return null;
835
+ }
836
+ return {
837
+ groupBy: o['groupBy'],
838
+ measures: o['measures'],
839
+ filter: o['filter'],
840
+ sort: o['sort'],
841
+ };
842
+ }
843
+ //#endregion
816
844
  //#region ---- AI-friendly quick search → standard filter ----
817
845
  /** Fields commonly present across entities; always included for quickSearch. */
818
846
  const ENTITY_STORAGE_QUICK_SEARCH_BASE_FIELD_PATHS = ['id', 'code', 'title', 'name', 'shortName'];
@@ -863,6 +891,9 @@ function mergeQuickSearchIntoRequest(request, quickSearch, quickSearchExtraConta
863
891
  }
864
892
  //#endregion
865
893
 
894
+ //#region ---- Types ----
895
+ /** Default cap when draining rows (`resultMode: all`) or aggregating without `maxFetchRows`. */
896
+ const DEFAULT_MAX_FETCH_ROWS = 50_000;
866
897
  /**
867
898
  * Normalizes tool/AI payloads: string[] or JSON string array or comma-separated paths.
868
899
  */
@@ -891,10 +922,27 @@ function normalizeQuickSearchFieldPaths(raw) {
891
922
  }
892
923
  return [];
893
924
  }
925
+ function normalizeResultMode(raw) {
926
+ const s = typeof raw === 'string' ? raw.trim().toLowerCase() : raw;
927
+ if (s === 'count' || s === 'all') {
928
+ return s;
929
+ }
930
+ return 'page';
931
+ }
932
+ function normalizeMaxFetchRows(raw) {
933
+ if (raw == null || raw === '') {
934
+ return DEFAULT_MAX_FETCH_ROWS;
935
+ }
936
+ const n = typeof raw === 'number' ? raw : Number(String(raw).trim());
937
+ if (!Number.isFinite(n) || n <= 0) {
938
+ return DEFAULT_MAX_FETCH_ROWS;
939
+ }
940
+ return Math.floor(n);
941
+ }
894
942
  //#endregion
895
943
  //#region ---- Query ----
896
944
  /**
897
- * Runs {@link AXPEntityStorageService#query} against the active mock storage backend (Dexie or Firestore).
945
+ * Runs entity storage reads via {@link AXPEntityStorageService} (active connectivity backend).
898
946
  */
899
947
  class AXCEntityStorageQueryQuery {
900
948
  constructor() {
@@ -938,6 +986,46 @@ class AXCEntityStorageQueryQuery {
938
986
  const quickPaths = [...new Set([...fromSchema, ...explicit])];
939
987
  merged = mergeQuickSearchIntoRequest(request, input.quickSearch, quickPaths);
940
988
  }
989
+ const filterSort = { filter: merged.filter, sort: merged.sort };
990
+ const maxFetch = normalizeMaxFetchRows(input.maxFetchRows);
991
+ const aggregateReq = parseEntityStorageAggregateRequest(input.aggregate ?? null);
992
+ if (aggregateReq) {
993
+ const aggPayload = {
994
+ ...aggregateReq,
995
+ filter: aggregateReq.filter ?? merged.filter,
996
+ sort: aggregateReq.sort ?? merged.sort,
997
+ };
998
+ const agg = await this.entityStorage.aggregate(entity, aggPayload, {
999
+ maxRows: maxFetch,
1000
+ pageSize: 500,
1001
+ });
1002
+ return {
1003
+ success: true,
1004
+ total: agg.rows.length,
1005
+ aggregateRows: agg.rows,
1006
+ };
1007
+ }
1008
+ const mode = normalizeResultMode(input.resultMode);
1009
+ if (mode === 'count') {
1010
+ const total = await this.entityStorage.count(entity, filterSort);
1011
+ return {
1012
+ success: true,
1013
+ total,
1014
+ items: [],
1015
+ };
1016
+ }
1017
+ if (mode === 'all') {
1018
+ const all = await this.entityStorage.queryAll(entity, filterSort, {
1019
+ maxRows: maxFetch,
1020
+ pageSize: 500,
1021
+ });
1022
+ return {
1023
+ success: true,
1024
+ total: all.total,
1025
+ items: all.items,
1026
+ truncated: all.truncated,
1027
+ };
1028
+ }
941
1029
  const page = await this.entityStorage.query(entity, merged);
942
1030
  return {
943
1031
  success: true,
@@ -13908,8 +13996,8 @@ const AI_AGENT_MOCK = [
13908
13996
  'You are the platform entity specialist for ACoreX.',
13909
13997
  'Use PlatformManagement:ListRegisteredEntities to discover or validate Module.Entity keys and to inspect entity definitions (required fields, types).',
13910
13998
  'When explaining fields to end users in chat, mention **human-readable `title`** text from **`properties`**; use internal **`name`** only when the user wants technical/schema detail.',
13911
- 'Use ConnectivityMock:EntityStorage:Query to list or search stored rows once the entity key is known.',
13912
- 'If the query is paginated or totals/charts need **every** row, **fetch remaining pages** (next offset/cursor per schema) in further tool turns until complete — do not ask the user to approve each page.',
13999
+ 'Use ConnectivityMock:EntityStorage:Query to read stored rows once the entity key is known (data layer: same tool name). Prefer resultMode `all` with maxFetchRows for the full filtered set in one call, `count` for totals only, or `aggregate` (groupBy + measures) for grouped summaries before charts.',
14000
+ 'If you stay on default paging (`resultMode` page / skip–take) and totals require **every** row, fetch remaining pages in further tool turns until complete — do not ask the user to approve each page.',
13913
14001
  'Use Entity:Create and Entity:Update only with arguments that match each command schema; confirm outcomes from tool results and never fabricate success.',
13914
14002
  'Prefer read-only queries before mutations when you still need identifiers or schema details.',
13915
14003
  'When the user wants a **chart** from stored rows, finish accurate aggregation first, then let the supervisor route **widget-chart-layout**; keep your own prose minimal.',
@@ -19274,7 +19362,7 @@ class AXCAiManagementMockModule {
19274
19362
  provideCommandSetups([
19275
19363
  {
19276
19364
  key: 'AiManagement:ChatGenerateImage',
19277
- command: () => import('./acorex-connectivity-mock-chat-generate-image.command-sx2CDa3S.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19365
+ command: () => import('./acorex-connectivity-mock-chat-generate-image.command-BAMTtIN_.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19278
19366
  },
19279
19367
  {
19280
19368
  key: 'AiManagement:ExtractDocumentText',
@@ -19286,11 +19374,11 @@ class AXCAiManagementMockModule {
19286
19374
  },
19287
19375
  {
19288
19376
  key: 'AiManagement:ChatTranscribeSpeech',
19289
- command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-ZqjqR8B5.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19377
+ command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-BRDl6roP.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19290
19378
  },
19291
19379
  {
19292
19380
  key: 'AiManagement:ChatSynthesizeSpeech',
19293
- command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-DteMILSk.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19381
+ command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-C0pQvhMF.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19294
19382
  },
19295
19383
  ]),
19296
19384
  ] }); }
@@ -19333,7 +19421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19333
19421
  provideCommandSetups([
19334
19422
  {
19335
19423
  key: 'AiManagement:ChatGenerateImage',
19336
- command: () => import('./acorex-connectivity-mock-chat-generate-image.command-sx2CDa3S.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19424
+ command: () => import('./acorex-connectivity-mock-chat-generate-image.command-BAMTtIN_.mjs').then((c) => c.AiManagementChatGenerateImageCommand),
19337
19425
  },
19338
19426
  {
19339
19427
  key: 'AiManagement:ExtractDocumentText',
@@ -19345,11 +19433,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
19345
19433
  },
19346
19434
  {
19347
19435
  key: 'AiManagement:ChatTranscribeSpeech',
19348
- command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-ZqjqR8B5.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19436
+ command: () => import('./acorex-connectivity-mock-chat-transcribe-speech.command-BRDl6roP.mjs').then((c) => c.AiManagementChatTranscribeSpeechCommand),
19349
19437
  },
19350
19438
  {
19351
19439
  key: 'AiManagement:ChatSynthesizeSpeech',
19352
- command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-DteMILSk.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19440
+ command: () => import('./acorex-connectivity-mock-chat-synthesize-speech.command-C0pQvhMF.mjs').then((c) => c.AiManagementChatSynthesizeSpeechCommand),
19353
19441
  },
19354
19442
  ]),
19355
19443
  ],
@@ -30225,6 +30313,8 @@ const mockRoleDefinitions = [
30225
30313
  AXMPermissionsKeys$2.DataManagement.DataSource.Management,
30226
30314
  AXMPermissionsKeys$2.DataManagement.MetaDataDefinition.Management,
30227
30315
  AXMPermissionsKeys$2.DataManagement.Tag.Management,
30316
+ //
30317
+ AXMPermissionsKeys$3.TaskManagement.Task.ViewAll,
30228
30318
  ],
30229
30319
  stateInfo: {
30230
30320
  isSystem: true,
@@ -30433,9 +30523,9 @@ const mockRoleDefinitions = [
30433
30523
  AXPSecurityManagementPermissionKeys.Role.Edit,
30434
30524
  AXPSecurityManagementPermissionKeys.Role.Delete,
30435
30525
  //
30436
- AXMPermissionsKeys$3.DocumentManagement.Management,
30437
- AXMPermissionsKeys$3.DocumentManagement.Driver.Management,
30438
- AXMPermissionsKeys$3.DocumentManagement.DocumentType.Management,
30526
+ AXMPermissionsKeys$4.DocumentManagement.Management,
30527
+ AXMPermissionsKeys$4.DocumentManagement.Driver.Management,
30528
+ AXMPermissionsKeys$4.DocumentManagement.DocumentType.Management,
30439
30529
  //
30440
30530
  AXMPermissionsKeys$2.DataManagement.MetaDataDefinition.Management,
30441
30531
  AXMPermissionsKeys$2.DataManagement.Tag.Management,
@@ -30443,9 +30533,9 @@ const mockRoleDefinitions = [
30443
30533
  AXMAssessmentManagementPermissionKeys.AssessmentManagement.Questionnaire.Management,
30444
30534
  AXMAssessmentManagementPermissionKeys.AssessmentManagement.QuestionBank,
30445
30535
  //
30446
- AXMPermissionsKeys$4.HumanCapitalManagement.Employee.Management,
30447
- AXMPermissionsKeys$4.HumanCapitalManagement.LeaveType.Management,
30448
- AXMPermissionsKeys$4.HumanCapitalManagement.LeaveRequest.Management,
30536
+ AXMPermissionsKeys$5.HumanCapitalManagement.Employee.Management,
30537
+ AXMPermissionsKeys$5.HumanCapitalManagement.LeaveType.Management,
30538
+ AXMPermissionsKeys$5.HumanCapitalManagement.LeaveRequest.Management,
30449
30539
  //
30450
30540
  AXMSettingsManagementPermissionKeys.TenantSettings.Management,
30451
30541
  ],
@@ -30559,8 +30649,8 @@ const rawMockUsers = [
30559
30649
  id: userIds.sarahJohnson,
30560
30650
  username: 'sarah.johnson',
30561
30651
  displayName: 'Sarah Johnson',
30562
- roleIds: [roleIdMap.admin],
30563
- roles: getRolesByIds([roleIdMap.admin]),
30652
+ roleIds: [roleIdMap.user],
30653
+ roles: getRolesByIds([roleIdMap.user]),
30564
30654
  password: '123',
30565
30655
  accountState: AXPSystemStatusType.Active,
30566
30656
  accessState: AXMUserAccessState.Allowed,
@@ -31102,6 +31192,7 @@ const personMock = [
31102
31192
  maritalStatus: maritalStatusRef(maritalStatusIds.married),
31103
31193
  educationLevelId: educationLevelIds.masters,
31104
31194
  educationLevel: educationLevelRef(educationLevelIds.masters),
31195
+ emails: [{ value: 'fatima.alzahra@example.com' }],
31105
31196
  },
31106
31197
  {
31107
31198
  id: personIds.jamesOConnor,
@@ -32544,18 +32635,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
32544
32635
  //#endregion
32545
32636
  //#region ---- Mock Permission Checker ----
32546
32637
  /**
32547
- * Mock permission checker that provides custom authorization logic.
32548
- * - Root user always has all permissions
32549
- * - Tenant account owner always has all permissions
32638
+ * Mock permission checker.
32639
+ * - `root`, `root2`, `super-root`: pass all permission checks (platform operators in demo).
32640
+ * - Everyone else: use role-granted permissions only (e.g. `Task.ViewAll` is not implied for `heidi.thonig`).
32550
32641
  */
32551
32642
  class MockPermissionChecker {
32643
+ static { this.platformRootUsernames = new Set(['root', 'root2', 'super-root']); }
32552
32644
  check(keys, context, baseResult) {
32553
- const user = context.user;
32554
- // Root user always has all permissions
32555
- if (user?.name === 'super-root' || user?.name === 'heidi.thonig' || user?.name === 'emily.rodriguez') {
32645
+ const username = context.user?.name;
32646
+ if (username != null && MockPermissionChecker.platformRootUsernames.has(username)) {
32556
32647
  return true;
32557
32648
  }
32558
- // Otherwise, use base result
32559
32649
  return baseResult;
32560
32650
  }
32561
32651
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MockPermissionChecker, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -53230,6 +53320,45 @@ function defaultIdField(dataPath) {
53230
53320
  const leaf = (dataPath || '').split('.').filter(Boolean).pop() || 'related';
53231
53321
  return `${leaf}Id`;
53232
53322
  }
53323
+ /**
53324
+ * Reads merge-detail child data for referenced persistence: nested `dataPath` object and/or dotted keys
53325
+ * on the parent payload (`person.emails`, ...). Some clients send only flat dotted keys; without this,
53326
+ * `PersonCore.Person` is never updated and `getOne` hydrate keeps outdated contact fields on the host.
53327
+ */
53328
+ function readMergeDetailSubtree(parentData, dataPath) {
53329
+ if (!dataPath || parentData == null || typeof parentData !== 'object') {
53330
+ return undefined;
53331
+ }
53332
+ const root = get(parentData, dataPath);
53333
+ const prefix = `${dataPath}.`;
53334
+ const flatKeys = Object.keys(parentData).filter((k) => k.startsWith(prefix));
53335
+ const hasFlat = flatKeys.length > 0;
53336
+ if (root != null && typeof root === 'object' && !Array.isArray(root)) {
53337
+ const base = { ...root };
53338
+ if (hasFlat) {
53339
+ for (const key of flatKeys) {
53340
+ const tail = key.slice(prefix.length);
53341
+ if (!tail) {
53342
+ continue;
53343
+ }
53344
+ set(base, tail, get(parentData, key));
53345
+ }
53346
+ }
53347
+ return base;
53348
+ }
53349
+ if (!hasFlat) {
53350
+ return undefined;
53351
+ }
53352
+ const base = {};
53353
+ for (const key of flatKeys) {
53354
+ const tail = key.slice(prefix.length);
53355
+ if (!tail) {
53356
+ continue;
53357
+ }
53358
+ set(base, tail, get(parentData, key));
53359
+ }
53360
+ return base;
53361
+ }
53233
53362
  /** Only string/number ids are valid FK/PK for storage; ignore objects/arrays (bad form state). */
53234
53363
  function coerceRecordId(value) {
53235
53364
  if (value == null) {
@@ -53268,7 +53397,7 @@ const mergeDetailRelationMiddleware = {
53268
53397
  const idField = p.idField || defaultIdField(dp);
53269
53398
  const entries = Object.entries(p.map || {});
53270
53399
  const requiresChild = entries.some(([_, src]) => typeof src === 'string' && !src.startsWith('$parent.'));
53271
- const child = dp ? get(ctx.data, dp) : undefined;
53400
+ const child = dp ? readMergeDetailSubtree(ctx.data, dp) : undefined;
53272
53401
  if (requiresChild && (dp == null || child == null)) {
53273
53402
  // No available child object while mapping expects it
53274
53403
  continue;
@@ -56061,6 +56190,9 @@ function composeOrgChartTreeForMode(workspace, mode, showVacantLeafSeats) {
56061
56190
  if (!pos) {
56062
56191
  continue;
56063
56192
  }
56193
+ const seatCapacity = typeof pos?.capacity === 'number' && Number.isFinite(pos.capacity) && pos.capacity >= 1
56194
+ ? Math.floor(pos.capacity)
56195
+ : 1;
56064
56196
  const list = byPosition.get(positionId) ?? [];
56065
56197
  const distinctAssignees = axcDistinctAssignmentsByEmployee(axcOrderAssignmentsForRepresentative(list));
56066
56198
  const hasAnyIncumbent = distinctAssignees.length > 0;
@@ -56088,6 +56220,8 @@ function composeOrgChartTreeForMode(workspace, mode, showVacantLeafSeats) {
56088
56220
  chartTemplate: 'position-ic',
56089
56221
  vacant: true,
56090
56222
  businessUnitId: String(bu.id),
56223
+ capacity: seatCapacity,
56224
+ activeAssignmentCount: 0,
56091
56225
  stats: { directReports: directReportsCount },
56092
56226
  },
56093
56227
  isExpanded: true,
@@ -56110,6 +56244,8 @@ function composeOrgChartTreeForMode(workspace, mode, showVacantLeafSeats) {
56110
56244
  const positionMetadata = {
56111
56245
  chartTemplate: 'merged-manager',
56112
56246
  businessUnitId: String(bu.id),
56247
+ capacity: seatCapacity,
56248
+ activeAssignmentCount: distinctAssignees.length,
56113
56249
  occupant: employeeName
56114
56250
  ? {
56115
56251
  displayName: employeeName,
@@ -62546,7 +62682,7 @@ class AXCSecurityManagementMockModule {
62546
62682
  provideQuerySetups([
62547
62683
  {
62548
62684
  key: 'SecurityManagement:User:RolesForListColumn',
62549
- loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-Bq_It_Wl.mjs').then((m) => m.UserRolesForListColumnQuery),
62685
+ loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-DOAMknK8.mjs').then((m) => m.UserRolesForListColumnQuery),
62550
62686
  },
62551
62687
  ]),
62552
62688
  ] }); }
@@ -62590,7 +62726,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
62590
62726
  provideQuerySetups([
62591
62727
  {
62592
62728
  key: 'SecurityManagement:User:RolesForListColumn',
62593
- loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-Bq_It_Wl.mjs').then((m) => m.UserRolesForListColumnQuery),
62729
+ loader: () => import('./acorex-connectivity-mock-user-roles-for-list-column.query-DOAMknK8.mjs').then((m) => m.UserRolesForListColumnQuery),
62594
62730
  },
62595
62731
  ]),
62596
62732
  ],
@@ -72315,7 +72451,7 @@ class AXCWorkflowManagementMockModule {
72315
72451
  provideCommandSetups([
72316
72452
  {
72317
72453
  key: 'workflow-activity:assign-to-manager',
72318
- command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-C28tH9lJ.mjs').then((c) => c.AssignToManagerActivity),
72454
+ command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-GtNzTHWI.mjs').then((c) => c.AssignToManagerActivity),
72319
72455
  },
72320
72456
  {
72321
72457
  key: 'workflow-activity:get-current-user-manager',
@@ -72426,7 +72562,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
72426
72562
  provideCommandSetups([
72427
72563
  {
72428
72564
  key: 'workflow-activity:assign-to-manager',
72429
- command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-C28tH9lJ.mjs').then((c) => c.AssignToManagerActivity),
72565
+ command: () => import('./acorex-connectivity-mock-assign-to-manager.activity-GtNzTHWI.mjs').then((c) => c.AssignToManagerActivity),
72430
72566
  },
72431
72567
  {
72432
72568
  key: 'workflow-activity:get-current-user-manager',
@@ -76880,4 +77016,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
76880
77016
  */
76881
77017
 
76882
77018
  export { AXCFinancialCoreMockModule as $, AXCAiChatRouterService as A, AXCCalendarDataSeeder as B, AXCCalendarEventDataSeeder as C, AXCCalendarManagementMockModule as D, AXCCommandRegistryDataSeeder as E, AXCCommonMockModule as F, AXCContactCoreMockModule as G, AXCContentManagementMockModule as H, AXCConversationDataSeeder as I, AXCConversationMockConversationApi as J, AXCConversationMockMessageApi as K, AXCConversationMockModule as L, AXCConversationMockRealtimeApi as M, AXCConversationMockUserApi as N, AXCCustomerManagementMockModule as O, AXCDashboardManagementMockModule as P, AXCDataManagementMockModule as Q, AXCDexieEntityStorageService as R, AXCDocumentManagementMockModule as S, AXCEditionDataSeeder as T, AXCEntityDefinitionSeederService as U, AXCEntityDefinitionsModule as V, AXCEntityStorageInsertCommand as W, AXCEntityStorageModule as X, AXCEntityStorageQueryQuery as Y, AXCFileStorageServiceDexie as Z, AXCFileStorageServiceFirestore as _, AXMAiModelStableIds as a, AXMEmploymentTypeDataSeeder as a$, AXCFirestoreEntityStorageService as a0, AXCFormTemplateManagementMockModule as a1, AXCGoogleStrategyMock as a2, AXCHealthCoreMockModule as a3, AXCHelpDeskMockModule as a4, AXCHumanCapitalManagementMockModule as a5, AXCIdentifierManagementMockModule as a6, AXCImageCaptchaChallengeProviderMock as a7, AXCLearningManagementMockModule as a8, AXCLocaleManagementMockModule as a9, AXCTenantManagementMockModule as aA, AXCTenantSeeder as aB, AXCTextTemplateRenderBackend as aC, AXCTokensDataSeeder as aD, AXCUserPassStrategyMock as aE, AXCVersionDB as aF, AXCVersioningService as aG, AXCWidgetCatalogDataSeeder as aH, AXCWorkflowCategorySeeder as aI, AXCWorkflowDefinitionDataSeeder as aJ, AXCWorkflowEngine as aK, AXCWorkflowExecutionDB as aL, AXCWorkflowExecutionStoreDexie as aM, AXCWorkflowExecutionStoreFirestore as aN, AXCWorkflowInstanceCartableDemoSeeder as aO, AXCWorkflowManagementMockModule as aP, AXC_ENTITY_STORAGE_BACKEND_TYPE as aQ, AXC_FIRESTORE_CONFIG as aR, AXC_FIRESTORE_DB as aS, AXC_WORKFLOW_EXECUTION_STORE as aT, AXMAiDemisAssistantAssistId as aU, AXMAiPlatformAssistantAssistId as aV, AXMAutomationDataSeeder as aW, AXMBusinessUnitDataSeeder as aX, AXMCalendarEventTypeSeeder as aY, AXMDashboardChartDataSourceDefinition as aZ, AXMEmployeeDataSeeder as a_, AXCLocationManagementMockModule as aa, AXCLockService as ab, AXCMeasurementCoreMockModule as ac, AXCMeetingManagementMockModule as ad, AXCMetaDataDefinitionDataSeeder as ae, AXCMetadataCategorySeeder as af, AXCMiddlewaresModule as ag, AXCMockCaptchaChallengeComponent as ah, AXCMockEntityLogListener as ai, AXCMockModule as aj, AXCMockShowMetaDataFormPopupCommand as ak, AXCNotificationManagementMockModule as al, AXCOrderManagementMockModule as am, AXCOrganizationManagementMockModule as an, AXCPersonCoreMockModule as ao, AXCPlatformManagementMockModule as ap, AXCProcurementManagementMockModule as aq, AXCProductCatalogMockModule as ar, AXCProjectManagementMockModule as as, AXCQueryRegistryDataSeeder as at, AXCReportManagementMockModule as au, AXCSecurityManagementMockModule as av, AXCStoredEntityDefinitionLoader as aw, AXCSubscriptionManagementMockModule as ax, AXCSupplierManagementMockModule as ay, AXCTaskManagementMockModule as az, resolveDelegatedAssistOptionString as b, HW as b$, AXMFormDataSourcesProvider as b0, AXMJobDefinitionDataSeeder as b1, AXMJobLevelDataSeeder as b2, AXMLeaveRequestDataSeeder as b3, AXMMeetingDataSeeder as b4, AXMMeetingFilesDataSeeder as b5, AXMMeetingParticipantDataSeeder as b6, AXMMeetingRoleTypeDataSeeder as b7, AXMMeetingSessionDataSeeder as b8, AXMMeetingTypeDataSeeder as b9, AXPMockSequenceProvider as bA, AXPRoomDataSeeder as bB, AXPSecurityManagementRoleDataSeeder as bC, AXPSecurityManagementUserDataSeeder as bD, AXPTaskBoardPlatformManagementTaskProvider as bE, AXPTaskBoardProjectManagementTaskProvider as bF, AXVChangeType as bG, BCC as bH, BOC as bI, BUSINESS_UNITS_MOCK as bJ, CHAT_LAST_MESSAGE_IDS as bK, COSTMANAGER_ENTERPRISE as bL, COSTMANAGER_PROFESSIONAL as bM, COSTMANAGER_STANDARD as bN, CP as bO, CRM_ENTERPRISE as bP, DASHBOARDS as bQ, EDITIONS as bR, EMPLOYEES_MOCK as bS, EMPLOYMENT_TYPES_MOCK as bT, ENTITY_DEFINITION_MAP as bU, ENTITY_REGISTRY as bV, FINANCE_BASIC as bW, FINANCE_ENTERPRISE as bX, FINANCE_PRO as bY, G as bZ, HR_ENTERPRISE as b_, AXMMeetingTypeFileTemplateDataSeeder as ba, AXMPositionAssignmentDataSeeder as bb, AXMPositionDataSeeder as bc, AXMQuestionBankItemCategoryDataSeeder as bd, AXMQuestionBankItemDataSeeder as be, AXMQuestionnaireCalculationDataSeeder as bf, AXMQuestionnaireCategoryDataSeeder as bg, AXMQuestionnaireDataSeeder as bh, AXMResponsibilityDataSeeder as bi, AXMTagDataSeeder as bj, AXMTeamBusinessUnitDataSeeder as bk, AXMTeamDataSeeder as bl, AXMTeamMemberDataSeeder as bm, AXMTeamMemberRoleDataSeeder as bn, AXMWorkflowDashboardChartDataSourceDefinition as bo, AXM_AI_REGISTRY_COMMAND_NAME as bp, AXM_AI_REGISTRY_QUERY_NAME as bq, AXM_CORPORATE_BUSINESS_UNIT_ID as br, AXPDashboardDataSeeder as bs, AXPIdentifierDB as bt, AXPMessageDataSeeder as bu, AXPMockChecksumProvider as bv, AXPMockClockProvider as bw, AXPMockIdentifierService as bx, AXPMockLookupProvider as by, AXPMockPolicyProvider as bz, axcSyncSingleEmployeeDenormalizedOrgFields as c, awaitConversationMockSharedStorage as c$, JOB_DEFINITIONS_CATEGORY_MOCK as c0, JOB_DEFINITIONS_MOCK as c1, JOB_DEFINITION_CATEGORY_KEY_TO_ID as c2, JOB_LEVELS_MOCK as c3, LASER_PLUMBING_TENANT_ID as c4, LEAVE_REQUESTS_MOCK as c5, METADATA_CATEGORY_IDS as c6, METADATA_GENERAL_CATEGORY_REFS as c7, METADATA_SYSTEM_CATEGORY_REFS as c8, MLC as c9, SHOP_BASIC as cA, SHOP_ENTERPRISE as cB, SHOP_PRO as cC, TAGS_MOCK as cD, TASKS as cE, TASK_STATUSES as cF, TASK_TEMPLATES as cG, TASK_TYPES as cH, TEAMS_CATEGORY_MOCK as cI, TEAMS_MOCK as cJ, TEAM_BUSINESS_UNITS_MOCK as cK, TEAM_CATEGORY_KEY_TO_ID as cL, TEAM_MEMBERS_MOCK as cM, TEAM_MEMBER_ROLES_MOCK as cN, TIMEPLICITY_TENANT_ID as cO, TLA as cP, TOKENS as cQ, TPC as cR, VISIBILITY_FILTER_BYPASS as cS, WORKFLOW_CATEGORIES as cT, WS as cU, activityCategoryMocks as cV, activityDefinitionEntityMock as cW, applyEntityDefinitionFirestoreSnapshot as cX, automationCommandMiddleware as cY, automationMock as cZ, avatarInterface as c_, OHR as ca, ORDERING_BASIC as cb, ORDERING_ENTERPRISE as cc, ORDERING_STANDARD as cd, OWNERSHIP_FILTER_BYPASS as ce, PLATFORM_CONSOLE as cf, PLATFORM_TENANT_ID as cg, PM as ch, POSITIONS_CATEGORY_MOCK as ci, POSITIONS_MOCK as cj, POSITION_ASSIGNMENTS_MOCK as ck, QCP as cl, QGEN as cm, QHW as cn, QOHR as co, QPM as cp, QTLE as cq, QUESTIONNAIRE_CATEGORY_MOCK as cr, QUESTION_BANK_ITEM_CATEGORY_MOCK as cs, QWS as ct, RESPONSIBILITIES_CATEGORY_MOCK as cu, RESPONSIBILITIES_MOCK as cv, RESPONSIBILITY_CATEGORY_KEY_TO_ID as cw, SAFETYMINDER_BASIC as cx, SAFETYMINDER_ENTERPRISE as cy, SAFETYMINDER_PROFESSIONAL as cz, ACTIVITY_CATEGORIES as d, mockParticipantIndexForSecurityUserId as d$, axVersionDB as d0, axWorkflowExecutionDB as d1, axcPatchEmployeeActivePrimaryBusinessUnitRefsFromRows as d2, axcPatchEmployeeActivePrimaryPositionRefsFromRows as d3, axcPatchEmployeeManagerRefsFromRows as d4, axcResolveCommandRegistrySeedId as d5, axcResolveQueryRegistrySeedId as d6, axcResolveWidgetCatalogSeedId as d7, bankCategory as d8, buildEntityStorageQuickSearchFilter as d9, fileUploaderInterface as dA, finalizeActivityCategoryItemCounts as dB, findEmployeeById as dC, folderStorageMiddleware as dD, groupOrderItemCalculatorMiddleware as dE, historyMiddleware as dF, identifierCommitMiddleware as dG, imageInterface as dH, inspectionOkXNaInterface as dI, loadMockPropertyDefinitions as dJ, lockGuardMiddleware as dK, longTextAnswerInterface as dL, lookupInterface as dM, lookupResolverMiddleware as dN, mapInterface as dO, meetingFilesMock as dP, meetingIds as dQ, meetingMock as dR, meetingParticipantMock as dS, meetingRoleTypeMock as dT, meetingSessionMock as dU, meetingTimeSlotMock as dV, meetingTypeFileTemplateMock as dW, meetingTypeMock as dX, mergeDetailRelationMiddleware as dY, mergeQuickSearchIntoRequest as dZ, metadataCategoryMocks as d_, buildWorkflowInstanceCartableDemoRows as da, bypassAllFilters as db, bypassOwnershipFilter as dc, bypassVisibilityFilter as dd, calendarEventMock as de, calendarEventTypeMockData as df, calendarMock as dg, chatMessageMock as dh, chatMock as di, checkboxInterface as dj, childCountMiddleware as dk, clearEntityDefinitionFirestoreCollections as dl, colorInterface as dm, computeDiff as dn, contactInterface as dp, conversationDemoSeedUserIds as dq, createFileCastMiddleware as dr, createWidgetLayoutConfig as ds, dateInterface as dt, dateTimeInterface as du, descriptionInterface as dv, documentFolderSyncMiddleware as dw, emailInterface as dx, entityDefDb as dy, entityValidationMiddleware as dz, ACTIVITY_CATEGORY_ID_BY_KEY as e, mockQuestionBankItemByName as e0, mockRoleDefinitions as e1, multipleChoiceInterface as e2, multipleSelectInterface as e3, normalizeAnyFileArrayForView as e4, normalizeSnapshotFileFieldsForView as e5, numberInterface as e6, parseEntityStorageInsertData as e7, parseEntityStorageQueryRequest as e8, participantIds as e9, textInterface as eA, timeDurationInterface as eB, titleInterface as eC, toUiRows as eD, toggleInterface as eE, tokenCategoryIds as eF, tokenCategoryMocks as eG, urlInterface as eH, versionInterface as eI, visibilityFilterMiddleware as eJ, workflowDefinitionEntityMock as eK, workflowDefinitionIds as eL, workflowDefinitionMock as eM, yesNoInterface as eN, participantMock as ea, passwordInterface as eb, personIdentifierTypeMock as ec, personIds as ed, personLegalIds as ee, personMock as ef, personNaturalIds as eg, phoneInterface as eh, primaryMiddleware as ei, provideMockPropertySetups as ej, qrcodeInterface as ek, questionBankItemMock as el, questionnaireCalculationMock as em, questionnaireMock as en, ratingInterface as eo, richTextInterface as ep, scaleInterface as eq, selectInterface as er, selectionListInterface as es, sexAtBirthInterface as et, signatureInterface as eu, signatureLoaderMiddleware as ev, statusDefaultMiddleware as ew, tagInterface as ex, tenantMocks as ey, textAreaInterface as ez, ACTIVITY_DEFINITIONS as f, AI_ASSIST_MOCK as g, AI_MODEL_MOCK as h, APPLICATIONS as i, APPLICATION_CATEGORY_IDS as j, APPLICATION_CATEGORY_MOCKS as k, AXCActivityCategorySeeder as l, mockUsers as m, AXCActivityDefinitionSeeder as n, AXCAiAssistSeeder as o, AXCAiManagementMockModule as p, AXCAiModelSeeder as q, resolveDelegatedAssistOptionModel as r, AXCAppTermDataSeeder as s, AXCAppVersionDataSeeder as t, AXCApplicationCategoryDataSeeder as u, AXCApplicationDataSeeder as v, AXCApplicationManagementMockModule as w, AXCAssessmentManagementMockModule as x, AXCAssetManagementMockModule as y, AXCAuthMockModule as z };
76883
- //# sourceMappingURL=acorex-connectivity-mock-acorex-connectivity-mock-Dy--4by0.mjs.map
77019
+ //# sourceMappingURL=acorex-connectivity-mock-acorex-connectivity-mock-QxKVNQo9.mjs.map