@memberjunction/react-runtime 4.4.0 → 5.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 -31
- package/CHANGELOG.md +17 -0
- package/dist/324.runtime.umd.js +17 -17
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/component-manager/component-manager.js.map +1 -1
- package/dist/component-manager/types.d.ts +2 -2
- package/dist/component-manager/types.d.ts.map +1 -1
- package/dist/component-manager/types.js.map +1 -1
- package/dist/registry/component-registry-service.js.map +1 -1
- package/dist/runtime/component-hierarchy.d.ts +3 -3
- package/dist/runtime/component-hierarchy.d.ts.map +1 -1
- 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.umd.js +1 -1
- package/dist/types/dependency-types.d.ts +3 -3
- package/dist/types/dependency-types.d.ts.map +1 -1
- package/dist/types/dependency-types.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/library-dependency-resolver.d.ts +7 -7
- package/dist/utilities/library-dependency-resolver.d.ts.map +1 -1
- package/dist/utilities/library-dependency-resolver.js.map +1 -1
- package/dist/utilities/library-loader.d.ts +3 -3
- package/dist/utilities/library-loader.d.ts.map +1 -1
- package/dist/utilities/library-loader.js.map +1 -1
- package/dist/utilities/library-registry.d.ts +2 -2
- package/dist/utilities/library-registry.d.ts.map +1 -1
- package/dist/utilities/library-registry.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/package.json +6 -6
- package/src/compiler/component-compiler.ts +2 -2
- package/src/component-manager/component-manager.ts +1 -1
- package/src/component-manager/types.ts +2 -2
- package/src/registry/component-registry-service.ts +10 -10
- package/src/runtime/component-hierarchy.ts +3 -3
- package/src/types/dependency-types.ts +3 -3
- package/src/types/index.ts +2 -2
- package/src/utilities/library-dependency-resolver.ts +11 -11
- package/src/utilities/library-loader.ts +3 -3
- package/src/utilities/library-registry.ts +4 -4
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MJComponentLibraryEntity } from '@memberjunction/core-entities';
|
|
2
2
|
export interface ParsedDependency {
|
|
3
3
|
name: string;
|
|
4
4
|
versionSpec: string;
|
|
@@ -15,7 +15,7 @@ export interface ResolvedVersion {
|
|
|
15
15
|
warnings?: string[];
|
|
16
16
|
}
|
|
17
17
|
export interface DependencyNode {
|
|
18
|
-
library:
|
|
18
|
+
library: MJComponentLibraryEntity;
|
|
19
19
|
dependencies: Map<string, string>;
|
|
20
20
|
dependents: Set<string>;
|
|
21
21
|
}
|
|
@@ -25,7 +25,7 @@ export interface DependencyGraph {
|
|
|
25
25
|
}
|
|
26
26
|
export interface LoadOrderResult {
|
|
27
27
|
success: boolean;
|
|
28
|
-
order?:
|
|
28
|
+
order?: MJComponentLibraryEntity[];
|
|
29
29
|
cycles?: string[][];
|
|
30
30
|
errors?: string[];
|
|
31
31
|
warnings?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-types.d.ts","sourceRoot":"","sources":["../../src/types/dependency-types.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dependency-types.d.ts","sourceRoot":"","sources":["../../src/types/dependency-types.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAKD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,wBAAwB,CAAC;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAKD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpB;AAKD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAKD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAK7E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAKD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAKD,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-types.js","sourceRoot":"","sources":["../../src/types/dependency-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * @fileoverview Type definitions for library dependency management\n * @module @memberjunction/react-runtime/types\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"dependency-types.js","sourceRoot":"","sources":["../../src/types/dependency-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * @fileoverview Type definitions for library dependency management\n * @module @memberjunction/react-runtime/types\n */\n\nimport { MJComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Represents a parsed dependency with name and version specification\n */\nexport interface ParsedDependency {\n name: string;\n versionSpec: string;\n}\n\n/**\n * Represents a version requirement for a library\n */\nexport interface VersionRequirement {\n library: string;\n versionSpec: string;\n requestedBy: string; // Which library requested this dependency\n}\n\n/**\n * Represents a resolved version after conflict resolution\n */\nexport interface ResolvedVersion {\n library: string;\n version: string;\n satisfies: VersionRequirement[];\n warnings?: string[];\n}\n\n/**\n * Node in the dependency graph\n */\nexport interface DependencyNode {\n library: MJComponentLibraryEntity;\n dependencies: Map<string, string>; // dependency name -> version spec\n dependents: Set<string>; // libraries that depend on this one\n}\n\n/**\n * Dependency graph structure\n */\nexport interface DependencyGraph {\n nodes: Map<string, DependencyNode>;\n roots: Set<string>; // libraries with no dependents\n}\n\n/**\n * Result of determining load order\n */\nexport interface LoadOrderResult {\n success: boolean;\n order?: MJComponentLibraryEntity[];\n cycles?: string[][];\n errors?: string[];\n warnings?: string[];\n}\n\n/**\n * Semver version range types\n */\nexport type VersionRangeType = 'exact' | 'tilde' | 'caret' | 'range' | 'any';\n\n/**\n * Parsed semver version\n */\nexport interface ParsedVersion {\n major: number;\n minor: number;\n patch: number;\n prerelease?: string;\n build?: string;\n}\n\n/**\n * Version range specification\n */\nexport interface VersionRange {\n type: VersionRangeType;\n operator?: string;\n version?: ParsedVersion;\n raw: string;\n}\n\n/**\n * Library load state tracking\n */\nexport interface LoadedLibraryState {\n name: string;\n version: string;\n globalVariable: string;\n loadedAt: Date;\n requestedBy: string[];\n dependencies: string[];\n}\n\n/**\n * Options for dependency resolution\n */\nexport interface DependencyResolutionOptions {\n allowPrerelease?: boolean;\n preferLatest?: boolean;\n strict?: boolean; // Fail on any version conflict\n maxDepth?: number; // Maximum dependency depth to prevent infinite recursion\n debug?: boolean;\n}"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MJComponentLibraryEntity } from '@memberjunction/core-entities';
|
|
2
2
|
import { ComponentLibraryDependency, ComponentStyles, ComponentObject } from '@memberjunction/interactive-component-types';
|
|
3
3
|
export interface CompiledComponent {
|
|
4
4
|
factory: (context: RuntimeContext, styles?: ComponentStyles, components?: Record<string, any>) => ComponentObject;
|
|
@@ -19,7 +19,7 @@ export interface CompileOptions {
|
|
|
19
19
|
name: string;
|
|
20
20
|
code?: string;
|
|
21
21
|
}>;
|
|
22
|
-
allLibraries:
|
|
22
|
+
allLibraries: MJComponentLibraryEntity[];
|
|
23
23
|
}
|
|
24
24
|
export interface RegistryEntry {
|
|
25
25
|
component: ComponentObject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAkOA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC","sourcesContent":["/**\n * @fileoverview Core type definitions for the MemberJunction React Runtime.\n * These types are platform-agnostic and can be used in any JavaScript environment.\n * @module @memberjunction/react-runtime/types\n */\n\nimport { UserInfo } from '@memberjunction/core';\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAkOA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC","sourcesContent":["/**\n * @fileoverview Core type definitions for the MemberJunction React Runtime.\n * These types are platform-agnostic and can be used in any JavaScript environment.\n * @module @memberjunction/react-runtime/types\n */\n\nimport { UserInfo } from '@memberjunction/core';\nimport { MJComponentLibraryEntity } from '@memberjunction/core-entities';\nimport { ComponentLibraryDependency, ComponentStyles, ComponentObject } from '@memberjunction/interactive-component-types';\n\n/**\n * Represents a compiled React component with its metadata\n */\nexport interface CompiledComponent {\n /** Factory function that creates a ComponentObject when called with context */\n factory: (context: RuntimeContext, styles?: ComponentStyles, components?: Record<string, any>) => ComponentObject;\n /** Unique identifier for the component */\n id: string;\n /** Original component name */\n name: string;\n /** Compilation timestamp */\n compiledAt: Date;\n /** Any compilation warnings */\n warnings?: string[];\n}\n\n/**\n * Options for compiling a React component\n */\nexport interface CompileOptions {\n /** Component name for identification */\n componentName: string;\n /** Raw component code to compile */\n componentCode: string;\n /** Optional styles to inject */\n styles?: ComponentStyles;\n /** Whether to use production mode optimizations */\n production?: boolean;\n /** Custom Babel plugins to use */\n babelPlugins?: string[];\n /** Custom Babel presets to use */\n babelPresets?: string[];\n\n /** Library dependencies that the component requires */\n libraries?: ComponentLibraryDependency[];\n \n /** Child component dependencies that the component requires */\n dependencies?: Array<{ name: string; code?: string }>;\n\n /**\n * Required, metadata for all possible libraries allowed by the system\n */\n allLibraries: MJComponentLibraryEntity[];\n}\n\n\n/**\n * Registry entry for a compiled component\n */\nexport interface RegistryEntry {\n /** The compiled component object with all methods */\n component: ComponentObject;\n /** Component metadata */\n metadata: ComponentMetadata;\n /** Last access time for LRU cache */\n lastAccessed: Date;\n /** Reference count for cleanup */\n refCount: number;\n}\n\n/**\n * Metadata about a registered component\n */\nexport interface ComponentMetadata {\n /** Unique component identifier */\n id: string;\n /** Component name */\n name: string;\n /** Component version */\n version: string;\n /** Namespace for organization */\n namespace: string;\n /** Registration timestamp */\n registeredAt: Date;\n /** Optional tags for categorization */\n tags?: string[];\n}\n\n/**\n * Error information from component execution\n */\nexport interface ComponentError {\n /** Error message */\n message: string;\n /** Error stack trace */\n stack?: string;\n /** Component name where error occurred */\n componentName: string;\n /** Error phase (compilation, render, etc.) */\n phase: 'compilation' | 'registration' | 'render' | 'runtime';\n /** Additional error details */\n details?: any;\n}\n\n/**\n * Props passed to React components\n */\nexport interface ComponentProps {\n /** Data object for the component */\n data: any;\n /** User-managed state */\n userState: any;\n /** Utility functions available to the component */\n utilities: any;\n /** Callback functions */\n callbacks: any;\n /** Child components available for use */\n components?: Record<string, any>;\n /** Component styles */\n styles?: ComponentStyles;\n /** Standard state change handler for controlled components */\n onStateChanged?: (stateUpdate: Record<string, any>) => void;\n}\n\n/**\n * Configuration for the component compiler\n */\nexport interface CompilerConfig {\n /** Babel configuration */\n babel: {\n /** Presets to use */\n presets: string[];\n /** Plugins to use */\n plugins: string[];\n };\n /** Whether to minify output */\n minify: boolean;\n /** Source map generation */\n sourceMaps: boolean;\n /** Cache compiled components */\n cache: boolean;\n /** Maximum cache size */\n maxCacheSize: number;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n/**\n * Configuration for the component registry\n */\nexport interface RegistryConfig {\n /** Maximum number of components to keep in memory */\n maxComponents: number;\n /** Time in ms before removing unused components */\n cleanupInterval: number;\n /** Whether to use LRU eviction */\n useLRU: boolean;\n /** Namespace isolation */\n enableNamespaces: boolean;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n/**\n * Result of a compilation operation\n */\nexport interface CompilationResult {\n /** Whether compilation succeeded */\n success: boolean;\n /** The compiled component if successful */\n component?: CompiledComponent;\n /** Error information if failed */\n error?: ComponentError;\n /** Compilation duration in ms */\n duration: number;\n /** Size of compiled code in bytes */\n size?: number;\n /** Libraries loaded during compilation */\n loadedLibraries?: Map<string, any>;\n}\n\n/**\n * Runtime context for component execution\n */\nexport interface RuntimeContext {\n /** React library reference */\n React: any;\n /** ReactDOM library reference */\n ReactDOM?: any;\n /** Additional libraries available */\n libraries?: Record<string, any>;\n /** Global utilities */\n utilities?: Record<string, any>;\n}\n\n/**\n * Component lifecycle events\n */\nexport interface ComponentLifecycle {\n /** Called before component mounts */\n beforeMount?: () => void;\n /** Called after component mounts */\n afterMount?: () => void;\n /** Called before component updates */\n beforeUpdate?: (prevProps: any, nextProps: any) => void;\n /** Called after component updates */\n afterUpdate?: (prevProps: any, currentProps: any) => void;\n /** Called before component unmounts */\n beforeUnmount?: () => void;\n}\n\n/**\n * Options for creating an error boundary\n */\nexport interface ErrorBoundaryOptions {\n /** Custom error handler */\n onError?: (error: Error, errorInfo: any) => void;\n /** Fallback UI to render on error */\n fallback?: any;\n /** Whether to log errors */\n logErrors?: boolean;\n /** Error recovery strategy */\n recovery?: 'retry' | 'reset' | 'none';\n}\n\n// Export library configuration types\nexport * from './library-config';\n\n// Export dependency types\nexport * from './dependency-types';\n\n// Re-export ComponentObject for convenience\nexport { ComponentObject } from '@memberjunction/interactive-component-types';"]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MJComponentLibraryEntity } from '@memberjunction/core-entities';
|
|
2
2
|
import { DependencyGraph, LoadOrderResult, ResolvedVersion, VersionRequirement, DependencyResolutionOptions } from '../types/dependency-types';
|
|
3
3
|
export declare class LibraryDependencyResolver {
|
|
4
4
|
private debug;
|
|
5
5
|
constructor(options?: DependencyResolutionOptions);
|
|
6
6
|
parseDependencies(json: string | null): Map<string, string>;
|
|
7
|
-
buildDependencyGraph(libraries:
|
|
7
|
+
buildDependencyGraph(libraries: MJComponentLibraryEntity[]): DependencyGraph;
|
|
8
8
|
detectCycles(graph: DependencyGraph): string[][];
|
|
9
|
-
topologicalSort(graph: DependencyGraph):
|
|
9
|
+
topologicalSort(graph: DependencyGraph): MJComponentLibraryEntity[];
|
|
10
10
|
private parseVersion;
|
|
11
11
|
private parseVersionRange;
|
|
12
12
|
private versionSatisfiesRange;
|
|
13
13
|
private compareVersions;
|
|
14
|
-
resolveVersionConflicts(requirements: VersionRequirement[], availableLibraries:
|
|
15
|
-
getLoadOrder(requestedLibs: string[], allLibs:
|
|
16
|
-
getDirectDependencies(library:
|
|
17
|
-
getTransitiveDependencies(libraryName: string, allLibs:
|
|
14
|
+
resolveVersionConflicts(requirements: VersionRequirement[], availableLibraries: MJComponentLibraryEntity[]): ResolvedVersion;
|
|
15
|
+
getLoadOrder(requestedLibs: string[], allLibs: MJComponentLibraryEntity[], options?: DependencyResolutionOptions): LoadOrderResult;
|
|
16
|
+
getDirectDependencies(library: MJComponentLibraryEntity): Map<string, string>;
|
|
17
|
+
getTransitiveDependencies(libraryName: string, allLibs: MJComponentLibraryEntity[], maxDepth?: number): Set<string>;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=library-dependency-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/utilities/library-dependency-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"library-dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/utilities/library-dependency-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,eAAe,EAEf,eAAe,EAGf,eAAe,EAGf,kBAAkB,EAClB,2BAA2B,EAC5B,MAAM,2BAA2B,CAAC;AAKnC,qBAAa,yBAAyB;IACpC,OAAO,CAAC,KAAK,CAAkB;gBAEnB,OAAO,CAAC,EAAE,2BAA2B;IASjD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IA4B3D,oBAAoB,CAAC,SAAS,EAAE,wBAAwB,EAAE,GAAG,eAAe;IAuC5E,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,EAAE;IA4ChD,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,EAAE;IAmDnE,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,iBAAiB;IA6CzB,OAAO,CAAC,qBAAqB;IAmD7B,OAAO,CAAC,eAAe;IAqBvB,uBAAuB,CACrB,YAAY,EAAE,kBAAkB,EAAE,EAClC,kBAAkB,EAAE,wBAAwB,EAAE,GAC7C,eAAe;IA6ElB,YAAY,CACV,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,EAAE,wBAAwB,EAAE,EACnC,OAAO,CAAC,EAAE,2BAA2B,GACpC,eAAe;IA+KlB,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAW7E,yBAAyB,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,wBAAwB,EAAE,EACnC,QAAQ,GAAE,MAAW,GACpB,GAAG,CAAC,MAAM,CAAC;CAiCf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-dependency-resolver.js","sourceRoot":"","sources":["../../src/utilities/library-dependency-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Library dependency resolution utilities\n * Provides dependency graph construction, cycle detection, topological sorting, and version resolution\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { 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 { MJComponentLibraryEntity } from '@memberjunction/core-entities';\nimport {\n DependencyGraph,\n DependencyNode,\n LoadOrderResult,\n ParsedDependency,\n ParsedVersion,\n ResolvedVersion,\n VersionRange,\n VersionRangeType,\n VersionRequirement,\n DependencyResolutionOptions\n} from '../types/dependency-types';\n\n/**\n * Resolves library dependencies and determines load order\n */\nexport class LibraryDependencyResolver {\n private debug: boolean = false;\n\n constructor(options?: DependencyResolutionOptions) {\n this.debug = options?.debug || false;\n }\n\n /**\n * Parse dependencies from JSON string\n * @param json - JSON string containing dependencies\n * @returns Map of library name to version specification\n */\n parseDependencies(json: string | null): Map<string, string> {\n const dependencies = new Map<string, string>();\n \n if (!json || json.trim() === '') {\n return dependencies;\n }\n\n try {\n const parsed = JSON.parse(json);\n if (typeof parsed === 'object' && parsed !== null) {\n for (const [name, version] of Object.entries(parsed)) {\n if (typeof version === 'string') {\n dependencies.set(name, version);\n }\n }\n }\n } catch (error) {\n console.error('Failed to parse dependencies JSON:', error);\n }\n\n return dependencies;\n }\n\n /**\n * Build a dependency graph from a collection of libraries\n * @param libraries - All available libraries\n * @returns Dependency graph structure\n */\n buildDependencyGraph(libraries: MJComponentLibraryEntity[]): DependencyGraph {\n const nodes = new Map<string, DependencyNode>();\n const roots = new Set<string>();\n\n // First pass: create nodes for all libraries\n for (const library of libraries) {\n const dependencies = this.parseDependencies(library.Dependencies);\n nodes.set(library.Name, {\n library,\n dependencies,\n dependents: new Set()\n });\n // Initially assume all are roots\n roots.add(library.Name);\n }\n\n // Second pass: establish dependency relationships\n for (const [name, node] of nodes) {\n for (const [depName, depVersion] of node.dependencies) {\n const depNode = nodes.get(depName);\n if (depNode) {\n // This library depends on depName, so depName is not a root\n roots.delete(depName);\n // Add this library as a dependent of depName\n depNode.dependents.add(name);\n } else if (this.debug) {\n console.warn(`Dependency '${depName}' not found for library '${name}'`);\n }\n }\n }\n\n return { nodes, roots };\n }\n\n /**\n * Detect circular dependencies in the graph\n * @param graph - Dependency graph\n * @returns Array of cycles found\n */\n detectCycles(graph: DependencyGraph): string[][] {\n const cycles: string[][] = [];\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n const detectCyclesUtil = (nodeName: string): void => {\n visited.add(nodeName);\n recursionStack.add(nodeName);\n path.push(nodeName);\n\n const node = graph.nodes.get(nodeName);\n if (node) {\n for (const [depName] of node.dependencies) {\n if (!visited.has(depName)) {\n detectCyclesUtil(depName);\n } else if (recursionStack.has(depName)) {\n // Found a cycle\n const cycleStartIndex = path.indexOf(depName);\n const cycle = [...path.slice(cycleStartIndex), depName];\n cycles.push(cycle);\n }\n }\n }\n\n path.pop();\n recursionStack.delete(nodeName);\n };\n\n // Check all nodes\n for (const nodeName of graph.nodes.keys()) {\n if (!visited.has(nodeName)) {\n detectCyclesUtil(nodeName);\n }\n }\n\n return cycles;\n }\n\n /**\n * Perform topological sort to determine load order\n * @param graph - Dependency graph\n * @returns Sorted array of libraries to load in order\n */\n topologicalSort(graph: DependencyGraph): MJComponentLibraryEntity[] {\n const result: MJComponentLibraryEntity[] = [];\n const visited = new Set<string>();\n const tempMarked = new Set<string>();\n\n const visit = (nodeName: string): boolean => {\n if (tempMarked.has(nodeName)) {\n // Cycle detected\n return false;\n }\n if (visited.has(nodeName)) {\n return true;\n }\n\n tempMarked.add(nodeName);\n const node = graph.nodes.get(nodeName);\n \n if (node) {\n // Visit dependencies first\n for (const [depName] of node.dependencies) {\n if (graph.nodes.has(depName)) {\n if (!visit(depName)) {\n return false;\n }\n }\n }\n result.push(node.library);\n }\n\n tempMarked.delete(nodeName);\n visited.add(nodeName);\n return true;\n };\n\n // Start with all nodes\n for (const nodeName of graph.nodes.keys()) {\n if (!visited.has(nodeName)) {\n if (!visit(nodeName)) {\n console.error(`Cycle detected involving library: ${nodeName}`);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Parse a semver version string\n * @param version - Version string (e.g., \"1.2.3\")\n * @returns Parsed version object\n */\n private parseVersion(version: string): ParsedVersion | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([^+]+))?(?:\\+(.+))?$/);\n if (!match) {\n return null;\n }\n\n return {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: parseInt(match[3], 10),\n prerelease: match[4],\n build: match[5]\n };\n }\n\n /**\n * Parse a version specification into a range\n * @param spec - Version specification (e.g., \"^1.2.3\", \"~1.2.0\", \"1.2.3\")\n * @returns Parsed version range\n */\n private parseVersionRange(spec: string): VersionRange {\n if (spec === '*' || spec === '' || spec === 'latest') {\n return { type: 'any', raw: spec };\n }\n\n // Tilde range (~1.2.3)\n if (spec.startsWith('~')) {\n const version = this.parseVersion(spec.substring(1));\n return {\n type: 'tilde',\n version: version || undefined,\n raw: spec\n };\n }\n\n // Caret range (^1.2.3)\n if (spec.startsWith('^')) {\n const version = this.parseVersion(spec.substring(1));\n return {\n type: 'caret',\n version: version || undefined,\n raw: spec\n };\n }\n\n // Exact version\n const version = this.parseVersion(spec);\n if (version) {\n return {\n type: 'exact',\n version,\n raw: spec\n };\n }\n\n // Default to any if we can't parse\n return { type: 'any', raw: spec };\n }\n\n /**\n * Check if a version satisfies a version range\n * @param version - Version to check\n * @param range - Version range specification\n * @returns True if version satisfies range\n */\n private versionSatisfiesRange(version: ParsedVersion, range: VersionRange): boolean {\n if (range.type === 'any') {\n return true;\n }\n\n if (!range.version) {\n return false;\n }\n\n const rangeVer = range.version;\n\n switch (range.type) {\n case 'exact':\n return version.major === rangeVer.major &&\n version.minor === rangeVer.minor &&\n version.patch === rangeVer.patch;\n\n case 'tilde': // ~1.2.3 means >=1.2.3 <1.3.0\n if (version.major !== rangeVer.major) return false;\n if (version.minor !== rangeVer.minor) return false;\n return version.patch >= rangeVer.patch;\n\n case 'caret': // ^1.2.3 means >=1.2.3 <2.0.0 (for 1.x.x)\n if (rangeVer.major === 0) {\n // ^0.x.y behaves like ~0.x.y\n if (version.major !== 0) return false;\n if (rangeVer.minor === 0) {\n // ^0.0.x means exactly 0.0.x\n return version.minor === 0 && version.patch === rangeVer.patch;\n }\n // ^0.x.y means >=0.x.y <0.(x+1).0\n if (version.minor !== rangeVer.minor) return false;\n return version.patch >= rangeVer.patch;\n }\n // Normal caret for major > 0\n if (version.major !== rangeVer.major) return false;\n if (version.minor < rangeVer.minor) return false;\n if (version.minor === rangeVer.minor) {\n return version.patch >= rangeVer.patch;\n }\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Compare two versions for sorting\n * @returns -1 if a < b, 0 if a === b, 1 if a > b\n */\n private compareVersions(a: ParsedVersion, b: ParsedVersion): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n if (a.patch !== b.patch) return a.patch - b.patch;\n \n // Handle prerelease versions\n if (!a.prerelease && b.prerelease) return 1; // a is newer\n if (a.prerelease && !b.prerelease) return -1; // b is newer\n if (a.prerelease && b.prerelease) {\n return a.prerelease.localeCompare(b.prerelease);\n }\n \n return 0;\n }\n\n /**\n * Resolve version conflicts using NPM-style resolution\n * @param requirements - Array of version requirements\n * @param availableLibraries - All available libraries to choose from\n * @returns Resolved version information\n */\n resolveVersionConflicts(\n requirements: VersionRequirement[],\n availableLibraries: MJComponentLibraryEntity[]\n ): ResolvedVersion {\n if (requirements.length === 0) {\n throw new Error('No version requirements provided');\n }\n\n const libraryName = requirements[0].library;\n const warnings: string[] = [];\n\n // Find all available versions for this library\n const availableVersions = availableLibraries\n .filter(lib => lib.Name === libraryName && lib.Version)\n .map(lib => ({\n library: lib,\n version: this.parseVersion(lib.Version!)\n }))\n .filter(item => item.version !== null)\n .sort((a, b) => this.compareVersions(b.version!, a.version!)); // Sort descending\n\n if (availableVersions.length === 0) {\n throw new Error(`No versions available for library '${libraryName}'`);\n }\n\n // Parse all requirements\n const ranges = requirements.map(req => ({\n ...req,\n range: this.parseVersionRange(req.versionSpec)\n }));\n\n // Find the highest version that satisfies all requirements\n for (const { library, version } of availableVersions) {\n let satisfiesAll = true;\n const satisfiedRequirements: VersionRequirement[] = [];\n\n for (const req of ranges) {\n if (this.versionSatisfiesRange(version!, req.range)) {\n satisfiedRequirements.push(req);\n } else {\n satisfiesAll = false;\n warnings.push(\n `Version ${library.Version} does not satisfy '${req.versionSpec}' required by ${req.requestedBy}`\n );\n break;\n }\n }\n\n if (satisfiesAll) {\n return {\n library: libraryName,\n version: library.Version!,\n satisfies: requirements,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n }\n\n // No version satisfies all requirements\n // Return the latest version with warnings\n const latest = availableVersions[0];\n warnings.push(\n `Could not find a version that satisfies all requirements. Using ${latest.library.Version}`\n );\n\n return {\n library: libraryName,\n version: latest.library.Version!,\n satisfies: [],\n warnings\n };\n }\n\n /**\n * Get the load order for a set of requested libraries\n * @param requestedLibs - Library names requested\n * @param allLibs - All available libraries\n * @param options - Resolution options\n * @returns Load order result\n */\n getLoadOrder(\n requestedLibs: string[],\n allLibs: MJComponentLibraryEntity[],\n options?: DependencyResolutionOptions\n ): LoadOrderResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Filter out null, undefined, and non-string values from requestedLibs\n const validRequestedLibs = requestedLibs.filter(lib => {\n if (!lib || typeof lib !== 'string') {\n const warning = `Invalid library name: ${lib} (type: ${typeof lib})`;\n warnings.push(warning);\n if (this.debug || options?.debug) {\n console.warn(`⚠️ ${warning}`);\n }\n return false;\n }\n return true;\n });\n\n if (this.debug || options?.debug) {\n console.log('🔍 Getting load order for requested libraries:');\n console.log(' 📝 Requested (raw):', requestedLibs);\n console.log(' 📝 Requested (valid):', validRequestedLibs);\n console.log(' 📚 Total available libraries:', allLibs.length);\n }\n\n // Build a map for quick lookup (case-insensitive)\n const libMap = new Map<string, MJComponentLibraryEntity[]>();\n for (const lib of allLibs) {\n if (!lib?.Name) {\n warnings.push(`Library with missing name found in available libraries`);\n continue;\n }\n const key = lib.Name.toLowerCase();\n if (!libMap.has(key)) {\n libMap.set(key, []);\n }\n libMap.get(key)!.push(lib);\n }\n\n // Collect all libraries needed (requested + their dependencies)\n const needed = new Set<string>();\n const toProcess = [...validRequestedLibs];\n const processed = new Set<string>();\n const versionRequirements = new Map<string, VersionRequirement[]>();\n let depth = 0;\n const maxDepth = options?.maxDepth || 10;\n\n while (toProcess.length > 0 && depth < maxDepth) {\n const current = toProcess.shift()!;\n \n // Extra safety check for null/undefined\n if (!current || typeof current !== 'string') {\n const warning = `Unexpected invalid library name during processing: ${current}`;\n warnings.push(warning);\n if (this.debug || options?.debug) {\n console.warn(`⚠️ ${warning}`);\n }\n continue;\n }\n \n if (processed.has(current)) continue;\n\n processed.add(current);\n needed.add(current);\n\n // Find the library (case-insensitive lookup)\n const libVersions = libMap.get(current.toLowerCase());\n if (!libVersions || libVersions.length === 0) {\n if (this.debug || options?.debug) {\n console.log(` ❌ Library '${current}' not found in available libraries`);\n }\n errors.push(`Library '${current}' not found`);\n continue;\n }\n\n // For now, use the first version found (should be resolved properly)\n const lib = libVersions[0];\n const deps = this.parseDependencies(lib.Dependencies);\n \n if ((this.debug || options?.debug) && deps.size > 0) {\n console.log(` 📌 ${current} requires:`, Array.from(deps.entries()));\n }\n\n // Process dependencies\n for (const [depName, depVersion] of deps) {\n needed.add(depName);\n \n // Track version requirements\n if (!versionRequirements.has(depName)) {\n versionRequirements.set(depName, []);\n }\n versionRequirements.get(depName)!.push({\n library: depName,\n versionSpec: depVersion,\n requestedBy: current\n });\n\n if (!processed.has(depName)) {\n toProcess.push(depName);\n }\n }\n\n depth++;\n }\n\n if (depth >= maxDepth) {\n warnings.push(`Maximum dependency depth (${maxDepth}) reached`);\n }\n\n // Resolve version conflicts for each library\n const resolvedLibraries: MJComponentLibraryEntity[] = [];\n for (const libName of needed) {\n const requirements = versionRequirements.get(libName) || [];\n const versions = libMap.get(libName.toLowerCase()) || [];\n \n if (versions.length === 0) {\n errors.push(`Library '${libName}' not found`);\n continue;\n }\n\n if (requirements.length > 0) {\n try {\n const resolved = this.resolveVersionConflicts(requirements, versions);\n const selectedLib = versions.find(lib => lib.Version === resolved.version);\n if (selectedLib) {\n resolvedLibraries.push(selectedLib);\n if (resolved.warnings) {\n warnings.push(...resolved.warnings);\n }\n }\n } catch (error: any) {\n errors.push(error.message);\n // Use first available version as fallback\n resolvedLibraries.push(versions[0]);\n }\n } else {\n // No specific requirements, use the first (default) version\n resolvedLibraries.push(versions[0]);\n }\n }\n\n // Build dependency graph with resolved libraries\n const graph = this.buildDependencyGraph(resolvedLibraries);\n\n // Check for cycles\n const cycles = this.detectCycles(graph);\n if (cycles.length > 0) {\n errors.push(`Circular dependencies detected: ${cycles.map(c => c.join(' -> ')).join(', ')}`);\n return {\n success: false,\n cycles,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n\n // Perform topological sort\n const sorted = this.topologicalSort(graph);\n\n if (this.debug || options?.debug) {\n console.log('✅ Load order determined:', sorted.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n return {\n success: errors.length === 0,\n order: sorted,\n errors: errors.length > 0 ? errors : undefined,\n warnings: warnings.length > 0 ? warnings : undefined\n };\n }\n\n /**\n * Get direct dependencies of a library\n * @param library - Library to get dependencies for\n * @returns Map of dependency names to version specs\n */\n getDirectDependencies(library: MJComponentLibraryEntity): Map<string, string> {\n return this.parseDependencies(library.Dependencies);\n }\n\n /**\n * Get all transitive dependencies of a library\n * @param libraryName - Library name to analyze\n * @param allLibs - All available libraries\n * @param maxDepth - Maximum depth to traverse\n * @returns Set of all dependency names (including transitive)\n */\n getTransitiveDependencies(\n libraryName: string,\n allLibs: MJComponentLibraryEntity[],\n maxDepth: number = 10\n ): Set<string> {\n const dependencies = new Set<string>();\n const toProcess = [libraryName];\n const processed = new Set<string>();\n let depth = 0;\n\n // Build lookup map (case-insensitive)\n const libMap = new Map<string, MJComponentLibraryEntity>();\n for (const lib of allLibs) {\n libMap.set(lib.Name.toLowerCase(), lib);\n }\n\n while (toProcess.length > 0 && depth < maxDepth) {\n const current = toProcess.shift()!;\n if (processed.has(current)) continue;\n\n processed.add(current);\n const lib = libMap.get(current.toLowerCase());\n if (!lib) continue;\n\n const deps = this.parseDependencies(lib.Dependencies);\n for (const [depName] of deps) {\n dependencies.add(depName);\n if (!processed.has(depName)) {\n toProcess.push(depName);\n }\n }\n\n depth++;\n }\n\n return dependencies;\n }\n}"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StandardLibraries } from './standard-libraries';
|
|
2
2
|
import { LibraryConfiguration, ExternalLibraryConfig, LibraryLoadOptions as ConfigLoadOptions } from '../types/library-config';
|
|
3
|
-
import {
|
|
3
|
+
import { MJComponentLibraryEntity } from '@memberjunction/core-entities';
|
|
4
4
|
import { LoadedLibraryState, DependencyResolutionOptions } from '../types/dependency-types';
|
|
5
5
|
interface LoadedResource {
|
|
6
6
|
element: HTMLScriptElement | HTMLLinkElement;
|
|
@@ -38,8 +38,8 @@ export declare class LibraryLoader {
|
|
|
38
38
|
private static waitForScriptLoad;
|
|
39
39
|
static getLoadedResources(): Map<string, LoadedResource>;
|
|
40
40
|
static clearCache(): void;
|
|
41
|
-
static loadLibraryWithDependencies(libraryName: string, allLibraries:
|
|
42
|
-
static loadLibrariesWithDependencies(libraryNames: string[], allLibraries:
|
|
41
|
+
static loadLibraryWithDependencies(libraryName: string, allLibraries: MJComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<any>;
|
|
42
|
+
static loadLibrariesWithDependencies(libraryNames: string[], allLibraries: MJComponentLibraryEntity[], requestedBy?: string, options?: DependencyResolutionOptions): Promise<Map<string, any>>;
|
|
43
43
|
static getLoadedLibraryStates(): Map<string, LoadedLibraryState>;
|
|
44
44
|
static isLibraryLoaded(libraryName: string): boolean;
|
|
45
45
|
static getLoadedLibraryVersion(libraryName: string): string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-loader.d.ts","sourceRoot":"","sources":["../../src/utilities/library-loader.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG/H,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"library-loader.d.ts","sourceRoot":"","sources":["../../src/utilities/library-loader.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG/H,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAS5F,UAAU,cAAc;IACtB,OAAO,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;CACvB;AAMD,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,eAAe,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzD;AAKD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAKD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAqC;IACnE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAyC;IAC3E,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAmD;IAKpF,OAAc,sBAAsB,EAAE,OAAO,CAAS;WASzC,gBAAgB,CAC3B,MAAM,CAAC,EAAE,oBAAoB,EAC7B,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,EAC7C,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC5B,OAAO,CAAC,iBAAiB,CAAC;WAwBhB,uBAAuB,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;WAkFjG,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;mBAuC9D,UAAU;IAiH/B,OAAO,CAAC,MAAM,CAAC,cAAc;mBAgCR,qBAAqB;IA6D1C,OAAO,CAAC,MAAM,CAAC,OAAO;IA2BtB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmDhC,MAAM,CAAC,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAOxD,MAAM,CAAC,UAAU,IAAI,IAAI;WAuBZ,2BAA2B,CACtC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,wBAAwB,EAAE,EACxC,WAAW,GAAE,MAAe,EAC5B,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,GAAG,CAAC;WAwHF,6BAA6B,CACxC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,wBAAwB,EAAE,EACxC,WAAW,GAAE,MAAe,EAC5B,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAgI5B,MAAM,CAAC,sBAAsB,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAShE,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IASpD,MAAM,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGxE"}
|