@memberjunction/ng-explorer-core 5.50.0 → 5.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,11 +9,20 @@
9
9
  * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a
10
10
  * registration synchronously, the registered lazy loader builds the compound key and
11
11
  * looks it up here to dynamically import the chunk containing the class.
12
+ *
13
+ * Every entry carries an explicit `chunkId` — the dynamic import specifier — because many
14
+ * compound keys share one chunk and the registry must be able to tell those chunks apart.
15
+ * Do NOT collapse these into a shared helper that returns a closure: closures built by the
16
+ * same helper are indistinguishable by identity-adjacent means (e.g. Function.toString()),
17
+ * which silently merges all chunks into one.
12
18
  */
13
19
  /**
14
- * Complete mapping of compound keys (BaseClassName::Key) to lazy-loading functions.
20
+ * Complete mapping of compound keys (BaseClassName::Key) to their chunk descriptor.
15
21
  * Covers all @RegisterClass decorated classes in lazy-loaded packages.
16
22
  */
17
- export declare const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>>;
23
+ export declare const LAZY_FEATURE_CONFIG: Record<string, {
24
+ chunkId: string;
25
+ load: () => Promise<void>;
26
+ }>;
18
27
  export declare const LAZY_FEATURE_CONFIG_COUNT = 114;
19
28
  //# sourceMappingURL=lazy-feature-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6DH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAuJnE,CAAC;AAEF,eAAO,MAAM,yBAAyB,MAAM,CAAC"}
1
+ {"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA8GH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAuJ9F,CAAC;AAEF,eAAO,MAAM,yBAAyB,MAAM,CAAC"}
@@ -9,49 +9,105 @@
9
9
  * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a
10
10
  * registration synchronously, the registered lazy loader builds the compound key and
11
11
  * looks it up here to dynamically import the chunk containing the class.
12
+ *
13
+ * Every entry carries an explicit `chunkId` — the dynamic import specifier — because many
14
+ * compound keys share one chunk and the registry must be able to tell those chunks apart.
15
+ * Do NOT collapse these into a shared helper that returns a closure: closures built by the
16
+ * same helper are indistinguishable by identity-adjacent means (e.g. Function.toString()),
17
+ * which silently merges all chunks into one.
12
18
  */
13
- /** Helper to create a loader that all entries in a feature share. */
14
- function featureLoader(importFn) {
15
- return () => importFn().then(() => { });
16
- }
17
19
  // --- @memberjunction/ng-dashboards → ./actions-dashboards.module (7 entries) ---
18
- const loadNgDashboardsActionsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));
20
+ const loadNgDashboardsActionsDashboardsModule = {
21
+ chunkId: '@memberjunction/ng-dashboards/actions-dashboards.module',
22
+ load: () => import('@memberjunction/ng-dashboards/actions-dashboards.module').then(() => { })
23
+ };
19
24
  // --- @memberjunction/ng-dashboards → ./ai-dashboards.module (17 entries) ---
20
- const loadNgDashboardsAiDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));
25
+ const loadNgDashboardsAiDashboardsModule = {
26
+ chunkId: '@memberjunction/ng-dashboards/ai-dashboards.module',
27
+ load: () => import('@memberjunction/ng-dashboards/ai-dashboards.module').then(() => { })
28
+ };
21
29
  // --- @memberjunction/ng-dashboards → ./communication-dashboards.module (7 entries) ---
22
- const loadNgDashboardsCommunicationDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));
30
+ const loadNgDashboardsCommunicationDashboardsModule = {
31
+ chunkId: '@memberjunction/ng-dashboards/communication-dashboards.module',
32
+ load: () => import('@memberjunction/ng-dashboards/communication-dashboards.module').then(() => { })
33
+ };
23
34
  // --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (3 entries) ---
24
- const loadNgDashboardsComponentStudioDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/component-studio-dashboards.module'));
35
+ const loadNgDashboardsComponentStudioDashboardsModule = {
36
+ chunkId: '@memberjunction/ng-dashboards/component-studio-dashboards.module',
37
+ load: () => import('@memberjunction/ng-dashboards/component-studio-dashboards.module').then(() => { })
38
+ };
25
39
  // --- @memberjunction/ng-dashboards → ./core-dashboards.module (34 entries) ---
26
- const loadNgDashboardsCoreDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/core-dashboards.module'));
40
+ const loadNgDashboardsCoreDashboardsModule = {
41
+ chunkId: '@memberjunction/ng-dashboards/core-dashboards.module',
42
+ load: () => import('@memberjunction/ng-dashboards/core-dashboards.module').then(() => { })
43
+ };
27
44
  // --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---
28
- const loadNgDashboardsCredentialsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/credentials-dashboards.module'));
45
+ const loadNgDashboardsCredentialsDashboardsModule = {
46
+ chunkId: '@memberjunction/ng-dashboards/credentials-dashboards.module',
47
+ load: () => import('@memberjunction/ng-dashboards/credentials-dashboards.module').then(() => { })
48
+ };
29
49
  // --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---
30
- const loadNgDashboardsDataExplorerDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module'));
50
+ const loadNgDashboardsDataExplorerDashboardsModule = {
51
+ chunkId: '@memberjunction/ng-dashboards/data-explorer-dashboards.module',
52
+ load: () => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module').then(() => { })
53
+ };
31
54
  // --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---
32
- const loadNgDashboardsIntegrationModule = featureLoader(() => import('@memberjunction/ng-dashboards/integration.module'));
55
+ const loadNgDashboardsIntegrationModule = {
56
+ chunkId: '@memberjunction/ng-dashboards/integration.module',
57
+ load: () => import('@memberjunction/ng-dashboards/integration.module').then(() => { })
58
+ };
33
59
  // --- @memberjunction/ng-dashboards → ./lists-dashboards.module (5 entries) ---
34
- const loadNgDashboardsListsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/lists-dashboards.module'));
60
+ const loadNgDashboardsListsDashboardsModule = {
61
+ chunkId: '@memberjunction/ng-dashboards/lists-dashboards.module',
62
+ load: () => import('@memberjunction/ng-dashboards/lists-dashboards.module').then(() => { })
63
+ };
35
64
  // --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---
36
- const loadNgDashboardsMcpModule = featureLoader(() => import('@memberjunction/ng-dashboards/mcp.module'));
65
+ const loadNgDashboardsMcpModule = {
66
+ chunkId: '@memberjunction/ng-dashboards/mcp.module',
67
+ load: () => import('@memberjunction/ng-dashboards/mcp.module').then(() => { })
68
+ };
37
69
  // --- @memberjunction/ng-dashboards → ./module (3 entries) ---
38
- const loadNgDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/module'));
70
+ const loadNgDashboardsModule = {
71
+ chunkId: '@memberjunction/ng-dashboards/module',
72
+ load: () => import('@memberjunction/ng-dashboards/module').then(() => { })
73
+ };
39
74
  // --- @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module (3 entries) ---
40
- const loadNgDashboardsPredictiveStudioDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/predictive-studio-dashboards.module'));
75
+ const loadNgDashboardsPredictiveStudioDashboardsModule = {
76
+ chunkId: '@memberjunction/ng-dashboards/predictive-studio-dashboards.module',
77
+ load: () => import('@memberjunction/ng-dashboards/predictive-studio-dashboards.module').then(() => { })
78
+ };
41
79
  // --- @memberjunction/ng-dashboards → ./routines-dashboards.module (1 entries) ---
42
- const loadNgDashboardsRoutinesDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/routines-dashboards.module'));
80
+ const loadNgDashboardsRoutinesDashboardsModule = {
81
+ chunkId: '@memberjunction/ng-dashboards/routines-dashboards.module',
82
+ load: () => import('@memberjunction/ng-dashboards/routines-dashboards.module').then(() => { })
83
+ };
43
84
  // --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---
44
- const loadNgDashboardsSchedulingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/scheduling-dashboards.module'));
85
+ const loadNgDashboardsSchedulingDashboardsModule = {
86
+ chunkId: '@memberjunction/ng-dashboards/scheduling-dashboards.module',
87
+ load: () => import('@memberjunction/ng-dashboards/scheduling-dashboards.module').then(() => { })
88
+ };
45
89
  // --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---
