@scenetest/scenes 0.1.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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/devices.test.d.ts +2 -0
  3. package/dist/__tests__/devices.test.d.ts.map +1 -0
  4. package/dist/__tests__/devices.test.js +117 -0
  5. package/dist/__tests__/devices.test.js.map +1 -0
  6. package/dist/__tests__/dsl.test.d.ts +2 -0
  7. package/dist/__tests__/dsl.test.d.ts.map +1 -0
  8. package/dist/__tests__/dsl.test.js +385 -0
  9. package/dist/__tests__/dsl.test.js.map +1 -0
  10. package/dist/__tests__/markdown-scene.test.d.ts +2 -0
  11. package/dist/__tests__/markdown-scene.test.d.ts.map +1 -0
  12. package/dist/__tests__/markdown-scene.test.js +508 -0
  13. package/dist/__tests__/markdown-scene.test.js.map +1 -0
  14. package/dist/__tests__/reactive.test.d.ts +2 -0
  15. package/dist/__tests__/reactive.test.d.ts.map +1 -0
  16. package/dist/__tests__/reactive.test.js +383 -0
  17. package/dist/__tests__/reactive.test.js.map +1 -0
  18. package/dist/__tests__/swarm.test.d.ts +2 -0
  19. package/dist/__tests__/swarm.test.d.ts.map +1 -0
  20. package/dist/__tests__/swarm.test.js +214 -0
  21. package/dist/__tests__/swarm.test.js.map +1 -0
  22. package/dist/actor.d.ts +104 -0
  23. package/dist/actor.d.ts.map +1 -0
  24. package/dist/actor.js +527 -0
  25. package/dist/actor.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +273 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/config.d.ts +21 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +120 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/devices.d.ts +55 -0
  35. package/dist/devices.d.ts.map +1 -0
  36. package/dist/devices.js +167 -0
  37. package/dist/devices.js.map +1 -0
  38. package/dist/dsl.d.ts +99 -0
  39. package/dist/dsl.d.ts.map +1 -0
  40. package/dist/dsl.js +247 -0
  41. package/dist/dsl.js.map +1 -0
  42. package/dist/index.d.ts +13 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +16 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/init.d.ts +9 -0
  47. package/dist/init.d.ts.map +1 -0
  48. package/dist/init.js +27 -0
  49. package/dist/init.js.map +1 -0
  50. package/dist/loader.d.ts +2 -0
  51. package/dist/loader.d.ts.map +1 -0
  52. package/dist/loader.js +10 -0
  53. package/dist/loader.js.map +1 -0
  54. package/dist/markdown-scene.d.ts +120 -0
  55. package/dist/markdown-scene.d.ts.map +1 -0
  56. package/dist/markdown-scene.js +452 -0
  57. package/dist/markdown-scene.js.map +1 -0
  58. package/dist/message-bus.d.ts +31 -0
  59. package/dist/message-bus.d.ts.map +1 -0
  60. package/dist/message-bus.js +74 -0
  61. package/dist/message-bus.js.map +1 -0
  62. package/dist/reactive.d.ts +267 -0
  63. package/dist/reactive.d.ts.map +1 -0
  64. package/dist/reactive.js +779 -0
  65. package/dist/reactive.js.map +1 -0
  66. package/dist/runner.d.ts +51 -0
  67. package/dist/runner.d.ts.map +1 -0
  68. package/dist/runner.js +306 -0
  69. package/dist/runner.js.map +1 -0
  70. package/dist/scene.d.ts +40 -0
  71. package/dist/scene.d.ts.map +1 -0
  72. package/dist/scene.js +110 -0
  73. package/dist/scene.js.map +1 -0
  74. package/dist/selectors.d.ts +57 -0
  75. package/dist/selectors.d.ts.map +1 -0
  76. package/dist/selectors.js +193 -0
  77. package/dist/selectors.js.map +1 -0
  78. package/dist/swarm.d.ts +64 -0
  79. package/dist/swarm.d.ts.map +1 -0
  80. package/dist/swarm.js +306 -0
  81. package/dist/swarm.js.map +1 -0
  82. package/dist/team-manager.d.ts +120 -0
  83. package/dist/team-manager.d.ts.map +1 -0
  84. package/dist/team-manager.js +267 -0
  85. package/dist/team-manager.js.map +1 -0
  86. package/dist/types.d.ts +653 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +2 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../src/actor.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,273 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import path from 'path';
