@memberjunction/react-runtime 6.2.0-edge.0 → 6.2.0-edge.1
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 +12 -12
- package/CHANGELOG.md +61 -0
- package/dist/compiler/babel-config.d.ts +14 -0
- package/dist/compiler/babel-config.d.ts.map +1 -1
- package/dist/compiler/babel-config.js +12 -3
- package/dist/compiler/babel-config.js.map +1 -1
- package/dist/compiler/component-compiler.d.ts +5 -0
- package/dist/compiler/component-compiler.d.ts.map +1 -1
- package/dist/compiler/component-compiler.js +24 -9
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/compiler/index.d.ts +1 -1
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +1 -1
- package/dist/compiler/index.js.map +1 -1
- package/dist/component-manager/component-manager.d.ts +8 -0
- package/dist/component-manager/component-manager.d.ts.map +1 -1
- package/dist/component-manager/component-manager.js +18 -6
- package/dist/component-manager/component-manager.js.map +1 -1
- package/dist/index.d.ts +21 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -10
- package/dist/index.js.map +1 -1
- package/dist/registry/component-registry-service.d.ts +18 -0
- package/dist/registry/component-registry-service.d.ts.map +1 -1
- package/dist/registry/component-registry-service.js +65 -23
- package/dist/registry/component-registry-service.js.map +1 -1
- package/dist/registry/component-registry.d.ts +24 -1
- package/dist/registry/component-registry.d.ts.map +1 -1
- package/dist/registry/component-registry.js +74 -23
- package/dist/registry/component-registry.js.map +1 -1
- package/dist/registry/component-resolver.d.ts +10 -0
- package/dist/registry/component-resolver.d.ts.map +1 -1
- package/dist/registry/component-resolver.js +30 -9
- package/dist/registry/component-resolver.js.map +1 -1
- package/dist/registry/registry-provider.js.map +1 -1
- package/dist/runtime/component-hierarchy.d.ts +15 -0
- package/dist/runtime/component-hierarchy.d.ts.map +1 -1
- package/dist/runtime/component-hierarchy.js +28 -10
- package/dist/runtime/component-hierarchy.js.map +1 -1
- package/dist/runtime/error-boundary.d.ts +4 -0
- package/dist/runtime/error-boundary.d.ts.map +1 -1
- package/dist/runtime/error-boundary.js +50 -20
- package/dist/runtime/error-boundary.js.map +1 -1
- package/dist/runtime/index.d.ts +3 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -3
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/prop-builder.d.ts +8 -0
- package/dist/runtime/prop-builder.d.ts.map +1 -1
- package/dist/runtime/prop-builder.js +39 -11
- package/dist/runtime/prop-builder.js.map +1 -1
- package/dist/runtime/react-root-manager.d.ts +10 -0
- package/dist/runtime/react-root-manager.d.ts.map +1 -1
- package/dist/runtime/react-root-manager.js +27 -9
- package/dist/runtime/react-root-manager.js.map +1 -1
- package/dist/runtime.umd.js +72 -72
- package/dist/utilities/cache-manager.d.ts +13 -0
- package/dist/utilities/cache-manager.d.ts.map +1 -1
- package/dist/utilities/cache-manager.js +40 -16
- package/dist/utilities/cache-manager.js.map +1 -1
- package/dist/utilities/component-error-analyzer.d.ts +3 -0
- package/dist/utilities/component-error-analyzer.d.ts.map +1 -1
- package/dist/utilities/component-error-analyzer.js +12 -3
- package/dist/utilities/component-error-analyzer.js.map +1 -1
- package/dist/utilities/component-hash.d.ts +1 -0
- package/dist/utilities/component-hash.d.ts.map +1 -1
- package/dist/utilities/component-hash.js +4 -1
- package/dist/utilities/component-hash.js.map +1 -1
- package/dist/utilities/component-library-theming.d.ts +4 -0
- package/dist/utilities/component-library-theming.d.ts.map +1 -1
- package/dist/utilities/component-library-theming.js +12 -6
- package/dist/utilities/component-library-theming.js.map +1 -1
- package/dist/utilities/component-styles.d.ts +1 -0
- package/dist/utilities/component-styles.d.ts.map +1 -1
- package/dist/utilities/component-styles.js +2 -1
- package/dist/utilities/component-styles.js.map +1 -1
- package/dist/utilities/component-unwrapper.d.ts +8 -2
- package/dist/utilities/component-unwrapper.d.ts.map +1 -1
- package/dist/utilities/component-unwrapper.js +19 -7
- package/dist/utilities/component-unwrapper.js.map +1 -1
- package/dist/utilities/core-libraries.d.ts +2 -0
- package/dist/utilities/core-libraries.d.ts.map +1 -1
- package/dist/utilities/core-libraries.js +9 -3
- package/dist/utilities/core-libraries.js.map +1 -1
- package/dist/utilities/entity-record-key.d.ts +1 -0
- package/dist/utilities/entity-record-key.d.ts.map +1 -1
- package/dist/utilities/entity-record-key.js +4 -1
- package/dist/utilities/entity-record-key.js.map +1 -1
- package/dist/utilities/library-dependency-resolver.d.ts +8 -0
- package/dist/utilities/library-dependency-resolver.d.ts.map +1 -1
- package/dist/utilities/library-dependency-resolver.js +39 -15
- package/dist/utilities/library-dependency-resolver.js.map +1 -1
- package/dist/utilities/library-loader.d.ts +12 -0
- package/dist/utilities/library-loader.d.ts.map +1 -1
- package/dist/utilities/library-loader.js +46 -16
- package/dist/utilities/library-loader.js.map +1 -1
- package/dist/utilities/library-registry.d.ts +5 -0
- package/dist/utilities/library-registry.d.ts.map +1 -1
- package/dist/utilities/library-registry.js +20 -5
- package/dist/utilities/library-registry.js.map +1 -1
- package/dist/utilities/resource-manager.d.ts +19 -0
- package/dist/utilities/resource-manager.d.ts.map +1 -1
- package/dist/utilities/resource-manager.js +63 -18
- package/dist/utilities/resource-manager.js.map +1 -1
- package/dist/utilities/runtime-utilities.d.ts +9 -7
- package/dist/utilities/runtime-utilities.d.ts.map +1 -1
- package/dist/utilities/runtime-utilities.js +22 -16
- package/dist/utilities/runtime-utilities.js.map +1 -1
- package/dist/utilities/standard-libraries.d.ts +10 -0
- package/dist/utilities/standard-libraries.d.ts.map +1 -1
- package/dist/utilities/standard-libraries.js +40 -10
- package/dist/utilities/standard-libraries.js.map +1 -1
- package/dist/utilities/user-state.d.ts +5 -0
- package/dist/utilities/user-state.d.ts.map +1 -1
- package/dist/utilities/user-state.js +20 -5
- package/dist/utilities/user-state.js.map +1 -1
- package/package.json +7 -7
- package/src/__tests__/error-boundary.test.ts +80 -0
- package/src/__tests__/runtime-utilities-factory.test.ts +4 -4
- package/src/__tests__/user-state.test.ts +44 -44
- package/src/compiler/babel-config.ts +18 -3
- package/src/compiler/component-compiler.ts +34 -9
- package/src/compiler/index.ts +3 -3
- package/src/component-manager/component-manager.ts +36 -6
- package/src/index.ts +35 -21
- package/src/registry/component-registry-service.ts +126 -23
- package/src/registry/component-registry.ts +122 -24
- package/src/registry/component-resolver.ts +51 -9
- package/src/registry/registry-provider.ts +40 -40
- package/src/runtime/component-hierarchy.ts +61 -10
- package/src/runtime/error-boundary.ts +77 -22
- package/src/runtime/index.ts +16 -16
- package/src/runtime/prop-builder.ts +69 -11
- package/src/runtime/react-root-manager.ts +48 -10
- package/src/utilities/cache-manager.ts +61 -16
- package/src/utilities/component-error-analyzer.ts +18 -3
- package/src/utilities/component-hash.ts +6 -1
- package/src/utilities/component-library-theming.ts +24 -6
- package/src/utilities/component-styles.ts +4 -1
- package/src/utilities/component-unwrapper.ts +34 -7
- package/src/utilities/core-libraries.ts +13 -3
- package/src/utilities/entity-record-key.ts +11 -1
- package/src/utilities/library-dependency-resolver.ts +66 -15
- package/src/utilities/library-loader.ts +81 -17
- package/src/utilities/library-registry.ts +30 -5
- package/src/utilities/resource-manager.ts +126 -19
- package/src/utilities/runtime-utilities.ts +26 -16
- package/src/utilities/standard-libraries.ts +60 -10
- package/src/utilities/user-state.ts +40 -5
|
@@ -3,7 +3,7 @@ export class LibraryDependencyResolver {
|
|
|
3
3
|
this.debug = false;
|
|
4
4
|
this.debug = options?.debug || false;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
ParseDependencies(json) {
|
|
7
7
|
const dependencies = new Map();
|
|
8
8
|
if (!json || json.trim() === '') {
|
|
9
9
|
return dependencies;
|
|
@@ -23,11 +23,14 @@ export class LibraryDependencyResolver {
|
|
|
23
23
|
}
|
|
24
24
|
return dependencies;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
parseDependencies(json) {
|
|
27
|
+
return this.ParseDependencies(json);
|
|
28
|
+
}
|
|
29
|
+
BuildDependencyGraph(libraries) {
|
|
27
30
|
const nodes = new Map();
|
|
28
31
|
const roots = new Set();
|
|
29
32
|
for (const library of libraries) {
|
|
30
|
-
const dependencies = this.
|
|
33
|
+
const dependencies = this.ParseDependencies(library.Dependencies);
|
|
31
34
|
nodes.set(library.Name, {
|
|
32
35
|
library,
|
|
33
36
|
dependencies,
|
|
@@ -49,7 +52,10 @@ export class LibraryDependencyResolver {
|
|
|
49
52
|
}
|
|
50
53
|
return { nodes, roots };
|
|
51
54
|
}
|
|
52
|
-
|
|
55
|
+
buildDependencyGraph(libraries) {
|
|
56
|
+
return this.BuildDependencyGraph(libraries);
|
|
57
|
+
}
|
|
58
|
+
DetectCycles(graph) {
|
|
53
59
|
const cycles = [];
|
|
54
60
|
const visited = new Set();
|
|
55
61
|
const recursionStack = new Set();
|
|
@@ -81,7 +87,10 @@ export class LibraryDependencyResolver {
|
|
|
81
87
|
}
|
|
82
88
|
return cycles;
|
|
83
89
|
}
|
|
84
|
-
|
|
90
|
+
detectCycles(graph) {
|
|
91
|
+
return this.DetectCycles(graph);
|
|
92
|
+
}
|
|
93
|
+
TopologicalSort(graph) {
|
|
85
94
|
const result = [];
|
|
86
95
|
const visited = new Set();
|
|
87
96
|
const tempMarked = new Set();
|
|
@@ -117,6 +126,9 @@ export class LibraryDependencyResolver {
|
|
|
117
126
|
}
|
|
118
127
|
return result;
|
|
119
128
|
}
|
|
129
|
+
topologicalSort(graph) {
|
|
130
|
+
return this.TopologicalSort(graph);
|
|
131
|
+
}
|
|
120
132
|
parseVersion(version) {
|
|
121
133
|
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([^+]+))?(?:\+(.+))?$/);
|
|
122
134
|
if (!match) {
|
|
@@ -218,7 +230,7 @@ export class LibraryDependencyResolver {
|
|
|
218
230
|
}
|
|
219
231
|
return 0;
|
|
220
232
|
}
|
|
221
|
-
|
|
233
|
+
ResolveVersionConflicts(requirements, availableLibraries) {
|
|
222
234
|
if (requirements.length === 0) {
|
|
223
235
|
throw new Error('No version requirements provided');
|
|
224
236
|
}
|
|
@@ -270,7 +282,10 @@ export class LibraryDependencyResolver {
|
|
|
270
282
|
warnings
|
|
271
283
|
};
|
|
272
284
|
}
|
|
273
|
-
|
|
285
|
+
resolveVersionConflicts(requirements, availableLibraries) {
|
|
286
|
+
return this.ResolveVersionConflicts(requirements, availableLibraries);
|
|
287
|
+
}
|
|
288
|
+
GetLoadOrder(requestedLibs, allLibs, options) {
|
|
274
289
|
const errors = [];
|
|
275
290
|
const warnings = [];
|
|
276
291
|
const validRequestedLibs = requestedLibs.filter(lib => {
|
|
@@ -331,7 +346,7 @@ export class LibraryDependencyResolver {
|
|
|
331
346
|
continue;
|
|
332
347
|
}
|
|
333
348
|
const lib = libVersions[0];
|
|
334
|
-
const deps = this.
|
|
349
|
+
const deps = this.ParseDependencies(lib.Dependencies);
|
|
335
350
|
if ((this.debug || options?.debug) && deps.size > 0) {
|
|
336
351
|
console.log(` 📌 ${current} requires:`, Array.from(deps.entries()));
|
|
337
352
|
}
|
|
@@ -364,7 +379,7 @@ export class LibraryDependencyResolver {
|
|
|
364
379
|
}
|
|
365
380
|
if (requirements.length > 0) {
|
|
366
381
|
try {
|
|
367
|
-
const resolved = this.
|
|
382
|
+
const resolved = this.ResolveVersionConflicts(requirements, versions);
|
|
368
383
|
const selectedLib = versions.find(lib => lib.Version === resolved.version);
|
|
369
384
|
if (selectedLib) {
|
|
370
385
|
resolvedLibraries.push(selectedLib);
|
|
@@ -382,8 +397,8 @@ export class LibraryDependencyResolver {
|
|
|
382
397
|
resolvedLibraries.push(versions[0]);
|
|
383
398
|
}
|
|
384
399
|
}
|
|
385
|
-
const graph = this.
|
|
386
|
-
const cycles = this.
|
|
400
|
+
const graph = this.BuildDependencyGraph(resolvedLibraries);
|
|
401
|
+
const cycles = this.DetectCycles(graph);
|
|
387
402
|
if (cycles.length > 0) {
|
|
388
403
|
errors.push(`Circular dependencies detected: ${cycles.map(c => c.join(' -> ')).join(', ')}`);
|
|
389
404
|
return {
|
|
@@ -393,7 +408,7 @@ export class LibraryDependencyResolver {
|
|
|
393
408
|
warnings: warnings.length > 0 ? warnings : undefined
|
|
394
409
|
};
|
|
395
410
|
}
|
|
396
|
-
const sorted = this.
|
|
411
|
+
const sorted = this.TopologicalSort(graph);
|
|
397
412
|
if (this.debug || options?.debug) {
|
|
398
413
|
console.log('✅ Load order determined:', sorted.map(lib => `${lib.Name}@${lib.Version}`));
|
|
399
414
|
}
|
|
@@ -404,10 +419,16 @@ export class LibraryDependencyResolver {
|
|
|
404
419
|
warnings: warnings.length > 0 ? warnings : undefined
|
|
405
420
|
};
|
|
406
421
|
}
|
|
422
|
+
getLoadOrder(requestedLibs, allLibs, options) {
|
|
423
|
+
return this.GetLoadOrder(requestedLibs, allLibs, options);
|
|
424
|
+
}
|
|
425
|
+
GetDirectDependencies(library) {
|
|
426
|
+
return this.ParseDependencies(library.Dependencies);
|
|
427
|
+
}
|
|
407
428
|
getDirectDependencies(library) {
|
|
408
|
-
return this.
|
|
429
|
+
return this.GetDirectDependencies(library);
|
|
409
430
|
}
|
|
410
|
-
|
|
431
|
+
GetTransitiveDependencies(libraryName, allLibs, maxDepth = 10) {
|
|
411
432
|
const dependencies = new Set();
|
|
412
433
|
const toProcess = [libraryName];
|
|
413
434
|
const processed = new Set();
|
|
@@ -424,7 +445,7 @@ export class LibraryDependencyResolver {
|
|
|
424
445
|
const lib = libMap.get(current.toLowerCase());
|
|
425
446
|
if (!lib)
|
|
426
447
|
continue;
|
|
427
|
-
const deps = this.
|
|
448
|
+
const deps = this.ParseDependencies(lib.Dependencies);
|
|
428
449
|
for (const [depName] of deps) {
|
|
429
450
|
dependencies.add(depName);
|
|
430
451
|
if (!processed.has(depName)) {
|
|
@@ -435,5 +456,8 @@ export class LibraryDependencyResolver {
|
|
|
435
456
|
}
|
|
436
457
|
return dependencies;
|
|
437
458
|
}
|
|
459
|
+
getTransitiveDependencies(libraryName, allLibs, maxDepth = 10) {
|
|
460
|
+
return this.GetTransitiveDependencies(libraryName, allLibs, maxDepth);
|
|
461
|
+
}
|
|
438
462
|
}
|
|
439
463
|
//# sourceMappingURL=library-dependency-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-dependency-resolver.js","sourceRoot":"","sources":["../../src/utilities/library-dependency-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Library dependency resolution utilities\n * Provides dependency graph construction, cycle detection, topological sorting, and version resolution\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { MJComponentLibraryEntity } from '@memberjunction/core-entities';\nimport {\n DependencyGraph,\n DependencyNode,\n LoadOrderResult,\n ParsedDependency,\n ParsedVersion,\n ResolvedVersion,\n VersionRange,\n VersionRangeType,\n VersionRequirement,\n DependencyResolutionOptions\n} from '../types/dependency-types';\n\n/**\n * Resolves library dependencies and determines load order\n */\nexport class LibraryDependencyResolver {\n private debug: boolean = false;\n\n constructor(options?: DependencyResolutionOptions) {\n this.debug = options?.debug || false;\n }\n\n /**\n * Parse dependencies from JSON string\n * @param json - JSON string containing dependencies\n * @returns Map of library name to version specification\n */\n parseDependencies(json: string | null): Map<string, string> {\n const dependencies = new Map<string, string>();\n \n if (!json || json.trim() === '') {\n return dependencies;\n }\n\n try {\n const parsed = JSON.parse(json);\n if (typeof parsed === 'object' && parsed !== null) {\n for (const [name, version] of Object.entries(parsed)) {\n if (typeof version === 'string') {\n dependencies.set(name, version);\n }\n }\n }\n } catch (error) {\n console.error('Failed to parse dependencies JSON:', error);\n }\n\n return dependencies;\n }\n\n /**\n * Build a dependency graph from a collection of libraries\n * @param libraries - All available libraries\n * @returns Dependency graph structure\n */\n buildDependencyGraph(libraries: MJComponentLibraryEntity[]): DependencyGraph {\n const nodes = new Map<string, DependencyNode>();\n const roots = new Set<string>();\n\n // First pass: create nodes for all libraries\n for (const library of libraries) {\n const dependencies = this.parseDependencies(library.Dependencies);\n nodes.set(library.Name, {\n library,\n dependencies,\n dependents: new Set()\n });\n // Initially assume all are roots\n roots.add(library.Name);\n }\n\n // Second pass: establish dependency relationships\n for (const [name, node] of nodes) {\n for (const [depName, depVersion] of node.dependencies) {\n const depNode = nodes.get(depName);\n if (depNode) {\n // This library depends on depName, so depName is not a root\n roots.delete(depName);\n // Add this library as a dependent of depName\n depNode.dependents.add(name);\n } else if (this.debug) {\n console.warn(`Dependency '${depName}' not found for library '${name}'`);\n }\n }\n }\n\n return { nodes, roots };\n }\n\n /**\n * Detect circular dependencies in the graph\n * @param graph - Dependency graph\n * @returns Array of cycles found\n */\n detectCycles(graph: DependencyGraph): string[][] {\n const cycles: string[][] = [];\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n const detectCyclesUtil = (nodeName: string): void => {\n visited.add(nodeName);\n recursionStack.add(nodeName);\n path.push(nodeName);\n\n const node = graph.nodes.get(nodeName);\n if (node) {\n for (const [depName] of node.dependencies) {\n if (!visited.has(depName)) {\n detectCyclesUtil(depName);\n } else if (recursionStack.has(depName)) {\n // Found a cycle\n const cycleStartIndex = path.indexOf(depName);\n const cycle = [...path.slice(cycleStartIndex), depName];\n cycles.push(cycle);\n }\n }\n }\n\n path.pop();\n recursionStack.delete(nodeName);\n };\n\n // Check all nodes\n for (const nodeName of graph.nodes.keys()) {\n if (!visited.has(nodeName)) {\n detectCyclesUtil(nodeName);\n }\n }\n\n return cycles;\n }\n\n /**\n * Perform topological sort to determine load order\n * @param graph - Dependency graph\n * @returns Sorted array of libraries to load in order\n */\n topologicalSort(graph: DependencyGraph): MJComponentLibraryEntity[] {\n const result: MJComponentLibraryEntity[] = [];\n const visited = new Set<string>();\n const tempMarked = new Set<string>();\n\n const visit = (nodeName: string): boolean => {\n if (tempMarked.has(nodeName)) {\n // Cycle detected\n return false;\n }\n if (visited.has(nodeName)) {\n return true;\n }\n\n tempMarked.add(nodeName);\n const node = graph.nodes.get(nodeName);\n \n if (node) {\n // Visit dependencies first\n for (const [depName] of node.dependencies) {\n if (graph.nodes.has(depName)) {\n if (!visit(depName)) {\n return false;\n }\n }\n }\n result.push(node.library);\n }\n\n tempMarked.delete(nodeName);\n visited.add(nodeName);\n return true;\n };\n\n // Start with all nodes\n for (const nodeName of graph.nodes.keys()) {\n if (!visited.has(nodeName)) {\n if (!visit(nodeName)) {\n console.error(`Cycle detected involving library: ${nodeName}`);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Parse a semver version string\n * @param version - Version string (e.g., \"1.2.3\")\n * @returns Parsed version object\n */\n private parseVersion(version: string): ParsedVersion | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([^+]+))?(?:\\+(.+))?$/);\n if (!match) {\n return null;\n }\n\n return {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: parseInt(match[3], 10),\n prerelease: match[4],\n build: match[5]\n };\n }\n\n /**\n * Parse a version specification into a range\n * @param spec - Version specification (e.g., \"^1.2.3\", \"~1.2.0\", \"1.2.3\")\n * @returns Parsed version range\n */\n private parseVersionRange(spec: string): VersionRange {\n if (spec === '*' || spec === '' || spec === 'latest') {\n return { type: 'any', raw: spec };\n }\n\n // Tilde range (~1.2.3)\n if (spec.startsWith('~')) {\n const version = this.parseVersion(spec.substring(1));\n return {\n type: 'tilde',\n version: version || undefined,\n raw: spec\n };\n }\n\n // Caret range (^1.2.3)\n if (spec.startsWith('^')) {\n const version = this.parseVersion(spec.substring(1));\n return {\n type: 'caret',\n version: version || undefined,\n raw: spec\n };\n }\n\n // Exact version\n const version = this.parseVersion(spec);\n if (version) {\n return {\n type: 'exact',\n version,\n raw: spec\n };\n }\n\n // Default to any if we can't parse\n return { type: 'any', raw: spec };\n }\n\n /**\n * Check if a version satisfies a version range\n * @param version - Version to check\n * @param range - Version range specification\n * @returns True if version satisfies range\n */\n private versionSatisfiesRange(version: ParsedVersion, range: VersionRange): boolean {\n if (range.type === 'any') {\n return true;\n }\n\n if (!range.version) {\n return false;\n }\n\n const rangeVer = range.version;\n\n switch (range.type) {\n case 'exact':\n return version.major === rangeVer.major &&\n version.minor === rangeVer.minor &&\n version.patch === rangeVer.patch;\n\n case 'tilde': // ~1.2.3 means >=1.2.3 <1.3.0\n if (version.major !== rangeVer.major) return false;\n if (version.minor !== rangeVer.minor) return false;\n return version.patch >= rangeVer.patch;\n\n case 'caret': // ^1.2.3 means >=1.2.3 <2.0.0 (for 1.x.x)\n if (rangeVer.major === 0) {\n // ^0.x.y behaves like ~0.x.y\n if (version.major !== 0) return false;\n if (rangeVer.minor === 0) {\n // ^0.0.x means exactly 0.0.x\n return version.minor === 0 && version.patch === rangeVer.patch;\n }\n // ^0.x.y means >=0.x.y <0.(x+1).0\n if (version.minor !== rangeVer.minor) return false;\n return version.patch >= rangeVer.patch;\n }\n // Normal caret for major > 0\n if (version.major !== rangeVer.major) return false;\n if (version.minor < rangeVer.minor) return false;\n if (version.minor === rangeVer.minor) {\n return version.patch >= rangeVer.patch;\n }\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Compare two versions for sorting\n * @returns -1 if a < b, 0 if a === b, 1 if a > b\n */\n private compareVersions(a: ParsedVersion, b: ParsedVersion): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n if (a.patch !== b.patch) return a.patch - b.patch;\n \n // Handle prerelease versions\n if (!a.prerelease && b.prerelease) return 1; // a is newer\n if (a.prerelease && !b.prerelease) return -1; // b is newer\n if (a.prerelease && b.prerelease) {\n return a.prerelease.localeCompare(b.prerelease);\n }\n \n return 0;\n }\n\n /**\n * Resolve version conflicts using NPM-style resolution\n * @param requirements - Array of version requirements\n * @param availableLibraries - All available libraries to choose from\n * @returns Resolved version information\n */\n resolveVersionConflicts(\n requirements: VersionRequirement[],\n availableLibraries: MJComponentLibraryEntity[]\n ): ResolvedVersion {\n if (requirements.length === 0) {\n throw new Error('No version requirements provided');\n }\n\n const libraryName = requirements[0].library;\n const warnings: string[] = [];\n\n // Find all available versions for this library\n const availableVersions = availableLibraries\n .filter(lib => lib.Name === libraryName && lib.Version)\n .map(lib => ({\n library: lib,\n version: this.parseVersion(lib.Version!)\n }))\n .filter(item => item.version !== null)\n .sort((a, b) => this.compareVersions(b.version!, a.version!)); // Sort descending\n\n if (availableVersions.length === 0) {\n throw new Error(`No versions available for library '${libraryName}'`);\n }\n\n // Parse all requirements\n const ranges = requirements.map(req => ({\n ...req,\n range: this.parseVersionRange(req.versionSpec)\n }));\n\n // Find the highest version that satisfies all requirements\n for (const { library, version } of availableVersions) {\n let satisfiesAll = true;\n const satisfiedRequirements: VersionRequirement[] = [];\n\n for (const req of ranges) {\n if (this.versionSatisfiesRange(version!, req.range)) {\n satisfiedRequirements.push(req);\n } else {\n satisfiesAll = false;\n warnings.push(\n `Version ${library.Version} does not satisfy '${req.versionSpec}' required by ${req.requestedBy}`\n );\n break;\n }\n }\n\n if (satisfiesAll) {\n return {\n library: libraryName,\n version: library.Version!,\n satisfies: requirements,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n }\n\n // No version satisfies all requirements\n // Return the latest version with warnings\n const latest = availableVersions[0];\n warnings.push(\n `Could not find a version that satisfies all requirements. Using ${latest.library.Version}`\n );\n\n return {\n library: libraryName,\n version: latest.library.Version!,\n satisfies: [],\n warnings\n };\n }\n\n /**\n * Get the load order for a set of requested libraries\n * @param requestedLibs - Library names requested\n * @param allLibs - All available libraries\n * @param options - Resolution options\n * @returns Load order result\n */\n getLoadOrder(\n requestedLibs: string[],\n allLibs: MJComponentLibraryEntity[],\n options?: DependencyResolutionOptions\n ): LoadOrderResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Filter out null, undefined, and non-string values from requestedLibs\n const validRequestedLibs = requestedLibs.filter(lib => {\n if (!lib || typeof lib !== 'string') {\n const warning = `Invalid library name: ${lib} (type: ${typeof lib})`;\n warnings.push(warning);\n if (this.debug || options?.debug) {\n console.warn(`⚠️ ${warning}`);\n }\n return false;\n }\n return true;\n });\n\n if (this.debug || options?.debug) {\n console.log('🔍 Getting load order for requested libraries:');\n console.log(' 📝 Requested (raw):', requestedLibs);\n console.log(' 📝 Requested (valid):', validRequestedLibs);\n console.log(' 📚 Total available libraries:', allLibs.length);\n }\n\n // Build a map for quick lookup (case-insensitive)\n const libMap = new Map<string, MJComponentLibraryEntity[]>();\n for (const lib of allLibs) {\n if (!lib?.Name) {\n warnings.push(`Library with missing name found in available libraries`);\n continue;\n }\n const key = lib.Name.toLowerCase();\n if (!libMap.has(key)) {\n libMap.set(key, []);\n }\n libMap.get(key)!.push(lib);\n }\n\n // Collect all libraries needed (requested + their dependencies)\n const needed = new Set<string>();\n const toProcess = [...validRequestedLibs];\n const processed = new Set<string>();\n const versionRequirements = new Map<string, VersionRequirement[]>();\n let depth = 0;\n const maxDepth = options?.maxDepth || 10;\n\n while (toProcess.length > 0 && depth < maxDepth) {\n const current = toProcess.shift()!;\n \n // Extra safety check for null/undefined\n if (!current || typeof current !== 'string') {\n const warning = `Unexpected invalid library name during processing: ${current}`;\n warnings.push(warning);\n if (this.debug || options?.debug) {\n console.warn(`⚠️ ${warning}`);\n }\n continue;\n }\n \n if (processed.has(current)) continue;\n\n processed.add(current);\n needed.add(current);\n\n // Find the library (case-insensitive lookup)\n const libVersions = libMap.get(current.toLowerCase());\n if (!libVersions || libVersions.length === 0) {\n if (this.debug || options?.debug) {\n console.log(` ❌ Library '${current}' not found in available libraries`);\n }\n errors.push(`Library '${current}' not found`);\n continue;\n }\n\n // For now, use the first version found (should be resolved properly)\n const lib = libVersions[0];\n const deps = this.parseDependencies(lib.Dependencies);\n \n if ((this.debug || options?.debug) && deps.size > 0) {\n console.log(` 📌 ${current} requires:`, Array.from(deps.entries()));\n }\n\n // Process dependencies\n for (const [depName, depVersion] of deps) {\n needed.add(depName);\n \n // Track version requirements\n if (!versionRequirements.has(depName)) {\n versionRequirements.set(depName, []);\n }\n versionRequirements.get(depName)!.push({\n library: depName,\n versionSpec: depVersion,\n requestedBy: current\n });\n\n if (!processed.has(depName)) {\n toProcess.push(depName);\n }\n }\n\n depth++;\n }\n\n if (depth >= maxDepth) {\n warnings.push(`Maximum dependency depth (${maxDepth}) reached`);\n }\n\n // Resolve version conflicts for each library\n const resolvedLibraries: MJComponentLibraryEntity[] = [];\n for (const libName of needed) {\n const requirements = versionRequirements.get(libName) || [];\n const versions = libMap.get(libName.toLowerCase()) || [];\n \n if (versions.length === 0) {\n errors.push(`Library '${libName}' not found`);\n continue;\n }\n\n if (requirements.length > 0) {\n try {\n const resolved = this.resolveVersionConflicts(requirements, versions);\n const selectedLib = versions.find(lib => lib.Version === resolved.version);\n if (selectedLib) {\n resolvedLibraries.push(selectedLib);\n if (resolved.warnings) {\n warnings.push(...resolved.warnings);\n }\n }\n } catch (error: any) {\n errors.push(error.message);\n // Use first available version as fallback\n resolvedLibraries.push(versions[0]);\n }\n } else {\n // No specific requirements, use the first (default) version\n resolvedLibraries.push(versions[0]);\n }\n }\n\n // Build dependency graph with resolved libraries\n const graph = this.buildDependencyGraph(resolvedLibraries);\n\n // Check for cycles\n const cycles = this.detectCycles(graph);\n if (cycles.length > 0) {\n errors.push(`Circular dependencies detected: ${cycles.map(c => c.join(' -> ')).join(', ')}`);\n return {\n success: false,\n cycles,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n\n // Perform topological sort\n const sorted = this.topologicalSort(graph);\n\n if (this.debug || options?.debug) {\n console.log('✅ Load order determined:', sorted.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n return {\n success: errors.length === 0,\n order: sorted,\n errors: errors.length > 0 ? errors : undefined,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n\n /**\n * Get direct dependencies of a library\n * @param library - Library to get dependencies for\n * @returns Map of dependency names to version specs\n */\n getDirectDependencies(library: MJComponentLibraryEntity): Map<string, string> {\n return this.parseDependencies(library.Dependencies);\n }\n\n /**\n * Get all transitive dependencies of a library\n * @param libraryName - Library name to analyze\n * @param allLibs - All available libraries\n * @param maxDepth - Maximum depth to traverse\n * @returns Set of all dependency names (including transitive)\n */\n getTransitiveDependencies(\n libraryName: string,\n allLibs: MJComponentLibraryEntity[],\n maxDepth: number = 10\n ): Set<string> {\n const dependencies = new Set<string>();\n const toProcess = [libraryName];\n const processed = new Set<string>();\n let depth = 0;\n\n // Build lookup map (case-insensitive)\n const libMap = new Map<string, MJComponentLibraryEntity>();\n for (const lib of allLibs) {\n libMap.set(lib.Name.toLowerCase(), lib);\n }\n\n while (toProcess.length > 0 && depth < maxDepth) {\n const current = toProcess.shift()!;\n if (processed.has(current)) continue;\n\n processed.add(current);\n const lib = libMap.get(current.toLowerCase());\n if (!lib) continue;\n\n const deps = this.parseDependencies(lib.Dependencies);\n for (const [depName] of deps) {\n dependencies.add(depName);\n if (!processed.has(depName)) {\n toProcess.push(depName);\n }\n }\n\n depth++;\n }\n\n return dependencies;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"library-dependency-resolver.js","sourceRoot":"","sources":["../../src/utilities/library-dependency-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Library dependency resolution utilities\n * Provides dependency graph construction, cycle detection, topological sorting, and version resolution\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { MJComponentLibraryEntity } from '@memberjunction/core-entities';\nimport {\n DependencyGraph,\n DependencyNode,\n LoadOrderResult,\n ParsedDependency,\n ParsedVersion,\n ResolvedVersion,\n VersionRange,\n VersionRangeType,\n VersionRequirement,\n DependencyResolutionOptions\n} from '../types/dependency-types';\n\n/**\n * Resolves library dependencies and determines load order\n */\nexport class LibraryDependencyResolver {\n private debug: boolean = false;\n\n constructor(options?: DependencyResolutionOptions) {\n this.debug = options?.debug || false;\n }\n\n /**\n * Parse dependencies from JSON string\n * @param json - JSON string containing dependencies\n * @returns Map of library name to version specification\n */\n ParseDependencies(json: string | null): Map<string, string> {\n const dependencies = new Map<string, string>();\n \n if (!json || json.trim() === '') {\n return dependencies;\n }\n\n try {\n const parsed = JSON.parse(json);\n if (typeof parsed === 'object' && parsed !== null) {\n for (const [name, version] of Object.entries(parsed)) {\n if (typeof version === 'string') {\n dependencies.set(name, version);\n }\n }\n }\n } catch (error) {\n console.error('Failed to parse dependencies JSON:', error);\n }\n\n return dependencies;\n }\n\n /** @deprecated Use {@link ParseDependencies}. */\n parseDependencies(json: string | null): Map<string, string> {\n return this.ParseDependencies(json);\n }\n\n /**\n * Build a dependency graph from a collection of libraries\n * @param libraries - All available libraries\n * @returns Dependency graph structure\n */\n BuildDependencyGraph(libraries: MJComponentLibraryEntity[]): DependencyGraph {\n const nodes = new Map<string, DependencyNode>();\n const roots = new Set<string>();\n\n // First pass: create nodes for all libraries\n for (const library of libraries) {\n const dependencies = this.ParseDependencies(library.Dependencies);\n nodes.set(library.Name, {\n library,\n dependencies,\n dependents: new Set()\n });\n // Initially assume all are roots\n roots.add(library.Name);\n }\n\n // Second pass: establish dependency relationships\n for (const [name, node] of nodes) {\n for (const [depName, depVersion] of node.dependencies) {\n const depNode = nodes.get(depName);\n if (depNode) {\n // This library depends on depName, so depName is not a root\n roots.delete(depName);\n // Add this library as a dependent of depName\n depNode.dependents.add(name);\n } else if (this.debug) {\n console.warn(`Dependency '${depName}' not found for library '${name}'`);\n }\n }\n }\n\n return { nodes, roots };\n }\n\n /** @deprecated Use {@link BuildDependencyGraph}. */\n buildDependencyGraph(libraries: MJComponentLibraryEntity[]): DependencyGraph {\n return this.BuildDependencyGraph(libraries);\n }\n\n /**\n * Detect circular dependencies in the graph\n * @param graph - Dependency graph\n * @returns Array of cycles found\n */\n DetectCycles(graph: DependencyGraph): string[][] {\n const cycles: string[][] = [];\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n const detectCyclesUtil = (nodeName: string): void => {\n visited.add(nodeName);\n recursionStack.add(nodeName);\n path.push(nodeName);\n\n const node = graph.nodes.get(nodeName);\n if (node) {\n for (const [depName] of node.dependencies) {\n if (!visited.has(depName)) {\n detectCyclesUtil(depName);\n } else if (recursionStack.has(depName)) {\n // Found a cycle\n const cycleStartIndex = path.indexOf(depName);\n const cycle = [...path.slice(cycleStartIndex), depName];\n cycles.push(cycle);\n }\n }\n }\n\n path.pop();\n recursionStack.delete(nodeName);\n };\n\n // Check all nodes\n for (const nodeName of graph.nodes.keys()) {\n if (!visited.has(nodeName)) {\n detectCyclesUtil(nodeName);\n }\n }\n\n return cycles;\n }\n\n /** @deprecated Use {@link DetectCycles}. */\n detectCycles(graph: DependencyGraph): string[][] {\n return this.DetectCycles(graph);\n }\n\n /**\n * Perform topological sort to determine load order\n * @param graph - Dependency graph\n * @returns Sorted array of libraries to load in order\n */\n TopologicalSort(graph: DependencyGraph): MJComponentLibraryEntity[] {\n const result: MJComponentLibraryEntity[] = [];\n const visited = new Set<string>();\n const tempMarked = new Set<string>();\n\n const visit = (nodeName: string): boolean => {\n if (tempMarked.has(nodeName)) {\n // Cycle detected\n return false;\n }\n if (visited.has(nodeName)) {\n return true;\n }\n\n tempMarked.add(nodeName);\n const node = graph.nodes.get(nodeName);\n \n if (node) {\n // Visit dependencies first\n for (const [depName] of node.dependencies) {\n if (graph.nodes.has(depName)) {\n if (!visit(depName)) {\n return false;\n }\n }\n }\n result.push(node.library);\n }\n\n tempMarked.delete(nodeName);\n visited.add(nodeName);\n return true;\n };\n\n // Start with all nodes\n for (const nodeName of graph.nodes.keys()) {\n if (!visited.has(nodeName)) {\n if (!visit(nodeName)) {\n console.error(`Cycle detected involving library: ${nodeName}`);\n }\n }\n }\n\n return result;\n }\n\n /** @deprecated Use {@link TopologicalSort}. */\n topologicalSort(graph: DependencyGraph): MJComponentLibraryEntity[] {\n return this.TopologicalSort(graph);\n }\n\n /**\n * Parse a semver version string\n * @param version - Version string (e.g., \"1.2.3\")\n * @returns Parsed version object\n */\n private parseVersion(version: string): ParsedVersion | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([^+]+))?(?:\\+(.+))?$/);\n if (!match) {\n return null;\n }\n\n return {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: parseInt(match[3], 10),\n prerelease: match[4],\n build: match[5]\n };\n }\n\n /**\n * Parse a version specification into a range\n * @param spec - Version specification (e.g., \"^1.2.3\", \"~1.2.0\", \"1.2.3\")\n * @returns Parsed version range\n */\n private parseVersionRange(spec: string): VersionRange {\n if (spec === '*' || spec === '' || spec === 'latest') {\n return { type: 'any', raw: spec };\n }\n\n // Tilde range (~1.2.3)\n if (spec.startsWith('~')) {\n const version = this.parseVersion(spec.substring(1));\n return {\n type: 'tilde',\n version: version || undefined,\n raw: spec\n };\n }\n\n // Caret range (^1.2.3)\n if (spec.startsWith('^')) {\n const version = this.parseVersion(spec.substring(1));\n return {\n type: 'caret',\n version: version || undefined,\n raw: spec\n };\n }\n\n // Exact version\n const version = this.parseVersion(spec);\n if (version) {\n return {\n type: 'exact',\n version,\n raw: spec\n };\n }\n\n // Default to any if we can't parse\n return { type: 'any', raw: spec };\n }\n\n /**\n * Check if a version satisfies a version range\n * @param version - Version to check\n * @param range - Version range specification\n * @returns True if version satisfies range\n */\n private versionSatisfiesRange(version: ParsedVersion, range: VersionRange): boolean {\n if (range.type === 'any') {\n return true;\n }\n\n if (!range.version) {\n return false;\n }\n\n const rangeVer = range.version;\n\n switch (range.type) {\n case 'exact':\n return version.major === rangeVer.major &&\n version.minor === rangeVer.minor &&\n version.patch === rangeVer.patch;\n\n case 'tilde': // ~1.2.3 means >=1.2.3 <1.3.0\n if (version.major !== rangeVer.major) return false;\n if (version.minor !== rangeVer.minor) return false;\n return version.patch >= rangeVer.patch;\n\n case 'caret': // ^1.2.3 means >=1.2.3 <2.0.0 (for 1.x.x)\n if (rangeVer.major === 0) {\n // ^0.x.y behaves like ~0.x.y\n if (version.major !== 0) return false;\n if (rangeVer.minor === 0) {\n // ^0.0.x means exactly 0.0.x\n return version.minor === 0 && version.patch === rangeVer.patch;\n }\n // ^0.x.y means >=0.x.y <0.(x+1).0\n if (version.minor !== rangeVer.minor) return false;\n return version.patch >= rangeVer.patch;\n }\n // Normal caret for major > 0\n if (version.major !== rangeVer.major) return false;\n if (version.minor < rangeVer.minor) return false;\n if (version.minor === rangeVer.minor) {\n return version.patch >= rangeVer.patch;\n }\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Compare two versions for sorting\n * @returns -1 if a < b, 0 if a === b, 1 if a > b\n */\n private compareVersions(a: ParsedVersion, b: ParsedVersion): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n if (a.patch !== b.patch) return a.patch - b.patch;\n \n // Handle prerelease versions\n if (!a.prerelease && b.prerelease) return 1; // a is newer\n if (a.prerelease && !b.prerelease) return -1; // b is newer\n if (a.prerelease && b.prerelease) {\n return a.prerelease.localeCompare(b.prerelease);\n }\n \n return 0;\n }\n\n /**\n * Resolve version conflicts using NPM-style resolution\n * @param requirements - Array of version requirements\n * @param availableLibraries - All available libraries to choose from\n * @returns Resolved version information\n */\n ResolveVersionConflicts(\n requirements: VersionRequirement[],\n availableLibraries: MJComponentLibraryEntity[]\n ): ResolvedVersion {\n if (requirements.length === 0) {\n throw new Error('No version requirements provided');\n }\n\n const libraryName = requirements[0].library;\n const warnings: string[] = [];\n\n // Find all available versions for this library\n const availableVersions = availableLibraries\n .filter(lib => lib.Name === libraryName && lib.Version)\n .map(lib => ({\n library: lib,\n version: this.parseVersion(lib.Version!)\n }))\n .filter(item => item.version !== null)\n .sort((a, b) => this.compareVersions(b.version!, a.version!)); // Sort descending\n\n if (availableVersions.length === 0) {\n throw new Error(`No versions available for library '${libraryName}'`);\n }\n\n // Parse all requirements\n const ranges = requirements.map(req => ({\n ...req,\n range: this.parseVersionRange(req.versionSpec)\n }));\n\n // Find the highest version that satisfies all requirements\n for (const { library, version } of availableVersions) {\n let satisfiesAll = true;\n const satisfiedRequirements: VersionRequirement[] = [];\n\n for (const req of ranges) {\n if (this.versionSatisfiesRange(version!, req.range)) {\n satisfiedRequirements.push(req);\n } else {\n satisfiesAll = false;\n warnings.push(\n `Version ${library.Version} does not satisfy '${req.versionSpec}' required by ${req.requestedBy}`\n );\n break;\n }\n }\n\n if (satisfiesAll) {\n return {\n library: libraryName,\n version: library.Version!,\n satisfies: requirements,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n }\n\n // No version satisfies all requirements\n // Return the latest version with warnings\n const latest = availableVersions[0];\n warnings.push(\n `Could not find a version that satisfies all requirements. Using ${latest.library.Version}`\n );\n\n return {\n library: libraryName,\n version: latest.library.Version!,\n satisfies: [],\n warnings\n };\n }\n\n /** @deprecated Use {@link ResolveVersionConflicts}. */\n resolveVersionConflicts(\n requirements: VersionRequirement[],\n availableLibraries: MJComponentLibraryEntity[]\n ): ResolvedVersion {\n return this.ResolveVersionConflicts(requirements, availableLibraries);\n }\n\n /**\n * Get the load order for a set of requested libraries\n * @param requestedLibs - Library names requested\n * @param allLibs - All available libraries\n * @param options - Resolution options\n * @returns Load order result\n */\n GetLoadOrder(\n requestedLibs: string[],\n allLibs: MJComponentLibraryEntity[],\n options?: DependencyResolutionOptions\n ): LoadOrderResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Filter out null, undefined, and non-string values from requestedLibs\n const validRequestedLibs = requestedLibs.filter(lib => {\n if (!lib || typeof lib !== 'string') {\n const warning = `Invalid library name: ${lib} (type: ${typeof lib})`;\n warnings.push(warning);\n if (this.debug || options?.debug) {\n console.warn(`⚠️ ${warning}`);\n }\n return false;\n }\n return true;\n });\n\n if (this.debug || options?.debug) {\n console.log('🔍 Getting load order for requested libraries:');\n console.log(' 📝 Requested (raw):', requestedLibs);\n console.log(' 📝 Requested (valid):', validRequestedLibs);\n console.log(' 📚 Total available libraries:', allLibs.length);\n }\n\n // Build a map for quick lookup (case-insensitive)\n const libMap = new Map<string, MJComponentLibraryEntity[]>();\n for (const lib of allLibs) {\n if (!lib?.Name) {\n warnings.push(`Library with missing name found in available libraries`);\n continue;\n }\n const key = lib.Name.toLowerCase();\n if (!libMap.has(key)) {\n libMap.set(key, []);\n }\n libMap.get(key)!.push(lib);\n }\n\n // Collect all libraries needed (requested + their dependencies)\n const needed = new Set<string>();\n const toProcess = [...validRequestedLibs];\n const processed = new Set<string>();\n const versionRequirements = new Map<string, VersionRequirement[]>();\n let depth = 0;\n const maxDepth = options?.maxDepth || 10;\n\n while (toProcess.length > 0 && depth < maxDepth) {\n const current = toProcess.shift()!;\n \n // Extra safety check for null/undefined\n if (!current || typeof current !== 'string') {\n const warning = `Unexpected invalid library name during processing: ${current}`;\n warnings.push(warning);\n if (this.debug || options?.debug) {\n console.warn(`⚠️ ${warning}`);\n }\n continue;\n }\n \n if (processed.has(current)) continue;\n\n processed.add(current);\n needed.add(current);\n\n // Find the library (case-insensitive lookup)\n const libVersions = libMap.get(current.toLowerCase());\n if (!libVersions || libVersions.length === 0) {\n if (this.debug || options?.debug) {\n console.log(` ❌ Library '${current}' not found in available libraries`);\n }\n errors.push(`Library '${current}' not found`);\n continue;\n }\n\n // For now, use the first version found (should be resolved properly)\n const lib = libVersions[0];\n const deps = this.ParseDependencies(lib.Dependencies);\n \n if ((this.debug || options?.debug) && deps.size > 0) {\n console.log(` 📌 ${current} requires:`, Array.from(deps.entries()));\n }\n\n // Process dependencies\n for (const [depName, depVersion] of deps) {\n needed.add(depName);\n \n // Track version requirements\n if (!versionRequirements.has(depName)) {\n versionRequirements.set(depName, []);\n }\n versionRequirements.get(depName)!.push({\n library: depName,\n versionSpec: depVersion,\n requestedBy: current\n });\n\n if (!processed.has(depName)) {\n toProcess.push(depName);\n }\n }\n\n depth++;\n }\n\n if (depth >= maxDepth) {\n warnings.push(`Maximum dependency depth (${maxDepth}) reached`);\n }\n\n // Resolve version conflicts for each library\n const resolvedLibraries: MJComponentLibraryEntity[] = [];\n for (const libName of needed) {\n const requirements = versionRequirements.get(libName) || [];\n const versions = libMap.get(libName.toLowerCase()) || [];\n \n if (versions.length === 0) {\n errors.push(`Library '${libName}' not found`);\n continue;\n }\n\n if (requirements.length > 0) {\n try {\n const resolved = this.ResolveVersionConflicts(requirements, versions);\n const selectedLib = versions.find(lib => lib.Version === resolved.version);\n if (selectedLib) {\n resolvedLibraries.push(selectedLib);\n if (resolved.warnings) {\n warnings.push(...resolved.warnings);\n }\n }\n } catch (error: any) {\n errors.push(error.message);\n // Use first available version as fallback\n resolvedLibraries.push(versions[0]);\n }\n } else {\n // No specific requirements, use the first (default) version\n resolvedLibraries.push(versions[0]);\n }\n }\n\n // Build dependency graph with resolved libraries\n const graph = this.BuildDependencyGraph(resolvedLibraries);\n\n // Check for cycles\n const cycles = this.DetectCycles(graph);\n if (cycles.length > 0) {\n errors.push(`Circular dependencies detected: ${cycles.map(c => c.join(' -> ')).join(', ')}`);\n return {\n success: false,\n cycles,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n\n // Perform topological sort\n const sorted = this.TopologicalSort(graph);\n\n if (this.debug || options?.debug) {\n console.log('✅ Load order determined:', sorted.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n return {\n success: errors.length === 0,\n order: sorted,\n errors: errors.length > 0 ? errors : undefined,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n\n /** @deprecated Use {@link GetLoadOrder}. */\n getLoadOrder(\n requestedLibs: string[],\n allLibs: MJComponentLibraryEntity[],\n options?: DependencyResolutionOptions\n ): LoadOrderResult {\n return this.GetLoadOrder(requestedLibs, allLibs, options);\n }\n\n /**\n * Get direct dependencies of a library\n * @param library - Library to get dependencies for\n * @returns Map of dependency names to version specs\n */\n GetDirectDependencies(library: MJComponentLibraryEntity): Map<string, string> {\n return this.ParseDependencies(library.Dependencies);\n }\n\n /** @deprecated Use {@link GetDirectDependencies}. */\n getDirectDependencies(library: MJComponentLibraryEntity): Map<string, string> {\n return this.GetDirectDependencies(library);\n }\n\n /**\n * Get all transitive dependencies of a library\n * @param libraryName - Library name to analyze\n * @param allLibs - All available libraries\n * @param maxDepth - Maximum depth to traverse\n * @returns Set of all dependency names (including transitive)\n */\n GetTransitiveDependencies(\n libraryName: string,\n allLibs: MJComponentLibraryEntity[],\n maxDepth: number = 10\n ): Set<string> {\n const dependencies = new Set<string>();\n const toProcess = [libraryName];\n const processed = new Set<string>();\n let depth = 0;\n\n // Build lookup map (case-insensitive)\n const libMap = new Map<string, MJComponentLibraryEntity>();\n for (const lib of allLibs) {\n libMap.set(lib.Name.toLowerCase(), lib);\n }\n\n while (toProcess.length > 0 && depth < maxDepth) {\n const current = toProcess.shift()!;\n if (processed.has(current)) continue;\n\n processed.add(current);\n const lib = libMap.get(current.toLowerCase());\n if (!lib) continue;\n\n const deps = this.ParseDependencies(lib.Dependencies);\n for (const [depName] of deps) {\n dependencies.add(depName);\n if (!processed.has(depName)) {\n toProcess.push(depName);\n }\n }\n\n depth++;\n }\n\n return dependencies;\n }\n\n /** @deprecated Use {@link GetTransitiveDependencies}. */\n getTransitiveDependencies(\n libraryName: string,\n allLibs: MJComponentLibraryEntity[],\n maxDepth: number = 10\n ): Set<string> {\n return this.GetTransitiveDependencies(libraryName, allLibs, maxDepth);\n }\n}"]}
|
|
@@ -26,10 +26,15 @@ export declare class LibraryLoader {
|
|
|
26
26
|
private static loadedLibraryStates;
|
|
27
27
|
private static dependencyResolver;
|
|
28
28
|
static enableProgressiveDelay: boolean;
|
|
29
|
+
static PreloadCoreScripts(debug?: boolean): void;
|
|
29
30
|
static preloadCoreScripts(debug?: boolean): void;
|
|
31
|
+
static LoadAllLibraries(config?: LibraryConfiguration, additionalLibraries?: ExternalLibraryConfig[], options?: {
|
|
32
|
+
debug?: boolean;
|
|
33
|
+
}): Promise<LibraryLoadResult>;
|
|
30
34
|
static loadAllLibraries(config?: LibraryConfiguration, additionalLibraries?: ExternalLibraryConfig[], options?: {
|
|
31
35
|
debug?: boolean;
|
|
32
36
|
}): Promise<LibraryLoadResult>;
|
|
37
|
+
static LoadLibrariesFromConfig(options?: ConfigLoadOptions, debug?: boolean): Promise<LibraryLoadResult>;
|
|
33
38
|
static loadLibrariesFromConfig(options?: ConfigLoadOptions, debug?: boolean): Promise<LibraryLoadResult>;
|
|
34
39
|
static loadLibraries(options: LibraryLoadOptions): Promise<LibraryLoadResult>;
|
|
35
40
|
private static loadScript;
|
|
@@ -39,12 +44,19 @@ export declare class LibraryLoader {
|
|
|
39
44
|
private static waitForGlobalVariable;
|
|
40
45
|
private static loadCSS;
|
|
41
46
|
private static waitForScriptLoad;
|
|
47
|
+
static GetLoadedResources(): Map<string, LoadedResource>;
|
|
42
48
|
static getLoadedResources(): Map<string, LoadedResource>;
|
|
49
|
+
static ClearCache(): void;
|
|
43
50
|
static clearCache(): void;
|
|
51
|
+
static LoadLibraryWithDependencies(libraryName: string, allLibraries: MJComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<any>;
|
|
44
52
|
static loadLibraryWithDependencies(libraryName: string, allLibraries: MJComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<any>;
|
|
53
|
+
static LoadLibrariesWithDependencies(libraryNames: string[], allLibraries: MJComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<Map<string, any>>;
|
|
45
54
|
static loadLibrariesWithDependencies(libraryNames: string[], allLibraries: MJComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<Map<string, any>>;
|
|
55
|
+
static GetLoadedLibraryStates(): Map<string, LoadedLibraryState>;
|
|
46
56
|
static getLoadedLibraryStates(): Map<string, LoadedLibraryState>;
|
|
57
|
+
static IsLibraryLoaded(libraryName: string): boolean;
|
|
47
58
|
static isLibraryLoaded(libraryName: string): boolean;
|
|
59
|
+
static GetLoadedLibraryVersion(libraryName: string): string | undefined;
|
|
48
60
|
static getLoadedLibraryVersion(libraryName: string): string | undefined;
|
|
49
61
|
}
|
|
50
62
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-loader.d.ts","sourceRoot":"","sources":["../../src/utilities/library-loader.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG/H,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAS5F,UAAU,cAAc;IACtB,OAAO,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;CACvB;AAMD,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,eAAe,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzD;AAKD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAKD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAqC;IACnE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAyC;IAC3E,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAmD;IAKpF,OAAc,sBAAsB,EAAE,OAAO,CAAS;IActD,MAAM,CAAC,kBAAkB,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"library-loader.d.ts","sourceRoot":"","sources":["../../src/utilities/library-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StandardLibraryManager } from './standard-libraries.js';
|
|
2
|
-
import {
|
|
2
|
+
import { GetCoreRuntimeLibraries, IsCoreRuntimeLibrary } from './core-libraries.js';
|
|
3
3
|
import { resourceManager } from './resource-manager.js';
|
|
4
4
|
import { LibraryDependencyResolver } from './library-dependency-resolver.js';
|
|
5
5
|
const LIBRARY_LOADER_COMPONENT_ID = 'mj-react-runtime-library-loader-singleton';
|
|
@@ -8,10 +8,10 @@ export class LibraryLoader {
|
|
|
8
8
|
static { this.loadedLibraryStates = new Map(); }
|
|
9
9
|
static { this.dependencyResolver = new LibraryDependencyResolver({ debug: false }); }
|
|
10
10
|
static { this.enableProgressiveDelay = false; }
|
|
11
|
-
static
|
|
11
|
+
static PreloadCoreScripts(debug = false) {
|
|
12
12
|
if (typeof document === 'undefined')
|
|
13
13
|
return;
|
|
14
|
-
const coreLibraries =
|
|
14
|
+
const coreLibraries = GetCoreRuntimeLibraries(debug);
|
|
15
15
|
for (const lib of coreLibraries) {
|
|
16
16
|
if (document.querySelector(`link[href="${lib.cdnUrl}"]`) ||
|
|
17
17
|
document.querySelector(`script[src="${lib.cdnUrl}"]`)) {
|
|
@@ -24,7 +24,10 @@ export class LibraryLoader {
|
|
|
24
24
|
document.head.appendChild(link);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
static
|
|
27
|
+
static preloadCoreScripts(debug = false) {
|
|
28
|
+
return this.PreloadCoreScripts(debug);
|
|
29
|
+
}
|
|
30
|
+
static async LoadAllLibraries(config, additionalLibraries, options) {
|
|
28
31
|
if (config) {
|
|
29
32
|
StandardLibraryManager.setConfiguration(config);
|
|
30
33
|
}
|
|
@@ -39,10 +42,13 @@ export class LibraryLoader {
|
|
|
39
42
|
};
|
|
40
43
|
StandardLibraryManager.setConfiguration(mergedConfig);
|
|
41
44
|
}
|
|
42
|
-
return this.
|
|
45
|
+
return this.LoadLibrariesFromConfig(undefined, options?.debug);
|
|
43
46
|
}
|
|
44
|
-
static async
|
|
45
|
-
|
|
47
|
+
static async loadAllLibraries(config, additionalLibraries, options) {
|
|
48
|
+
return this.LoadAllLibraries(config, additionalLibraries, options);
|
|
49
|
+
}
|
|
50
|
+
static async LoadLibrariesFromConfig(options, debug) {
|
|
51
|
+
const coreLibraries = GetCoreRuntimeLibraries(debug);
|
|
46
52
|
const reactLib = coreLibraries.find(lib => lib.globalVariable === 'React');
|
|
47
53
|
const reactDOMLib = coreLibraries.find(lib => lib.globalVariable === 'ReactDOM');
|
|
48
54
|
const babelLib = coreLibraries.find(lib => lib.globalVariable === 'Babel');
|
|
@@ -76,7 +82,7 @@ export class LibraryLoader {
|
|
|
76
82
|
}
|
|
77
83
|
const config = StandardLibraryManager.getConfiguration();
|
|
78
84
|
const enabledLibraries = StandardLibraryManager.getEnabledLibraries();
|
|
79
|
-
let pluginLibraries = enabledLibraries.filter(lib => !
|
|
85
|
+
let pluginLibraries = enabledLibraries.filter(lib => !IsCoreRuntimeLibrary(lib.id));
|
|
80
86
|
if (options) {
|
|
81
87
|
if (options.categories) {
|
|
82
88
|
pluginLibraries = pluginLibraries.filter(lib => options.categories.includes(lib.category));
|
|
@@ -103,6 +109,9 @@ export class LibraryLoader {
|
|
|
103
109
|
libraries
|
|
104
110
|
};
|
|
105
111
|
}
|
|
112
|
+
static async loadLibrariesFromConfig(options, debug) {
|
|
113
|
+
return this.LoadLibrariesFromConfig(options, debug);
|
|
114
|
+
}
|
|
106
115
|
static async loadLibraries(options) {
|
|
107
116
|
const { loadCore = true, loadUI = true, loadCSS = true, customLibraries = [] } = options;
|
|
108
117
|
const categoriesToLoad = ['runtime'];
|
|
@@ -112,7 +121,7 @@ export class LibraryLoader {
|
|
|
112
121
|
if (loadUI) {
|
|
113
122
|
categoriesToLoad.push('ui');
|
|
114
123
|
}
|
|
115
|
-
const result = await this.
|
|
124
|
+
const result = await this.LoadLibrariesFromConfig({
|
|
116
125
|
categories: categoriesToLoad
|
|
117
126
|
});
|
|
118
127
|
if (customLibraries.length > 0) {
|
|
@@ -352,10 +361,13 @@ export class LibraryLoader {
|
|
|
352
361
|
};
|
|
353
362
|
resourceManager.addEventListener(LIBRARY_LOADER_COMPONENT_ID, script, 'load', loadHandler, { once: true });
|
|
354
363
|
}
|
|
355
|
-
static
|
|
364
|
+
static GetLoadedResources() {
|
|
356
365
|
return this.loadedResources;
|
|
357
366
|
}
|
|
358
|
-
static
|
|
367
|
+
static getLoadedResources() {
|
|
368
|
+
return this.GetLoadedResources();
|
|
369
|
+
}
|
|
370
|
+
static ClearCache() {
|
|
359
371
|
this.loadedResources.forEach((resource, url) => {
|
|
360
372
|
if (resource.element && resource.element.parentNode) {
|
|
361
373
|
resource.element.parentNode.removeChild(resource.element);
|
|
@@ -365,7 +377,10 @@ export class LibraryLoader {
|
|
|
365
377
|
this.loadedLibraryStates.clear();
|
|
366
378
|
resourceManager.cleanupComponent(LIBRARY_LOADER_COMPONENT_ID);
|
|
367
379
|
}
|
|
368
|
-
static
|
|
380
|
+
static clearCache() {
|
|
381
|
+
return this.ClearCache();
|
|
382
|
+
}
|
|
383
|
+
static async LoadLibraryWithDependencies(libraryName, allLibraries, requestedBy = 'user', options) {
|
|
369
384
|
const debug = options?.debug || false;
|
|
370
385
|
if (debug) {
|
|
371
386
|
console.log(`📚 Loading library '${libraryName}' with dependencies`);
|
|
@@ -441,7 +456,10 @@ export class LibraryLoader {
|
|
|
441
456
|
}
|
|
442
457
|
return window[targetLibrary.GlobalVariable];
|
|
443
458
|
}
|
|
444
|
-
static async
|
|
459
|
+
static async loadLibraryWithDependencies(libraryName, allLibraries, requestedBy = 'user', options) {
|
|
460
|
+
return this.LoadLibraryWithDependencies(libraryName, allLibraries, requestedBy, options);
|
|
461
|
+
}
|
|
462
|
+
static async LoadLibrariesWithDependencies(libraryNames, allLibraries, requestedBy = 'user', options) {
|
|
445
463
|
const debug = options?.debug || false;
|
|
446
464
|
const result = new Map();
|
|
447
465
|
if (debug) {
|
|
@@ -531,14 +549,26 @@ export class LibraryLoader {
|
|
|
531
549
|
}
|
|
532
550
|
return result;
|
|
533
551
|
}
|
|
534
|
-
static
|
|
552
|
+
static async loadLibrariesWithDependencies(libraryNames, allLibraries, requestedBy = 'user', options) {
|
|
553
|
+
return this.LoadLibrariesWithDependencies(libraryNames, allLibraries, requestedBy, options);
|
|
554
|
+
}
|
|
555
|
+
static GetLoadedLibraryStates() {
|
|
535
556
|
return new Map(this.loadedLibraryStates);
|
|
536
557
|
}
|
|
537
|
-
static
|
|
558
|
+
static getLoadedLibraryStates() {
|
|
559
|
+
return this.GetLoadedLibraryStates();
|
|
560
|
+
}
|
|
561
|
+
static IsLibraryLoaded(libraryName) {
|
|
538
562
|
return this.loadedLibraryStates.has(libraryName);
|
|
539
563
|
}
|
|
540
|
-
static
|
|
564
|
+
static isLibraryLoaded(libraryName) {
|
|
565
|
+
return this.IsLibraryLoaded(libraryName);
|
|
566
|
+
}
|
|
567
|
+
static GetLoadedLibraryVersion(libraryName) {
|
|
541
568
|
return this.loadedLibraryStates.get(libraryName)?.version;
|
|
542
569
|
}
|
|
570
|
+
static getLoadedLibraryVersion(libraryName) {
|
|
571
|
+
return this.GetLoadedLibraryVersion(libraryName);
|
|
572
|
+
}
|
|
543
573
|
}
|
|
544
574
|
//# sourceMappingURL=library-loader.js.map
|