@tayo-dev/rtl 1.3.0 → 1.4.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 (69) hide show
  1. package/README.md +66 -33
  2. package/assets/claude/commands/@tayo-dev/rtl/generate.md +2 -2
  3. package/assets/claude/commands/@tayo-dev/rtl/help.md +1 -1
  4. package/assets/codex/@tayo-dev/rtl-conventions/SKILL.md +2 -2
  5. package/assets/codex/@tayo-dev/rtl-generate/SKILL.md +6 -5
  6. package/assets/codex/@tayo-dev/rtl-help/SKILL.md +1 -1
  7. package/assets/gemini/commands/@tayo-dev/rtl/generate.toml +2 -2
  8. package/assets/gemini/commands/@tayo-dev/rtl/help.toml +1 -1
  9. package/assets/opencode/commands/@tayo-dev/rtl-generate.md +2 -2
  10. package/assets/opencode/commands/@tayo-dev/rtl-help.md +1 -1
  11. package/dist/cli/commands/generate.d.ts.map +1 -1
  12. package/dist/cli/commands/generate.js +485 -67
  13. package/dist/cli/commands/generate.js.map +1 -1
  14. package/dist/cli/commands/install.js +6 -6
  15. package/dist/core/baseline-normalizer.d.ts.map +1 -1
  16. package/dist/core/baseline-normalizer.js +42 -0
  17. package/dist/core/baseline-normalizer.js.map +1 -1
  18. package/dist/core/generator.d.ts +5 -1
  19. package/dist/core/generator.d.ts.map +1 -1
  20. package/dist/core/generator.js +235 -17
  21. package/dist/core/generator.js.map +1 -1
  22. package/dist/core/input-loader.d.ts.map +1 -1
  23. package/dist/core/input-loader.js +1 -0
  24. package/dist/core/input-loader.js.map +1 -1
  25. package/dist/core/js-parser.d.ts +2 -1
  26. package/dist/core/js-parser.d.ts.map +1 -1
  27. package/dist/core/js-parser.js +69 -0
  28. package/dist/core/js-parser.js.map +1 -1
  29. package/dist/core/orchestrator.d.ts +1 -1
  30. package/dist/core/orchestrator.js +4 -4
  31. package/dist/core/parser.js +2 -2
  32. package/dist/core/recording-intelligence.d.ts +1 -1
  33. package/dist/core/recording-intelligence.d.ts.map +1 -1
  34. package/dist/core/recording-intelligence.js +298 -4
  35. package/dist/core/recording-intelligence.js.map +1 -1
  36. package/dist/core/resolver.d.ts +28 -2
  37. package/dist/core/resolver.d.ts.map +1 -1
  38. package/dist/core/resolver.js +462 -23
  39. package/dist/core/resolver.js.map +1 -1
  40. package/dist/core/scanner.d.ts +11 -3
  41. package/dist/core/scanner.d.ts.map +1 -1
  42. package/dist/core/scanner.js +47 -9
  43. package/dist/core/scanner.js.map +1 -1
  44. package/dist/core/scorer.d.ts +6 -2
  45. package/dist/core/scorer.d.ts.map +1 -1
  46. package/dist/core/scorer.js +163 -9
  47. package/dist/core/scorer.js.map +1 -1
  48. package/dist/core/suite-planner.d.ts +4 -1
  49. package/dist/core/suite-planner.d.ts.map +1 -1
  50. package/dist/core/suite-planner.js +261 -11
  51. package/dist/core/suite-planner.js.map +1 -1
  52. package/dist/index.d.ts +1 -1
  53. package/dist/index.js +4 -4
  54. package/dist/install/planner.js +1 -1
  55. package/dist/install/types.d.ts +1 -1
  56. package/dist/learner/index.d.ts +2 -2
  57. package/dist/learner/index.js +3 -3
  58. package/dist/learner/storage.d.ts +1 -1
  59. package/dist/learner/storage.js +2 -2
  60. package/dist/templates/test-template.d.ts +26 -2
  61. package/dist/templates/test-template.d.ts.map +1 -1
  62. package/dist/templates/test-template.js +46 -6
  63. package/dist/templates/test-template.js.map +1 -1
  64. package/dist/types/recording.d.ts +162 -0
  65. package/dist/types/recording.d.ts.map +1 -1
  66. package/dist/types/recording.js.map +1 -1
  67. package/dist/types/score.d.ts +37 -0
  68. package/dist/types/score.d.ts.map +1 -1
  69. package/package.json +5 -5
