@tayo-dev/rtl 1.3.0-alpha.0 → 1.3.1

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 (38) hide show
  1. package/README.md +37 -4
  2. package/assets/codex/@tayo-dev/rtl-generate/SKILL.md +5 -4
  3. package/dist/cli/commands/generate.d.ts.map +1 -1
  4. package/dist/cli/commands/generate.js +283 -42
  5. package/dist/cli/commands/generate.js.map +1 -1
  6. package/dist/core/boundary-intelligence.d.ts +10 -0
  7. package/dist/core/boundary-intelligence.d.ts.map +1 -0
  8. package/dist/core/boundary-intelligence.js +254 -0
  9. package/dist/core/boundary-intelligence.js.map +1 -0
  10. package/dist/core/generator.d.ts +5 -1
  11. package/dist/core/generator.d.ts.map +1 -1
  12. package/dist/core/generator.js +158 -13
  13. package/dist/core/generator.js.map +1 -1
  14. package/dist/core/resolver.d.ts +27 -2
  15. package/dist/core/resolver.d.ts.map +1 -1
  16. package/dist/core/resolver.js +128 -19
  17. package/dist/core/resolver.js.map +1 -1
  18. package/dist/core/scanner.d.ts +8 -0
  19. package/dist/core/scanner.d.ts.map +1 -1
  20. package/dist/core/scanner.js +38 -0
  21. package/dist/core/scanner.js.map +1 -1
  22. package/dist/core/scorer.d.ts.map +1 -1
  23. package/dist/core/scorer.js +103 -8
  24. package/dist/core/scorer.js.map +1 -1
  25. package/dist/core/suite-planner.d.ts +30 -0
  26. package/dist/core/suite-planner.d.ts.map +1 -0
  27. package/dist/core/suite-planner.js +182 -0
  28. package/dist/core/suite-planner.js.map +1 -0
  29. package/dist/templates/test-template.d.ts +22 -2
  30. package/dist/templates/test-template.d.ts.map +1 -1
  31. package/dist/templates/test-template.js +37 -6
  32. package/dist/templates/test-template.js.map +1 -1
  33. package/dist/types/recording.d.ts +44 -0
  34. package/dist/types/recording.d.ts.map +1 -1
  35. package/dist/types/recording.js.map +1 -1
  36. package/dist/types/score.d.ts +23 -0
  37. package/dist/types/score.d.ts.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,182 @@
