@memberjunction/react-runtime 2.92.0 → 2.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +14 -16
- package/CHANGELOG.md +31 -0
- package/README.md +180 -2
- package/dist/compiler/babel-config.js.map +1 -1
- package/dist/compiler/component-compiler.d.ts.map +1 -1
- package/dist/compiler/component-compiler.js +206 -57
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/compiler/index.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -5
- package/dist/index.js.map +1 -1
- package/dist/registry/component-registry-service.d.ts +37 -0
- package/dist/registry/component-registry-service.d.ts.map +1 -0
- package/dist/registry/component-registry-service.js +319 -0
- package/dist/registry/component-registry-service.js.map +1 -0
- package/dist/registry/component-registry.d.ts +4 -3
- package/dist/registry/component-registry.d.ts.map +1 -1
- package/dist/registry/component-registry.js.map +1 -1
- package/dist/registry/component-resolver.d.ts +12 -2
- package/dist/registry/component-resolver.d.ts.map +1 -1
- package/dist/registry/component-resolver.js +96 -12
- package/dist/registry/component-resolver.js.map +1 -1
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +3 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/registry-provider.d.ts +54 -0
- package/dist/registry/registry-provider.d.ts.map +1 -0
- package/dist/registry/registry-provider.js +3 -0
- package/dist/registry/registry-provider.js.map +1 -0
- package/dist/runtime/component-hierarchy.d.ts.map +1 -1
- package/dist/runtime/component-hierarchy.js +8 -2
- package/dist/runtime/component-hierarchy.js.map +1 -1
- package/dist/runtime/error-boundary.js.map +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/prop-builder.d.ts +2 -2
- package/dist/runtime/prop-builder.d.ts.map +1 -1
- package/dist/runtime/prop-builder.js +32 -14
- package/dist/runtime/prop-builder.js.map +1 -1
- package/dist/runtime/react-root-manager.js.map +1 -1
- package/dist/runtime.umd.js +1 -1
- package/dist/types/dependency-types.d.ts +62 -0
- package/dist/types/dependency-types.d.ts.map +1 -0
- package/dist/types/dependency-types.js +3 -0
- package/dist/types/dependency-types.js.map +1 -0
- package/dist/types/index.d.ts +8 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/library-config.js.map +1 -1
- package/dist/utilities/cache-manager.js.map +1 -1
- package/dist/utilities/component-error-analyzer.js.map +1 -1
- package/dist/utilities/component-styles.js.map +1 -1
- package/dist/utilities/core-libraries.js.map +1 -1
- package/dist/utilities/index.d.ts +1 -0
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +1 -0
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/library-dependency-resolver.d.ts +19 -0
- package/dist/utilities/library-dependency-resolver.d.ts.map +1 -0
- package/dist/utilities/library-dependency-resolver.js +410 -0
- package/dist/utilities/library-dependency-resolver.js.map +1 -0
- package/dist/utilities/library-loader.d.ts +9 -0
- package/dist/utilities/library-loader.d.ts.map +1 -1
- package/dist/utilities/library-loader.js +143 -0
- package/dist/utilities/library-loader.js.map +1 -1
- package/dist/utilities/library-registry.js.map +1 -1
- package/dist/utilities/resource-manager.js.map +1 -1
- package/dist/utilities/standard-libraries.js.map +1 -1
- package/package.json +5 -6
- package/src/compiler/component-compiler.ts +227 -77
- package/src/index.ts +21 -5
- package/src/registry/component-registry-service.ts +578 -0
- package/src/registry/component-registry.ts +8 -7
- package/src/registry/component-resolver.ts +146 -16
- package/src/registry/index.ts +9 -0
- package/src/registry/registry-provider.ts +119 -0
- package/src/runtime/component-hierarchy.ts +13 -5
- package/src/runtime/prop-builder.ts +38 -18
- package/src/types/dependency-types.ts +110 -0
- package/src/types/index.ts +17 -21
- package/src/utilities/index.ts +1 -0
- package/src/utilities/library-dependency-resolver.ts +603 -0
- package/src/utilities/library-loader.ts +252 -0
- package/tsconfig.json +2 -1
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LibraryDependencyResolver = void 0;
|
|
4
|
+
class LibraryDependencyResolver {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.debug = false;
|
|
7
|
+
this.debug = options?.debug || false;
|
|
8
|
+
}
|
|
9
|
+
parseDependencies(json) {
|
|
10
|
+
const dependencies = new Map();
|
|
11
|
+
if (!json || json.trim() === '') {
|
|
12
|
+
return dependencies;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(json);
|
|
16
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
17
|
+
for (const [name, version] of Object.entries(parsed)) {
|
|
18
|
+
if (typeof version === 'string') {
|
|
19
|
+
dependencies.set(name, version);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error('Failed to parse dependencies JSON:', error);
|
|
26
|
+
}
|
|
27
|
+
return dependencies;
|
|
28
|
+
}
|
|
29
|
+
buildDependencyGraph(libraries) {
|
|
30
|
+
const nodes = new Map();
|
|
31
|
+
const roots = new Set();
|
|
32
|
+
for (const library of libraries) {
|
|
33
|
+
const dependencies = this.parseDependencies(library.Dependencies);
|
|
34
|
+
nodes.set(library.Name, {
|
|
35
|
+
library,
|
|
36
|
+
dependencies,
|
|
37
|
+
dependents: new Set()
|
|
38
|
+
});
|
|
39
|
+
roots.add(library.Name);
|
|
40
|
+
}
|
|
41
|
+
for (const [name, node] of nodes) {
|
|
42
|
+
for (const [depName, depVersion] of node.dependencies) {
|
|
43
|
+
const depNode = nodes.get(depName);
|
|
44
|
+
if (depNode) {
|
|
45
|
+
roots.delete(depName);
|
|
46
|
+
depNode.dependents.add(name);
|
|
47
|
+
}
|
|
48
|
+
else if (this.debug) {
|
|
49
|
+
console.warn(`Dependency '${depName}' not found for library '${name}'`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { nodes, roots };
|
|
54
|
+
}
|
|
55
|
+
detectCycles(graph) {
|
|
56
|
+
const cycles = [];
|
|
57
|
+
const visited = new Set();
|
|
58
|
+
const recursionStack = new Set();
|
|
59
|
+
const path = [];
|
|
60
|
+
const detectCyclesUtil = (nodeName) => {
|
|
61
|
+
visited.add(nodeName);
|
|
62
|
+
recursionStack.add(nodeName);
|
|
63
|
+
path.push(nodeName);
|
|
64
|
+
const node = graph.nodes.get(nodeName);
|
|
65
|
+
if (node) {
|
|
66
|
+
for (const [depName] of node.dependencies) {
|
|
67
|
+
if (!visited.has(depName)) {
|
|
68
|
+
detectCyclesUtil(depName);
|
|
69
|
+
}
|
|
70
|
+
else if (recursionStack.has(depName)) {
|
|
71
|
+
const cycleStartIndex = path.indexOf(depName);
|
|
72
|
+
const cycle = [...path.slice(cycleStartIndex), depName];
|
|
73
|
+
cycles.push(cycle);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
path.pop();
|
|
78
|
+
recursionStack.delete(nodeName);
|
|
79
|
+
};
|
|
80
|
+
for (const nodeName of graph.nodes.keys()) {
|
|
81
|
+
if (!visited.has(nodeName)) {
|
|
82
|
+
detectCyclesUtil(nodeName);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return cycles;
|
|
86
|
+
}
|
|
87
|
+
topologicalSort(graph) {
|
|
88
|
+
const result = [];
|
|
89
|
+
const visited = new Set();
|
|
90
|
+
const tempMarked = new Set();
|
|
91
|
+
const visit = (nodeName) => {
|
|
92
|
+
if (tempMarked.has(nodeName)) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (visited.has(nodeName)) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
tempMarked.add(nodeName);
|
|
99
|
+
const node = graph.nodes.get(nodeName);
|
|
100
|
+
if (node) {
|
|
101
|
+
for (const [depName] of node.dependencies) {
|
|
102
|
+
if (graph.nodes.has(depName)) {
|
|
103
|
+
if (!visit(depName)) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
result.push(node.library);
|
|
109
|
+
}
|
|
110
|
+
tempMarked.delete(nodeName);
|
|
111
|
+
visited.add(nodeName);
|
|
112
|
+
return true;
|
|
113
|
+
};
|
|
114
|
+
for (const nodeName of graph.nodes.keys()) {
|
|
115
|
+
if (!visited.has(nodeName)) {
|
|
116
|
+
if (!visit(nodeName)) {
|
|
117
|
+
console.error(`Cycle detected involving library: ${nodeName}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
parseVersion(version) {
|
|
124
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([^+]+))?(?:\+(.+))?$/);
|
|
125
|
+
if (!match) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
major: parseInt(match[1], 10),
|
|
130
|
+
minor: parseInt(match[2], 10),
|
|
131
|
+
patch: parseInt(match[3], 10),
|
|
132
|
+
prerelease: match[4],
|
|
133
|
+
build: match[5]
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
parseVersionRange(spec) {
|
|
137
|
+
if (spec === '*' || spec === '' || spec === 'latest') {
|
|
138
|
+
return { type: 'any', raw: spec };
|
|
139
|
+
}
|
|
140
|
+
if (spec.startsWith('~')) {
|
|
141
|
+
const version = this.parseVersion(spec.substring(1));
|
|
142
|
+
return {
|
|
143
|
+
type: 'tilde',
|
|
144
|
+
version: version || undefined,
|
|
145
|
+
raw: spec
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (spec.startsWith('^')) {
|
|
149
|
+
const version = this.parseVersion(spec.substring(1));
|
|
150
|
+
return {
|
|
151
|
+
type: 'caret',
|
|
152
|
+
version: version || undefined,
|
|
153
|
+
raw: spec
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const version = this.parseVersion(spec);
|
|
157
|
+
if (version) {
|
|
158
|
+
return {
|
|
159
|
+
type: 'exact',
|
|
160
|
+
version,
|
|
161
|
+
raw: spec
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return { type: 'any', raw: spec };
|
|
165
|
+
}
|
|
166
|
+
versionSatisfiesRange(version, range) {
|
|
167
|
+
if (range.type === 'any') {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (!range.version) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
const rangeVer = range.version;
|
|
174
|
+
switch (range.type) {
|
|
175
|
+
case 'exact':
|
|
176
|
+
return version.major === rangeVer.major &&
|
|
177
|
+
version.minor === rangeVer.minor &&
|
|
178
|
+
version.patch === rangeVer.patch;
|
|
179
|
+
case 'tilde':
|
|
180
|
+
if (version.major !== rangeVer.major)
|
|
181
|
+
return false;
|
|
182
|
+
if (version.minor !== rangeVer.minor)
|
|
183
|
+
return false;
|
|
184
|
+
return version.patch >= rangeVer.patch;
|
|
185
|
+
case 'caret':
|
|
186
|
+
if (rangeVer.major === 0) {
|
|
187
|
+
if (version.major !== 0)
|
|
188
|
+
return false;
|
|
189
|
+
if (rangeVer.minor === 0) {
|
|
190
|
+
return version.minor === 0 && version.patch === rangeVer.patch;
|
|
191
|
+
}
|
|
192
|
+
if (version.minor !== rangeVer.minor)
|
|
193
|
+
return false;
|
|
194
|
+
return version.patch >= rangeVer.patch;
|
|
195
|
+
}
|
|
196
|
+
if (version.major !== rangeVer.major)
|
|
197
|
+
return false;
|
|
198
|
+
if (version.minor < rangeVer.minor)
|
|
199
|
+
return false;
|
|
200
|
+
if (version.minor === rangeVer.minor) {
|
|
201
|
+
return version.patch >= rangeVer.patch;
|
|
202
|
+
}
|
|
203
|
+
return true;
|
|
204
|
+
default:
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
compareVersions(a, b) {
|
|
209
|
+
if (a.major !== b.major)
|
|
210
|
+
return a.major - b.major;
|
|
211
|
+
if (a.minor !== b.minor)
|
|
212
|
+
return a.minor - b.minor;
|
|
213
|
+
if (a.patch !== b.patch)
|
|
214
|
+
return a.patch - b.patch;
|
|
215
|
+
if (!a.prerelease && b.prerelease)
|
|
216
|
+
return 1;
|
|
217
|
+
if (a.prerelease && !b.prerelease)
|
|
218
|
+
return -1;
|
|
219
|
+
if (a.prerelease && b.prerelease) {
|
|
220
|
+
return a.prerelease.localeCompare(b.prerelease);
|
|
221
|
+
}
|
|
222
|
+
return 0;
|
|
223
|
+
}
|
|
224
|
+
resolveVersionConflicts(requirements, availableLibraries) {
|
|
225
|
+
if (requirements.length === 0) {
|
|
226
|
+
throw new Error('No version requirements provided');
|
|
227
|
+
}
|
|
228
|
+
const libraryName = requirements[0].library;
|
|
229
|
+
const warnings = [];
|
|
230
|
+
const availableVersions = availableLibraries
|
|
231
|
+
.filter(lib => lib.Name === libraryName && lib.Version)
|
|
232
|
+
.map(lib => ({
|
|
233
|
+
library: lib,
|
|
234
|
+
version: this.parseVersion(lib.Version)
|
|
235
|
+
}))
|
|
236
|
+
.filter(item => item.version !== null)
|
|
237
|
+
.sort((a, b) => this.compareVersions(b.version, a.version));
|
|
238
|
+
if (availableVersions.length === 0) {
|
|
239
|
+
throw new Error(`No versions available for library '${libraryName}'`);
|
|
240
|
+
}
|
|
241
|
+
const ranges = requirements.map(req => ({
|
|
242
|
+
...req,
|
|
243
|
+
range: this.parseVersionRange(req.versionSpec)
|
|
244
|
+
}));
|
|
245
|
+
for (const { library, version } of availableVersions) {
|
|
246
|
+
let satisfiesAll = true;
|
|
247
|
+
const satisfiedRequirements = [];
|
|
248
|
+
for (const req of ranges) {
|
|
249
|
+
if (this.versionSatisfiesRange(version, req.range)) {
|
|
250
|
+
satisfiedRequirements.push(req);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
satisfiesAll = false;
|
|
254
|
+
warnings.push(`Version ${library.Version} does not satisfy '${req.versionSpec}' required by ${req.requestedBy}`);
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (satisfiesAll) {
|
|
259
|
+
return {
|
|
260
|
+
library: libraryName,
|
|
261
|
+
version: library.Version,
|
|
262
|
+
satisfies: requirements,
|
|
263
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
const latest = availableVersions[0];
|
|
268
|
+
warnings.push(`Could not find a version that satisfies all requirements. Using ${latest.library.Version}`);
|
|
269
|
+
return {
|
|
270
|
+
library: libraryName,
|
|
271
|
+
version: latest.library.Version,
|
|
272
|
+
satisfies: [],
|
|
273
|
+
warnings
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
getLoadOrder(requestedLibs, allLibs, options) {
|
|
277
|
+
const errors = [];
|
|
278
|
+
const warnings = [];
|
|
279
|
+
if (this.debug || options?.debug) {
|
|
280
|
+
console.log('🔍 Getting load order for:', requestedLibs);
|
|
281
|
+
}
|
|
282
|
+
const libMap = new Map();
|
|
283
|
+
for (const lib of allLibs) {
|
|
284
|
+
if (!libMap.has(lib.Name)) {
|
|
285
|
+
libMap.set(lib.Name, []);
|
|
286
|
+
}
|
|
287
|
+
libMap.get(lib.Name).push(lib);
|
|
288
|
+
}
|
|
289
|
+
const needed = new Set();
|
|
290
|
+
const toProcess = [...requestedLibs];
|
|
291
|
+
const processed = new Set();
|
|
292
|
+
const versionRequirements = new Map();
|
|
293
|
+
let depth = 0;
|
|
294
|
+
const maxDepth = options?.maxDepth || 10;
|
|
295
|
+
while (toProcess.length > 0 && depth < maxDepth) {
|
|
296
|
+
const current = toProcess.shift();
|
|
297
|
+
if (processed.has(current))
|
|
298
|
+
continue;
|
|
299
|
+
processed.add(current);
|
|
300
|
+
needed.add(current);
|
|
301
|
+
const libVersions = libMap.get(current);
|
|
302
|
+
if (!libVersions || libVersions.length === 0) {
|
|
303
|
+
errors.push(`Library '${current}' not found`);
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
const lib = libVersions[0];
|
|
307
|
+
const deps = this.parseDependencies(lib.Dependencies);
|
|
308
|
+
for (const [depName, depVersion] of deps) {
|
|
309
|
+
needed.add(depName);
|
|
310
|
+
if (!versionRequirements.has(depName)) {
|
|
311
|
+
versionRequirements.set(depName, []);
|
|
312
|
+
}
|
|
313
|
+
versionRequirements.get(depName).push({
|
|
314
|
+
library: depName,
|
|
315
|
+
versionSpec: depVersion,
|
|
316
|
+
requestedBy: current
|
|
317
|
+
});
|
|
318
|
+
if (!processed.has(depName)) {
|
|
319
|
+
toProcess.push(depName);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
depth++;
|
|
323
|
+
}
|
|
324
|
+
if (depth >= maxDepth) {
|
|
325
|
+
warnings.push(`Maximum dependency depth (${maxDepth}) reached`);
|
|
326
|
+
}
|
|
327
|
+
const resolvedLibraries = [];
|
|
328
|
+
for (const libName of needed) {
|
|
329
|
+
const requirements = versionRequirements.get(libName) || [];
|
|
330
|
+
const versions = libMap.get(libName) || [];
|
|
331
|
+
if (versions.length === 0) {
|
|
332
|
+
errors.push(`Library '${libName}' not found`);
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
if (requirements.length > 0) {
|
|
336
|
+
try {
|
|
337
|
+
const resolved = this.resolveVersionConflicts(requirements, versions);
|
|
338
|
+
const selectedLib = versions.find(lib => lib.Version === resolved.version);
|
|
339
|
+
if (selectedLib) {
|
|
340
|
+
resolvedLibraries.push(selectedLib);
|
|
341
|
+
if (resolved.warnings) {
|
|
342
|
+
warnings.push(...resolved.warnings);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
errors.push(error.message);
|
|
348
|
+
resolvedLibraries.push(versions[0]);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
resolvedLibraries.push(versions[0]);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
const graph = this.buildDependencyGraph(resolvedLibraries);
|
|
356
|
+
const cycles = this.detectCycles(graph);
|
|
357
|
+
if (cycles.length > 0) {
|
|
358
|
+
errors.push(`Circular dependencies detected: ${cycles.map(c => c.join(' -> ')).join(', ')}`);
|
|
359
|
+
return {
|
|
360
|
+
success: false,
|
|
361
|
+
cycles,
|
|
362
|
+
errors,
|
|
363
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
const sorted = this.topologicalSort(graph);
|
|
367
|
+
if (this.debug || options?.debug) {
|
|
368
|
+
console.log('✅ Load order determined:', sorted.map(lib => `${lib.Name}@${lib.Version}`));
|
|
369
|
+
}
|
|
370
|
+
return {
|
|
371
|
+
success: errors.length === 0,
|
|
372
|
+
order: sorted,
|
|
373
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
374
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
getDirectDependencies(library) {
|
|
378
|
+
return this.parseDependencies(library.Dependencies);
|
|
379
|
+
}
|
|
380
|
+
getTransitiveDependencies(libraryName, allLibs, maxDepth = 10) {
|
|
381
|
+
const dependencies = new Set();
|
|
382
|
+
const toProcess = [libraryName];
|
|
383
|
+
const processed = new Set();
|
|
384
|
+
let depth = 0;
|
|
385
|
+
const libMap = new Map();
|
|
386
|
+
for (const lib of allLibs) {
|
|
387
|
+
libMap.set(lib.Name, lib);
|
|
388
|
+
}
|
|
389
|
+
while (toProcess.length > 0 && depth < maxDepth) {
|
|
390
|
+
const current = toProcess.shift();
|
|
391
|
+
if (processed.has(current))
|
|
392
|
+
continue;
|
|
393
|
+
processed.add(current);
|
|
394
|
+
const lib = libMap.get(current);
|
|
395
|
+
if (!lib)
|
|
396
|
+
continue;
|
|
397
|
+
const deps = this.parseDependencies(lib.Dependencies);
|
|
398
|
+
for (const [depName] of deps) {
|
|
399
|
+
dependencies.add(depName);
|
|
400
|
+
if (!processed.has(depName)) {
|
|
401
|
+
toProcess.push(depName);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
depth++;
|
|
405
|
+
}
|
|
406
|
+
return dependencies;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
exports.LibraryDependencyResolver = LibraryDependencyResolver;
|
|
410
|
+
//# sourceMappingURL=library-dependency-resolver.js.map
|
|
@@ -0,0 +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 { ComponentLibraryEntity } 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: ComponentLibraryEntity[]): 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): ComponentLibraryEntity[] {\n const result: ComponentLibraryEntity[] = [];\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: ComponentLibraryEntity[]\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: ComponentLibraryEntity[],\n options?: DependencyResolutionOptions\n ): LoadOrderResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (this.debug || options?.debug) {\n console.log('🔍 Getting load order for:', requestedLibs);\n }\n\n // Build a map for quick lookup\n const libMap = new Map<string, ComponentLibraryEntity[]>();\n for (const lib of allLibs) {\n if (!libMap.has(lib.Name)) {\n libMap.set(lib.Name, []);\n }\n libMap.get(lib.Name)!.push(lib);\n }\n\n // Collect all libraries needed (requested + their dependencies)\n const needed = new Set<string>();\n const toProcess = [...requestedLibs];\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 if (processed.has(current)) continue;\n\n processed.add(current);\n needed.add(current);\n\n // Find the library\n const libVersions = libMap.get(current);\n if (!libVersions || libVersions.length === 0) {\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 // 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: ComponentLibraryEntity[] = [];\n for (const libName of needed) {\n const requirements = versionRequirements.get(libName) || [];\n const versions = libMap.get(libName) || [];\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: ComponentLibraryEntity): 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: ComponentLibraryEntity[],\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\n const libMap = new Map<string, ComponentLibraryEntity>();\n for (const lib of allLibs) {\n libMap.set(lib.Name, 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);\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,5 +1,7 @@
|
|
|
1
1
|
import { StandardLibraries } from './standard-libraries';
|
|
2
2
|
import { LibraryConfiguration, ExternalLibraryConfig, LibraryLoadOptions as ConfigLoadOptions } from '../types/library-config';
|
|
3
|
+
import { ComponentLibraryEntity } from '@memberjunction/core-entities';
|
|
4
|
+
import { LoadedLibraryState, DependencyResolutionOptions } from '../types/dependency-types';
|
|
3
5
|
interface LoadedResource {
|
|
4
6
|
element: HTMLScriptElement | HTMLLinkElement;
|
|
5
7
|
promise: Promise<any>;
|
|
@@ -21,6 +23,8 @@ export interface LibraryLoadResult {
|
|
|
21
23
|
}
|
|
22
24
|
export declare class LibraryLoader {
|
|
23
25
|
private static loadedResources;
|
|
26
|
+
private static loadedLibraryStates;
|
|
27
|
+
private static dependencyResolver;
|
|
24
28
|
static loadAllLibraries(config?: LibraryConfiguration, additionalLibraries?: ExternalLibraryConfig[]): Promise<LibraryLoadResult>;
|
|
25
29
|
static loadLibrariesFromConfig(options?: ConfigLoadOptions): Promise<LibraryLoadResult>;
|
|
26
30
|
static loadLibraries(options: LibraryLoadOptions): Promise<LibraryLoadResult>;
|
|
@@ -29,6 +33,11 @@ export declare class LibraryLoader {
|
|
|
29
33
|
private static waitForScriptLoad;
|
|
30
34
|
static getLoadedResources(): Map<string, LoadedResource>;
|
|
31
35
|
static clearCache(): void;
|
|
36
|
+
static loadLibraryWithDependencies(libraryName: string, allLibraries: ComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<any>;
|
|
37
|
+
static loadLibrariesWithDependencies(libraryNames: string[], allLibraries: ComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<Map<string, any>>;
|
|
38
|
+
static getLoadedLibraryStates(): Map<string, LoadedLibraryState>;
|
|
39
|
+
static isLibraryLoaded(libraryName: string): boolean;
|
|
40
|
+
static getLoadedLibraryVersion(libraryName: string): string | undefined;
|
|
32
41
|
}
|
|
33
42
|
export {};
|
|
34
43
|
//# sourceMappingURL=library-loader.d.ts.map
|
|
@@ -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;
|
|
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,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,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;WAQvE,gBAAgB,CAC3B,MAAM,CAAC,EAAE,oBAAoB,EAC7B,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,GAC5C,OAAO,CAAC,iBAAiB,CAAC;WAwBhB,uBAAuB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;WAkFhF,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;mBAuC9D,UAAU;IAiF/B,OAAO,CAAC,MAAM,CAAC,OAAO;IA2BtB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmDhC,MAAM,CAAC,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOxD,MAAM,CAAC,UAAU,IAAI,IAAI;WAuBZ,2BAA2B,CACtC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EAAE,EACtC,WAAW,GAAE,MAAe,EAC5B,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,GAAG,CAAC;WA6GF,6BAA6B,CACxC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,sBAAsB,EAAE,EACtC,WAAW,GAAE,MAAe,EAC5B,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAgG5B,MAAM,CAAC,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAShE,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IASpD,MAAM,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGxE"}
|