@memberjunction/react-test-harness 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.
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Analyzes the ComponentStyles TypeScript interface to validate style property access
4
+ * @module @memberjunction/react-test-harness
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.StylesTypeAnalyzer = void 0;
31
+ const ts = __importStar(require("typescript"));
32
+ const path = __importStar(require("path"));
33
+ const fs = __importStar(require("fs"));
34
+ const react_runtime_1 = require("@memberjunction/react-runtime");
35
+ /**
36
+ * Analyzes the ComponentStyles interface from @memberjunction/interactive-component-types
37
+ * to provide validation and suggestions for style property access
38
+ */
39
+ class StylesTypeAnalyzer {
40
+ constructor() {
41
+ this.validPaths = new Set();
42
+ this.propertyMap = new Map();
43
+ // Get the default styles from the runtime - single source of truth
44
+ this.defaultStyles = (0, react_runtime_1.SetupStyles)();
45
+ this.analyzeComponentStylesInterface();
46
+ }
47
+ /**
48
+ * Analyzes the ComponentStyles interface to extract all valid property paths
49
+ */
50
+ analyzeComponentStylesInterface() {
51
+ try {
52
+ // Find the type definition file
53
+ const typePackagePath = require.resolve('@memberjunction/interactive-component-types');
54
+ const packageDir = path.dirname(typePackagePath);
55
+ const typeFile = path.join(packageDir, 'src', 'runtime-types.ts');
56
+ // Check if file exists, if not try the dist version
57
+ const actualFile = fs.existsSync(typeFile)
58
+ ? typeFile
59
+ : path.join(packageDir, 'runtime-types.d.ts');
60
+ if (!fs.existsSync(actualFile)) {
61
+ // Fallback to hardcoded structure if we can't find the file
62
+ this.loadFallbackStructure();
63
+ return;
64
+ }
65
+ const sourceCode = fs.readFileSync(actualFile, 'utf-8');
66
+ // Create a TypeScript program to parse the file
67
+ const sourceFile = ts.createSourceFile(actualFile, sourceCode, ts.ScriptTarget.Latest, true);
68
+ // Find the ComponentStyles interface
69
+ const interfaceNode = this.findInterface(sourceFile, 'ComponentStyles');
70
+ if (interfaceNode) {
71
+ this.extractPaths(interfaceNode, []);
72
+ }
73
+ else {
74
+ // Fallback if we can't find the interface
75
+ this.loadFallbackStructure();
76
+ }
77
+ }
78
+ catch (error) {
79
+ console.warn('Failed to analyze ComponentStyles interface, using fallback structure:', error);
80
+ this.loadFallbackStructure();
81
+ }
82
+ }
83
+ /**
84
+ * Finds an interface by name in a source file
85
+ */
86
+ findInterface(sourceFile, name) {
87
+ let result;
88
+ const visit = (node) => {
89
+ if (ts.isInterfaceDeclaration(node) && node.name?.text === name) {
90
+ result = node;
91
+ return;
92
+ }
93
+ ts.forEachChild(node, visit);
94
+ };
95
+ visit(sourceFile);
96
+ return result;
97
+ }
98
+ /**
99
+ * Recursively extracts property paths from an interface
100
+ */
101
+ extractPaths(node, currentPath) {
102
+ if (ts.isInterfaceDeclaration(node) || ts.isTypeLiteralNode(node)) {
103
+ const members = ts.isInterfaceDeclaration(node) ? node.members : node.members;
104
+ members.forEach(member => {
105
+ if (ts.isPropertySignature(member) && member.name && ts.isIdentifier(member.name)) {
106
+ const propName = member.name.text;
107
+ const newPath = [...currentPath, propName];
108
+ // Add this path
109
+ this.addPath(newPath);
110
+ // If the type is an object/interface, recurse
111
+ if (member.type) {
112
+ this.extractPathsFromType(member.type, newPath);
113
+ }
114
+ }
115
+ });
116
+ }
117
+ }
118
+ /**
119
+ * Extracts paths from a type node
120
+ */
121
+ extractPathsFromType(typeNode, currentPath) {
122
+ if (ts.isTypeLiteralNode(typeNode)) {
123
+ this.extractPaths(typeNode, currentPath);
124
+ }
125
+ else if (ts.isUnionTypeNode(typeNode)) {
126
+ // For union types, we might have object literals
127
+ typeNode.types.forEach(type => {
128
+ if (ts.isTypeLiteralNode(type)) {
129
+ this.extractPaths(type, currentPath);
130
+ }
131
+ });
132
+ }
133
+ }
134
+ /**
135
+ * Adds a path to our tracking structures
136
+ */
137
+ addPath(pathArray) {
138
+ const pathStr = pathArray.join('.');
139
+ this.validPaths.add(pathStr);
140
+ // Add to property map for quick lookup
141
+ const lastProp = pathArray[pathArray.length - 1];
142
+ if (!this.propertyMap.has(lastProp)) {
143
+ this.propertyMap.set(lastProp, []);
144
+ }
145
+ this.propertyMap.get(lastProp).push(pathStr);
146
+ }
147
+ /**
148
+ * Loads structure from the actual runtime default styles
149
+ */
150
+ loadFallbackStructure() {
151
+ // Use the actual default styles as the structure source
152
+ // We need to cast through unknown because ComponentStyles doesn't have an index signature
153
+ this.buildPathsFromStructure(this.defaultStyles, []);
154
+ }
155
+ /**
156
+ * Builds paths from a structure object
157
+ */
158
+ buildPathsFromStructure(obj, currentPath) {
159
+ for (const key in obj) {
160
+ const newPath = [...currentPath, key];
161
+ this.addPath(newPath);
162
+ const value = obj[key];
163
+ // Check if it's an object but not a boolean (which was being compared incorrectly)
164
+ if (value && typeof value === 'object') {
165
+ this.buildPathsFromStructure(value, newPath);
166
+ }
167
+ }
168
+ }
169
+ /**
170
+ * Checks if a property path is valid
171
+ */
172
+ isValidPath(pathArray) {
173
+ // Remove 'styles' from the beginning if present
174
+ const cleanPath = pathArray[0] === 'styles' ? pathArray.slice(1) : pathArray;
175
+ return this.validPaths.has(cleanPath.join('.'));
176
+ }
177
+ /**
178
+ * Finds all paths containing a specific property name
179
+ */
180
+ findPropertyPaths(propertyName) {
181
+ const paths = [];
182
+ // Look for exact matches
183
+ if (this.propertyMap.has(propertyName)) {
184
+ paths.push(...this.propertyMap.get(propertyName));
185
+ }
186
+ return paths;
187
+ }
188
+ /**
189
+ * Gets suggestions for an invalid path
190
+ */
191
+ getSuggestionsForPath(invalidPath) {
192
+ // Remove 'styles' prefix if present
193
+ const cleanPath = invalidPath[0] === 'styles' ? invalidPath.slice(1) : invalidPath;
194
+ const suggestions = {
195
+ correctPaths: [],
196
+ availableAtParent: [],
197
+ didYouMean: null
198
+ };
199
+ // Find where the misplaced property might exist
200
+ const lastProp = cleanPath[cleanPath.length - 1];
201
+ suggestions.correctPaths = this.findPropertyPaths(lastProp)
202
+ .map(p => 'styles.' + p);
203
+ // Get available properties at the parent level
204
+ if (cleanPath.length > 1) {
205
+ const parentPath = cleanPath.slice(0, -1).join('.');
206
+ this.validPaths.forEach(validPath => {
207
+ if (validPath.startsWith(parentPath + '.')) {
208
+ const nextProp = validPath.substring(parentPath.length + 1).split('.')[0];
209
+ if (nextProp && !suggestions.availableAtParent.includes(nextProp)) {
210
+ suggestions.availableAtParent.push(nextProp);
211
+ }
212
+ }
213
+ });
214
+ }
215
+ else {
216
+ // At root level, show root properties
217
+ this.validPaths.forEach(validPath => {
218
+ const rootProp = validPath.split('.')[0];
219
+ if (!suggestions.availableAtParent.includes(rootProp)) {
220
+ suggestions.availableAtParent.push(rootProp);
221
+ }
222
+ });
223
+ }
224
+ // Generate "did you mean" suggestion
225
+ if (suggestions.correctPaths.length > 0) {
226
+ suggestions.didYouMean = suggestions.correctPaths[0];
227
+ }
228
+ return suggestions;
229
+ }
230
+ /**
231
+ * Gets the actual default value from the runtime styles object
232
+ * This ensures we have a single source of truth for default values
233
+ */
234
+ getDefaultValueForPath(pathArray) {
235
+ const cleanPath = pathArray[0] === 'styles' ? pathArray.slice(1) : pathArray;
236
+ // Navigate the actual default styles object to get the real value
237
+ // Cast through unknown because ComponentStyles doesn't have an index signature
238
+ let current = this.defaultStyles;
239
+ for (const prop of cleanPath) {
240
+ if (current && typeof current === 'object' && prop in current) {
241
+ current = current[prop];
242
+ }
243
+ else {
244
+ // Path doesn't exist in defaults, return empty string
245
+ return "undefined";
246
+ }
247
+ }
248
+ // If we found a value, return it properly quoted
249
+ if (current !== undefined && current !== null) {
250
+ // For string values, add quotes
251
+ if (typeof current === 'string') {
252
+ return `'${current}'`;
253
+ }
254
+ // For objects (intermediate paths), return undefined since we can't provide a meaningful default
255
+ if (typeof current === 'object') {
256
+ return "{}";
257
+ }
258
+ // For other primitive types, convert to string
259
+ return String(current);
260
+ }
261
+ return "undefined";
262
+ }
263
+ }
264
+ exports.StylesTypeAnalyzer = StylesTypeAnalyzer;
265
+ //# sourceMappingURL=styles-type-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles-type-analyzer.js","sourceRoot":"","sources":["../../src/lib/styles-type-analyzer.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.94.0",
3
+ "version": "2.96.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",
@@ -18,12 +18,11 @@
18
18
  "author": "MemberJunction.com",
19
19
  "license": "ISC",
20
20
  "devDependencies": {
21
- "ts-node-dev": "^2.0.0",
22
- "typescript": "^5.4.5"
21
+ "ts-node-dev": "^2.0.0"
23
22
  },
24
23
  "dependencies": {
25
- "@memberjunction/react-runtime": "^2.94.0",
26
- "@memberjunction/interactive-component-types": "^2.94.0",
24
+ "@memberjunction/react-runtime": "^2.96.0",
25
+ "@memberjunction/interactive-component-types": "^2.96.0",
27
26
  "@playwright/test": "^1.40.0",
28
27
  "playwright": "^1.40.0",
29
28
  "commander": "^11.1.0",
@@ -31,6 +30,7 @@
31
30
  "ora": "^5.4.1",
32
31
  "@babel/parser": "^7.23.0",
33
32
  "@babel/traverse": "^7.23.0",
34
- "@babel/types": "^7.23.0"
33
+ "@babel/types": "^7.23.0",
34
+ "typescript": "^5.4.5"
35
35
  }
36
36
  }