1
+ function buildFallbackGroups(analyzedRecording, fallbackTitle) {
2
+ if (analyzedRecording.intentGroups.length > 0) {
3
+ return analyzedRecording.intentGroups;
4
+ }
5
+ return [
6
+ {
7
+ name: fallbackTitle || 'recorded flow',
8
+ steps: analyzedRecording.steps,
9
+ },
10
+ ];
11
+ }
12
+ function sanitizeIdentifierPart(value) {
13
+ return value
14
+ .replace(/[^a-zA-Z0-9]+/g, ' ')
15
+ .trim()
16
+ .split(/\s+/)
17
+ .map((part, index) => {
18
+ const normalized = part.toLowerCase();
19
+ return index === 0
20
+ ? normalized
21
+ : normalized.charAt(0).toUpperCase() + normalized.slice(1);
22
+ })
23
+ .join('');
24
+ }
25
+ function toHelperName(groupName, index) {
26
+ const normalized = sanitizeIdentifierPart(groupName);
27
+ return normalized ? `plan${normalized.charAt(0).toUpperCase()}${normalized.slice(1)}` : `planScenario${index + 1}`;
28
+ }
29
+ function inferScenarioGoal(groupName) {
30
+ if (/validation|error|required|missing/i.test(groupName)) {
31
+ return 'validation';
32
+ }
33
+ if (/review|summary|confirm/i.test(groupName)) {
34
+ return 'review';
35
+ }
36
+ if (/save|submit|pending|success|failure|mutation/i.test(groupName)) {
37
+ return 'mutation-state';
38
+ }
39
+ return 'flow';
40
+ }
41
+ function hasMutationSignals(mockAnalysis) {
42
+ if (!mockAnalysis) {
43
+ return false;
44
+ }
45
+ return (mockAnalysis.mutationLifecycles.length > 0 ||
46
+ mockAnalysis.repeatedTargets.length > 0);
47
+ }
48
+ function findRepeatedMockTarget(mockAnalysis) {
49
+ return mockAnalysis?.recommendations[0]?.target ?? null;
50
+ }
51
+ function isWizardFlow(recording) {
52
+ const actionableSteps = recording.steps.filter((step) => ['click', 'fill', 'select'].includes(step.action));
53
+ const milestoneClicks = recording.steps.filter((step) => {
54
+ if (step.action !== 'click' || !step.target) {
55
+ return false;
56
+ }
57
+ return /^(continue|save|submit)$/i.test(step.target) || /(review|dialog)/i.test(step.target);
58
+ });
59
+ const hasFormInput = recording.steps.some((step) => step.action === 'fill' || step.action === 'select');
60
+ const hasReviewLanguage = recording.steps.some((step) => /(review|invoice|details)/i.test(step.target ?? ''));
61
+ return actionableSteps.length >= 6 && hasFormInput && (milestoneClicks.length >= 2 || hasReviewLanguage);
62
+ }
63
+ function assessStateSafety(params) {
64
+ const { recording, analyzedRecording, mockAnalysis } = params;
65
+ const wizardFlow = isWizardFlow(recording);
66
+ if (wizardFlow && hasMutationSignals(mockAnalysis)) {
67
+ return {
68
+ status: 'single-flow-required',
69
+ reason: 'This flow spans multiple wizard steps and repo evidence shows mutation-driven state, so downstream tests should share one coordinated flow unless setup recreation is proven.',
70
+ };
71
+ }
72
+ if (wizardFlow) {
73
+ return {
74
+ status: 'unknown',
75
+ reason: 'This flow looks stateful, but repo evidence is not strong enough yet to prove whether multi-test recreation is safe.',
76
+ };
77
+ }
78
+ if (analyzedRecording.intentGroups.length > 1) {
79
+ return {
80
+ status: 'safe-multi-it',
81
+ reason: 'Intent groups are already separated into user-visible milestones and no mutation-heavy wizard state was detected.',
82
+ };
83
+ }
84
+ return {
85
+ status: 'safe-multi-it',
86
+ reason: 'No mutation-heavy wizard state was detected, so scenario splitting is safe when it improves readability.',
87
+ };
88
+ }
89
+ export function assessRenderBoundary(params) {
90
+ const { recording, mockAnalysis } = params;
91
+ const signals = [];
92
+ const wizardFlow = isWizardFlow(recording);
93
+ const mutationSignals = hasMutationSignals(mockAnalysis);
94
+ if (wizardFlow) {
95
+ signals.push('multi-step wizard flow');
96
+ }
97
+ if (mockAnalysis?.mutationLifecycles.length) {
98
+ signals.push('existing tests model mutation lifecycle states');
99
+ }
100
+ if (mockAnalysis?.repeatedTargets.length) {
101
+ signals.push('repo already shares repeated mock targets');
102
+ }
103
+ if (wizardFlow && mutationSignals) {
104
+ return {
105
+ kind: 'module',
106
+ confidence: 'medium',
107
+ resolvedTarget: null,
108
+ reason: 'This flow spans multiple user-visible steps and repo evidence shows data/mutation setup around it, so Taro should prefer a container/module boundary rather than a leaf component test.',
109
+ signals,
110
+ };
111
+ }
112
+ if (wizardFlow) {
113
+ return {
114
+ kind: 'unknown',
115
+ confidence: 'low',
116
+ resolvedTarget: null,
117
+ reason: 'This flow behaves like a stateful wizard, but Taro cannot resolve the owning render target from repo context yet.',
118
+ signals,
119
+ };
120
+ }
121
+ return {
122
+ kind: 'component',
123
+ confidence: 'low',
124
+ resolvedTarget: null,
125
+ reason: 'No stateful flow or repo-level mutation signals were detected, so a focused component boundary is acceptable.',
126
+ signals,
127
+ };
128
+ }
129
+ export function planJsSuite(params) {
130
+ const { recording, analyzedRecording, mockAnalysis, fallbackTitle } = params;
131
+ const renderBoundary = assessRenderBoundary({ recording, mockAnalysis });
132
+ const stateSafety = assessStateSafety({ recording, analyzedRecording, mockAnalysis });
133
+ const warnings = [];
134
+ if (renderBoundary.kind === 'module') {
135
+ warnings.push('Prefer a repo-local module/container render boundary for this flow instead of targeting a leaf form component directly.');
136
+ }
137
+ if (renderBoundary.kind !== 'component' && !renderBoundary.resolvedTarget) {
138
+ warnings.push('Taro could not resolve the exact render target from repo context; generated output should be treated as a boundary draft.');
139
+ }
140
+ const repeatedTarget = findRepeatedMockTarget(mockAnalysis);
141
+ if (repeatedTarget) {
142
+ warnings.push(`Reuse shared mocks for repeated targets such as "${repeatedTarget}" instead of re-mocking internal query hooks inline.`);
143
+ }
144
+ const baseGroups = renderBoundary.kind === 'module'
145
+ ? [
146
+ {
147
+ name: fallbackTitle || 'complete recorded flow',
148
+ steps: analyzedRecording.steps,
149
+ },
150
+ ]
151
+ : buildFallbackGroups(analyzedRecording, fallbackTitle);
152
+ const helpers = analyzedRecording.intentGroups.map((group, index) => ({
153
+ name: toHelperName(group.name, index),
154
+ sourceGroup: group.name,
155
+ purpose: `Navigate the UI through "${group.name}" without hiding assertions.`,
156
+ steps: group.steps,
157
+ assertionPolicy: 'sync-only',
158
+ }));
159
+ const scenarios = baseGroups.map((group, index) => ({
160
+ name: group.name,
161
+ goal: inferScenarioGoal(group.name),
162
+ steps: group.steps,
163
+ helperRefs: stateSafety.status === 'safe-multi-it'
164
+ ? helpers
165
+ .filter((helper) => helper.steps.some((step) => group.steps.includes(step)))
166
+ .map((helper) => helper.name)
167
+ : [],
168
+ requiresFreshRender: true,
169
+ }));
170
+ if (stateSafety.status !== 'safe-multi-it' && baseGroups.length > 1) {
171
+ warnings.push('Keep this flow in a single end-to-end scenario until Taro can prove that downstream state can be recreated safely per test.');
172
+ }
173
+ return {
174
+ itGroups: baseGroups,
175
+ scenarios,
176
+ helpers,
177
+ stateSafety,
178
+ renderBoundary,
179
+ warnings,
180
+ };
181
+ }
182
+ //# sourceMappingURL=suite-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suite-planner.js","sourceRoot":"","sources":["../../src/core/suite-planner.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,24 @@
3
3
  * Functions return string fragments for composing test files.
