@tayo-dev/rtl 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +250 -0
  2. package/dist/analyzer/mocks/detector.d.ts +59 -0
  3. package/dist/analyzer/mocks/detector.d.ts.map +1 -0
  4. package/dist/analyzer/mocks/detector.js +264 -0
  5. package/dist/analyzer/mocks/detector.js.map +1 -0
  6. package/dist/analyzer/mocks/target-analyzer.d.ts +92 -0
  7. package/dist/analyzer/mocks/target-analyzer.d.ts.map +1 -0
  8. package/dist/analyzer/mocks/target-analyzer.js +305 -0
  9. package/dist/analyzer/mocks/target-analyzer.js.map +1 -0
  10. package/dist/analyzer/visual/element-analyzer.d.ts +44 -0
  11. package/dist/analyzer/visual/element-analyzer.d.ts.map +1 -0
  12. package/dist/analyzer/visual/element-analyzer.js +176 -0
  13. package/dist/analyzer/visual/element-analyzer.js.map +1 -0
  14. package/dist/analyzer/visual/inspector.d.ts +49 -0
  15. package/dist/analyzer/visual/inspector.d.ts.map +1 -0
  16. package/dist/analyzer/visual/inspector.js +109 -0
  17. package/dist/analyzer/visual/inspector.js.map +1 -0
  18. package/dist/cli/commands/generate.d.ts +13 -0
  19. package/dist/cli/commands/generate.d.ts.map +1 -0
  20. package/dist/cli/commands/generate.js +417 -0
  21. package/dist/cli/commands/generate.js.map +1 -0
  22. package/dist/core/generator.d.ts +32 -0
  23. package/dist/core/generator.d.ts.map +1 -0
  24. package/dist/core/generator.js +173 -0
  25. package/dist/core/generator.js.map +1 -0
  26. package/dist/core/js-parser.d.ts +48 -0
  27. package/dist/core/js-parser.d.ts.map +1 -0
  28. package/dist/core/js-parser.js +244 -0
  29. package/dist/core/js-parser.js.map +1 -0
  30. package/dist/core/mock-intelligence.d.ts +14 -0
  31. package/dist/core/mock-intelligence.d.ts.map +1 -0
  32. package/dist/core/mock-intelligence.js +140 -0
  33. package/dist/core/mock-intelligence.js.map +1 -0
  34. package/dist/core/orchestrator.d.ts +49 -0
  35. package/dist/core/orchestrator.d.ts.map +1 -0
  36. package/dist/core/orchestrator.js +315 -0
  37. package/dist/core/orchestrator.js.map +1 -0
  38. package/dist/core/parser.d.ts +9 -0
  39. package/dist/core/parser.d.ts.map +1 -0
  40. package/dist/core/parser.js +120 -0
  41. package/dist/core/parser.js.map +1 -0
  42. package/dist/core/recording-intelligence.d.ts +15 -0
  43. package/dist/core/recording-intelligence.d.ts.map +1 -0
  44. package/dist/core/recording-intelligence.js +178 -0
  45. package/dist/core/recording-intelligence.js.map +1 -0
  46. package/dist/core/resolver.d.ts +58 -0
  47. package/dist/core/resolver.d.ts.map +1 -0
  48. package/dist/core/resolver.js +291 -0
  49. package/dist/core/resolver.js.map +1 -0
  50. package/dist/core/scanner.d.ts +51 -0
  51. package/dist/core/scanner.d.ts.map +1 -0
  52. package/dist/core/scanner.js +310 -0
  53. package/dist/core/scanner.js.map +1 -0
  54. package/dist/core/scorer.d.ts +8 -0
  55. package/dist/core/scorer.d.ts.map +1 -0
  56. package/dist/core/scorer.js +76 -0
  57. package/dist/core/scorer.js.map +1 -0
  58. package/dist/core/validator.d.ts +134 -0
  59. package/dist/core/validator.d.ts.map +1 -0
  60. package/dist/core/validator.js +44 -0
  61. package/dist/core/validator.js.map +1 -0
  62. package/dist/core/verifier.d.ts +10 -0
  63. package/dist/core/verifier.d.ts.map +1 -0
  64. package/dist/core/verifier.js +30 -0
  65. package/dist/core/verifier.js.map +1 -0
  66. package/dist/core/writer.d.ts +15 -0
  67. package/dist/core/writer.d.ts.map +1 -0
  68. package/dist/core/writer.js +43 -0
  69. package/dist/core/writer.js.map +1 -0
  70. package/dist/generator/mocks/builder.d.ts +47 -0
  71. package/dist/generator/mocks/builder.d.ts.map +1 -0
  72. package/dist/generator/mocks/builder.js +335 -0
  73. package/dist/generator/mocks/builder.js.map +1 -0
  74. package/dist/generator/transforms/dialog-transform.d.ts +35 -0
  75. package/dist/generator/transforms/dialog-transform.d.ts.map +1 -0
  76. package/dist/generator/transforms/dialog-transform.js +293 -0
  77. package/dist/generator/transforms/dialog-transform.js.map +1 -0
  78. package/dist/index.d.ts +7 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +18 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/learner/analyzer.d.ts +13 -0
  83. package/dist/learner/analyzer.d.ts.map +1 -0
  84. package/dist/learner/analyzer.js +484 -0
  85. package/dist/learner/analyzer.js.map +1 -0
  86. package/dist/learner/index.d.ts +66 -0
  87. package/dist/learner/index.d.ts.map +1 -0
  88. package/dist/learner/index.js +247 -0
  89. package/dist/learner/index.js.map +1 -0
  90. package/dist/learner/storage.d.ts +68 -0
  91. package/dist/learner/storage.d.ts.map +1 -0
  92. package/dist/learner/storage.js +201 -0
  93. package/dist/learner/storage.js.map +1 -0
  94. package/dist/learner/types.d.ts +41 -0
  95. package/dist/learner/types.d.ts.map +1 -0
  96. package/dist/learner/types.js +31 -0
  97. package/dist/learner/types.js.map +1 -0
  98. package/dist/parser/recorder-parser.d.ts +40 -0
  99. package/dist/parser/recorder-parser.d.ts.map +1 -0
  100. package/dist/parser/recorder-parser.js +139 -0
  101. package/dist/parser/recorder-parser.js.map +1 -0
  102. package/dist/parser/steps/deduplicator.d.ts +19 -0
  103. package/dist/parser/steps/deduplicator.d.ts.map +1 -0
  104. package/dist/parser/steps/deduplicator.js +75 -0
  105. package/dist/parser/steps/deduplicator.js.map +1 -0
  106. package/dist/parser/steps/dialog-detector.d.ts +38 -0
  107. package/dist/parser/steps/dialog-detector.d.ts.map +1 -0
  108. package/dist/parser/steps/dialog-detector.js +290 -0
  109. package/dist/parser/steps/dialog-detector.js.map +1 -0
  110. package/dist/parser/steps/noise-filter.d.ts +21 -0
  111. package/dist/parser/steps/noise-filter.d.ts.map +1 -0
  112. package/dist/parser/steps/noise-filter.js +138 -0
  113. package/dist/parser/steps/noise-filter.js.map +1 -0
  114. package/dist/scorer/index.d.ts +43 -0
  115. package/dist/scorer/index.d.ts.map +1 -0
  116. package/dist/scorer/index.js +82 -0
  117. package/dist/scorer/index.js.map +1 -0
  118. package/dist/scorer/post-verify.d.ts +17 -0
  119. package/dist/scorer/post-verify.d.ts.map +1 -0
  120. package/dist/scorer/post-verify.js +163 -0
  121. package/dist/scorer/post-verify.js.map +1 -0
  122. package/dist/scorer/pre-audit.d.ts +32 -0
  123. package/dist/scorer/pre-audit.d.ts.map +1 -0
  124. package/dist/scorer/pre-audit.js +99 -0
  125. package/dist/scorer/pre-audit.js.map +1 -0
  126. package/dist/scorer/quality-gates.d.ts +17 -0
  127. package/dist/scorer/quality-gates.d.ts.map +1 -0
  128. package/dist/scorer/quality-gates.js +304 -0
  129. package/dist/scorer/quality-gates.js.map +1 -0
  130. package/dist/scorer/types.d.ts +27 -0
  131. package/dist/scorer/types.d.ts.map +1 -0
  132. package/dist/scorer/types.js +5 -0
  133. package/dist/scorer/types.js.map +1 -0
  134. package/dist/templates/test-template.d.ts +21 -0
  135. package/dist/templates/test-template.d.ts.map +1 -0
  136. package/dist/templates/test-template.js +92 -0
  137. package/dist/templates/test-template.js.map +1 -0
  138. package/dist/types/conventions.d.ts +49 -0
  139. package/dist/types/conventions.d.ts.map +1 -0
  140. package/dist/types/conventions.js +13 -0
  141. package/dist/types/conventions.js.map +1 -0
  142. package/dist/types/recording.d.ts +143 -0
  143. package/dist/types/recording.d.ts.map +1 -0
  144. package/dist/types/recording.js +5 -0
  145. package/dist/types/recording.js.map +1 -0
  146. package/dist/types/score.d.ts +18 -0
  147. package/dist/types/score.d.ts.map +1 -0
  148. package/dist/types/score.js +2 -0
  149. package/dist/types/score.js.map +1 -0
  150. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-intelligence.js","sourceRoot":"","sources":["../../src/core/mock-intelligence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Core orchestrator for Taro test generation pipeline
