@auto-engineer/server-generator-apollo-emmett 1.139.0 → 1.140.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 (170) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +4 -4
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +17 -0
  5. package/DEBUG.md +4 -4
  6. package/dist/src/codegen/extract/data-sink.d.ts +2 -2
  7. package/dist/src/codegen/extract/data-sink.d.ts.map +1 -1
  8. package/dist/src/codegen/extract/data-sink.js +2 -2
  9. package/dist/src/codegen/extract/data-sink.js.map +1 -1
  10. package/dist/src/codegen/extract/events.d.ts +3 -3
  11. package/dist/src/codegen/extract/events.d.ts.map +1 -1
  12. package/dist/src/codegen/extract/events.js +11 -11
  13. package/dist/src/codegen/extract/events.js.map +1 -1
  14. package/dist/src/codegen/extract/gwt.d.ts +2 -2
  15. package/dist/src/codegen/extract/gwt.d.ts.map +1 -1
  16. package/dist/src/codegen/extract/gwt.js +2 -2
  17. package/dist/src/codegen/extract/gwt.js.map +1 -1
  18. package/dist/src/codegen/extract/imports.d.ts +4 -4
  19. package/dist/src/codegen/extract/imports.d.ts.map +1 -1
  20. package/dist/src/codegen/extract/imports.js +8 -8
  21. package/dist/src/codegen/extract/imports.js.map +1 -1
  22. package/dist/src/codegen/extract/messages.d.ts +2 -2
  23. package/dist/src/codegen/extract/messages.d.ts.map +1 -1
  24. package/dist/src/codegen/extract/messages.js +9 -9
  25. package/dist/src/codegen/extract/messages.js.map +1 -1
  26. package/dist/src/codegen/extract/projection.d.ts +7 -7
  27. package/dist/src/codegen/extract/projection.d.ts.map +1 -1
  28. package/dist/src/codegen/extract/projection.js +3 -3
  29. package/dist/src/codegen/extract/projection.js.map +1 -1
  30. package/dist/src/codegen/extract/query.d.ts +2 -2
  31. package/dist/src/codegen/extract/query.d.ts.map +1 -1
  32. package/dist/src/codegen/extract/query.js.map +1 -1
  33. package/dist/src/codegen/extract/slice-normalizer.d.ts +4 -4
  34. package/dist/src/codegen/extract/slice-normalizer.d.ts.map +1 -1
  35. package/dist/src/codegen/extract/slice-normalizer.js +7 -7
  36. package/dist/src/codegen/extract/slice-normalizer.js.map +1 -1
  37. package/dist/src/codegen/extract/states.d.ts +3 -3
  38. package/dist/src/codegen/extract/states.d.ts.map +1 -1
  39. package/dist/src/codegen/extract/states.js.map +1 -1
  40. package/dist/src/codegen/extract/step-converter.d.ts +7 -7
  41. package/dist/src/codegen/extract/step-converter.d.ts.map +1 -1
  42. package/dist/src/codegen/extract/step-converter.js +12 -12
  43. package/dist/src/codegen/extract/step-converter.js.map +1 -1
  44. package/dist/src/codegen/extract/step-types.d.ts +4 -4
  45. package/dist/src/codegen/extract/step-types.d.ts.map +1 -1
  46. package/dist/src/codegen/extract/step-types.js +1 -1
  47. package/dist/src/codegen/extract/step-types.js.map +1 -1
  48. package/dist/src/codegen/scaffoldFromSchema.d.ts +12 -12
  49. package/dist/src/codegen/scaffoldFromSchema.d.ts.map +1 -1
  50. package/dist/src/codegen/scaffoldFromSchema.js +113 -101
  51. package/dist/src/codegen/scaffoldFromSchema.js.map +1 -1
  52. package/dist/src/codegen/templates/command/commands.specs.ts +3 -3
  53. package/dist/src/codegen/templates/command/decide.specs.specs.ts +52 -52
  54. package/dist/src/codegen/templates/command/decide.specs.ts +12 -12
  55. package/dist/src/codegen/templates/command/decide.specs.ts.ejs +1 -1
  56. package/dist/src/codegen/templates/command/events.specs.ts +3 -3
  57. package/dist/src/codegen/templates/command/evolve.specs.ts +3 -3
  58. package/dist/src/codegen/templates/command/handle.specs.ts +13 -13
  59. package/dist/src/codegen/templates/command/mutation.resolver.specs.ts +19 -19
  60. package/dist/src/codegen/templates/command/register.specs.ts +3 -3
  61. package/dist/src/codegen/templates/command/state.specs.ts +3 -3
  62. package/dist/src/codegen/templates/query/events.specs.ts +4 -4
  63. package/dist/src/codegen/templates/query/projection.specs.specs.ts +60 -60
  64. package/dist/src/codegen/templates/query/projection.specs.ts +54 -29
  65. package/dist/src/codegen/templates/query/projection.specs.ts.ejs +2 -2
  66. package/dist/src/codegen/templates/query/query.resolver.specs.ts +63 -63
  67. package/dist/src/codegen/templates/query/query.resolver.ts.ejs +1 -1
  68. package/dist/src/codegen/templates/query/state.specs.ts +9 -9
  69. package/dist/src/codegen/templates/react/react.specs.specs.ts +15 -15
  70. package/dist/src/codegen/templates/react/react.specs.ts +16 -16
  71. package/dist/src/codegen/templates/react/react.specs.ts.ejs +9 -9
  72. package/dist/src/codegen/templates/react/react.ts.ejs +5 -5
  73. package/dist/src/codegen/templates/react/react.ts.specs.ts +33 -33
  74. package/dist/src/codegen/templates/react/register.specs.ts +7 -7
  75. package/dist/src/codegen/templates/react/register.ts.ejs +4 -4
  76. package/dist/src/codegen/test-data/specVariant1.d.ts.map +1 -1
  77. package/dist/src/codegen/test-data/specVariant1.js +3 -2
  78. package/dist/src/codegen/test-data/specVariant1.js.map +1 -1
  79. package/dist/src/codegen/types.d.ts +2 -2
  80. package/dist/src/codegen/types.d.ts.map +1 -1
  81. package/dist/src/commands/generate-server.d.ts +21 -21
  82. package/dist/src/commands/generate-server.d.ts.map +1 -1
  83. package/dist/src/commands/generate-server.js +81 -63
  84. package/dist/src/commands/generate-server.js.map +1 -1
  85. package/dist/src/commands/initialize-server.d.ts.map +1 -1
  86. package/dist/src/commands/initialize-server.js +2 -2
  87. package/dist/src/commands/initialize-server.js.map +1 -1
  88. package/dist/src/domain/flows/shared/types.d.ts +14 -0
  89. package/dist/src/domain/flows/shared/types.d.ts.map +1 -0
  90. package/dist/src/domain/flows/shared/types.js +2 -0
  91. package/dist/src/domain/flows/shared/types.js.map +1 -0
  92. package/dist/src/domain/flows/shared/types.ts +15 -0
  93. package/dist/src/domain/narratives/shared/types.d.ts +14 -0
  94. package/dist/src/domain/narratives/shared/types.d.ts.map +1 -0
  95. package/dist/src/domain/narratives/shared/types.js +2 -0
  96. package/dist/src/domain/narratives/shared/types.js.map +1 -0
  97. package/dist/src/domain/narratives/shared/types.ts +15 -0
  98. package/dist/src/index.d.ts +1 -1
  99. package/dist/src/index.d.ts.map +1 -1
  100. package/dist/src/server.js +3 -3
  101. package/dist/src/server.js.map +1 -1
  102. package/dist/src/server.ts +3 -3
  103. package/dist/src/utils/loadRegisterFiles.d.ts +2 -2
  104. package/dist/src/utils/loadRegisterFiles.d.ts.map +1 -1
  105. package/dist/src/utils/loadRegisterFiles.js.map +1 -1
  106. package/dist/src/utils/loadRegisterFiles.ts +5 -5
  107. package/dist/src/utils/loadResolvers.js +1 -1
  108. package/dist/src/utils/loadResolvers.js.map +1 -1
  109. package/dist/src/utils/loadResolvers.ts +1 -1
  110. package/dist/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +4 -4
  112. package/src/codegen/extract/data-sink.ts +5 -5
  113. package/src/codegen/extract/events.ts +15 -15
  114. package/src/codegen/extract/gwt.ts +4 -4
  115. package/src/codegen/extract/imports.specs.ts +19 -19
  116. package/src/codegen/extract/imports.ts +13 -13
  117. package/src/codegen/extract/messages.specs.ts +30 -30
  118. package/src/codegen/extract/messages.ts +16 -16
  119. package/src/codegen/extract/projection.specs.ts +22 -22
  120. package/src/codegen/extract/projection.ts +9 -9
  121. package/src/codegen/extract/query.ts +2 -2
  122. package/src/codegen/extract/slice-normalizer.specs.ts +11 -11
  123. package/src/codegen/extract/slice-normalizer.ts +14 -14
  124. package/src/codegen/extract/states.ts +4 -4
  125. package/src/codegen/extract/step-converter.specs.ts +9 -9
  126. package/src/codegen/extract/step-converter.ts +15 -15
  127. package/src/codegen/extract/step-types.specs.ts +12 -12
  128. package/src/codegen/extract/step-types.ts +4 -4
  129. package/src/codegen/findEventSource.specs.ts +23 -23
  130. package/src/codegen/scaffoldErrors.specs.ts +4 -4
  131. package/src/codegen/scaffoldFromSchema.filter.specs.ts +32 -32
  132. package/src/codegen/scaffoldFromSchema.ts +146 -132
  133. package/src/codegen/templates/command/commands.specs.ts +3 -3
  134. package/src/codegen/templates/command/decide.specs.specs.ts +52 -52
  135. package/src/codegen/templates/command/decide.specs.ts +12 -12
  136. package/src/codegen/templates/command/decide.specs.ts.ejs +1 -1
  137. package/src/codegen/templates/command/events.specs.ts +3 -3
  138. package/src/codegen/templates/command/evolve.specs.ts +3 -3
  139. package/src/codegen/templates/command/handle.specs.ts +13 -13
  140. package/src/codegen/templates/command/mutation.resolver.specs.ts +19 -19
  141. package/src/codegen/templates/command/register.specs.ts +3 -3
  142. package/src/codegen/templates/command/state.specs.ts +3 -3
  143. package/src/codegen/templates/query/events.specs.ts +4 -4
  144. package/src/codegen/templates/query/projection.specs.specs.ts +60 -60
  145. package/src/codegen/templates/query/projection.specs.ts +54 -29
  146. package/src/codegen/templates/query/projection.specs.ts.ejs +2 -2
  147. package/src/codegen/templates/query/query.resolver.specs.ts +63 -63
  148. package/src/codegen/templates/query/query.resolver.ts.ejs +1 -1
  149. package/src/codegen/templates/query/state.specs.ts +9 -9
  150. package/src/codegen/templates/react/react.specs.specs.ts +15 -15
  151. package/src/codegen/templates/react/react.specs.ts +16 -16
  152. package/src/codegen/templates/react/react.specs.ts.ejs +9 -9
  153. package/src/codegen/templates/react/react.ts.ejs +5 -5
  154. package/src/codegen/templates/react/react.ts.specs.ts +33 -33
  155. package/src/codegen/templates/react/register.specs.ts +7 -7
  156. package/src/codegen/templates/react/register.ts.ejs +4 -4
  157. package/src/codegen/test-data/specVariant1.json +1 -1
  158. package/src/codegen/test-data/specVariant1.ts +3 -2
  159. package/src/codegen/test-data/specVariant2.json +1 -1
  160. package/src/codegen/types.ts +2 -2
  161. package/src/commands/generate-server.specs.ts +81 -79
  162. package/src/commands/generate-server.ts +110 -88
  163. package/src/commands/initialize-server.specs.ts +4 -4
  164. package/src/commands/initialize-server.ts +5 -2
  165. package/src/domain/flows/shared/types.ts +15 -0
  166. package/src/domain/narratives/shared/types.ts +15 -0
  167. package/src/index.ts +1 -1
  168. package/src/server.ts +3 -3
  169. package/src/utils/loadRegisterFiles.ts +5 -5
  170. package/src/utils/loadResolvers.ts +1 -1