4
4
  */
5
5
  import type { NormalizedAction } from '../types/recording.js';
6
- export declare function importBlock(hasUserEvents: boolean, importStyle?: 'esm' | 'cjs'): string;
6
+ export interface RenderTargetImport {
7
+ symbol: string;
8
+ importPath: string;
9
+ }
10
+ export interface ImportBlockOptions {
11
+ renderTarget?: RenderTargetImport | null;
12
+ needsWithin?: boolean;
13
+ }
14
+ export declare function importBlock(hasUserEvents: boolean, importStyle?: 'esm' | 'cjs', options?: ImportBlockOptions): string;
7
15
  export interface StepTemplateOptions {
8
16
  action: NormalizedAction;
9
17
  query: string;
10
18
  value?: string;
11
19
  matcher?: string;
20
+ checkpoint?: {
21
+ reason: string;
22
+ selector: string;
23
+ };
12
24
  }
13
25
  export declare function stepTemplate(opts: StepTemplateOptions): string;
14
26
  export declare function describeBlock(name: string, bodyLines: string[], hasUserEvents: boolean): string;
@@ -17,5 +29,13 @@ export interface ItBlockTemplate {
17
29
  stepLines: string[];
18
30
  hasUserEvents: boolean;
19
31
  }
20
- export declare function describeBlockMultiIt(name: string, itBlocks: ItBlockTemplate[]): string;
32
+ export interface HelperBlockTemplate {
33
+ name: string;
34
+ stepLines: string[];
35
+ }
36
+ export declare function helperBlock(block: HelperBlockTemplate): string;
37
+ export declare function describeBlockMultiIt(name: string, itBlocks: ItBlockTemplate[], options?: {
38
+ renderExpression?: string;
39
+ helpers?: HelperBlockTemplate[];
40
+ }): string;
21
41
  //# sourceMappingURL=test-template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-template.d.ts","sourceRoot":"","sources":["../../src/templates/test-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,wBAAgB,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,GAAE,KAAK,GAAG,KAAa,GAAG,MAAM,CAoB9F;AAcD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAiC9D;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,OAAO,GACrB,MAAM,CAYR;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,eAAe,EAAE,GAC1B,MAAM,CAiBR"}