46
- const loadNgDashboardsTestingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/testing-dashboards.module'));
90
+ const loadNgDashboardsTestingDashboardsModule = {
91
+ chunkId: '@memberjunction/ng-dashboards/testing-dashboards.module',
92
+ load: () => import('@memberjunction/ng-dashboards/testing-dashboards.module').then(() => { })
93
+ };
47
94
  // --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---
48
- const loadNgExplorerSettingsSettingsModule = featureLoader(() => import('@memberjunction/ng-explorer-settings/settings.module'));
95
+ const loadNgExplorerSettingsSettingsModule = {
96
+ chunkId: '@memberjunction/ng-explorer-settings/settings.module',
97
+ load: () => import('@memberjunction/ng-explorer-settings/settings.module').then(() => { })
98
+ };
49
99
  // --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---
50
- const loadNgFileStorageFileStorageModule = featureLoader(() => import('@memberjunction/ng-file-storage/file-storage.module'));
100
+ const loadNgFileStorageFileStorageModule = {
101
+ chunkId: '@memberjunction/ng-file-storage/file-storage.module',
102
+ load: () => import('@memberjunction/ng-file-storage/file-storage.module').then(() => { })
103
+ };
51
104
  // --- @memberjunction/ng-react → . (1 entries) ---
52
- const loadNgReact = featureLoader(() => import('@memberjunction/ng-react'));
105
+ const loadNgReact = {
106
+ chunkId: '@memberjunction/ng-react',
107
+ load: () => import('@memberjunction/ng-react').then(() => { })
108
+ };
53
109
  /**
54
- * Complete mapping of compound keys (BaseClassName::Key) to lazy-loading functions.
110
+ * Complete mapping of compound keys (BaseClassName::Key) to their chunk descriptor.
55
111
  * Covers all @RegisterClass decorated classes in lazy-loaded packages.
56
112
  */