@@ -1,3 +1,42 @@
1
+ import { resolveSemanticMarkerAssertion } from './resolver.js';
2
+ function getStepKey(step, index) {
3
+ return step.id ?? `${index}:${step.action}:${step.target ?? ''}:${step.originalType}`;
4
+ }
5
+ function sharesAnyStep(left, right) {
6
+ const leftKeys = new Set(left.map((step, index) => getStepKey(step, index)));
7
+ return right.some((step, index) => leftKeys.has(getStepKey(step, index)));
8
+ }
9
+ function enrichSemanticMarkerContext(step, stepsById) {
10
+ const anchorStepId = step.semanticMarkerLink?.anchorStepId ??
11
+ step.unresolvedSemanticMarker?.anchor?.anchorStepId ??
12
+ step.semanticMarkerCandidate?.anchor?.anchorStepId;
13
+ if (!anchorStepId) {
14
+ return step;
15
+ }
16
+ const anchorStep = stepsById.get(anchorStepId);
17
+ if (!anchorStep) {
18
+ return step;
19
+ }
20
+ return {
21
+ ...step,
22
+ metadata: {
23
+ ...step.metadata,
24
+ semanticMarkerAnchorStep: {
25
+ id: anchorStep.id,
26
+ action: anchorStep.action,
27
+ target: anchorStep.target,
28
+ originalType: anchorStep.originalType,
29
+ source: anchorStep.source,
30
+ },
31
+ },
32
+ };
33
+ }
34
+ function enrichGroupSteps(groups, stepsById) {
35
+ return groups.map((group) => ({
36
+ ...group,
37
+ steps: group.steps.map((step) => enrichSemanticMarkerContext(step, stepsById)),
38
+ }));
39
+ }
1
40
  function buildFallbackGroups(analyzedRecording, fallbackTitle) {
2
41
  if (analyzedRecording.intentGroups.length > 0) {
3
42
  return analyzedRecording.intentGroups;
@@ -9,6 +48,145 @@ function buildFallbackGroups(analyzedRecording, fallbackTitle) {
9
48
  },
10
49
  ];
11
50
  }