1
+ {"version":3,"file":"test-template.d.ts","sourceRoot":"","sources":["../../src/templates/test-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,WAAW,CACzB,aAAa,EAAE,OAAO,EACtB,WAAW,GAAE,KAAK,GAAG,KAAa,EAClC,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAiCR;AAcD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA0C9D;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,OAAO,GACrB,MAAM,CAYR;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAO9D;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,GAAE;IACP,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAC3B,GACL,MAAM,CAmBR"}
@@ -2,25 +2,35 @@
2
2
  * Code templates for RTL test structure.
3
3
  * Functions return string fragments for composing test files.
4
4
  */
5
- export function importBlock(hasUserEvents, importStyle = 'esm') {
5
+ export function importBlock(hasUserEvents, importStyle = 'esm', options = {}) {
6
+ const testingLibraryMembers = ['render', 'screen'];
7
+ if (options.needsWithin) {
8
+ testingLibraryMembers.push('within');
9
+ }
6
10
  if (importStyle === 'cjs') {
7
11
  const lines = [
8
- "const { render, screen } = require('@testing-library/react')",
12
+ `const { ${testingLibraryMembers.join(', ')} } = require('@testing-library/react')`,
9
13
  "require('@testing-library/jest-dom')",
10
14
  ];
11
15
  if (hasUserEvents) {
12
16
  lines.push("const userEvent = require('@testing-library/user-event')");
13
17
  }
18
+ if (options.renderTarget) {
19
+ lines.push(`const ${options.renderTarget.symbol} = require('${options.renderTarget.importPath}').default`);
20
+ }
14
21
  return lines.join('\n');
15
22
  }
16
23
  // ESM (default)
17
24
  const lines = [
18
- "import { render, screen } from '@testing-library/react'",
25
+ `import { ${testingLibraryMembers.join(', ')} } from '@testing-library/react'`,
19
26
  "import '@testing-library/jest-dom'",
20
27
  ];
21
28
  if (hasUserEvents) {
22
29
  lines.push("import userEvent from '@testing-library/user-event'");
23
30
  }
31
+ if (options.renderTarget) {
32
+ lines.push(`import ${options.renderTarget.symbol} from '${options.renderTarget.importPath}'`);
33
+ }
24
34
  return lines.join('\n');
25
35
  }
26
36
  function escapeSingleQuote(s) {
@@ -33,9 +43,20 @@ function indentLines(text, spaces) {
33
43
  .map((line) => (line.trim() ? pad + line : ''))
34
44
  .join('\n');
35
45
  }
46
+ function sanitizeCommentText(value) {
47
+ return value.replace(/\s+/g, ' ').trim();
48
+ }
36
49
  export function stepTemplate(opts) {
37
50
  const { action, query, value = '' } = opts;
38
51
  const escapedValue = escapeSingleQuote(value);
52
+ if (opts.checkpoint) {
53
+ return [
54
+ `// taro-query-checkpoint: ${action} step requires manual RTL query recovery`,
55
+ `// selector: ${sanitizeCommentText(opts.checkpoint.selector)}`,
56
+ `// reason: ${sanitizeCommentText(opts.checkpoint.reason)}`,
57
+ '// TODO: replace this checkpoint with a trustworthy RTL query before keeping the generated test',
58
+ ].join('\n');
59
+ }
39
60
  switch (action) {
40
61
  case 'click':
41
62
  return `await user.click(${query})`;
@@ -72,8 +93,18 @@ export function describeBlock(name, bodyLines, hasUserEvents) {
72
93
  `})`,
73
94
  ].join('\n');
74
95
  }
75
- export function describeBlockMultiIt(name, itBlocks) {
96
+ export function helperBlock(block) {
97
+ const indented = indentLines(block.stepLines.join('\n'), 2);
98
+ return [
99
+ `const ${block.name} = async (user: ReturnType<typeof userEvent.setup>) => {`,
100
+ indented,
101
+ `}`,
102
+ ].join('\n');
103
+ }
104
+ export function describeBlockMultiIt(name, itBlocks, options = {}) {
76
105
  const escapedName = escapeSingleQuote(name);
106
+ const renderExpression = options.renderExpression ?? '<App />';
107
+ const helperBlocks = (options.helpers ?? []).map((block) => helperBlock(block));
77
108
  const blocks = itBlocks.map((block) => {
78
109
  const setup = block.hasUserEvents
79
110
  ? ` const user = userEvent.setup()\n`
@@ -81,12 +112,12 @@ export function describeBlockMultiIt(name, itBlocks) {
81
112
  const indented = indentLines(block.stepLines.join('\n'), 4);
82
113
  return [
83
114
  ` it('${escapeSingleQuote(block.name)}', async () => {`,
84
- ` render(<App />)`,
115
+ ` render(${renderExpression})`,
85
116
  setup,
86
117
  indented,
87
118
  ` })`,
88
119
  ].join('\n');
89
120
  });
90
- return [`describe('${escapedName}', () => {`, ...blocks, `})`].join('\n');
121
+ return [`describe('${escapedName}', () => {`, ...helperBlocks, ...blocks, `})`].join('\n\n');
91
122
  }
92
123
  //# sourceMappingURL=test-template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-template.js","sourceRoot":"","sources":["../../src/templates/test-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-template.js","sourceRoot":"","sources":["../../src/templates/test-template.ts"],"names":[],"mappings":"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"}
@@ -161,10 +161,53 @@ export interface QueryResult {
161
161
  matcher?: string;
162
162
  line?: number;
163
163
  }
164
+ export type SelectorResolutionStatus = 'resolved' | 'unresolved';
165
+ export type SelectorResolutionOutcome = 'accessible-query' | 'preserved-query' | 'no-url' | 'inspection-failed' | 'selector-not-found' | 'selector-inaccessible';
166
+ interface BaseSelectorResolutionResult {
167
+ stepId: StepId;
168
+ selector: SelectorDescriptor;
169
+ url?: string;
170
+ warnings: string[];
171
+ }
172
+ export interface ResolvedSelectorResolutionResult extends BaseSelectorResolutionResult {
173
+ status: 'resolved';
174
+ outcome: 'accessible-query' | 'preserved-query';
175
+ source: 'baseline' | 'live-dom';
176
+ query: QueryDescriptor;
177
+ inspectedElement?: ElementInfo;
178
+ }
179
+ export interface UnresolvedSelectorResolutionResult extends BaseSelectorResolutionResult {
180
+ status: 'unresolved';
181
+ outcome: 'no-url' | 'inspection-failed' | 'selector-not-found' | 'selector-inaccessible';
182
+ reason: string;
183
+ inspectionError?: string;
184
+ }
185
+ export type SelectorResolutionResult = ResolvedSelectorResolutionResult | UnresolvedSelectorResolutionResult;
164
186
  export interface ItGroup {
165
187
  name: string;
166
188
  steps: NormalizedStep[];
167
189
  }
190
+ export type JsHelperAssertionPolicy = 'sync-only';
191
+ export type JsStateSafetyStatus = 'safe-multi-it' | 'single-flow-required' | 'unknown';
192
+ export type JsScenarioGoal = 'flow' | 'validation' | 'review' | 'mutation-state';
193
+ export interface JsHelperPlan {
194
+ name: string;
195
+ sourceGroup: string;
196
+ purpose: string;
197
+ steps: NormalizedStep[];
198
+ assertionPolicy: JsHelperAssertionPolicy;
199
+ }
200
+ export interface JsScenarioPlan {
201
+ name: string;
202
+ goal: JsScenarioGoal;
203
+ steps: NormalizedStep[];
204
+ helperRefs: string[];
205
+ requiresFreshRender: boolean;
206
+ }
207
+ export interface JsStateSafetyAssessment {
208
+ status: JsStateSafetyStatus;
209
+ reason: string;
210
+ }
168
211
  export interface GeneratedItBlock {
169
212
  name: string;
170
213
  stepLines: string[];
@@ -188,4 +231,5 @@ export interface ParsedJsInput {
188
231
  }
189
232
  export type ParsedInput = ParsedJsonInput | ParsedJsInput;
190
233
  export declare function createStepId(source: RecordingSource, index: number): StepId;
234
+ export {};
191
235
  //# sourceMappingURL=recording.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../../src/types/recording.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../../src/types/recording.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recording.js","sourceRoot":"","sources":["../../src/types/recording.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsOH,MAAM,UAAU,YAAY,CAAC,MAAuB,EAAE,KAAa;IACjE,OAAO,GAAG,MAAM,SAAS,KAAK,GAAG,CAAC,EAAE,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"recording.js","sourceRoot":"","sources":["../../src/types/recording.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwSH,MAAM,UAAU,YAAY,CAAC,MAAuB,EAAE,KAAa;IACjE,OAAO,GAAG,MAAM,SAAS,KAAK,GAAG,CAAC,EAAE,CAAA;AACtC,CAAC"}
@@ -2,11 +2,34 @@ export interface ScoreDimensions {
2
2
  queryQuality: number;
3
3
  assertionSpecificity: number;
4
4
  testStructure: number;
5
+ boundaryIsolation: number;
6
+ }
7
+ export interface ScoreSignals {
8
+ queryCheckpointCount: number;
9
+ roleQueryCount: number;
10
+ testIdQueryCount: number;
11
+ strongAssertionCount: number;
12
+ weakAssertionCount: number;
13
+ boundaryWarningCount: number;
14
+ boundaryIssueCount: number;
15
+ placeholderRenderTarget: boolean;
16
+ multipleTestBlocks: boolean;
17
+ }
18
+ export interface ScoreReason {
19
+ code: string;
20
+ dimension: keyof ScoreDimensions;
21
+ impact: 'positive' | 'negative';
22
+ weight: number;
23
+ message: string;
5
24
  }
6
25
  export interface ScoreResult {
7
26
  total: number;
8
27
  grade: 'A' | 'B' | 'C' | 'D' | 'F';
9
28
  dimensions: ScoreDimensions;
29
+ signals: ScoreSignals;
30
+ reasons: ScoreReason[];
31
+ blockers: string[];
32
+ requiresReview: boolean;
10
33
  }
11
34
  export interface HistoryEntry {
12
35
  timestamp: string;
@@ -1 +1 @@
1
- {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/types/score.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IAClC,UAAU,EAAE,eAAe,CAAA;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,eAAe,CAAA;CAC5B"}
1
+ {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../src/types/score.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,uBAAuB,EAAE,OAAO,CAAA;IAChC,kBAAkB,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,eAAe,CAAA;IAChC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IAClC,UAAU,EAAE,eAAe,CAAA;IAC3B,OAAO,EAAE,YAAY,CAAA;IACrB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,eAAe,CAAA;CAC5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tayo-dev/rtl",
3
- "version": "1.3.0-alpha.0",
3
+ "version": "1.3.1",
4
4
  "description": "Generate high-quality React Testing Library tests from Recorder exports",
5
5
  "type": "module",
6
6
  "bin": {