@scenetest/scenes 0.1.2 → 0.2.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 (64) hide show
  1. package/dist/__tests__/markdown-scene.test.js +134 -2
  2. package/dist/__tests__/markdown-scene.test.js.map +1 -1
  3. package/dist/__tests__/selectors.test.d.ts +2 -0
  4. package/dist/__tests__/selectors.test.d.ts.map +1 -0
  5. package/dist/__tests__/selectors.test.js +165 -0
  6. package/dist/__tests__/selectors.test.js.map +1 -0
  7. package/dist/__tests__/swarm.test.js +1 -0
  8. package/dist/__tests__/swarm.test.js.map +1 -1
  9. package/dist/__tests__/team-manager.test.d.ts +2 -0
  10. package/dist/__tests__/team-manager.test.d.ts.map +1 -0
  11. package/dist/__tests__/team-manager.test.js +180 -0
  12. package/dist/__tests__/team-manager.test.js.map +1 -0
  13. package/dist/__tests__/warmup.test.d.ts +2 -0
  14. package/dist/__tests__/warmup.test.d.ts.map +1 -0
  15. package/dist/__tests__/warmup.test.js +170 -0
  16. package/dist/__tests__/warmup.test.js.map +1 -0
  17. package/dist/cli.js +37 -1
  18. package/dist/cli.js.map +1 -1
  19. package/dist/config.d.ts +21 -2
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js +54 -4
  22. package/dist/config.js.map +1 -1
  23. package/dist/index.d.ts +3 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/markdown-scene.d.ts +2 -0
  28. package/dist/markdown-scene.d.ts.map +1 -1
  29. package/dist/markdown-scene.js +24 -7
  30. package/dist/markdown-scene.js.map +1 -1
  31. package/dist/prompt-generator.d.ts +59 -0
  32. package/dist/prompt-generator.d.ts.map +1 -0
  33. package/dist/prompt-generator.js +517 -0
  34. package/dist/prompt-generator.js.map +1 -0
  35. package/dist/reactive.d.ts +2 -1
  36. package/dist/reactive.d.ts.map +1 -1
  37. package/dist/reactive.js +22 -53
  38. package/dist/reactive.js.map +1 -1
  39. package/dist/runner.d.ts +8 -2
  40. package/dist/runner.d.ts.map +1 -1
  41. package/dist/runner.js +70 -3
  42. package/dist/runner.js.map +1 -1
  43. package/dist/scene.d.ts +8 -1
  44. package/dist/scene.d.ts.map +1 -1
  45. package/dist/scene.js +6 -15
  46. package/dist/scene.js.map +1 -1
  47. package/dist/selectors.d.ts.map +1 -1
  48. package/dist/selectors.js +8 -39
  49. package/dist/selectors.js.map +1 -1
  50. package/dist/swarm.d.ts +1 -1
  51. package/dist/swarm.d.ts.map +1 -1
  52. package/dist/swarm.js +10 -1
  53. package/dist/swarm.js.map +1 -1
  54. package/dist/team-manager.d.ts +28 -5
  55. package/dist/team-manager.d.ts.map +1 -1
  56. package/dist/team-manager.js +94 -15
  57. package/dist/team-manager.js.map +1 -1
  58. package/dist/types.d.ts +92 -0
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/warmup.d.ts +61 -0
  61. package/dist/warmup.d.ts.map +1 -0
  62. package/dist/warmup.js +186 -0
  63. package/dist/warmup.js.map +1 -0
  64. package/package.json +2 -2