57
113
  export const LAZY_FEATURE_CONFIG = {
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AUTO-GENERATED FILE — DO NOT EDIT\n * Generated by: mj codegen manifest --lazy-config\n * Regenerate with: npm run mj:manifest:explorer\n *\n * Maps @RegisterClass entries to their lazy-loading chunks using compound keys.\n * Compound key format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\").\n *\n * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a\n * registration synchronously, the registered lazy loader builds the compound key and\n * looks it up here to dynamically import the chunk containing the class.\n */\n\n/** Helper to create a loader that all entries in a feature share. */\nfunction featureLoader(importFn: () => Promise<unknown>): () => Promise<void> {\n return () => importFn().then(() => {});\n}\n\n// --- @memberjunction/ng-dashboards → ./actions-dashboards.module (7 entries) ---\nconst loadNgDashboardsActionsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./ai-dashboards.module (17 entries) ---\nconst loadNgDashboardsAiDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./communication-dashboards.module (7 entries) ---\nconst loadNgDashboardsCommunicationDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsComponentStudioDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/component-studio-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./core-dashboards.module (34 entries) ---\nconst loadNgDashboardsCoreDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/core-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---\nconst loadNgDashboardsCredentialsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/credentials-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---\nconst loadNgDashboardsDataExplorerDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---\nconst loadNgDashboardsIntegrationModule = featureLoader(() => import('@memberjunction/ng-dashboards/integration.module'));\n\n// --- @memberjunction/ng-dashboards → ./lists-dashboards.module (5 entries) ---\nconst loadNgDashboardsListsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/lists-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---\nconst loadNgDashboardsMcpModule = featureLoader(() => import('@memberjunction/ng-dashboards/mcp.module'));\n\n// --- @memberjunction/ng-dashboards → ./module (3 entries) ---\nconst loadNgDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/module'));\n\n// --- @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsPredictiveStudioDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/predictive-studio-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./routines-dashboards.module (1 entries) ---\nconst loadNgDashboardsRoutinesDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/routines-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---\nconst loadNgDashboardsSchedulingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/scheduling-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---\nconst loadNgDashboardsTestingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/testing-dashboards.module'));\n\n// --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---\nconst loadNgExplorerSettingsSettingsModule = featureLoader(() => import('@memberjunction/ng-explorer-settings/settings.module'));\n\n// --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---\nconst loadNgFileStorageFileStorageModule = featureLoader(() => import('@memberjunction/ng-file-storage/file-storage.module'));\n\n// --- @memberjunction/ng-react → . (1 entries) ---\nconst loadNgReact = featureLoader(() => import('@memberjunction/ng-react'));\n\n/**\n * Complete mapping of compound keys (BaseClassName::Key) to lazy-loading functions.\n * Covers all @RegisterClass decorated classes in lazy-loaded packages.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>> = {\n // @memberjunction/ng-dashboards → ./actions-dashboards.module\n 'BaseResourceComponent::ActionExplorerResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsCodeResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsEntitiesResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsMonitorResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsOverviewResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsScheduleResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsSecurityResource': loadNgDashboardsActionsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./ai-dashboards.module\n 'BaseResourceComponent::AIAgentRequestsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAgentsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIModelsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIMonitorResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIPromptsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AutotaggingPipelineResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::ClusterVisualizationResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::DuplicateDetectionResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::FeaturePipelinesResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::SchedulingResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::Tags': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VectorManagementResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VisualizationResource': loadNgDashboardsAiDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./communication-dashboards.module\n 'BaseDashboard::CommunicationDashboard': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationLogsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationMonitorResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationProvidersResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationRunsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationsNewMessageResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationTemplatesResource': loadNgDashboardsCommunicationDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./component-studio-dashboards.module\n 'BaseDashboard::ComponentStudioDashboard': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::ComponentStudioResource': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::FormBuilderResource': loadNgDashboardsComponentStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./core-dashboards.module\n 'BaseApplication::HomeApplication': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::EntityAdmin': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeManagerDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeStudioDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDataSchema': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDeveloperTools': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminIdentityAccess': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminMonitoring': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::APIKeysResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ApplicationRolesResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AppStateInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsContainer': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsOperations': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsRunHistory': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ClassRegistryInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::DashboardBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::EventMonitorInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::GraphQLConsoleInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::HomeDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LayoutInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LazyModuleStatusInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsAuditLogResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsResourceAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsUserAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::QueryBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::RealtimeRecordingsDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SettingsExplorerInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SystemDiagnosticsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeManagerResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeStudioResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryDiffResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryGraphResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryLabelsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryRestoreResource': loadNgDashboardsCoreDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./credentials-dashboards.module\n 'BaseDashboard::CredentialsDashboard': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsAuditResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsCategoriesResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsListResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsOverviewResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsTypesResource': loadNgDashboardsCredentialsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./data-explorer-dashboards.module\n 'BaseDashboard::DataExplorer': loadNgDashboardsDataExplorerDashboardsModule,\n 'BaseResourceComponent::DataExplorerResource': loadNgDashboardsDataExplorerDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./integration.module\n 'BaseResourceComponent::IntegrationActivity': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationConnections': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationMappingWorkspace': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationOverview': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationPipelines': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationSchedules': loadNgDashboardsIntegrationModule,\n\n // @memberjunction/ng-dashboards → ./lists-dashboards.module\n 'BaseResourceComponent::ListsBrowseResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsCategoriesResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsMyListsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsOperationsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsSharedWithMeResource': loadNgDashboardsListsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./mcp.module\n 'BaseDashboard::MCPDashboard': loadNgDashboardsMcpModule,\n 'BaseResourceComponent::MCPResource': loadNgDashboardsMcpModule,\n\n // @memberjunction/ng-dashboards → ./module\n 'BaseResourceComponent::ArchiveConfigResource': loadNgDashboardsModule,\n 'BaseResourceComponent::ArchiveRunsResource': loadNgDashboardsModule,\n 'BaseResourceComponent::DatabaseDesignerDashboard': loadNgDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module\n 'BaseResourceComponent::PredictiveStudioModelsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioPredictionsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioStudioResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./routines-dashboards.module\n 'BaseResourceComponent::UserRoutines': loadNgDashboardsRoutinesDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./scheduling-dashboards.module\n 'BaseDashboard::SchedulingDashboard': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingActivityResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingDashboardResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingJobsResource': loadNgDashboardsSchedulingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./testing-dashboards.module\n 'BaseDashboard::TestingDashboard': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingAnalyticsResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingDashboardTabResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingExplorerResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingReviewResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingRunsResource': loadNgDashboardsTestingDashboardsModule,\n\n // @memberjunction/ng-explorer-settings → ./settings.module\n 'BaseDashboard::ApplicationManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::EntityPermissions': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::RoleManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::SqlLogging': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::UserManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseNavigationComponent::Settings': loadNgExplorerSettingsSettingsModule,\n\n // @memberjunction/ng-file-storage → ./file-storage.module\n 'BaseResourceComponent::FileBrowserResource': loadNgFileStorageFileStorageModule,\n\n // @memberjunction/ng-react → .\n 'RuntimeUtilities::RuntimeUtilities': loadNgReact,\n\n};\n\nexport const LAZY_FEATURE_CONFIG_COUNT = 114;\n"]}
1
+ {"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AUTO-GENERATED FILE — DO NOT EDIT\n * Generated by: mj codegen manifest --lazy-config\n * Regenerate with: npm run mj:manifest:explorer\n *\n * Maps @RegisterClass entries to their lazy-loading chunks using compound keys.\n * Compound key format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\").\n *\n * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a\n * registration synchronously, the registered lazy loader builds the compound key and\n * looks it up here to dynamically import the chunk containing the class.\n *\n * Every entry carries an explicit `chunkId` — the dynamic import specifier — because many\n * compound keys share one chunk and the registry must be able to tell those chunks apart.\n * Do NOT collapse these into a shared helper that returns a closure: closures built by the\n * same helper are indistinguishable by identity-adjacent means (e.g. Function.toString()),\n * which silently merges all chunks into one.\n */\n\n// --- @memberjunction/ng-dashboards → ./actions-dashboards.module (7 entries) ---\nconst loadNgDashboardsActionsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/actions-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/actions-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./ai-dashboards.module (17 entries) ---\nconst loadNgDashboardsAiDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/ai-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/ai-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./communication-dashboards.module (7 entries) ---\nconst loadNgDashboardsCommunicationDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/communication-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/communication-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsComponentStudioDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/component-studio-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/component-studio-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./core-dashboards.module (34 entries) ---\nconst loadNgDashboardsCoreDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/core-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/core-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---\nconst loadNgDashboardsCredentialsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/credentials-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/credentials-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---\nconst loadNgDashboardsDataExplorerDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/data-explorer-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---\nconst loadNgDashboardsIntegrationModule = {\n chunkId: '@memberjunction/ng-dashboards/integration.module',\n load: () => import('@memberjunction/ng-dashboards/integration.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./lists-dashboards.module (5 entries) ---\nconst loadNgDashboardsListsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/lists-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/lists-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---\nconst loadNgDashboardsMcpModule = {\n chunkId: '@memberjunction/ng-dashboards/mcp.module',\n load: () => import('@memberjunction/ng-dashboards/mcp.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./module (3 entries) ---\nconst loadNgDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/module',\n load: () => import('@memberjunction/ng-dashboards/module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsPredictiveStudioDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/predictive-studio-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/predictive-studio-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./routines-dashboards.module (1 entries) ---\nconst loadNgDashboardsRoutinesDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/routines-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/routines-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---\nconst loadNgDashboardsSchedulingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/scheduling-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/scheduling-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---\nconst loadNgDashboardsTestingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/testing-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/testing-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---\nconst loadNgExplorerSettingsSettingsModule = {\n chunkId: '@memberjunction/ng-explorer-settings/settings.module',\n load: () => import('@memberjunction/ng-explorer-settings/settings.module').then(() => {})\n};\n\n// --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---\nconst loadNgFileStorageFileStorageModule = {\n chunkId: '@memberjunction/ng-file-storage/file-storage.module',\n load: () => import('@memberjunction/ng-file-storage/file-storage.module').then(() => {})\n};\n\n// --- @memberjunction/ng-react → . (1 entries) ---\nconst loadNgReact = {\n chunkId: '@memberjunction/ng-react',\n load: () => import('@memberjunction/ng-react').then(() => {})\n};\n\n/**\n * Complete mapping of compound keys (BaseClassName::Key) to their chunk descriptor.\n * Covers all @RegisterClass decorated classes in lazy-loaded packages.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, { chunkId: string; load: () => Promise<void> }> = {\n // @memberjunction/ng-dashboards → ./actions-dashboards.module\n 'BaseResourceComponent::ActionExplorerResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsCodeResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsEntitiesResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsMonitorResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsOverviewResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsScheduleResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsSecurityResource': loadNgDashboardsActionsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./ai-dashboards.module\n 'BaseResourceComponent::AIAgentRequestsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAgentsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIModelsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIMonitorResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIPromptsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AutotaggingPipelineResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::ClusterVisualizationResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::DuplicateDetectionResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::FeaturePipelinesResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::SchedulingResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::Tags': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VectorManagementResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VisualizationResource': loadNgDashboardsAiDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./communication-dashboards.module\n 'BaseDashboard::CommunicationDashboard': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationLogsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationMonitorResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationProvidersResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationRunsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationsNewMessageResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationTemplatesResource': loadNgDashboardsCommunicationDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./component-studio-dashboards.module\n 'BaseDashboard::ComponentStudioDashboard': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::ComponentStudioResource': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::FormBuilderResource': loadNgDashboardsComponentStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./core-dashboards.module\n 'BaseApplication::HomeApplication': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::EntityAdmin': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeManagerDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeStudioDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDataSchema': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDeveloperTools': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminIdentityAccess': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminMonitoring': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::APIKeysResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ApplicationRolesResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AppStateInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsContainer': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsOperations': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsRunHistory': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ClassRegistryInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::DashboardBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::EventMonitorInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::GraphQLConsoleInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::HomeDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LayoutInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LazyModuleStatusInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsAuditLogResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsResourceAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsUserAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::QueryBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::RealtimeRecordingsDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SettingsExplorerInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SystemDiagnosticsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeManagerResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeStudioResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryDiffResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryGraphResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryLabelsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryRestoreResource': loadNgDashboardsCoreDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./credentials-dashboards.module\n 'BaseDashboard::CredentialsDashboard': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsAuditResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsCategoriesResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsListResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsOverviewResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsTypesResource': loadNgDashboardsCredentialsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./data-explorer-dashboards.module\n 'BaseDashboard::DataExplorer': loadNgDashboardsDataExplorerDashboardsModule,\n 'BaseResourceComponent::DataExplorerResource': loadNgDashboardsDataExplorerDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./integration.module\n 'BaseResourceComponent::IntegrationActivity': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationConnections': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationMappingWorkspace': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationOverview': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationPipelines': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationSchedules': loadNgDashboardsIntegrationModule,\n\n // @memberjunction/ng-dashboards → ./lists-dashboards.module\n 'BaseResourceComponent::ListsBrowseResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsCategoriesResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsMyListsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsOperationsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsSharedWithMeResource': loadNgDashboardsListsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./mcp.module\n 'BaseDashboard::MCPDashboard': loadNgDashboardsMcpModule,\n 'BaseResourceComponent::MCPResource': loadNgDashboardsMcpModule,\n\n // @memberjunction/ng-dashboards → ./module\n 'BaseResourceComponent::ArchiveConfigResource': loadNgDashboardsModule,\n 'BaseResourceComponent::ArchiveRunsResource': loadNgDashboardsModule,\n 'BaseResourceComponent::DatabaseDesignerDashboard': loadNgDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module\n 'BaseResourceComponent::PredictiveStudioModelsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioPredictionsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioStudioResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./routines-dashboards.module\n 'BaseResourceComponent::UserRoutines': loadNgDashboardsRoutinesDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./scheduling-dashboards.module\n 'BaseDashboard::SchedulingDashboard': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingActivityResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingDashboardResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingJobsResource': loadNgDashboardsSchedulingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./testing-dashboards.module\n 'BaseDashboard::TestingDashboard': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingAnalyticsResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingDashboardTabResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingExplorerResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingReviewResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingRunsResource': loadNgDashboardsTestingDashboardsModule,\n\n // @memberjunction/ng-explorer-settings → ./settings.module\n 'BaseDashboard::ApplicationManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::EntityPermissions': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::RoleManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::SqlLogging': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::UserManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseNavigationComponent::Settings': loadNgExplorerSettingsSettingsModule,\n\n // @memberjunction/ng-file-storage → ./file-storage.module\n 'BaseResourceComponent::FileBrowserResource': loadNgFileStorageFileStorageModule,\n\n // @memberjunction/ng-react → .\n 'RuntimeUtilities::RuntimeUtilities': loadNgReact,\n\n};\n\nexport const LAZY_FEATURE_CONFIG_COUNT = 114;\n"]}
@@ -1,6 +1,19 @@
1
1
  import * as i0 from "@angular/core";