@@ -2,20 +2,20 @@ import { mkdtemp, readFile, rm } from 'node:fs/promises';
2
2
  import { tmpdir } from 'node:os';
3
3
  import * as path from 'node:path';
4
4
  import { join } from 'node:path';
5
- import type { CommandSlice, Model, Narrative, QuerySlice } from '@auto-engineer/narrative';
5
+ import type { CommandMoment, Model, QueryMoment, Scene } from '@auto-engineer/narrative';
6
6
  import fs from 'fs-extra';
7
7
  import { afterEach, beforeEach, describe, expect, it } from 'vitest';
8
8
  import { ScaffoldError, TemplateRenderError } from '../codegen/scaffoldFromSchema';
9
9
  import type { GenerateServerCommand, GenerateServerEvents, GenerationState } from './generate-server';
10
10
  import {
11
11
  cleanServerDir,
12
+ createMomentGeneratedEvent,
12
13
  createServerFailureEvent,
13
- createSliceGeneratedEvent,
14
14
  deriveModelPath,
15
- emitSliceGeneratedForAffected,
16
- emitSliceGeneratedForAll,
17
- emitSliceGenerationFailedForDuplicates,
18
- emitSliceGenerationFailedForFieldIssues,
15
+ emitMomentGeneratedForAffected,
16
+ emitMomentGeneratedForAll,
17
+ emitMomentGenerationFailedForDuplicates,
18
+ emitMomentGenerationFailedForFieldIssues,
19
19
  saveGenerationState,
20
20
  writeBiomeConfig,
21
21
  writeHealthResolver,
@@ -29,7 +29,7 @@ const makeCommand = (): GenerateServerCommand => ({
29
29
  correlationId: 'cor-1',
30
30
  });
31
31
 
32
- const makeSlice = (name: string): CommandSlice => ({
32
+ const makeMoment = (name: string): CommandMoment => ({
33
33
  name,
34
34
  type: 'command',
35
35
  client: { specs: [] },
@@ -38,14 +38,15 @@ const makeSlice = (name: string): CommandSlice => ({
38
38
 
39
39
  const makeModel = (): Model => ({
40
40
  variant: 'specs',
41
- narratives: [
41
+ scenes: [
42
42
  {
43
43
  name: 'Todo',
44
- slices: [makeSlice('AddTodo'), makeSlice('RemoveTodo')],
44
+ moments: [makeMoment('AddTodo'), makeMoment('RemoveTodo')],
45
45
  },
46
46
  ],
47
47
  messages: [],
48
48
  modules: [],
49
+ narratives: [],
49
50
  });
50
51
 
51
52
  describe('cleanServerDir', () => {
@@ -100,29 +101,29 @@ describe('cleanServerDir', () => {
100
101
  });
101
102
  });
102
103
 
103
- describe('createSliceGeneratedEvent', () => {
104
- it('builds SliceGenerated event from flow, slice, and command', () => {
105
- const flow: Narrative = {
104
+ describe('createMomentGeneratedEvent', () => {
105
+ it('builds MomentGenerated event from scene, slice, and command', () => {
106
+ const scene: Scene = {
106
107
  name: 'PropertyListing',
107
- slices: [],
108
+ moments: [],
108
109
  };
109
- const slice: CommandSlice = {
110
+ const slice: CommandMoment = {
110
111
  name: 'CreateListing',
111
112
  type: 'command',
112
113
  client: { specs: [] },
113
114
  server: { description: 'Create a listing', specs: [] },
114
115
  };
115
116
 
116
- const event = createSliceGeneratedEvent(flow, slice, makeCommand());
117
+ const event = createMomentGeneratedEvent(scene, slice, makeCommand());
117
118
 
118
119
  expect(event).toEqual({
119
- type: 'SliceGenerated',
120
+ type: 'MomentGenerated',
120
121
  data: {
121
- flowName: 'PropertyListing',
122
- sliceName: 'CreateListing',
123
- sliceType: 'command',
122
+ sceneName: 'PropertyListing',
123
+ momentName: 'CreateListing',
124
+ momentType: 'command',
124
125
  schemaPath: path.join(path.resolve('.'), '.context', 'schema.json'),
125
- slicePath: 'server/src/domain/flows/property-listing/create-listing',
126
+ momentPath: 'server/src/domain/narratives/property-listing/create-listing',
126
127
  },
127
128
  timestamp: expect.any(Date),
128
129
  requestId: 'req-1',
@@ -131,52 +132,53 @@ describe('createSliceGeneratedEvent', () => {
131
132
  });
132
133
  });
133
134
 
134
- describe('emitSliceGeneratedForAll', () => {
135
- it('emits SliceGenerated for every non-experience slice', () => {
135
+ describe('emitMomentGeneratedForAll', () => {
136
+ it('emits MomentGenerated for every non-experience slice', () => {
136
137
  const events: GenerateServerEvents[] = [];
137
- emitSliceGeneratedForAll(makeModel(), makeCommand(), events);
138
+ emitMomentGeneratedForAll(makeModel(), makeCommand(), events);
138
139
 
139
140
  expect(events).toEqual([
140
- expect.objectContaining({ type: 'SliceGenerated', data: expect.objectContaining({ sliceName: 'AddTodo' }) }),
141
- expect.objectContaining({ type: 'SliceGenerated', data: expect.objectContaining({ sliceName: 'RemoveTodo' }) }),
141
+ expect.objectContaining({ type: 'MomentGenerated', data: expect.objectContaining({ momentName: 'AddTodo' }) }),
142
+ expect.objectContaining({ type: 'MomentGenerated', data: expect.objectContaining({ momentName: 'RemoveTodo' }) }),
142
143
  ]);
143
144
  });
144
145
 
145
146
  it('skips experience slices', () => {
146
147
  const model: Model = {
147
148
  variant: 'specs',
148
- narratives: [
149
+ scenes: [
149
150
  {
150
151
  name: 'Todo',
151
- slices: [makeSlice('AddTodo'), { name: 'ViewTodos', type: 'experience', client: { specs: [] } }],
152
+ moments: [makeMoment('AddTodo'), { name: 'ViewTodos', type: 'experience', client: { specs: [] } }],
152
153
  },
153
154
  ],
154
155
  messages: [],
155
156
  modules: [],
157
+ narratives: [],
156
158
  };
157
159
  const events: GenerateServerEvents[] = [];
158
- emitSliceGeneratedForAll(model, makeCommand(), events);
160
+ emitMomentGeneratedForAll(model, makeCommand(), events);
159
161
 
160
162
  expect(events).toEqual([
161
- expect.objectContaining({ type: 'SliceGenerated', data: expect.objectContaining({ sliceName: 'AddTodo' }) }),
163
+ expect.objectContaining({ type: 'MomentGenerated', data: expect.objectContaining({ momentName: 'AddTodo' }) }),
162
164
  ]);
163
165
  });
164
166
  });
165
167
 
166
- describe('emitSliceGeneratedForAffected', () => {
167
- it('emits SliceGenerated only for affected slice IDs', () => {
168
+ describe('emitMomentGeneratedForAffected', () => {
169
+ it('emits MomentGenerated only for affected slice IDs', () => {
168
170
  const events: GenerateServerEvents[] = [];
169
171
  const affectedIds = new Set(['todo/add-todo']);
170
- emitSliceGeneratedForAffected(makeModel(), affectedIds, makeCommand(), events);
172
+ emitMomentGeneratedForAffected(makeModel(), affectedIds, makeCommand(), events);
171
173
 
172
174
  expect(events).toEqual([
173
- expect.objectContaining({ type: 'SliceGenerated', data: expect.objectContaining({ sliceName: 'AddTodo' }) }),
175
+ expect.objectContaining({ type: 'MomentGenerated', data: expect.objectContaining({ momentName: 'AddTodo' }) }),
174
176
  ]);
175
177
  });
176
178
 
177
179
  it('emits nothing when no slices are affected', () => {
178
180
  const events: GenerateServerEvents[] = [];
179
- emitSliceGeneratedForAffected(makeModel(), new Set(), makeCommand(), events);
181
+ emitMomentGeneratedForAffected(makeModel(), new Set(), makeCommand(), events);
180
182
 
181
183
  expect(events).toEqual([]);
182
184
  });
@@ -247,10 +249,10 @@ describe('writeHealthResolver', () => {
247
249
  await rm(dir, { recursive: true, force: true });
248
250
  });
249
251
 
250
- it('creates health resolver at domain/flows/health/query.resolver.ts', async () => {
252
+ it('creates health resolver at domain/narratives/health/query.resolver.ts', async () => {
251
253
  await writeHealthResolver(dir);
252
254
 
253
- const content = await readFile(join(dir, 'src', 'domain', 'flows', 'health', 'query.resolver.ts'), 'utf8');
255
+ const content = await readFile(join(dir, 'src', 'domain', 'narratives', 'health', 'query.resolver.ts'), 'utf8');
254
256
  expect(content).toContain('HealthResolver');
255
257
  expect(content).toContain("return 'ok'");
256
258
  expect(content).toContain('@Query(() => String)');
@@ -288,8 +290,8 @@ describe('writeBiomeConfig', () => {
288
290
  });
289
291
  });
290
292
 
291
- describe('emitSliceGenerationFailedForFieldIssues', () => {
292
- it('emits SliceGenerationFailed for command slice referencing message via gherkin step', () => {
293
+ describe('emitMomentGenerationFailedForFieldIssues', () => {
294
+ it('emits MomentGenerationFailed for command slice referencing message via gherkin step', () => {
293
295
  const fieldIssues = [
294
296
  {
295
297
  messageName: 'AddTodo',
@@ -298,10 +300,10 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
298
300
  ];
299
301
  const spec: Model = {
300
302
  variant: 'specs',
301
- narratives: [
303
+ scenes: [
302
304
  {
303
305
  name: 'Todo',
304
- slices: [
306
+ moments: [
305
307
  {
306
308
  name: 'AddTodo',
307
309
  type: 'command',
@@ -326,7 +328,7 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
326
328
  },
327
329
  ],
328
330
  },
329
- } satisfies CommandSlice,
331
+ } satisfies CommandMoment,
330
332
  ],
331
333
  },
332
334
  ],
@@ -335,15 +337,15 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
335
337
  };
336
338
  const events: GenerateServerEvents[] = [];
337
339
 
338
- emitSliceGenerationFailedForFieldIssues(fieldIssues, spec, makeCommand(), events);
340
+ emitMomentGenerationFailedForFieldIssues(fieldIssues, spec, makeCommand(), events);
339
341
 
340
342
  expect(events).toEqual([
341
343
  {
342
- type: 'SliceGenerationFailed',
344
+ type: 'MomentGenerationFailed',
343
345
  data: {
344
- flowName: 'Todo',
345
- sliceName: 'AddTodo',
346
- sliceType: 'command',
346
+ sceneName: 'Todo',
347
+ momentName: 'AddTodo',
348
+ momentType: 'command',
347
349
  error: "Field '...' was skipped from 'AddTodo' — not a valid TypeScript identifier",
348
350
  model: spec,
349
351
  },
@@ -354,7 +356,7 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
354
356
  ]);
355
357
  });
356
358
 
357
- it('emits SliceGenerationFailed for query slice referencing message via data target', () => {
359
+ it('emits MomentGenerationFailed for query slice referencing message via data target', () => {
358
360
  const fieldIssues = [
359
361
  {
360
362
  messageName: 'TodoState',
@@ -363,10 +365,10 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
363
365
  ];
364
366
  const spec: Model = {
365
367
  variant: 'specs',
366
- narratives: [
368
+ scenes: [
367
369
  {
368
370
  name: 'Todo',
369
- slices: [
371
+ moments: [
370
372
  {
371
373
  name: 'ViewTodos',
372
374
  type: 'query',
@@ -383,7 +385,7 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
383
385
  },
384
386
  specs: [],
385
387
  },
386
- } satisfies QuerySlice,
388
+ } satisfies QueryMoment,
387
389
  ],
388
390
  },
389
391
  ],
@@ -392,15 +394,15 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
392
394
  };
393
395
  const events: GenerateServerEvents[] = [];
394
396
 
395
- emitSliceGenerationFailedForFieldIssues(fieldIssues, spec, makeCommand(), events);
397
+ emitMomentGenerationFailedForFieldIssues(fieldIssues, spec, makeCommand(), events);
396
398
 
397
399
  expect(events).toEqual([
398
400
  {
399
- type: 'SliceGenerationFailed',
401
+ type: 'MomentGenerationFailed',
400
402
  data: {
401
- flowName: 'Todo',
402
- sliceName: 'ViewTodos',
403
- sliceType: 'query',
403
+ sceneName: 'Todo',
404
+ momentName: 'ViewTodos',
405
+ momentType: 'query',
404
406
  error: "Field '...' was skipped from 'TodoState' — not a valid TypeScript identifier",
405
407
  model: spec,
406
408
  },
@@ -412,14 +414,14 @@ describe('emitSliceGenerationFailedForFieldIssues', () => {
412
414
  });
413
415
  });
414
416
 
415
- describe('emitSliceGenerationFailedForDuplicates', () => {
416
- it('emits SliceGenerationFailed for duplicate command in a different flow/slice', () => {
417
+ describe('emitMomentGenerationFailedForDuplicates', () => {
418
+ it('emits MomentGenerationFailed for duplicate command in a different scene/slice', () => {
417
419
  const model: Model = {
418
420
  variant: 'specs',
419
- narratives: [
421
+ scenes: [
420
422
  {
421
423
  name: 'Checkout',
422
- slices: [
424
+ moments: [
423
425
  {
424
426
  name: 'PlaceOrder',
425
427
  type: 'command',
@@ -444,12 +446,12 @@ describe('emitSliceGenerationFailedForDuplicates', () => {
444
446
  },
445
447
  ],
446
448
  },
447
- } satisfies CommandSlice,
449
+ } satisfies CommandMoment,
448
450
  ],
449
451
  },
450
452
  {
451
453
  name: 'Returns',
452
- slices: [
454
+ moments: [
453
455
  {
454
456
  name: 'ReturnItem',
455
457
  type: 'command',
@@ -474,25 +476,25 @@ describe('emitSliceGenerationFailedForDuplicates', () => {
474
476
  },
475
477
  ],
476
478
  },
477
- } satisfies CommandSlice,
479
+ } satisfies CommandMoment,
478
480
  ],
479
481
  },
480
482
  ],
481
483
  messages: [],
482
484
  modules: [],
483
485
  };
484
- const duplicates = [{ command: 'PlaceOrder', existingFlow: 'Checkout', existingSlice: 'PlaceOrder' }];
486
+ const duplicates = [{ command: 'PlaceOrder', existingScene: 'Checkout', existingMoment: 'PlaceOrder' }];
485
487
  const events: GenerateServerEvents[] = [];
486
488
 
487
- emitSliceGenerationFailedForDuplicates(duplicates, model, makeCommand(), events);
489
+ emitMomentGenerationFailedForDuplicates(duplicates, model, makeCommand(), events);
488
490
 
489
491
  expect(events).toEqual([
490
492
  {
491
- type: 'SliceGenerationFailed',
493
+ type: 'MomentGenerationFailed',
492
494
  data: {
493
- flowName: 'Returns',
494
- sliceName: 'ReturnItem',
495
- sliceType: 'command',
495
+ sceneName: 'Returns',
496
+ momentName: 'ReturnItem',
497
+ momentType: 'command',
496
498
  error: "Duplicate command handler: 'PlaceOrder' is already registered in Checkout/PlaceOrder",
497
499
  model,
498
500
  },
@@ -505,7 +507,7 @@ describe('emitSliceGenerationFailedForDuplicates', () => {
505
507
  });
506
508
 
507
509
  describe('createServerFailureEvent', () => {
508
- it('extracts flow/slice/type and template from ScaffoldError wrapping TemplateRenderError', () => {
510
+ it('extracts scene/slice/type and template from ScaffoldError wrapping TemplateRenderError', () => {
509
511
  const rootCause = new TypeError('Cannot read properties of undefined');
510
512
  const templateErr = new TemplateRenderError('decide.ts.ejs', rootCause);
511
513
  const scaffoldErr = new ScaffoldError('Checkout', 'PlaceOrder', 'command', templateErr);
@@ -519,9 +521,9 @@ describe('createServerFailureEvent', () => {
519
521
  destination: '.',
520
522
  error: expect.stringContaining('[template=decide.ts.ejs]'),
521
523
  model: makeModel(),
522
- flowName: 'Checkout',
523
- sliceName: 'PlaceOrder',
524
- sliceType: 'command',
524
+ sceneName: 'Checkout',
525
+ momentName: 'PlaceOrder',
526
+ momentType: 'command',
525
527
  },
526
528
  timestamp: expect.any(Date),
527
529
  requestId: 'req-1',
@@ -530,7 +532,7 @@ describe('createServerFailureEvent', () => {
530
532
  expect(event.data.error).toContain('Cannot read properties of undefined');
531
533
  });
532
534
 
533
- it('returns undefined flow/slice/type for plain Error', () => {
535
+ it('returns undefined scene/slice/type for plain Error', () => {
534
536
  const plainError = new Error('something went wrong');
535
537
 
536
538
  const event = createServerFailureEvent(makeCommand(), plainError);
@@ -542,9 +544,9 @@ describe('createServerFailureEvent', () => {
542
544
  destination: '.',
543
545
  error: expect.stringContaining('something went wrong'),
544
546
  model: makeModel(),
545
- flowName: undefined,
546
- sliceName: undefined,
547
- sliceType: undefined,
547
+ sceneName: undefined,
548
+ momentName: undefined,
549
+ momentType: undefined,
548
550
  },
549
551
  timestamp: expect.any(Date),
550
552
  requestId: 'req-1',
@@ -562,9 +564,9 @@ describe('createServerFailureEvent', () => {
562
564
  destination: '.',
563
565
  error: 'Unknown error occurred',
564
566
  model: makeModel(),
565
- flowName: undefined,
566
- sliceName: undefined,
567
- sliceType: undefined,
567
+ sceneName: undefined,
568
+ momentName: undefined,
569
+ momentType: undefined,
568
570
  },
569
571
  timestamp: expect.any(Date),
570
572
  requestId: 'req-1',