@memberjunction/react-test-harness 2.70.0 → 2.71.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/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/lib/component-runner.d.ts +4 -5
- package/dist/lib/component-runner.d.ts.map +1 -1
- package/dist/lib/component-runner.js +358 -85
- package/dist/lib/component-runner.js.map +1 -1
- package/dist/lib/test-harness.d.ts +22 -4
- package/dist/lib/test-harness.d.ts.map +1 -1
- package/dist/lib/test-harness.js +49 -51
- package/dist/lib/test-harness.js.map +1 -1
- package/package.json +3 -2
package/dist/cli/index.js
CHANGED
|
@@ -80,7 +80,7 @@ program
|
|
|
80
80
|
console.log(chalk_1.default.green('✓ Component rendered successfully'));
|
|
81
81
|
if (options.debug) {
|
|
82
82
|
console.log('\n' + chalk_1.default.bold('Console Output:'));
|
|
83
|
-
result.console.forEach(log => {
|
|
83
|
+
result.console.forEach((log) => {
|
|
84
84
|
const color = log.type === 'error' ? chalk_1.default.red :
|
|
85
85
|
log.type === 'warning' ? chalk_1.default.yellow :
|
|
86
86
|
chalk_1.default.gray;
|
|
@@ -95,7 +95,7 @@ program
|
|
|
95
95
|
else {
|
|
96
96
|
console.log(chalk_1.default.red('✗ Component rendering failed'));
|
|
97
97
|
console.log(chalk_1.default.red('\nErrors:'));
|
|
98
|
-
result.errors.forEach(error => {
|
|
98
|
+
result.errors.forEach((error) => {
|
|
99
99
|
console.log(chalk_1.default.red(` - ${error}`));
|
|
100
100
|
});
|
|
101
101
|
process.exit(1);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AACzB,kDAA0B;AAC1B,8CAAsB;AACtB,sDAAuD;AAEvD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;KAC9D,MAAM,CAAC,2BAA2B,EAAE,oCAAoC,CAAC;KACzE,MAAM,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;KAChE,MAAM,CAAC,YAAY,EAAE,gCAAgC,EAAE,IAAI,CAAC;KAC5D,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;KACxD,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;IACvC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,+BAAgB,CAAC;YACnC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,cAAc,EAAE,OAAO,CAAC,UAAU;SACnC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QACrC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAE3B,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAChD,aAAa,EACb,KAAK,EACL;YACE,eAAe,EAAE,OAAO,CAAC,QAAQ;YACjC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;SACnC,CACF,CAAC;QAEF,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAE9D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { BrowserManager } from './browser-context';
|
|
3
3
|
export interface ComponentExecutionOptions {
|
|
4
|
-
|
|
4
|
+
componentSpec: ComponentSpec;
|
|
5
5
|
props?: Record<string, any>;
|
|
6
6
|
setupCode?: string;
|
|
7
7
|
timeout?: number;
|
|
8
8
|
waitForSelector?: string;
|
|
9
9
|
waitForLoadState?: 'load' | 'domcontentloaded' | 'networkidle';
|
|
10
|
-
childComponents?: ComponentSpec[];
|
|
11
|
-
registerChildren?: boolean;
|
|
12
10
|
}
|
|
13
11
|
export interface ComponentSpec {
|
|
14
12
|
componentName: string;
|
|
@@ -29,10 +27,11 @@ export interface ComponentExecutionResult {
|
|
|
29
27
|
}
|
|
30
28
|
export declare class ComponentRunner {
|
|
31
29
|
private browserManager;
|
|
30
|
+
private compiler;
|
|
31
|
+
private registry;
|
|
32
|
+
private runtimeContext;
|
|
32
33
|
constructor(browserManager: BrowserManager);
|
|
33
34
|
executeComponent(options: ComponentExecutionOptions): Promise<ComponentExecutionResult>;
|
|
34
35
|
private createHTMLTemplate;
|
|
35
|
-
private generateChildComponentRegistration;
|
|
36
|
-
executeComponentFromFile(filePath: string, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
37
36
|
}
|
|
38
37
|
//# sourceMappingURL=component-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"component-runner.d.ts","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnD,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,CAAC;CAChE;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAKd,OAAO,CAAC,cAAc;IAJlC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAiB;gBAEnB,cAAc,EAAE,cAAc;IAQ5C,gBAAgB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgE7F,OAAO,CAAC,kBAAkB;CA8X3B"}
|
|
@@ -1,34 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.ComponentRunner = void 0;
|
|
27
|
-
const
|
|
28
|
-
const fs = __importStar(require("fs"));
|
|
4
|
+
const react_runtime_1 = require("@memberjunction/react-runtime");
|
|
29
5
|
class ComponentRunner {
|
|
30
6
|
constructor(browserManager) {
|
|
31
7
|
this.browserManager = browserManager;
|
|
8
|
+
this.compiler = new react_runtime_1.ComponentCompiler();
|
|
9
|
+
this.registry = new react_runtime_1.ComponentRegistry();
|
|
10
|
+
// Set up runtime context (will be populated in browser)
|
|
11
|
+
this.runtimeContext = {};
|
|
32
12
|
}
|
|
33
13
|
async executeComponent(options) {
|
|
34
14
|
const startTime = Date.now();
|
|
@@ -44,7 +24,7 @@ class ComponentRunner {
|
|
|
44
24
|
page.on('pageerror', (error) => {
|
|
45
25
|
errors.push(error.message);
|
|
46
26
|
});
|
|
47
|
-
// Create HTML template
|
|
27
|
+
// Create HTML template that uses the runtime's ComponentHierarchyRegistrar
|
|
48
28
|
const htmlContent = this.createHTMLTemplate(options);
|
|
49
29
|
// Navigate to a data URL with the HTML content
|
|
50
30
|
await page.goto(`data:text/html;charset=utf-8,${encodeURIComponent(htmlContent)}`);
|
|
@@ -87,20 +67,21 @@ class ComponentRunner {
|
|
|
87
67
|
}
|
|
88
68
|
createHTMLTemplate(options) {
|
|
89
69
|
const propsJson = JSON.stringify(options.props || {});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
70
|
+
const specJson = JSON.stringify(options.componentSpec);
|
|
71
|
+
// Generate script tags for core libraries
|
|
72
|
+
const coreLibraryScripts = (0, react_runtime_1.getCoreLibraryUrls)()
|
|
73
|
+
.map(url => ` <script src="${url}"></script>`)
|
|
74
|
+
.join('\n');
|
|
95
75
|
return `
|
|
96
76
|
<!DOCTYPE html>
|
|
97
77
|
<html>
|
|
98
78
|
<head>
|
|
99
79
|
<meta charset="utf-8">
|
|
100
80
|
<title>React Component Test</title>
|
|
101
|
-
<script crossorigin src="
|
|
102
|
-
<script crossorigin src="
|
|
103
|
-
<script src="
|
|
81
|
+
<script crossorigin src="${react_runtime_1.STANDARD_LIBRARY_URLS.REACT}"></script>
|
|
82
|
+
<script crossorigin src="${react_runtime_1.STANDARD_LIBRARY_URLS.REACT_DOM}"></script>
|
|
83
|
+
<script src="${react_runtime_1.STANDARD_LIBRARY_URLS.BABEL}"></script>
|
|
84
|
+
${coreLibraryScripts}
|
|
104
85
|
<style>
|
|
105
86
|
body { margin: 0; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
|
106
87
|
#root { min-height: 100vh; }
|
|
@@ -111,66 +92,358 @@ class ComponentRunner {
|
|
|
111
92
|
<script type="text/babel">
|
|
112
93
|
${options.setupCode || ''}
|
|
113
94
|
|
|
114
|
-
//
|
|
115
|
-
const
|
|
116
|
-
|
|
95
|
+
// Create runtime context
|
|
96
|
+
const runtimeContext = {
|
|
97
|
+
React: React,
|
|
98
|
+
ReactDOM: ReactDOM,
|
|
99
|
+
libraries: {
|
|
100
|
+
_: window._,
|
|
101
|
+
d3: window.d3,
|
|
102
|
+
Chart: window.Chart,
|
|
103
|
+
dayjs: window.dayjs
|
|
104
|
+
}
|
|
105
|
+
};
|
|
117
106
|
|
|
118
|
-
|
|
107
|
+
// Create component compiler
|
|
108
|
+
class SimpleCompiler {
|
|
109
|
+
constructor() {
|
|
110
|
+
this.cache = new Map();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async compile(options) {
|
|
114
|
+
const componentName = options.componentName;
|
|
115
|
+
const componentCode = options.componentCode;
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
// Transform JSX to JS using Babel
|
|
119
|
+
const transformed = Babel.transform(componentCode, {
|
|
120
|
+
presets: ['react'],
|
|
121
|
+
filename: componentName + '.jsx'
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// Create component factory
|
|
125
|
+
const createComponent = new Function(
|
|
126
|
+
'React', 'ReactDOM', 'useState', 'useEffect', 'useCallback',
|
|
127
|
+
'createStateUpdater', 'libraries', 'styles', 'console',
|
|
128
|
+
\`
|
|
129
|
+
// Make libraries available in the component scope
|
|
130
|
+
const _ = libraries._;
|
|
131
|
+
const d3 = libraries.d3;
|
|
132
|
+
const Chart = libraries.Chart;
|
|
133
|
+
const dayjs = libraries.dayjs;
|
|
134
|
+
|
|
135
|
+
\${transformed.code}
|
|
136
|
+
return {
|
|
137
|
+
component: \${componentName},
|
|
138
|
+
print: function() { window.print(); },
|
|
139
|
+
refresh: function(data) { }
|
|
140
|
+
};
|
|
141
|
+
\`
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
const componentFactory = (context, styles = {}) => {
|
|
145
|
+
const { React, ReactDOM, libraries = {} } = context;
|
|
146
|
+
const createStateUpdater = (statePath, parentStateUpdater) => {
|
|
147
|
+
return (componentStateUpdate) => {
|
|
148
|
+
if (!statePath) {
|
|
149
|
+
parentStateUpdater(componentStateUpdate);
|
|
150
|
+
} else {
|
|
151
|
+
const pathParts = statePath.split('.');
|
|
152
|
+
const componentKey = pathParts[pathParts.length - 1];
|
|
153
|
+
parentStateUpdater({ [componentKey]: componentStateUpdate });
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
return createComponent(
|
|
159
|
+
React,
|
|
160
|
+
ReactDOM,
|
|
161
|
+
React.useState,
|
|
162
|
+
React.useEffect,
|
|
163
|
+
React.useCallback,
|
|
164
|
+
createStateUpdater,
|
|
165
|
+
libraries,
|
|
166
|
+
styles,
|
|
167
|
+
console
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
success: true,
|
|
173
|
+
component: {
|
|
174
|
+
component: componentFactory,
|
|
175
|
+
id: componentName + '_' + Date.now(),
|
|
176
|
+
name: componentName,
|
|
177
|
+
compiledAt: new Date(),
|
|
178
|
+
warnings: []
|
|
179
|
+
},
|
|
180
|
+
duration: 0
|
|
181
|
+
};
|
|
182
|
+
} catch (error) {
|
|
183
|
+
return {
|
|
184
|
+
success: false,
|
|
185
|
+
error: {
|
|
186
|
+
message: error.message,
|
|
187
|
+
componentName: componentName,
|
|
188
|
+
phase: 'compilation'
|
|
189
|
+
},
|
|
190
|
+
duration: 0
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
setBabelInstance(babel) {
|
|
196
|
+
// Already have access to Babel global
|
|
197
|
+
}
|
|
198
|
+
}
|
|
119
199
|
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
200
|
+
// Create component registry
|
|
201
|
+
class SimpleRegistry {
|
|
202
|
+
constructor() {
|
|
203
|
+
this.components = new Map();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
register(name, component, namespace = 'Global', version = 'v1') {
|
|
207
|
+
const key = \`\${namespace}/\${version}/\${name}\`;
|
|
208
|
+
this.components.set(key, component);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
get(name, namespace = 'Global', version = 'v1') {
|
|
212
|
+
const key = \`\${namespace}/\${version}/\${name}\`;
|
|
213
|
+
return this.components.get(key);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
getAll(namespace = 'Global', version = 'v1') {
|
|
217
|
+
const components = {};
|
|
218
|
+
const prefix = \`\${namespace}/\${version}/\`;
|
|
219
|
+
this.components.forEach((component, key) => {
|
|
220
|
+
if (key.startsWith(prefix)) {
|
|
221
|
+
const name = key.substring(prefix.length);
|
|
222
|
+
components[name] = component;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
return components;
|
|
226
|
+
}
|
|
123
227
|
}
|
|
124
228
|
|
|
125
|
-
|
|
229
|
+
// Create instances
|
|
230
|
+
const compiler = new SimpleCompiler();
|
|
231
|
+
const registry = new SimpleRegistry();
|
|
126
232
|
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
233
|
+
// Create hierarchy registrar
|
|
234
|
+
class SimpleHierarchyRegistrar {
|
|
235
|
+
constructor(compiler, registry, runtimeContext) {
|
|
236
|
+
this.compiler = compiler;
|
|
237
|
+
this.registry = registry;
|
|
238
|
+
this.runtimeContext = runtimeContext;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
async registerHierarchy(rootSpec, options = {}) {
|
|
242
|
+
const registeredComponents = [];
|
|
243
|
+
const errors = [];
|
|
244
|
+
const warnings = [];
|
|
245
|
+
|
|
246
|
+
// Register components recursively
|
|
247
|
+
const registerSpec = async (spec) => {
|
|
248
|
+
// Register children first
|
|
249
|
+
const children = spec.childComponents || spec.components || [];
|
|
250
|
+
for (const child of children) {
|
|
251
|
+
await registerSpec(child);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Register this component
|
|
255
|
+
if (spec.componentCode) {
|
|
256
|
+
const result = await this.compiler.compile({
|
|
257
|
+
componentName: spec.componentName,
|
|
258
|
+
componentCode: spec.componentCode
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
if (result.success) {
|
|
262
|
+
const factory = result.component.component(this.runtimeContext, {});
|
|
263
|
+
this.registry.register(spec.componentName, factory.component);
|
|
264
|
+
registeredComponents.push(spec.componentName);
|
|
265
|
+
} else {
|
|
266
|
+
errors.push({
|
|
267
|
+
componentName: spec.componentName,
|
|
268
|
+
error: result.error.message,
|
|
269
|
+
phase: 'compilation'
|
|
270
|
+
});
|
|
156
271
|
}
|
|
272
|
+
}
|
|
157
273
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return
|
|
274
|
+
|
|
275
|
+
await registerSpec(rootSpec);
|
|
276
|
+
|
|
277
|
+
return {
|
|
278
|
+
success: errors.length === 0,
|
|
279
|
+
registeredComponents,
|
|
280
|
+
errors,
|
|
281
|
+
warnings
|
|
282
|
+
};
|
|
283
|
+
}
|
|
162
284
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
285
|
+
|
|
286
|
+
const hierarchyRegistrar = new SimpleHierarchyRegistrar(compiler, registry, runtimeContext);
|
|
287
|
+
|
|
288
|
+
// BuildUtilities function - copied from skip-chat implementation
|
|
289
|
+
const BuildUtilities = () => {
|
|
290
|
+
// Create mock utilities for testing
|
|
291
|
+
// In production, this would use the actual Metadata, RunView, and RunQuery
|
|
292
|
+
const utilities = {
|
|
293
|
+
md: {
|
|
294
|
+
entities: []
|
|
295
|
+
},
|
|
296
|
+
rv: {
|
|
297
|
+
runView: async (params) => {
|
|
298
|
+
console.log('Mock runView called with:', params);
|
|
299
|
+
return { Results: [], Success: true };
|
|
300
|
+
},
|
|
301
|
+
runViews: async (params) => {
|
|
302
|
+
console.log('Mock runViews called with:', params);
|
|
303
|
+
return params.map(() => ({ Results: [], Success: true }));
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
rq: {
|
|
307
|
+
runQuery: async (params) => {
|
|
308
|
+
console.log('Mock runQuery called with:', params);
|
|
309
|
+
return { Results: [], Success: true };
|
|
310
|
+
}
|
|
167
311
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
312
|
+
};
|
|
313
|
+
return utilities;
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
// SetupStyles function - copied from skip-chat implementation
|
|
317
|
+
const SetupStyles = () => ({
|
|
318
|
+
colors: {
|
|
319
|
+
primary: '#5B4FE9',
|
|
320
|
+
primaryHover: '#4940D4',
|
|
321
|
+
primaryLight: '#E8E6FF',
|
|
322
|
+
secondary: '#64748B',
|
|
323
|
+
secondaryHover: '#475569',
|
|
324
|
+
success: '#10B981',
|
|
325
|
+
successLight: '#D1FAE5',
|
|
326
|
+
warning: '#F59E0B',
|
|
327
|
+
warningLight: '#FEF3C7',
|
|
328
|
+
error: '#EF4444',
|
|
329
|
+
errorLight: '#FEE2E2',
|
|
330
|
+
info: '#3B82F6',
|
|
331
|
+
infoLight: '#DBEAFE',
|
|
332
|
+
background: '#FFFFFF',
|
|
333
|
+
surface: '#F8FAFC',
|
|
334
|
+
surfaceHover: '#F1F5F9',
|
|
335
|
+
text: '#1E293B',
|
|
336
|
+
textSecondary: '#64748B',
|
|
337
|
+
textTertiary: '#94A3B8',
|
|
338
|
+
textInverse: '#FFFFFF',
|
|
339
|
+
border: '#E2E8F0',
|
|
340
|
+
borderLight: '#F1F5F9',
|
|
341
|
+
borderFocus: '#5B4FE9',
|
|
342
|
+
shadow: 'rgba(0, 0, 0, 0.05)',
|
|
343
|
+
shadowMedium: 'rgba(0, 0, 0, 0.1)',
|
|
344
|
+
shadowLarge: 'rgba(0, 0, 0, 0.15)',
|
|
345
|
+
},
|
|
346
|
+
spacing: {
|
|
347
|
+
xs: '4px',
|
|
348
|
+
sm: '8px',
|
|
349
|
+
md: '16px',
|
|
350
|
+
lg: '24px',
|
|
351
|
+
xl: '32px',
|
|
352
|
+
xxl: '48px',
|
|
353
|
+
xxxl: '64px',
|
|
354
|
+
},
|
|
355
|
+
typography: {
|
|
356
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif',
|
|
357
|
+
fontSize: {
|
|
358
|
+
xs: '11px',
|
|
359
|
+
sm: '12px',
|
|
360
|
+
md: '14px',
|
|
361
|
+
lg: '16px',
|
|
362
|
+
xl: '20px',
|
|
363
|
+
xxl: '24px',
|
|
364
|
+
xxxl: '32px',
|
|
365
|
+
},
|
|
366
|
+
fontWeight: {
|
|
367
|
+
light: '300',
|
|
368
|
+
regular: '400',
|
|
369
|
+
medium: '500',
|
|
370
|
+
semibold: '600',
|
|
371
|
+
bold: '700',
|
|
372
|
+
},
|
|
373
|
+
lineHeight: {
|
|
374
|
+
tight: '1.25',
|
|
375
|
+
normal: '1.5',
|
|
376
|
+
relaxed: '1.75',
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
borders: {
|
|
380
|
+
radius: {
|
|
381
|
+
sm: '6px',
|
|
382
|
+
md: '8px',
|
|
383
|
+
lg: '12px',
|
|
384
|
+
xl: '16px',
|
|
385
|
+
full: '9999px',
|
|
386
|
+
},
|
|
387
|
+
width: {
|
|
388
|
+
thin: '1px',
|
|
389
|
+
medium: '2px',
|
|
390
|
+
thick: '3px',
|
|
391
|
+
},
|
|
392
|
+
},
|
|
393
|
+
shadows: {
|
|
394
|
+
sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
|
|
395
|
+
md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
|
|
396
|
+
lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
|
|
397
|
+
xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
|
|
398
|
+
inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',
|
|
399
|
+
},
|
|
400
|
+
transitions: {
|
|
401
|
+
fast: '150ms ease-in-out',
|
|
402
|
+
normal: '250ms ease-in-out',
|
|
403
|
+
slow: '350ms ease-in-out',
|
|
404
|
+
},
|
|
405
|
+
overflow: 'auto'
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
// Load component spec and register hierarchy
|
|
409
|
+
const componentSpec = ${specJson};
|
|
410
|
+
const props = ${propsJson};
|
|
411
|
+
|
|
412
|
+
(async () => {
|
|
413
|
+
// Register the component hierarchy
|
|
414
|
+
const result = await hierarchyRegistrar.registerHierarchy(componentSpec);
|
|
415
|
+
|
|
416
|
+
if (!result.success) {
|
|
417
|
+
console.error('Failed to register components:', result.errors);
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Get all registered components
|
|
422
|
+
const components = registry.getAll();
|
|
423
|
+
|
|
424
|
+
// Get the root component
|
|
425
|
+
const RootComponent = registry.get(componentSpec.componentName);
|
|
426
|
+
|
|
427
|
+
if (!RootComponent) {
|
|
428
|
+
console.error('Root component not found:', componentSpec.componentName);
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// Add components, utilities, and styles to props
|
|
433
|
+
const enhancedProps = {
|
|
434
|
+
...props,
|
|
435
|
+
components: components,
|
|
436
|
+
utilities: BuildUtilities(),
|
|
437
|
+
styles: SetupStyles()
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
// Render the root component
|
|
441
|
+
const root = ReactDOM.createRoot(document.getElementById('root'));
|
|
442
|
+
root.render(React.createElement(RootComponent, enhancedProps));
|
|
443
|
+
})();
|
|
444
|
+
</script>
|
|
445
|
+
</body>
|
|
446
|
+
</html>`;
|
|
174
447
|
}
|
|
175
448
|
}
|
|
176
449
|
exports.ComponentRunner = ComponentRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-runner.js","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"component-runner.js","sourceRoot":"","sources":["../../src/lib/component-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { BrowserContextOptions } from './browser-context';
|
|
3
3
|
import { ComponentExecutionOptions, ComponentExecutionResult, ComponentSpec } from './component-runner';
|
|
4
4
|
import { AssertionHelpers } from './assertion-helpers';
|
|
5
|
+
import { ComponentRootSpec } from '@memberjunction/interactive-component-types';
|
|
5
6
|
export interface TestHarnessOptions extends BrowserContextOptions {
|
|
6
7
|
debug?: boolean;
|
|
7
8
|
screenshotOnError?: boolean;
|
|
@@ -13,11 +14,28 @@ export declare class ReactTestHarness {
|
|
|
13
14
|
private options;
|
|
14
15
|
constructor(options?: TestHarnessOptions);
|
|
15
16
|
initialize(): Promise<void>;
|
|
16
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Test a component specification (root component with optional children)
|
|
19
|
+
* This is the main method that leverages the runtime's ComponentHierarchyRegistrar
|
|
20
|
+
*/
|
|
21
|
+
testComponentSpec(spec: ComponentSpec, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Convenience method to test a single component without children
|
|
24
|
+
*/
|
|
25
|
+
testSingleComponent(componentName: string, componentCode: string, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Test a component from the Skip spec format
|
|
28
|
+
*/
|
|
29
|
+
testSkipComponent(skipSpec: ComponentRootSpec, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Convert Skip child specs to test harness ComponentSpec format
|
|
32
|
+
*/
|
|
33
|
+
private convertSkipChildSpecs;
|
|
34
|
+
/**
|
|
35
|
+
* Test a component from a file path
|
|
36
|
+
* This is a convenience method for the CLI
|
|
37
|
+
*/
|
|
17
38
|
testComponentFromFile(filePath: string, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
18
|
-
testComponentHierarchy(rootSpec: ComponentSpec, props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
19
|
-
testComponentFromFileWithChildren(filePath: string, childComponents: ComponentSpec[], props?: Record<string, any>, options?: Partial<ComponentExecutionOptions>): Promise<ComponentExecutionResult>;
|
|
20
|
-
private collectChildComponents;
|
|
21
39
|
runTest(name: string, testFn: () => Promise<void>): Promise<{
|
|
22
40
|
name: string;
|
|
23
41
|
passed: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAmB,yBAAyB,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"test-harness.d.ts","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/test-harness.js
CHANGED
|
@@ -27,8 +27,6 @@ exports.ReactTestHarness = void 0;
|
|
|
27
27
|
const browser_context_1 = require("./browser-context");
|
|
28
28
|
const component_runner_1 = require("./component-runner");
|
|
29
29
|
const assertion_helpers_1 = require("./assertion-helpers");
|
|
30
|
-
const path = __importStar(require("path"));
|
|
31
|
-
const fs = __importStar(require("fs"));
|
|
32
30
|
class ReactTestHarness {
|
|
33
31
|
constructor(options = {}) {
|
|
34
32
|
this.options = {
|
|
@@ -43,14 +41,19 @@ class ReactTestHarness {
|
|
|
43
41
|
async initialize() {
|
|
44
42
|
await this.browserManager.initialize();
|
|
45
43
|
}
|
|
46
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Test a component specification (root component with optional children)
|
|
46
|
+
* This is the main method that leverages the runtime's ComponentHierarchyRegistrar
|
|
47
|
+
*/
|
|
48
|
+
async testComponentSpec(spec, props, options) {
|
|
47
49
|
const result = await this.componentRunner.executeComponent({
|
|
48
|
-
|
|
50
|
+
componentSpec: spec,
|
|
49
51
|
props,
|
|
50
52
|
...options
|
|
51
53
|
});
|
|
52
54
|
if (this.options.debug) {
|
|
53
55
|
console.log('=== Test Execution Debug Info ===');
|
|
56
|
+
console.log('Component:', spec.componentName);
|
|
54
57
|
console.log('Success:', result.success);
|
|
55
58
|
console.log('Execution Time:', result.executionTime, 'ms');
|
|
56
59
|
console.log('Errors:', result.errors);
|
|
@@ -60,63 +63,58 @@ class ReactTestHarness {
|
|
|
60
63
|
if (!result.success && this.options.screenshotOnError && result.screenshot) {
|
|
61
64
|
const screenshotPath = this.options.screenshotPath || './error-screenshot.png';
|
|
62
65
|
const fs = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
63
|
-
|
|
66
|
+
// Ensure the screenshot Buffer is properly typed for writeFileSync
|
|
67
|
+
fs.writeFileSync(screenshotPath, Buffer.from(result.screenshot));
|
|
64
68
|
console.log(`Screenshot saved to: ${screenshotPath}`);
|
|
65
69
|
}
|
|
66
70
|
return result;
|
|
67
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Convenience method to test a single component without children
|
|
74
|
+
*/
|
|
75
|
+
async testSingleComponent(componentName, componentCode, props, options) {
|
|
76
|
+
const spec = {
|
|
77
|
+
componentName,
|
|
78
|
+
componentCode
|
|
79
|
+
};
|
|
80
|
+
return this.testComponentSpec(spec, props, options);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Test a component from the Skip spec format
|
|
84
|
+
*/
|
|
85
|
+
async testSkipComponent(skipSpec, props, options) {
|
|
86
|
+
// Convert SkipComponentRootSpec to ComponentSpec format
|
|
87
|
+
const spec = {
|
|
88
|
+
componentName: skipSpec.componentName,
|
|
89
|
+
componentCode: skipSpec.componentCode,
|
|
90
|
+
childComponents: this.convertSkipChildSpecs(skipSpec.childComponents)
|
|
91
|
+
};
|
|
92
|
+
return this.testComponentSpec(spec, props, options);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Convert Skip child specs to test harness ComponentSpec format
|
|
96
|
+
*/
|
|
97
|
+
convertSkipChildSpecs(children) {
|
|
98
|
+
return children.map(child => ({
|
|
99
|
+
componentName: child.componentName,
|
|
100
|
+
componentCode: child.componentCode,
|
|
101
|
+
childComponents: child.components ? this.convertSkipChildSpecs(child.components) : []
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Test a component from a file path
|
|
106
|
+
* This is a convenience method for the CLI
|
|
107
|
+
*/
|
|
68
108
|
async testComponentFromFile(filePath, props, options) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
async testComponentHierarchy(rootSpec, props, options) {
|
|
72
|
-
if (!rootSpec.componentCode) {
|
|
73
|
-
throw new Error(`Root component ${rootSpec.componentName} must have componentCode`);
|
|
74
|
-
}
|
|
75
|
-
// Collect all child components from the hierarchy
|
|
76
|
-
const childComponents = this.collectChildComponents(rootSpec);
|
|
77
|
-
// Execute the root component with all children registered
|
|
78
|
-
const result = await this.componentRunner.executeComponent({
|
|
79
|
-
componentCode: rootSpec.componentCode,
|
|
80
|
-
props,
|
|
81
|
-
childComponents,
|
|
82
|
-
registerChildren: true,
|
|
83
|
-
...options
|
|
84
|
-
});
|
|
85
|
-
if (this.options.debug) {
|
|
86
|
-
console.log('=== Component Hierarchy Test Debug Info ===');
|
|
87
|
-
console.log('Root Component:', rootSpec.componentName);
|
|
88
|
-
console.log('Child Components:', childComponents.map(c => c.componentName));
|
|
89
|
-
console.log('==========================================');
|
|
90
|
-
}
|
|
91
|
-
return result;
|
|
92
|
-
}
|
|
93
|
-
async testComponentFromFileWithChildren(filePath, childComponents, props, options) {
|
|
109
|
+
const fs = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
110
|
+
const path = await Promise.resolve().then(() => __importStar(require('path')));
|
|
94
111
|
const absolutePath = path.resolve(filePath);
|
|
95
112
|
if (!fs.existsSync(absolutePath)) {
|
|
96
113
|
throw new Error(`Component file not found: ${absolutePath}`);
|
|
97
114
|
}
|
|
98
115
|
const componentCode = fs.readFileSync(absolutePath, 'utf-8');
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
props,
|
|
102
|
-
childComponents,
|
|
103
|
-
registerChildren: true,
|
|
104
|
-
...options
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
collectChildComponents(spec) {
|
|
108
|
-
const collected = [];
|
|
109
|
-
const processSpec = (s) => {
|
|
110
|
-
const children = s.childComponents || s.components || [];
|
|
111
|
-
children.forEach(child => {
|
|
112
|
-
if (child.componentCode) {
|
|
113
|
-
collected.push(child);
|
|
114
|
-
}
|
|
115
|
-
processSpec(child);
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
processSpec(spec);
|
|
119
|
-
return collected;
|
|
116
|
+
const componentName = path.basename(absolutePath, path.extname(absolutePath));
|
|
117
|
+
return this.testSingleComponent(componentName, componentCode, props, options);
|
|
120
118
|
}
|
|
121
119
|
async runTest(name, testFn) {
|
|
122
120
|
const startTime = Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA0E;AAC1E,yDAAyH;AACzH,2DAAuD;
|
|
1
|
+
{"version":3,"file":"test-harness.js","sourceRoot":"","sources":["../../src/lib/test-harness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/react-test-harness",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.71.0",
|
|
4
4
|
"description": "React component test harness for MemberJunction using Playwright",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"typescript": "^5.4.5"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@memberjunction/react-runtime": "^2.
|
|
25
|
+
"@memberjunction/react-runtime": "^2.71.0",
|
|
26
|
+
"@memberjunction/interactive-component-types": "^2.71.0",
|
|
26
27
|
"@playwright/test": "^1.40.0",
|
|
27
28
|
"playwright": "^1.40.0",
|
|
28
29
|
"commander": "^11.1.0",
|