2
2
  /**
3
- * Registry that maps compound keys (BaseClassName::Key) to dynamic import() loaders.
3
+ * One lazy-loadable chunk: a stable identity plus the dynamic import that loads it.
4
+ *
5
+ * Many compound keys map to the same chunk, so `chunkId` is what the registry dedupes
6
+ * loads by — it must uniquely identify the chunk. The generated LAZY_FEATURE_CONFIG
7
+ * uses the dynamic import specifier (e.g. '@memberjunction/ng-dashboards/ai-dashboards.module').
8
+ */
9
+ export interface LazyFeatureChunk {
10
+ /** Stable, unique chunk identity. Also the label dev tools show for the chunk. */
11
+ readonly chunkId: string;
12
+ /** Imports the chunk, which runs the `@RegisterClass` decorators inside it. */
13
+ readonly load: () => Promise<void>;
14
+ }
15
+ /**
16
+ * Registry that maps compound keys (BaseClassName::Key) to the chunk that provides them.
4
17
  *
5
18
  * Wired to ClassFactory via `WireToClassFactory()` so that any `GetRegistrationAsync()`
6
19
  * or `CreateInstanceAsync()` call that misses synchronously will automatically trigger
@@ -10,18 +23,35 @@ import * as i0 from "@angular/core";
10
23
  */
