@memberjunction/react-runtime 2.94.0 → 2.96.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.
Files changed (50) hide show
  1. package/.turbo/turbo-build.log +9 -9
  2. package/CHANGELOG.md +30 -0
  3. package/dist/compiler/component-compiler.d.ts +1 -0
  4. package/dist/compiler/component-compiler.d.ts.map +1 -1
  5. package/dist/compiler/component-compiler.js +116 -29
  6. package/dist/compiler/component-compiler.js.map +1 -1
  7. package/dist/index.d.ts +2 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/registry/component-registry-service.d.ts +2 -0
  12. package/dist/registry/component-registry-service.d.ts.map +1 -1
  13. package/dist/registry/component-registry-service.js +25 -6
  14. package/dist/registry/component-registry-service.js.map +1 -1
  15. package/dist/registry/component-registry.d.ts +2 -0
  16. package/dist/registry/component-registry.d.ts.map +1 -1
  17. package/dist/registry/component-registry.js +17 -0
  18. package/dist/registry/component-registry.js.map +1 -1
  19. package/dist/registry/component-resolver.d.ts.map +1 -1
  20. package/dist/registry/component-resolver.js +101 -6
  21. package/dist/registry/component-resolver.js.map +1 -1
  22. package/dist/runtime/component-hierarchy.d.ts.map +1 -1
  23. package/dist/runtime/component-hierarchy.js +73 -17
  24. package/dist/runtime/component-hierarchy.js.map +1 -1
  25. package/dist/runtime.umd.js +1 -1
  26. package/dist/types/index.d.ts +1 -1
  27. package/dist/types/index.d.ts.map +1 -1
  28. package/dist/types/index.js.map +1 -1
  29. package/dist/utilities/core-libraries.d.ts +1 -2
  30. package/dist/utilities/core-libraries.d.ts.map +1 -1
  31. package/dist/utilities/core-libraries.js +55 -45
  32. package/dist/utilities/core-libraries.js.map +1 -1
  33. package/dist/utilities/library-dependency-resolver.d.ts.map +1 -1
  34. package/dist/utilities/library-dependency-resolver.js +42 -9
  35. package/dist/utilities/library-dependency-resolver.js.map +1 -1
  36. package/dist/utilities/library-loader.d.ts +4 -2
  37. package/dist/utilities/library-loader.d.ts.map +1 -1
  38. package/dist/utilities/library-loader.js +27 -6
  39. package/dist/utilities/library-loader.js.map +1 -1
  40. package/package.json +5 -5
  41. package/src/compiler/component-compiler.ts +135 -31
  42. package/src/index.ts +7 -1
  43. package/src/registry/component-registry-service.ts +36 -6
  44. package/src/registry/component-registry.ts +28 -0
  45. package/src/registry/component-resolver.ts +123 -10
  46. package/src/runtime/component-hierarchy.ts +97 -31
  47. package/src/types/index.ts +1 -1
  48. package/src/utilities/core-libraries.ts +60 -46
  49. package/src/utilities/library-dependency-resolver.ts +51 -12
  50. package/src/utilities/library-loader.ts +30 -6
@@ -1,30 +1,30 @@
1
1
 
2
- > @memberjunction/react-runtime@2.94.0 build
2
+ > @memberjunction/react-runtime@2.96.0 build
3
3
  > npm run build:node && npm run build:umd
4
4
 
5
5
 
6
- > @memberjunction/react-runtime@2.94.0 build:node
6
+ > @memberjunction/react-runtime@2.96.0 build:node
7
7
  > tsc
8
8
 
9
9
 
10
- > @memberjunction/react-runtime@2.94.0 build:umd
10
+ > @memberjunction/react-runtime@2.96.0 build:umd
11
11
  > webpack --config webpack.umd.config.js
12
12
 
13
13
  [BABEL] Note: The code generator has deoptimised the styling of /home/runner/work/MJ/MJ/packages/MJCoreEntities/dist/generated/entity_subclasses.js as it exceeds the max of 500KB.
14
- asset runtime.umd.js 1.91 MiB [emitted] [minimized] [big] (name: main) 1 related asset
14
+ asset runtime.umd.js 1.92 MiB [emitted] [minimized] [big] (name: main) 1 related asset
15
15
  runtime modules 344 bytes 2 modules
16
16
  modules by path ../../../node_modules/ 1.01 MiB 237 modules
17
17
  modules by path ../../MJGlobal/ 174 KiB
