@memberjunction/react-runtime 3.3.0 → 4.0.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 +33 -25
- package/CHANGELOG.md +40 -0
- package/dist/324.runtime.umd.js +817 -0
- package/dist/490.runtime.umd.js +1 -0
- package/dist/compiler/babel-config.js +15 -21
- package/dist/compiler/babel-config.js.map +1 -1
- package/dist/compiler/component-compiler.js +13 -17
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/compiler/index.js +2 -13
- package/dist/compiler/index.js.map +1 -1
- package/dist/component-manager/component-manager.js +7 -34
- package/dist/component-manager/component-manager.js.map +1 -1
- package/dist/component-manager/index.js +1 -5
- package/dist/component-manager/index.js.map +1 -1
- package/dist/component-manager/types.js +1 -2
- package/dist/index.js +31 -100
- package/dist/index.js.map +1 -1
- package/dist/registry/component-registry-service.js +8 -35
- package/dist/registry/component-registry-service.js.map +1 -1
- package/dist/registry/component-registry.js +5 -9
- package/dist/registry/component-registry.js.map +1 -1
- package/dist/registry/component-resolver.js +5 -9
- package/dist/registry/component-resolver.js.map +1 -1
- package/dist/registry/index.js +4 -11
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/registry-provider.js +1 -2
- package/dist/runtime/component-hierarchy.js +24 -55
- package/dist/runtime/component-hierarchy.js.map +1 -1
- package/dist/runtime/component-wrapper.d.ts +18 -0
- package/dist/runtime/component-wrapper.d.ts.map +1 -0
- package/dist/runtime/component-wrapper.js +108 -0
- package/dist/runtime/error-boundary.js +4 -11
- package/dist/runtime/error-boundary.js.map +1 -1
- package/dist/runtime/index.js +4 -26
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/prop-builder.js +17 -28
- package/dist/runtime/prop-builder.js.map +1 -1
- package/dist/runtime/react-root-manager.js +4 -8
- package/dist/runtime/react-root-manager.js.map +1 -1
- package/dist/runtime.umd.js +1 -801
- package/dist/types/dependency-types.js +1 -2
- package/dist/types/index.js +2 -18
- package/dist/types/index.js.map +1 -1
- package/dist/types/library-config.js +1 -2
- package/dist/utilities/cache-manager.js +1 -5
- package/dist/utilities/cache-manager.js.map +1 -1
- package/dist/utilities/component-error-analyzer.js +53 -57
- package/dist/utilities/component-error-analyzer.js.map +1 -1
- package/dist/utilities/component-styles.js +2 -6
- package/dist/utilities/component-styles.js.map +1 -1
- package/dist/utilities/component-unwrapper.d.ts.map +1 -1
- package/dist/utilities/component-unwrapper.js +6 -13
- package/dist/utilities/component-unwrapper.js.map +1 -1
- package/dist/utilities/core-libraries.js +2 -7
- package/dist/utilities/core-libraries.js.map +1 -1
- package/dist/utilities/index.js +9 -25
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/library-dependency-resolver.js +1 -5
- package/dist/utilities/library-dependency-resolver.js.map +1 -1
- package/dist/utilities/library-loader.js +23 -27
- package/dist/utilities/library-loader.js.map +1 -1
- package/dist/utilities/library-registry.d.ts.map +1 -1
- package/dist/utilities/library-registry.js +3 -7
- package/dist/utilities/library-registry.js.map +1 -1
- package/dist/utilities/resource-manager.d.ts +0 -1
- package/dist/utilities/resource-manager.d.ts.map +1 -1
- package/dist/utilities/resource-manager.js +2 -6
- package/dist/utilities/resource-manager.js.map +1 -1
- package/dist/utilities/runtime-utilities.d.ts +10 -0
- package/dist/utilities/runtime-utilities.d.ts.map +1 -0
- package/dist/utilities/runtime-utilities.js +92 -0
- package/dist/utilities/standard-libraries.js +3 -8
- package/dist/utilities/standard-libraries.js.map +1 -1
- package/package.json +17 -17
- package/tsconfig.json +7 -22
- package/tsconfig.tsbuildinfo +1 -0
- package/typedoc.json +9 -0
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isCoreRuntimeLibrary = exports.getCoreRuntimeLibraries = void 0;
|
|
4
1
|
function getReactUrl(debug = false) {
|
|
5
2
|
return debug
|
|
6
3
|
? 'https://unpkg.com/react@18.2.0/umd/react.development.js'
|
|
@@ -11,7 +8,7 @@ function getReactDOMUrl(debug = false) {
|
|
|
11
8
|
? 'https://unpkg.com/react-dom@18.2.0/umd/react-dom.development.js'
|
|
12
9
|
: 'https://unpkg.com/react-dom@18.2.0/umd/react-dom.production.min.js';
|
|
13
10
|
}
|
|
14
|
-
function getCoreRuntimeLibraries(debug = false) {
|
|
11
|
+
export function getCoreRuntimeLibraries(debug = false) {
|
|
15
12
|
return [
|
|
16
13
|
{
|
|
17
14
|
id: 'react',
|
|
@@ -54,10 +51,8 @@ function getCoreRuntimeLibraries(debug = false) {
|
|
|
54
51
|
}
|
|
55
52
|
];
|
|
56
53
|
}
|
|
57
|
-
|
|
58
|
-
function isCoreRuntimeLibrary(libraryId) {
|
|
54
|
+
export function isCoreRuntimeLibrary(libraryId) {
|
|
59
55
|
const coreLibraries = getCoreRuntimeLibraries();
|
|
60
56
|
return coreLibraries.some((lib) => lib.id === libraryId);
|
|
61
57
|
}
|
|
62
|
-
exports.isCoreRuntimeLibrary = isCoreRuntimeLibrary;
|
|
63
58
|
//# sourceMappingURL=core-libraries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-libraries.js","sourceRoot":"","sources":["../../src/utilities/core-libraries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core-libraries.js","sourceRoot":"","sources":["../../src/utilities/core-libraries.ts"],"names":[],"mappings":"AAKA,SAAS,WAAW,CAAC,QAAiB,KAAK;IACzC,OAAO,KAAK;QACV,CAAC,CAAC,yDAAyD;QAC3D,CAAC,CAAC,4DAA4D,CAAC;AACnE,CAAC;AAKD,SAAS,cAAc,CAAC,QAAiB,KAAK;IAC5C,OAAO,KAAK;QACV,CAAC,CAAC,iEAAiE;QACnE,CAAC,CAAC,oEAAoE,CAAC;AAC3E,CAAC;AAMD,MAAM,UAAU,uBAAuB,CAAC,QAAiB,KAAK;IAC5D,OAAO;QACL;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAE,SAAS;YACnB,cAAc,EAAE,OAAO;YACvB,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC;YAC1B,WAAW,EAAE,oBAAoB;YACjC,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,SAAS;YACnB,cAAc,EAAE,UAAU;YAC1B,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;YAC7B,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;SACpB;QACD;YACE,EAAE,EAAE,kBAAkB;YACtB,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,SAAS;YACnB,cAAc,EAAE,OAAO;YACvB,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,yDAAyD;YACjE,WAAW,EAAE,uCAAuC;YACpD,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;SACpB;KACF,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,aAAa,GAAG,uBAAuB,EAAE,CAAC;IAChD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,GAA0B,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;AAClF,CAAC","sourcesContent":["import { ExternalLibraryConfig } from '../types/library-config';\n\n/**\n * Get the React CDN URL based on debug mode\n */\nfunction getReactUrl(debug: boolean = false): string {\n return debug \n ? 'https://unpkg.com/react@18.2.0/umd/react.development.js'\n : 'https://unpkg.com/react@18.2.0/umd/react.production.min.js';\n}\n\n/**\n * Get the ReactDOM CDN URL based on debug mode\n */\nfunction getReactDOMUrl(debug: boolean = false): string {\n return debug\n ? 'https://unpkg.com/react-dom@18.2.0/umd/react-dom.development.js'\n : 'https://unpkg.com/react-dom@18.2.0/umd/react-dom.production.min.js';\n}\n\n/**\n * Get the core runtime libraries configuration\n * @param debug Whether to use development builds for better error messages\n */\nexport function getCoreRuntimeLibraries(debug: boolean = false): ExternalLibraryConfig[] {\n return [\n {\n id: 'react',\n name: 'react',\n displayName: 'React',\n category: 'runtime',\n globalVariable: 'React',\n version: '18.2.0',\n cdnUrl: getReactUrl(debug),\n description: 'React core library',\n isEnabled: true,\n isCore: true,\n isRuntimeOnly: true\n },\n {\n id: 'react-dom',\n name: 'react-dom',\n displayName: 'ReactDOM',\n category: 'runtime',\n globalVariable: 'ReactDOM',\n version: '18.2.0',\n cdnUrl: getReactDOMUrl(debug),\n description: 'React DOM library',\n isEnabled: true,\n isCore: true,\n isRuntimeOnly: true\n },\n {\n id: 'babel-standalone',\n name: '@babel/standalone',\n displayName: 'Babel Standalone',\n category: 'runtime',\n globalVariable: 'Babel',\n version: '7.24.4',\n cdnUrl: 'https://unpkg.com/@babel/standalone@7.24.4/babel.min.js',\n description: 'Babel compiler for JSX transformation',\n isEnabled: true,\n isCore: true,\n isRuntimeOnly: true\n }\n ];\n}\n\n/**\n * Check if a library ID is a core runtime library\n */\nexport function isCoreRuntimeLibrary(libraryId: string): boolean {\n const coreLibraries = getCoreRuntimeLibraries();\n return coreLibraries.some((lib: ExternalLibraryConfig) => lib.id === libraryId);\n}"]}
|
package/dist/utilities/index.js
CHANGED
|
@@ -1,26 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./component-styles"), exports);
|
|
18
|
-
__exportStar(require("./standard-libraries"), exports);
|
|
19
|
-
__exportStar(require("./library-loader"), exports);
|
|
20
|
-
__exportStar(require("./library-registry"), exports);
|
|
21
|
-
__exportStar(require("./library-dependency-resolver"), exports);
|
|
22
|
-
__exportStar(require("./component-error-analyzer"), exports);
|
|
23
|
-
__exportStar(require("./resource-manager"), exports);
|
|
24
|
-
__exportStar(require("./cache-manager"), exports);
|
|
25
|
-
__exportStar(require("./component-unwrapper"), exports);
|
|
1
|
+
export * from './component-styles';
|
|
2
|
+
export * from './standard-libraries';
|
|
3
|
+
export * from './library-loader';
|
|
4
|
+
export * from './library-registry';
|
|
5
|
+
export * from './library-dependency-resolver';
|
|
6
|
+
export * from './component-error-analyzer';
|
|
7
|
+
export * from './resource-manager';
|
|
8
|
+
export * from './cache-manager';
|
|
9
|
+
export * from './component-unwrapper';
|
|
26
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utilities/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utilities/index.ts"],"names":[],"mappings":"AAKA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC","sourcesContent":["/**\n * @fileoverview Utilities module exports\n * @module @memberjunction/react-runtime/utilities\n */\n\nexport * from './component-styles';\nexport * from './standard-libraries';\nexport * from './library-loader';\nexport * from './library-registry';\nexport * from './library-dependency-resolver';\nexport * from './component-error-analyzer';\nexport * from './resource-manager';\nexport * from './cache-manager';\nexport * from './component-unwrapper';"]}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LibraryDependencyResolver = void 0;
|
|
4
|
-
class LibraryDependencyResolver {
|
|
1
|
+
export class LibraryDependencyResolver {
|
|
5
2
|
constructor(options) {
|
|
6
3
|
this.debug = false;
|
|
7
4
|
this.debug = options?.debug || false;
|
|
@@ -439,5 +436,4 @@ class LibraryDependencyResolver {
|
|
|
439
436
|
return dependencies;
|
|
440
437
|
}
|
|
441
438
|
}
|
|
442
|
-
exports.LibraryDependencyResolver = LibraryDependencyResolver;
|
|
443
439
|
//# 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":";;;AAuBA,MAAa,yBAAyB;IAGpC,YAAY,OAAqC;QAFzC,UAAK,GAAY,KAAK,CAAC;QAG7B,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IACvC,CAAC;IAOD,iBAAiB,CAAC,IAAmB;QACnC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE/C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBAClD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAOD,oBAAoB,CAAC,SAAmC;QACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAGhC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAClE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;gBACtB,OAAO;gBACP,YAAY;gBACZ,UAAU,EAAE,IAAI,GAAG,EAAE;aACtB,CAAC,CAAC;YAEH,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAGD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,OAAO,EAAE,CAAC;oBAEZ,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAEtB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,eAAe,OAAO,4BAA4B,IAAI,GAAG,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAOD,YAAY,CAAC,KAAsB;QACjC,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAQ,EAAE;YAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEpB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC1B,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAC5B,CAAC;yBAAM,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBAEvC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC9C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;wBACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QAGF,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAOD,eAAe,CAAC,KAAsB;QACpC,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAW,EAAE;YAC1C,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAE7B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEvC,IAAI,IAAI,EAAE,CAAC;gBAET,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;4BACpB,OAAO,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YAED,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAGF,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrB,OAAO,CAAC,KAAK,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAOO,YAAY,CAAC,OAAe;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC7B,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;SAChB,CAAC;IACJ,CAAC;IAOO,iBAAiB,CAAC,IAAY;QACpC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACpC,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO,IAAI,SAAS;gBAC7B,GAAG,EAAE,IAAI;aACV,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO,IAAI,SAAS;gBAC7B,GAAG,EAAE,IAAI;aACV,CAAC;QACJ,CAAC;QAGD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,OAAO;gBACP,GAAG,EAAE,IAAI;aACV,CAAC;QACJ,CAAC;QAGD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAQO,qBAAqB,CAAC,OAAsB,EAAE,KAAmB;QACvE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;QAE/B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;oBAChC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;oBAChC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;YAE1C,KAAK,OAAO;gBACV,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACnD,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACnD,OAAO,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;YAEzC,KAAK,OAAO;gBACV,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBAEzB,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACtC,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;wBAEzB,OAAO,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;oBACjE,CAAC;oBAED,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;wBAAE,OAAO,KAAK,CAAC;oBACnD,OAAO,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;gBACzC,CAAC;gBAED,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACnD,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACjD,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACrC,OAAO,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;gBACzC,CAAC;gBACD,OAAO,IAAI,CAAC;YAEd;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAMO,eAAe,CAAC,CAAgB,EAAE,CAAgB;QACxD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAGlD,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAQD,uBAAuB,CACrB,YAAkC,EAClC,kBAA4C;QAE5C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAG9B,MAAM,iBAAiB,GAAG,kBAAkB;aACzC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC;aACtD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACX,OAAO,EAAE,GAAG;YACZ,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAQ,CAAC;SACzC,CAAC,CAAC;aACF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;aACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAQ,EAAE,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAC;QAEhE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,GAAG,CAAC,CAAC;QACxE,CAAC;QAGD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtC,GAAG,GAAG;YACN,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC;SAC/C,CAAC,CAAC,CAAC;QAGJ,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACrD,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,MAAM,qBAAqB,GAAyB,EAAE,CAAC;YAEvD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpD,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,KAAK,CAAC;oBACrB,QAAQ,CAAC,IAAI,CACX,WAAW,OAAO,CAAC,OAAO,sBAAsB,GAAG,CAAC,WAAW,iBAAiB,GAAG,CAAC,WAAW,EAAE,CAClG,CAAC;oBACF,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,OAAO,CAAC,OAAQ;oBACzB,SAAS,EAAE,YAAY;oBACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;iBACrD,CAAC;YACJ,CAAC;QACH,CAAC;QAID,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACpC,QAAQ,CAAC,IAAI,CACX,mEAAmE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAC5F,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAQ;YAChC,SAAS,EAAE,EAAE;YACb,QAAQ;SACT,CAAC;IACJ,CAAC;IASD,YAAY,CACV,aAAuB,EACvB,OAAiC,EACjC,OAAqC;QAErC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAG9B,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACpD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,yBAAyB,GAAG,WAAW,OAAO,GAAG,GAAG,CAAC;gBACrE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;oBACjC,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;gBAChC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAC;QAC3D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;gBACxE,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,MAAM,SAAS,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAgC,CAAC;QACpE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEzC,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAG,CAAC;YAGnC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,sDAAsD,OAAO,EAAE,CAAC;gBAChF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;oBACjC,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;gBAChC,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YAErC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAGpB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,oCAAoC,CAAC,CAAC;gBAC7E,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,aAAa,CAAC,CAAC;gBAC9C,SAAS;YACX,CAAC;YAGD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC;YAGD,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAGpB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACvC,CAAC;gBACD,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC;oBACrC,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAE,UAAU;oBACvB,WAAW,EAAE,OAAO;iBACrB,CAAC,CAAC;gBAEH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,KAAK,EAAE,CAAC;QACV,CAAC;QAED,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,6BAA6B,QAAQ,WAAW,CAAC,CAAC;QAClE,CAAC;QAGD,MAAM,iBAAiB,GAA6B,EAAE,CAAC;QACvD,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YAEzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,aAAa,CAAC,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBACtE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAC3E,IAAI,WAAW,EAAE,CAAC;wBAChB,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACpC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;4BACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAE3B,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAGD,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAG3D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7F,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACrD,CAAC;QACJ,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC9C,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACrD,CAAC;IACJ,CAAC;IAOD,qBAAqB,CAAC,OAA+B;QACnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC;IASD,yBAAyB,CACvB,WAAmB,EACnB,OAAiC,EACjC,WAAmB,EAAE;QAErB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,CAAC;QAGd,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkC,CAAC;QACzD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAG,CAAC;YACnC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YAErC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAED,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AA1mBD,8DA0mBC","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 // 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, ComponentLibraryEntity[]>();\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: ComponentLibraryEntity[] = [];\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: 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 (case-insensitive)\n const libMap = new Map<string, ComponentLibraryEntity>();\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 { 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 // 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, ComponentLibraryEntity[]>();\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: ComponentLibraryEntity[] = [];\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: 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 (case-insensitive)\n const libMap = new Map<string, ComponentLibraryEntity>();\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,18 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const core_libraries_1 = require("./core-libraries");
|
|
6
|
-
const resource_manager_1 = require("./resource-manager");
|
|
7
|
-
const library_dependency_resolver_1 = require("./library-dependency-resolver");
|
|
1
|
+
import { StandardLibraryManager } from './standard-libraries';
|
|
2
|
+
import { getCoreRuntimeLibraries, isCoreRuntimeLibrary } from './core-libraries';
|
|
3
|
+
import { resourceManager } from './resource-manager';
|
|
4
|
+
import { LibraryDependencyResolver } from './library-dependency-resolver';
|
|
8
5
|
const LIBRARY_LOADER_COMPONENT_ID = 'mj-react-runtime-library-loader-singleton';
|
|
9
|
-
class LibraryLoader {
|
|
6
|
+
export class LibraryLoader {
|
|
7
|
+
static { this.loadedResources = new Map(); }
|
|
8
|
+
static { this.loadedLibraryStates = new Map(); }
|
|
9
|
+
static { this.dependencyResolver = new LibraryDependencyResolver({ debug: false }); }
|
|
10
|
+
static { this.enableProgressiveDelay = false; }
|
|
10
11
|
static async loadAllLibraries(config, additionalLibraries, options) {
|
|
11
12
|
if (config) {
|
|
12
|
-
|
|
13
|
+
StandardLibraryManager.setConfiguration(config);
|
|
13
14
|
}
|
|
14
15
|
if (additionalLibraries && additionalLibraries.length > 0) {
|
|
15
|
-
const currentConfig =
|
|
16
|
+
const currentConfig = StandardLibraryManager.getConfiguration();
|
|
16
17
|
const mergedConfig = {
|
|
17
18
|
libraries: [...currentConfig.libraries, ...additionalLibraries],
|
|
18
19
|
metadata: {
|
|
@@ -20,12 +21,12 @@ class LibraryLoader {
|
|
|
20
21
|
lastUpdated: new Date().toISOString()
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
|
-
|
|
24
|
+
StandardLibraryManager.setConfiguration(mergedConfig);
|
|
24
25
|
}
|
|
25
26
|
return this.loadLibrariesFromConfig(undefined, options?.debug);
|
|
26
27
|
}
|
|
27
28
|
static async loadLibrariesFromConfig(options, debug) {
|
|
28
|
-
const coreLibraries =
|
|
29
|
+
const coreLibraries = getCoreRuntimeLibraries(debug);
|
|
29
30
|
const corePromises = coreLibraries.map(lib => this.loadScript(lib.cdnUrl, lib.globalVariable, debug));
|
|
30
31
|
const coreResults = await Promise.all(corePromises);
|
|
31
32
|
const React = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'React');
|
|
@@ -45,9 +46,9 @@ class LibraryLoader {
|
|
|
45
46
|
console.log('✓ Exposed empty PropTypes as window.PropTypes for UMD compatibility');
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
|
-
const config =
|
|
49
|
-
const enabledLibraries =
|
|
50
|
-
let pluginLibraries = enabledLibraries.filter(lib => !
|
|
49
|
+
const config = StandardLibraryManager.getConfiguration();
|
|
50
|
+
const enabledLibraries = StandardLibraryManager.getEnabledLibraries();
|
|
51
|
+
let pluginLibraries = enabledLibraries.filter(lib => !isCoreRuntimeLibrary(lib.id));
|
|
51
52
|
if (options) {
|
|
52
53
|
if (options.categories) {
|
|
53
54
|
pluginLibraries = pluginLibraries.filter(lib => options.categories.includes(lib.category));
|
|
@@ -145,7 +146,7 @@ class LibraryLoader {
|
|
|
145
146
|
resolve(global);
|
|
146
147
|
}
|
|
147
148
|
else {
|
|
148
|
-
const timeoutId =
|
|
149
|
+
const timeoutId = resourceManager.setTimeout(LIBRARY_LOADER_COMPONENT_ID, () => {
|
|
149
150
|
const delayedGlobal = window[globalName];
|
|
150
151
|
if (delayedGlobal) {
|
|
151
152
|
if (debug) {
|
|
@@ -170,7 +171,7 @@ class LibraryLoader {
|
|
|
170
171
|
console.log(`📦 Loading library '${globalName}' from ${url}...`);
|
|
171
172
|
}
|
|
172
173
|
document.head.appendChild(script);
|
|
173
|
-
|
|
174
|
+
resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, script);
|
|
174
175
|
});
|
|
175
176
|
this.loadedResources.set(url, {
|
|
176
177
|
element: document.querySelector(`script[src="${url}"]`),
|
|
@@ -204,7 +205,7 @@ class LibraryLoader {
|
|
|
204
205
|
console.log(`⏳ Waiting ${delay}ms for ${globalName} to initialize (attempt ${attempt + 1}/${maxAttempts})...`);
|
|
205
206
|
}
|
|
206
207
|
await new Promise(resolve => {
|
|
207
|
-
|
|
208
|
+
resourceManager.setTimeout(LIBRARY_LOADER_COMPONENT_ID, () => resolve(undefined), delay, { globalName, attempt });
|
|
208
209
|
});
|
|
209
210
|
totalDelay += delay;
|
|
210
211
|
}
|
|
@@ -246,7 +247,7 @@ class LibraryLoader {
|
|
|
246
247
|
link.rel = 'stylesheet';
|
|
247
248
|
link.href = url;
|
|
248
249
|
document.head.appendChild(link);
|
|
249
|
-
|
|
250
|
+
resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, link);
|
|
250
251
|
this.loadedResources.set(url, {
|
|
251
252
|
element: link,
|
|
252
253
|
promise: Promise.resolve()
|
|
@@ -259,7 +260,7 @@ class LibraryLoader {
|
|
|
259
260
|
resolve(global);
|
|
260
261
|
}
|
|
261
262
|
else {
|
|
262
|
-
|
|
263
|
+
resourceManager.setTimeout(LIBRARY_LOADER_COMPONENT_ID, () => {
|
|
263
264
|
const delayedGlobal = window[globalName];
|
|
264
265
|
if (delayedGlobal) {
|
|
265
266
|
resolve(delayedGlobal);
|
|
@@ -277,7 +278,7 @@ class LibraryLoader {
|
|
|
277
278
|
const loadHandler = () => {
|
|
278
279
|
checkGlobal();
|
|
279
280
|
};
|
|
280
|
-
|
|
281
|
+
resourceManager.addEventListener(LIBRARY_LOADER_COMPONENT_ID, script, 'load', loadHandler, { once: true });
|
|
281
282
|
}
|
|
282
283
|
static getLoadedResources() {
|
|
283
284
|
return this.loadedResources;
|
|
@@ -290,7 +291,7 @@ class LibraryLoader {
|
|
|
290
291
|
});
|
|
291
292
|
this.loadedResources.clear();
|
|
292
293
|
this.loadedLibraryStates.clear();
|
|
293
|
-
|
|
294
|
+
resourceManager.cleanupComponent(LIBRARY_LOADER_COMPONENT_ID);
|
|
294
295
|
}
|
|
295
296
|
static async loadLibraryWithDependencies(libraryName, allLibraries, requestedBy = 'user', options) {
|
|
296
297
|
const debug = options?.debug || false;
|
|
@@ -468,9 +469,4 @@ class LibraryLoader {
|
|
|
468
469
|
return this.loadedLibraryStates.get(libraryName)?.version;
|
|
469
470
|
}
|
|
470
471
|
}
|
|
471
|
-
exports.LibraryLoader = LibraryLoader;
|
|
472
|
-
LibraryLoader.loadedResources = new Map();
|
|
473
|
-
LibraryLoader.loadedLibraryStates = new Map();
|
|
474
|
-
LibraryLoader.dependencyResolver = new library_dependency_resolver_1.LibraryDependencyResolver({ debug: false });
|
|
475
|
-
LibraryLoader.enableProgressiveDelay = false;
|
|
476
472
|
//# sourceMappingURL=library-loader.js.map
|