@@ -0,0 +1,180 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { TeamManager } from '../team-manager.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Helpers
5
+ // ---------------------------------------------------------------------------
6
+ const MOCK_WARMUP_STATE = {
7
+ cookies: [{ name: 'session', value: 'abc', domain: 'localhost', path: '/', expires: -1, httpOnly: false, secure: false, sameSite: 'Lax' }],
8
+ origins: [{ origin: 'http://localhost:3000', localStorage: [{ name: 'token', value: 'from-warmup' }] }],
9
+ };
10
+ function mockPage() {
11
+ return {
12
+ goto: vi.fn().mockResolvedValue(undefined),
13
+ exposeFunction: vi.fn().mockResolvedValue(undefined),
14
+ locator: vi.fn().mockReturnValue({
15
+ waitFor: vi.fn().mockResolvedValue(undefined),
16
+ click: vi.fn().mockResolvedValue(undefined),
17
+ fill: vi.fn().mockResolvedValue(undefined),
18
+ first: vi.fn().mockReturnThis(),
19
+ }),
20
+ getByText: vi.fn().mockReturnValue({
21
+ first: vi.fn().mockReturnValue({
22
+ waitFor: vi.fn().mockResolvedValue(undefined),
23
+ }),
24
+ }),
25
+ };
26
+ }
27
+ function mockContext() {
28
+ return {
29
+ newPage: vi.fn().mockResolvedValue(mockPage()),
30
+ storageState: vi.fn().mockResolvedValue(MOCK_WARMUP_STATE),
31
+ close: vi.fn().mockResolvedValue(undefined),
32
+ };
33
+ }
34
+ function mockBrowser() {
35
+ return {
36
+ newContext: vi.fn().mockImplementation(() => Promise.resolve(mockContext())),
37
+ close: vi.fn().mockResolvedValue(undefined),
38
+ };
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // storageState injection via getActor / createPage
42
+ // ---------------------------------------------------------------------------
43
+ describe('TeamSession storageState injection', () => {
44
+ it('creates context with no storageState when actor has neither warmup nor localStorage', async () => {
45
+ const browser = mockBrowser();
46
+ const teams = [{
47
+ actors: { user: { key: 'u1' } },
48
+ meta: {},
49
+ }];
50
+ const manager = new TeamManager(teams);
51
+ manager.setBrowser(browser);
52
+ const session = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
53
+ await session.getActor('user');
54
+ const opts = browser.newContext.mock.calls[0][0];
55
+ expect(opts.storageState).toBeUndefined();
56
+ expect(opts.baseURL).toBe('http://localhost:3000');
57
+ });
58
+ it('lazily runs warmup on first getActor and injects storageState', async () => {
59
+ const browser = mockBrowser();
60
+ const teams = [{
61
+ actors: { user: { key: 'u1', warmup: async () => { } } },
62
+ meta: {},
63
+ }];
64
+ const manager = new TeamManager(teams);
65
+ manager.setBrowser(browser);
66
+ const session = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
67
+ await session.getActor('user');
68
+ // newContext called twice: once for warmup (temp context), once for the actor
69
+ expect(browser.newContext).toHaveBeenCalledTimes(2);
70
+ const actorContextOpts = browser.newContext.mock.calls[1][0];
71
+ expect(actorContextOpts.storageState).toBeDefined();
72
+ expect(actorContextOpts.storageState.cookies).toHaveLength(1);
73
+ });
74
+ it('injects actor localStorage without warmup', async () => {
75
+ const browser = mockBrowser();
76
+ const teams = [{
77
+ actors: {
78
+ user: {
79
+ key: 'u1',
80
+ localStorage: { 'intro-seen': 'true', 'theme': 'dark' },
81
+ },
82
+ },
83
+ meta: {},
84
+ }];
85
+ const manager = new TeamManager(teams);
86
+ manager.setBrowser(browser);
87
+ const session = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
88
+ await session.getActor('user');
89
+ // Only one newContext call (no warmup)
90
+ expect(browser.newContext).toHaveBeenCalledTimes(1);
91
+ const opts = browser.newContext.mock.calls[0][0];
92
+ expect(opts.storageState).toBeDefined();
93
+ expect(opts.storageState.cookies).toEqual([]);
94
+ const origin = opts.storageState.origins.find((o) => o.origin === 'http://localhost:3000');
95
+ expect(origin).toBeDefined();
96
+ expect(origin.localStorage).toEqual(expect.arrayContaining([
97
+ { name: 'intro-seen', value: 'true' },
98
+ { name: 'theme', value: 'dark' },
99
+ ]));
100
+ });
101
+ it('merges actor localStorage on top of warmup storageState', async () => {
102
+ const browser = mockBrowser();
103
+ const teams = [{
104
+ actors: {
105
+ user: {
106
+ key: 'u1',
107
+ warmup: async () => { },
108
+ localStorage: { 'intro-seen': 'true', 'token': 'override' },
109
+ },
110
+ },
111
+ meta: {},
112
+ }];
113
+ const manager = new TeamManager(teams);
114
+ manager.setBrowser(browser);
115
+ const session = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
116
+ await session.getActor('user');
117
+ // warmup context + actor context
118
+ const actorContextOpts = browser.newContext.mock.calls[1][0];
119
+ const origin = actorContextOpts.storageState.origins.find((o) => o.origin === 'http://localhost:3000');
120
+ // 'token' should be overridden by actor config
121
+ const tokenEntry = origin.localStorage.find((e) => e.name === 'token');
122
+ expect(tokenEntry.value).toBe('override');
123
+ // 'intro-seen' should be added
124
+ const introEntry = origin.localStorage.find((e) => e.name === 'intro-seen');
125
+ expect(introEntry.value).toBe('true');
126
+ // cookies from warmup should still be present
127
+ expect(actorContextOpts.storageState.cookies).toHaveLength(1);
128
+ });
129
+ it('injects storageState via createPage (used by flow model)', async () => {
130
+ const browser = mockBrowser();
131
+ const teams = [{
132
+ actors: {
133
+ user: {
134
+ key: 'u1',
135
+ localStorage: { 'flag': 'on' },
136
+ },
137
+ },
138
+ meta: {},
139
+ }];
140
+ const manager = new TeamManager(teams);
141
+ manager.setBrowser(browser);
142
+ const session = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
143
+ await session.createPage('user');
144
+ const opts = browser.newContext.mock.calls[0][0];
145
+ expect(opts.storageState).toBeDefined();
146
+ const origin = opts.storageState.origins.find((o) => o.origin === 'http://localhost:3000');
147
+ expect(origin.localStorage).toEqual([{ name: 'flag', value: 'on' }]);
148
+ });
149
+ it('caches warmup across sessions (same actor key warmed up only once)', async () => {
150
+ const browser = mockBrowser();
151
+ const teams = [{
152
+ actors: { user: { key: 'shared-key', warmup: async () => { } } },
153
+ meta: {},
154
+ }];
155
+ const manager = new TeamManager(teams);
156
+ manager.setBrowser(browser);
157
+ // First session
158
+ const session1 = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
159
+ await session1.getActor('user');
160
+ // Second session — same actor key should reuse cached warmup
161
+ const session2 = await manager.createSession(0, 5000, 500, 'http://localhost:3000');
162
+ await session2.getActor('user');
163
+ // 1 warmup context + 2 actor contexts = 3 total
164
+ expect(browser.newContext).toHaveBeenCalledTimes(3);
165
+ });
166
+ });
167
+ // ---------------------------------------------------------------------------
168
+ // TeamManager.getTeams
169
+ // ---------------------------------------------------------------------------
170
+ describe('TeamManager.getTeams', () => {
171
+ it('returns all resolved teams', () => {
172
+ const teams = [
173
+ { actors: { a: { key: '1' } }, meta: {} },
174
+ { actors: { b: { key: '2' } }, meta: { name: 'Team 2' } },
175
+ ];
176
+ const manager = new TeamManager(teams);
177
+ expect(manager.getTeams()).toBe(teams);
178
+ });
179
+ });
180
+ //# sourceMappingURL=team-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/team-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warmup.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warmup.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/warmup.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,170 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { WarmupCache, executeMacroOnPage } from '../warmup.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Helpers
5
+ // ---------------------------------------------------------------------------
6
+ const MOCK_STATE = {
7
+ cookies: [{ name: 'session', value: 'abc', domain: 'localhost', path: '/', expires: -1, httpOnly: false, secure: false, sameSite: 'Lax' }],
8
+ origins: [{ origin: 'http://localhost:3000', localStorage: [{ name: 'token', value: 'xyz' }] }],
9
+ };
10
+ function mockContext() {
11
+ return {
12
+ newPage: vi.fn().mockResolvedValue(mockPage()),
13
+ storageState: vi.fn().mockResolvedValue(MOCK_STATE),
14
+ close: vi.fn().mockResolvedValue(undefined),
15
+ };
16
+ }
17
+ function mockPage() {
18
+ const locator = {
19
+ waitFor: vi.fn().mockResolvedValue(undefined),
20
+ click: vi.fn().mockResolvedValue(undefined),
21
+ fill: vi.fn().mockResolvedValue(undefined),
22
+ first: vi.fn().mockReturnThis(),
23
+ isVisible: vi.fn().mockResolvedValue(true),
24
+ locator: vi.fn().mockReturnThis(),
25
+ filter: vi.fn().mockReturnThis(),
26
+ or: vi.fn().mockReturnThis(),
27
+ };
28
+ return {
29
+ goto: vi.fn().mockResolvedValue(undefined),
30
+ getByText: vi.fn().mockReturnValue(locator),
31
+ locator: vi.fn().mockReturnValue(locator),
32
+ _locator: locator,
33
+ };
34
+ }
35
+ function mockBrowser() {
36
+ return {
37
+ newContext: vi.fn().mockImplementation(() => Promise.resolve(mockContext())),
38
+ };
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // WarmupCache
42
+ // ---------------------------------------------------------------------------
43
+ describe('WarmupCache', () => {
44
+ it('returns undefined for actors without warmup', async () => {
45
+ const cache = new WarmupCache();
46
+ const result = await cache.ensure(mockBrowser(), { key: 'u1' }, 'http://localhost:3000', 5000);
47
+ expect(result).toBeUndefined();
48
+ expect(cache.size).toBe(0);
49
+ });
50
+ it('runs warmup on first use and caches the result', async () => {
51
+ const cache = new WarmupCache();
52
+ const browser = mockBrowser();
53
+ const config = {
54
+ key: 'u1',
55
+ warmup: async (_page, _actor) => { },
56
+ };
57
+ const result = await cache.ensure(browser, config, 'http://localhost:3000', 5000);
58
+ expect(result).toEqual(MOCK_STATE);
59
+ expect(cache.size).toBe(1);
60
+ expect(browser.newContext).toHaveBeenCalledTimes(1);
61
+ });
62
+ it('returns cached state on second call (no re-warmup)', async () => {
63
+ const cache = new WarmupCache();
64
+ const browser = mockBrowser();
65
+ const config = {
66
+ key: 'u1',
67
+ warmup: async () => { },
68
+ };
69
+ const first = await cache.ensure(browser, config, 'http://localhost:3000', 5000);
70
+ const second = await cache.ensure(browser, config, 'http://localhost:3000', 5000);
71
+ expect(first).toBe(second);
72
+ expect(browser.newContext).toHaveBeenCalledTimes(1); // only once
73
+ });
74
+ it('deduplicates concurrent requests for the same key', async () => {
75
+ const cache = new WarmupCache();
76
+ const browser = mockBrowser();
77
+ const config = {
78
+ key: 'u1',
79
+ warmup: async () => { },
80
+ };
81
+ // Fire two ensures concurrently
82
+ const [a, b] = await Promise.all([
83
+ cache.ensure(browser, config, 'http://localhost:3000', 5000),
84
+ cache.ensure(browser, config, 'http://localhost:3000', 5000),
85
+ ]);
86
+ expect(a).toBe(b);
87
+ expect(browser.newContext).toHaveBeenCalledTimes(1); // only one warmup ran
88
+ });
89
+ it('caches different keys independently', async () => {
90
+ const cache = new WarmupCache();
91
+ const browser = mockBrowser();
92
+ await cache.ensure(browser, { key: 'u1', warmup: async () => { } }, 'http://localhost:3000', 5000);
93
+ await cache.ensure(browser, { key: 'u2', warmup: async () => { } }, 'http://localhost:3000', 5000);
94
+ expect(cache.size).toBe(2);
95
+ expect(browser.newContext).toHaveBeenCalledTimes(2);
96
+ });
97
+ it('removes failed entry so it can be retried', async () => {
98
+ const cache = new WarmupCache();
99
+ let callCount = 0;
100
+ const browser = {
101
+ newContext: vi.fn().mockImplementation(() => {
102
+ callCount++;
103
+ if (callCount === 1) {
104
+ return Promise.resolve({
105
+ newPage: vi.fn().mockResolvedValue(mockPage()),
106
+ storageState: vi.fn().mockRejectedValue(new Error('session expired')),
107
+ close: vi.fn().mockResolvedValue(undefined),
108
+ });
109
+ }
110
+ return Promise.resolve(mockContext());
111
+ }),
112
+ };
113
+ const config = { key: 'u1', warmup: async () => { } };
114
+ // First attempt fails
115
+ await expect(cache.ensure(browser, config, 'http://localhost:3000', 5000)).rejects.toThrow();
116
+ expect(cache.size).toBe(0); // entry removed
117
+ // Second attempt succeeds
118
+ const result = await cache.ensure(browser, config, 'http://localhost:3000', 5000);
119
+ expect(result).toEqual(MOCK_STATE);
120
+ expect(cache.size).toBe(1);
121
+ });
122
+ });
123
+ // ---------------------------------------------------------------------------
124
+ // executeMacroOnPage
125
+ // ---------------------------------------------------------------------------
126
+ describe('executeMacroOnPage', () => {
127
+ it('executes openTo action', async () => {
128
+ const page = mockPage();
129
+ await executeMacroOnPage(page, ['openTo /login'], { key: 'u1' }, 5000);
130
+ expect(page.goto).toHaveBeenCalledWith('/login', { timeout: 5000 });
131
+ });
132
+ it('executes see action', async () => {
133
+ const page = mockPage();
134
+ await executeMacroOnPage(page, ['see login-form'], { key: 'u1' }, 5000);
135
+ expect(page._locator.waitFor).toHaveBeenCalledWith({ state: 'visible', timeout: 5000 });
136
+ });
137
+ it('executes click action', async () => {
138
+ const page = mockPage();
139
+ await executeMacroOnPage(page, ['click submit'], { key: 'u1' }, 5000);
140
+ expect(page._locator.click).toHaveBeenCalledWith({ timeout: 5000 });
141
+ });
142
+ it('executes typeInto with [self.field] interpolation', async () => {
143
+ const page = mockPage();
144
+ const config = { key: 'u1', email: 'test@example.com', password: 'secret' };
145
+ await executeMacroOnPage(page, ['typeInto email [self.email]', 'typeInto password [self.password]'], config, 5000);
146
+ expect(page._locator.fill).toHaveBeenCalledTimes(2);
147
+ expect(page._locator.fill).toHaveBeenCalledWith('test@example.com', { timeout: 5000 });
148
+ expect(page._locator.fill).toHaveBeenCalledWith('secret', { timeout: 5000 });
149
+ });
150
+ it('executes wait action', async () => {
151
+ const page = mockPage();
152
+ const start = Date.now();
153
+ await executeMacroOnPage(page, ['wait 50'], { key: 'u1' }, 5000);
154
+ expect(Date.now() - start).toBeGreaterThanOrEqual(40);
155
+ });
156
+ it('skips comments and empty lines', async () => {
157
+ const page = mockPage();
158
+ await executeMacroOnPage(page, ['# comment', '', '// another comment', 'openTo /'], { key: 'u1' }, 5000);
159
+ expect(page.goto).toHaveBeenCalledTimes(1);
160
+ });
161
+ it('throws on unsupported action', async () => {
162
+ const page = mockPage();
163
+ await expect(executeMacroOnPage(page, ['emit done'], { key: 'u1' }, 5000)).rejects.toThrow('unsupported action "emit"');
164
+ });
165
+ it('throws on unknown [self.field]', async () => {
166
+ const page = mockPage();
167
+ await expect(executeMacroOnPage(page, ['typeInto input [self.nonexistent]'], { key: 'u1' }, 5000)).rejects.toThrow('[self.nonexistent]');
168
+ });
169
+ });
170
+ //# sourceMappingURL=warmup.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warmup.test.js","sourceRoot":"","sources":["../../src/__tests__/warmup.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ import fs from 'fs';
5
5
  import { loadConfig } from './config.js';
6
6
  import { SceneRunner, printSummary } from './runner.js';
7
7
  import { init } from './init.js';
8
+ import { gatherProjectContext, generatePrompt, formatPromptOutput, } from './prompt-generator.js';
8
9
  const program = new Command();
9
10
  program
10
11
  .name('scenetest')
@@ -147,7 +148,7 @@ function generateHtmlReport(report) {
147
148
  return `
148
149
  <div class="scene">
149
150
  <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
+ <p class="meta">File: ${escapeHtml(scene.file)} | Duration: ${scene.duration}ms | Team: ${scene.team?.name ? escapeHtml(scene.team.name) : String(scene.teamIndex)}</p>
151
152
  ${actorDevices ? `<p class="devices">${actorDevices}</p>` : ''}
152
153
  ${scene.error ? `<p class="error">Error: ${escapeHtml(scene.error)}</p>` : ''}
153
154
  <h4>Assertions (${scene.assertions.length})</h4>
@@ -269,5 +270,40 @@ program
269
270
  process.exit(1);
270
271
  }
271
272
  });
273
+ program
274
+ .command('prompt')
275
+ .description('Generate LLM prompts for team/seed data creation')
276
+ .argument('<type>', 'Prompt type: teams, seeds, or both')
277
+ .option('-o, --output <file>', 'Write prompt to file instead of stdout')
278
+ .action(async (type, options) => {
279
+ if (!['teams', 'seeds', 'both'].includes(type)) {
280
+ console.error(`Error: Invalid prompt type "${type}". Must be: teams, seeds, or both`);
281
+ process.exit(1);
282
+ }
283
+ try {
284
+ console.error('Analyzing project...');
285
+ const ctx = await gatherProjectContext();
286
+ console.error(`Found:`);
287
+ console.error(` - ${ctx.userModels.length} user/account model files`);
288
+ console.error(` - ${ctx.dbSchema.length} database schema files`);
289
+ console.error(` - ${ctx.existingSeeds.length} existing seed files`);
290
+ console.error(` - ${ctx.existingScenes.length} scene files`);
291
+ console.error(` - ${ctx.existingActors.length} actor team files`);
292
+ console.error('');
293
+ const prompt = generatePrompt(ctx, type);
294
+ const output = formatPromptOutput(prompt, type);
295
+ if (options.output) {
296
+ fs.writeFileSync(options.output, output);
297
+ console.error(`Prompt written to: ${options.output}`);
298
+ }
299
+ else {
300
+ console.log(output);
301
+ }
302
+ }
303
+ catch (err) {
304
+ console.error('Error:', err instanceof Error ? err.message : err);
305
+ process.exit(1);
306
+ }
307
+ });
272
308
  program.parse();
273
309
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ScenetestConfig, TeamConfig } from './types.js';
1
+ import type { ScenetestConfig, TeamDef, ResolvedTeam } from './types.js';
2
2
  /**
3
3
  * Find the config file in the current directory
4
4
  */
@@ -8,7 +8,7 @@ export declare function findConfigFile(cwd?: string): string | null;
8
8
  */
9
9
  export interface LoadedConfig {
10
10
  config: ScenetestConfig;
11
- teams: TeamConfig[];
11
+ teams: ResolvedTeam[];
12
12
  }
13
13
  /**
14
14
  * Load and validate the config file, and discover actor teams
@@ -18,4 +18,23 @@ export declare function loadConfig(configPath?: string): Promise<LoadedConfig>;
18
18
  * Helper to define config with type checking
19
19
  */
20
20
  export declare function defineConfig(config: ScenetestConfig): ScenetestConfig;
21
+ /**
22
+ * Helper to define a team with type checking.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * // scenetest/actors/french.ts
27
+ * import { defineTeam } from '@scenetest/scenes'
28
+ *
29
+ * export default defineTeam({
30
+ * name: 'French Content',
31
+ * tags: { locale: 'fr', region: 'europe' },
32
+ * actors: {
33
+ * user: { key: 'fr-user-1', username: 'pierre', email: 'pierre@test.com' },
34
+ * admin: { key: 'fr-admin-1', username: 'marie', email: 'marie@admin.com' },
35
+ * },
36
+ * })
37
+ * ```
38
+ */
39
+ export declare function defineTeam(team: TeamDef): TeamDef;
21
40
  //# sourceMappingURL=config.d.ts.map
@@ -1 +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;AA0B7D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAgB,GAAG,MAAM,GAAG,IAAI,CAQjE;AAwCD;;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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAc,OAAO,EAAY,YAAY,EAAE,MAAM,YAAY,CAAA;AA0B9F;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAgB,GAAG,MAAM,GAAG,IAAI,CAQjE;AAuED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB;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;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEjD"}
package/dist/config.js CHANGED
@@ -35,10 +35,37 @@ export function findConfigFile(cwd = process.cwd()) {
35
35
  }
36
36
  return null;
37
37
  }
38
+ /**
39
+ * Check whether a value looks like a TeamDef (has `actors` key)
40
+ * vs a plain TeamConfig (Record<string, ActorConfig>).
41
+ */
42
+ function isTeamDef(value) {
43
+ return (typeof value === 'object' &&
44
+ value !== null &&
45
+ 'actors' in value &&
46
+ typeof value.actors === 'object');
47
+ }
48
+ /**
49
+ * Normalize a raw export (TeamConfig or TeamDef) into a ResolvedTeam.
50
+ */
51
+ function resolveTeam(raw) {
52
+ if (isTeamDef(raw)) {
53
+ const meta = {};
54
+ if (raw.name !== undefined)
55
+ meta.name = raw.name;
56
+ if (raw.tags !== undefined)
57
+ meta.tags = raw.tags;
58
+ return { actors: raw.actors, meta };
59
+ }
60
+ // Plain Record<string, ActorConfig> — no metadata
61
+ return { actors: raw, meta: {} };
62
+ }
38
63
  /**
39
64
  * Discover actor team files from scenetest/actors/ directory.
40
65
  *
41
- * Each .ts/.js file in the directory exports a single team.
66
+ * Each .ts/.js file in the directory exports either:
67
+ * - A single TeamConfig or TeamDef
68
+ * - An array of TeamConfig[] or TeamDef[]
42
69
  */
43
70
  async function discoverTeams(configDir) {
44
71
  const actorsDir = path.join(configDir, 'actors');
@@ -58,11 +85,13 @@ async function discoverTeams(configDir) {
58
85
  const exported = module.default;
59
86
  if (Array.isArray(exported)) {
60
87
  // File exports an array of teams
61
- teams.push(...exported);
88
+ for (const item of exported) {
89
+ teams.push(resolveTeam(item));
90
+ }
62
91
  }
63
92
  else {
64
93
  // File exports a single team
65
- teams.push(exported);
94
+ teams.push(resolveTeam(exported));
66
95
  }
67
96
  }
68
97
  return teams;
@@ -94,7 +123,7 @@ export async function loadConfig(configPath) {
94
123
  const configDir = path.dirname(path.resolve(filepath));
95
124
  const teams = await discoverTeams(configDir);
96
125
  if (teams.length === 0) {
97
- throw new Error('No actor teams found. Each actor file must export a team (Record<string, ActorConfig>).');
126
+ throw new Error('No actor teams found. Each actor file must export a team (Record<string, ActorConfig> or defineTeam({...})).');
98
127
  }
99
128
  return { config: resolved, teams };
100
129
  }
@@ -104,4 +133,25 @@ export async function loadConfig(configPath) {
104
133
  export function defineConfig(config) {
105
134
  return config;
106
135
  }
136
+ /**
137
+ * Helper to define a team with type checking.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * // scenetest/actors/french.ts
142
+ * import { defineTeam } from '@scenetest/scenes'
143
+ *
144
+ * export default defineTeam({
145
+ * name: 'French Content',
146
+ * tags: { locale: 'fr', region: 'europe' },
147
+ * actors: {
148
+ * user: { key: 'fr-user-1', username: 'pierre', email: 'pierre@test.com' },
149
+ * admin: { key: 'fr-admin-1', username: 'marie', email: 'marie@admin.com' },
150
+ * },
151
+ * })
152
+ * ```
153
+ */
154
+ export function defineTeam(team) {
155
+ return team;
156
+ }
107
157
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC;;GAEG;AACH,MAAM,QAAQ,GAA6B;IACzC,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,KAAK;IACd,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,sBAAsB;IACjC,YAAY,EAAE,MAAM;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAChD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAAC,SAAiB;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAEhD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,iCAAiC,SAAS,wDAAwD,CACnG,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE;QACxC,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,IAAI;KACf,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,gCAAgC,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAA;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,iCAAiC;YACjC,KAAK,CAAC,IAAI,CAAC,GAAI,QAAyB,CAAC,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,KAAK,CAAC,IAAI,CAAC,QAAsB,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAUD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAmB;IAClD,MAAM,QAAQ,GAAG,UAAU,IAAI,cAAc,EAAE,CAAA;IAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,wCAAwC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAA;IACH,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,iBAAiB;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,OAA0B,CAAA;IAEhD,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG;QACf,GAAG,QAAQ;QACX,GAAG,MAAM;KACS,CAAA;IAEpB,+CAA+C;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;IAE5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAA;IAC5G,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}