3
+ * Coordinates parsing, optional visual inspection, and test generation
4
+ */
5
+ import { Command } from 'commander';
6
+ import type { Browser, Page } from 'playwright';
7
+ import { type AccessibilityProperties } from '../analyzer/visual/element-analyzer.js';
8
+ import { type ApiCallInfo } from '../analyzer/mocks/detector.js';
9
+ import { type MockTarget } from '../analyzer/mocks/target-analyzer.js';
10
+ import { type MockDecision } from '../generator/mocks/builder.js';
11
+ /**
12
+ * Visual inspection context passed to generator
13
+ */
14
+ export interface VisualInspectionContext {
15
+ enabled: boolean;
16
+ browser?: Browser;
17
+ page?: Page;
18
+ url?: string;
19
+ elements?: Map<string, AccessibilityProperties>;
20
+ screenshots?: string[];
21
+ }
22
+ /**
23
+ * Mock inspection context passed to generator
24
+ */
25
+ export interface MockInspectionContext {
26
+ enabled: boolean;
27
+ apiCalls?: ApiCallInfo[];
28
+ mockTargets?: MockTarget[];
29
+ mockDecisions?: MockDecision[];
30
+ }
31
+ /**
32
+ * Main orchestrator options
33
+ */
34
+ export interface OrchestratorOptions {
35
+ recordingPath: string;
36
+ outputPath?: string;
37
+ visual?: boolean;
38
+ mocks?: boolean;
39
+ url?: string;
40
+ }
41
+ /**
42
+ * Run the test generation pipeline
43
+ */
44
+ export declare function run(options: OrchestratorOptions): Promise<void>;
45
+ /**
46
+ * Create CLI command
47
+ */
48
+ export declare function createCommand(): Command;
49
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAA4B,KAAK,uBAAuB,EAA6C,MAAM,wCAAwC,CAAC;AAE3J,OAAO,EAA8D,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC7H,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIhG;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+HrE;AAmLD;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CA2BvC"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Core orchestrator for Taro test generation pipeline
3
+ * Coordinates parsing, optional visual inspection, and test generation
4
+ */
5
+ import { Command } from 'commander';
6
+ import { resolve } from 'path';
7
+ import { mkdirSync, existsSync, readFileSync, writeFileSync } from 'fs';
8
+ import { parseRecording } from './parser.js';
9
+ import { launchBrowser, navigateToUrl, inspectElement, captureScreenshot, getAccessibilityTree } from '../analyzer/visual/inspector.js';
10
+ import { analyzeElementProperties, analyzePageElements, recommendQueryMethod } from '../analyzer/visual/element-analyzer.js';
11
+ import { detectApiCalls, groupApiCallsByDomain } from '../analyzer/mocks/detector.js';
12
+ import { analyzeMockTargets } from '../analyzer/mocks/target-analyzer.js';
13
+ import { buildMocks } from '../generator/mocks/builder.js';
14
+ import { preWriteAudit, postWriteVerification, scoreTest } from '../scorer/index.js';
15
+ import { learnConventions, getConventions } from '../learner/index.js';
16
+ /**
17
+ * Run the test generation pipeline
18
+ */
19
+ export async function run(options) {
20
+ const { recordingPath, outputPath = './tests', visual = false, mocks = true, url } = options;
21
+ console.log(`\n📼 Taro - Chrome Recorder to RTL Test Generator\n`);
22
+ console.log(`📂 Recording: ${recordingPath}`);
23
+ if (visual) {
24
+ console.log(`👁️ Visual inspection: ENABLED`);
25
+ }
26
+ if (mocks) {
27
+ console.log(`🎭 Mock detection: ENABLED`);
28
+ }
29
+ console.log('');
30
+ // Step 1: Parse the recording
31
+ console.log('1/4 Parsing recording...');
32
+ let recording;
33
+ try {
34
+ recording = await parseRecording(recordingPath);
35
+ console.log(` ✓ Parsed ${recording.steps.length} steps`);
36
+ }
37
+ catch (error) {
38
+ console.error(` ✗ Failed to parse recording: ${error instanceof Error ? error.message : 'Unknown error'}`);
39
+ process.exit(1);
40
+ }
41
+ // Step 2: Detect API calls for mocking (optional)
42
+ let mockContext = { enabled: false };
43
+ if (mocks) {
44
+ console.log('2/4 Detecting API calls for mocking...');
45
+ mockContext = await runMockDetection(recording, outputPath);
46
+ console.log(` ✓ Detected ${mockContext.apiCalls?.length || 0} API calls`);
47
+ }
48
+ else {
49
+ console.log('2/4 Mock detection: DISABLED (use --mocks to enable)');
50
+ }
51
+ // Visual inspection (optional)
52
+ let visualContext = { enabled: false };
53
+ if (visual) {
54
+ console.log('3/4 Running visual inspection...');
55
+ visualContext = await runVisualInspection(recording, url);
56
+ console.log(` ✓ Inspected ${visualContext.elements?.size || 0} elements`);
57
+ }
58
+ else {
59
+ console.log('3/4 Visual inspection: SKIPPED (use --visual to enable)');
60
+ }
61
+ // Step 4: Generate tests with scoring and verification
62
+ console.log('4/4 Generating tests with quality gates...');
63
+ // 4a: Get existing conventions (if any)
64
+ const conventions = getConventions(process.cwd());
65
+ if (conventions) {
66
+ console.log(' ✓ Loaded existing conventions from storage');
67
+ }
68
+ else {
69
+ console.log(' ℹ No existing conventions found (will learn from generated tests)');
70
+ }
71
+ // 4b: Generate test code (placeholder for now)
72
+ const testCode = generatePlaceholderTest(recording);
73
+ // 4c: Score the test to give user visibility
74
+ console.log(' 📊 Scoring test quality...');
75
+ const scoring = scoreTest(testCode);
76
+ console.log(` Quality Score: ${scoring.score.overall}/100`);
77
+ console.log(` Structure: ${scoring.score.criteria.structure}/100`);
78
+ console.log(` Queries: ${scoring.score.criteria.queries}/100`);
79
+ console.log(` Matchers: ${scoring.score.criteria.matchers}/100`);
80
+ console.log(` Robustness: ${scoring.score.criteria.noFragility}/100`);
81
+ if (scoring.score.issues.length > 0) {
82
+ console.log(` Issues found: ${scoring.score.issues.length}`);
83
+ for (const issue of scoring.score.issues.slice(0, 3)) {
84
+ console.log(` [${issue.severity}] ${issue.message}`);
85
+ }
86
+ }
87
+ // 4d: Pre-write audit - validate before writing
88
+ console.log(' 🔍 Running pre-write audit...');
89
+ const audit = preWriteAudit(testCode);
90
+ if (!audit.valid) {
91
+ console.log(' ✗ Pre-write audit failed:');
92
+ for (const issue of audit.blocking) {
93
+ console.log(` - ${issue}`);
94
+ }
95
+ console.log(' ⚠ File not written due to blocking issues');
96
+ }
97
+ else {
98
+ console.log(' ✓ Pre-write audit passed');
99
+ // 4d: Write the test file
100
+ const outputFile = resolve(outputPath, 'generated.test.ts');
101
+ // Ensure output directory exists
102
+ if (!existsSync(outputPath)) {
103
+ mkdirSync(outputPath, { recursive: true });
104
+ }
105
+ // Write the test file to disk
106
+ writeFileSync(outputFile, testCode);
107
+ console.log(` ✓ Written: ${outputFile}`);
108
+ // 4e: Post-write verification
109
+ console.log(' 🔍 Running post-write verification...');
110
+ const verification = postWriteVerification(outputFile);
111
+ if (verification.valid) {
112
+ console.log(' ✓ Post-write verification passed');
113
+ }
114
+ else {
115
+ console.log(' ⚠ Post-write verification found issues:');
116
+ for (const error of verification.errors) {
117
+ console.log(` - ${error}`);
118
+ }
119
+ }
120
+ // 4f: Learn from generated test for future runs
121
+ console.log(' 📚 Learning conventions from generated test...');
122
+ try {
123
+ const conventions = learnConventions(process.cwd());
124
+ console.log(` ✓ Convention learning complete`);
125
+ }
126
+ catch (error) {
127
+ console.log(` ⚠ Convention learning skipped: ${error instanceof Error ? error.message : 'Unknown error'}`);
128
+ }
129
+ }
130
+ // Cleanup
131
+ if (visualContext.browser) {
132
+ await visualContext.browser.close();
133
+ }
134
+ console.log('\n✅ Complete!\n');
135
+ }
136
+ /**
137
+ * Run visual inspection on the application
138
+ */
139
+ async function runVisualInspection(recording, urlFromCli) {
140
+ const visualContext = { enabled: true };
141
+ // Determine URL to inspect
142
+ const url = urlFromCli || recording.url;
143
+ if (!url) {
144
+ console.log(' ⚠ No URL provided. Use --url flag or ensure recording has a URL.');
145
+ return visualContext;
146
+ }
147
+ // Create screenshots directory
148
+ const screenshotsDir = resolve('.taro/visuals');
149
+ if (!existsSync(screenshotsDir)) {
150
+ mkdirSync(screenshotsDir, { recursive: true });
151
+ }
152
+ // Launch browser
153
+ let browser;
154
+ let page;
155
+ try {
156
+ console.log(` 🌐 Launching browser to: ${url}`);
157
+ browser = await launchBrowser();
158
+ const context = await browser.newContext();
159
+ page = await context.newPage();
160
+ // Navigate to URL
161
+ const success = await navigateToUrl(page, url);
162
+ if (!success) {
163
+ console.log(` ⚠ Failed to navigate to URL`);
164
+ return visualContext;
165
+ }
166
+ // Store in context
167
+ visualContext.browser = browser;
168
+ visualContext.page = page;
169
+ visualContext.url = url;
170
+ visualContext.screenshots = [];
171
+ // Capture initial screenshot
172
+ const initialScreenshot = resolve(screenshotsDir, 'initial.png');
173
+ await captureScreenshot(page, initialScreenshot);
174
+ visualContext.screenshots.push(initialScreenshot);
175
+ console.log(` 📸 Saved screenshot: ${initialScreenshot}`);
176
+ // Get accessibility tree
177
+ const a11yTree = await getAccessibilityTree(page);
178
+ console.log(` ♿ Accessibility tree captured (${a11yTree.length} chars)`);
179
+ // Analyze page elements
180
+ console.log(` 🔍 Analyzing interactive elements...`);
181
+ const elements = await analyzePageElements(page);
182
+ // Build element map by selector
183
+ const elementMap = new Map();
184
+ for (const { selector, properties } of elements) {
185
+ elementMap.set(selector, properties);
186
+ }
187
+ visualContext.elements = elementMap;
188
+ console.log(` ✓ Found ${elements.length} interactive elements`);
189
+ // For each step in the recording, inspect the target element
190
+ for (const step of recording.steps.slice(0, 5)) { // Limit to first 5 for performance
191
+ if (step.selector) {
192
+ const elementInfo = await inspectElement(page, step.selector);
193
+ if (elementInfo) {
194
+ const a11yProps = await analyzeElementProperties(page, step.selector);
195
+ if (a11yProps) {
196
+ const queryHint = recommendQueryMethod(a11yProps);
197
+ console.log(` 💡 Step ${step.id}: ${step.action} → ${queryHint}`);
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ catch (error) {
204
+ console.error(` ⚠ Visual inspection error: ${error instanceof Error ? error.message : 'Unknown error'}`);
205
+ }
206
+ return visualContext;
207
+ }
208
+ /**
209
+ * Run mock detection on the recording and codebase
210
+ */
211
+ async function runMockDetection(recording, outputPath) {
212
+ const mockContext = { enabled: true };
213
+ try {
214
+ // Step 1: Detect API calls from recording
215
+ const apiCalls = detectApiCalls(recording);
216
+ mockContext.apiCalls = apiCalls;
217
+ if (apiCalls.length === 0) {
218
+ console.log(' ℹ No API calls detected in recording');
219
+ return mockContext;
220
+ }
221
+ // Log detected API calls grouped by domain
222
+ const grouped = groupApiCallsByDomain(apiCalls);
223
+ console.log(` 📡 Found API calls to ${grouped.size} domain(s):`);
224
+ for (const [domain, calls] of grouped) {
225
+ console.log(` - ${domain}: ${calls.length} call(s)`);
226
+ }
227
+ // Step 2: Try to load package.json for mock library detection
228
+ let packageJson = {};
229
+ try {
230
+ const packagePath = resolve(process.cwd(), 'package.json');
231
+ if (existsSync(packagePath)) {
232
+ packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
233
+ }
234
+ }
235
+ catch {
236
+ // Ignore - package.json not required
237
+ }
238
+ // Step 3: Analyze mock targets
239
+ const mockTargets = analyzeMockTargets(apiCalls, {
240
+ packageJson,
241
+ config: {
242
+ sharedMocksDir: resolve(outputPath, '__mocks__'),
243
+ },
244
+ });
245
+ mockContext.mockTargets = mockTargets;
246
+ console.log(` 🎯 Mock targets identified: ${mockTargets.length}`);
247
+ for (const target of mockTargets) {
248
+ console.log(` - ${target.method} ${target.url}`);
249
+ console.log(` → ${target.mockLibrary} (${target.extractionRecommendation})`);
250
+ }
251
+ // Step 4: Generate mock code
252
+ const apiCallMap = new Map(apiCalls.map(ac => [ac.id, ac]));
253
+ const mockDecisions = buildMocks(mockTargets, apiCallMap);
254
+ mockContext.mockDecisions = mockDecisions;
255
+ // Log summary
256
+ const inline = mockDecisions.filter(d => d.isInline).length;
257
+ const extracted = mockDecisions.filter(d => !d.isInline).length;
258
+ console.log(` ✓ Generated ${inline} inline, ${extracted} extracted mocks`);
259
+ }
260
+ catch (error) {
261
+ console.error(` ⚠ Mock detection error: ${error instanceof Error ? error.message : 'Unknown error'}`);
262
+ }
263
+ return mockContext;
264
+ }
265
+ /**
266
+ * Generate a placeholder test (for integration testing)
267
+ */
268
+ function generatePlaceholderTest(recording) {
269
+ // Placeholder test generation - actual generation would use mockContext and visualContext
270
+ const testName = recording.title || 'Generated Test';
271
+ return `import { render, screen, fireEvent } from '@testing-library/react';
272
+ import userEvent from '@testing-library/user-event';
273
+
274
+ describe('${testName}', () => {
275
+ it('should render component', () => {
276
+ // TODO: Generate actual test from recording
277
+ expect(true).toBe(true);
278
+ });
279
+ });
280
+ `;
281
+ }
282
+ /**
283
+ * Create CLI command
284
+ */
285
+ export function createCommand() {
286
+ const program = new Command();
287
+ program
288
+ .name('taro')
289
+ .description('Chrome Recorder to React Testing Library test generator')
290
+ .version('0.1.0');
291
+ program
292
+ .command('generate')
293
+ .description('Generate tests from Chrome Recorder recording')
294
+ .argument('<recording>', 'Path to Chrome Recorder JSON export')
295
+ .option('-o, --output <path>', 'Output directory for tests', './tests')
296
+ .option('--visual', 'Enable visual UI inspection via Playwright (requires app running)')
297
+ .option('--no-mocks', 'Disable API call detection and mock generation')
298
+ .option('--url <url>', 'URL of the application to inspect (required for --visual)')
299
+ .action(async (recordingPath, options) => {
300
+ await run({
301
+ recordingPath,
302
+ outputPath: options.output,
303
+ visual: options.visual,
304
+ mocks: options.mocks,
305
+ url: options.url,
306
+ });
307
+ });
308
+ return program;
309
+ }
310
+ // Main entry point
311
+ if (import.meta.url === `file://${process.argv[1]}`) {
312
+ const program = createCommand();
313
+ program.parse();
314
+ }
315
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Chrome Recorder JSON parsing
3
+ * Parses Chrome Recorder export format and normalizes all step types
4
+ * into a consistent internal representation.
5
+ */
6
+ import type { ChromeStep, NormalizedRecording, NormalizedStep } from '../types/recording.js';
7
+ export declare function normalizeStep(chromeStep: ChromeStep): NormalizedStep;
8
+ export declare function parseRecording(filePath: string): Promise<NormalizedRecording>;
9
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAGV,UAAU,EAEV,mBAAmB,EACnB,cAAc,EACf,MAAM,uBAAuB,CAAA;AAiC9B,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CA+DpE;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgCnF"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Chrome Recorder JSON parsing
3
+ * Parses Chrome Recorder export format and normalizes all step types
4
+ * into a consistent internal representation.
5
+ */
6
+ import { readFile } from 'node:fs/promises';
7
+ function getFirstSelector(selectors) {
8
+ if (!selectors || selectors.length === 0)
9
+ return undefined;
10
+ const first = selectors[0];
11
+ if (!first || first.length === 0)
12
+ return undefined;
13
+ return first[0];
14
+ }
15
+ function withMetadata(chromeStep, step) {
16
+ const metadata = {
17
+ assertedEvents: chromeStep.assertedEvents,
18
+ key: chromeStep.key,
19
+ offsetX: chromeStep.offsetX,
20
+ offsetY: chromeStep.offsetY,
21
+ selectors: chromeStep.selectors,
22
+ x: chromeStep.x,
23
+ y: chromeStep.y,
24
+ };
25
+ return {
26
+ ...step,
27
+ ...metadata,
28
+ source: 'json',
29
+ };
30
+ }
31
+ export function normalizeStep(chromeStep) {
32
+ const target = getFirstSelector(chromeStep.selectors) ?? chromeStep.target;
33
+ const actionMap = {
34
+ click: 'click',
35
+ doubleClick: 'click',
36
+ fill: 'fill',
37
+ change: 'fill',
38
+ select: 'select',
39
+ scroll: 'scroll',
40
+ assertElementPresent: 'assert',
41
+ assertElementVisible: 'assert',
42
+ navigate: 'navigate',
43
+ keyDown: 'keyDown',
44
+ keyUp: 'keyDown',
45
+ };
46
+ const action = actionMap[chromeStep.type];
47
+ if (action !== undefined) {
48
+ switch (action) {
49
+ case 'navigate':
50
+ return withMetadata(chromeStep, {
51
+ action,
52
+ target: chromeStep.url,
53
+ originalType: chromeStep.type,
54
+ });
55
+ case 'keyDown':
56
+ return withMetadata(chromeStep, {
57
+ action,
58
+ value: chromeStep.key,
59
+ originalType: chromeStep.type,
60
+ });
61
+ case 'fill':
62
+ case 'select':
63
+ case 'assert':
64
+ return withMetadata(chromeStep, {
65
+ action,
66
+ target,
67
+ value: chromeStep.value,
68
+ originalType: chromeStep.type,
69
+ });
70
+ default:
71
+ return withMetadata(chromeStep, {
72
+ action,
73
+ target,
74
+ originalType: chromeStep.type,
75
+ });
76
+ }
77
+ }
78
+ const knownNoOp = new Set(['waitForSelector', 'setViewport', 'waitForExpression']);
79
+ if (knownNoOp.has(chromeStep.type)) {
80
+ console.warn(`[taro] Step type "${chromeStep.type}" is not mapped to an RTL action — skipped`);
81
+ }
82
+ else {
83
+ console.warn(`[taro] Unknown step type "${chromeStep.type}" — skipped`);
84
+ }
85
+ return withMetadata(chromeStep, {
86
+ action: 'unknown',
87
+ target,
88
+ originalType: chromeStep.type,
89
+ });
90
+ }
91
+ export async function parseRecording(filePath) {
92
+ let raw;
93
+ try {
94
+ raw = await readFile(filePath, 'utf-8');
95
+ }
96
+ catch (err) {
97
+ throw new Error(`Failed to read recording file: ${filePath}\n${String(err)}`);
98
+ }
99
+ let data;
100
+ try {
101
+ data = JSON.parse(raw);
102
+ }
103
+ catch {
104
+ throw new Error(`Invalid JSON in recording file: ${filePath}`);
105
+ }
106
+ if (typeof data !== 'object' || data === null || !('steps' in data)) {
107
+ throw new Error('Invalid Chrome Recorder export: missing required "steps" field');
108
+ }
109
+ const recording = data;
110
+ if (!Array.isArray(recording.steps)) {
111
+ throw new Error('Invalid Chrome Recorder export: "steps" must be an array');
112
+ }
113
+ const steps = recording.steps.map((step) => normalizeStep(step));
114
+ return {
115
+ title: recording.title ?? 'Untitled Recording',
116
+ steps,
117
+ rawStepCount: recording.steps.length,
118
+ };
119
+ }
120
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AnalyzedRecording, IntentGroup, NormalizedRecording, NormalizedStep, RecordingDiagnostics } from '../types/recording.js';
2
+ export interface VisualCaptureCandidate {
3
+ groupName: string;
4
+ reason: 'dialog-state' | 'ambiguous-ui';
5
+ selector?: string;
6
+ }
7
+ export interface NoiseFilterResult {
8
+ steps: NormalizedStep[];
9
+ diagnostics: Pick<RecordingDiagnostics, 'removedCursorWander' | 'removedDoubleClickNoise' | 'removedRedundantClicks'>;
10
+ }
11
+ export declare function inferIntentGroups(steps: NormalizedStep[]): IntentGroup[];
12
+ export declare function findVisualCaptureCandidates(analyzedRecording: AnalyzedRecording): VisualCaptureCandidate[];
13
+ export declare function filterNoiseSteps(steps: NormalizedStep[]): NoiseFilterResult;
14
+ export declare function analyzeRecording(recording: NormalizedRecording): AnalyzedRecording;
15
+ //# sourceMappingURL=recording-intelligence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording-intelligence.d.ts","sourceRoot":"","sources":["../../src/core/recording-intelligence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,cAAc,GAAG,cAAc,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,WAAW,EAAE,IAAI,CACf,oBAAoB,EACpB,qBAAqB,GAAG,yBAAyB,GAAG,wBAAwB,CAC7E,CAAA;CACF;AAwFD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,CAwCxE;AAED,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE,iBAAiB,GACnC,sBAAsB,EAAE,CA2B1B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,iBAAiB,CA2D3E;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,GAAG,iBAAiB,CAelF"}