@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,653 @@
1
+ import type { Page, BrowserContext } from 'playwright';
2
+ import type { ScenetestConfig as BaseConfig } from '@scenetest/checks';
3
+ import type { DeviceProfile } from './devices.js';
4
+ /**
5
+ * Selector: space-separated tokens that resolve to DOM elements.
6
+ *
7
+ * Each token matches (in order): aria-label, id, data-testid, data-name, data-key, name
8
+ *
9
+ * Special behavior: after matching a token, if the SAME element has a data-key
10
+ * matching the NEXT token, that token is consumed without descending.
11
+ *
12
+ * @example
13
+ * 'button' // Simple selector
14
+ * 'modal form submit-button' // Nested: modal > form > submit-button
15
+ * 'playlist-row 12345 like-button' // If playlist-row has data-key="12345", stays on same element
16
+ */
17
+ export type Selector = string;
18
+ /**
19
+ * Actor credentials and identity from config
20
+ */
21
+ export interface ActorConfig {
22
+ id: string;
23
+ username?: string;
24
+ email?: string;
25
+ password?: string;
26
+ [key: string]: unknown;
27
+ }
28
+ /**
29
+ * A team is a complete set of actors with roles as keys.
30
+ * Each team is a self-contained world where all relationships hold.
31
+ */
32
+ export type TeamConfig = Record<string, ActorConfig>;
33
+ /**
34
+ * Scenetest CLI configuration.
35
+ *
36
+ * Extends the base ScenetestConfig from @scenetest/checks with runner-specific
37
+ * fields (browser, headed, devices, hooks, etc.).
38
+ *
39
+ * Actor teams are not defined here — they are auto-discovered from
40
+ * actor files: `actors.ts` (array of teams) or `actors/*.ts` (one team per file).
41
+ */
42
+ export interface ScenetestConfig extends BaseConfig {
43
+ /** Base URL for the application (required for CLI runner) */
44
+ baseUrl: string;
45
+ /** Patterns to ignore */
46
+ ignore?: string[];
47
+ /** Browser to use */
48
+ browser?: 'chromium' | 'firefox' | 'webkit';
49
+ /** Show browser window */
50
+ headed?: boolean;
51
+ /** Slow down actions by this many ms */
52
+ slowMo?: number;
53
+ /** Scene timeout in ms */
54
+ timeout?: number;
55
+ /** Individual action timeout in ms */
56
+ actionTimeout?: number;
57
+ /** Warn threshold in ms - emit warning if action takes longer than this (default: 500) */
58
+ warnAfter?: number;
59
+ /**
60
+ * Selector aliases - map shorthand names to CSS selectors.
61
+ * Use with ~ prefix: user.see('~modal')
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * aliases: {
66
+ * modal: '[role=dialog]',
67
+ * 'btn-p': 'button[type=submit], button.primary',
68
+ * nav: '[role=navigation]',
69
+ * }
70
+ * ```
71
+ */
72
+ aliases?: Record<string, string>;
73
+ /** Report output directory */
74
+ reportDir?: string;
75
+ /** Report format */
76
+ reportFormat?: 'html' | 'json' | 'both';
77
+ /**
78
+ * Device rotation: assign each actor a rotating device profile.
79
+ * When true, uses built-in device pool (mobile, tablet, desktop).
80
+ * When an array of DeviceProfile, uses that as the pool.
81
+ * When false or omitted, all actors get the default Playwright context (no device emulation).
82
+ */
83
+ devices?: boolean | DeviceProfile[];
84
+ /**
85
+ * Swarm mode configuration.
86
+ * When set, enables automatic swarm triggering based on failure thresholds.
87
+ */
88
+ swarm?: SwarmConfig;
89
+ /** Hook: before all scenes run */
90
+ beforeAll?: () => Promise<void>;
91
+ /** Hook: after all scenes run */
92
+ afterAll?: () => Promise<void>;
93
+ /** Hook: before each scene */
94
+ beforeEach?: (scene: SceneInfo) => Promise<void>;
95
+ /** Hook: after each scene */
96
+ afterEach?: (scene: SceneInfo, report: SceneReport) => Promise<void>;
97
+ }
98
+ /**
99
+ * Scene metadata
100
+ */
101
+ export interface SceneInfo {
102
+ name: string;
103
+ file: string;
104
+ }
105
+ /**
106
+ * Assertion result from app code
107
+ */
108
+ export interface AssertionResult {
109
+ type: 'pass' | 'fail';
110
+ description: string;
111
+ result: boolean;
112
+ timestamp: number;
113
+ stack?: string;
114
+ context?: Record<string, unknown>;
115
+ location?: {
116
+ file: string;
117
+ line: number;
118
+ column?: number;
119
+ };
120
+ /** Which actor's browser triggered this */
121
+ actor?: string;
122
+ /** Device the actor was using when this assertion fired */
123
+ device?: string;
124
+ }
125
+ /**
126
+ * Script-level warning (not an assertion failure).
127
+ * These indicate unexpected paths in the test script itself,
128
+ * not failures in the application under test.
129
+ */
130
+ export interface ScriptWarning {
131
+ /** The selector that triggered this warning */
132
+ selector: string;
133
+ /** Human-readable message explaining why this is unexpected */
134
+ message: string;
135
+ /** When the warning was triggered */
136
+ timestamp: number;
137
+ /** Which actor encountered this */
138
+ actor: string;
139
+ /** Action that was executing when the warning triggered */
140
+ duringAction?: string;
141
+ }
142
+ /**
143
+ * Timeline entry for scene actions
144
+ */
145
+ export interface TimelineEntry {
146
+ action: string;
147
+ target?: string;
148
+ actor: string;
149
+ timestamp: number;
150
+ duration?: number;
151
+ error?: string;
152
+ }
153
+ /**
154
+ * Report for a single scene run
155
+ */
156
+ export interface SceneReport {
157
+ name: string;
158
+ file: string;
159
+ status: 'completed' | 'failed' | 'timeout';
160
+ teamIndex: number;
161
+ actors: Record<string, {
162
+ id: string;
163
+ username?: string;
164
+ device?: string;
165
+ }>;
166
+ assertions: AssertionResult[];
167
+ warnings: ScriptWarning[];
168
+ timeline: TimelineEntry[];
169
+ duration: number;
170
+ error?: string;
171
+ }
172
+ /**
173
+ * Full run report
174
+ */
175
+ export interface RunReport {
176
+ timestamp: string;
177
+ duration: number;
178
+ scenes: SceneReport[];
179
+ summary: {
180
+ scenes: number;
181
+ completed: number;
182
+ failed: number;
183
+ assertions: {
184
+ total: number;
185
+ passed: number;
186
+ failed: number;
187
+ };
188
+ warnings: number;
189
+ };
190
+ /** Present when this run was triggered by swarm mode */
191
+ swarm?: SwarmReport;
192
+ }
193
+ /**
194
+ * Swarm mode configuration
195
+ */
196
+ export interface SwarmConfig {
197
+ /**
198
+ * Number of consecutive failed assertions (across runs) before triggering swarm.
199
+ * Default: 5
200
+ */
201
+ failureThreshold?: number;
202
+ /**
203
+ * How many recent runs to consider when evaluating whether failures persist.
204
+ * Default: 3
205
+ */
206
+ windowSize?: number;
207
+ /**
208
+ * Maximum concurrent teams during swarm execution.
209
+ * Use to limit database/memory pressure.
210
+ * Default: all teams (no throttle)
211
+ */
212
+ concurrency?: number;
213
+ /**
214
+ * Number of times to repeat each scene during swarm mode.
215
+ * More repeats = better signal on flaky vs broken.
216
+ * Default: 3
217
+ */
218
+ repeats?: number;
219
+ /**
220
+ * Whether to trigger swarm mode automatically when thresholds are exceeded.
221
+ * When false, swarm is only triggered via CLI flag.
222
+ * Default: true
223
+ */
224
+ auto?: boolean;
225
+ }
226
+ /**
227
+ * Classification of a scene after swarm analysis
228
+ */
229
+ export type SwarmClassification =
230
+ /** Always fails across all teams and repeats */
231
+ 'broken'
232
+ /** Fails intermittently — sometimes passes, sometimes fails */
233
+ | 'flaky'
234
+ /** Fails only with specific team data (seed data edge case) */
235
+ | 'seed-data-edge-case'
236
+ /** Passes consistently — the original failure may have been transient */
237
+ | 'healthy';
238
+ /**
239
+ * Swarm result for a single scene
240
+ */
241
+ export interface SwarmSceneResult {
242
+ /** Scene name */
243
+ name: string;
244
+ /** Scene file */
245
+ file: string;
246
+ /** How many times this scene was run */
247
+ runs: number;
248
+ /** How many times it passed */
249
+ passed: number;
250
+ /** How many times it failed */
251
+ failed: number;
252
+ /** Which teams experienced failures (indices) */
253
+ failingTeams: number[];
254
+ /** Which teams passed (indices) */
255
+ passingTeams: number[];
256
+ /** Automatic classification */
257
+ classification: SwarmClassification;
258
+ /** Per-run detail */
259
+ details: SwarmRunDetail[];
260
+ }
261
+ /**
262
+ * Detail for a single swarm run of a scene
263
+ */
264
+ export interface SwarmRunDetail {
265
+ teamIndex: number;
266
+ repeat: number;
267
+ status: 'completed' | 'failed' | 'timeout';
268
+ duration: number;
269
+ assertionsFailed: number;
270
+ assertionsTotal: number;
271
+ error?: string;
272
+ actors: Record<string, {
273
+ device?: string;
274
+ }>;
275
+ }
276
+ /**
277
+ * Full swarm report
278
+ */
279
+ export interface SwarmReport {
280
+ /** Why swarm was triggered */
281
+ trigger: 'auto' | 'manual';
282
+ /** Scenes that were swarmed */
283
+ results: SwarmSceneResult[];
284
+ /** Summary counts by classification */
285
+ summary: {
286
+ broken: number;
287
+ flaky: number;
288
+ seedDataEdgeCase: number;
289
+ healthy: number;
290
+ };
291
+ }
292
+ /**
293
+ * Live actor instance during a scene
294
+ */
295
+ export interface Actor {
296
+ /** Actor ID from config */
297
+ id: string;
298
+ /** Role this actor is playing */
299
+ role: string;
300
+ /** Actor config (username, email, etc.) */
301
+ config: ActorConfig;
302
+ /** Playwright page for this actor */
303
+ page: Page;
304
+ /** Playwright browser context for this actor */
305
+ context: BrowserContext;
306
+ /** Collected assertions for this actor */
307
+ assertions: AssertionResult[];
308
+ }
309
+ /**
310
+ * Context passed to scene function
311
+ */
312
+ export interface SceneContext {
313
+ /** Get an actor by role from the current team */
314
+ actor: (role: string) => Promise<SequentialActorHandle>;
315
+ /** The team index assigned to this scene */
316
+ teamIndex: number;
317
+ }
318
+ /**
319
+ * Sequential actor handle with chainable DSL (classic driver model).
320
+ *
321
+ * Each DSL call returns an `ActionChain` — a separate object that queues
322
+ * actions and executes them when awaited. Scope lives on the chain and
323
+ * resets at each `await` boundary.
324
+ */
325
+ export interface SequentialActorHandle extends ActorConfig {
326
+ /** Role this actor is playing */
327
+ role: string;
328
+ /** Playwright page */
329
+ page: Page;
330
+ /** Open browser to URL (full page load, not SPA routing) */
331
+ openTo(url: string): ActionChain;
332
+ /**
333
+ * Wait for element to be visible and set it as the current scope.
334
+ * Supports nested selectors: 'parent child'
335
+ * Supports tuple selectors: ['playlist-row', '12345'] for name + key
336
+ */
337
+ see(selector: Selector): ActionChain;
338
+ /**
339
+ * Wait for element to be visible, in the viewport (no scroll), and set it as scope.
340
+ * Like see() but additionally verifies the element is within the current viewport bounds.
341
+ * Fails if the element exists but requires scrolling to reach.
342
+ */
343
+ seeInView(selector: Selector): ActionChain;
344
+ /** Wait for element to NOT be visible (hidden or detached) */
345
+ notSee(selector: Selector): ActionChain;
346
+ /** Wait for text to be visible */
347
+ seeText(text: string): ActionChain;
348
+ /** Wait for element to appear AND disappear (for toasts/notifications) */
349
+ seeToast(selector: Selector): ActionChain;
350
+ /**
351
+ * Click element within current scope.
352
+ * If no selector is given, clicks the current scope itself (the element from the last see()).
353
+ * Supports nested selectors: 'parent child'
354
+ * Supports tuple selectors: ['button', '12345'] for name + key
355
+ */
356
+ click(selector?: Selector): ActionChain;
357
+ /**
358
+ * Type into input within current scope.
359
+ * Supports nested selectors: 'parent child'
360
+ * Supports tuple selectors: ['input', '12345'] for name + key
361
+ */
362
+ typeInto(selector: Selector, value: string): ActionChain;
363
+ /** Check checkbox within current scope */
364
+ check(selector: Selector): ActionChain;
365
+ /** Select option in dropdown within current scope */
366
+ select(selector: Selector, value: string): ActionChain;
367
+ /** Wait for specified milliseconds */
368
+ wait(ms: number): ActionChain;
369
+ /** Emit message to the message bus */
370
+ emit(message: string): ActionChain;
371
+ /** Block until message arrives on the message bus */
372
+ waitFor(message: string): ActionChain;
373
+ /** Execute custom action */
374
+ do(fn: (page: Page) => Promise<void>): ActionChain;
375
+ /** Scroll the current scope (or nearest scrollable ancestor) to the bottom */
376
+ scrollToBottom(): ActionChain;
377
+ /**
378
+ * Navigate up to an ancestor matching the selector.
379
+ * If no selector is given, resets scope to page root.
380
+ * Use with aliases like ~container to find named containers.
381
+ *
382
+ * @example
383
+ * ```ts
384
+ * user.see('button').up('~container').see('other-element')
385
+ * user.see('deep nested thing').up() // back to page root
386
+ * ```
387
+ */
388
+ up(selector?: Selector): ActionChain;
389
+ /**
390
+ * Return to the previously held scope.
391
+ * Useful after navigating with up() or drilling into a child.
392
+ *
393
+ * @example
394
+ * ```ts
395
+ * user.see('parent').see('child').prev().click('sibling')
396
+ * ```
397
+ */
398
+ prev(): ActionChain;
399
+ /**
400
+ * Execute a text DSL string.
401
+ * Parses the multiline string into actions and queues them on the chain.
402
+ *
403
+ * @example
404
+ * ```ts
405
+ * await user.dsl(`
406
+ * openTo /login
407
+ * see login-form
408
+ * typeInto email alice@test.com
409
+ * click submit
410
+ * `)
411
+ * ```
412
+ */
413
+ dsl(text: string): ActionChain;
414
+ /**
415
+ * Register a conditional watcher. If the selector becomes visible during
416
+ * the next awaited action, the callback will be executed.
417
+ * Watchers are cleared after each await.
418
+ */
419
+ if(selector: Selector, callback: () => Promise<void>): void;
420
+ /**
421
+ * Register a script warning. If the selector becomes visible during
422
+ * subsequent actions, a warning is recorded (but test continues).
423
+ * Use for unexpected paths that aren't failures.
424
+ *
425
+ * @example
426
+ * ```ts
427
+ * user.warnIf('welcome-modal', 'should not see welcome - user has dismiss flag')
428
+ * await user.see('dashboard')
429
+ * ```
430
+ */
431
+ warnIf(selector: Selector, message: string): void;
432
+ }
433
+ /**
434
+ * Chainable action builder
435
+ */
436
+ export interface ActionChain extends PromiseLike<void> {
437
+ /** Open browser to URL (full page load, not SPA routing) */
438
+ openTo(url: string): ActionChain;
439
+ /**
440
+ * Wait for element to be visible and set it as the current scope.
441
+ * Subsequent actions (click, typeInto, etc.) will look within this scope.
442
+ */
443
+ see(selector: Selector): ActionChain;
444
+ /**
445
+ * Wait for element to be visible AND in the viewport (no scroll), and set it as scope.
446
+ * Fails if the element exists but requires scrolling to reach.
447
+ */
448
+ seeInView(selector: Selector): ActionChain;
449
+ /** Wait for element to NOT be visible (hidden or detached) */
450
+ notSee(selector: Selector): ActionChain;
451
+ /** Wait for text to be visible */
452
+ seeText(text: string): ActionChain;
453
+ /** Wait for element to appear AND disappear (for toasts/notifications) */
454
+ seeToast(selector: Selector): ActionChain;
455
+ /** Click element within current scope, or click current scope if no selector given */
456
+ click(selector?: Selector): ActionChain;
457
+ /** Type into input within current scope */
458
+ typeInto(selector: Selector, value: string): ActionChain;
459
+ /** Check checkbox within current scope */
460
+ check(selector: Selector): ActionChain;
461
+ /** Select option in dropdown within current scope */
462
+ select(selector: Selector, value: string): ActionChain;
463
+ /** Wait for specified milliseconds */
464
+ wait(ms: number): ActionChain;
465
+ /** Emit message to the message bus */
466
+ emit(message: string): ActionChain;
467
+ /** Block until message arrives on the message bus */
468
+ waitFor(message: string): ActionChain;
469
+ /** Execute custom action */
470
+ do(fn: (page: Page) => Promise<void>): ActionChain;
471
+ /** Scroll the current scope (or nearest scrollable ancestor) to the bottom */
472
+ scrollToBottom(): ActionChain;
473
+ /** Navigate up to ancestor matching selector, or reset to page root if no selector */
474
+ up(selector?: Selector): ActionChain;
475
+ /**
476
+ * Return to the previously held scope.
477
+ * Useful after navigating with up() or drilling into a child.
478
+ *
479
+ * @example
480
+ * ```ts
481
+ * user.see('parent').see('child').prev().click('sibling')
482
+ * ```
483
+ */
484
+ prev(): ActionChain;
485
+ /**
486
+ * Execute a text DSL string.
487
+ * Parses the multiline string into actions and queues them on the chain.
488
+ *
489
+ * @example
490
+ * ```ts
491
+ * await user.see('form').dsl(`
492
+ * typeInto email alice@test.com
493
+ * typeInto password secret
494
+ * click submit
495
+ * `)
496
+ * ```
497
+ */
498
+ dsl(text: string): ActionChain;
499
+ }
500
+ /**
501
+ * Scene definition function
502
+ */
503
+ export type SceneFn = (context: SceneContext) => Promise<void>;
504
+ /**
505
+ * Registered scene
506
+ */
507
+ export interface RegisteredScene {
508
+ name: string;
509
+ fn: SceneFn;
510
+ file: string;
511
+ }
512
+ /**
513
+ * Minimal interface that both `SequentialActorHandle` and `ConcurrentActorHandle` satisfy.
514
+ *
515
+ * `runMacro()` and the `dsl()` method on actors all operate
516
+ * against this structural type so they work with both execution models.
517
+ *
518
+ * Return types are `unknown` because scene-model methods return `ActionChain`
519
+ * while reactive methods return the actor itself — the text DSL doesn't
520
+ * inspect return values.
521
+ */
522
+ export interface DslTarget {
523
+ openTo(url: string): unknown;
524
+ see(selector: Selector): unknown;
525
+ seeInView(selector: Selector): unknown;
526
+ notSee(selector: Selector): unknown;
527
+ seeText(text: string): unknown;
528
+ seeToast(selector: Selector): unknown;
529
+ click(selector?: Selector): unknown;
530
+ typeInto(selector: Selector, value: string): unknown;
531
+ check(selector: Selector): unknown;
532
+ select(selector: Selector, value: string): unknown;
533
+ wait(ms: number): unknown;
534
+ emit(message: string): unknown;
535
+ warnIf(selector: Selector, message: string): void;
536
+ up(selector?: Selector): unknown;
537
+ prev(): unknown;
538
+ scrollToBottom(): unknown;
539
+ /** Block until message arrives on the bus */
540
+ waitFor(message: string): unknown;
541
+ }
542
+ /**
543
+ * Concurrent actor handle (declarative / flow model).
544
+ *
545
+ * Every DSL method pushes an action onto the actor's persistent queue and
546
+ * returns `this`, so methods are chainable without `await`.
547
+ * Nothing executes until the flow runner calls `drain()`.
548
+ *
549
+ * Scope lives on the actor (not on a throwaway chain) and flows through
550
+ * the queue during sequential drain execution.
551
+ */
552
+ export interface ConcurrentActorHandle {
553
+ /** Role this actor is playing */
554
+ readonly role: string;
555
+ /** Actor ID from config */
556
+ readonly id: string;
557
+ /** Actor credentials forwarded from config */
558
+ readonly username?: string;
559
+ readonly email?: string;
560
+ readonly password?: string;
561
+ [key: string]: unknown;
562
+ /** Playwright page for low-level access */
563
+ readonly page: Page;
564
+ /** Number of queued actions (for testing/inspection) */
565
+ readonly pending: number;
566
+ openTo(url: string): ConcurrentActorHandle;
567
+ scrollToBottom(): ConcurrentActorHandle;
568
+ see(selector: Selector): ConcurrentActorHandle;
569
+ seeInView(selector: Selector): ConcurrentActorHandle;
570
+ notSee(selector: Selector): ConcurrentActorHandle;
571
+ seeText(text: string): ConcurrentActorHandle;
572
+ seeToast(selector: Selector): ConcurrentActorHandle;
573
+ click(selector?: Selector): ConcurrentActorHandle;
574
+ typeInto(selector: Selector, value: string): ConcurrentActorHandle;
575
+ check(selector: Selector): ConcurrentActorHandle;
576
+ select(selector: Selector, value: string): ConcurrentActorHandle;
577
+ up(selector?: Selector): ConcurrentActorHandle;
578
+ prev(): ConcurrentActorHandle;
579
+ wait(ms: number): ConcurrentActorHandle;
580
+ emit(message: string): ConcurrentActorHandle;
581
+ /** Block this actor's queue until a message arrives on the bus */
582
+ waitFor(message: string): ConcurrentActorHandle;
583
+ do(fn: (page: Page) => Promise<void>): ConcurrentActorHandle;
584
+ warnIf(selector: Selector, message: string): void;
585
+ /**
586
+ * Persistent conditional monitor.
587
+ *
588
+ * Polls during every subsequent action. When `selector` becomes
589
+ * visible, the sub-actions declared inside `callback` execute inline
590
+ * (one-shot). The callback receives the actor; DSL calls inside it
591
+ * are captured as the monitor's sub-actions.
592
+ */
593
+ if(selector: Selector, callback: (actor: ConcurrentActorHandle) => void): void;
594
+ /**
595
+ * Queue actions from a text DSL string.
596
+ * Parses the multiline string and pushes each action onto the queue.
597
+ *
598
+ * @example
599
+ * ```ts
600
+ * user.dsl(`
601
+ * openTo /login
602
+ * see login-form
603
+ * typeInto email alice@test.com
604
+ * click submit
605
+ * `)
606
+ * ```
607
+ */
608
+ dsl(text: string): ConcurrentActorHandle;
609
+ }
610
+ /**
611
+ * Context passed to a flow function.
612
+ *
613
+ * `actor()` is synchronous — it returns a reactive handle immediately.
614
+ * Browser contexts are created in parallel after the declaration phase,
615
+ * before actors begin draining their queues.
616
+ */
617
+ export interface FlowContext {
618
+ /** Get or create a concurrent actor by role (synchronous — no await needed) */
619
+ actor: (role: string) => ConcurrentActorHandle;
620
+ /** The team index assigned to this flow */
621
+ teamIndex: number;
622
+ }
623
+ /**
624
+ * Flow definition function.
625
+ *
626
+ * The function body is the *declaration phase* — actor creation and DSL
627
+ * calls are all synchronous. After it returns, browsers launch in parallel,
628
+ * then all actors drain their queues concurrently.
629
+ *
630
+ * The function may be async (for backward compatibility or if you need
631
+ * top-level await for non-actor reasons), but it doesn't need to be.
632
+ */
633
+ export type FlowFn = (context: FlowContext) => void | Promise<void>;
634
+ /**
635
+ * CLI options
636
+ */
637
+ export interface CLIOptions {
638
+ /** Run in interactive UI mode */
639
+ ui?: boolean;
640
+ /** Run with visible browser */
641
+ headed?: boolean;
642
+ /** Report output directory */
643
+ report?: string;
644
+ /** Report format */
645
+ format?: 'html' | 'json' | 'both';
646
+ /** Config file path */
647
+ config?: string;
648
+ /** Enable device rotation */
649
+ devices?: boolean;
650
+ /** Force swarm mode (run all teams against all scenes) */
651
+ swarm?: boolean;
652
+ }
653
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}