18
18
  modules by path ../../MJGlobal/node_modules/uuid/dist/commonjs-browser/*.js 35 KiB 21 modules
19
19
  modules by path ../../MJGlobal/dist/ 139 KiB 14 modules
20
- modules by path ../../MJCore/ 643 KiB 31 modules
21
- modules by path ./dist/ 336 KiB 25 modules
22
- modules by path ../../MJCoreEntities/dist/ 2.04 MiB
23
- modules by path ../../MJCoreEntities/dist/custom/*.js 241 KiB 15 modules
20
+ modules by path ../../MJCore/ 644 KiB 31 modules
21
+ modules by path ./dist/ 358 KiB 25 modules
22
+ modules by path ../../MJCoreEntities/dist/ 2.05 MiB
23
+ modules by path ../../MJCoreEntities/dist/custom/*.js 245 KiB 15 modules
24
24
  modules by path ../../MJCoreEntities/dist/custom/ResourcePermissions/*.js 46.9 KiB 3 modules
25
25
  + 3 modules
26
26
  modules by path ../../InteractiveComponents/dist/*.js 36.8 KiB
27
27
  ../../InteractiveComponents/dist/index.js 1.21 KiB [built] [code generated]
28
28
  ../../InteractiveComponents/dist/data-requirements.js 79 bytes [built] [code generated]
29
29
  + 8 modules
30
- webpack 5.92.1 compiled successfully in 109563 ms
30
+ webpack 5.92.1 compiled successfully in 101066 ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @memberjunction/react-runtime
2
2
 
3
+ ## 2.96.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 8f34e55: migration
8
+ - 22e365f: migration
9
+ - ad06a79: migration
10
+ - 8e1c946: migration
11
+
12
+ ### Patch Changes
13
+
14
+ - a3d32ec: tweaks
15
+ - Updated dependencies [01dcfde]
16
+ - @memberjunction/core@2.96.0
17
+ - @memberjunction/interactive-component-types@2.96.0
18
+ - @memberjunction/core-entities@2.96.0
19
+ - @memberjunction/global@2.96.0
20
+
21
+ ## 2.95.0
22
+
23
+ ### Patch Changes
24
+
25
+ - 3cd7db6: fix rendering issue
26
+ - Updated dependencies [a54c014]
27
+ - Updated dependencies [85985bd]
28
+ - @memberjunction/core@2.95.0
29
+ - @memberjunction/interactive-component-types@2.95.0
30
+ - @memberjunction/core-entities@2.95.0
31
+ - @memberjunction/global@2.95.0
32
+
3
33
  ## 2.94.0
4
34
 
5
35
  ### Minor Changes
@@ -8,6 +8,7 @@ export declare class ComponentCompiler {
8
8
  setBabelInstance(babel: any): void;
9
9
  compile(options: CompileOptions): Promise<CompilationResult>;
10
10
  private transpileComponent;
11
+ private readonly CORE_LIBRARIES;
11
12
  private wrapComponentCode;
12
13
  private loadRequiredLibraries;
13
14
  private loadStyles;
@@ -1 +1 @@
1
- {"version":3,"file":"component-compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,cAAc,EAEd,iBAAiB,EACjB,cAAc,EAGf,MAAM,UAAU,CAAC;AAyBlB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,aAAa,CAAM;gBAMf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAS5C,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAS5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyElE,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,iBAAiB;YA6KX,qBAAqB;YA2HrB,UAAU;IA+BxB,OAAO,CAAC,UAAU;IAyElB,OAAO,CAAC,sBAAsB;IA0E9B,OAAO,CAAC,sBAAsB;IAiE9B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,sBAAsB;IAa9B,UAAU,IAAI,IAAI;IAQlB,YAAY,IAAI,MAAM;IAQtB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;CAGpD"}
1
+ {"version":3,"file":"component-compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,cAAc,EAEd,iBAAiB,EACjB,cAAc,EAGf,MAAM,UAAU,CAAC;AAyBlB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,aAAa,CAAM;gBAMf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAS5C,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAS5B,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyElE,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE,OAAO,CAAC,iBAAiB;YAwPX,qBAAqB;YAqJrB,UAAU;IA+BxB,OAAO,CAAC,UAAU;IAyElB,OAAO,CAAC,sBAAsB;IA0E9B,OAAO,CAAC,sBAAsB;IAiE9B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,sBAAsB;IAa9B,UAAU,IAAI,IAAI;IAQlB,YAAY,IAAI,MAAM;IAQtB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;CAGpD"}
@@ -16,6 +16,7 @@ const DEFAULT_COMPILER_CONFIG = {
16
16
  };
17
17
  class ComponentCompiler {
18
18
  constructor(config) {
19
+ this.CORE_LIBRARIES = new Set(['React', 'ReactDOM']);
19
20
  this.config = { ...DEFAULT_COMPILER_CONFIG, ...config };
20
21
  this.compilationCache = new Map();
21
22
  }
@@ -84,63 +85,129 @@ class ComponentCompiler {
84
85
  }
85
86
  }
86
87
  wrapComponentCode(componentCode, componentName, libraries, dependencies) {
88
+ const debug = this.config.debug;
87
89
  const libraryDeclarations = libraries && libraries.length > 0
88
90
  ? libraries
89
- .filter(lib => lib.globalVariable)
91
+ .filter(lib => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable))
90
92
  .map(lib => `const ${lib.globalVariable} = libraries['${lib.globalVariable}'];`)
91
93
  .join('\n ')
92
94
  : '';
93
- const componentDeclarations = dependencies && dependencies.length > 0
94
- ? dependencies
95
- .map(dep => `const ${dep.name} = components['${dep.name}'];`)
95
+ const libraryLogChecks = libraries && libraries.length > 0
96
+ ? libraries
97
+ .filter(lib => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable))
98
+ .map(lib => `\nif (!${lib.globalVariable}) { console.error('[React-Runtime-JS] Library "${lib.globalVariable}" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Library "${lib.globalVariable}" is defined');` : ''} }`)
99
+ .join('\n ')
100
+ : '';
101
+ const seenDependencies = new Set();
102
+ const uniqueDependencies = [];
103
+ const duplicates = [];
104
+ if (dependencies && dependencies.length > 0) {
105
+ for (const dep of dependencies) {
106
+ if (dep.name === componentName) {
107
+ continue;
108
+ }
109
+ if (seenDependencies.has(dep.name)) {
110
+ duplicates.push(dep.name);
111
+ }
112
+ else {
113
+ seenDependencies.add(dep.name);
114
+ uniqueDependencies.push(dep);
115
+ }
116
+ }
117
+ }
118
+ const duplicateWarnings = duplicates.length > 0
119
+ ? duplicates
120
+ .map(name => `console.warn('[React-Runtime-JS] WARNING: Component "${name}" is registered multiple times as a dependency. Using first occurrence only.');`)
121
+ .join('\n ')
122
+ : '';
123
+ const componentDeclarations = uniqueDependencies.length > 0
124
+ ? uniqueDependencies
125
+ .map(dep => `const ${dep.name} = componentsOuter['${dep.name}'];`)
96
126
  .join('\n ')
97
127
  : '';
98
- return `
128
+ const componentLogChecks = uniqueDependencies.length > 0
129
+ ? uniqueDependencies
130
+ .map(dep => `if (!${dep.name}) { console.error('[React-Runtime-JS] Dependency "${dep.name}" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Dependency "${dep.name}" is defined');` : ''} }`)
131
+ .join('\n ')
132
+ : '';
133
+ const wrappedCode = `
99
134
  function createComponent(
100
135
  React, ReactDOM,
101
136
  useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useLayoutEffect,
102
137
  libraries, styles, console, components
103
138
  ) {
104
- // Parse the component code once to get the component definition
105
- ${libraryDeclarations ? libraryDeclarations + '\n ' : ''}${componentDeclarations ? componentDeclarations + '\n ' : ''}${componentCode}
139
+ // Code for ${componentName}
140
+ ${componentCode}
106
141
 
107
142
  // Ensure the component exists
108
143
  if (typeof ${componentName} === 'undefined') {
109
144
  throw new Error('Component "${componentName}" is not defined in the provided code');
110
145
  }
146
+ else {
147
+ ${debug ? `console.log('[React-Runtime-JS] Component "${componentName}" is defined');` : ''}
148
+ }
111
149
 
112
150
  // Store the component in a variable so we don't lose it
113
151
  const UserComponent = ${componentName};
114
-
115
- // Debug logging to understand what we're getting
116
- console.log('Component ${componentName} type:', typeof UserComponent);
117
- if (typeof UserComponent === 'object' && UserComponent !== null) {
118
- console.log('Component ${componentName} keys:', Object.keys(UserComponent));
119
- console.log('Component ${componentName} has .component:', 'component' in UserComponent);
120
- if ('component' in UserComponent) {
121
- console.log('Component ${componentName}.component type:', typeof UserComponent.component);
122
- }
123
- }
124
-
152
+
125
153
  // Check if the component is already a ComponentObject (has a .component property)
126
154
  // If so, extract the actual React component
127
155
  const ActualComponent = (typeof UserComponent === 'object' && UserComponent !== null && 'component' in UserComponent)
128
156
  ? UserComponent.component
129
157
  : UserComponent;
130
158
 
159
+ // Debug logging to understand what we're getting
160
+ ${debug ? `
161
+ console.log('[React-Runtime-JS]Component ${componentName} type:', typeof UserComponent);
162
+ if (typeof UserComponent === 'object' && UserComponent !== null) {
163
+ console.log('[React-Runtime-JS]Component ${componentName} keys:', Object.keys(UserComponent));
164
+ console.log('[React-Runtime-JS]Component ${componentName} has .component:', 'component' in UserComponent);
165
+ if ('component' in UserComponent) {
166
+ console.log('[React-Runtime-JS]Component ${componentName}.component type:', typeof UserComponent.component);
167
+ }
168
+ }` : ''}
169
+
131
170
  // Validate that we have a function (React component)
132
171
  if (typeof ActualComponent !== 'function') {
133
- console.error('Invalid component type for ${componentName}:', typeof ActualComponent);
134
- console.error('ActualComponent value:', ActualComponent);
135
- console.error('Original UserComponent value:', UserComponent);
136
- throw new Error('Component "${componentName}" must be a function (React component) or an object with a .component property that is a function. Got: ' + typeof ActualComponent);
172
+ console.error('[React-Runtime-JS] Invalid component type for ${componentName}:', typeof ActualComponent);
173
+ console.error('[React-Runtime-JS] ActualComponent value:', ActualComponent);
174
+ console.error('[React-Runtime-JS] Original UserComponent value:', UserComponent);
175
+ throw new Error('[React-Runtime-JS] Component "${componentName}" must be a function (React component) or an object with a .component property that is a function. Got: ' + typeof ActualComponent);
137
176
  }
177
+
178
+ let componentsOuter = null, utilitiesOuter = null;
179
+ const DestructureWrapperUserComponent = (props) => {
180
+ if (!componentsOuter) {
181
+ componentsOuter = props?.components || components;
182
+ }
183
+ if (!utilitiesOuter) {
184
+ utilitiesOuter = props?.utilities;
185
+ }
186
+ ${debug ? `
187
+ console.log('Props for ${componentName}:', props);
188
+ console.log('components for ${componentName}:', componentsOuter);
189
+ console.log('styles for ${componentName}:', styles);
190
+ console.log('utilities for ${componentName}:', utilitiesOuter);
191
+ console.log('libraries for ${componentName}:', libraries);` : ''}
192
+ ${duplicateWarnings ? '// Duplicate dependency warnings\n ' + duplicateWarnings + '\n ' : ''}
193
+ ${libraryDeclarations ? '// Destructure Libraries\n' + libraryDeclarations + '\n ' : ''}
194
+ ${componentDeclarations ? '// Destructure Dependencies\n' + componentDeclarations + '\n ' : ''}
195
+ ${libraryLogChecks}
196
+ ${componentLogChecks}
197
+
198
+ const newProps = {
199
+ ...props,
200
+ components: componentsOuter,
201
+ utilities: utilitiesOuter
202
+ }
203
+ return ActualComponent(newProps);
204
+ };
138
205
 
139
206
  // Create a fresh method registry for each factory call
140
207
  const methodRegistry = new Map();
141
208
 
142
209
  // Create a wrapper component that provides RegisterMethod in callbacks
143
- const ComponentWithMethodRegistry = React.forwardRef((props, ref) => {
210
+ const ComponentWithMethodRegistry = (props) => {
144
211
  // Register methods on mount
145
212
  React.useEffect(() => {
146
213
  // Clear previous methods
@@ -168,11 +235,11 @@ class ComponentCompiler {
168
235
  }, [props.callbacks]);
169
236
 
170
237
  // Render the original component with enhanced callbacks
171
- return React.createElement(ActualComponent, {
238
+ return React.createElement(DestructureWrapperUserComponent, {
172
239
  ...props,
173
240
  callbacks: enhancedCallbacks
174
241
  });
175
- });
242
+ };
176
243
 
177
244
  ComponentWithMethodRegistry.displayName = '${componentName}WithMethods';
178
245
 
@@ -180,7 +247,6 @@ class ComponentCompiler {
180
247
  return {
181
248
  component: ComponentWithMethodRegistry,
182
249
 
183
- // Legacy methods for backward compatibility
184
250
  print: function() {
185
251
  const printMethod = methodRegistry.get('print');
186
252
  if (printMethod) {
@@ -233,7 +299,7 @@ class ComponentCompiler {
233
299
  if (method) {
234
300
  return method(...args);
235
301
  }
236
- console.warn(\`Method '\${methodName}' is not registered on component ${componentName}\`);
302
+ console.warn(\`[React-Runtime-JS] Method '\${methodName}' is not registered on component ${componentName}\`);
237
303
  return undefined;
238
304
  },
239
305
 
@@ -244,6 +310,7 @@ class ComponentCompiler {
244
310
  };
245
311
  }
246
312
  `;
313
+ return wrappedCode;
247
314
  }
248
315
  async loadRequiredLibraries(libraries, componentLibraries) {
249
316
  const loadedLibraries = new Map();
@@ -269,13 +336,33 @@ class ComponentCompiler {
269
336
  else {
270
337
  console.warn('âš ī¸ No componentLibraries provided for LibraryRegistry initialization');
271
338
  }
272
- const libraryNames = libraries.map(lib => lib.name);
339
+ const filteredLibraries = libraries.filter(lib => {
340
+ if (!lib || typeof lib !== 'object' || !lib.name) {
341
+ console.warn(`âš ī¸ Invalid library entry detected (missing name):`, lib);
342
+ return false;
343
+ }
344
+ const libNameLower = lib.name.toLowerCase();
345
+ if (libNameLower === 'react' || libNameLower === 'reactdom') {
346
+ console.warn(`âš ī¸ Library '${lib.name}' is automatically loaded by the React runtime and should not be requested separately`);
347
+ return false;
348
+ }
349
+ return true;
350
+ });
351
+ const libraryNames = filteredLibraries
352
+ .map(lib => lib.name)
353
+ .filter(name => name && typeof name === 'string');
273
354
  if (this.config.debug) {
274
355
  console.log('đŸ“Ļ Using dependency-aware loading for libraries:', libraryNames);
275
356
  }
357
+ if (filteredLibraries.length === 0) {
358
+ if (this.config.debug) {
359
+ console.log('📚 All requested libraries were filtered out (React/ReactDOM), returning empty map');
360
+ }
361
+ return loadedLibraries;
362
+ }
276
363
  try {
277
364
  const loadedLibraryMap = await library_loader_1.LibraryLoader.loadLibrariesWithDependencies(libraryNames, componentLibraries, 'component-compiler', { debug: this.config.debug });
278
- for (const lib of libraries) {
365
+ for (const lib of filteredLibraries) {
279
366
  const isApproved = library_registry_1.LibraryRegistry.isApproved(lib.name);
280
367
  if (!isApproved) {
281
368
  console.error(`❌ Library '${lib.name}' is not approved`);
@@ -1 +1 @@
1
- {"version":3,"file":"component-compiler.js","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Platform-agnostic React component compiler.\n * Compiles React component source code into executable components using Babel.\n * @module @memberjunction/react-runtime/compiler\n */\n\nimport { UserInfo } from '@memberjunction/core';\nimport { \n CompileOptions, \n CompiledComponent, \n CompilationResult,\n CompilerConfig,\n ComponentError,\n RuntimeContext\n} from '../types';\nimport { ComponentStyles, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { LibraryRegistry } from '../utilities/library-registry';\nimport { LibraryLoader } from '../utilities/library-loader';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Default compiler configuration\n */\nconst DEFAULT_COMPILER_CONFIG: CompilerConfig = {\n babel: {\n presets: ['react'],\n plugins: []\n },\n minify: false,\n sourceMaps: false,\n cache: true,\n maxCacheSize: 100,\n debug: false\n};\n\n/**\n * Platform-agnostic React component compiler.\n * Transforms JSX/React component source code into executable JavaScript.\n */\nexport class ComponentCompiler {\n private config: CompilerConfig;\n private compilationCache: Map<string, CompiledComponent>;\n private cacheAccessOrder: string[]; // Track access order for LRU\n private babelInstance: any;\n\n /**\n * Creates a new ComponentCompiler instance\n * @param config - Optional compiler configuration\n */\n constructor(config?: Partial<CompilerConfig>) {\n this.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n this.compilationCache = new Map();\n }\n\n /**\n * Sets the Babel instance to use for compilation\n * @param babel - The Babel standalone instance\n */\n setBabelInstance(babel: any): void {\n this.babelInstance = babel;\n }\n\n /**\n * Compiles a React component from source code\n * @param options - Compilation options\n * @returns Promise resolving to compilation result\n */\n async compile(options: CompileOptions): Promise<CompilationResult> {\n const startTime = Date.now();\n\n try {\n // Check cache first if enabled\n if (this.config.cache) {\n const cached = this.getCachedComponent(options.componentName, options.componentCode);\n if (cached) {\n return {\n success: true,\n component: cached,\n duration: Date.now() - startTime\n };\n }\n }\n\n // Validate inputs\n this.validateCompileOptions(options);\n\n // Load required libraries if specified\n const loadedLibraries = await this.loadRequiredLibraries(options.libraries!, options.allLibraries);\n\n // Transpile the component code\n const transpiledCode = this.transpileComponent(\n options.componentCode,\n options.componentName,\n options\n );\n\n // Create the component factory with loaded libraries\n const componentFactory = this.createComponentFactory(\n transpiledCode,\n options.componentName,\n loadedLibraries\n );\n\n // Build the compiled component\n const compiledComponent: CompiledComponent = {\n factory: componentFactory,\n id: this.generateComponentId(options.componentName),\n name: options.componentName,\n compiledAt: new Date(),\n warnings: []\n };\n\n // Cache if enabled\n if (this.config.cache) {\n this.cacheComponent(compiledComponent, options.componentCode);\n }\n\n return {\n success: true,\n component: compiledComponent,\n duration: Date.now() - startTime,\n size: transpiledCode.length\n };\n\n } catch (error) {\n return {\n success: false,\n error: this.createCompilationError(error, options.componentName),\n duration: Date.now() - startTime\n };\n }\n }\n\n /**\n * Transpiles JSX/React code to JavaScript\n * @param code - Source code to transpile\n * @param componentName - Name of the component\n * @param options - Compilation options\n * @returns Transpiled JavaScript code\n */\n private transpileComponent(\n code: string,\n componentName: string,\n options: CompileOptions\n ): string {\n if (!this.babelInstance) {\n throw new Error('Babel instance not set. Call setBabelInstance() first.');\n }\n\n const wrappedCode = this.wrapComponentCode(code, componentName, options.libraries, options.dependencies);\n\n try {\n const result = this.babelInstance.transform(wrappedCode, {\n presets: options.babelPresets || this.config.babel.presets,\n plugins: options.babelPlugins || this.config.babel.plugins,\n filename: `${componentName}.jsx`,\n sourceMaps: this.config.sourceMaps,\n minified: this.config.minify\n });\n\n return result.code;\n } catch (error: any) {\n throw new Error(`Transpilation failed: ${error.message}`);\n }\n }\n\n /**\n * Wraps component code in a factory function for execution\n * @param componentCode - Raw component code\n * @param componentName - Name of the component\n * @param libraries - Optional library dependencies\n * @param dependencies - Optional child component dependencies\n * @returns Wrapped component code\n */\n private wrapComponentCode(componentCode: string, componentName: string, libraries?: any[], dependencies?: Array<{ name: string }>): string {\n // Generate library declarations if libraries are provided\n const libraryDeclarations = libraries && libraries.length > 0\n ? libraries\n .filter(lib => lib.globalVariable) // Only include libraries with globalVariable\n .map(lib => `const ${lib.globalVariable} = libraries['${lib.globalVariable}'];`)\n .join('\\n ')\n : '';\n \n // Generate component declarations if dependencies are provided\n const componentDeclarations = dependencies && dependencies.length > 0\n ? dependencies\n .map(dep => `const ${dep.name} = components['${dep.name}'];`)\n .join('\\n ')\n : '';\n\n return `\n function createComponent(\n React, ReactDOM, \n useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useLayoutEffect,\n libraries, styles, console, components\n ) {\n // Parse the component code once to get the component definition\n ${libraryDeclarations ? libraryDeclarations + '\\n ' : ''}${componentDeclarations ? componentDeclarations + '\\n ' : ''}${componentCode}\n \n // Ensure the component exists\n if (typeof ${componentName} === 'undefined') {\n throw new Error('Component \"${componentName}\" is not defined in the provided code');\n }\n \n // Store the component in a variable so we don't lose it\n const UserComponent = ${componentName};\n \n // Debug logging to understand what we're getting\n console.log('Component ${componentName} type:', typeof UserComponent);\n if (typeof UserComponent === 'object' && UserComponent !== null) {\n console.log('Component ${componentName} keys:', Object.keys(UserComponent));\n console.log('Component ${componentName} has .component:', 'component' in UserComponent);\n if ('component' in UserComponent) {\n console.log('Component ${componentName}.component type:', typeof UserComponent.component);\n }\n }\n \n // Check if the component is already a ComponentObject (has a .component property)\n // If so, extract the actual React component\n const ActualComponent = (typeof UserComponent === 'object' && UserComponent !== null && 'component' in UserComponent)\n ? UserComponent.component\n : UserComponent;\n \n // Validate that we have a function (React component)\n if (typeof ActualComponent !== 'function') {\n console.error('Invalid component type for ${componentName}:', typeof ActualComponent);\n console.error('ActualComponent value:', ActualComponent);\n console.error('Original UserComponent value:', UserComponent);\n throw new Error('Component \"${componentName}\" must be a function (React component) or an object with a .component property that is a function. Got: ' + typeof ActualComponent);\n }\n \n // Create a fresh method registry for each factory call\n const methodRegistry = new Map();\n \n // Create a wrapper component that provides RegisterMethod in callbacks\n const ComponentWithMethodRegistry = React.forwardRef((props, ref) => {\n // Register methods on mount\n React.useEffect(() => {\n // Clear previous methods\n methodRegistry.clear();\n \n // Provide RegisterMethod callback if callbacks exist\n if (props.callbacks && typeof props.callbacks.RegisterMethod === 'function') {\n // Component can now register its methods\n // This will be called from within the component\n }\n }, [props.callbacks]);\n \n // Create enhanced callbacks with RegisterMethod\n const enhancedCallbacks = React.useMemo(() => {\n if (!props.callbacks) return {};\n \n return {\n ...props.callbacks,\n RegisterMethod: (methodName, handler) => {\n if (methodName && handler) {\n methodRegistry.set(methodName, handler);\n }\n }\n };\n }, [props.callbacks]);\n \n // Render the original component with enhanced callbacks\n return React.createElement(ActualComponent, {\n ...props,\n callbacks: enhancedCallbacks\n });\n });\n \n ComponentWithMethodRegistry.displayName = '${componentName}WithMethods';\n \n // Return the component object with method access\n return {\n component: ComponentWithMethodRegistry,\n \n // Legacy methods for backward compatibility\n print: function() { \n const printMethod = methodRegistry.get('print');\n if (printMethod) {\n printMethod();\n } else if (typeof window !== 'undefined' && window.print) {\n window.print(); \n }\n },\n refresh: function(data) { \n const refreshMethod = methodRegistry.get('refresh');\n if (refreshMethod) {\n refreshMethod(data);\n }\n // Refresh functionality is handled by the host environment\n },\n \n // Standard method accessors with type safety\n getCurrentDataState: function() {\n const method = methodRegistry.get('getCurrentDataState');\n return method ? method() : undefined;\n },\n getDataStateHistory: function() {\n const method = methodRegistry.get('getDataStateHistory');\n return method ? method() : [];\n },\n validate: function() {\n const method = methodRegistry.get('validate');\n return method ? method() : true;\n },\n isDirty: function() {\n const method = methodRegistry.get('isDirty');\n return method ? method() : false;\n },\n reset: function() {\n const method = methodRegistry.get('reset');\n if (method) method();\n },\n scrollTo: function(target) {\n const method = methodRegistry.get('scrollTo');\n if (method) method(target);\n },\n focus: function(target) {\n const method = methodRegistry.get('focus');\n if (method) method(target);\n },\n \n // Generic method invoker for custom methods\n invokeMethod: function(methodName, ...args) {\n const method = methodRegistry.get(methodName);\n if (method) {\n return method(...args);\n }\n console.warn(\\`Method '\\${methodName}' is not registered on component ${componentName}\\`);\n return undefined;\n },\n \n // Check if a method exists\n hasMethod: function(methodName) {\n return methodRegistry.has(methodName);\n }\n };\n }\n `;\n }\n\n /**\n * Load required libraries from the registry with dependency resolution\n * @param libraries - Array of library dependencies\n * @param componentLibraries - All available component libraries for dependency resolution\n * @returns Map of loaded libraries\n */\n private async loadRequiredLibraries(libraries: any[], componentLibraries: ComponentLibraryEntity[]): Promise<Map<string, any>> {\n const loadedLibraries = new Map<string, any>();\n \n if (this.config.debug) {\n console.log('🔍 loadRequiredLibraries called with:', {\n librariesCount: libraries?.length || 0,\n libraries: libraries?.map(l => ({ name: l.name, version: l.version, globalVariable: l.globalVariable }))\n });\n }\n \n if (!libraries || libraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 No libraries to load, returning empty map');\n }\n return loadedLibraries;\n }\n\n // Only works in browser environment\n if (typeof window === 'undefined') {\n console.warn('Library loading is only supported in browser environments');\n return loadedLibraries;\n }\n\n // Initialize LibraryRegistry with componentLibraries if provided\n if (componentLibraries) {\n await LibraryRegistry.Config(false, componentLibraries);\n } else {\n console.warn('âš ī¸ No componentLibraries provided for LibraryRegistry initialization');\n }\n\n // Extract library names from the requested libraries\n const libraryNames = libraries.map(lib => lib.name);\n \n if (this.config.debug) {\n console.log('đŸ“Ļ Using dependency-aware loading for libraries:', libraryNames);\n }\n\n try {\n // Use the new dependency-aware loading\n const loadedLibraryMap = await LibraryLoader.loadLibrariesWithDependencies(\n libraryNames,\n componentLibraries,\n 'component-compiler',\n { debug: this.config.debug }\n );\n\n // Map the results to match the expected format\n // We need to map from library name to global variable\n for (const lib of libraries) {\n // Check if library is approved first\n const isApproved = LibraryRegistry.isApproved(lib.name);\n if (!isApproved) {\n console.error(`❌ Library '${lib.name}' is not approved`);\n throw new Error(`Library '${lib.name}' is not approved. Only approved libraries can be used.`);\n }\n\n // Get the loaded library from the map\n const loadedValue = loadedLibraryMap.get(lib.name);\n \n if (loadedValue) {\n // Store by global variable name for component access\n loadedLibraries.set(lib.globalVariable, loadedValue);\n if (this.config.debug) {\n console.log(`✅ Mapped ${lib.name} to global variable ${lib.globalVariable}`);\n }\n } else {\n // Fallback: check if it's already globally available (might be a dependency)\n const globalValue = (window as any)[lib.globalVariable];\n if (globalValue) {\n loadedLibraries.set(lib.globalVariable, globalValue);\n if (this.config.debug) {\n console.log(`✅ Found ${lib.name} already loaded as ${lib.globalVariable}`);\n }\n } else {\n console.error(`❌ Library '${lib.name}' failed to load`);\n throw new Error(`Library '${lib.name}' failed to load or did not expose '${lib.globalVariable}'`);\n }\n }\n }\n } catch (error: any) {\n console.error('Failed to load libraries with dependencies:', error);\n \n // Fallback to old loading method if dependency resolution fails\n if (this.config.debug) {\n console.warn('âš ī¸ Falling back to non-dependency-aware loading due to error');\n }\n \n // Load each library independently (old method)\n for (const lib of libraries) {\n if ((window as any)[lib.globalVariable]) {\n loadedLibraries.set(lib.globalVariable, (window as any)[lib.globalVariable]);\n } else {\n // Try to load using LibraryRegistry\n const libraryDef = LibraryRegistry.getLibrary(lib.name);\n if (libraryDef) {\n const resolvedVersion = LibraryRegistry.resolveVersion(lib.name, lib.version);\n const cdnUrl = LibraryRegistry.getCdnUrl(lib.name, resolvedVersion);\n \n if (cdnUrl) {\n await this.loadScript(cdnUrl, lib.globalVariable);\n const libraryValue = (window as any)[lib.globalVariable];\n if (libraryValue) {\n loadedLibraries.set(lib.globalVariable, libraryValue);\n }\n }\n }\n }\n }\n }\n \n if (this.config.debug) {\n console.log(`✅ All libraries loaded successfully. Total: ${loadedLibraries.size}`);\n console.log('📚 Loaded libraries map:', Array.from(loadedLibraries.keys()));\n }\n \n return loadedLibraries;\n }\n\n /**\n * Load CSS stylesheets dynamically\n * @param urls - Array of CSS URLs to load\n * @returns Promise that resolves when all stylesheets are loaded\n */\n private async loadStyles(urls: string[]): Promise<void> {\n const loadPromises = urls.map(url => {\n return new Promise<void>((resolve) => {\n // Check if stylesheet already exists\n const existingLink = document.querySelector(`link[href=\"${url}\"]`);\n if (existingLink) {\n resolve();\n return;\n }\n\n // Create new link element\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n \n // CSS load events are not reliable cross-browser, so resolve immediately\n // The CSS will load asynchronously but won't block component rendering\n document.head.appendChild(link);\n resolve();\n });\n });\n\n await Promise.all(loadPromises);\n }\n\n /**\n * Load a script dynamically\n * @param url - Script URL\n * @param globalName - Expected global variable name\n * @returns Promise that resolves when script is loaded\n */\n private loadScript(url: string, globalName: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`);\n if (existingScript) {\n // Wait for it to finish loading with exponential backoff\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds total with 100ms intervals\n const checkLoaded = () => {\n if ((window as any)[globalName]) {\n resolve();\n } else if (attempts >= maxAttempts) {\n reject(new Error(`${globalName} not found after ${maxAttempts * 100}ms waiting for existing script`));\n } else {\n attempts++;\n setTimeout(checkLoaded, 100);\n }\n };\n checkLoaded();\n return;\n }\n\n // Create new script element\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n \n script.onload = () => {\n // More robust checking with multiple attempts\n let attempts = 0;\n const maxAttempts = 20; // 2 seconds total\n const checkInterval = 100; // Check every 100ms\n \n const checkGlobal = () => {\n if ((window as any)[globalName]) {\n if (this.config.debug) {\n console.log(` ✓ Global variable ${globalName} found after ${attempts * checkInterval}ms`);\n }\n resolve();\n } else if (attempts >= maxAttempts) {\n // Final check - some libraries might use a different global name pattern\n if (this.config.debug) {\n console.error(` ❌ ${globalName} not found after ${attempts * checkInterval}ms`);\n // Only log matching property names, not the entire window object\n const matchingKeys = Object.keys(window).filter(k => k.toLowerCase().includes(globalName.toLowerCase()));\n console.log(` â„šī¸ Matching window properties: ${matchingKeys.join(', ') || 'none'}`);\n }\n reject(new Error(`${globalName} not found after loading script from ${url}`));\n } else {\n attempts++;\n setTimeout(checkGlobal, checkInterval);\n }\n };\n \n // Start checking immediately (don't wait 100ms first)\n checkGlobal();\n };\n \n script.onerror = () => {\n reject(new Error(`Failed to load script: ${url}`));\n };\n \n document.head.appendChild(script);\n });\n }\n\n /**\n * Creates a component factory function from transpiled code\n * @param transpiledCode - Transpiled JavaScript code\n * @param componentName - Name of the component\n * @param loadedLibraries - Map of loaded libraries\n * @returns Component factory function\n */\n private createComponentFactory(\n transpiledCode: string, \n componentName: string,\n loadedLibraries: Map<string, any>\n ): (context: RuntimeContext, styles?: ComponentStyles) => ComponentObject {\n try {\n // Create the factory function with all React hooks\n const factoryCreator = new Function(\n 'React', 'ReactDOM',\n 'useState', 'useEffect', 'useCallback', 'useMemo', 'useRef', 'useContext', 'useReducer', 'useLayoutEffect',\n 'libraries', 'styles', 'console', 'components',\n `${transpiledCode}; return createComponent;`\n );\n\n // Return a function that executes the factory with runtime context\n return (context: RuntimeContext, styles: any = {}, components: Record<string, any> = {}) => {\n const { React, ReactDOM, libraries = {} } = context;\n \n // Merge loaded libraries with context libraries\n const mergedLibraries = { ...libraries };\n loadedLibraries.forEach((value, key) => {\n mergedLibraries[key] = value;\n });\n\n // Execute the factory creator to get the createComponent function\n const createComponentFn = factoryCreator(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components\n );\n\n // Call createComponent to get the actual component\n const Component = createComponentFn(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components\n );\n\n // Return the component directly\n return Component;\n };\n } catch (error: any) {\n throw new Error(`Failed to create component factory: ${error.message}`);\n }\n }\n\n\n /**\n * Validates compilation options\n * @param options - Options to validate\n * @throws Error if validation fails\n */\n private validateCompileOptions(options: CompileOptions): void {\n // Check if options object exists\n if (!options) {\n throw new Error(\n 'Component compilation failed: No options provided.\\n' +\n 'Expected an object with componentName and componentCode properties.\\n' +\n 'Example: { componentName: \"MyComponent\", componentCode: \"function MyComponent() { ... }\" }'\n );\n }\n\n // Check component name\n if (!options.componentName) {\n const providedKeys = Object.keys(options).join(', ');\n throw new Error(\n 'Component compilation failed: Component name is required.\\n' +\n `Received options with keys: [${providedKeys}]\\n` +\n 'Please ensure your component spec includes a \"name\" property.\\n' +\n 'Example: { name: \"MyComponent\", code: \"...\" }'\n );\n }\n\n // Check component code\n if (!options.componentCode) {\n throw new Error(\n `Component compilation failed: Component code is required for \"${options.componentName}\".\\n` +\n 'Please ensure your component spec includes a \"code\" property with the component source code.\\n' +\n 'Example: { name: \"MyComponent\", code: \"function MyComponent() { return <div>Hello</div>; }\" }'\n );\n }\n\n // Check code type\n if (typeof options.componentCode !== 'string') {\n const actualType = typeof options.componentCode;\n throw new Error(\n `Component compilation failed: Component code must be a string for \"${options.componentName}\".\\n` +\n `Received type: ${actualType}\\n` +\n `Received value: ${JSON.stringify(options.componentCode).substring(0, 100)}...\\n` +\n 'Please ensure the code property contains a string of JavaScript/JSX code.'\n );\n }\n\n // Check if code is empty or whitespace only\n if (options.componentCode.trim().length === 0) {\n throw new Error(\n `Component compilation failed: Component code is empty for \"${options.componentName}\".\\n` +\n 'The code property must contain valid JavaScript/JSX code defining a React component.'\n );\n }\n\n // Basic syntax check\n if (!options.componentCode.includes(options.componentName)) {\n throw new Error(\n `Component compilation failed: Component code must define a component named \"${options.componentName}\".\\n` +\n 'The function/component name in the code must match the componentName property.\\n' +\n `Expected to find: function ${options.componentName}(...) or const ${options.componentName} = ...\\n` +\n 'Code preview: ' + options.componentCode.substring(0, 200) + '...'\n );\n }\n }\n\n /**\n * Generates a unique component ID\n * @param componentName - Name of the component\n * @returns Unique component ID\n */\n private generateComponentId(componentName: string): string {\n return `${componentName}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Gets a cached component if available\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cached component or undefined\n */\n private getCachedComponent(componentName: string, code: string): CompiledComponent | undefined {\n // Create cache key based on name AND content hash\n const cacheKey = this.createCacheKey(componentName, code);\n return this.compilationCache.get(cacheKey);\n }\n\n /**\n * Creates a cache key based on component name and code content\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cache key\n */\n private createCacheKey(componentName: string, code: string): string {\n // Simple hash function for code content\n let hash = 0;\n for (let i = 0; i < code.length; i++) {\n const char = code.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return `${componentName}_${hash.toString(36)}`;\n }\n\n /**\n * Caches a compiled component\n * @param component - Component to cache\n * @param code - Original source code\n */\n private cacheComponent(component: CompiledComponent, code: string): void {\n // Enforce cache size limit\n if (this.compilationCache.size >= this.config.maxCacheSize) {\n // Remove oldest entry (first in map)\n const firstKey = this.compilationCache.keys().next().value;\n if (firstKey)\n this.compilationCache.delete(firstKey);\n }\n\n const cacheKey = this.createCacheKey(component.name, code);\n this.compilationCache.set(cacheKey, component);\n }\n\n /**\n * Creates a standardized compilation error\n * @param error - Original error\n * @param componentName - Name of the component\n * @returns Formatted component error\n */\n private createCompilationError(error: any, componentName: string): ComponentError {\n return {\n message: error.message || 'Unknown compilation error',\n stack: error.stack,\n componentName,\n phase: 'compilation',\n details: error\n };\n }\n\n /**\n * Clears the compilation cache\n */\n clearCache(): void {\n this.compilationCache.clear();\n }\n\n /**\n * Gets current cache size\n * @returns Number of cached components\n */\n getCacheSize(): number {\n return this.compilationCache.size;\n }\n\n /**\n * Updates compiler configuration\n * @param config - New configuration options\n */\n updateConfig(config: Partial<CompilerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}"]}
1
+ {"version":3,"file":"component-compiler.js","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Platform-agnostic React component compiler.\n * Compiles React component source code into executable components using Babel.\n * @module @memberjunction/react-runtime/compiler\n */\n\nimport { UserInfo } from '@memberjunction/core';\nimport { \n CompileOptions, \n CompiledComponent, \n CompilationResult,\n CompilerConfig,\n ComponentError,\n RuntimeContext\n} from '../types';\nimport { ComponentStyles, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { LibraryRegistry } from '../utilities/library-registry';\nimport { LibraryLoader } from '../utilities/library-loader';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Default compiler configuration\n */\nconst DEFAULT_COMPILER_CONFIG: CompilerConfig = {\n babel: {\n presets: ['react'],\n plugins: []\n },\n minify: false,\n sourceMaps: false,\n cache: true,\n maxCacheSize: 100,\n debug: false\n};\n\n/**\n * Platform-agnostic React component compiler.\n * Transforms JSX/React component source code into executable JavaScript.\n */\nexport class ComponentCompiler {\n private config: CompilerConfig;\n private compilationCache: Map<string, CompiledComponent>;\n private cacheAccessOrder: string[]; // Track access order for LRU\n private babelInstance: any;\n\n /**\n * Creates a new ComponentCompiler instance\n * @param config - Optional compiler configuration\n */\n constructor(config?: Partial<CompilerConfig>) {\n this.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n this.compilationCache = new Map();\n }\n\n /**\n * Sets the Babel instance to use for compilation\n * @param babel - The Babel standalone instance\n */\n setBabelInstance(babel: any): void {\n this.babelInstance = babel;\n }\n\n /**\n * Compiles a React component from source code\n * @param options - Compilation options\n * @returns Promise resolving to compilation result\n */\n async compile(options: CompileOptions): Promise<CompilationResult> {\n const startTime = Date.now();\n\n try {\n // Check cache first if enabled\n if (this.config.cache) {\n const cached = this.getCachedComponent(options.componentName, options.componentCode);\n if (cached) {\n return {\n success: true,\n component: cached,\n duration: Date.now() - startTime\n };\n }\n }\n\n // Validate inputs\n this.validateCompileOptions(options);\n\n // Load required libraries if specified\n const loadedLibraries = await this.loadRequiredLibraries(options.libraries!, options.allLibraries);\n\n // Transpile the component code\n const transpiledCode = this.transpileComponent(\n options.componentCode,\n options.componentName,\n options\n );\n\n // Create the component factory with loaded libraries\n const componentFactory = this.createComponentFactory(\n transpiledCode,\n options.componentName,\n loadedLibraries\n );\n\n // Build the compiled component\n const compiledComponent: CompiledComponent = {\n factory: componentFactory,\n id: this.generateComponentId(options.componentName),\n name: options.componentName,\n compiledAt: new Date(),\n warnings: []\n };\n\n // Cache if enabled\n if (this.config.cache) {\n this.cacheComponent(compiledComponent, options.componentCode);\n }\n\n return {\n success: true,\n component: compiledComponent,\n duration: Date.now() - startTime,\n size: transpiledCode.length\n };\n\n } catch (error) {\n return {\n success: false,\n error: this.createCompilationError(error, options.componentName),\n duration: Date.now() - startTime\n };\n }\n }\n\n /**\n * Transpiles JSX/React code to JavaScript\n * @param code - Source code to transpile\n * @param componentName - Name of the component\n * @param options - Compilation options\n * @returns Transpiled JavaScript code\n */\n private transpileComponent(\n code: string,\n componentName: string,\n options: CompileOptions\n ): string {\n if (!this.babelInstance) {\n throw new Error('Babel instance not set. Call setBabelInstance() first.');\n }\n\n const wrappedCode = this.wrapComponentCode(code, componentName, options.libraries, options.dependencies);\n\n try {\n const result = this.babelInstance.transform(wrappedCode, {\n presets: options.babelPresets || this.config.babel.presets,\n plugins: options.babelPlugins || this.config.babel.plugins,\n filename: `${componentName}.jsx`,\n sourceMaps: this.config.sourceMaps,\n minified: this.config.minify\n });\n\n return result.code;\n } catch (error: any) {\n throw new Error(`Transpilation failed: ${error.message}`);\n }\n }\n\n /**\n * Wraps component code in a factory function for execution\n * @param componentCode - Raw component code\n * @param componentName - Name of the component\n * @param libraries - Optional library dependencies\n * @param dependencies - Optional child component dependencies\n * @returns Wrapped component code\n */\n // Core libraries that are passed as parameters to createComponent and should not be destructured\n private readonly CORE_LIBRARIES = new Set(['React', 'ReactDOM']);\n\n private wrapComponentCode(componentCode: string, componentName: string, libraries?: any[], dependencies?: Array<{ name: string }>): string {\n const debug = this.config.debug;\n // Generate library declarations if libraries are provided\n // Skip core libraries as they're passed as parameters to createComponent\n const libraryDeclarations = libraries && libraries.length > 0\n ? libraries\n .filter(lib => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable)) // Skip core libraries\n .map(lib => `const ${lib.globalVariable} = libraries['${lib.globalVariable}'];`)\n .join('\\n ')\n : '';\n const libraryLogChecks = libraries && libraries.length > 0 \n ? libraries\n .filter(lib => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable)) // Skip core libraries\n .map(lib => `\\nif (!${lib.globalVariable}) { console.error('[React-Runtime-JS] Library \"${lib.globalVariable}\" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Library \"${lib.globalVariable}\" is defined');` : ''} }`)\n .join('\\n ')\n : '';\n\n // Generate component declarations if dependencies are provided\n // Filter out the component being compiled to avoid naming conflicts\n // Also detect and warn about duplicates\n const seenDependencies = new Set<string>();\n const uniqueDependencies: Array<{ name: string; code?: string }> = [];\n const duplicates: string[] = [];\n \n if (dependencies && dependencies.length > 0) {\n for (const dep of dependencies) {\n if (dep.name === componentName) {\n // Skip the component being compiled itself\n continue;\n }\n if (seenDependencies.has(dep.name)) {\n duplicates.push(dep.name);\n } else {\n seenDependencies.add(dep.name);\n uniqueDependencies.push(dep);\n }\n }\n }\n \n // Generate warning for duplicates\n const duplicateWarnings = duplicates.length > 0\n ? duplicates\n .map(name => `console.warn('[React-Runtime-JS] WARNING: Component \"${name}\" is registered multiple times as a dependency. Using first occurrence only.');`)\n .join('\\n ')\n : '';\n \n const componentDeclarations = uniqueDependencies.length > 0\n ? uniqueDependencies\n .map(dep => `const ${dep.name} = componentsOuter['${dep.name}'];`)\n .join('\\n ')\n : '';\n \n const componentLogChecks = uniqueDependencies.length > 0\n ? uniqueDependencies\n .map(dep => `if (!${dep.name}) { console.error('[React-Runtime-JS] Dependency \"${dep.name}\" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Dependency \"${dep.name}\" is defined');` : ''} }`)\n .join('\\n ')\n : '';\n\n const wrappedCode = `\n function createComponent(\n React, ReactDOM, \n useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useLayoutEffect,\n libraries, styles, console, components\n ) {\n // Code for ${componentName}\n ${componentCode}\n \n // Ensure the component exists\n if (typeof ${componentName} === 'undefined') {\n throw new Error('Component \"${componentName}\" is not defined in the provided code');\n }\n else {\n ${debug ? `console.log('[React-Runtime-JS] Component \"${componentName}\" is defined');` : ''}\n }\n \n // Store the component in a variable so we don't lose it\n const UserComponent = ${componentName};\n\n // Check if the component is already a ComponentObject (has a .component property)\n // If so, extract the actual React component\n const ActualComponent = (typeof UserComponent === 'object' && UserComponent !== null && 'component' in UserComponent)\n ? UserComponent.component\n : UserComponent;\n \n // Debug logging to understand what we're getting\n ${debug ? `\n console.log('[React-Runtime-JS]Component ${componentName} type:', typeof UserComponent);\n if (typeof UserComponent === 'object' && UserComponent !== null) {\n console.log('[React-Runtime-JS]Component ${componentName} keys:', Object.keys(UserComponent));\n console.log('[React-Runtime-JS]Component ${componentName} has .component:', 'component' in UserComponent);\n if ('component' in UserComponent) {\n console.log('[React-Runtime-JS]Component ${componentName}.component type:', typeof UserComponent.component);\n }\n }` : ''}\n \n // Validate that we have a function (React component)\n if (typeof ActualComponent !== 'function') {\n console.error('[React-Runtime-JS] Invalid component type for ${componentName}:', typeof ActualComponent);\n console.error('[React-Runtime-JS] ActualComponent value:', ActualComponent);\n console.error('[React-Runtime-JS] Original UserComponent value:', UserComponent);\n throw new Error('[React-Runtime-JS] Component \"${componentName}\" must be a function (React component) or an object with a .component property that is a function. Got: ' + typeof ActualComponent);\n }\n\n let componentsOuter = null, utilitiesOuter = null;\n const DestructureWrapperUserComponent = (props) => {\n if (!componentsOuter) {\n componentsOuter = props?.components || components;\n }\n if (!utilitiesOuter) {\n utilitiesOuter = props?.utilities;\n }\n ${debug ? `\n console.log('Props for ${componentName}:', props);\n console.log('components for ${componentName}:', componentsOuter);\n console.log('styles for ${componentName}:', styles);\n console.log('utilities for ${componentName}:', utilitiesOuter);\n console.log('libraries for ${componentName}:', libraries);` : ''}\n ${duplicateWarnings ? '// Duplicate dependency warnings\\n ' + duplicateWarnings + '\\n ' : ''}\n ${libraryDeclarations ? '// Destructure Libraries\\n' + libraryDeclarations + '\\n ' : ''}\n ${componentDeclarations ? '// Destructure Dependencies\\n' + componentDeclarations + '\\n ' : ''}\n ${libraryLogChecks}\n ${componentLogChecks} \n\n const newProps = {\n ...props,\n components: componentsOuter,\n utilities: utilitiesOuter \n }\n return ActualComponent(newProps);\n };\n \n // Create a fresh method registry for each factory call\n const methodRegistry = new Map();\n \n // Create a wrapper component that provides RegisterMethod in callbacks\n const ComponentWithMethodRegistry = (props) => {\n // Register methods on mount\n React.useEffect(() => {\n // Clear previous methods\n methodRegistry.clear();\n \n // Provide RegisterMethod callback if callbacks exist\n if (props.callbacks && typeof props.callbacks.RegisterMethod === 'function') {\n // Component can now register its methods\n // This will be called from within the component\n }\n }, [props.callbacks]);\n \n // Create enhanced callbacks with RegisterMethod\n const enhancedCallbacks = React.useMemo(() => {\n if (!props.callbacks) return {};\n \n return {\n ...props.callbacks,\n RegisterMethod: (methodName, handler) => {\n if (methodName && handler) {\n methodRegistry.set(methodName, handler);\n }\n }\n };\n }, [props.callbacks]);\n \n // Render the original component with enhanced callbacks\n return React.createElement(DestructureWrapperUserComponent, {\n ...props,\n callbacks: enhancedCallbacks\n });\n };\n \n ComponentWithMethodRegistry.displayName = '${componentName}WithMethods';\n \n // Return the component object with method access\n return {\n component: ComponentWithMethodRegistry,\n \n print: function() { \n const printMethod = methodRegistry.get('print');\n if (printMethod) {\n printMethod();\n } else if (typeof window !== 'undefined' && window.print) {\n window.print(); \n }\n },\n refresh: function(data) { \n const refreshMethod = methodRegistry.get('refresh');\n if (refreshMethod) {\n refreshMethod(data);\n }\n // Refresh functionality is handled by the host environment\n },\n \n // Standard method accessors with type safety\n getCurrentDataState: function() {\n const method = methodRegistry.get('getCurrentDataState');\n return method ? method() : undefined;\n },\n getDataStateHistory: function() {\n const method = methodRegistry.get('getDataStateHistory');\n return method ? method() : [];\n },\n validate: function() {\n const method = methodRegistry.get('validate');\n return method ? method() : true;\n },\n isDirty: function() {\n const method = methodRegistry.get('isDirty');\n return method ? method() : false;\n },\n reset: function() {\n const method = methodRegistry.get('reset');\n if (method) method();\n },\n scrollTo: function(target) {\n const method = methodRegistry.get('scrollTo');\n if (method) method(target);\n },\n focus: function(target) {\n const method = methodRegistry.get('focus');\n if (method) method(target);\n },\n \n // Generic method invoker for custom methods\n invokeMethod: function(methodName, ...args) {\n const method = methodRegistry.get(methodName);\n if (method) {\n return method(...args);\n }\n console.warn(\\`[React-Runtime-JS] Method '\\${methodName}' is not registered on component ${componentName}\\`);\n return undefined;\n },\n \n // Check if a method exists\n hasMethod: function(methodName) {\n return methodRegistry.has(methodName);\n }\n };\n }\n `;\n\n return wrappedCode;\n }\n\n /**\n * Load required libraries from the registry with dependency resolution\n * @param libraries - Array of library dependencies\n * @param componentLibraries - All available component libraries for dependency resolution\n * @returns Map of loaded libraries\n */\n private async loadRequiredLibraries(libraries: any[], componentLibraries: ComponentLibraryEntity[]): Promise<Map<string, any>> {\n const loadedLibraries = new Map<string, any>();\n \n if (this.config.debug) {\n console.log('🔍 loadRequiredLibraries called with:', {\n librariesCount: libraries?.length || 0,\n libraries: libraries?.map(l => ({ name: l.name, version: l.version, globalVariable: l.globalVariable }))\n });\n }\n \n if (!libraries || libraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 No libraries to load, returning empty map');\n }\n return loadedLibraries;\n }\n\n // Only works in browser environment\n if (typeof window === 'undefined') {\n console.warn('Library loading is only supported in browser environments');\n return loadedLibraries;\n }\n\n // Initialize LibraryRegistry with componentLibraries if provided\n if (componentLibraries) {\n await LibraryRegistry.Config(false, componentLibraries);\n } else {\n console.warn('âš ī¸ No componentLibraries provided for LibraryRegistry initialization');\n }\n\n // Filter out React, ReactDOM, and invalid library entries\n const filteredLibraries = libraries.filter(lib => {\n // Check if library object is valid\n if (!lib || typeof lib !== 'object' || !lib.name) {\n console.warn(`âš ī¸ Invalid library entry detected (missing name):`, lib);\n return false;\n }\n \n const libNameLower = lib.name.toLowerCase();\n if (libNameLower === 'react' || libNameLower === 'reactdom') {\n console.warn(`âš ī¸ Library '${lib.name}' is automatically loaded by the React runtime and should not be requested separately`);\n return false;\n }\n return true;\n });\n \n // Extract library names from the filtered libraries (with extra safety)\n const libraryNames = filteredLibraries\n .map(lib => lib.name)\n .filter(name => name && typeof name === 'string');\n \n if (this.config.debug) {\n console.log('đŸ“Ļ Using dependency-aware loading for libraries:', libraryNames);\n }\n \n // If all libraries were filtered out, return empty map\n if (filteredLibraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 All requested libraries were filtered out (React/ReactDOM), returning empty map');\n }\n return loadedLibraries;\n }\n\n try {\n // Use the new dependency-aware loading\n const loadedLibraryMap = await LibraryLoader.loadLibrariesWithDependencies(\n libraryNames,\n componentLibraries,\n 'component-compiler',\n { debug: this.config.debug }\n );\n\n // Map the results to match the expected format\n // We need to map from library name to global variable\n for (const lib of filteredLibraries) {\n // Check if library is approved first\n const isApproved = LibraryRegistry.isApproved(lib.name);\n if (!isApproved) {\n console.error(`❌ Library '${lib.name}' is not approved`);\n throw new Error(`Library '${lib.name}' is not approved. Only approved libraries can be used.`);\n }\n\n // Get the loaded library from the map\n const loadedValue = loadedLibraryMap.get(lib.name);\n \n if (loadedValue) {\n // Store by global variable name for component access\n loadedLibraries.set(lib.globalVariable, loadedValue);\n if (this.config.debug) {\n console.log(`✅ Mapped ${lib.name} to global variable ${lib.globalVariable}`);\n }\n } else {\n // Fallback: check if it's already globally available (might be a dependency)\n const globalValue = (window as any)[lib.globalVariable];\n if (globalValue) {\n loadedLibraries.set(lib.globalVariable, globalValue);\n if (this.config.debug) {\n console.log(`✅ Found ${lib.name} already loaded as ${lib.globalVariable}`);\n }\n } else {\n console.error(`❌ Library '${lib.name}' failed to load`);\n throw new Error(`Library '${lib.name}' failed to load or did not expose '${lib.globalVariable}'`);\n }\n }\n }\n } catch (error: any) {\n console.error('Failed to load libraries with dependencies:', error);\n \n // Fallback to old loading method if dependency resolution fails\n if (this.config.debug) {\n console.warn('âš ī¸ Falling back to non-dependency-aware loading due to error');\n }\n \n // Load each library independently (old method)\n for (const lib of libraries) {\n if ((window as any)[lib.globalVariable]) {\n loadedLibraries.set(lib.globalVariable, (window as any)[lib.globalVariable]);\n } else {\n // Try to load using LibraryRegistry\n const libraryDef = LibraryRegistry.getLibrary(lib.name);\n if (libraryDef) {\n const resolvedVersion = LibraryRegistry.resolveVersion(lib.name, lib.version);\n const cdnUrl = LibraryRegistry.getCdnUrl(lib.name, resolvedVersion);\n \n if (cdnUrl) {\n await this.loadScript(cdnUrl, lib.globalVariable);\n const libraryValue = (window as any)[lib.globalVariable];\n if (libraryValue) {\n loadedLibraries.set(lib.globalVariable, libraryValue);\n }\n }\n }\n }\n }\n }\n \n if (this.config.debug) {\n console.log(`✅ All libraries loaded successfully. Total: ${loadedLibraries.size}`);\n console.log('📚 Loaded libraries map:', Array.from(loadedLibraries.keys()));\n }\n \n return loadedLibraries;\n }\n\n /**\n * Load CSS stylesheets dynamically\n * @param urls - Array of CSS URLs to load\n * @returns Promise that resolves when all stylesheets are loaded\n */\n private async loadStyles(urls: string[]): Promise<void> {\n const loadPromises = urls.map(url => {\n return new Promise<void>((resolve) => {\n // Check if stylesheet already exists\n const existingLink = document.querySelector(`link[href=\"${url}\"]`);\n if (existingLink) {\n resolve();\n return;\n }\n\n // Create new link element\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n \n // CSS load events are not reliable cross-browser, so resolve immediately\n // The CSS will load asynchronously but won't block component rendering\n document.head.appendChild(link);\n resolve();\n });\n });\n\n await Promise.all(loadPromises);\n }\n\n /**\n * Load a script dynamically\n * @param url - Script URL\n * @param globalName - Expected global variable name\n * @returns Promise that resolves when script is loaded\n */\n private loadScript(url: string, globalName: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`);\n if (existingScript) {\n // Wait for it to finish loading with exponential backoff\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds total with 100ms intervals\n const checkLoaded = () => {\n if ((window as any)[globalName]) {\n resolve();\n } else if (attempts >= maxAttempts) {\n reject(new Error(`${globalName} not found after ${maxAttempts * 100}ms waiting for existing script`));\n } else {\n attempts++;\n setTimeout(checkLoaded, 100);\n }\n };\n checkLoaded();\n return;\n }\n\n // Create new script element\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n \n script.onload = () => {\n // More robust checking with multiple attempts\n let attempts = 0;\n const maxAttempts = 20; // 2 seconds total\n const checkInterval = 100; // Check every 100ms\n \n const checkGlobal = () => {\n if ((window as any)[globalName]) {\n if (this.config.debug) {\n console.log(` ✓ Global variable ${globalName} found after ${attempts * checkInterval}ms`);\n }\n resolve();\n } else if (attempts >= maxAttempts) {\n // Final check - some libraries might use a different global name pattern\n if (this.config.debug) {\n console.error(` ❌ ${globalName} not found after ${attempts * checkInterval}ms`);\n // Only log matching property names, not the entire window object\n const matchingKeys = Object.keys(window).filter(k => k.toLowerCase().includes(globalName.toLowerCase()));\n console.log(` â„šī¸ Matching window properties: ${matchingKeys.join(', ') || 'none'}`);\n }\n reject(new Error(`${globalName} not found after loading script from ${url}`));\n } else {\n attempts++;\n setTimeout(checkGlobal, checkInterval);\n }\n };\n \n // Start checking immediately (don't wait 100ms first)\n checkGlobal();\n };\n \n script.onerror = () => {\n reject(new Error(`Failed to load script: ${url}`));\n };\n \n document.head.appendChild(script);\n });\n }\n\n /**\n * Creates a component factory function from transpiled code\n * @param transpiledCode - Transpiled JavaScript code\n * @param componentName - Name of the component\n * @param loadedLibraries - Map of loaded libraries\n * @returns Component factory function\n */\n private createComponentFactory(\n transpiledCode: string, \n componentName: string,\n loadedLibraries: Map<string, any>\n ): (context: RuntimeContext, styles?: ComponentStyles) => ComponentObject {\n try {\n // Create the factory function with all React hooks\n const factoryCreator = new Function(\n 'React', 'ReactDOM',\n 'useState', 'useEffect', 'useCallback', 'useMemo', 'useRef', 'useContext', 'useReducer', 'useLayoutEffect',\n 'libraries', 'styles', 'console', 'components',\n `${transpiledCode}; return createComponent;`\n );\n\n // Return a function that executes the factory with runtime context\n return (context: RuntimeContext, styles: any = {}, components: Record<string, any> = {}) => {\n const { React, ReactDOM, libraries = {} } = context;\n \n // Merge loaded libraries with context libraries\n const mergedLibraries = { ...libraries };\n loadedLibraries.forEach((value, key) => {\n mergedLibraries[key] = value;\n });\n\n // Execute the factory creator to get the createComponent function\n const createComponentFn = factoryCreator(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components\n );\n\n // Call createComponent to get the actual component\n const Component = createComponentFn(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components\n );\n\n // Return the component directly\n return Component;\n };\n } catch (error: any) {\n throw new Error(`Failed to create component factory: ${error.message}`);\n }\n }\n\n\n /**\n * Validates compilation options\n * @param options - Options to validate\n * @throws Error if validation fails\n */\n private validateCompileOptions(options: CompileOptions): void {\n // Check if options object exists\n if (!options) {\n throw new Error(\n 'Component compilation failed: No options provided.\\n' +\n 'Expected an object with componentName and componentCode properties.\\n' +\n 'Example: { componentName: \"MyComponent\", componentCode: \"function MyComponent() { ... }\" }'\n );\n }\n\n // Check component name\n if (!options.componentName) {\n const providedKeys = Object.keys(options).join(', ');\n throw new Error(\n 'Component compilation failed: Component name is required.\\n' +\n `Received options with keys: [${providedKeys}]\\n` +\n 'Please ensure your component spec includes a \"name\" property.\\n' +\n 'Example: { name: \"MyComponent\", code: \"...\" }'\n );\n }\n\n // Check component code\n if (!options.componentCode) {\n throw new Error(\n `Component compilation failed: Component code is required for \"${options.componentName}\".\\n` +\n 'Please ensure your component spec includes a \"code\" property with the component source code.\\n' +\n 'Example: { name: \"MyComponent\", code: \"function MyComponent() { return <div>Hello</div>; }\" }'\n );\n }\n\n // Check code type\n if (typeof options.componentCode !== 'string') {\n const actualType = typeof options.componentCode;\n throw new Error(\n `Component compilation failed: Component code must be a string for \"${options.componentName}\".\\n` +\n `Received type: ${actualType}\\n` +\n `Received value: ${JSON.stringify(options.componentCode).substring(0, 100)}...\\n` +\n 'Please ensure the code property contains a string of JavaScript/JSX code.'\n );\n }\n\n // Check if code is empty or whitespace only\n if (options.componentCode.trim().length === 0) {\n throw new Error(\n `Component compilation failed: Component code is empty for \"${options.componentName}\".\\n` +\n 'The code property must contain valid JavaScript/JSX code defining a React component.'\n );\n }\n\n // Basic syntax check\n if (!options.componentCode.includes(options.componentName)) {\n throw new Error(\n `Component compilation failed: Component code must define a component named \"${options.componentName}\".\\n` +\n 'The function/component name in the code must match the componentName property.\\n' +\n `Expected to find: function ${options.componentName}(...) or const ${options.componentName} = ...\\n` +\n 'Code preview: ' + options.componentCode.substring(0, 200) + '...'\n );\n }\n }\n\n /**\n * Generates a unique component ID\n * @param componentName - Name of the component\n * @returns Unique component ID\n */\n private generateComponentId(componentName: string): string {\n return `${componentName}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Gets a cached component if available\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cached component or undefined\n */\n private getCachedComponent(componentName: string, code: string): CompiledComponent | undefined {\n // Create cache key based on name AND content hash\n const cacheKey = this.createCacheKey(componentName, code);\n return this.compilationCache.get(cacheKey);\n }\n\n /**\n * Creates a cache key based on component name and code content\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cache key\n */\n private createCacheKey(componentName: string, code: string): string {\n // Simple hash function for code content\n let hash = 0;\n for (let i = 0; i < code.length; i++) {\n const char = code.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return `${componentName}_${hash.toString(36)}`;\n }\n\n /**\n * Caches a compiled component\n * @param component - Component to cache\n * @param code - Original source code\n */\n private cacheComponent(component: CompiledComponent, code: string): void {\n // Enforce cache size limit\n if (this.compilationCache.size >= this.config.maxCacheSize) {\n // Remove oldest entry (first in map)\n const firstKey = this.compilationCache.keys().next().value;\n if (firstKey)\n this.compilationCache.delete(firstKey);\n }\n\n const cacheKey = this.createCacheKey(component.name, code);\n this.compilationCache.set(cacheKey, component);\n }\n\n /**\n * Creates a standardized compilation error\n * @param error - Original error\n * @param componentName - Name of the component\n * @returns Formatted component error\n */\n private createCompilationError(error: any, componentName: string): ComponentError {\n return {\n message: error.message || 'Unknown compilation error',\n stack: error.stack,\n componentName,\n phase: 'compilation',\n details: error\n };\n }\n\n /**\n * Clears the compilation cache\n */\n clearCache(): void {\n this.compilationCache.clear();\n }\n\n /**\n * Gets current cache size\n * @returns Number of cached components\n */\n getCacheSize(): number {\n return this.compilationCache.size;\n }\n\n /**\n * Updates compiler configuration\n * @param config - New configuration options\n */\n updateConfig(config: Partial<CompilerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}"]}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export * from './types';
5
5
  export { ComponentCompiler } from './compiler';
6
6
  export { DEFAULT_PRESETS, DEFAULT_PLUGINS, PRODUCTION_CONFIG, DEVELOPMENT_CONFIG, getBabelConfig, validateBabelPresets, getJSXConfig } from './compiler';
7
7
  export { ComponentRegistry } from './registry';
8
- export { ComponentResolver, ComponentSpec, ResolvedComponents } from './registry';
8
+ export { ComponentResolver, ComponentSpec, ResolvedComponents, ComponentRegistryService } from './registry';
9
9
  export { createErrorBoundary, withErrorBoundary, formatComponentError, createErrorLogger } from './runtime';
10
10
  export { buildComponentProps, normalizeCallbacks, normalizeStyles, validateComponentProps, mergeProps, createPropsTransformer, wrapCallbacksWithLogging, extractPropPaths, PropBuilderOptions } from './runtime';
11
11
  export { ComponentHierarchyRegistrar, registerComponentHierarchy, validateComponentSpec, flattenComponentHierarchy, countComponentsInHierarchy, HierarchyRegistrationResult, ComponentRegistrationError, HierarchyRegistrationOptions } from './runtime';
@@ -13,6 +13,7 @@ export { ReactRootManager, reactRootManager, ManagedReactRoot } from './runtime'
13
13
  export { SetupStyles, createDefaultComponentStyles } from './utilities/component-styles';
14
14
  export { StandardLibraries, StandardLibraryManager, createStandardLibraries } from './utilities/standard-libraries';
15
15
  export { LibraryLoader, LibraryLoadOptions, LibraryLoadResult } from './utilities/library-loader';
16
+ export { getCoreRuntimeLibraries, isCoreRuntimeLibrary } from './utilities/core-libraries';
16
17
  export { LibraryRegistry, LibraryDefinition } from './utilities/library-registry';
17
18
  export { ComponentErrorAnalyzer, FailedComponentInfo } from './utilities/component-error-analyzer';
18
19
  export { ResourceManager, resourceManager, ManagedResource } from './utilities/resource-manager';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC7B,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,WAAW,EACX,4BAA4B,EAC7B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,eAAe,EACf,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,OAAO,WAAW,CAAC;AAGhC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;CAiB3B,CAAC;AAUF,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,GAAG,EAClB,MAAM,CAAC,EAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,CAAC;CACtD,EACD,cAAc,CAAC,EAAE,OAAO,SAAS,EAAE,cAAc,EACjD,KAAK,GAAE,OAAe;;;;;;EA0BvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC7B,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,WAAW,EACX,4BAA4B,EAC7B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,eAAe,EACf,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,OAAO,WAAW,CAAC;AAGhC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;CAiB3B,CAAC;AAUF,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,GAAG,EAClB,MAAM,CAAC,EAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,CAAC;CACtD,EACD,cAAc,CAAC,EAAE,OAAO,SAAS,EAAE,cAAc,EACjD,KAAK,GAAE,OAAe;;;;;;EA0BvB"}
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.createReactRuntime = exports.DEFAULT_CONFIGS = exports.VERSION = exports.CacheManager = exports.resourceManager = exports.ResourceManager = exports.ComponentErrorAnalyzer = exports.LibraryRegistry = exports.LibraryLoader = exports.createStandardLibraries = exports.StandardLibraryManager = exports.createDefaultComponentStyles = exports.SetupStyles = exports.reactRootManager = exports.ReactRootManager = exports.countComponentsInHierarchy = exports.flattenComponentHierarchy = exports.validateComponentSpec = exports.registerComponentHierarchy = exports.ComponentHierarchyRegistrar = exports.extractPropPaths = exports.wrapCallbacksWithLogging = exports.createPropsTransformer = exports.mergeProps = exports.validateComponentProps = exports.normalizeStyles = exports.normalizeCallbacks = exports.buildComponentProps = exports.createErrorLogger = exports.formatComponentError = exports.withErrorBoundary = exports.createErrorBoundary = exports.ComponentSpec = exports.ComponentResolver = exports.ComponentRegistry = exports.getJSXConfig = exports.validateBabelPresets = exports.getBabelConfig = exports.DEVELOPMENT_CONFIG = exports.PRODUCTION_CONFIG = exports.DEFAULT_PLUGINS = exports.DEFAULT_PRESETS = exports.ComponentCompiler = void 0;
17
+ exports.createReactRuntime = exports.DEFAULT_CONFIGS = exports.VERSION = exports.CacheManager = exports.resourceManager = exports.ResourceManager = exports.ComponentErrorAnalyzer = exports.LibraryRegistry = exports.isCoreRuntimeLibrary = exports.getCoreRuntimeLibraries = exports.LibraryLoader = exports.createStandardLibraries = exports.StandardLibraryManager = exports.createDefaultComponentStyles = exports.SetupStyles = exports.reactRootManager = exports.ReactRootManager = exports.countComponentsInHierarchy = exports.flattenComponentHierarchy = exports.validateComponentSpec = exports.registerComponentHierarchy = exports.ComponentHierarchyRegistrar = exports.extractPropPaths = exports.wrapCallbacksWithLogging = exports.createPropsTransformer = exports.mergeProps = exports.validateComponentProps = exports.normalizeStyles = exports.normalizeCallbacks = exports.buildComponentProps = exports.createErrorLogger = exports.formatComponentError = exports.withErrorBoundary = exports.createErrorBoundary = exports.ComponentRegistryService = exports.ComponentSpec = exports.ComponentResolver = exports.ComponentRegistry = exports.getJSXConfig = exports.validateBabelPresets = exports.getBabelConfig = exports.DEVELOPMENT_CONFIG = exports.PRODUCTION_CONFIG = exports.DEFAULT_PLUGINS = exports.DEFAULT_PRESETS = exports.ComponentCompiler = void 0;
18
18
  const compiler_1 = require("./compiler");
19
19
  const registry_1 = require("./registry");
20
20
  const registry_2 = require("./registry");
@@ -34,6 +34,7 @@ Object.defineProperty(exports, "ComponentRegistry", { enumerable: true, get: fun
34
34
  var registry_4 = require("./registry");
35
35
  Object.defineProperty(exports, "ComponentResolver", { enumerable: true, get: function () { return registry_4.ComponentResolver; } });
36
36
  Object.defineProperty(exports, "ComponentSpec", { enumerable: true, get: function () { return registry_4.ComponentSpec; } });
37
+ Object.defineProperty(exports, "ComponentRegistryService", { enumerable: true, get: function () { return registry_4.ComponentRegistryService; } });
37
38
  var runtime_1 = require("./runtime");
38
39
  Object.defineProperty(exports, "createErrorBoundary", { enumerable: true, get: function () { return runtime_1.createErrorBoundary; } });
39
40
  Object.defineProperty(exports, "withErrorBoundary", { enumerable: true, get: function () { return runtime_1.withErrorBoundary; } });
@@ -65,6 +66,9 @@ Object.defineProperty(exports, "StandardLibraryManager", { enumerable: true, get
65
66
  Object.defineProperty(exports, "createStandardLibraries", { enumerable: true, get: function () { return standard_libraries_1.createStandardLibraries; } });
66
67
  var library_loader_1 = require("./utilities/library-loader");
67
68
  Object.defineProperty(exports, "LibraryLoader", { enumerable: true, get: function () { return library_loader_1.LibraryLoader; } });
69
+ var core_libraries_1 = require("./utilities/core-libraries");
70
+ Object.defineProperty(exports, "getCoreRuntimeLibraries", { enumerable: true, get: function () { return core_libraries_1.getCoreRuntimeLibraries; } });
71
+ Object.defineProperty(exports, "isCoreRuntimeLibrary", { enumerable: true, get: function () { return core_libraries_1.isCoreRuntimeLibrary; } });
68
72
  var library_registry_1 = require("./utilities/library-registry");
69
73
  Object.defineProperty(exports, "LibraryRegistry", { enumerable: true, get: function () { return library_registry_1.LibraryRegistry; } });
70
74
  var component_error_analyzer_1 = require("./utilities/component-error-analyzer");