@memberjunction/react-runtime 2.75.0 → 2.77.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 +1 -1
- package/CHANGELOG.md +23 -0
- package/dist/compiler/component-compiler.d.ts +0 -1
- package/dist/compiler/component-compiler.d.ts.map +1 -1
- package/dist/compiler/component-compiler.js +34 -25
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/registry/component-registry.d.ts +1 -0
- package/dist/registry/component-registry.d.ts.map +1 -1
- package/dist/registry/component-registry.js +6 -3
- package/dist/runtime/index.d.ts +2 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +4 -2
- package/dist/runtime/prop-builder.d.ts +1 -2
- package/dist/runtime/prop-builder.d.ts.map +1 -1
- package/dist/runtime/prop-builder.js +4 -76
- package/dist/runtime/react-root-manager.d.ts +26 -0
- package/dist/runtime/react-root-manager.d.ts.map +1 -0
- package/dist/runtime/react-root-manager.js +122 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utilities/cache-manager.d.ts +38 -0
- package/dist/utilities/cache-manager.d.ts.map +1 -0
- package/dist/utilities/cache-manager.js +156 -0
- package/dist/utilities/core-libraries.d.ts +5 -0
- package/dist/utilities/core-libraries.d.ts.map +1 -0
- package/dist/utilities/core-libraries.js +52 -0
- package/dist/utilities/index.d.ts +2 -0
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +2 -0
- package/dist/utilities/library-loader.d.ts +2 -2
- package/dist/utilities/library-loader.d.ts.map +1 -1
- package/dist/utilities/library-loader.js +52 -24
- package/dist/utilities/resource-manager.d.ts +34 -0
- package/dist/utilities/resource-manager.d.ts.map +1 -0
- package/dist/utilities/resource-manager.js +174 -0
- package/package.json +4 -4
- package/samples/entities-1.js +493 -0
- package/src/compiler/component-compiler.ts +64 -35
- package/src/index.ts +18 -1
- package/src/registry/component-registry.ts +14 -4
- package/src/runtime/index.ts +7 -2
- package/src/runtime/prop-builder.ts +5 -112
- package/src/runtime/react-root-manager.ts +218 -0
- package/src/types/index.ts +2 -0
- package/src/utilities/cache-manager.ts +253 -0
- package/src/utilities/core-libraries.ts +61 -0
- package/src/utilities/index.ts +3 -1
- package/src/utilities/library-loader.ts +111 -47
- package/src/utilities/resource-manager.ts +305 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAEhC,SAAS,EAAE,GAAG,CAAC;IAEf,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,EAAE,IAAI,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAKD,MAAM,WAAW,cAAc;IAE7B,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;IAEtB,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAKD,MAAM,WAAW,eAAe;IAE9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,WAAW,aAAa;IAE5B,SAAS,EAAE,GAAG,CAAC;IAEf,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,YAAY,EAAE,IAAI,CAAC;IAEnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,iBAAiB;IAEhC,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS,EAAE,MAAM,CAAC;IAElB,YAAY,EAAE,IAAI,CAAC;IAEnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAKD,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE,MAAM,CAAC;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,aAAa,EAAE,MAAM,CAAC;IAEtB,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE7D,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAKD,MAAM,WAAW,cAAc;IAE7B,IAAI,EAAE,GAAG,CAAC;IAEV,SAAS,EAAE,GAAG,CAAC;IAEf,SAAS,EAAE,GAAG,CAAC;IAEf,SAAS,EAAE,kBAAkB,CAAC;IAE9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface CacheEntry<T> {
|
|
2
|
+
value: T;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
size?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface CacheOptions {
|
|
7
|
+
maxSize?: number;
|
|
8
|
+
maxMemory?: number;
|
|
9
|
+
defaultTTL?: number;
|
|
10
|
+
cleanupInterval?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class CacheManager<T = any> {
|
|
13
|
+
private cache;
|
|
14
|
+
private memoryUsage;
|
|
15
|
+
private cleanupTimer?;
|
|
16
|
+
private readonly options;
|
|
17
|
+
constructor(options?: CacheOptions);
|
|
18
|
+
set(key: string, value: T, ttl?: number): void;
|
|
19
|
+
get(key: string): T | undefined;
|
|
20
|
+
has(key: string): boolean;
|
|
21
|
+
delete(key: string): boolean;
|
|
22
|
+
clear(): void;
|
|
23
|
+
getStats(): {
|
|
24
|
+
size: number;
|
|
25
|
+
memoryUsage: number;
|
|
26
|
+
maxSize: number;
|
|
27
|
+
maxMemory: number;
|
|
28
|
+
};
|
|
29
|
+
cleanup(): number;
|
|
30
|
+
destroy(): void;
|
|
31
|
+
private isExpired;
|
|
32
|
+
private evictLRU;
|
|
33
|
+
private evictByMemory;
|
|
34
|
+
private estimateSize;
|
|
35
|
+
private startCleanupTimer;
|
|
36
|
+
private stopCleanupTimer;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cache-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../src/utilities/cache-manager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,qBAAa,YAAY,CAAC,CAAC,GAAG,GAAG;IAC/B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,GAAE,YAAiB;IAgBtC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAqC9C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAkB/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAezB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAY5B,KAAK,IAAI,IAAI;IAQb,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB;IAYD,OAAO,IAAI,MAAM;IAiBjB,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;CAMzB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CacheManager = void 0;
|
|
4
|
+
class CacheManager {
|
|
5
|
+
constructor(options = {}) {
|
|
6
|
+
this.cache = new Map();
|
|
7
|
+
this.memoryUsage = 0;
|
|
8
|
+
this.options = {
|
|
9
|
+
maxSize: options.maxSize || 1000,
|
|
10
|
+
maxMemory: options.maxMemory || 50 * 1024 * 1024,
|
|
11
|
+
defaultTTL: options.defaultTTL || 5 * 60 * 1000,
|
|
12
|
+
cleanupInterval: options.cleanupInterval || 60 * 1000
|
|
13
|
+
};
|
|
14
|
+
if (this.options.cleanupInterval > 0) {
|
|
15
|
+
this.startCleanupTimer();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
set(key, value, ttl) {
|
|
19
|
+
const size = this.estimateSize(value);
|
|
20
|
+
const entry = {
|
|
21
|
+
value,
|
|
22
|
+
timestamp: Date.now(),
|
|
23
|
+
size
|
|
24
|
+
};
|
|
25
|
+
if (this.cache.size >= this.options.maxSize) {
|
|
26
|
+
this.evictLRU();
|
|
27
|
+
}
|
|
28
|
+
if (this.memoryUsage + size > this.options.maxMemory) {
|
|
29
|
+
this.evictByMemory(size);
|
|
30
|
+
}
|
|
31
|
+
const oldEntry = this.cache.get(key);
|
|
32
|
+
if (oldEntry) {
|
|
33
|
+
this.memoryUsage -= oldEntry.size || 0;
|
|
34
|
+
}
|
|
35
|
+
this.cache.set(key, entry);
|
|
36
|
+
this.memoryUsage += size;
|
|
37
|
+
if (ttl || this.options.defaultTTL) {
|
|
38
|
+
const timeout = ttl || this.options.defaultTTL;
|
|
39
|
+
setTimeout(() => this.delete(key), timeout);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
get(key) {
|
|
43
|
+
const entry = this.cache.get(key);
|
|
44
|
+
if (!entry)
|
|
45
|
+
return undefined;
|
|
46
|
+
if (this.isExpired(entry)) {
|
|
47
|
+
this.delete(key);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
entry.timestamp = Date.now();
|
|
51
|
+
return entry.value;
|
|
52
|
+
}
|
|
53
|
+
has(key) {
|
|
54
|
+
const entry = this.cache.get(key);
|
|
55
|
+
if (!entry)
|
|
56
|
+
return false;
|
|
57
|
+
if (this.isExpired(entry)) {
|
|
58
|
+
this.delete(key);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
delete(key) {
|
|
64
|
+
const entry = this.cache.get(key);
|
|
65
|
+
if (entry) {
|
|
66
|
+
this.memoryUsage -= entry.size || 0;
|
|
67
|
+
return this.cache.delete(key);
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
clear() {
|
|
72
|
+
this.cache.clear();
|
|
73
|
+
this.memoryUsage = 0;
|
|
74
|
+
}
|
|
75
|
+
getStats() {
|
|
76
|
+
return {
|
|
77
|
+
size: this.cache.size,
|
|
78
|
+
memoryUsage: this.memoryUsage,
|
|
79
|
+
maxSize: this.options.maxSize,
|
|
80
|
+
maxMemory: this.options.maxMemory
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
cleanup() {
|
|
84
|
+
let removed = 0;
|
|
85
|
+
const now = Date.now();
|
|
86
|
+
for (const [key, entry] of this.cache) {
|
|
87
|
+
if (this.isExpired(entry, now)) {
|
|
88
|
+
this.delete(key);
|
|
89
|
+
removed++;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return removed;
|
|
93
|
+
}
|
|
94
|
+
destroy() {
|
|
95
|
+
this.stopCleanupTimer();
|
|
96
|
+
this.clear();
|
|
97
|
+
}
|
|
98
|
+
isExpired(entry, now) {
|
|
99
|
+
if (!this.options.defaultTTL)
|
|
100
|
+
return false;
|
|
101
|
+
const currentTime = now || Date.now();
|
|
102
|
+
return currentTime - entry.timestamp > this.options.defaultTTL;
|
|
103
|
+
}
|
|
104
|
+
evictLRU() {
|
|
105
|
+
let lruKey;
|
|
106
|
+
let lruTime = Infinity;
|
|
107
|
+
for (const [key, entry] of this.cache) {
|
|
108
|
+
if (entry.timestamp < lruTime) {
|
|
109
|
+
lruTime = entry.timestamp;
|
|
110
|
+
lruKey = key;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (lruKey) {
|
|
114
|
+
this.delete(lruKey);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
evictByMemory(requiredSize) {
|
|
118
|
+
const entries = Array.from(this.cache.entries())
|
|
119
|
+
.sort((a, b) => a[1].timestamp - b[1].timestamp);
|
|
120
|
+
let freedMemory = 0;
|
|
121
|
+
for (const [key, entry] of entries) {
|
|
122
|
+
if (freedMemory >= requiredSize)
|
|
123
|
+
break;
|
|
124
|
+
freedMemory += entry.size || 0;
|
|
125
|
+
this.delete(key);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
estimateSize(value) {
|
|
129
|
+
if (typeof value === 'string') {
|
|
130
|
+
return value.length * 2;
|
|
131
|
+
}
|
|
132
|
+
else if (typeof value === 'object' && value !== null) {
|
|
133
|
+
try {
|
|
134
|
+
return JSON.stringify(value).length * 2;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return 1024;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
return 8;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
startCleanupTimer() {
|
|
145
|
+
this.cleanupTimer = window.setInterval(() => {
|
|
146
|
+
this.cleanup();
|
|
147
|
+
}, this.options.cleanupInterval);
|
|
148
|
+
}
|
|
149
|
+
stopCleanupTimer() {
|
|
150
|
+
if (this.cleanupTimer) {
|
|
151
|
+
window.clearInterval(this.cleanupTimer);
|
|
152
|
+
this.cleanupTimer = undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.CacheManager = CacheManager;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ExternalLibraryConfig } from '../types/library-config';
|
|
2
|
+
export declare const CORE_RUNTIME_LIBRARIES: ExternalLibraryConfig[];
|
|
3
|
+
export declare function getCoreRuntimeLibraries(): ExternalLibraryConfig[];
|
|
4
|
+
export declare function isCoreRuntimeLibrary(libraryId: string): boolean;
|
|
5
|
+
//# sourceMappingURL=core-libraries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-libraries.d.ts","sourceRoot":"","sources":["../../src/utilities/core-libraries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,EAwCzD,CAAC;AAKF,wBAAgB,uBAAuB,IAAI,qBAAqB,EAAE,CAEjE;AAKD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isCoreRuntimeLibrary = exports.getCoreRuntimeLibraries = exports.CORE_RUNTIME_LIBRARIES = void 0;
|
|
4
|
+
exports.CORE_RUNTIME_LIBRARIES = [
|
|
5
|
+
{
|
|
6
|
+
id: 'react',
|
|
7
|
+
name: 'react',
|
|
8
|
+
displayName: 'React',
|
|
9
|
+
category: 'runtime',
|
|
10
|
+
globalVariable: 'React',
|
|
11
|
+
version: '18.2.0',
|
|
12
|
+
cdnUrl: 'https://unpkg.com/react@18.2.0/umd/react.production.min.js',
|
|
13
|
+
description: 'React core library',
|
|
14
|
+
isEnabled: true,
|
|
15
|
+
isCore: true,
|
|
16
|
+
isRuntimeOnly: true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'react-dom',
|
|
20
|
+
name: 'react-dom',
|
|
21
|
+
displayName: 'ReactDOM',
|
|
22
|
+
category: 'runtime',
|
|
23
|
+
globalVariable: 'ReactDOM',
|
|
24
|
+
version: '18.2.0',
|
|
25
|
+
cdnUrl: 'https://unpkg.com/react-dom@18.2.0/umd/react-dom.production.min.js',
|
|
26
|
+
description: 'React DOM library',
|
|
27
|
+
isEnabled: true,
|
|
28
|
+
isCore: true,
|
|
29
|
+
isRuntimeOnly: true
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'babel-standalone',
|
|
33
|
+
name: '@babel/standalone',
|
|
34
|
+
displayName: 'Babel Standalone',
|
|
35
|
+
category: 'runtime',
|
|
36
|
+
globalVariable: 'Babel',
|
|
37
|
+
version: '7.24.4',
|
|
38
|
+
cdnUrl: 'https://unpkg.com/@babel/standalone@7.24.4/babel.min.js',
|
|
39
|
+
description: 'Babel compiler for JSX transformation',
|
|
40
|
+
isEnabled: true,
|
|
41
|
+
isCore: true,
|
|
42
|
+
isRuntimeOnly: true
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
function getCoreRuntimeLibraries() {
|
|
46
|
+
return exports.CORE_RUNTIME_LIBRARIES;
|
|
47
|
+
}
|
|
48
|
+
exports.getCoreRuntimeLibraries = getCoreRuntimeLibraries;
|
|
49
|
+
function isCoreRuntimeLibrary(libraryId) {
|
|
50
|
+
return exports.CORE_RUNTIME_LIBRARIES.some(lib => lib.id === libraryId);
|
|
51
|
+
}
|
|
52
|
+
exports.isCoreRuntimeLibrary = isCoreRuntimeLibrary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utilities/index.ts"],"names":[],"mappings":"AAKA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utilities/index.ts"],"names":[],"mappings":"AAKA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
package/dist/utilities/index.js
CHANGED
|
@@ -19,3 +19,5 @@ __exportStar(require("./component-styles"), exports);
|
|
|
19
19
|
__exportStar(require("./standard-libraries"), exports);
|
|
20
20
|
__exportStar(require("./library-loader"), exports);
|
|
21
21
|
__exportStar(require("./component-error-analyzer"), exports);
|
|
22
|
+
__exportStar(require("./resource-manager"), exports);
|
|
23
|
+
__exportStar(require("./cache-manager"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StandardLibraries } from './standard-libraries';
|
|
2
|
-
import { LibraryConfiguration, LibraryLoadOptions as ConfigLoadOptions } from '../types/library-config';
|
|
2
|
+
import { LibraryConfiguration, ExternalLibraryConfig, LibraryLoadOptions as ConfigLoadOptions } from '../types/library-config';
|
|
3
3
|
interface LoadedResource {
|
|
4
4
|
element: HTMLScriptElement | HTMLLinkElement;
|
|
5
5
|
promise: Promise<any>;
|
|
@@ -21,7 +21,7 @@ export interface LibraryLoadResult {
|
|
|
21
21
|
}
|
|
22
22
|
export declare class LibraryLoader {
|
|
23
23
|
private static loadedResources;
|
|
24
|
-
static loadAllLibraries(config?: LibraryConfiguration): Promise<LibraryLoadResult>;
|
|
24
|
+
static loadAllLibraries(config?: LibraryConfiguration, additionalLibraries?: ExternalLibraryConfig[]): Promise<LibraryLoadResult>;
|
|
25
25
|
static loadLibrariesFromConfig(options?: ConfigLoadOptions): Promise<LibraryLoadResult>;
|
|
26
26
|
static loadLibraries(options: LibraryLoadOptions): Promise<LibraryLoadResult>;
|
|
27
27
|
private static loadScript;
|
|
@@ -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,
|
|
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;AAU/H,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;WAQtD,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;WAgEhF,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;CAa1B"}
|
|
@@ -2,42 +2,55 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LibraryLoader = void 0;
|
|
4
4
|
const standard_libraries_1 = require("./standard-libraries");
|
|
5
|
+
const core_libraries_1 = require("./core-libraries");
|
|
6
|
+
const resource_manager_1 = require("./resource-manager");
|
|
7
|
+
const LIBRARY_LOADER_COMPONENT_ID = 'mj-react-runtime-library-loader-singleton';
|
|
5
8
|
class LibraryLoader {
|
|
6
|
-
static async loadAllLibraries(config) {
|
|
9
|
+
static async loadAllLibraries(config, additionalLibraries) {
|
|
7
10
|
if (config) {
|
|
8
11
|
standard_libraries_1.StandardLibraryManager.setConfiguration(config);
|
|
9
12
|
}
|
|
13
|
+
if (additionalLibraries && additionalLibraries.length > 0) {
|
|
14
|
+
const currentConfig = standard_libraries_1.StandardLibraryManager.getConfiguration();
|
|
15
|
+
const mergedConfig = {
|
|
16
|
+
libraries: [...currentConfig.libraries, ...additionalLibraries],
|
|
17
|
+
metadata: {
|
|
18
|
+
...currentConfig.metadata,
|
|
19
|
+
lastUpdated: new Date().toISOString()
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
standard_libraries_1.StandardLibraryManager.setConfiguration(mergedConfig);
|
|
23
|
+
}
|
|
10
24
|
return this.loadLibrariesFromConfig();
|
|
11
25
|
}
|
|
12
26
|
static async loadLibrariesFromConfig(options) {
|
|
27
|
+
const coreLibraries = (0, core_libraries_1.getCoreRuntimeLibraries)();
|
|
28
|
+
const corePromises = coreLibraries.map(lib => this.loadScript(lib.cdnUrl, lib.globalVariable));
|
|
29
|
+
const coreResults = await Promise.all(corePromises);
|
|
30
|
+
const React = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'React');
|
|
31
|
+
const ReactDOM = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'ReactDOM');
|
|
32
|
+
const Babel = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'Babel');
|
|
13
33
|
const config = standard_libraries_1.StandardLibraryManager.getConfiguration();
|
|
14
34
|
const enabledLibraries = standard_libraries_1.StandardLibraryManager.getEnabledLibraries();
|
|
15
|
-
let
|
|
35
|
+
let pluginLibraries = enabledLibraries.filter(lib => !(0, core_libraries_1.isCoreRuntimeLibrary)(lib.id));
|
|
16
36
|
if (options) {
|
|
17
37
|
if (options.categories) {
|
|
18
|
-
|
|
38
|
+
pluginLibraries = pluginLibraries.filter(lib => options.categories.includes(lib.category));
|
|
19
39
|
}
|
|
20
40
|
if (options.excludeRuntimeOnly) {
|
|
21
|
-
|
|
41
|
+
pluginLibraries = pluginLibraries.filter(lib => !lib.isRuntimeOnly);
|
|
22
42
|
}
|
|
23
43
|
}
|
|
24
|
-
|
|
25
|
-
const componentLibs = librariesToLoad.filter(lib => lib.category !== 'runtime');
|
|
26
|
-
const runtimePromises = runtimeLibs.map(lib => this.loadScript(lib.cdnUrl, lib.globalVariable));
|
|
27
|
-
const runtimeResults = await Promise.all(runtimePromises);
|
|
28
|
-
const React = runtimeResults.find((_, i) => runtimeLibs[i].globalVariable === 'React');
|
|
29
|
-
const ReactDOM = runtimeResults.find((_, i) => runtimeLibs[i].globalVariable === 'ReactDOM');
|
|
30
|
-
const Babel = runtimeResults.find((_, i) => runtimeLibs[i].globalVariable === 'Babel');
|
|
31
|
-
componentLibs.forEach(lib => {
|
|
44
|
+
pluginLibraries.forEach(lib => {
|
|
32
45
|
if (lib.cdnCssUrl) {
|
|
33
46
|
this.loadCSS(lib.cdnCssUrl);
|
|
34
47
|
}
|
|
35
48
|
});
|
|
36
|
-
const
|
|
37
|
-
const
|
|
49
|
+
const pluginPromises = pluginLibraries.map(lib => this.loadScript(lib.cdnUrl, lib.globalVariable));
|
|
50
|
+
const pluginResults = await Promise.all(pluginPromises);
|
|
38
51
|
const libraries = {};
|
|
39
|
-
|
|
40
|
-
libraries[lib.globalVariable] =
|
|
52
|
+
pluginLibraries.forEach((lib, index) => {
|
|
53
|
+
libraries[lib.globalVariable] = pluginResults[index];
|
|
41
54
|
});
|
|
42
55
|
return {
|
|
43
56
|
React: React || window.React,
|
|
@@ -87,13 +100,18 @@ class LibraryLoader {
|
|
|
87
100
|
script.src = url;
|
|
88
101
|
script.async = true;
|
|
89
102
|
script.crossOrigin = 'anonymous';
|
|
90
|
-
|
|
103
|
+
const cleanup = () => {
|
|
104
|
+
script.removeEventListener('load', onLoad);
|
|
105
|
+
script.removeEventListener('error', onError);
|
|
106
|
+
};
|
|
107
|
+
const onLoad = () => {
|
|
108
|
+
cleanup();
|
|
91
109
|
const global = window[globalName];
|
|
92
110
|
if (global) {
|
|
93
111
|
resolve(global);
|
|
94
112
|
}
|
|
95
113
|
else {
|
|
96
|
-
setTimeout(() => {
|
|
114
|
+
const timeoutId = resource_manager_1.resourceManager.setTimeout(LIBRARY_LOADER_COMPONENT_ID, () => {
|
|
97
115
|
const delayedGlobal = window[globalName];
|
|
98
116
|
if (delayedGlobal) {
|
|
99
117
|
resolve(delayedGlobal);
|
|
@@ -101,13 +119,17 @@ class LibraryLoader {
|
|
|
101
119
|
else {
|
|
102
120
|
reject(new Error(`${globalName} not found after script load`));
|
|
103
121
|
}
|
|
104
|
-
}, 100);
|
|
122
|
+
}, 100, { url, globalName });
|
|
105
123
|
}
|
|
106
124
|
};
|
|
107
|
-
|
|
125
|
+
const onError = () => {
|
|
126
|
+
cleanup();
|
|
108
127
|
reject(new Error(`Failed to load script: ${url}`));
|
|
109
128
|
};
|
|
129
|
+
script.addEventListener('load', onLoad);
|
|
130
|
+
script.addEventListener('error', onError);
|
|
110
131
|
document.head.appendChild(script);
|
|
132
|
+
resource_manager_1.resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, script);
|
|
111
133
|
});
|
|
112
134
|
this.loadedResources.set(url, {
|
|
113
135
|
element: document.querySelector(`script[src="${url}"]`),
|
|
@@ -127,6 +149,7 @@ class LibraryLoader {
|
|
|
127
149
|
link.rel = 'stylesheet';
|
|
128
150
|
link.href = url;
|
|
129
151
|
document.head.appendChild(link);
|
|
152
|
+
resource_manager_1.resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, link);
|
|
130
153
|
this.loadedResources.set(url, {
|
|
131
154
|
element: link,
|
|
132
155
|
promise: Promise.resolve()
|
|
@@ -139,7 +162,7 @@ class LibraryLoader {
|
|
|
139
162
|
resolve(global);
|
|
140
163
|
}
|
|
141
164
|
else {
|
|
142
|
-
setTimeout(() => {
|
|
165
|
+
resource_manager_1.resourceManager.setTimeout(LIBRARY_LOADER_COMPONENT_ID, () => {
|
|
143
166
|
const delayedGlobal = window[globalName];
|
|
144
167
|
if (delayedGlobal) {
|
|
145
168
|
resolve(delayedGlobal);
|
|
@@ -147,7 +170,7 @@ class LibraryLoader {
|
|
|
147
170
|
else {
|
|
148
171
|
reject(new Error(`${globalName} not found after script load`));
|
|
149
172
|
}
|
|
150
|
-
}, 100);
|
|
173
|
+
}, 100, { context: 'waitForScriptLoad', globalName });
|
|
151
174
|
}
|
|
152
175
|
};
|
|
153
176
|
if (script.complete || script.readyState === 'complete') {
|
|
@@ -155,16 +178,21 @@ class LibraryLoader {
|
|
|
155
178
|
return;
|
|
156
179
|
}
|
|
157
180
|
const loadHandler = () => {
|
|
158
|
-
script.removeEventListener('load', loadHandler);
|
|
159
181
|
checkGlobal();
|
|
160
182
|
};
|
|
161
|
-
|
|
183
|
+
resource_manager_1.resourceManager.addEventListener(LIBRARY_LOADER_COMPONENT_ID, script, 'load', loadHandler, { once: true });
|
|
162
184
|
}
|
|
163
185
|
static getLoadedResources() {
|
|
164
186
|
return this.loadedResources;
|
|
165
187
|
}
|
|
166
188
|
static clearCache() {
|
|
189
|
+
this.loadedResources.forEach((resource, url) => {
|
|
190
|
+
if (resource.element && resource.element.parentNode) {
|
|
191
|
+
resource.element.parentNode.removeChild(resource.element);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
167
194
|
this.loadedResources.clear();
|
|
195
|
+
resource_manager_1.resourceManager.cleanupComponent(LIBRARY_LOADER_COMPONENT_ID);
|
|
168
196
|
}
|
|
169
197
|
}
|
|
170
198
|
exports.LibraryLoader = LibraryLoader;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface ManagedResource {
|
|
2
|
+
type: 'timer' | 'interval' | 'animationFrame' | 'eventListener' | 'domElement' | 'observable' | 'reactRoot';
|
|
3
|
+
id: string | number;
|
|
4
|
+
cleanup: () => void;
|
|
5
|
+
metadata?: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export declare class ResourceManager {
|
|
8
|
+
private resources;
|
|
9
|
+
private globalResources;
|
|
10
|
+
private cleanupCallbacks;
|
|
11
|
+
setTimeout(componentId: string, callback: () => void, delay: number, metadata?: Record<string, any>): number;
|
|
12
|
+
setInterval(componentId: string, callback: () => void, delay: number, metadata?: Record<string, any>): number;
|
|
13
|
+
requestAnimationFrame(componentId: string, callback: FrameRequestCallback, metadata?: Record<string, any>): number;
|
|
14
|
+
clearTimeout(componentId: string, id: number): void;
|
|
15
|
+
clearInterval(componentId: string, id: number): void;
|
|
16
|
+
cancelAnimationFrame(componentId: string, id: number): void;
|
|
17
|
+
addEventListener(componentId: string, target: EventTarget, type: string, listener: EventListener, options?: AddEventListenerOptions): void;
|
|
18
|
+
registerDOMElement(componentId: string, element: HTMLElement, cleanup?: () => void): void;
|
|
19
|
+
registerReactRoot(componentId: string, root: any, unmountFn: () => void): void;
|
|
20
|
+
registerCleanup(componentId: string, cleanup: () => void): void;
|
|
21
|
+
registerGlobalResource(resource: ManagedResource): void;
|
|
22
|
+
private addResource;
|
|
23
|
+
private removeResource;
|
|
24
|
+
cleanupComponent(componentId: string): void;
|
|
25
|
+
cleanupGlobal(): void;
|
|
26
|
+
cleanupAll(): void;
|
|
27
|
+
getStats(): {
|
|
28
|
+
componentCount: number;
|
|
29
|
+
resourceCounts: Record<string, number>;
|
|
30
|
+
globalResourceCount: number;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare const resourceManager: ResourceManager;
|
|
34
|
+
//# sourceMappingURL=resource-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/utilities/resource-manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAAC;IAC5G,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,gBAAgB,CAAqC;IAK7D,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,IAAI,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM;IAmBT,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,IAAI,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM;IAgBT,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM;IAmBT,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQnD,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQpD,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ3D,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,IAAI;IAeP,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,IAAI;IAoBP,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,MAAM,IAAI,GACpB,IAAI;IAYP,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAU/D,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAOvD,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,cAAc;IAmBtB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IA+B3C,aAAa,IAAI,IAAI;IAcrB,UAAU,IAAI,IAAI;IAalB,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAeF;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|