@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.
- package/README.md +250 -0
- package/dist/analyzer/mocks/detector.d.ts +59 -0
- package/dist/analyzer/mocks/detector.d.ts.map +1 -0
- package/dist/analyzer/mocks/detector.js +264 -0
- package/dist/analyzer/mocks/detector.js.map +1 -0
- package/dist/analyzer/mocks/target-analyzer.d.ts +92 -0
- package/dist/analyzer/mocks/target-analyzer.d.ts.map +1 -0
- package/dist/analyzer/mocks/target-analyzer.js +305 -0
- package/dist/analyzer/mocks/target-analyzer.js.map +1 -0
- package/dist/analyzer/visual/element-analyzer.d.ts +44 -0
- package/dist/analyzer/visual/element-analyzer.d.ts.map +1 -0
- package/dist/analyzer/visual/element-analyzer.js +176 -0
- package/dist/analyzer/visual/element-analyzer.js.map +1 -0
- package/dist/analyzer/visual/inspector.d.ts +49 -0
- package/dist/analyzer/visual/inspector.d.ts.map +1 -0
- package/dist/analyzer/visual/inspector.js +109 -0
- package/dist/analyzer/visual/inspector.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +13 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +417 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/core/generator.d.ts +32 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +173 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/js-parser.d.ts +48 -0
- package/dist/core/js-parser.d.ts.map +1 -0
- package/dist/core/js-parser.js +244 -0
- package/dist/core/js-parser.js.map +1 -0
- package/dist/core/mock-intelligence.d.ts +14 -0
- package/dist/core/mock-intelligence.d.ts.map +1 -0
- package/dist/core/mock-intelligence.js +140 -0
- package/dist/core/mock-intelligence.js.map +1 -0
- package/dist/core/orchestrator.d.ts +49 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +315 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/parser.d.ts +9 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +120 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/recording-intelligence.d.ts +15 -0
- package/dist/core/recording-intelligence.d.ts.map +1 -0
- package/dist/core/recording-intelligence.js +178 -0
- package/dist/core/recording-intelligence.js.map +1 -0
- package/dist/core/resolver.d.ts +58 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +291 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/core/scanner.d.ts +51 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +310 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/core/scorer.d.ts +8 -0
- package/dist/core/scorer.d.ts.map +1 -0
- package/dist/core/scorer.js +76 -0
- package/dist/core/scorer.js.map +1 -0
- package/dist/core/validator.d.ts +134 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +44 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/verifier.d.ts +10 -0
- package/dist/core/verifier.d.ts.map +1 -0
- package/dist/core/verifier.js +30 -0
- package/dist/core/verifier.js.map +1 -0
- package/dist/core/writer.d.ts +15 -0
- package/dist/core/writer.d.ts.map +1 -0
- package/dist/core/writer.js +43 -0
- package/dist/core/writer.js.map +1 -0
- package/dist/generator/mocks/builder.d.ts +47 -0
- package/dist/generator/mocks/builder.d.ts.map +1 -0
- package/dist/generator/mocks/builder.js +335 -0
- package/dist/generator/mocks/builder.js.map +1 -0
- package/dist/generator/transforms/dialog-transform.d.ts +35 -0
- package/dist/generator/transforms/dialog-transform.d.ts.map +1 -0
- package/dist/generator/transforms/dialog-transform.js +293 -0
- package/dist/generator/transforms/dialog-transform.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/learner/analyzer.d.ts +13 -0
- package/dist/learner/analyzer.d.ts.map +1 -0
- package/dist/learner/analyzer.js +484 -0
- package/dist/learner/analyzer.js.map +1 -0
- package/dist/learner/index.d.ts +66 -0
- package/dist/learner/index.d.ts.map +1 -0
- package/dist/learner/index.js +247 -0
- package/dist/learner/index.js.map +1 -0
- package/dist/learner/storage.d.ts +68 -0
- package/dist/learner/storage.d.ts.map +1 -0
- package/dist/learner/storage.js +201 -0
- package/dist/learner/storage.js.map +1 -0
- package/dist/learner/types.d.ts +41 -0
- package/dist/learner/types.d.ts.map +1 -0
- package/dist/learner/types.js +31 -0
- package/dist/learner/types.js.map +1 -0
- package/dist/parser/recorder-parser.d.ts +40 -0
- package/dist/parser/recorder-parser.d.ts.map +1 -0
- package/dist/parser/recorder-parser.js +139 -0
- package/dist/parser/recorder-parser.js.map +1 -0
- package/dist/parser/steps/deduplicator.d.ts +19 -0
- package/dist/parser/steps/deduplicator.d.ts.map +1 -0
- package/dist/parser/steps/deduplicator.js +75 -0
- package/dist/parser/steps/deduplicator.js.map +1 -0
- package/dist/parser/steps/dialog-detector.d.ts +38 -0
- package/dist/parser/steps/dialog-detector.d.ts.map +1 -0
- package/dist/parser/steps/dialog-detector.js +290 -0
- package/dist/parser/steps/dialog-detector.js.map +1 -0
- package/dist/parser/steps/noise-filter.d.ts +21 -0
- package/dist/parser/steps/noise-filter.d.ts.map +1 -0
- package/dist/parser/steps/noise-filter.js +138 -0
- package/dist/parser/steps/noise-filter.js.map +1 -0
- package/dist/scorer/index.d.ts +43 -0
- package/dist/scorer/index.d.ts.map +1 -0
- package/dist/scorer/index.js +82 -0
- package/dist/scorer/index.js.map +1 -0
- package/dist/scorer/post-verify.d.ts +17 -0
- package/dist/scorer/post-verify.d.ts.map +1 -0
- package/dist/scorer/post-verify.js +163 -0
- package/dist/scorer/post-verify.js.map +1 -0
- package/dist/scorer/pre-audit.d.ts +32 -0
- package/dist/scorer/pre-audit.d.ts.map +1 -0
- package/dist/scorer/pre-audit.js +99 -0
- package/dist/scorer/pre-audit.js.map +1 -0
- package/dist/scorer/quality-gates.d.ts +17 -0
- package/dist/scorer/quality-gates.d.ts.map +1 -0
- package/dist/scorer/quality-gates.js +304 -0
- package/dist/scorer/quality-gates.js.map +1 -0
- package/dist/scorer/types.d.ts +27 -0
- package/dist/scorer/types.d.ts.map +1 -0
- package/dist/scorer/types.js +5 -0
- package/dist/scorer/types.js.map +1 -0
- package/dist/templates/test-template.d.ts +21 -0
- package/dist/templates/test-template.d.ts.map +1 -0
- package/dist/templates/test-template.js +92 -0
- package/dist/templates/test-template.js.map +1 -0
- package/dist/types/conventions.d.ts +49 -0
- package/dist/types/conventions.d.ts.map +1 -0
- package/dist/types/conventions.js +13 -0
- package/dist/types/conventions.js.map +1 -0
- package/dist/types/recording.d.ts +143 -0
- package/dist/types/recording.d.ts.map +1 -0
- package/dist/types/recording.js +5 -0
- package/dist/types/recording.js.map +1 -0
- package/dist/types/score.d.ts +18 -0
- package/dist/types/score.d.ts.map +1 -0
- package/dist/types/score.js +2 -0
- package/dist/types/score.js.map +1 -0
- 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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAU3C,SAAS,gBAAgB,CAAC,SAAsB;IAC9C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAClD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,YAAY,CACnB,UAAsB,EACtB,IAAoC;IAEpC,MAAM,QAAQ,GAGV;QACF,cAAc,EAAE,UAAU,CAAC,cAA6C;QACxE,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,CAAC,EAAE,UAAU,CAAC,CAAC;QACf,CAAC,EAAE,UAAU,CAAC,CAAC;KAChB,CAAA;IAED,OAAO;QACL,GAAG,IAAI;QACP,GAAG,QAAQ;QACX,MAAM,EAAE,MAAM;KACf,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAsB;IAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,CAAA;IAE1E,MAAM,SAAS,GAAqC;QAClD,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,oBAAoB,EAAE,QAAQ;QAC9B,oBAAoB,EAAE,QAAQ;QAC9B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,SAAS;KACjB,CAAA;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAEzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU;gBACb,OAAO,YAAY,CAAC,UAAU,EAAE;oBAC9B,MAAM;oBACN,MAAM,EAAE,UAAU,CAAC,GAAG;oBACtB,YAAY,EAAE,UAAU,CAAC,IAAI;iBAC9B,CAAC,CAAA;YACJ,KAAK,SAAS;gBACZ,OAAO,YAAY,CAAC,UAAU,EAAE;oBAC9B,MAAM;oBACN,KAAK,EAAE,UAAU,CAAC,GAAG;oBACrB,YAAY,EAAE,UAAU,CAAC,IAAI;iBAC9B,CAAC,CAAA;YACJ,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,YAAY,CAAC,UAAU,EAAE;oBAC9B,MAAM;oBACN,MAAM;oBACN,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,YAAY,EAAE,UAAU,CAAC,IAAI;iBAC9B,CAAC,CAAA;YACJ;gBACE,OAAO,YAAY,CAAC,UAAU,EAAE;oBAC9B,MAAM;oBACN,MAAM;oBACN,YAAY,EAAE,UAAU,CAAC,IAAI;iBAC9B,CAAC,CAAA;QACN,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAA;IAClF,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,qBAAqB,UAAU,CAAC,IAAI,4CAA4C,CAAC,CAAA;IAChG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,IAAI,aAAa,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,YAAY,CAAC,UAAU,EAAE;QAC9B,MAAM,EAAE,SAAS;QACjB,MAAM;QACN,YAAY,EAAE,UAAU,CAAC,IAAI;KAC9B,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,SAAS,GAAG,IAA4B,CAAA;IAE9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAgB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IAE5E,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,oBAAoB;QAC9C,KAAK;QACL,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;KACrC,CAAA;AACH,CAAC"}
|
|
@@ -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"}
|