@memberjunction/react-runtime 6.2.0-edge.3 โ 6.2.0-edge.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +15 -15
- package/CHANGELOG.md +86 -0
- package/dist/registry/component-registry-service.d.ts +2 -1
- package/dist/registry/component-registry-service.d.ts.map +1 -1
- package/dist/registry/component-registry-service.js +20 -8
- package/dist/registry/component-registry-service.js.map +1 -1
- package/dist/runtime.umd.js +236 -181
- package/package.json +7 -7
- package/src/__tests__/component-registry-service.test.ts +38 -0
- package/src/registry/component-registry-service.ts +26 -9
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @memberjunction/react-runtime@6.2.0-edge.
|
|
2
|
+
> @memberjunction/react-runtime@6.2.0-edge.5 build /home/runner/work/MJ/MJ/packages/React/runtime
|
|
3
3
|
> npm run build:node && npm run build:umd
|
|
4
4
|
|
|
5
5
|
npm warn Unknown env config "enable-pre-post-scripts". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
|
|
@@ -8,7 +8,7 @@ npm warn Unknown env config "npm-globalconfig". This will stop working in the ne
|
|
|
8
8
|
npm warn Unknown env config "link-workspace-packages". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
|
|
9
9
|
npm warn Unknown env config "_jsr-registry". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
|
|
10
10
|
|
|
11
|
-
> @memberjunction/react-runtime@6.2.0-edge.
|
|
11
|
+
> @memberjunction/react-runtime@6.2.0-edge.5 build:node
|
|
12
12
|
> tsc && tsc-alias -f
|
|
13
13
|
|
|
14
14
|
npm warn Unknown env config "enable-pre-post-scripts". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
|
|
@@ -17,26 +17,26 @@ npm warn Unknown env config "npm-globalconfig". This will stop working in the ne
|
|
|
17
17
|
npm warn Unknown env config "link-workspace-packages". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
|
|
18
18
|
npm warn Unknown env config "_jsr-registry". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
|
|
19
19
|
|
|
20
|
-
> @memberjunction/react-runtime@6.2.0-edge.
|
|
20
|
+
> @memberjunction/react-runtime@6.2.0-edge.5 build:umd
|
|
21
21
|
> webpack --config webpack.umd.config.cjs
|
|
22
22
|
|
|
23
23
|
Browserslist: browsers data (caniuse-lite) is 9 months old. Please run:
|
|
24
24
|
npx update-browserslist-db@latest
|
|
25
25
|
Why you should do it regularly: https://github.com/browserslist/update-db#readme
|
|
26
26
|
[BABEL] Note: The code generator has deoptimised the styling of /home/runner/work/MJ/MJ/packages/MJCoreEntities/dist/generated/entities/__mj.js as it exceeds the max of 500KB.
|
|
27
|
-
asset [1m[33mruntime.umd.js[39m[22m [1m[33m5.
|
|
28
|
-
orphan modules
|
|
27
|
+
asset [1m[33mruntime.umd.js[39m[22m [1m[33m5.78 MiB[39m[22m [1m[32m[emitted][39m[22m [1m[32m[minimized][39m[22m [1m[33m[big][39m[22m (name: main) 1 related asset
|
|
28
|
+
orphan modules 13.8 MiB [1m[33m[orphan][39m[22m 1101 modules
|
|
29
29
|
runtime modules 1010 bytes 5 modules
|
|
30
|
-
cacheable modules
|
|
31
|
-
modules by path [1m../../../node_modules/.pnpm/[39m[22m
|
|
30
|
+
cacheable modules 13.3 MiB
|
|
31
|
+
modules by path [1m../../../node_modules/.pnpm/[39m[22m 747 KiB
|
|
32
32
|
modules by path [1m../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/[39m[22m 33.5 KiB 19 modules
|
|
33
33
|
modules by path [1m../../../node_modules/.pnpm/debug@4.4.3_supports-color@5.5.0/node_modules/...(truncated)[39m[22m 12.7 KiB 2 modules
|
|
34
|
-
+
|
|
35
|
-
modules by path [1m../../MJCoreEntities/dist/[39m[22m 6.
|
|
36
|
-
[1m../../MJCoreEntities/dist/index.js +
|
|
34
|
+
+ 5 modules
|
|
35
|
+
modules by path [1m../../MJCoreEntities/dist/[39m[22m 6.52 MiB
|
|
36
|
+
[1m../../MJCoreEntities/dist/index.js + 81 modules[39m[22m 6.5 MiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
37
37
|
[1m../../MJCoreEntities/dist/engines/UserViewEngine.js[39m[22m 19.6 KiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
38
|
-
[1m./dist/index.js + 44 modules[39m[22m
|
|
39
|
-
[1m../../MJCore/dist/index.js +
|
|
40
|
-
[1m../../MJGlobal/dist/index.js +
|
|
41
|
-
[1m../../GraphQLDataProvider/dist/index.mjs +
|
|
42
|
-
webpack 5.105.0 compiled [1m[32msuccessfully[39m[22m in
|
|
38
|
+
[1m./dist/index.js + 44 modules[39m[22m 788 KiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
39
|
+
[1m../../MJCore/dist/index.js + 109 modules[39m[22m 2.92 MiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
40
|
+
[1m../../MJGlobal/dist/index.js + 30 modules[39m[22m 668 KiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
41
|
+
[1m../../GraphQLDataProvider/dist/index.mjs + 167 modules[39m[22m 1.75 MiB [1m[33m[built][39m[22m [1m[33m[code generated][39m[22m
|
|
42
|
+
webpack 5.105.0 compiled [1m[32msuccessfully[39m[22m in 75889 ms
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
1
|
# @memberjunction/react-runtime
|
|
2
2
|
|
|
3
|
+
## 6.2.0-edge.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [0d81c53]
|
|
8
|
+
- Updated dependencies [39b35f1]
|
|
9
|
+
- Updated dependencies [3080e83]
|
|
10
|
+
- Updated dependencies [c159e2f]
|
|
11
|
+
- Updated dependencies [29129bd]
|
|
12
|
+
- Updated dependencies [db39145]
|
|
13
|
+
- Updated dependencies [b14c72f]
|
|
14
|
+
- Updated dependencies [5e4205c]
|
|
15
|
+
- Updated dependencies [0cc6b08]
|
|
16
|
+
- Updated dependencies [81aea34]
|
|
17
|
+
- Updated dependencies [ac9b00b]
|
|
18
|
+
- Updated dependencies [5465489]
|
|
19
|
+
- Updated dependencies [c6b4b85]
|
|
20
|
+
- Updated dependencies [d29b5c2]
|
|
21
|
+
- Updated dependencies [0c634ba]
|
|
22
|
+
- Updated dependencies [223669e]
|
|
23
|
+
- Updated dependencies [2274f42]
|
|
24
|
+
- Updated dependencies [35ed364]
|
|
25
|
+
- Updated dependencies [5fed75a]
|
|
26
|
+
- Updated dependencies [1cb1d52]
|
|
27
|
+
- Updated dependencies [db39145]
|
|
28
|
+
- Updated dependencies [b73e3bc]
|
|
29
|
+
- Updated dependencies [08be974]
|
|
30
|
+
- Updated dependencies [7e72c86]
|
|
31
|
+
- Updated dependencies [5fed75a]
|
|
32
|
+
- Updated dependencies [ce758af]
|
|
33
|
+
- Updated dependencies [8420f36]
|
|
34
|
+
- Updated dependencies [8c120db]
|
|
35
|
+
- Updated dependencies [3ab85f9]
|
|
36
|
+
- Updated dependencies [0cc6b08]
|
|
37
|
+
- Updated dependencies [17a4137]
|
|
38
|
+
- Updated dependencies [b4afc13]
|
|
39
|
+
- Updated dependencies [5f707d1]
|
|
40
|
+
- Updated dependencies [03c085c]
|
|
41
|
+
- Updated dependencies [dc38250]
|
|
42
|
+
- @memberjunction/core-entities@6.2.0-edge.5
|
|
43
|
+
- @memberjunction/core@6.2.0-edge.5
|
|
44
|
+
- @memberjunction/graphql-dataprovider@6.2.0-edge.5
|
|
45
|
+
- @memberjunction/global@6.2.0-edge.5
|
|
46
|
+
- @memberjunction/ai-vectors-memory@6.2.0-edge.5
|
|
47
|
+
- @memberjunction/interactive-component-types@6.2.0-edge.5
|
|
48
|
+
|
|
49
|
+
## 6.2.0-edge.4
|
|
50
|
+
|
|
51
|
+
### Patch Changes
|
|
52
|
+
|
|
53
|
+
- Updated dependencies [a709bb6]
|
|
54
|
+
- Updated dependencies [d17de94]
|
|
55
|
+
- Updated dependencies [432cb73]
|
|
56
|
+
- Updated dependencies [1d6e3e8]
|
|
57
|
+
- Updated dependencies [dde482c]
|
|
58
|
+
- Updated dependencies [49f26d9]
|
|
59
|
+
- Updated dependencies [7384dd6]
|
|
60
|
+
- Updated dependencies [88e6902]
|
|
61
|
+
- Updated dependencies [6dc3aa9]
|
|
62
|
+
- Updated dependencies [c87f87a]
|
|
63
|
+
- Updated dependencies [0a7c255]
|
|
64
|
+
- Updated dependencies [d86bcbc]
|
|
65
|
+
- Updated dependencies [7316ac3]
|
|
66
|
+
- Updated dependencies [08b3d7b]
|
|
67
|
+
- Updated dependencies [dbc3462]
|
|
68
|
+
- Updated dependencies [1ea4085]
|
|
69
|
+
- Updated dependencies [aee2d53]
|
|
70
|
+
- Updated dependencies [f0c78c3]
|
|
71
|
+
- Updated dependencies [25f7b82]
|
|
72
|
+
- Updated dependencies [90829e3]
|
|
73
|
+
- Updated dependencies [aac148b]
|
|
74
|
+
- Updated dependencies [d52f9ba]
|
|
75
|
+
- Updated dependencies [0e5a4cd]
|
|
76
|
+
- Updated dependencies [b968642]
|
|
77
|
+
- Updated dependencies [68a7e3b]
|
|
78
|
+
- Updated dependencies [57fea6a]
|
|
79
|
+
- Updated dependencies [1ba9315]
|
|
80
|
+
- Updated dependencies [b8a9e5e]
|
|
81
|
+
- Updated dependencies [e8258a1]
|
|
82
|
+
- @memberjunction/core-entities@6.2.0-edge.4
|
|
83
|
+
- @memberjunction/graphql-dataprovider@6.2.0-edge.4
|
|
84
|
+
- @memberjunction/core@6.2.0-edge.4
|
|
85
|
+
- @memberjunction/global@6.2.0-edge.4
|
|
86
|
+
- @memberjunction/ai-vectors-memory@6.2.0-edge.4
|
|
87
|
+
- @memberjunction/interactive-component-types@6.2.0-edge.4
|
|
88
|
+
|
|
3
89
|
## 6.2.0-edge.3
|
|
4
90
|
|
|
5
91
|
### Patch Changes
|
|
@@ -13,7 +13,7 @@ export interface IComponentRegistryClient {
|
|
|
13
13
|
}): Promise<ComponentSpec | null>;
|
|
14
14
|
}
|
|
15
15
|
export declare class ComponentRegistryService {
|
|
16
|
-
private static
|
|
16
|
+
private static readonly _globalStoreKey;
|
|
17
17
|
private compiledComponentCache;
|
|
18
18
|
private componentReferences;
|
|
19
19
|
private compiler;
|
|
@@ -26,6 +26,7 @@ export declare class ComponentRegistryService {
|
|
|
26
26
|
get Provider(): IMetadataProvider;
|
|
27
27
|
set Provider(value: IMetadataProvider | null);
|
|
28
28
|
private constructor();
|
|
29
|
+
static get Instance(): ComponentRegistryService | undefined;
|
|
29
30
|
static GetInstance(compiler: ComponentCompiler, context: RuntimeContext, debug?: boolean, graphQLClient?: IComponentRegistryClient): ComponentRegistryService;
|
|
30
31
|
static getInstance(compiler: ComponentCompiler, context: RuntimeContext, debug?: boolean, graphQLClient?: IComponentRegistryClient): ComponentRegistryService;
|
|
31
32
|
SetGraphQLClient(client: IComponentRegistryClient): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-registry-service.d.ts","sourceRoot":"","sources":["../../src/registry/component-registry-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAGL,uBAAuB,EACvB,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAY,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAgC7E,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,CAAC,MAAM,EAAE;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CACnC;AAKD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"component-registry-service.d.ts","sourceRoot":"","sources":["../../src/registry/component-registry-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Metadata } from '@memberjunction/core';
|
|
2
|
-
import { UUIDsEqual } from '@memberjunction/global';
|
|
2
|
+
import { GetGlobalObjectStore, UUIDsEqual } from '@memberjunction/global';
|
|
3
3
|
import { ComponentMetadataEngine } from '@memberjunction/core-entities';
|
|
4
4
|
let GraphQLComponentRegistryClient;
|
|
5
5
|
export class ComponentRegistryService {
|
|
6
|
-
static { this.
|
|
6
|
+
static { this._globalStoreKey = '___SINGLETON__ComponentRegistryService'; }
|
|
7
7
|
get Provider() {
|
|
8
8
|
return this._provider ?? new Metadata();
|
|
9
9
|
}
|
|
@@ -23,11 +23,19 @@ export class ComponentRegistryService {
|
|
|
23
23
|
this.debug = debug;
|
|
24
24
|
this.graphQLClient = graphQLClient;
|
|
25
25
|
}
|
|
26
|
+
static get Instance() {
|
|
27
|
+
const g = GetGlobalObjectStore();
|
|
28
|
+
return g ? g[ComponentRegistryService._globalStoreKey] : undefined;
|
|
29
|
+
}
|
|
26
30
|
static GetInstance(compiler, context, debug = false, graphQLClient) {
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
const g = GetGlobalObjectStore();
|
|
32
|
+
if (g) {
|
|
33
|
+
if (!g[ComponentRegistryService._globalStoreKey]) {
|
|
34
|
+
g[ComponentRegistryService._globalStoreKey] = new ComponentRegistryService(compiler, context, debug, graphQLClient);
|
|
35
|
+
}
|
|
36
|
+
return g[ComponentRegistryService._globalStoreKey];
|
|
29
37
|
}
|
|
30
|
-
return ComponentRegistryService
|
|
38
|
+
return new ComponentRegistryService(compiler, context, debug, graphQLClient);
|
|
31
39
|
}
|
|
32
40
|
static getInstance(compiler, context, debug = false, graphQLClient) {
|
|
33
41
|
return this.GetInstance(compiler, context, debug, graphQLClient);
|
|
@@ -546,9 +554,13 @@ export class ComponentRegistryService {
|
|
|
546
554
|
return this.ForceClearAll();
|
|
547
555
|
}
|
|
548
556
|
static Reset() {
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
557
|
+
const g = GetGlobalObjectStore();
|
|
558
|
+
const existing = g ? g[ComponentRegistryService._globalStoreKey] : undefined;
|
|
559
|
+
if (existing) {
|
|
560
|
+
existing.forceClearAll();
|
|
561
|
+
if (g) {
|
|
562
|
+
delete g[ComponentRegistryService._globalStoreKey];
|
|
563
|
+
}
|
|
552
564
|
}
|
|
553
565
|
}
|
|
554
566
|
static reset() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-registry-service.js","sourceRoot":"","sources":["../../src/registry/component-registry-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Service for managing registry-based component loading with caching\n * @module @memberjunction/react-runtime/registry\n */\n\nimport { ComponentSpec, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { ComponentCompiler } from '../compiler';\nimport { RuntimeContext } from '../types';\nimport { \n RegistryProvider, \n RegistryComponentResponse,\n ComponentDependencyInfo,\n DependencyTree, \n RegistryComponentMetadata\n} from './registry-provider';\nimport { UserInfo, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { \n MJComponentEntity, \n MJComponentRegistryEntity,\n MJComponentDependencyEntity,\n MJComponentLibraryLinkEntity,\n ComponentMetadataEngine\n} from '@memberjunction/core-entities';\n\n// Type-only import for TypeScript - won't be included in UMD bundle\nimport type { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\n\n// Dynamic import of GraphQLComponentRegistryClient to avoid breaking UMD build\nlet GraphQLComponentRegistryClient: any;\n\n\n/**\n * Cached compiled component with metadata\n */\ninterface CachedCompiledComponent {\n component: (context: RuntimeContext, styles?: any, components?: Record<string, any>) => ComponentObject;\n metadata: RegistryComponentResponse['metadata'];\n compiledAt: Date;\n lastUsed: Date;\n useCount: number;\n specHash?: string; // SHA-256 hash of the spec used for compilation\n}\n\n/**\n * GraphQL client interface for registry operations\n */\nexport interface IComponentRegistryClient {\n GetRegistryComponent(params: {\n registryName: string;\n namespace: string;\n name: string;\n version?: string;\n hash?: string;\n }): Promise<ComponentSpec | null>;\n}\n\n/**\n * Service for managing component loading from registries with compilation caching\n */\nexport class ComponentRegistryService {\n private static instance: ComponentRegistryService | null = null;\n \n // Caches\n private compiledComponentCache = new Map<string, CachedCompiledComponent>();\n private componentReferences = new Map<string, Set<string>>();\n \n // Dependencies\n private compiler: ComponentCompiler;\n private runtimeContext: RuntimeContext;\n private componentEngine = ComponentMetadataEngine.Instance;\n private registryProviders = new Map<string, RegistryProvider>();\n private debug: boolean = false;\n private graphQLClient?: IComponentRegistryClient;\n private _provider: IMetadataProvider | null = null;\n\n /**\n * Optional metadata provider override. Callers should set\n * `instance.Provider = providerToUse` before invoking registry methods\n * in multi-provider contexts. Falls back to the global default provider when unset.\n */\n public get Provider(): IMetadataProvider {\n return this._provider ?? (new Metadata() as unknown as IMetadataProvider);\n }\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n \n private constructor(\n compiler: ComponentCompiler,\n runtimeContext: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ) {\n this.compiler = compiler;\n this.runtimeContext = runtimeContext;\n this.debug = debug;\n this.graphQLClient = graphQLClient;\n }\n \n /**\n * Get or create the singleton instance\n */\n static GetInstance(\n compiler: ComponentCompiler, \n context: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ): ComponentRegistryService {\n if (!ComponentRegistryService.instance) {\n ComponentRegistryService.instance = new ComponentRegistryService(compiler, context, debug, graphQLClient);\n }\n return ComponentRegistryService.instance;\n }\n\n /** @deprecated Use {@link GetInstance}. */\n static getInstance(\n compiler: ComponentCompiler, \n context: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ): ComponentRegistryService {\n return this.GetInstance(compiler, context, debug, graphQLClient);\n }\n \n /**\n * Set the GraphQL client for registry operations\n */\n SetGraphQLClient(client: IComponentRegistryClient): void {\n this.graphQLClient = client;\n if (this.debug) {\n console.log('โ
GraphQL client configured for component registry');\n }\n }\n\n /** @deprecated Use {@link SetGraphQLClient}. */\n setGraphQLClient(client: IComponentRegistryClient): void {\n return this.SetGraphQLClient(client);\n }\n \n /**\n * Cached GraphQL client instance created from Metadata.Provider\n */\n private cachedProviderClient: IComponentRegistryClient | null = null;\n \n /**\n * Get the GraphQL client, using the provided one or falling back to creating one with Metadata.Provider\n * @returns The GraphQL client if available\n */\n private async getGraphQLClient(): Promise<IComponentRegistryClient | null> {\n // If explicitly set, use that\n if (this.graphQLClient) {\n return this.graphQLClient;\n }\n \n // If we've already created one from the provider, reuse it\n if (this.cachedProviderClient) {\n return this.cachedProviderClient;\n }\n \n // Try to create GraphQLComponentRegistryClient with Metadata.Provider\n try {\n const provider = Metadata?.Provider;\n if (provider && (provider as any).ExecuteGQL !== undefined) {\n // Dynamically load GraphQLComponentRegistryClient if not already loaded\n if (!GraphQLComponentRegistryClient) {\n try {\n const graphqlModule = await import('@memberjunction/graphql-dataprovider');\n GraphQLComponentRegistryClient = graphqlModule.GraphQLComponentRegistryClient;\n } catch (importError) {\n if (this.debug) {\n console.log('โ ๏ธ [ComponentRegistryService] @memberjunction/graphql-dataprovider not available');\n }\n return null;\n }\n }\n \n // Create the client if we have the class\n if (GraphQLComponentRegistryClient) {\n try {\n const client = new GraphQLComponentRegistryClient(provider as GraphQLDataProvider);\n this.cachedProviderClient = client;\n if (this.debug) {\n console.log('๐ก [ComponentRegistryService] Created GraphQL client from active metadata provider');\n }\n return client;\n } catch (error) {\n if (this.debug) {\n console.log('โ ๏ธ [ComponentRegistryService] Failed to create GraphQL client:', error);\n }\n }\n }\n }\n } catch (error) {\n // Provider might not be available in all environments\n if (this.debug) {\n console.log('โ ๏ธ [ComponentRegistryService] Could not access metadata provider:', error);\n }\n }\n \n return null;\n }\n \n /**\n * Initialize the service with metadata\n */\n async Initialize(contextUser?: UserInfo): Promise<void> {\n // Initialize metadata engine\n await this.componentEngine.Config(false, contextUser);\n }\n\n /** @deprecated Use {@link Initialize}. */\n async initialize(contextUser?: UserInfo): Promise<void> {\n return this.Initialize(contextUser);\n }\n \n /**\n * Calculate SHA-256 hash of a component spec for cache comparison\n * Uses Web Crypto API which is available in modern browsers and Node.js 15+\n */\n private async calculateSpecHash(spec: ComponentSpec): Promise<string> {\n // Check for crypto.subtle availability\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error(\n 'Web Crypto API not available. This typically happens when running in an insecure context. ' +\n 'Please use HTTPS or localhost for development. ' +\n 'Note: crypto.subtle is available in Node.js 15+ and all modern browsers on secure contexts.'\n );\n }\n \n const specString = JSON.stringify(spec);\n const encoder = new TextEncoder();\n const data = encoder.encode(specString);\n \n // Calculate SHA-256 hash using Web Crypto API\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n \n // Convert ArrayBuffer to hex string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n \n return hashHex;\n }\n \n /**\n * Get a compiled component, using cache if available\n */\n async GetCompiledComponent(\n componentId: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<ComponentObject> {\n await this.Initialize(contextUser);\n \n // Find component in metadata via targeted query\n const component = await this.componentEngine.FindComponentByID(componentId, contextUser);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n\n const key = this.getComponentKey(component.Name, component.Namespace, component.Version, component.SourceRegistryID);\n \n // Check if already compiled and cached\n if (this.compiledComponentCache.has(key)) {\n const cached = this.compiledComponentCache.get(key)!;\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference if provided\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`โ
Reusing compiled component from cache: ${key} (use count: ${cached.useCount})`);\n }\n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Not in cache, need to load and compile\n if (this.debug) {\n console.log(`๐ Loading and compiling component: ${key}`);\n }\n \n // Get the component specification\n const spec = await this.GetComponentSpec(componentId, contextUser);\n \n // Compile the component\n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n let compilationResult;\n try {\n compilationResult = await this.compiler.compile({\n componentName: component.Name,\n componentCode: spec.code,\n libraries: spec.libraries,\n allLibraries\n });\n }\n catch (compileEx) {\n // log then throw\n console.error(`๐ด Error compiling component ${component.Name}`,compileEx);\n throw compileEx;\n }\n \n if (!compilationResult.success) {\n console.error(`๐ด Error compiling component ${component.Name}`, compilationResult, 'Code', spec.code);\n throw new Error(`Failed to compile component ${component.Name}: ${compilationResult.error}`);\n }\n \n // Cache the compiled component\n const metadata: RegistryComponentMetadata = {\n name: component.Name,\n namespace: component.Namespace || '',\n version: component.Version,\n description: component.Description || '',\n title: component.Title || undefined,\n type: component.Type || undefined,\n status: component.Status || undefined,\n properties: spec.properties,\n events: spec.events,\n libraries: spec.libraries,\n dependencies: spec.dependencies,\n sourceRegistryID: component.SourceRegistryID,\n isLocal: !component.SourceRegistryID\n };\n \n if (!compilationResult.component) {\n throw new Error(`Component compilation succeeded but no component returned`);\n }\n const compiledComponentFactory = compilationResult.component.factory;\n this.compiledComponentCache.set(key, {\n component: compiledComponentFactory,\n metadata,\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return compiledComponentFactory(this.runtimeContext);\n }\n\n /** @deprecated Use {@link GetCompiledComponent}. */\n async getCompiledComponent(\n componentId: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<ComponentObject> {\n return this.GetCompiledComponent(componentId, referenceId, contextUser);\n }\n \n /**\n * Get compiled component from external registry by registry name\n * This is used when spec.registry field is populated\n */\n async GetCompiledComponentFromRegistry(\n registryName: string,\n namespace: string,\n name: string,\n version: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<any> {\n await this.Initialize(contextUser);\n \n if (this.debug) {\n console.log(`๐ [ComponentRegistryService] Fetching from external registry: ${registryName}/${namespace}/${name}@${version}`);\n }\n \n // Find the registry by name in ComponentRegistries\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => r.Name === registryName && r.Status === 'Active'\n );\n \n if (!registry) {\n throw new Error(`Registry not found or inactive: ${registryName}`);\n }\n \n if (this.debug) {\n console.log(`โ
[ComponentRegistryService] Found registry: ${registry.Name} (ID: ${registry.ID})`);\n }\n \n // Get GraphQL client - use provided one or fallback to Metadata.Provider\n const graphQLClient = await this.getGraphQLClient();\n if (!graphQLClient) {\n throw new Error('GraphQL client not available for external registry fetching. No client provided and the active metadata provider is not a GraphQLDataProvider.');\n }\n \n // Check if we have a cached version first\n const key = `external:${registryName}:${namespace}:${name}:${version}`;\n const cached = this.compiledComponentCache.get(key);\n \n try {\n // Fetch component spec from external registry via MJServer\n // Pass cached hash if available for efficient caching\n const spec = await graphQLClient.GetRegistryComponent({\n registryName: registry.Name, // Pass registry name, not ID\n namespace,\n name,\n version,\n hash: cached?.specHash // Pass cached hash if available\n });\n \n // If null returned, it means not modified (304)\n if (!spec && cached?.specHash) {\n if (this.debug) {\n console.log(`โป๏ธ [ComponentRegistryService] Component not modified, using cached: ${key}`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n if (!spec) {\n throw new Error(`Component not found in registry ${registryName}: ${namespace}/${name}@${version}`);\n }\n \n if (this.debug) {\n console.log(`โ
[ComponentRegistryService] Fetched spec from external registry: ${spec.name}`);\n }\n \n // Calculate hash of the fetched spec\n const specHash = await this.calculateSpecHash(spec);\n \n // Check if hash matches cached version (shouldn't happen if server works correctly)\n if (cached && cached.specHash === specHash) {\n if (this.debug) {\n console.log(`โป๏ธ [ComponentRegistryService] Using cached compilation for: ${key} (hash match)`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Spec has changed or is new, need to compile\n if (cached && this.debug) {\n console.log(`๐ [ComponentRegistryService] Spec changed for: ${key}, recompiling (old hash: ${cached.specHash?.substring(0, 8)}..., new hash: ${specHash.substring(0, 8)}...)`);\n }\n \n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n // Compile the component\n const compilationResult = await this.compiler.compile({\n componentName: spec.name,\n componentCode: spec.code || '',\n allLibraries: allLibraries\n });\n \n if (!compilationResult.success || !compilationResult.component) {\n throw new Error(`Failed to compile component: ${compilationResult.error?.message || 'Unknown error'}`);\n }\n \n // Cache the compiled component with spec hash\n this.compiledComponentCache.set(key, {\n component: compilationResult.component.factory,\n metadata: {\n name: spec.name,\n namespace: spec.namespace || '',\n version: spec.version || '1.0.0',\n description: spec.description || '',\n type: spec.type,\n isLocal: false // This is from an external registry\n },\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1,\n specHash: specHash // Store the hash for future comparison\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`๐ฏ [ComponentRegistryService] Successfully compiled external component: ${spec.name}`);\n }\n \n // Call the factory function to get the ComponentObject\n return compilationResult.component.factory(this.runtimeContext);\n } catch (error) {\n console.error(`โ [ComponentRegistryService] Failed to fetch from external registry:`, error);\n throw error;\n }\n }\n\n /** @deprecated Use {@link GetCompiledComponentFromRegistry}. */\n async getCompiledComponentFromRegistry(\n registryName: string,\n namespace: string,\n name: string,\n version: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<any> {\n return this.GetCompiledComponentFromRegistry(registryName, namespace, name, version, referenceId, contextUser);\n }\n \n /**\n * Get component specification from database or external registry\n */\n async GetComponentSpec(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentSpec> {\n await this.Initialize(contextUser);\n \n const component = await this.componentEngine.FindComponentByID(componentId, contextUser);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n\n if (!component.SourceRegistryID) {\n // LOCAL: Use specification from database\n if (!component.Specification) {\n throw new Error(`Local component ${component.Name} has no specification`);\n }\n return JSON.parse(component.Specification);\n }\n \n // EXTERNAL: Check if we have a cached version\n if (component.Specification && component.LastSyncedAt) {\n // For now, always use cached version (no expiration)\n if (this.debug) {\n console.log(`Using cached external component: ${component.Name} (synced: ${component.LastSyncedAt})`);\n }\n return JSON.parse(component.Specification);\n }\n \n // Need to fetch from external registry\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => UUIDsEqual(r.ID, component.SourceRegistryID)\n );\n \n if (!registry) {\n throw new Error(`Registry not found: ${component.SourceRegistryID}`);\n }\n \n // Try GraphQL client first if available\n let spec: ComponentSpec;\n \n if (this.graphQLClient) {\n if (this.debug) {\n console.log(`Fetching from registry via GraphQL: ${component.Name}`);\n }\n \n const result = await this.graphQLClient.GetRegistryComponent({\n registryName: registry.Name,\n namespace: component.Namespace || '',\n name: component.Name,\n version: component.Version\n });\n \n if (!result) {\n throw new Error(`Component not found in registry: ${component.Name}`);\n }\n \n spec = result;\n } else {\n // Fallback to direct HTTP if no GraphQL client\n spec = await this.fetchFromExternalRegistry(\n registry.URI || '',\n component.Name,\n component.Namespace || '',\n component.Version,\n this.getRegistryApiKey(registry.ID)\n );\n }\n \n // Store in local database for future use\n await this.cacheExternalComponent(componentId, spec, contextUser);\n \n return spec;\n }\n\n /** @deprecated Use {@link GetComponentSpec}. */\n async getComponentSpec(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentSpec> {\n return this.GetComponentSpec(componentId, contextUser);\n }\n \n /**\n * Fetch component from external registry via HTTP\n */\n private async fetchFromExternalRegistry(\n uri: string,\n name: string,\n namespace: string,\n version: string,\n apiKey?: string\n ): Promise<ComponentSpec> {\n const url = `${uri}/components/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/${version}`;\n \n const headers: HeadersInit = {\n 'Accept': 'application/json'\n };\n \n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n \n if (this.debug) {\n console.log(`Fetching from external registry: ${url}`);\n }\n \n const response = await fetch(url, { headers });\n\n if (!response.ok) {\n await response.body?.cancel().catch(() => { /* nothing to drain */ });\n throw new Error(`Registry fetch failed: ${response.status} ${response.statusText}`);\n }\n \n const spec = await response.json() as ComponentSpec;\n return spec;\n }\n \n /**\n * Cache an external component in the local database\n */\n private async cacheExternalComponent(\n componentId: string,\n spec: ComponentSpec,\n contextUser?: UserInfo\n ): Promise<void> {\n // Get the actual entity object to save\n const md = this.Provider;\n const componentEntity = await md.GetEntityObject<MJComponentEntity>('MJ: Components', contextUser);\n \n // Load the existing component\n if (!await componentEntity.Load(componentId)) {\n throw new Error(`Failed to load component entity: ${componentId}`);\n }\n \n // Update with fetched specification and all fields from spec\n componentEntity.Specification = JSON.stringify(spec);\n componentEntity.LastSyncedAt = new Date();\n \n // Set ReplicatedAt only on first fetch\n if (!componentEntity.ReplicatedAt) {\n componentEntity.ReplicatedAt = new Date();\n }\n \n // Update all fields from the spec with strong typing\n if (spec.name) {\n componentEntity.Name = spec.name;\n }\n \n if (spec.namespace) {\n componentEntity.Namespace = spec.namespace;\n }\n \n if (spec.version) {\n componentEntity.Version = spec.version;\n }\n \n if (spec.title) {\n componentEntity.Title = spec.title;\n }\n \n if (spec.description) {\n componentEntity.Description = spec.description;\n }\n \n if (spec.type) {\n // Map spec type to entity type (entity has specific enum values)\n const typeMap: Record<string, MJComponentEntity['Type']> = {\n 'report': 'Report',\n 'dashboard': 'Dashboard',\n 'form': 'Form',\n 'table': 'Table',\n 'chart': 'Chart',\n 'navigation': 'Navigation',\n 'search': 'Search',\n 'widget': 'Widget',\n 'utility': 'Utility',\n 'other': 'Other'\n };\n \n const mappedType = typeMap[spec.type.toLowerCase()];\n if (mappedType) {\n componentEntity.Type = mappedType;\n }\n }\n \n if (spec.functionalRequirements) {\n componentEntity.FunctionalRequirements = spec.functionalRequirements;\n }\n \n if (spec.technicalDesign) {\n componentEntity.TechnicalDesign = spec.technicalDesign;\n }\n \n // Save back to database\n const result = await componentEntity.Save();\n if (!result) {\n throw new Error(`Failed to save cached component: ${componentEntity.Name}\\n${componentEntity.LatestResult?.CompleteMessage || 'Unknown error'}`);\n }\n \n if (this.debug) {\n console.log(`Cached external component: ${componentEntity.Name} at ${componentEntity.LastSyncedAt}`);\n }\n \n // Refresh metadata cache after saving\n await this.componentEngine.Config(true, contextUser);\n }\n \n /**\n * Load component dependencies from database\n */\n async LoadDependencies(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentDependencyInfo[]> {\n await this.Initialize(contextUser);\n \n // Get dependencies from metadata cache\n const dependencies = this.componentEngine.ComponentDependencies?.filter(\n d => UUIDsEqual(d.ComponentID, componentId)\n ) || [];\n \n const result: ComponentDependencyInfo[] = [];\n \n for (const dep of dependencies) {\n // Find the dependency component\n const depComponent = await this.componentEngine.FindComponentByID(dep.DependencyComponentID, contextUser);\n\n if (depComponent) {\n result.push({\n name: depComponent.Name,\n namespace: depComponent.Namespace || '',\n version: depComponent.Version,\n isRequired: true,\n location: depComponent.SourceRegistryID ? 'registry' : 'embedded',\n sourceRegistryID: depComponent.SourceRegistryID\n });\n }\n }\n \n return result;\n }\n\n /** @deprecated Use {@link LoadDependencies}. */\n async loadDependencies(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentDependencyInfo[]> {\n return this.LoadDependencies(componentId, contextUser);\n }\n \n /**\n * Resolve full dependency tree for a component\n */\n async ResolveDependencyTree(\n componentId: string,\n contextUser?: UserInfo,\n visited = new Set<string>()\n ): Promise<DependencyTree> {\n if (visited.has(componentId)) {\n return { \n componentId, \n circular: true \n };\n }\n visited.add(componentId);\n \n await this.Initialize(contextUser);\n \n const component = await this.componentEngine.FindComponentByID(componentId, contextUser);\n if (!component) {\n return { componentId, dependencies: [] };\n }\n\n // Get direct dependencies\n const directDeps = await this.LoadDependencies(componentId, contextUser);\n\n // Recursively resolve each dependency\n const dependencies: DependencyTree[] = [];\n for (const dep of directDeps) {\n const depComponent = await this.componentEngine.FindComponent(dep.name, dep.namespace, undefined, contextUser);\n\n if (depComponent) {\n const subTree = await this.ResolveDependencyTree(\n depComponent.ID,\n contextUser,\n visited\n );\n dependencies.push(subTree);\n }\n }\n \n return {\n componentId,\n name: component.Name,\n namespace: component.Namespace || undefined,\n version: component.Version,\n dependencies,\n totalCount: dependencies.reduce((sum, d) => sum + (d.totalCount || 1), 1)\n };\n }\n\n /** @deprecated Use {@link ResolveDependencyTree}. */\n async resolveDependencyTree(\n componentId: string,\n contextUser?: UserInfo,\n visited = new Set<string>()\n ): Promise<DependencyTree> {\n return this.ResolveDependencyTree(componentId, contextUser, visited);\n }\n \n /**\n * Get components to load in dependency order\n */\n async GetComponentsToLoad(\n rootComponentId: string,\n contextUser?: UserInfo\n ): Promise<string[]> {\n const tree = await this.ResolveDependencyTree(rootComponentId, contextUser);\n \n // Flatten tree in dependency order (depth-first)\n const ordered: string[] = [];\n const processNode = (node: DependencyTree) => {\n if (node.dependencies) {\n node.dependencies.forEach(processNode);\n }\n if (!ordered.includes(node.componentId)) {\n ordered.push(node.componentId);\n }\n };\n processNode(tree);\n \n return ordered;\n }\n\n /** @deprecated Use {@link GetComponentsToLoad}. */\n async getComponentsToLoad(\n rootComponentId: string,\n contextUser?: UserInfo\n ): Promise<string[]> {\n return this.GetComponentsToLoad(rootComponentId, contextUser);\n }\n \n /**\n * Add a reference to a component\n */\n private addComponentReference(componentKey: string, referenceId: string): void {\n if (!this.componentReferences.has(componentKey)) {\n this.componentReferences.set(componentKey, new Set());\n }\n this.componentReferences.get(componentKey)!.add(referenceId);\n }\n \n /**\n * Remove a reference to a component\n */\n RemoveComponentReference(componentKey: string, referenceId: string): void {\n const refs = this.componentReferences.get(componentKey);\n if (refs) {\n refs.delete(referenceId);\n \n // If no more references and cache cleanup is enabled\n if (refs.size === 0) {\n this.considerCacheEviction(componentKey);\n }\n }\n }\n\n /** @deprecated Use {@link RemoveComponentReference}. */\n removeComponentReference(componentKey: string, referenceId: string): void {\n return this.RemoveComponentReference(componentKey, referenceId);\n }\n \n /**\n * Consider evicting a component from cache\n */\n private considerCacheEviction(componentKey: string): void {\n const cached = this.compiledComponentCache.get(componentKey);\n if (cached) {\n const timeSinceLastUse = Date.now() - cached.lastUsed.getTime();\n const evictionThreshold = 5 * 60 * 1000; // 5 minutes\n \n if (timeSinceLastUse > evictionThreshold) {\n if (this.debug) {\n console.log(`๐๏ธ Evicting unused component from cache: ${componentKey}`);\n }\n this.compiledComponentCache.delete(componentKey);\n }\n }\n }\n \n /**\n * Get API key for a registry from secure configuration\n * @param registryId - Registry ID\n * @returns API key or undefined\n */\n private getRegistryApiKey(registryId: string): string | undefined {\n // API keys should be stored in environment variables or secure configuration\n // Format: REGISTRY_API_KEY_{registryId} or similar\n // This is a placeholder - actual implementation would depend on the security infrastructure\n const envKey = `REGISTRY_API_KEY_${registryId.replace(/-/g, '_').toUpperCase()}`;\n return process.env[envKey];\n }\n \n /**\n * Get cache statistics\n */\n GetCacheStats(): {\n compiledComponents: number;\n totalUseCount: number;\n memoryEstimate: string;\n } {\n let totalUseCount = 0;\n this.compiledComponentCache.forEach(cached => {\n totalUseCount += cached.useCount;\n });\n \n return {\n compiledComponents: this.compiledComponentCache.size,\n totalUseCount,\n memoryEstimate: `~${(this.compiledComponentCache.size * 50)}KB` // Rough estimate\n };\n }\n\n /** @deprecated Use {@link GetCacheStats}. */\n getCacheStats(): {\n compiledComponents: number;\n totalUseCount: number;\n memoryEstimate: string;\n } {\n return this.GetCacheStats();\n }\n \n /**\n * Clear all caches\n */\n ClearCache(): void {\n if (this.debug) {\n console.log('๐งน Clearing all component caches');\n }\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n }\n\n /** @deprecated Use {@link ClearCache}. */\n clearCache(): void {\n return this.ClearCache();\n }\n\n /**\n * Force clear all compiled components\n * Used for Component Studio to ensure fresh loads\n */\n ForceClearAll(): void {\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n console.log('๐งน Component cache force cleared');\n }\n\n /** @deprecated Use {@link ForceClearAll}. */\n forceClearAll(): void {\n return this.ForceClearAll();\n }\n\n /**\n * Reset the singleton instance\n * Forces new instance creation on next access\n */\n static Reset(): void {\n if (ComponentRegistryService.instance) {\n ComponentRegistryService.instance.forceClearAll();\n ComponentRegistryService.instance = null;\n }\n }\n\n /** @deprecated Use {@link Reset}. */\n static reset(): void {\n return this.Reset();\n }\n \n /**\n * Generate a cache key for a component\n */\n private getComponentKey(\n name: string, \n namespace: string | null | undefined, \n version: string, \n sourceRegistryId: string | null | undefined\n ): string {\n const registryPart = sourceRegistryId || 'local';\n const namespacePart = namespace || 'global';\n return `${registryPart}/${namespacePart}/${name}@${version}`;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"component-registry-service.js","sourceRoot":"","sources":["../../src/registry/component-registry-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Service for managing registry-based component loading with caching\n * @module @memberjunction/react-runtime/registry\n */\n\nimport { ComponentSpec, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { ComponentCompiler } from '../compiler';\nimport { RuntimeContext } from '../types';\nimport { \n RegistryProvider, \n RegistryComponentResponse,\n ComponentDependencyInfo,\n DependencyTree, \n RegistryComponentMetadata\n} from './registry-provider';\nimport { UserInfo, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport { GetGlobalObjectStore, UUIDsEqual } from '@memberjunction/global';\nimport { \n MJComponentEntity, \n MJComponentRegistryEntity,\n MJComponentDependencyEntity,\n MJComponentLibraryLinkEntity,\n ComponentMetadataEngine\n} from '@memberjunction/core-entities';\n\n// Type-only import for TypeScript - won't be included in UMD bundle\nimport type { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\n\n// Dynamic import of GraphQLComponentRegistryClient to avoid breaking UMD build\nlet GraphQLComponentRegistryClient: any;\n\n\n/**\n * Cached compiled component with metadata\n */\ninterface CachedCompiledComponent {\n component: (context: RuntimeContext, styles?: any, components?: Record<string, any>) => ComponentObject;\n metadata: RegistryComponentResponse['metadata'];\n compiledAt: Date;\n lastUsed: Date;\n useCount: number;\n specHash?: string; // SHA-256 hash of the spec used for compilation\n}\n\n/**\n * GraphQL client interface for registry operations\n */\nexport interface IComponentRegistryClient {\n GetRegistryComponent(params: {\n registryName: string;\n namespace: string;\n name: string;\n version?: string;\n hash?: string;\n }): Promise<ComponentSpec | null>;\n}\n\n/**\n * Service for managing component loading from registries with compilation caching\n */\nexport class ComponentRegistryService {\n private static readonly _globalStoreKey = '___SINGLETON__ComponentRegistryService';\n \n // Caches\n private compiledComponentCache = new Map<string, CachedCompiledComponent>();\n private componentReferences = new Map<string, Set<string>>();\n \n // Dependencies\n private compiler: ComponentCompiler;\n private runtimeContext: RuntimeContext;\n private componentEngine = ComponentMetadataEngine.Instance;\n private registryProviders = new Map<string, RegistryProvider>();\n private debug: boolean = false;\n private graphQLClient?: IComponentRegistryClient;\n private _provider: IMetadataProvider | null = null;\n\n /**\n * Optional metadata provider override. Callers should set\n * `instance.Provider = providerToUse` before invoking registry methods\n * in multi-provider contexts. Falls back to the global default provider when unset.\n */\n public get Provider(): IMetadataProvider {\n return this._provider ?? (new Metadata() as unknown as IMetadataProvider);\n }\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n \n private constructor(\n compiler: ComponentCompiler,\n runtimeContext: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ) {\n this.compiler = compiler;\n this.runtimeContext = runtimeContext;\n this.debug = debug;\n this.graphQLClient = graphQLClient;\n }\n\n /**\n * Returns the initialized singleton instance from the Global Object Store, or undefined if not yet created.\n */\n public static get Instance(): ComponentRegistryService | undefined {\n const g = GetGlobalObjectStore();\n return g ? (g[ComponentRegistryService._globalStoreKey] as ComponentRegistryService | undefined) : undefined;\n }\n \n /**\n * Get or create the singleton instance, backed by the Global Object Store so bundler duplication\n * across execution paths cannot split the cached registry.\n */\n static GetInstance(\n compiler: ComponentCompiler, \n context: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ): ComponentRegistryService {\n const g = GetGlobalObjectStore();\n if (g) {\n if (!g[ComponentRegistryService._globalStoreKey]) {\n g[ComponentRegistryService._globalStoreKey] = new ComponentRegistryService(compiler, context, debug, graphQLClient);\n }\n return g[ComponentRegistryService._globalStoreKey] as ComponentRegistryService;\n }\n return new ComponentRegistryService(compiler, context, debug, graphQLClient);\n }\n\n /** @deprecated Use {@link GetInstance}. */\n static getInstance(\n compiler: ComponentCompiler, \n context: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ): ComponentRegistryService {\n return this.GetInstance(compiler, context, debug, graphQLClient);\n }\n \n /**\n * Set the GraphQL client for registry operations\n */\n SetGraphQLClient(client: IComponentRegistryClient): void {\n this.graphQLClient = client;\n if (this.debug) {\n console.log('โ
GraphQL client configured for component registry');\n }\n }\n\n /** @deprecated Use {@link SetGraphQLClient}. */\n setGraphQLClient(client: IComponentRegistryClient): void {\n return this.SetGraphQLClient(client);\n }\n \n /**\n * Cached GraphQL client instance created from Metadata.Provider\n */\n private cachedProviderClient: IComponentRegistryClient | null = null;\n \n /**\n * Get the GraphQL client, using the provided one or falling back to creating one with Metadata.Provider\n * @returns The GraphQL client if available\n */\n private async getGraphQLClient(): Promise<IComponentRegistryClient | null> {\n // If explicitly set, use that\n if (this.graphQLClient) {\n return this.graphQLClient;\n }\n \n // If we've already created one from the provider, reuse it\n if (this.cachedProviderClient) {\n return this.cachedProviderClient;\n }\n \n // Try to create GraphQLComponentRegistryClient with Metadata.Provider\n try {\n const provider = Metadata?.Provider;\n if (provider && (provider as any).ExecuteGQL !== undefined) {\n // Dynamically load GraphQLComponentRegistryClient if not already loaded\n if (!GraphQLComponentRegistryClient) {\n try {\n const graphqlModule = await import('@memberjunction/graphql-dataprovider');\n GraphQLComponentRegistryClient = graphqlModule.GraphQLComponentRegistryClient;\n } catch (importError) {\n if (this.debug) {\n console.log('โ ๏ธ [ComponentRegistryService] @memberjunction/graphql-dataprovider not available');\n }\n return null;\n }\n }\n \n // Create the client if we have the class\n if (GraphQLComponentRegistryClient) {\n try {\n const client = new GraphQLComponentRegistryClient(provider as GraphQLDataProvider);\n this.cachedProviderClient = client;\n if (this.debug) {\n console.log('๐ก [ComponentRegistryService] Created GraphQL client from active metadata provider');\n }\n return client;\n } catch (error) {\n if (this.debug) {\n console.log('โ ๏ธ [ComponentRegistryService] Failed to create GraphQL client:', error);\n }\n }\n }\n }\n } catch (error) {\n // Provider might not be available in all environments\n if (this.debug) {\n console.log('โ ๏ธ [ComponentRegistryService] Could not access metadata provider:', error);\n }\n }\n \n return null;\n }\n \n /**\n * Initialize the service with metadata\n */\n async Initialize(contextUser?: UserInfo): Promise<void> {\n // Initialize metadata engine\n await this.componentEngine.Config(false, contextUser);\n }\n\n /** @deprecated Use {@link Initialize}. */\n async initialize(contextUser?: UserInfo): Promise<void> {\n return this.Initialize(contextUser);\n }\n \n /**\n * Calculate SHA-256 hash of a component spec for cache comparison\n * Uses Web Crypto API which is available in modern browsers and Node.js 15+\n */\n private async calculateSpecHash(spec: ComponentSpec): Promise<string> {\n // Check for crypto.subtle availability\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error(\n 'Web Crypto API not available. This typically happens when running in an insecure context. ' +\n 'Please use HTTPS or localhost for development. ' +\n 'Note: crypto.subtle is available in Node.js 15+ and all modern browsers on secure contexts.'\n );\n }\n \n const specString = JSON.stringify(spec);\n const encoder = new TextEncoder();\n const data = encoder.encode(specString);\n \n // Calculate SHA-256 hash using Web Crypto API\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n \n // Convert ArrayBuffer to hex string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n \n return hashHex;\n }\n \n /**\n * Get a compiled component, using cache if available\n */\n async GetCompiledComponent(\n componentId: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<ComponentObject> {\n await this.Initialize(contextUser);\n \n // Find component in metadata via targeted query\n const component = await this.componentEngine.FindComponentByID(componentId, contextUser);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n\n const key = this.getComponentKey(component.Name, component.Namespace, component.Version, component.SourceRegistryID);\n \n // Check if already compiled and cached\n if (this.compiledComponentCache.has(key)) {\n const cached = this.compiledComponentCache.get(key)!;\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference if provided\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`โ
Reusing compiled component from cache: ${key} (use count: ${cached.useCount})`);\n }\n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Not in cache, need to load and compile\n if (this.debug) {\n console.log(`๐ Loading and compiling component: ${key}`);\n }\n \n // Get the component specification\n const spec = await this.GetComponentSpec(componentId, contextUser);\n \n // Compile the component\n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n let compilationResult;\n try {\n compilationResult = await this.compiler.compile({\n componentName: component.Name,\n componentCode: spec.code,\n libraries: spec.libraries,\n allLibraries\n });\n }\n catch (compileEx) {\n // log then throw\n console.error(`๐ด Error compiling component ${component.Name}`,compileEx);\n throw compileEx;\n }\n \n if (!compilationResult.success) {\n console.error(`๐ด Error compiling component ${component.Name}`, compilationResult, 'Code', spec.code);\n throw new Error(`Failed to compile component ${component.Name}: ${compilationResult.error}`);\n }\n \n // Cache the compiled component\n const metadata: RegistryComponentMetadata = {\n name: component.Name,\n namespace: component.Namespace || '',\n version: component.Version,\n description: component.Description || '',\n title: component.Title || undefined,\n type: component.Type || undefined,\n status: component.Status || undefined,\n properties: spec.properties,\n events: spec.events,\n libraries: spec.libraries,\n dependencies: spec.dependencies,\n sourceRegistryID: component.SourceRegistryID,\n isLocal: !component.SourceRegistryID\n };\n \n if (!compilationResult.component) {\n throw new Error(`Component compilation succeeded but no component returned`);\n }\n const compiledComponentFactory = compilationResult.component.factory;\n this.compiledComponentCache.set(key, {\n component: compiledComponentFactory,\n metadata,\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return compiledComponentFactory(this.runtimeContext);\n }\n\n /** @deprecated Use {@link GetCompiledComponent}. */\n async getCompiledComponent(\n componentId: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<ComponentObject> {\n return this.GetCompiledComponent(componentId, referenceId, contextUser);\n }\n \n /**\n * Get compiled component from external registry by registry name\n * This is used when spec.registry field is populated\n */\n async GetCompiledComponentFromRegistry(\n registryName: string,\n namespace: string,\n name: string,\n version: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<any> {\n await this.Initialize(contextUser);\n \n if (this.debug) {\n console.log(`๐ [ComponentRegistryService] Fetching from external registry: ${registryName}/${namespace}/${name}@${version}`);\n }\n \n // Find the registry by name in ComponentRegistries\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => r.Name === registryName && r.Status === 'Active'\n );\n \n if (!registry) {\n throw new Error(`Registry not found or inactive: ${registryName}`);\n }\n \n if (this.debug) {\n console.log(`โ
[ComponentRegistryService] Found registry: ${registry.Name} (ID: ${registry.ID})`);\n }\n \n // Get GraphQL client - use provided one or fallback to Metadata.Provider\n const graphQLClient = await this.getGraphQLClient();\n if (!graphQLClient) {\n throw new Error('GraphQL client not available for external registry fetching. No client provided and the active metadata provider is not a GraphQLDataProvider.');\n }\n \n // Check if we have a cached version first\n const key = `external:${registryName}:${namespace}:${name}:${version}`;\n const cached = this.compiledComponentCache.get(key);\n \n try {\n // Fetch component spec from external registry via MJServer\n // Pass cached hash if available for efficient caching\n const spec = await graphQLClient.GetRegistryComponent({\n registryName: registry.Name, // Pass registry name, not ID\n namespace,\n name,\n version,\n hash: cached?.specHash // Pass cached hash if available\n });\n \n // If null returned, it means not modified (304)\n if (!spec && cached?.specHash) {\n if (this.debug) {\n console.log(`โป๏ธ [ComponentRegistryService] Component not modified, using cached: ${key}`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n if (!spec) {\n throw new Error(`Component not found in registry ${registryName}: ${namespace}/${name}@${version}`);\n }\n \n if (this.debug) {\n console.log(`โ
[ComponentRegistryService] Fetched spec from external registry: ${spec.name}`);\n }\n \n // Calculate hash of the fetched spec\n const specHash = await this.calculateSpecHash(spec);\n \n // Check if hash matches cached version (shouldn't happen if server works correctly)\n if (cached && cached.specHash === specHash) {\n if (this.debug) {\n console.log(`โป๏ธ [ComponentRegistryService] Using cached compilation for: ${key} (hash match)`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Spec has changed or is new, need to compile\n if (cached && this.debug) {\n console.log(`๐ [ComponentRegistryService] Spec changed for: ${key}, recompiling (old hash: ${cached.specHash?.substring(0, 8)}..., new hash: ${specHash.substring(0, 8)}...)`);\n }\n \n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n // Compile the component\n const compilationResult = await this.compiler.compile({\n componentName: spec.name,\n componentCode: spec.code || '',\n allLibraries: allLibraries\n });\n \n if (!compilationResult.success || !compilationResult.component) {\n throw new Error(`Failed to compile component: ${compilationResult.error?.message || 'Unknown error'}`);\n }\n \n // Cache the compiled component with spec hash\n this.compiledComponentCache.set(key, {\n component: compilationResult.component.factory,\n metadata: {\n name: spec.name,\n namespace: spec.namespace || '',\n version: spec.version || '1.0.0',\n description: spec.description || '',\n type: spec.type,\n isLocal: false // This is from an external registry\n },\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1,\n specHash: specHash // Store the hash for future comparison\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`๐ฏ [ComponentRegistryService] Successfully compiled external component: ${spec.name}`);\n }\n \n // Call the factory function to get the ComponentObject\n return compilationResult.component.factory(this.runtimeContext);\n } catch (error) {\n console.error(`โ [ComponentRegistryService] Failed to fetch from external registry:`, error);\n throw error;\n }\n }\n\n /** @deprecated Use {@link GetCompiledComponentFromRegistry}. */\n async getCompiledComponentFromRegistry(\n registryName: string,\n namespace: string,\n name: string,\n version: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<any> {\n return this.GetCompiledComponentFromRegistry(registryName, namespace, name, version, referenceId, contextUser);\n }\n \n /**\n * Get component specification from database or external registry\n */\n async GetComponentSpec(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentSpec> {\n await this.Initialize(contextUser);\n \n const component = await this.componentEngine.FindComponentByID(componentId, contextUser);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n\n if (!component.SourceRegistryID) {\n // LOCAL: Use specification from database\n if (!component.Specification) {\n throw new Error(`Local component ${component.Name} has no specification`);\n }\n return JSON.parse(component.Specification);\n }\n \n // EXTERNAL: Check if we have a cached version\n if (component.Specification && component.LastSyncedAt) {\n // For now, always use cached version (no expiration)\n if (this.debug) {\n console.log(`Using cached external component: ${component.Name} (synced: ${component.LastSyncedAt})`);\n }\n return JSON.parse(component.Specification);\n }\n \n // Need to fetch from external registry\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => UUIDsEqual(r.ID, component.SourceRegistryID)\n );\n \n if (!registry) {\n throw new Error(`Registry not found: ${component.SourceRegistryID}`);\n }\n \n // Try GraphQL client first if available\n let spec: ComponentSpec;\n \n if (this.graphQLClient) {\n if (this.debug) {\n console.log(`Fetching from registry via GraphQL: ${component.Name}`);\n }\n \n const result = await this.graphQLClient.GetRegistryComponent({\n registryName: registry.Name,\n namespace: component.Namespace || '',\n name: component.Name,\n version: component.Version\n });\n \n if (!result) {\n throw new Error(`Component not found in registry: ${component.Name}`);\n }\n \n spec = result;\n } else {\n // Fallback to direct HTTP if no GraphQL client\n spec = await this.fetchFromExternalRegistry(\n registry.URI || '',\n component.Name,\n component.Namespace || '',\n component.Version,\n this.getRegistryApiKey(registry.ID)\n );\n }\n \n // Store in local database for future use\n await this.cacheExternalComponent(componentId, spec, contextUser);\n \n return spec;\n }\n\n /** @deprecated Use {@link GetComponentSpec}. */\n async getComponentSpec(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentSpec> {\n return this.GetComponentSpec(componentId, contextUser);\n }\n \n /**\n * Fetch component from external registry via HTTP\n */\n private async fetchFromExternalRegistry(\n uri: string,\n name: string,\n namespace: string,\n version: string,\n apiKey?: string\n ): Promise<ComponentSpec> {\n const url = `${uri}/components/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/${version}`;\n \n const headers: HeadersInit = {\n 'Accept': 'application/json'\n };\n \n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n \n if (this.debug) {\n console.log(`Fetching from external registry: ${url}`);\n }\n \n const response = await fetch(url, { headers });\n\n if (!response.ok) {\n await response.body?.cancel().catch(() => { /* nothing to drain */ });\n throw new Error(`Registry fetch failed: ${response.status} ${response.statusText}`);\n }\n \n const spec = await response.json() as ComponentSpec;\n return spec;\n }\n \n /**\n * Cache an external component in the local database\n */\n private async cacheExternalComponent(\n componentId: string,\n spec: ComponentSpec,\n contextUser?: UserInfo\n ): Promise<void> {\n // Get the actual entity object to save\n const md = this.Provider;\n const componentEntity = await md.GetEntityObject<MJComponentEntity>('MJ: Components', contextUser);\n \n // Load the existing component\n if (!await componentEntity.Load(componentId)) {\n throw new Error(`Failed to load component entity: ${componentId}`);\n }\n \n // Update with fetched specification and all fields from spec\n componentEntity.Specification = JSON.stringify(spec);\n componentEntity.LastSyncedAt = new Date();\n \n // Set ReplicatedAt only on first fetch\n if (!componentEntity.ReplicatedAt) {\n componentEntity.ReplicatedAt = new Date();\n }\n \n // Update all fields from the spec with strong typing\n if (spec.name) {\n componentEntity.Name = spec.name;\n }\n \n if (spec.namespace) {\n componentEntity.Namespace = spec.namespace;\n }\n \n if (spec.version) {\n componentEntity.Version = spec.version;\n }\n \n if (spec.title) {\n componentEntity.Title = spec.title;\n }\n \n if (spec.description) {\n componentEntity.Description = spec.description;\n }\n \n if (spec.type) {\n // Map spec type to entity type (entity has specific enum values)\n const typeMap: Record<string, MJComponentEntity['Type']> = {\n 'report': 'Report',\n 'dashboard': 'Dashboard',\n 'form': 'Form',\n 'table': 'Table',\n 'chart': 'Chart',\n 'navigation': 'Navigation',\n 'search': 'Search',\n 'widget': 'Widget',\n 'utility': 'Utility',\n 'other': 'Other'\n };\n \n const mappedType = typeMap[spec.type.toLowerCase()];\n if (mappedType) {\n componentEntity.Type = mappedType;\n }\n }\n \n if (spec.functionalRequirements) {\n componentEntity.FunctionalRequirements = spec.functionalRequirements;\n }\n \n if (spec.technicalDesign) {\n componentEntity.TechnicalDesign = spec.technicalDesign;\n }\n \n // Save back to database\n const result = await componentEntity.Save();\n if (!result) {\n throw new Error(`Failed to save cached component: ${componentEntity.Name}\\n${componentEntity.LatestResult?.CompleteMessage || 'Unknown error'}`);\n }\n \n if (this.debug) {\n console.log(`Cached external component: ${componentEntity.Name} at ${componentEntity.LastSyncedAt}`);\n }\n \n // Refresh metadata cache after saving\n await this.componentEngine.Config(true, contextUser);\n }\n \n /**\n * Load component dependencies from database\n */\n async LoadDependencies(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentDependencyInfo[]> {\n await this.Initialize(contextUser);\n \n // Get dependencies from metadata cache\n const dependencies = this.componentEngine.ComponentDependencies?.filter(\n d => UUIDsEqual(d.ComponentID, componentId)\n ) || [];\n \n const result: ComponentDependencyInfo[] = [];\n \n for (const dep of dependencies) {\n // Find the dependency component\n const depComponent = await this.componentEngine.FindComponentByID(dep.DependencyComponentID, contextUser);\n\n if (depComponent) {\n result.push({\n name: depComponent.Name,\n namespace: depComponent.Namespace || '',\n version: depComponent.Version,\n isRequired: true,\n location: depComponent.SourceRegistryID ? 'registry' : 'embedded',\n sourceRegistryID: depComponent.SourceRegistryID\n });\n }\n }\n \n return result;\n }\n\n /** @deprecated Use {@link LoadDependencies}. */\n async loadDependencies(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentDependencyInfo[]> {\n return this.LoadDependencies(componentId, contextUser);\n }\n \n /**\n * Resolve full dependency tree for a component\n */\n async ResolveDependencyTree(\n componentId: string,\n contextUser?: UserInfo,\n visited = new Set<string>()\n ): Promise<DependencyTree> {\n if (visited.has(componentId)) {\n return { \n componentId, \n circular: true \n };\n }\n visited.add(componentId);\n \n await this.Initialize(contextUser);\n \n const component = await this.componentEngine.FindComponentByID(componentId, contextUser);\n if (!component) {\n return { componentId, dependencies: [] };\n }\n\n // Get direct dependencies\n const directDeps = await this.LoadDependencies(componentId, contextUser);\n\n // Recursively resolve each dependency\n const dependencies: DependencyTree[] = [];\n for (const dep of directDeps) {\n const depComponent = await this.componentEngine.FindComponent(dep.name, dep.namespace, undefined, contextUser);\n\n if (depComponent) {\n const subTree = await this.ResolveDependencyTree(\n depComponent.ID,\n contextUser,\n visited\n );\n dependencies.push(subTree);\n }\n }\n \n return {\n componentId,\n name: component.Name,\n namespace: component.Namespace || undefined,\n version: component.Version,\n dependencies,\n totalCount: dependencies.reduce((sum, d) => sum + (d.totalCount || 1), 1)\n };\n }\n\n /** @deprecated Use {@link ResolveDependencyTree}. */\n async resolveDependencyTree(\n componentId: string,\n contextUser?: UserInfo,\n visited = new Set<string>()\n ): Promise<DependencyTree> {\n return this.ResolveDependencyTree(componentId, contextUser, visited);\n }\n \n /**\n * Get components to load in dependency order\n */\n async GetComponentsToLoad(\n rootComponentId: string,\n contextUser?: UserInfo\n ): Promise<string[]> {\n const tree = await this.ResolveDependencyTree(rootComponentId, contextUser);\n \n // Flatten tree in dependency order (depth-first)\n const ordered: string[] = [];\n const processNode = (node: DependencyTree) => {\n if (node.dependencies) {\n node.dependencies.forEach(processNode);\n }\n if (!ordered.includes(node.componentId)) {\n ordered.push(node.componentId);\n }\n };\n processNode(tree);\n \n return ordered;\n }\n\n /** @deprecated Use {@link GetComponentsToLoad}. */\n async getComponentsToLoad(\n rootComponentId: string,\n contextUser?: UserInfo\n ): Promise<string[]> {\n return this.GetComponentsToLoad(rootComponentId, contextUser);\n }\n \n /**\n * Add a reference to a component\n */\n private addComponentReference(componentKey: string, referenceId: string): void {\n if (!this.componentReferences.has(componentKey)) {\n this.componentReferences.set(componentKey, new Set());\n }\n this.componentReferences.get(componentKey)!.add(referenceId);\n }\n \n /**\n * Remove a reference to a component\n */\n RemoveComponentReference(componentKey: string, referenceId: string): void {\n const refs = this.componentReferences.get(componentKey);\n if (refs) {\n refs.delete(referenceId);\n \n // If no more references and cache cleanup is enabled\n if (refs.size === 0) {\n this.considerCacheEviction(componentKey);\n }\n }\n }\n\n /** @deprecated Use {@link RemoveComponentReference}. */\n removeComponentReference(componentKey: string, referenceId: string): void {\n return this.RemoveComponentReference(componentKey, referenceId);\n }\n \n /**\n * Consider evicting a component from cache\n */\n private considerCacheEviction(componentKey: string): void {\n const cached = this.compiledComponentCache.get(componentKey);\n if (cached) {\n const timeSinceLastUse = Date.now() - cached.lastUsed.getTime();\n const evictionThreshold = 5 * 60 * 1000; // 5 minutes\n \n if (timeSinceLastUse > evictionThreshold) {\n if (this.debug) {\n console.log(`๐๏ธ Evicting unused component from cache: ${componentKey}`);\n }\n this.compiledComponentCache.delete(componentKey);\n }\n }\n }\n \n /**\n * Get API key for a registry from secure configuration\n * @param registryId - Registry ID\n * @returns API key or undefined\n */\n private getRegistryApiKey(registryId: string): string | undefined {\n // API keys should be stored in environment variables or secure configuration\n // Format: REGISTRY_API_KEY_{registryId} or similar\n // This is a placeholder - actual implementation would depend on the security infrastructure\n const envKey = `REGISTRY_API_KEY_${registryId.replace(/-/g, '_').toUpperCase()}`;\n return process.env[envKey];\n }\n \n /**\n * Get cache statistics\n */\n GetCacheStats(): {\n compiledComponents: number;\n totalUseCount: number;\n memoryEstimate: string;\n } {\n let totalUseCount = 0;\n this.compiledComponentCache.forEach(cached => {\n totalUseCount += cached.useCount;\n });\n \n return {\n compiledComponents: this.compiledComponentCache.size,\n totalUseCount,\n memoryEstimate: `~${(this.compiledComponentCache.size * 50)}KB` // Rough estimate\n };\n }\n\n /** @deprecated Use {@link GetCacheStats}. */\n getCacheStats(): {\n compiledComponents: number;\n totalUseCount: number;\n memoryEstimate: string;\n } {\n return this.GetCacheStats();\n }\n \n /**\n * Clear all caches\n */\n ClearCache(): void {\n if (this.debug) {\n console.log('๐งน Clearing all component caches');\n }\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n }\n\n /** @deprecated Use {@link ClearCache}. */\n clearCache(): void {\n return this.ClearCache();\n }\n\n /**\n * Force clear all compiled components\n * Used for Component Studio to ensure fresh loads\n */\n ForceClearAll(): void {\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n console.log('๐งน Component cache force cleared');\n }\n\n /** @deprecated Use {@link ForceClearAll}. */\n forceClearAll(): void {\n return this.ForceClearAll();\n }\n\n /**\n * Reset the singleton instance\n * Forces new instance creation on next access\n */\n static Reset(): void {\n const g = GetGlobalObjectStore();\n const existing = g ? (g[ComponentRegistryService._globalStoreKey] as ComponentRegistryService | undefined) : undefined;\n if (existing) {\n existing.forceClearAll();\n if (g) {\n delete g[ComponentRegistryService._globalStoreKey];\n }\n }\n }\n\n /** @deprecated Use {@link Reset}. */\n static reset(): void {\n return this.Reset();\n }\n \n /**\n * Generate a cache key for a component\n */\n private getComponentKey(\n name: string, \n namespace: string | null | undefined, \n version: string, \n sourceRegistryId: string | null | undefined\n ): string {\n const registryPart = sourceRegistryId || 'local';\n const namespacePart = namespace || 'global';\n return `${registryPart}/${namespacePart}/${name}@${version}`;\n }\n}"]}
|