11
24
  export declare class LazyModuleRegistry {
12
25
  private registry;
26
+ /**
27
+ * Secondary index: subclass key → (compound key → chunk), ignoring the base-class half.
28
+ *
29
+ * Needed because the base-class half of a compound key is NOT stable at runtime. ClassFactory
30
+ * builds the lookup from `baseClass.name`, but the emitted identifier varies by build mode —
31
+ * for the same `BaseResourceComponent` we have observed `_BaseResourceComponent` (unminified,
32
+ * Angular's named class expression) and `BaseResourceComponent2` (minified, esbuild's collision
33
+ * rename) — while the generated LAZY_FEATURE_CONFIG keys use the TypeScript source name. Any
34
+ * mismatch made the primary lookup miss, so NO chunk was ever imported and every lazily
35
+ * provided class silently failed to resolve.
36
+ *
37
+ * The inner map is keyed by compound key (not a flat Set of chunks) so that re-registering a
38
+ * compound key replaces its contribution here too, matching `registry`'s replace semantics.
39
+ */
40
+ private chunksBySubclassKey;
41
+ /** chunkIds that have finished loading. */
13
42
  private loadedChunks;
43
+ /** In-flight loads, keyed by chunkId, so concurrent callers share one import. */
14
44
  private pendingLoads;
15
45
  /**
16
- * Register a single compound key with its loader function.
46
+ * Register a single compound key with the chunk that provides it.
17
47
  * @param compoundKey Format: "BaseClassName::Key" (e.g., "BaseResourceComponent::HomeDashboard")
18
- * @param loader Dynamic import function that loads the chunk containing the class
48
+ * @param chunk The chunk descriptor (stable id + dynamic import)
19
49
  */
20
- Register(compoundKey: string, loader: () => Promise<void>): void;
50
+ Register(compoundKey: string, chunk: LazyFeatureChunk): void;
21
51
  /**
22
52
  * Register multiple compound keys at once (from the generated LAZY_FEATURE_CONFIG).
23
53
  */
24
- RegisterBulk(mappings: Record<string, () => Promise<void>>): void;
54
+ RegisterBulk(mappings: Record<string, LazyFeatureChunk>): void;
25
55
  /**
26
56
  * Wires this registry to ClassFactory as a lazy loader.
27
57
  * After calling this, any `ClassFactory.GetRegistrationAsync()` or `CreateInstanceAsync()`
@@ -31,8 +61,8 @@ export declare class LazyModuleRegistry {
31
61
  WireToClassFactory(): void;
32
62
  /**
33
63
  * Read-only snapshot of the registry state — for diagnostic tools.
34
- * Groups compound keys by chunk (the underlying loader function) so
35
- * inspectors can show "X chunks, Y loaded" plus the keys covered by each.
64
+ * Groups compound keys by `chunkId` so inspectors can show "X chunks, Y loaded"
65
+ * plus the keys covered by each.
36
66
  */
37
67
  GetSnapshot(): {
38
68
  registered: string[];
@@ -42,7 +72,8 @@ export declare class LazyModuleRegistry {
42
72
  loaded: boolean;
43
73
  keys: string[];
44
74
  }>;
45
- chunkCount: number;
75
+ /** How many chunks have finished loading. The total is `chunks.length`. */
76
+ loadedChunkCount: number;
46
77
  };
47
78
  /**
48
79
  * Programmatically trigger a lazy chunk load by compound key. Returns true
@@ -57,6 +88,15 @@ export declare class LazyModuleRegistry {
57
88
  * @param compoundKey Format: "BaseClassName::Key" (e.g., "BaseResourceComponent::HomeDashboard")
58
89
  */
59
90
  Load(compoundKey: string): Promise<boolean>;
91
+ /**
92
+ * The distinct chunks (by `chunkId`) registered under a subclass key, in registration order.
93
+ */
94
+ private candidateChunksFor;
95
+ /**
96
+ * Imports a chunk once, sharing in-flight loads and remembering completed ones.
97
+ * Resolves when the chunk is loaded; rejects if the import fails.
98
+ */
99
+ private loadChunk;
60
100
  static ɵfac: i0.ɵɵFactoryDeclaration<LazyModuleRegistry, never>;
61
101
  static ɵprov: i0.ɵɵInjectableDeclaration<LazyModuleRegistry>;
62
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-module-registry.d.ts","sourceRoot":"","sources":["../../../src/lib/services/lazy-module-registry.ts"],"names":[],"mappings":";AAGA;;;;;;;;GAQG;AACH,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAoC;IAExD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;IAMjE;;;;;OAKG;IACH,kBAAkB,IAAI,IAAI;IAU1B;;;;OAIG;IACH,WAAW,IAAI;QACb,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;QACpE,UAAU,EAAE,MAAM,CAAC;KACpB;IA8BD;;;OAGG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD;;;;;;OAMG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;yCA9FtC,kBAAkB;6CAAlB,kBAAkB;CAwH9B"}
1
+ {"version":3,"file":"lazy-module-registry.d.ts","sourceRoot":"","sources":["../../../src/lib/services/lazy-module-registry.ts"],"names":[],"mappings":";AAGA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAQD;;;;;;;;GAQG;AACH,qBACa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAuC;IACvD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB,CAAoD;IAC/E,2CAA2C;IAC3C,OAAO,CAAC,YAAY,CAAqB;IACzC,iFAAiF;IACjF,OAAO,CAAC,YAAY,CAAoC;IAExD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAQ5D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,IAAI;IAM9D;;;;;OAKG;IACH,kBAAkB,IAAI,IAAI;IAU1B;;;;OAIG;IACH,WAAW,IAAI;QACb,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;QACpE,2EAA2E;QAC3E,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IA6BD;;;OAGG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD;;;;;;OAMG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCjD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;OAGG;YACW,SAAS;yCArKZ,kBAAkB;6CAAlB,kBAAkB;CAwM9B"}
@@ -1,8 +1,13 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { MJGlobal } from '@memberjunction/global';
3
3
  import * as i0 from "@angular/core";
4
+ /** Extracts the subclass-key half of a `"BaseClassName::Key"` compound key. */
5
+ function subclassKeyOf(compoundKey) {
6
+ const separator = compoundKey.indexOf('::');
7
+ return separator < 0 ? compoundKey : compoundKey.slice(separator + 2);
8
+ }
4
9
  /**
5
- * Registry that maps compound keys (BaseClassName::Key) to dynamic import() loaders.
10
+ * Registry that maps compound keys (BaseClassName::Key) to the chunk that provides them.
6
11
  *
7
12
  * Wired to ClassFactory via `WireToClassFactory()` so that any `GetRegistrationAsync()`
8
13
  * or `CreateInstanceAsync()` call that misses synchronously will automatically trigger
@@ -12,22 +17,43 @@ import * as i0 from "@angular/core";
12
17
  */
13
18
  export class LazyModuleRegistry {
14
19
  registry = new Map();
20
+ /**
21
+ * Secondary index: subclass key → (compound key → chunk), ignoring the base-class half.
22
+ *
23
+ * Needed because the base-class half of a compound key is NOT stable at runtime. ClassFactory
24
+ * builds the lookup from `baseClass.name`, but the emitted identifier varies by build mode —
25
+ * for the same `BaseResourceComponent` we have observed `_BaseResourceComponent` (unminified,
26
+ * Angular's named class expression) and `BaseResourceComponent2` (minified, esbuild's collision
27
+ * rename) — while the generated LAZY_FEATURE_CONFIG keys use the TypeScript source name. Any
28
+ * mismatch made the primary lookup miss, so NO chunk was ever imported and every lazily
29
+ * provided class silently failed to resolve.
30
+ *
31
+ * The inner map is keyed by compound key (not a flat Set of chunks) so that re-registering a
32
+ * compound key replaces its contribution here too, matching `registry`'s replace semantics.
33
+ */
34
+ chunksBySubclassKey = new Map();
35
+ /** chunkIds that have finished loading. */
15
36
  loadedChunks = new Set();
37
+ /** In-flight loads, keyed by chunkId, so concurrent callers share one import. */
16
38
  pendingLoads = new Map();
17
39
  /**
18
- * Register a single compound key with its loader function.
40
+ * Register a single compound key with the chunk that provides it.
19
41
  * @param compoundKey Format: "BaseClassName::Key" (e.g., "BaseResourceComponent::HomeDashboard")
20
- * @param loader Dynamic import function that loads the chunk containing the class
42
+ * @param chunk The chunk descriptor (stable id + dynamic import)
21
43
  */
22
- Register(compoundKey, loader) {
23
- this.registry.set(compoundKey, loader);
44
+ Register(compoundKey, chunk) {
45
+ this.registry.set(compoundKey, chunk);
46
+ const subclassKey = subclassKeyOf(compoundKey);
47
+ const byCompoundKey = this.chunksBySubclassKey.get(subclassKey) ?? new Map();
48
+ byCompoundKey.set(compoundKey, chunk);
49
+ this.chunksBySubclassKey.set(subclassKey, byCompoundKey);
24
50
  }
25
51
  /**
26
52
  * Register multiple compound keys at once (from the generated LAZY_FEATURE_CONFIG).
27
53
  */
28
54
  RegisterBulk(mappings) {
29
- for (const [compoundKey, loader] of Object.entries(mappings)) {
30
- this.registry.set(compoundKey, loader);
55
+ for (const [compoundKey, chunk] of Object.entries(mappings)) {
56
+ this.Register(compoundKey, chunk);
31
57
  }
32
58
  }
33
59
  /**
@@ -45,16 +71,15 @@ export class LazyModuleRegistry {
45
71
  }
46
72
  /**
47
73
  * Read-only snapshot of the registry state — for diagnostic tools.
48
- * Groups compound keys by chunk (the underlying loader function) so
49
- * inspectors can show "X chunks, Y loaded" plus the keys covered by each.
74
+ * Groups compound keys by `chunkId` so inspectors can show "X chunks, Y loaded"
75
+ * plus the keys covered by each.
50
76
  */
51
77
  GetSnapshot() {
52
78
  const byChunk = new Map();
53
- for (const [compoundKey, loader] of this.registry.entries()) {
54
- const id = loader.toString();
55
- const arr = byChunk.get(id) ?? [];
79
+ for (const [compoundKey, chunk] of this.registry.entries()) {
80
+ const arr = byChunk.get(chunk.chunkId) ?? [];
56
81
  arr.push(compoundKey);
57
- byChunk.set(id, arr);
82
+ byChunk.set(chunk.chunkId, arr);
58
83
  }
59
84
  const chunks = Array.from(byChunk.entries())
60
85
  .map(([chunkId, keys]) => ({
@@ -72,7 +97,7 @@ export class LazyModuleRegistry {
72
97
  registered: Array.from(this.registry.keys()).sort(),
73
98
  loaded: loaded.sort(),
74
99
  chunks,
75
- chunkCount: this.loadedChunks.size
100
+ loadedChunkCount: this.loadedChunks.size
76
101
  };
77
102
  }
78
103
  /**
@@ -90,27 +115,82 @@ export class LazyModuleRegistry {
90
115
  * @param compoundKey Format: "BaseClassName::Key" (e.g., "BaseResourceComponent::HomeDashboard")
91
116
  */
92
117
  async Load(compoundKey) {
93
- const loader = this.registry.get(compoundKey);
94
- if (!loader)
118
+ // Primary: exact compound key. Correct and precise when the runtime base-class name
119
+ // happens to match the generated config.
120
+ const exact = this.registry.get(compoundKey);
121
+ if (exact) {
122
+ await this.loadChunk(exact);
123
+ return true;
124
+ }
125
+ // Fallback: match on the subclass key alone, because the base-class half is not stable
126
+ // across build modes (see `chunksBySubclassKey`). Subclass keys are unique per chunk in
127
+ // practice; if several chunks ever claim one, load them all so resolution can't silently
128
+ // pick wrong — ClassFactory still decides the winner by base class afterwards.
129
+ const candidates = this.candidateChunksFor(subclassKeyOf(compoundKey));
130
+ if (candidates.length === 0)
95
131
  return false;
96
- // Use the loader function's string representation as chunk key for deduplication
97
- // (multiple compound keys can share the same loader/chunk)
98
- const chunkKey = loader.toString();
132
+ // One candidate failing must not skip the rest a later one may hold the class. Only
133
+ // surface a failure if NOTHING loaded, so a partial failure can't mask a success.
134
+ const errors = [];
135
+ let loaded = false;
136
+ for (const chunk of candidates) {
137
+ try {
138
+ await this.loadChunk(chunk);
139
+ loaded = true;
140
+ }
141
+ catch (error) {
142
+ errors.push(error);
143
+ }
144
+ }
145
+ if (!loaded)
146
+ throw errors[0];
147
+ return true;
148
+ }
149
+ /**
150
+ * The distinct chunks (by `chunkId`) registered under a subclass key, in registration order.
151
+ */
152
+ candidateChunksFor(subclassKey) {
153
+ const byCompoundKey = this.chunksBySubclassKey.get(subclassKey);
154
+ if (!byCompoundKey)
155
+ return [];
156
+ const distinct = new Map();
157
+ for (const chunk of byCompoundKey.values()) {
158
+ distinct.set(chunk.chunkId, chunk);
159
+ }
160
+ return Array.from(distinct.values());
161
+ }
162
+ /**
163
+ * Imports a chunk once, sharing in-flight loads and remembering completed ones.
164
+ * Resolves when the chunk is loaded; rejects if the import fails.
165
+ */
166
+ async loadChunk(chunk) {
167
+ // Dedupe on the chunk's declared id — multiple compound keys share one chunk.
168
+ // This MUST be a value that differs between chunks; deriving it from the loader
169
+ // function (e.g. Function.toString()) collapses every chunk into one, so the first
170
+ // chunk loaded makes all the others look already-loaded and their classes never register.
171
+ const chunkKey = chunk.chunkId;
99
172
  if (this.loadedChunks.has(chunkKey))
100
- return true;
173
+ return;
101
174
  // Deduplicate concurrent loads
102
175
  const pending = this.pendingLoads.get(chunkKey);
103
176
  if (pending) {
104
177
  await pending;
105
- return true;
178
+ return;
106
179
  }
107
- const loadPromise = loader().then(() => {
180
+ const loadPromise = chunk.load().then(() => {
108
181
  this.loadedChunks.add(chunkKey);
109
182
  this.pendingLoads.delete(chunkKey);
183
+ }, (error) => {
184
+ // Drop the failed attempt so a later navigation retries. Chunk fetches fail
185
+ // transiently in normal use — a dev-server rebuild renames every lazy chunk, so a
186
+ // page loaded before the rebuild 404s once. Left in `pendingLoads`, the rejected
187
+ // promise would be re-awaited (and re-thrown) forever, killing the chunk for the
188
+ // rest of the page session. The rejection still propagates to this caller.
189
+ this.pendingLoads.delete(chunkKey);
190
+ throw error;
110
191
  });
111
192
  this.pendingLoads.set(chunkKey, loadPromise);
112
193
  await loadPromise;
113
- return true;
114
194
  }
115
195
  static ɵfac = function LazyModuleRegistry_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LazyModuleRegistry)(); };
116
196
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: LazyModuleRegistry, factory: LazyModuleRegistry.ɵfac, providedIn: 'root' });
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-module-registry.js","sourceRoot":"","sources":["../../../src/lib/services/lazy-module-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { MJGlobal } from '@memberjunction/global';\n\n/**\n * Registry that maps compound keys (BaseClassName::Key) to dynamic import() loaders.\n *\n * Wired to ClassFactory via `WireToClassFactory()` so that any `GetRegistrationAsync()`\n * or `CreateInstanceAsync()` call that misses synchronously will automatically trigger\n * the correct lazy chunk load. This replaces the previous pattern where individual\n * components (ResourceContainerComponent, TabContainerComponent, etc.) each had their\n * own retry logic.\n */\n@Injectable({ providedIn: 'root' })\nexport class LazyModuleRegistry {\n private registry = new Map<string, () => Promise<void>>();\n private loadedChunks = new Set<string>();\n private pendingLoads = new Map<string, Promise<void>>();\n\n /**\n * Register a single compound key with its loader function.\n * @param compoundKey Format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\")\n * @param loader Dynamic import function that loads the chunk containing the class\n */\n Register(compoundKey: string, loader: () => Promise<void>): void {\n this.registry.set(compoundKey, loader);\n }\n\n /**\n * Register multiple compound keys at once (from the generated LAZY_FEATURE_CONFIG).\n */\n RegisterBulk(mappings: Record<string, () => Promise<void>>): void {\n for (const [compoundKey, loader] of Object.entries(mappings)) {\n this.registry.set(compoundKey, loader);\n }\n }\n\n /**\n * Wires this registry to ClassFactory as a lazy loader.\n * After calling this, any `ClassFactory.GetRegistrationAsync()` or `CreateInstanceAsync()`\n * that fails to find a registration synchronously will call back into this registry\n * with the compound key (baseClassName::key) to trigger lazy loading.\n */\n WireToClassFactory(): void {\n MJGlobal.Instance.ClassFactory.RegisterLazyLoader(\n (baseClassName: string, key: string) => this.Load(`${baseClassName}::${key}`)\n );\n // Publish to a well-known global so introspection tools (e.g. the Admin\n // app's \"Lazy Loading\" inspector in ng-dashboards) can read the snapshot\n // without creating a hard package dependency on explorer-core. Dev tools only.\n (globalThis as { __mj_lazy_registry__?: LazyModuleRegistry }).__mj_lazy_registry__ = this;\n }\n\n /**\n * Read-only snapshot of the registry state — for diagnostic tools.\n * Groups compound keys by chunk (the underlying loader function) so\n * inspectors can show \"X chunks, Y loaded\" plus the keys covered by each.\n */\n GetSnapshot(): {\n registered: string[];\n loaded: string[];\n chunks: Array<{ chunkId: string; loaded: boolean; keys: string[] }>;\n chunkCount: number;\n } {\n const byChunk = new Map<string, string[]>();\n for (const [compoundKey, loader] of this.registry.entries()) {\n const id = loader.toString();\n const arr = byChunk.get(id) ?? [];\n arr.push(compoundKey);\n byChunk.set(id, arr);\n }\n\n const chunks = Array.from(byChunk.entries())\n .map(([chunkId, keys]) => ({\n chunkId,\n loaded: this.loadedChunks.has(chunkId),\n keys: keys.sort()\n }))\n .sort((a, b) => b.keys.length - a.keys.length);\n\n const loaded: string[] = [];\n for (const c of chunks) {\n if (c.loaded) loaded.push(...c.keys);\n }\n\n return {\n registered: Array.from(this.registry.keys()).sort(),\n loaded: loaded.sort(),\n chunks,\n chunkCount: this.loadedChunks.size\n };\n }\n\n /**\n * Programmatically trigger a lazy chunk load by compound key. Returns true\n * on success. Useful for dev tools that want to \"preload\" a chunk.\n */\n async ForceLoad(compoundKey: string): Promise<boolean> {\n return this.Load(compoundKey);\n }\n\n /**\n * Attempt to lazy-load the chunk for a given compound key.\n * Returns true if the key was found in the registry and loaded.\n * Deduplicates concurrent loads of the same chunk.\n *\n * @param compoundKey Format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\")\n */\n async Load(compoundKey: string): Promise<boolean> {\n const loader = this.registry.get(compoundKey);\n if (!loader) return false;\n\n // Use the loader function's string representation as chunk key for deduplication\n // (multiple compound keys can share the same loader/chunk)\n const chunkKey = loader.toString();\n\n if (this.loadedChunks.has(chunkKey)) return true;\n\n // Deduplicate concurrent loads\n const pending = this.pendingLoads.get(chunkKey);\n if (pending) {\n await pending;\n return true;\n }\n\n const loadPromise = loader().then(() => {\n this.loadedChunks.add(chunkKey);\n this.pendingLoads.delete(chunkKey);\n });\n\n this.pendingLoads.set(chunkKey, loadPromise);\n await loadPromise;\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"lazy-module-registry.js","sourceRoot":"","sources":["../../../src/lib/services/lazy-module-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { MJGlobal } from '@memberjunction/global';\n\n/**\n * One lazy-loadable chunk: a stable identity plus the dynamic import that loads it.\n *\n * Many compound keys map to the same chunk, so `chunkId` is what the registry dedupes\n * loads by — it must uniquely identify the chunk. The generated LAZY_FEATURE_CONFIG\n * uses the dynamic import specifier (e.g. '@memberjunction/ng-dashboards/ai-dashboards.module').\n */\nexport interface LazyFeatureChunk {\n /** Stable, unique chunk identity. Also the label dev tools show for the chunk. */\n readonly chunkId: string;\n /** Imports the chunk, which runs the `@RegisterClass` decorators inside it. */\n readonly load: () => Promise<void>;\n}\n\n/** Extracts the subclass-key half of a `\"BaseClassName::Key\"` compound key. */\nfunction subclassKeyOf(compoundKey: string): string {\n const separator = compoundKey.indexOf('::');\n return separator < 0 ? compoundKey : compoundKey.slice(separator + 2);\n}\n\n/**\n * Registry that maps compound keys (BaseClassName::Key) to the chunk that provides them.\n *\n * Wired to ClassFactory via `WireToClassFactory()` so that any `GetRegistrationAsync()`\n * or `CreateInstanceAsync()` call that misses synchronously will automatically trigger\n * the correct lazy chunk load. This replaces the previous pattern where individual\n * components (ResourceContainerComponent, TabContainerComponent, etc.) each had their\n * own retry logic.\n */\n@Injectable({ providedIn: 'root' })\nexport class LazyModuleRegistry {\n private registry = new Map<string, LazyFeatureChunk>();\n /**\n * Secondary index: subclass key → (compound key → chunk), ignoring the base-class half.\n *\n * Needed because the base-class half of a compound key is NOT stable at runtime. ClassFactory\n * builds the lookup from `baseClass.name`, but the emitted identifier varies by build mode —\n * for the same `BaseResourceComponent` we have observed `_BaseResourceComponent` (unminified,\n * Angular's named class expression) and `BaseResourceComponent2` (minified, esbuild's collision\n * rename) — while the generated LAZY_FEATURE_CONFIG keys use the TypeScript source name. Any\n * mismatch made the primary lookup miss, so NO chunk was ever imported and every lazily\n * provided class silently failed to resolve.\n *\n * The inner map is keyed by compound key (not a flat Set of chunks) so that re-registering a\n * compound key replaces its contribution here too, matching `registry`'s replace semantics.\n */\n private chunksBySubclassKey = new Map<string, Map<string, LazyFeatureChunk>>();\n /** chunkIds that have finished loading. */\n private loadedChunks = new Set<string>();\n /** In-flight loads, keyed by chunkId, so concurrent callers share one import. */\n private pendingLoads = new Map<string, Promise<void>>();\n\n /**\n * Register a single compound key with the chunk that provides it.\n * @param compoundKey Format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\")\n * @param chunk The chunk descriptor (stable id + dynamic import)\n */\n Register(compoundKey: string, chunk: LazyFeatureChunk): void {\n this.registry.set(compoundKey, chunk);\n const subclassKey = subclassKeyOf(compoundKey);\n const byCompoundKey = this.chunksBySubclassKey.get(subclassKey) ?? new Map<string, LazyFeatureChunk>();\n byCompoundKey.set(compoundKey, chunk);\n this.chunksBySubclassKey.set(subclassKey, byCompoundKey);\n }\n\n /**\n * Register multiple compound keys at once (from the generated LAZY_FEATURE_CONFIG).\n */\n RegisterBulk(mappings: Record<string, LazyFeatureChunk>): void {\n for (const [compoundKey, chunk] of Object.entries(mappings)) {\n this.Register(compoundKey, chunk);\n }\n }\n\n /**\n * Wires this registry to ClassFactory as a lazy loader.\n * After calling this, any `ClassFactory.GetRegistrationAsync()` or `CreateInstanceAsync()`\n * that fails to find a registration synchronously will call back into this registry\n * with the compound key (baseClassName::key) to trigger lazy loading.\n */\n WireToClassFactory(): void {\n MJGlobal.Instance.ClassFactory.RegisterLazyLoader(\n (baseClassName: string, key: string) => this.Load(`${baseClassName}::${key}`)\n );\n // Publish to a well-known global so introspection tools (e.g. the Admin\n // app's \"Lazy Loading\" inspector in ng-dashboards) can read the snapshot\n // without creating a hard package dependency on explorer-core. Dev tools only.\n (globalThis as { __mj_lazy_registry__?: LazyModuleRegistry }).__mj_lazy_registry__ = this;\n }\n\n /**\n * Read-only snapshot of the registry state — for diagnostic tools.\n * Groups compound keys by `chunkId` so inspectors can show \"X chunks, Y loaded\"\n * plus the keys covered by each.\n */\n GetSnapshot(): {\n registered: string[];\n loaded: string[];\n chunks: Array<{ chunkId: string; loaded: boolean; keys: string[] }>;\n /** How many chunks have finished loading. The total is `chunks.length`. */\n loadedChunkCount: number;\n } {\n const byChunk = new Map<string, string[]>();\n for (const [compoundKey, chunk] of this.registry.entries()) {\n const arr = byChunk.get(chunk.chunkId) ?? [];\n arr.push(compoundKey);\n byChunk.set(chunk.chunkId, arr);\n }\n\n const chunks = Array.from(byChunk.entries())\n .map(([chunkId, keys]) => ({\n chunkId,\n loaded: this.loadedChunks.has(chunkId),\n keys: keys.sort()\n }))\n .sort((a, b) => b.keys.length - a.keys.length);\n\n const loaded: string[] = [];\n for (const c of chunks) {\n if (c.loaded) loaded.push(...c.keys);\n }\n\n return {\n registered: Array.from(this.registry.keys()).sort(),\n loaded: loaded.sort(),\n chunks,\n loadedChunkCount: this.loadedChunks.size\n };\n }\n\n /**\n * Programmatically trigger a lazy chunk load by compound key. Returns true\n * on success. Useful for dev tools that want to \"preload\" a chunk.\n */\n async ForceLoad(compoundKey: string): Promise<boolean> {\n return this.Load(compoundKey);\n }\n\n /**\n * Attempt to lazy-load the chunk for a given compound key.\n * Returns true if the key was found in the registry and loaded.\n * Deduplicates concurrent loads of the same chunk.\n *\n * @param compoundKey Format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\")\n */\n async Load(compoundKey: string): Promise<boolean> {\n // Primary: exact compound key. Correct and precise when the runtime base-class name\n // happens to match the generated config.\n const exact = this.registry.get(compoundKey);\n if (exact) {\n await this.loadChunk(exact);\n return true;\n }\n\n // Fallback: match on the subclass key alone, because the base-class half is not stable\n // across build modes (see `chunksBySubclassKey`). Subclass keys are unique per chunk in\n // practice; if several chunks ever claim one, load them all so resolution can't silently\n // pick wrong — ClassFactory still decides the winner by base class afterwards.\n const candidates = this.candidateChunksFor(subclassKeyOf(compoundKey));\n if (candidates.length === 0) return false;\n\n // One candidate failing must not skip the rest — a later one may hold the class. Only\n // surface a failure if NOTHING loaded, so a partial failure can't mask a success.\n const errors: unknown[] = [];\n let loaded = false;\n for (const chunk of candidates) {\n try {\n await this.loadChunk(chunk);\n loaded = true;\n } catch (error) {\n errors.push(error);\n }\n }\n if (!loaded) throw errors[0];\n return true;\n }\n\n /**\n * The distinct chunks (by `chunkId`) registered under a subclass key, in registration order.\n */\n private candidateChunksFor(subclassKey: string): LazyFeatureChunk[] {\n const byCompoundKey = this.chunksBySubclassKey.get(subclassKey);\n if (!byCompoundKey) return [];\n\n const distinct = new Map<string, LazyFeatureChunk>();\n for (const chunk of byCompoundKey.values()) {\n distinct.set(chunk.chunkId, chunk);\n }\n return Array.from(distinct.values());\n }\n\n /**\n * Imports a chunk once, sharing in-flight loads and remembering completed ones.\n * Resolves when the chunk is loaded; rejects if the import fails.\n */\n private async loadChunk(chunk: LazyFeatureChunk): Promise<void> {\n // Dedupe on the chunk's declared id — multiple compound keys share one chunk.\n // This MUST be a value that differs between chunks; deriving it from the loader\n // function (e.g. Function.toString()) collapses every chunk into one, so the first\n // chunk loaded makes all the others look already-loaded and their classes never register.\n const chunkKey = chunk.chunkId;\n\n if (this.loadedChunks.has(chunkKey)) return;\n\n // Deduplicate concurrent loads\n const pending = this.pendingLoads.get(chunkKey);\n if (pending) {\n await pending;\n return;\n }\n\n const loadPromise = chunk.load().then(\n () => {\n this.loadedChunks.add(chunkKey);\n this.pendingLoads.delete(chunkKey);\n },\n (error: unknown) => {\n // Drop the failed attempt so a later navigation retries. Chunk fetches fail\n // transiently in normal use — a dev-server rebuild renames every lazy chunk, so a\n // page loaded before the rebuild 404s once. Left in `pendingLoads`, the rejected\n // promise would be re-awaited (and re-thrown) forever, killing the chunk for the\n // rest of the page session. The rejection still propagates to this caller.\n this.pendingLoads.delete(chunkKey);\n throw error;\n }\n );\n\n this.pendingLoads.set(chunkKey, loadPromise);\n await loadPromise;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-explorer-core",
3
- "version": "5.50.0",
3
+ "version": "5.51.0",
4
4
  "description": "MemberJunction Explorer: Core Angular Components",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -20,7 +20,7 @@
20
20
  "@angular/compiler": "21.1.3",
21
21
  "@angular/compiler-cli": "21.1.3",
22
22
  "sass": "^1.97.3",
23
- "@memberjunction/ng-test-utils": "5.50.0"
23
+ "@memberjunction/ng-test-utils": "5.51.0"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "@angular/common": "21.1.3",
@@ -33,55 +33,55 @@
33
33
  "@angular/cdk": "21.1.3",
34
34
  "@angular/platform-browser": "21.1.3",
35
35
  "@auth0/auth0-angular": "^2.6.0",
36
- "@memberjunction/ai-core-plus": "5.50.0",
37
- "@memberjunction/ai-engine-base": "5.50.0",
38
- "@memberjunction/communication-types": "5.50.0",
39
- "@memberjunction/core": "5.50.0",
40
- "@memberjunction/core-entities": "5.50.0",
41
- "@memberjunction/entity-communications-client": "5.50.0",
42
- "@memberjunction/export-engine": "5.50.0",
43
- "@memberjunction/global": "5.50.0",
44
- "@memberjunction/graphql-dataprovider": "5.50.0",
45
- "@memberjunction/interactive-component-types": "5.50.0",
46
- "@memberjunction/lists-base": "5.50.0",
47
- "@memberjunction/theme-engine": "5.50.0",
48
- "@memberjunction/ng-ai-test-harness": "5.50.0",
49
- "@memberjunction/ng-artifacts": "5.50.0",
50
- "@memberjunction/ng-auth-services": "5.50.0",
51
- "@memberjunction/ng-base-application": "5.50.0",
52
- "@memberjunction/ng-base-forms": "5.50.0",
53
- "@memberjunction/ng-base-types": "5.50.0",
54
- "@memberjunction/ng-composer": "5.50.0",
55
- "@memberjunction/ng-container-directives": "5.50.0",
56
- "@memberjunction/ng-conversations": "5.50.0",
57
- "@memberjunction/ng-dashboard-viewer": "5.50.0",
58
- "@memberjunction/ng-dashboards": "5.50.0",
59
- "@memberjunction/ng-entity-form-dialog": "5.50.0",
60
- "@memberjunction/ng-entity-permissions": "5.50.0",
61
- "@memberjunction/ng-entity-viewer": "5.50.0",
62
- "@memberjunction/ng-explorer-settings": "5.50.0",
63
- "@memberjunction/ng-export-service": "5.50.0",
64
- "@memberjunction/ng-feedback": "5.50.0",
65
- "@memberjunction/ng-file-storage": "5.50.0",
66
- "@memberjunction/ng-generic-dialog": "5.50.0",
67
- "@memberjunction/ng-list-detail-grid": "5.50.0",
68
- "@memberjunction/ng-list-management": "5.50.0",
69
- "@memberjunction/ng-markdown": "5.50.0",
70
- "@memberjunction/ng-mj-livekit-room": "5.50.0",
71
- "@memberjunction/ng-notifications": "5.50.0",
72
- "@memberjunction/ng-pagination": "5.50.0",
73
- "@memberjunction/ng-query-viewer": "5.50.0",
74
- "@memberjunction/ng-record-changes": "5.50.0",
75
- "@memberjunction/ng-record-selector": "5.50.0",
76
- "@memberjunction/ng-record-tags": "5.50.0",
77
- "@memberjunction/ng-resource-permissions": "5.50.0",
78
- "@memberjunction/ng-search": "5.50.0",
79
- "@memberjunction/ng-shared": "5.50.0",
80
- "@memberjunction/ng-shared-generic": "5.50.0",
81
- "@memberjunction/ng-ui-components": "5.50.0",
82
- "@memberjunction/ng-user-avatar": "5.50.0",
83
- "@memberjunction/ng-word-cloud": "5.50.0",
84
- "@memberjunction/templates-base-types": "5.50.0",
36
+ "@memberjunction/ai-core-plus": "5.51.0",
37
+ "@memberjunction/ai-engine-base": "5.51.0",
38
+ "@memberjunction/communication-types": "5.51.0",
39
+ "@memberjunction/core": "5.51.0",
40
+ "@memberjunction/core-entities": "5.51.0",
41
+ "@memberjunction/entity-communications-client": "5.51.0",
42
+ "@memberjunction/export-engine": "5.51.0",
43
+ "@memberjunction/global": "5.51.0",
44
+ "@memberjunction/graphql-dataprovider": "5.51.0",
45
+ "@memberjunction/interactive-component-types": "5.51.0",
46
+ "@memberjunction/lists-base": "5.51.0",
47
+ "@memberjunction/theme-engine": "5.51.0",
48
+ "@memberjunction/ng-ai-test-harness": "5.51.0",
49
+ "@memberjunction/ng-artifacts": "5.51.0",
50
+ "@memberjunction/ng-auth-services": "5.51.0",
51
+ "@memberjunction/ng-base-application": "5.51.0",
52
+ "@memberjunction/ng-base-forms": "5.51.0",
53
+ "@memberjunction/ng-base-types": "5.51.0",
54
+ "@memberjunction/ng-composer": "5.51.0",
55
+ "@memberjunction/ng-container-directives": "5.51.0",
56
+ "@memberjunction/ng-conversations": "5.51.0",
57
+ "@memberjunction/ng-dashboard-viewer": "5.51.0",
58
+ "@memberjunction/ng-dashboards": "5.51.0",
59
+ "@memberjunction/ng-entity-form-dialog": "5.51.0",
60
+ "@memberjunction/ng-entity-permissions": "5.51.0",
61
+ "@memberjunction/ng-entity-viewer": "5.51.0",
62
+ "@memberjunction/ng-explorer-settings": "5.51.0",
63
+ "@memberjunction/ng-export-service": "5.51.0",
64
+ "@memberjunction/ng-feedback": "5.51.0",
65
+ "@memberjunction/ng-file-storage": "5.51.0",
66
+ "@memberjunction/ng-generic-dialog": "5.51.0",
67
+ "@memberjunction/ng-list-detail-grid": "5.51.0",
68
+ "@memberjunction/ng-list-management": "5.51.0",
69
+ "@memberjunction/ng-markdown": "5.51.0",
70
+ "@memberjunction/ng-mj-livekit-room": "5.51.0",
71
+ "@memberjunction/ng-notifications": "5.51.0",
72
+ "@memberjunction/ng-pagination": "5.51.0",
73
+ "@memberjunction/ng-query-viewer": "5.51.0",
74
+ "@memberjunction/ng-record-changes": "5.51.0",
75
+ "@memberjunction/ng-record-selector": "5.51.0",
76
+ "@memberjunction/ng-record-tags": "5.51.0",
77
+ "@memberjunction/ng-resource-permissions": "5.51.0",
78
+ "@memberjunction/ng-search": "5.51.0",
79
+ "@memberjunction/ng-shared": "5.51.0",
80
+ "@memberjunction/ng-shared-generic": "5.51.0",
81
+ "@memberjunction/ng-ui-components": "5.51.0",
82
+ "@memberjunction/ng-user-avatar": "5.51.0",
83
+ "@memberjunction/ng-word-cloud": "5.51.0",
84
+ "@memberjunction/templates-base-types": "5.51.0",
85
85
  "golden-layout": "^2.6.0",
86
86
  "rxjs": "^7.8.2",
87
87
  "tslib": "^2.8.1"