51
+ function getSemanticMarkerCandidate(step) {
52
+ const metadataCandidate = step.metadata?.semanticMarkerCandidate;
53
+ if (metadataCandidate &&
54
+ typeof metadataCandidate === 'object' &&
55
+ 'stepId' in metadataCandidate &&
56
+ typeof metadataCandidate.stepId === 'string') {
57
+ return metadataCandidate;
58
+ }
59
+ return step.semanticMarkerCandidate;
60
+ }
61
+ function getSemanticMarkerLink(step) {
62
+ const metadataLink = step.metadata?.semanticMarkerLink;
63
+ if (metadataLink &&
64
+ typeof metadataLink === 'object' &&
65
+ 'markerStepId' in metadataLink &&
66
+ typeof metadataLink.markerStepId === 'string') {
67
+ return metadataLink;
68
+ }
69
+ return step.semanticMarkerLink;
70
+ }
71
+ function getUnresolvedSemanticMarker(step) {
72
+ const metadataMarker = step.metadata?.unresolvedSemanticMarker;
73
+ if (metadataMarker &&
74
+ typeof metadataMarker === 'object' &&
75
+ 'stepId' in metadataMarker &&
76
+ typeof metadataMarker.stepId === 'string') {
77
+ return metadataMarker;
78
+ }
79
+ return step.unresolvedSemanticMarker;
80
+ }
81
+ function isManagedSemanticMarkerStep(step) {
82
+ return Boolean(getSemanticMarkerCandidate(step) ||
83
+ getSemanticMarkerLink(step) ||
84
+ getUnresolvedSemanticMarker(step));
85
+ }
86
+ function filterManagedSemanticMarkerSteps(steps) {
87
+ return steps.filter((step) => !isManagedSemanticMarkerStep(step));
88
+ }
89
+ function getHelperPlacement(params) {
90
+ const { anchorStepId, helperRefs, helperStepsByName } = params;
91
+ for (const helperRef of helperRefs) {
92
+ if (helperStepsByName.get(helperRef)?.has(anchorStepId)) {
93
+ return {
94
+ kind: 'after-helper',
95
+ helperName: helperRef,
96
+ stepId: anchorStepId,
97
+ };
98
+ }
99
+ }
100
+ return null;
101
+ }
102
+ function collectScenarioMarkerState(params) {
103
+ const { group, helperRefs, helperStepsByName } = params;
104
+ const strongestMarkerAssertionsByAnchor = new Map();
105
+ const unresolvedMarkerAssertions = [];
106
+ for (const [sourceOrder, step] of group.steps.entries()) {
107
+ if (!isManagedSemanticMarkerStep(step)) {
108
+ continue;
109
+ }
110
+ const resolution = resolveSemanticMarkerAssertion(step);
111
+ if (resolution.status === 'unresolved') {
112
+ unresolvedMarkerAssertions.push(resolution);
113
+ continue;
114
+ }
115
+ const placement = getHelperPlacement({
116
+ anchorStepId: resolution.anchorStepId,
117
+ helperRefs,
118
+ helperStepsByName,
119
+ }) ?? {
120
+ kind: 'after-step',
121
+ stepId: resolution.anchorStepId,
122
+ };
123
+ const markerAssertion = {
124
+ markerStepId: resolution.markerStepId,
125
+ anchorStepId: resolution.anchorStepId,
126
+ placement,
127
+ assertion: resolution.assertion,
128
+ };
129
+ const proofRank = getSemanticMarkerProofRank(resolution.assertion.proofKind);
130
+ const existing = strongestMarkerAssertionsByAnchor.get(resolution.anchorStepId);
131
+ if (!existing ||
132
+ proofRank < existing.proofRank ||
133
+ (proofRank === existing.proofRank && sourceOrder < existing.sourceOrder)) {
134
+ strongestMarkerAssertionsByAnchor.set(resolution.anchorStepId, {
135
+ markerAssertion,
136
+ proofRank,
137
+ sourceOrder,
138
+ });
139
+ }
140
+ }
141
+ return {
142
+ markerAssertions: [...strongestMarkerAssertionsByAnchor.values()]
143
+ .sort((left, right) => left.sourceOrder - right.sourceOrder)
144
+ .map((entry) => entry.markerAssertion),
145
+ unresolvedMarkerAssertions,
146
+ };
147
+ }
148
+ function getSemanticMarkerProofRank(proofKind) {
149
+ switch (proofKind) {
150
+ case 'role-name':
151
+ return 0;
152
+ case 'visible-text':
153
+ case 'visible-value':
154
+ return 1;
155
+ case 'label-text':
156
+ return 2;
157
+ case 'placeholder-text':
158
+ return 3;
159
+ }
160
+ }
161
+ function sanitizeIdentifierPart(value) {
162
+ return value
163
+ .replace(/[^a-zA-Z0-9]+/g, ' ')
164
+ .trim()
165
+ .split(/\s+/)
166
+ .map((part, index) => {
167
+ const normalized = part.toLowerCase();
168
+ return index === 0
169
+ ? normalized
170
+ : normalized.charAt(0).toUpperCase() + normalized.slice(1);
171
+ })
172
+ .join('');
173
+ }
174
+ function toHelperName(groupName, index) {
175
+ const normalized = sanitizeIdentifierPart(groupName);
176
+ return normalized ? `plan${normalized.charAt(0).toUpperCase()}${normalized.slice(1)}` : `planScenario${index + 1}`;
177
+ }
178
+ function inferScenarioGoal(groupName) {
179
+ if (/validation|error|required|missing/i.test(groupName)) {
180
+ return 'validation';
181
+ }
182
+ if (/review|summary|confirm/i.test(groupName)) {
183
+ return 'review';
184
+ }
185
+ if (/save|submit|pending|success|failure|mutation/i.test(groupName)) {
186
+ return 'mutation-state';
187
+ }
188
+ return 'flow';
189
+ }
12
190
  function hasMutationSignals(mockAnalysis) {
13
191
  if (!mockAnalysis) {
14
192
  return false;
@@ -31,6 +209,32 @@ function isWizardFlow(recording) {
31
209
  const hasReviewLanguage = recording.steps.some((step) => /(review|invoice|details)/i.test(step.target ?? ''));
32
210
  return actionableSteps.length >= 6 && hasFormInput && (milestoneClicks.length >= 2 || hasReviewLanguage);
33
211
  }
212
+ function assessStateSafety(params) {
213
+ const { recording, analyzedRecording, mockAnalysis } = params;
214
+ const wizardFlow = isWizardFlow(recording);
215
+ if (wizardFlow && hasMutationSignals(mockAnalysis)) {
216
+ return {
217
+ status: 'single-flow-required',
218
+ 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.',
219
+ };
220
+ }
221
+ if (wizardFlow) {
222
+ return {
223
+ status: 'unknown',
224
+ reason: 'This flow looks stateful, but repo evidence is not strong enough yet to prove whether multi-test recreation is safe.',
225
+ };
226
+ }
227
+ if (analyzedRecording.intentGroups.length > 1) {
228
+ return {
229
+ status: 'safe-multi-it',
230
+ reason: 'Intent groups are already separated into user-visible milestones and no mutation-heavy wizard state was detected.',
231
+ };
232
+ }
233
+ return {
234
+ status: 'safe-multi-it',
235
+ reason: 'No mutation-heavy wizard state was detected, so scenario splitting is safe when it improves readability.',
236
+ };
237
+ }
34
238
  export function assessRenderBoundary(params) {
35
239
  const { recording, mockAnalysis } = params;
36
240
  const signals = [];
@@ -50,7 +254,7 @@ export function assessRenderBoundary(params) {
50
254
  kind: 'module',
51
255
  confidence: 'medium',
52
256
  resolvedTarget: null,
53
- 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.',
257
+ reason: 'This flow spans multiple user-visible steps and repo evidence shows data/mutation setup around it, so Tayo should prefer a container/module boundary rather than a leaf component test.',
54
258
  signals,
55
259
  };
56
260
  }
@@ -59,7 +263,7 @@ export function assessRenderBoundary(params) {
59
263
  kind: 'unknown',
60
264
  confidence: 'low',
61
265
  resolvedTarget: null,
62
- reason: 'This flow behaves like a stateful wizard, but Taro cannot resolve the owning render target from repo context yet.',
266
+ reason: 'This flow behaves like a stateful wizard, but Tayo cannot resolve the owning render target from repo context yet.',
63
267
  signals,
64
268
  };
65
269
  }
@@ -74,26 +278,72 @@ export function assessRenderBoundary(params) {
74
278
  export function planJsSuite(params) {
75
279
  const { recording, analyzedRecording, mockAnalysis, fallbackTitle } = params;
76
280
  const renderBoundary = assessRenderBoundary({ recording, mockAnalysis });
281
+ const stateSafety = assessStateSafety({ recording, analyzedRecording, mockAnalysis });
77
282
  const warnings = [];
283
+ const stepsById = new Map(analyzedRecording.steps
284
+ .filter((step) => Boolean(step.id))
285
+ .map((step) => [step.id, step]));
78
286
  if (renderBoundary.kind === 'module') {
79
287
  warnings.push('Prefer a repo-local module/container render boundary for this flow instead of targeting a leaf form component directly.');
80
288
  }
81
289
  if (renderBoundary.kind !== 'component' && !renderBoundary.resolvedTarget) {
82
- warnings.push('Taro could not resolve the exact render target from repo context; generated output should be treated as a boundary draft.');
290
+ warnings.push('Tayo could not resolve the exact render target from repo context; generated output should be treated as a boundary draft.');
83
291
  }
84
292
  const repeatedTarget = findRepeatedMockTarget(mockAnalysis);
85
293
  if (repeatedTarget) {
86
294
  warnings.push(`Reuse shared mocks for repeated targets such as "${repeatedTarget}" instead of re-mocking internal query hooks inline.`);
87
295
  }
296
+ const baseGroups = enrichGroupSteps(renderBoundary.kind === 'module'
297
+ ? [
298
+ {
299
+ name: fallbackTitle || 'complete recorded flow',
300
+ steps: analyzedRecording.steps,
301
+ },
302
+ ]
303
+ : buildFallbackGroups(analyzedRecording, fallbackTitle), stepsById);
304
+ const helperGroups = enrichGroupSteps(analyzedRecording.intentGroups, stepsById);
305
+ const helpers = helperGroups.map((group, index) => ({
306
+ name: toHelperName(group.name, index),
307
+ sourceGroup: group.name,
308
+ purpose: `Navigate the UI through "${group.name}" without hiding assertions.`,
309
+ steps: filterManagedSemanticMarkerSteps(group.steps),
310
+ assertionPolicy: 'sync-only',
311
+ }));
312
+ const helperStepsByName = new Map(helpers.map((helper) => [
313
+ helper.name,
314
+ new Set(helper.steps
315
+ .filter((step) => Boolean(step.id))
316
+ .map((step) => step.id)),
317
+ ]));
318
+ const scenarios = baseGroups.map((group, index) => {
319
+ const helperRefs = stateSafety.status === 'safe-multi-it'
320
+ ? helpers
321
+ .filter((helper) => sharesAnyStep(group.steps, helper.steps))
322
+ .map((helper) => helper.name)
323
+ : [];
324
+ const markerState = collectScenarioMarkerState({
325
+ group,
326
+ helperRefs,
327
+ helperStepsByName,
328
+ });
329
+ return {
330
+ name: group.name,
331
+ goal: inferScenarioGoal(group.name),
332
+ steps: filterManagedSemanticMarkerSteps(group.steps),
333
+ helperRefs,
334
+ requiresFreshRender: true,
335
+ markerAssertions: markerState.markerAssertions,
336
+ unresolvedMarkerAssertions: markerState.unresolvedMarkerAssertions,
337
+ };
338
+ });
339
+ if (stateSafety.status !== 'safe-multi-it' && baseGroups.length > 1) {
340
+ warnings.push('Keep this flow in a single end-to-end scenario until Tayo can prove that downstream state can be recreated safely per test.');
341
+ }
88
342
  return {
89
- itGroups: renderBoundary.kind === 'module'
90
- ? [
91
- {
92
- name: fallbackTitle || 'complete recorded flow',
93
- steps: analyzedRecording.steps,
94
- },
95
- ]
96
- : buildFallbackGroups(analyzedRecording, fallbackTitle),
343
+ itGroups: baseGroups,
344
+ scenarios,
345
+ helpers,
346
+ stateSafety,
97
347
  renderBoundary,
98
348
  warnings,
99
349
  };
@@ -1 +1 @@
1
- {"version":3,"file":"suite-planner.js","sourceRoot":"","sources":["../../src/core/suite-planner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suite-planner.js","sourceRoot":"","sources":["../../src/core/suite-planner.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Taro CLI entry point
3
+ * Tayo CLI entry point
4
4
  * Installer-first package surface with generator access preserved under `generate`.
5
5
  */
6
6
  export {};
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Taro CLI entry point
3
+ * Tayo CLI entry point
4
4
  * Installer-first package surface with generator access preserved under `generate`.
5
5
  */
6
6
  import { Command } from 'commander';
@@ -10,11 +10,11 @@ import { applyInstallOptions, createInstallCommand, runInstallCommand, } from '.
10
10
  const program = new Command();
11
11
  applyInstallOptions(program);
12
12
  program
13
- .name('taro')
14
- .description(`${pc.bold('@tayo-dev/rtl')} — Install Taro into Claude Code, OpenCode, Gemini CLI, or Codex`)
13
+ .name('tayo')
14
+ .description(`${pc.bold('@tayo-dev/rtl')} — Install Tayo into Claude Code, OpenCode, Gemini CLI, or Codex`)
15
15
  .version('1.3.0-alpha.0', '-v, --version', 'Output the current version')
16
16
  .helpOption('-h, --help', 'Display help for command')
17
- .addHelpText('after', `\nExisting capability:\n ${pc.bold('taro generate <file>')} Generate RTL tests from Recorder exports`)
17
+ .addHelpText('after', `\nExisting capability:\n ${pc.bold('tayo generate <file>')} Generate RTL tests from Recorder exports`)
18
18
  .action(async () => {
19
19
  await runInstallCommand(program.optsWithGlobals());
20
20
  });
@@ -18,7 +18,7 @@ function buildRuntimeOperations(target) {
18
18
  export function buildInstallPlan(selection, context = {}) {
19
19
  return {
20
20
  packageName: '@tayo-dev/rtl',
21
- commandName: 'taro',
21
+ commandName: 'tayo',
22
22
  stage: 'ready-to-write',
23
23
  source: selection.source,
24
24
  mode: selection.mode,
@@ -93,7 +93,7 @@ export interface InstallAssetConflict {
93
93
  }
94
94
  export interface InstallPlan {
95
95
  packageName: '@tayo-dev/rtl';
96
- commandName: 'taro';
96
+ commandName: 'tayo';
97
97
  stage: 'prewrite-preview' | 'ready-to-write';
98
98
  source: InstallSelectionSource;
99
99
  mode: 'interactive' | 'non-interactive';
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Convention Learning Module
3
3
  *
4
- * Analyzes existing test patterns to derive Taro's conventions.
5
- * Implements CNV-01: Taro derives conventions from observation.
4
+ * Analyzes existing test patterns to derive Tayo's conventions.
5
+ * Implements CNV-01: Tayo derives conventions from observation.
6
6
  * Implements CNV-02: Conventions persist across runs via SQLite storage.
7
7
  * Implements CNV-03: Faster subsequent runs via caching.
8
8
  */
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Convention Learning Module
3
3
  *
4
- * Analyzes existing test patterns to derive Taro's conventions.
5
- * Implements CNV-01: Taro derives conventions from observation.
4
+ * Analyzes existing test patterns to derive Tayo's conventions.
5
+ * Implements CNV-01: Tayo derives conventions from observation.
6
6
  * Implements CNV-02: Conventions persist across runs via SQLite storage.
7
7
  * Implements CNV-03: Faster subsequent runs via caching.
8
8
  */
@@ -149,7 +149,7 @@ function mergeConventions(a, b) {
149
149
  */
150
150
  export function getConventions(projectRoot) {
151
151
  try {
152
- const taroDir = path.join(projectRoot, '.taro');
152
+ const taroDir = path.join(projectRoot, '.tayo');
153
153
  const dbPath = path.join(taroDir, 'conventions.db');
154
154
  // Check if database exists
155
155
  if (!fs.existsSync(dbPath)) {
@@ -61,7 +61,7 @@ export declare class ConventionStore {
61
61
  }
62
62
  /**
63
63
  * Create a ConventionStore instance
64
- * @param projectRoot - Root directory of the project (will create .taro/ subdirectory)
64
+ * @param projectRoot - Root directory of the project (will create .tayo/ subdirectory)
65
65
  * @returns Initialized ConventionStore
66
66
  */
67
67
  export declare function createStore(projectRoot: string): ConventionStore;
@@ -188,11 +188,11 @@ export class ConventionStore {
188
188
  }
189
189
  /**
190
190
  * Create a ConventionStore instance
191
- * @param projectRoot - Root directory of the project (will create .taro/ subdirectory)
191
+ * @param projectRoot - Root directory of the project (will create .tayo/ subdirectory)
192
192
  * @returns Initialized ConventionStore
193
193
  */
194
194
  export function createStore(projectRoot) {
195
- const taroDir = path.join(projectRoot, '.taro');
195
+ const taroDir = path.join(projectRoot, '.tayo');
196
196
  const dbPath = path.join(taroDir, 'conventions.db');
197
197
  const store = new ConventionStore(dbPath);
198
198
  store.init();
@@ -3,19 +3,43 @@
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;
26
+ export declare function markerAssertionTemplate(opts: {
27
+ queryExpression: string;
28
+ matcher?: string;
29
+ }): string;
14
30
  export declare function describeBlock(name: string, bodyLines: string[], hasUserEvents: boolean): string;
15
31
  export interface ItBlockTemplate {
16
32
  name: string;
17
33
  stepLines: string[];
18
34
  hasUserEvents: boolean;
19
35
  }
20
- export declare function describeBlockMultiIt(name: string, itBlocks: ItBlockTemplate[]): string;
36
+ export interface HelperBlockTemplate {
37
+ name: string;
38
+ stepLines: string[];
39
+ }
40
+ export declare function helperBlock(block: HelperBlockTemplate): string;
41
+ export declare function describeBlockMultiIt(name: string, itBlocks: ItBlockTemplate[], options?: {
42
+ renderExpression?: string;
43
+ helpers?: HelperBlockTemplate[];
44
+ }): string;
21
45
  //# 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;AAcD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA0C9D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,MAAM,CAET;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,26 @@ 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
+ }
49
+ function normalizeAssertionMatcher(matcher) {
50
+ if (matcher.startsWith('.')) {
51
+ return /\)\s*$/u.test(matcher) ? matcher : `${matcher}()`;
52
+ }
53
+ return /\)\s*$/u.test(matcher) ? `.${matcher}` : `.${matcher}()`;
54
+ }
36
55
  export function stepTemplate(opts) {
37
56
  const { action, query, value = '' } = opts;
38
57
  const escapedValue = escapeSingleQuote(value);
58
+ if (opts.checkpoint) {
59
+ return [
60
+ `// tayo-query-checkpoint: ${action} step requires manual RTL query recovery`,
61
+ `// selector: ${sanitizeCommentText(opts.checkpoint.selector)}`,
62
+ `// reason: ${sanitizeCommentText(opts.checkpoint.reason)}`,
63
+ '// TODO: replace this checkpoint with a trustworthy RTL query before keeping the generated test',
64
+ ].join('\n');
65
+ }
39
66
  switch (action) {
40
67
  case 'click':
41
68
  return `await user.click(${query})`;
@@ -59,6 +86,9 @@ export function stepTemplate(opts) {
59
86
  return `// TODO: unsupported step — original selector: ${query}`;
60
87
  }
61
88
  }
89
+ export function markerAssertionTemplate(opts) {
90
+ return `expect(await ${opts.queryExpression})${normalizeAssertionMatcher(opts.matcher ?? 'toBeVisible')}`;
91
+ }
62
92
  export function describeBlock(name, bodyLines, hasUserEvents) {
63
93
  const body = bodyLines.join('\n');
64
94
  const indented = indentLines(body, 4);
@@ -72,8 +102,18 @@ export function describeBlock(name, bodyLines, hasUserEvents) {
72
102
  `})`,
73
103
  ].join('\n');
74
104
  }
75
- export function describeBlockMultiIt(name, itBlocks) {
105
+ export function helperBlock(block) {
106
+ const indented = indentLines(block.stepLines.join('\n'), 2);
107
+ return [
108
+ `const ${block.name} = async (user: ReturnType<typeof userEvent.setup>) => {`,
109
+ indented,
110
+ `}`,
111
+ ].join('\n');
112
+ }
113
+ export function describeBlockMultiIt(name, itBlocks, options = {}) {
76
114
  const escapedName = escapeSingleQuote(name);
115
+ const renderExpression = options.renderExpression ?? '<App />';
116
+ const helperBlocks = (options.helpers ?? []).map((block) => helperBlock(block));
77
117
  const blocks = itBlocks.map((block) => {
78
118
  const setup = block.hasUserEvents
79
119
  ? ` const user = userEvent.setup()\n`
@@ -81,12 +121,12 @@ export function describeBlockMultiIt(name, itBlocks) {
81
121
  const indented = indentLines(block.stepLines.join('\n'), 4);
82
122
  return [
83
123
  ` it('${escapeSingleQuote(block.name)}', async () => {`,
84
- ` render(<App />)`,
124
+ ` render(${renderExpression})`,
85
125
  setup,
86
126
  indented,
87
127
  ` })`,
88
128
  ].join('\n');
89
129
  });
90
- return [`describe('${escapedName}', () => {`, ...blocks, `})`].join('\n');
130
+ return [`describe('${escapedName}', () => {`, ...helperBlocks, ...blocks, `})`].join('\n\n');
91
131
  }
92
132
  //# 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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"}