@memberjunction/react-runtime 2.74.0 → 2.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +27 -0
- package/README.md +96 -4
- package/dist/compiler/component-compiler.d.ts +0 -1
- package/dist/compiler/component-compiler.d.ts.map +1 -1
- package/dist/compiler/component-compiler.js +34 -25
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -6
- package/dist/registry/component-resolver.d.ts +1 -6
- package/dist/registry/component-resolver.d.ts.map +1 -1
- package/dist/registry/component-resolver.js +19 -19
- package/dist/registry/index.d.ts +2 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +3 -1
- package/dist/runtime/component-hierarchy.d.ts +1 -1
- package/dist/runtime/component-hierarchy.d.ts.map +1 -1
- package/dist/runtime/component-hierarchy.js +25 -25
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -2
- package/dist/runtime/prop-builder.d.ts +1 -2
- package/dist/runtime/prop-builder.d.ts.map +1 -1
- package/dist/runtime/prop-builder.js +4 -76
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +15 -0
- package/dist/types/library-config.d.ts +32 -0
- package/dist/types/library-config.d.ts.map +1 -0
- package/dist/types/library-config.js +2 -0
- package/dist/utilities/core-libraries.d.ts +5 -0
- package/dist/utilities/core-libraries.d.ts.map +1 -0
- package/dist/utilities/core-libraries.js +52 -0
- package/dist/utilities/library-loader.d.ts +3 -2
- package/dist/utilities/library-loader.d.ts.map +1 -1
- package/dist/utilities/library-loader.js +65 -76
- package/dist/utilities/standard-libraries.d.ts +13 -24
- package/dist/utilities/standard-libraries.d.ts.map +1 -1
- package/dist/utilities/standard-libraries.js +58 -47
- package/package.json +4 -4
- package/samples/entities-1.js +493 -0
- package/src/compiler/component-compiler.ts +64 -35
- package/src/index.ts +1 -5
- package/src/registry/component-resolver.ts +21 -30
- package/src/registry/index.ts +2 -1
- package/src/runtime/component-hierarchy.ts +26 -26
- package/src/runtime/index.ts +0 -1
- package/src/runtime/prop-builder.ts +5 -112
- package/src/types/index.ts +6 -1
- package/src/types/library-config.ts +75 -0
- package/src/utilities/core-libraries.ts +61 -0
- package/src/utilities/library-loader.ts +113 -93
- package/src/utilities/standard-libraries.ts +104 -71
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @memberjunction/react-runtime
|
|
2
2
|
|
|
3
|
+
## 2.76.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- ffda243: migration
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [7dabb22]
|
|
12
|
+
- @memberjunction/core@2.76.0
|
|
13
|
+
- @memberjunction/interactive-component-types@2.76.0
|
|
14
|
+
- @memberjunction/global@2.76.0
|
|
15
|
+
|
|
16
|
+
## 2.75.0
|
|
17
|
+
|
|
18
|
+
### Minor Changes
|
|
19
|
+
|
|
20
|
+
- 9ccd145: migration
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- 0da7b51: tweaks to types
|
|
25
|
+
- Updated dependencies [b403003]
|
|
26
|
+
- @memberjunction/interactive-component-types@2.75.0
|
|
27
|
+
- @memberjunction/core@2.75.0
|
|
28
|
+
- @memberjunction/global@2.75.0
|
|
29
|
+
|
|
3
30
|
## 2.74.0
|
|
4
31
|
|
|
5
32
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
# @memberjunction/react-runtime
|
|
2
2
|
|
|
3
|
-
Platform-agnostic React component runtime for MemberJunction. This package provides core compilation, registry,
|
|
3
|
+
Platform-agnostic React component runtime for MemberJunction. This package provides core compilation, registry, execution capabilities, and dynamic library management for React components in any JavaScript environment.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
The React Runtime package enables dynamic compilation and execution of React components from source code. It works in both browser and Node.js environments, making it suitable for client-side rendering
|
|
7
|
+
The React Runtime package enables dynamic compilation and execution of React components from source code, with flexible external library management. It works in both browser and Node.js environments, making it suitable for client-side rendering, server-side testing, and multi-tenant applications with different library requirements.
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
11
|
- **Dynamic Compilation**: Transform JSX and React code at runtime using Babel
|
|
12
12
|
- **Component Registry**: Manage compiled components with namespace support
|
|
13
13
|
- **Dependency Resolution**: Handle component hierarchies and dependencies
|
|
14
|
+
- **Dynamic Library Management**: Configure and load external libraries at runtime
|
|
14
15
|
- **Error Boundaries**: Comprehensive error handling for React components
|
|
15
16
|
- **Platform Agnostic**: Works in any JavaScript environment
|
|
16
17
|
- **Type Safe**: Full TypeScript support with strict typing
|
|
18
|
+
- **Organization-Specific Libraries**: Support for different library sets per organization
|
|
17
19
|
|
|
18
20
|
## Installation
|
|
19
21
|
|
|
@@ -66,6 +68,85 @@ if (result.success) {
|
|
|
66
68
|
}
|
|
67
69
|
```
|
|
68
70
|
|
|
71
|
+
## Dynamic Library Management (New)
|
|
72
|
+
|
|
73
|
+
### Loading Libraries with Configuration
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { LibraryLoader, StandardLibraryManager } from '@memberjunction/react-runtime';
|
|
77
|
+
|
|
78
|
+
// Define custom library configuration
|
|
79
|
+
const libraryConfig = {
|
|
80
|
+
libraries: [
|
|
81
|
+
{
|
|
82
|
+
id: 'lodash',
|
|
83
|
+
name: 'lodash',
|
|
84
|
+
displayName: 'Lodash',
|
|
85
|
+
category: 'utility',
|
|
86
|
+
globalVariable: '_',
|
|
87
|
+
version: '4.17.21',
|
|
88
|
+
cdnUrl: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js',
|
|
89
|
+
description: 'Utility library',
|
|
90
|
+
isEnabled: true,
|
|
91
|
+
isCore: false
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'chart-js',
|
|
95
|
+
name: 'Chart',
|
|
96
|
+
displayName: 'Chart.js',
|
|
97
|
+
category: 'charting',
|
|
98
|
+
globalVariable: 'Chart',
|
|
99
|
+
version: '4.4.0',
|
|
100
|
+
cdnUrl: 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.0/chart.umd.js',
|
|
101
|
+
isEnabled: true,
|
|
102
|
+
isCore: false
|
|
103
|
+
}
|
|
104
|
+
// ... more libraries
|
|
105
|
+
],
|
|
106
|
+
metadata: {
|
|
107
|
+
version: '1.0.0',
|
|
108
|
+
lastUpdated: '2024-01-01'
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Load libraries with custom configuration
|
|
113
|
+
const result = await LibraryLoader.loadAllLibraries(libraryConfig);
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Managing Library Configurations
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
import { StandardLibraryManager } from '@memberjunction/react-runtime';
|
|
120
|
+
|
|
121
|
+
// Set a custom configuration
|
|
122
|
+
StandardLibraryManager.setConfiguration(libraryConfig);
|
|
123
|
+
|
|
124
|
+
// Get enabled libraries
|
|
125
|
+
const enabledLibs = StandardLibraryManager.getEnabledLibraries();
|
|
126
|
+
|
|
127
|
+
// Get libraries by category
|
|
128
|
+
const chartingLibs = StandardLibraryManager.getLibrariesByCategory('charting');
|
|
129
|
+
const uiLibs = StandardLibraryManager.getLibrariesByCategory('ui');
|
|
130
|
+
|
|
131
|
+
// Get component libraries (excludes runtime-only libraries)
|
|
132
|
+
const componentLibs = StandardLibraryManager.getComponentLibraries();
|
|
133
|
+
|
|
134
|
+
// Reset to default configuration
|
|
135
|
+
StandardLibraryManager.resetToDefault();
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Library Categories
|
|
139
|
+
|
|
140
|
+
Libraries are organized into categories:
|
|
141
|
+
- **`runtime`**: Core runtime libraries (React, ReactDOM, Babel) - not exposed to components
|
|
142
|
+
- **`ui`**: UI component libraries (Ant Design, React Bootstrap)
|
|
143
|
+
- **`charting`**: Data visualization libraries (Chart.js, D3.js)
|
|
144
|
+
- **`utility`**: Utility libraries (Lodash, Day.js)
|
|
145
|
+
|
|
146
|
+
### Runtime-Only Libraries
|
|
147
|
+
|
|
148
|
+
Libraries marked with `isRuntimeOnly: true` are used by the runtime infrastructure but not exposed to generated components. This includes React, ReactDOM, and Babel.
|
|
149
|
+
|
|
69
150
|
### Using the Component
|
|
70
151
|
|
|
71
152
|
```typescript
|
|
@@ -73,8 +154,12 @@ if (result.success) {
|
|
|
73
154
|
const React = window.React; // or require('react')
|
|
74
155
|
const ReactDOM = window.ReactDOM; // or require('react-dom')
|
|
75
156
|
|
|
76
|
-
// Create runtime context
|
|
77
|
-
const context = {
|
|
157
|
+
// Create runtime context with loaded libraries
|
|
158
|
+
const context = {
|
|
159
|
+
React,
|
|
160
|
+
ReactDOM,
|
|
161
|
+
libraries: result.libraries // From LibraryLoader
|
|
162
|
+
};
|
|
78
163
|
|
|
79
164
|
// Get the compiled component
|
|
80
165
|
const MyComponent = runtime.registry.get('MyComponent', 'MyNamespace');
|
|
@@ -198,18 +283,23 @@ const runtime = createReactRuntime(Babel, {
|
|
|
198
283
|
- `ComponentProps` - Standard props passed to components
|
|
199
284
|
- `ComponentCallbacks` - Callback functions available to components
|
|
200
285
|
- `RegistryEntry` - Registry entry with metadata
|
|
286
|
+
- `LibraryConfiguration` - Configuration for external libraries
|
|
287
|
+
- `ExternalLibraryConfig` - Individual library configuration
|
|
201
288
|
|
|
202
289
|
### Classes
|
|
203
290
|
|
|
204
291
|
- `ComponentCompiler` - Compiles React components from source
|
|
205
292
|
- `ComponentRegistry` - Manages compiled components
|
|
206
293
|
- `ComponentResolver` - Resolves component dependencies
|
|
294
|
+
- `StandardLibraryManager` - Manages library configurations
|
|
295
|
+
- `LibraryLoader` - Loads external libraries dynamically
|
|
207
296
|
|
|
208
297
|
### Utilities
|
|
209
298
|
|
|
210
299
|
- `createErrorBoundary()` - Creates error boundary components
|
|
211
300
|
- `buildComponentProps()` - Builds standardized component props
|
|
212
301
|
- `wrapComponent()` - Wraps components with additional functionality
|
|
302
|
+
- `createStandardLibraries()` - Creates standard library object from globals
|
|
213
303
|
|
|
214
304
|
## Best Practices
|
|
215
305
|
|
|
@@ -218,6 +308,8 @@ const runtime = createReactRuntime(Babel, {
|
|
|
218
308
|
3. **Handle Errors**: Always check compilation results for errors
|
|
219
309
|
4. **Clean Up**: Use registry cleanup for long-running applications
|
|
220
310
|
5. **Type Safety**: Leverage TypeScript types for better development experience
|
|
311
|
+
6. **Library Management**: Configure only necessary libraries for security and performance
|
|
312
|
+
7. **Runtime Separation**: Keep runtime libraries separate from component libraries
|
|
221
313
|
|
|
222
314
|
## License
|
|
223
315
|
|
|
@@ -9,7 +9,6 @@ export declare class ComponentCompiler {
|
|
|
9
9
|
private transpileComponent;
|
|
10
10
|
private wrapComponentCode;
|
|
11
11
|
private createComponentFactory;
|
|
12
|
-
private createStateUpdaterUtility;
|
|
13
12
|
private validateCompileOptions;
|
|
14
13
|
private generateComponentId;
|
|
15
14
|
private getCachedComponent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,cAAc,EAEd,iBAAiB,EACjB,cAAc,EAGf,MAAM,UAAU,CAAC;AAoBlB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAAiC;IACzD,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;IAqElE,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"component-compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,cAAc,EAEd,iBAAiB,EACjB,cAAc,EAGf,MAAM,UAAU,CAAC;AAoBlB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAAiC;IACzD,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;IAqElE,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,sBAAsB;IA2D9B,OAAO,CAAC,sBAAsB;IAiE9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,sBAAsB;IAa9B,UAAU,IAAI,IAAI;IAQlB,YAAY,IAAI,MAAM;IAQtB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;CAGpD"}
|
|
@@ -81,7 +81,11 @@ class ComponentCompiler {
|
|
|
81
81
|
}
|
|
82
82
|
wrapComponentCode(componentCode, componentName) {
|
|
83
83
|
return `
|
|
84
|
-
function createComponent(
|
|
84
|
+
function createComponent(
|
|
85
|
+
React, ReactDOM,
|
|
86
|
+
useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useLayoutEffect,
|
|
87
|
+
libraries, styles, console
|
|
88
|
+
) {
|
|
85
89
|
${componentCode}
|
|
86
90
|
|
|
87
91
|
// Ensure the component exists
|
|
@@ -106,46 +110,51 @@ class ComponentCompiler {
|
|
|
106
110
|
}
|
|
107
111
|
createComponentFactory(transpiledCode, componentName) {
|
|
108
112
|
try {
|
|
109
|
-
const factoryCreator = new Function('React', 'ReactDOM', 'useState', 'useEffect', 'useCallback', '
|
|
113
|
+
const factoryCreator = new Function('React', 'ReactDOM', 'useState', 'useEffect', 'useCallback', 'useMemo', 'useRef', 'useContext', 'useReducer', 'useLayoutEffect', 'libraries', 'styles', 'console', `${transpiledCode}; return createComponent;`);
|
|
110
114
|
return (context, styles = {}) => {
|
|
111
115
|
const { React, ReactDOM, libraries = {} } = context;
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
return createComponentFn(React, ReactDOM, React.useState, React.useEffect, React.useCallback, createStateUpdater, libraries, styles, console);
|
|
116
|
+
const createComponentFn = factoryCreator(React, ReactDOM, React.useState, React.useEffect, React.useCallback, React.useMemo, React.useRef, React.useContext, React.useReducer, React.useLayoutEffect, libraries, styles, console);
|
|
117
|
+
return createComponentFn(React, ReactDOM, React.useState, React.useEffect, React.useCallback, React.useMemo, React.useRef, React.useContext, React.useReducer, React.useLayoutEffect, libraries, styles, console);
|
|
115
118
|
};
|
|
116
119
|
}
|
|
117
120
|
catch (error) {
|
|
118
121
|
throw new Error(`Failed to create component factory: ${error.message}`);
|
|
119
122
|
}
|
|
120
123
|
}
|
|
121
|
-
createStateUpdaterUtility() {
|
|
122
|
-
return (statePath, parentStateUpdater) => {
|
|
123
|
-
return (componentStateUpdate) => {
|
|
124
|
-
if (!statePath) {
|
|
125
|
-
parentStateUpdater(componentStateUpdate);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
const pathParts = statePath.split('.');
|
|
129
|
-
const componentKey = pathParts[pathParts.length - 1];
|
|
130
|
-
parentStateUpdater({
|
|
131
|
-
[componentKey]: componentStateUpdate
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
124
|
validateCompileOptions(options) {
|
|
125
|
+
if (!options) {
|
|
126
|
+
throw new Error('Component compilation failed: No options provided.\n' +
|
|
127
|
+
'Expected an object with componentName and componentCode properties.\n' +
|
|
128
|
+
'Example: { componentName: "MyComponent", componentCode: "function MyComponent() { ... }" }');
|
|
129
|
+
}
|
|
138
130
|
if (!options.componentName) {
|
|
139
|
-
|
|
131
|
+
const providedKeys = Object.keys(options).join(', ');
|
|
132
|
+
throw new Error('Component compilation failed: Component name is required.\n' +
|
|
133
|
+
`Received options with keys: [${providedKeys}]\n` +
|
|
134
|
+
'Please ensure your component spec includes a "name" property.\n' +
|
|
135
|
+
'Example: { name: "MyComponent", code: "..." }');
|
|
140
136
|
}
|
|
141
137
|
if (!options.componentCode) {
|
|
142
|
-
throw new Error(
|
|
138
|
+
throw new Error(`Component compilation failed: Component code is required for "${options.componentName}".\n` +
|
|
139
|
+
'Please ensure your component spec includes a "code" property with the component source code.\n' +
|
|
140
|
+
'Example: { name: "MyComponent", code: "function MyComponent() { return <div>Hello</div>; }" }');
|
|
143
141
|
}
|
|
144
142
|
if (typeof options.componentCode !== 'string') {
|
|
145
|
-
|
|
143
|
+
const actualType = typeof options.componentCode;
|
|
144
|
+
throw new Error(`Component compilation failed: Component code must be a string for "${options.componentName}".\n` +
|
|
145
|
+
`Received type: ${actualType}\n` +
|
|
146
|
+
`Received value: ${JSON.stringify(options.componentCode).substring(0, 100)}...\n` +
|
|
147
|
+
'Please ensure the code property contains a string of JavaScript/JSX code.');
|
|
148
|
+
}
|
|
149
|
+
if (options.componentCode.trim().length === 0) {
|
|
150
|
+
throw new Error(`Component compilation failed: Component code is empty for "${options.componentName}".\n` +
|
|
151
|
+
'The code property must contain valid JavaScript/JSX code defining a React component.');
|
|
146
152
|
}
|
|
147
153
|
if (!options.componentCode.includes(options.componentName)) {
|
|
148
|
-
throw new Error(`Component code must define a component named "${options.componentName}"`
|
|
154
|
+
throw new Error(`Component compilation failed: Component code must define a component named "${options.componentName}".\n` +
|
|
155
|
+
'The function/component name in the code must match the componentName property.\n' +
|
|
156
|
+
`Expected to find: function ${options.componentName}(...) or const ${options.componentName} = ...\n` +
|
|
157
|
+
'Code preview: ' + options.componentCode.substring(0, 200) + '...');
|
|
149
158
|
}
|
|
150
159
|
}
|
|
151
160
|
generateComponentId(componentName) {
|
package/dist/index.d.ts
CHANGED
|
@@ -8,11 +8,11 @@ export { ComponentRegistry } from './registry';
|
|
|
8
8
|
export { ComponentResolver, ComponentSpec, ResolvedComponents } from './registry';
|
|
9
9
|
export { createErrorBoundary, withErrorBoundary, formatComponentError, createErrorLogger } from './runtime';
|
|
10
10
|
export { wrapComponent, memoizeComponent, lazyComponent, injectProps, conditionalComponent, withErrorHandler, portalComponent, WrapperOptions } from './runtime';
|
|
11
|
-
export { buildComponentProps,
|
|
11
|
+
export { buildComponentProps, normalizeCallbacks, normalizeStyles, validateComponentProps, mergeProps, createPropsTransformer, wrapCallbacksWithLogging, extractPropPaths, PropBuilderOptions } from './runtime';
|
|
12
12
|
export { ComponentHierarchyRegistrar, registerComponentHierarchy, validateComponentSpec, flattenComponentHierarchy, countComponentsInHierarchy, HierarchyRegistrationResult, ComponentRegistrationError, HierarchyRegistrationOptions } from './runtime';
|
|
13
13
|
export { RuntimeUtilities, createRuntimeUtilities } from './utilities/runtime-utilities';
|
|
14
14
|
export { SetupStyles, createDefaultComponentStyles } from './utilities/component-styles';
|
|
15
|
-
export {
|
|
15
|
+
export { StandardLibraries, StandardLibraryManager, createStandardLibraries } from './utilities/standard-libraries';
|
|
16
16
|
export { LibraryLoader, LibraryLoadOptions, LibraryLoadResult } from './utilities/library-loader';
|
|
17
17
|
export { ComponentErrorAnalyzer, FailedComponentInfo } from './utilities/component-error-analyzer';
|
|
18
18
|
export declare const VERSION = "2.69.1";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;AAEnB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,
|
|
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;AAEnB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACf,MAAM,WAAW,CAAC;AAEnB,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;AAGnB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,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,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,sCAAsC,CAAC;AAG9C,eAAO,MAAM,OAAO,WAAW,CAAC;AAGhC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;CAiB3B,CAAC;AAQF,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;;;;;EAcF"}
|
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.ComponentErrorAnalyzer = exports.LibraryLoader = exports.createStandardLibraries = exports.
|
|
17
|
+
exports.createReactRuntime = exports.DEFAULT_CONFIGS = exports.VERSION = exports.ComponentErrorAnalyzer = exports.LibraryLoader = exports.createStandardLibraries = exports.StandardLibraryManager = exports.createDefaultComponentStyles = exports.SetupStyles = exports.createRuntimeUtilities = exports.RuntimeUtilities = 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.portalComponent = exports.withErrorHandler = exports.conditionalComponent = exports.injectProps = exports.lazyComponent = exports.memoizeComponent = exports.wrapComponent = 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;
|
|
18
18
|
const compiler_1 = require("./compiler");
|
|
19
19
|
const registry_1 = require("./registry");
|
|
20
20
|
const registry_2 = require("./registry");
|
|
@@ -33,6 +33,7 @@ var registry_3 = require("./registry");
|
|
|
33
33
|
Object.defineProperty(exports, "ComponentRegistry", { enumerable: true, get: function () { return registry_3.ComponentRegistry; } });
|
|
34
34
|
var registry_4 = require("./registry");
|
|
35
35
|
Object.defineProperty(exports, "ComponentResolver", { enumerable: true, get: function () { return registry_4.ComponentResolver; } });
|
|
36
|
+
Object.defineProperty(exports, "ComponentSpec", { enumerable: true, get: function () { return registry_4.ComponentSpec; } });
|
|
36
37
|
var runtime_1 = require("./runtime");
|
|
37
38
|
Object.defineProperty(exports, "createErrorBoundary", { enumerable: true, get: function () { return runtime_1.createErrorBoundary; } });
|
|
38
39
|
Object.defineProperty(exports, "withErrorBoundary", { enumerable: true, get: function () { return runtime_1.withErrorBoundary; } });
|
|
@@ -48,7 +49,6 @@ Object.defineProperty(exports, "withErrorHandler", { enumerable: true, get: func
|
|
|
48
49
|
Object.defineProperty(exports, "portalComponent", { enumerable: true, get: function () { return runtime_2.portalComponent; } });
|
|
49
50
|
var runtime_3 = require("./runtime");
|
|
50
51
|
Object.defineProperty(exports, "buildComponentProps", { enumerable: true, get: function () { return runtime_3.buildComponentProps; } });
|
|
51
|
-
Object.defineProperty(exports, "cleanupPropBuilder", { enumerable: true, get: function () { return runtime_3.cleanupPropBuilder; } });
|
|
52
52
|
Object.defineProperty(exports, "normalizeCallbacks", { enumerable: true, get: function () { return runtime_3.normalizeCallbacks; } });
|
|
53
53
|
Object.defineProperty(exports, "normalizeStyles", { enumerable: true, get: function () { return runtime_3.normalizeStyles; } });
|
|
54
54
|
Object.defineProperty(exports, "validateComponentProps", { enumerable: true, get: function () { return runtime_3.validateComponentProps; } });
|
|
@@ -69,10 +69,7 @@ var component_styles_1 = require("./utilities/component-styles");
|
|
|
69
69
|
Object.defineProperty(exports, "SetupStyles", { enumerable: true, get: function () { return component_styles_1.SetupStyles; } });
|
|
70
70
|
Object.defineProperty(exports, "createDefaultComponentStyles", { enumerable: true, get: function () { return component_styles_1.createDefaultComponentStyles; } });
|
|
71
71
|
var standard_libraries_1 = require("./utilities/standard-libraries");
|
|
72
|
-
Object.defineProperty(exports, "
|
|
73
|
-
Object.defineProperty(exports, "getCoreLibraryUrls", { enumerable: true, get: function () { return standard_libraries_1.getCoreLibraryUrls; } });
|
|
74
|
-
Object.defineProperty(exports, "getUILibraryUrls", { enumerable: true, get: function () { return standard_libraries_1.getUILibraryUrls; } });
|
|
75
|
-
Object.defineProperty(exports, "getCSSUrls", { enumerable: true, get: function () { return standard_libraries_1.getCSSUrls; } });
|
|
72
|
+
Object.defineProperty(exports, "StandardLibraryManager", { enumerable: true, get: function () { return standard_libraries_1.StandardLibraryManager; } });
|
|
76
73
|
Object.defineProperty(exports, "createStandardLibraries", { enumerable: true, get: function () { return standard_libraries_1.createStandardLibraries; } });
|
|
77
74
|
var library_loader_1 = require("./utilities/library-loader");
|
|
78
75
|
Object.defineProperty(exports, "LibraryLoader", { enumerable: true, get: function () { return library_loader_1.LibraryLoader; } });
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { ComponentRegistry } from './component-registry';
|
|
2
|
-
|
|
3
|
-
componentName: string;
|
|
4
|
-
componentCode?: string;
|
|
5
|
-
childComponents?: ComponentSpec[];
|
|
6
|
-
components?: ComponentSpec[];
|
|
7
|
-
}
|
|
2
|
+
import { ComponentSpec } from '@memberjunction/interactive-component-types';
|
|
8
3
|
export interface ResolvedComponents {
|
|
9
4
|
[componentName: string]: any;
|
|
10
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-resolver.d.ts","sourceRoot":"","sources":["../../src/registry/component-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"component-resolver.d.ts","sourceRoot":"","sources":["../../src/registry/component-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAK5E,MAAM,WAAW,kBAAkB;IACjC,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAoB;gBAMxB,QAAQ,EAAE,iBAAiB;IAUvC,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,GAAE,MAAiB,GAAG,kBAAkB;IAgBxF,OAAO,CAAC,yBAAyB;IAgCjC,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,GAAE,MAAiB,GAAG,MAAM,EAAE;IAgBjF,OAAO,CAAC,iBAAiB;IA0BzB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAe9D,OAAO,CAAC,oBAAoB;IAwB5B,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE;IAuB3C,OAAO,CAAC,kBAAkB;IAwB1B,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,GAAE,MAAiB,GAAG,KAAK,CAAC;QACvE,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,GAAG,CAAC;KAChB,CAAC;IAmBF,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,EAAE;IAe3D,OAAO,CAAC,qBAAqB;CAe9B"}
|
|
@@ -11,16 +11,16 @@ class ComponentResolver {
|
|
|
11
11
|
return resolved;
|
|
12
12
|
}
|
|
13
13
|
resolveComponentHierarchy(spec, resolved, namespace, visited = new Set()) {
|
|
14
|
-
if (visited.has(spec.
|
|
15
|
-
console.warn(`Circular dependency detected for component: ${spec.
|
|
14
|
+
if (visited.has(spec.name)) {
|
|
15
|
+
console.warn(`Circular dependency detected for component: ${spec.name}`);
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
visited.add(spec.
|
|
19
|
-
const component = this.registry.get(spec.
|
|
18
|
+
visited.add(spec.name);
|
|
19
|
+
const component = this.registry.get(spec.name, namespace);
|
|
20
20
|
if (component) {
|
|
21
|
-
resolved[spec.
|
|
21
|
+
resolved[spec.name] = component;
|
|
22
22
|
}
|
|
23
|
-
const children = spec.
|
|
23
|
+
const children = spec.dependencies || [];
|
|
24
24
|
for (const child of children) {
|
|
25
25
|
this.resolveComponentHierarchy(child, resolved, namespace, visited);
|
|
26
26
|
}
|
|
@@ -32,13 +32,13 @@ class ComponentResolver {
|
|
|
32
32
|
return missing;
|
|
33
33
|
}
|
|
34
34
|
checkDependencies(spec, namespace, missing, checked) {
|
|
35
|
-
if (checked.has(spec.
|
|
35
|
+
if (checked.has(spec.name))
|
|
36
36
|
return;
|
|
37
|
-
checked.add(spec.
|
|
38
|
-
if (!this.registry.has(spec.
|
|
39
|
-
missing.push(spec.
|
|
37
|
+
checked.add(spec.name);
|
|
38
|
+
if (!this.registry.has(spec.name, namespace)) {
|
|
39
|
+
missing.push(spec.name);
|
|
40
40
|
}
|
|
41
|
-
const children = spec.
|
|
41
|
+
const children = spec.dependencies || [];
|
|
42
42
|
for (const child of children) {
|
|
43
43
|
this.checkDependencies(child, namespace, missing, checked);
|
|
44
44
|
}
|
|
@@ -50,12 +50,12 @@ class ComponentResolver {
|
|
|
50
50
|
return graph;
|
|
51
51
|
}
|
|
52
52
|
buildDependencyGraph(spec, graph, visited) {
|
|
53
|
-
if (visited.has(spec.
|
|
53
|
+
if (visited.has(spec.name))
|
|
54
54
|
return;
|
|
55
|
-
visited.add(spec.
|
|
56
|
-
const children = spec.
|
|
57
|
-
const dependencies = children.map(child => child.
|
|
58
|
-
graph.set(spec.
|
|
55
|
+
visited.add(spec.name);
|
|
56
|
+
const children = spec.dependencies || [];
|
|
57
|
+
const dependencies = children.map(child => child.name);
|
|
58
|
+
graph.set(spec.name, dependencies);
|
|
59
59
|
for (const child of children) {
|
|
60
60
|
this.buildDependencyGraph(child, graph, visited);
|
|
61
61
|
}
|
|
@@ -99,11 +99,11 @@ class ComponentResolver {
|
|
|
99
99
|
return flattened;
|
|
100
100
|
}
|
|
101
101
|
collectComponentSpecs(spec, collected, visited) {
|
|
102
|
-
if (visited.has(spec.
|
|
102
|
+
if (visited.has(spec.name))
|
|
103
103
|
return;
|
|
104
|
-
visited.add(spec.
|
|
104
|
+
visited.add(spec.name);
|
|
105
105
|
collected.push(spec);
|
|
106
|
-
const children = spec.
|
|
106
|
+
const children = spec.dependencies || [];
|
|
107
107
|
for (const child of children) {
|
|
108
108
|
this.collectComponentSpecs(child, collected, visited);
|
|
109
109
|
}
|
package/dist/registry/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { ComponentRegistry } from './component-registry';
|
|
2
|
-
export { ComponentResolver,
|
|
2
|
+
export { ComponentResolver, ResolvedComponents } from './component-resolver';
|
|
3
|
+
export { ComponentSpec } from '@memberjunction/interactive-component-types';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC"}
|
package/dist/registry/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ComponentResolver = exports.ComponentRegistry = void 0;
|
|
3
|
+
exports.ComponentSpec = exports.ComponentResolver = exports.ComponentRegistry = void 0;
|
|
4
4
|
var component_registry_1 = require("./component-registry");
|
|
5
5
|
Object.defineProperty(exports, "ComponentRegistry", { enumerable: true, get: function () { return component_registry_1.ComponentRegistry; } });
|
|
6
6
|
var component_resolver_1 = require("./component-resolver");
|
|
7
7
|
Object.defineProperty(exports, "ComponentResolver", { enumerable: true, get: function () { return component_resolver_1.ComponentResolver; } });
|
|
8
|
+
var interactive_component_types_1 = require("@memberjunction/interactive-component-types");
|
|
9
|
+
Object.defineProperty(exports, "ComponentSpec", { enumerable: true, get: function () { return interactive_component_types_1.ComponentSpec; } });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentStyles, RuntimeContext } from '../types';
|
|
2
2
|
import { ComponentCompiler } from '../compiler';
|
|
3
3
|
import { ComponentRegistry } from '../registry';
|
|
4
|
-
import { ComponentSpec } from '
|
|
4
|
+
import { ComponentSpec } from '@memberjunction/interactive-component-types';
|
|
5
5
|
export interface HierarchyRegistrationResult {
|
|
6
6
|
success: boolean;
|
|
7
7
|
registeredComponents: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-hierarchy.d.ts","sourceRoot":"","sources":["../../src/runtime/component-hierarchy.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,eAAe,EACf,cAAc,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"component-hierarchy.d.ts","sourceRoot":"","sources":["../../src/runtime/component-hierarchy.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,eAAe,EACf,cAAc,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAK5E,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;CACtD;AAKD,MAAM,WAAW,4BAA4B;IAE3C,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAKD,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;gBAFd,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc;IASlC,iBAAiB,CACrB,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC;IAsDjC,uBAAuB,CAC3B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE;QACP,MAAM,CAAC,EAAE,eAAe,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GACA,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,0BAA0B,CAAA;KAAE,CAAC;YA8EtD,uBAAuB;CAwCtC;AAWD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CAGtC;AAOD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CA2BnE;AAOD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,CASlF;AAQD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,aAAa,EACvB,YAAY,GAAE,OAAe,GAC5B,MAAM,CAaR"}
|