4
+ import fs from 'fs';
5
+ import { loadConfig } from './config.js';
6
+ import { SceneRunner, printSummary } from './runner.js';
7
+ import { init } from './init.js';
8
+ const program = new Command();
9
+ program
10
+ .name('scenetest')
11
+ .description('Run scenetest scene specs')
12
+ .version('0.0.1')
13
+ .argument('[scenes...]', 'Scene files or directories to run')
14
+ .option('--ui', 'Run in interactive UI mode')
15
+ .option('--headed', 'Run with visible browser')
16
+ .option('--report <dir>', 'Report output directory')
17
+ .option('--format <format>', 'Report format (html, json, both)')
18
+ .option('--config <path>', 'Path to config file')
19
+ .option('--devices', 'Enable device rotation (assign each actor a rotating mobile/tablet/desktop device)')
20
+ .option('--swarm', 'Force swarm mode: run all teams against all scenes to classify failures')
21
+ .action(async (scenes, options) => {
22
+ try {
23
+ // Load config and discover actor teams
24
+ const { config, teams } = await loadConfig(options.config);
25
+ // Override config with CLI options
26
+ if (options.headed) {
27
+ config.headed = true;
28
+ }
29
+ if (options.report) {
30
+ config.reportDir = options.report;
31
+ }
32
+ if (options.format) {
33
+ config.reportFormat = options.format;
34
+ }
35
+ if (options.devices) {
36
+ config.devices = true;
37
+ }
38
+ // Interactive UI mode
39
+ if (options.ui) {
40
+ config.headed = true;
41
+ console.log('\n🎬 Scenetest UI Mode\n');
42
+ console.log('Press Ctrl+C to exit\n');
43
+ }
44
+ // Create runner
45
+ const runner = new SceneRunner(config, teams);
46
+ // Initialize browser
47
+ await runner.init();
48
+ try {
49
+ // Resolve scene file paths
50
+ let sceneFiles;
51
+ if (scenes.length > 0) {
52
+ sceneFiles = scenes.map((s) => path.resolve(s));
53
+ }
54
+ if (options.swarm) {
55
+ // ── Manual swarm mode ──
56
+ // Load scenes first, then swarm them all
57
+ const discovered = sceneFiles || (await runner.discoverScenes());
58
+ if (discovered.length === 0) {
59
+ console.log('No scene files found.');
60
+ }
61
+ else {
62
+ await runner.loadScenes(discovered);
63
+ const report = await runner.runSwarmMode('manual');
64
+ printSummary(report);
65
+ await writeReport(report, config.reportDir, config.reportFormat);
66
+ }
67
+ }
68
+ else {
69
+ // ── Normal run ──
70
+ const report = await runner.run(sceneFiles);
71
+ printSummary(report);
72
+ await writeReport(report, config.reportDir, config.reportFormat);
73
+ // Check if swarm should auto-trigger
74
+ const triggeringScenes = runner.checkSwarmTrigger();
75
+ if (triggeringScenes.length > 0) {
76
+ console.log(`\n⚡ Swarm mode auto-triggered for ${triggeringScenes.length} scene(s):`);
77
+ for (const name of triggeringScenes) {
78
+ console.log(` - ${name}`);
79
+ }
80
+ const swarmReport = await runner.runSwarmMode('auto', triggeringScenes);
81
+ await writeReport(swarmReport, config.reportDir, config.reportFormat);
82
+ }
83
+ }
84
+ // In UI mode, keep browser open
85
+ if (options.ui) {
86
+ console.log('Browser will remain open. Press Ctrl+C to exit.\n');
87
+ await new Promise(() => { }); // Wait forever
88
+ }
89
+ }
90
+ finally {
91
+ if (!options.ui) {
92
+ await runner.close();
93
+ }
94
+ }
95
+ }
96
+ catch (err) {
97
+ console.error('Error:', err instanceof Error ? err.message : err);
98
+ process.exit(1);
99
+ }
100
+ });
101
+ /**
102
+ * Write report to files
103
+ */
104
+ async function writeReport(report, dir, format) {
105
+ // Create report directory
106
+ if (!fs.existsSync(dir)) {
107
+ fs.mkdirSync(dir, { recursive: true });
108
+ }
109
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
110
+ // Write JSON report
111
+ if (format === 'json' || format === 'both') {
112
+ const jsonPath = path.join(dir, `report-${timestamp}.json`);
113
+ fs.writeFileSync(jsonPath, JSON.stringify(report, null, 2));
114
+ console.log(`Report written to: ${jsonPath}`);
115
+ }
116
+ // Write HTML report
117
+ if (format === 'html' || format === 'both') {
118
+ const htmlPath = path.join(dir, `report-${timestamp}.html`);
119
+ fs.writeFileSync(htmlPath, generateHtmlReport(report));
120
+ console.log(`Report written to: ${htmlPath}`);
121
+ }
122
+ }
123
+ /**
124
+ * Generate an HTML report
125
+ */
126
+ function generateHtmlReport(report) {
127
+ const passedColor = '#22c55e';
128
+ const failedColor = '#ef4444';
129
+ const warnColor = '#f59e0b';
130
+ const sceneRows = report.scenes
131
+ .map((scene) => {
132
+ const statusIcon = scene.status === 'completed' ? '✓' : scene.status === 'timeout' ? '⏱' : '✗';
133
+ const statusColor = scene.status === 'completed' ? passedColor : failedColor;
134
+ const assertionList = scene.assertions
135
+ .map((a) => {
136
+ const icon = a.result ? '✓' : '✗';
137
+ const color = a.result ? passedColor : failedColor;
138
+ const deviceTag = a.device ? ` <span class="device-tag">[${escapeHtml(a.device)}]</span>` : '';
139
+ return `<li style="color: ${color}">${icon} ${escapeHtml(a.description)}${deviceTag}</li>`;
140
+ })
141
+ .join('');
142
+ // Device info for actors
143
+ const actorDevices = Object.entries(scene.actors)
144
+ .filter(([, a]) => a.device)
145
+ .map(([role, a]) => `<span class="device-badge">${escapeHtml(role)}: ${escapeHtml(a.device)}</span>`)
146
+ .join(' ');
147
+ return `
148
+ <div class="scene">
149
+ <h3 style="color: ${statusColor}">${statusIcon} ${escapeHtml(scene.name)}</h3>
150
+ <p class="meta">File: ${escapeHtml(scene.file)} | Duration: ${scene.duration}ms | Team: ${scene.teamIndex}</p>
151
+ ${actorDevices ? `<p class="devices">${actorDevices}</p>` : ''}
152
+ ${scene.error ? `<p class="error">Error: ${escapeHtml(scene.error)}</p>` : ''}
153
+ <h4>Assertions (${scene.assertions.length})</h4>
154
+ <ul>${assertionList || '<li>No assertions</li>'}</ul>
155
+ </div>
156
+ `;
157
+ })
158
+ .join('');
159
+ // Swarm section
160
+ let swarmSection = '';
161
+ if (report.swarm) {
162
+ const swarm = report.swarm;
163
+ const swarmRows = swarm.results
164
+ .map((r) => {
165
+ const color = r.classification === 'healthy' ? passedColor
166
+ : r.classification === 'broken' ? failedColor
167
+ : r.classification === 'flaky' ? warnColor
168
+ : '#8b5cf6';
169
+ return `
170
+ <div class="scene" style="border-left: 4px solid ${color}">
171
+ <h3>${escapeHtml(r.name)}</h3>
172
+ <p class="meta">
173
+ Classification: <strong style="color: ${color}">${escapeHtml(r.classification.toUpperCase())}</strong> |
174
+ Passed: ${r.passed}/${r.runs} |
175
+ Failing teams: ${r.failingTeams.length > 0 ? r.failingTeams.join(', ') : 'none'}
176
+ </p>
177
+ </div>
178
+ `;
179
+ })
180
+ .join('');
181
+ swarmSection = `
182
+ <h2>Swarm Results (${swarm.trigger})</h2>
183
+ <div class="summary">
184
+ <div class="summary-card" style="border-top: 3px solid ${failedColor}">
185
+ <h2>${swarm.summary.broken}</h2><p>Broken</p>
186
+ </div>
187
+ <div class="summary-card" style="border-top: 3px solid ${warnColor}">
188
+ <h2>${swarm.summary.flaky}</h2><p>Flaky</p>
189
+ </div>
190
+ <div class="summary-card" style="border-top: 3px solid #8b5cf6">
191
+ <h2>${swarm.summary.seedDataEdgeCase}</h2><p>Seed Data Edge</p>
192
+ </div>
193
+ <div class="summary-card" style="border-top: 3px solid ${passedColor}">
194
+ <h2>${swarm.summary.healthy}</h2><p>Healthy</p>
195
+ </div>
196
+ </div>
197
+ ${swarmRows}
198
+ `;
199
+ }
200
+ return `
201
+ <!DOCTYPE html>
202
+ <html>
203
+ <head>
204
+ <meta charset="UTF-8">
205
+ <title>Scenetest Report</title>
206
+ <style>
207
+ body { font-family: system-ui, sans-serif; max-width: 900px; margin: 0 auto; padding: 2rem; }
208
+ h1 { border-bottom: 2px solid #333; padding-bottom: 0.5rem; display: flex; align-items: center; gap: 0.5rem; }
209
+ .logo { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px; background: rgba(80, 70, 229, 0.12); box-shadow: inset 0 2px 6px rgba(80, 70, 229, 0.25), inset 0 -1px 2px rgba(255, 255, 255, 0.5); font-size: 1.5rem; }
210
+ .summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; margin: 1rem 0; }
211
+ .summary-card { background: #f5f5f5; padding: 1rem; border-radius: 8px; text-align: center; }
212
+ .summary-card h2 { margin: 0; font-size: 2rem; }
213
+ .summary-card p { margin: 0.5rem 0 0; color: #666; }
214
+ .scene { border: 1px solid #ddd; padding: 1rem; margin: 1rem 0; border-radius: 8px; }
215
+ .scene h3 { margin-top: 0; }
216
+ .meta { color: #666; font-size: 0.9rem; }
217
+ .error { color: ${failedColor}; background: #fef2f2; padding: 0.5rem; border-radius: 4px; }
218
+ .devices { margin: 0.5rem 0; }
219
+ .device-badge { display: inline-block; background: #e0e7ff; color: #3730a3; padding: 2px 8px; border-radius: 12px; font-size: 0.8rem; margin-right: 4px; }
220
+ .device-tag { color: #6366f1; font-size: 0.85em; }
221
+ ul { list-style: none; padding-left: 0; }
222
+ li { padding: 0.25rem 0; }
223
+ </style>
224
+ </head>
225
+ <body>
226
+ <h1><span class="logo">🎬</span> Scenetest Report</h1>
227
+ <p>Generated: ${report.timestamp}</p>
228
+
229
+ <div class="summary">
230
+ <div class="summary-card">
231
+ <h2>${report.summary.completed}/${report.summary.scenes}</h2>
232
+ <p>Scenes Completed</p>
233
+ </div>
234
+ <div class="summary-card">
235
+ <h2 style="color: ${report.summary.assertions.failed > 0 ? failedColor : passedColor}">
236
+ ${report.summary.assertions.passed}/${report.summary.assertions.total}
237
+ </h2>
238
+ <p>Assertions Passed</p>
239
+ </div>
240
+ <div class="summary-card">
241
+ <h2>${report.duration}ms</h2>
242
+ <p>Total Duration</p>
243
+ </div>
244
+ </div>
245
+
246
+ ${sceneRows ? `<h2>Scenes</h2>${sceneRows}` : ''}
247
+ ${swarmSection}
248
+ </body>
249
+ </html>
250
+ `;
251
+ }
252
+ function escapeHtml(str) {
253
+ return str
254
+ .replace(/&/g, '&amp;')
255
+ .replace(/</g, '&lt;')
256
+ .replace(/>/g, '&gt;')
257
+ .replace(/"/g, '&quot;');
258
+ }
259
+ program
260
+ .command('init')
261
+ .description('Initialize scenetest folder structure')
262
+ .option('--force', 'Overwrite existing files')
263
+ .action(async (options) => {
264
+ try {
265
+ await init(process.cwd(), { force: options.force });
266
+ }
267
+ catch (err) {
268
+ console.error('Error:', err instanceof Error ? err.message : err);
269
+ process.exit(1);
270
+ }
271
+ });
272
+ program.parse();
273
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ScenetestConfig, TeamConfig } from './types.js';
2
+ /**
3
+ * Find the config file in the current directory
4
+ */
5
+ export declare function findConfigFile(cwd?: string): string | null;
6
+ /**
7
+ * Loaded config with resolved teams
8
+ */
9
+ export interface LoadedConfig {
10
+ config: ScenetestConfig;
11
+ teams: TeamConfig[];
12
+ }
13
+ /**
14
+ * Load and validate the config file, and discover actor teams
15
+ */
16
+ export declare function loadConfig(configPath?: string): Promise<LoadedConfig>;
17
+ /**
18
+ * Helper to define config with type checking
19
+ */
20
+ export declare function defineConfig(config: ScenetestConfig): ScenetestConfig;
21
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA8B7D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAgB,GAAG,MAAM,GAAG,IAAI,CAQjE;AAkDD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqC3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAErE"}
package/dist/config.js ADDED
@@ -0,0 +1,120 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
3
+ import { glob } from 'glob';
4
+ import { importFile } from './loader.js';
5
+ /**
6
+ * Default config values
7
+ */
8
+ const defaults = {
9
+ scenes: './scenes',
10
+ browser: 'chromium',
11
+ headed: false,
12
+ slowMo: 0,
13
+ timeout: 30000,
14
+ actionTimeout: 5000,
15
+ warnAfter: 500,
16
+ reportDir: './scenetest-reports',
17
+ reportFormat: 'html',
18
+ };
19
+ /**
20
+ * Config file names to search for (in order of preference)
21
+ */
22
+ const CONFIG_FILES = [
23
+ 'scenetest.config.ts',
24
+ 'scenetest.config.js',
25
+ 'scenetest.config.mjs',
26
+ 'scenetest/config.ts',
27
+ 'scenetest/config.js',
28
+ 'scenetest/config.mjs',
29
+ ];
30
+ /**
31
+ * Find the config file in the current directory
32
+ */
33
+ export function findConfigFile(cwd = process.cwd()) {
34
+ for (const name of CONFIG_FILES) {
35
+ const filepath = path.join(cwd, name);
36
+ if (fs.existsSync(filepath)) {
37
+ return filepath;
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+ /**
43
+ * Discover actor team files relative to the config file directory.
44
+ *
45
+ * Looks for:
46
+ * 1. `actors.ts` (single file exporting an array of teams)
47
+ * 2. `actors/*.ts` (directory with one file per team)
48
+ */
49
+ async function discoverTeams(configDir) {
50
+ // Check for single actors file first
51
+ const singleFiles = ['actors.ts', 'actors.js', 'actors.mjs'];
52
+ for (const name of singleFiles) {
53
+ const filepath = path.join(configDir, name);
54
+ if (fs.existsSync(filepath)) {
55
+ const module = await importFile(filepath);
56
+ const exported = module.default;
57
+ if (Array.isArray(exported)) {
58
+ return exported;
59
+ }
60
+ // Single team exported as object
61
+ return [exported];
62
+ }
63
+ }
64
+ // Check for actors directory
65
+ const actorsDir = path.join(configDir, 'actors');
66
+ if (fs.existsSync(actorsDir) && fs.statSync(actorsDir).isDirectory()) {
67
+ const files = await glob('*.{ts,js,mjs}', {
68
+ cwd: actorsDir,
69
+ absolute: true,
70
+ });
71
+ if (files.length === 0) {
72
+ throw new Error(`actors/ directory found at ${actorsDir} but contains no .ts/.js files`);
73
+ }
74
+ const teams = [];
75
+ for (const file of files.sort()) {
76
+ const module = await importFile(file);
77
+ teams.push(module.default);
78
+ }
79
+ return teams;
80
+ }
81
+ throw new Error(`No actor files found. Create actors.ts (exporting an array of teams) or actors/*.ts (one file per team) next to your config file at ${configDir}`);
82
+ }
83
+ /**
84
+ * Load and validate the config file, and discover actor teams
85
+ */
86
+ export async function loadConfig(configPath) {
87
+ const filepath = configPath || findConfigFile();
88
+ if (!filepath) {
89
+ throw new Error(`No config file found. Create one of: ${CONFIG_FILES.join(', ')}`);
90
+ }
91
+ if (!fs.existsSync(filepath)) {
92
+ throw new Error(`Config file not found: ${filepath}`);
93
+ }
94
+ // Dynamic import
95
+ const module = await importFile(filepath);
96
+ const config = module.default;
97
+ // Validate required fields
98
+ if (!config.baseUrl) {
99
+ throw new Error('Config missing required field: baseUrl');
100
+ }
101
+ // Merge with defaults
102
+ const resolved = {
103
+ ...defaults,
104
+ ...config,
105
+ };
106
+ // Discover actor teams relative to config file
107
+ const configDir = path.dirname(path.resolve(filepath));
108
+ const teams = await discoverTeams(configDir);
109
+ if (teams.length === 0) {
110
+ throw new Error('No actor teams found. Each actor file must export a team (Record<string, ActorConfig>).');
111
+ }
112
+ return { config: resolved, teams };
113
+ }
114
+ /**
115
+ * Helper to define config with type checking
116
+ */
117
+ export function defineConfig(config) {
118
+ return config;
119
+ }
120
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { BrowserContextOptions } from 'playwright';
2
+ /**
3
+ * A device profile used for actor browser context emulation.
4
+ * Wraps Playwright's device descriptors with metadata.
5
+ */
6
+ export interface DeviceProfile {
7
+ /** Human-readable name */
8
+ name: string;
9
+ /** Category for reporting */
10
+ category: 'mobile' | 'tablet' | 'desktop';
11
+ /** Playwright context options (viewport, userAgent, deviceScaleFactor, isMobile, hasTouch) */
12
+ contextOptions: BrowserContextOptions;
13
+ }
14
+ /**
15
+ * Built-in device profiles covering a range of form factors.
16
+ * Uses Playwright's device descriptors where available,
17
+ * with custom desktop profiles added.
18
+ */
19
+ export declare const builtinDevices: DeviceProfile[];
20
+ /**
21
+ * Manages device assignment via round-robin rotation.
22
+ *
23
+ * Each actor gets the next device in the pool. The rotation advances
24
+ * globally across all actors and scenes within a run, so no one "picks"
25
+ * their device — it just rotates around.
26
+ *
27
+ * The pool can be the built-in set or a custom set from config.
28
+ */
29
+ export declare class DeviceRotation {
30
+ private pool;
31
+ private index;
32
+ constructor(devices?: DeviceProfile[]);
33
+ /**
34
+ * Get the next device in rotation.
35
+ * Advances the internal counter so successive calls yield different devices.
36
+ */
37
+ next(): DeviceProfile;
38
+ /**
39
+ * Peek at the next device without advancing the counter.
40
+ */
41
+ peek(): DeviceProfile;
42
+ /**
43
+ * Reset rotation to the beginning.
44
+ */
45
+ reset(): void;
46
+ /**
47
+ * Get the current rotation index (for reporting).
48
+ */
49
+ get currentIndex(): number;
50
+ /**
51
+ * Get the full device pool.
52
+ */
53
+ get devices(): readonly DeviceProfile[];
54
+ }
55
+ //# sourceMappingURL=devices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IACzC,8FAA8F;IAC9F,cAAc,EAAE,qBAAqB,CAAA;CACtC;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,EA8GzC,CAAA;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,KAAK,CAAI;gBAEL,OAAO,CAAC,EAAE,aAAa,EAAE;IAIrC;;;OAGG;IACH,IAAI,IAAI,aAAa;IAMrB;;OAEG;IACH,IAAI,IAAI,aAAa;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,SAAS,aAAa,EAAE,CAEtC;CACF"}