@auto-engineer/narrative 1.139.0 → 1.140.1

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 (182) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +5 -5
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +32 -0
  5. package/README.md +8 -8
  6. package/dist/scripts/convert-flow-exec.js +2 -2
  7. package/dist/scripts/convert-flow-exec.js.map +1 -1
  8. package/dist/scripts/print-schema.js +5 -5
  9. package/dist/scripts/print-schema.js.map +1 -1
  10. package/dist/src/fluent-builder.d.ts +29 -29
  11. package/dist/src/fluent-builder.d.ts.map +1 -1
  12. package/dist/src/fluent-builder.js +81 -81
  13. package/dist/src/fluent-builder.js.map +1 -1
  14. package/dist/src/{getNarratives.d.ts → getScenes.d.ts} +6 -6
  15. package/dist/src/getScenes.d.ts.map +1 -0
  16. package/dist/src/{getNarratives.js → getScenes.js} +16 -16
  17. package/dist/src/getScenes.js.map +1 -0
  18. package/dist/src/id/addAutoIds.d.ts.map +1 -1
  19. package/dist/src/id/addAutoIds.js +22 -22
  20. package/dist/src/id/addAutoIds.js.map +1 -1
  21. package/dist/src/id/hasAllIds.d.ts.map +1 -1
  22. package/dist/src/id/hasAllIds.js +2 -2
  23. package/dist/src/id/hasAllIds.js.map +1 -1
  24. package/dist/src/index.d.ts +8 -8
  25. package/dist/src/index.d.ts.map +1 -1
  26. package/dist/src/index.js +4 -4
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/loader/index.js +1 -1
  29. package/dist/src/loader/index.js.map +1 -1
  30. package/dist/src/loader/runtime-cjs.js +1 -1
  31. package/dist/src/loader/runtime-cjs.js.map +1 -1
  32. package/dist/src/narrative-context.d.ts +9 -9
  33. package/dist/src/narrative-context.d.ts.map +1 -1
  34. package/dist/src/narrative-context.js +47 -47
  35. package/dist/src/narrative-context.js.map +1 -1
  36. package/dist/src/narrative-registry.d.ts +6 -6
  37. package/dist/src/narrative-registry.d.ts.map +1 -1
  38. package/dist/src/narrative-registry.js +26 -26
  39. package/dist/src/narrative-registry.js.map +1 -1
  40. package/dist/src/narrative.d.ts +5 -5
  41. package/dist/src/narrative.d.ts.map +1 -1
  42. package/dist/src/narrative.js +26 -27
  43. package/dist/src/narrative.js.map +1 -1
  44. package/dist/src/parse-graphql-request.d.ts +1 -1
  45. package/dist/src/parse-graphql-request.d.ts.map +1 -1
  46. package/dist/src/parse-graphql-request.js +3 -3
  47. package/dist/src/parse-graphql-request.js.map +1 -1
  48. package/dist/src/samples/items.narrative.js +2 -2
  49. package/dist/src/samples/items.narrative.js.map +1 -1
  50. package/dist/src/samples/mixed-given-types.narrative.js +2 -2
  51. package/dist/src/samples/mixed-given-types.narrative.js.map +1 -1
  52. package/dist/src/samples/place-order.narrative.js +2 -2
  53. package/dist/src/samples/place-order.narrative.js.map +1 -1
  54. package/dist/src/samples/questionnaires.narrative.js +2 -2
  55. package/dist/src/samples/questionnaires.narrative.js.map +1 -1
  56. package/dist/src/samples/seasonal-assistant.schema.json +2 -2
  57. package/dist/src/samples/test-with-ids.narrative.js +2 -2
  58. package/dist/src/samples/test-with-ids.narrative.js.map +1 -1
  59. package/dist/src/schema.d.ts +136 -136
  60. package/dist/src/schema.d.ts.map +1 -1
  61. package/dist/src/schema.js +76 -76
  62. package/dist/src/schema.js.map +1 -1
  63. package/dist/src/slice-builder.d.ts +6 -6
  64. package/dist/src/slice-builder.d.ts.map +1 -1
  65. package/dist/src/slice-builder.js +21 -21
  66. package/dist/src/slice-builder.js.map +1 -1
  67. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +1 -1
  68. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -1
  69. package/dist/src/transformers/model-to-narrative/cross-module-imports.js +4 -4
  70. package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
  71. package/dist/src/transformers/model-to-narrative/generators/compose.js +3 -3
  72. package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -1
  73. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +2 -2
  74. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
  75. package/dist/src/transformers/model-to-narrative/generators/flow.js +20 -20
  76. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
  77. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +1 -1
  78. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -1
  79. package/dist/src/transformers/model-to-narrative/generators/imports.js +1 -1
  80. package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -1
  81. package/dist/src/transformers/model-to-narrative/generators/module-code.js +14 -14
  82. package/dist/src/transformers/model-to-narrative/generators/module-code.js.map +1 -1
  83. package/dist/src/transformers/model-to-narrative/index.d.ts +4 -4
  84. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -1
  85. package/dist/src/transformers/model-to-narrative/index.js +1 -1
  86. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts +2 -2
  87. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts.map +1 -1
  88. package/dist/src/transformers/model-to-narrative/spec-traversal.js +5 -5
  89. package/dist/src/transformers/model-to-narrative/spec-traversal.js.map +1 -1
  90. package/dist/src/transformers/model-to-narrative/types.d.ts +1 -1
  91. package/dist/src/transformers/model-to-narrative/types.d.ts.map +1 -1
  92. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +1 -1
  93. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -1
  94. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +4 -4
  95. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -1
  96. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
  97. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
  98. package/dist/src/transformers/model-to-narrative/validate-modules.js +19 -19
  99. package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
  100. package/dist/src/transformers/narrative-to-model/assemble.d.ts +2 -2
  101. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
  102. package/dist/src/transformers/narrative-to-model/assemble.js +10 -3
  103. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -1
  104. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -1
  105. package/dist/src/transformers/narrative-to-model/debug.js +1 -1
  106. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -1
  107. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts +2 -2
  108. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
  109. package/dist/src/transformers/narrative-to-model/derive-modules.js +9 -9
  110. package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -1
  111. package/dist/src/transformers/narrative-to-model/index.d.ts +2 -2
  112. package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -1
  113. package/dist/src/transformers/narrative-to-model/index.js +39 -39
  114. package/dist/src/transformers/narrative-to-model/index.js.map +1 -1
  115. package/dist/src/transformers/narrative-to-model/spec-processors.js +1 -1
  116. package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -1
  117. package/dist/src/transformers/narrative-to-model/strings.d.ts +1 -1
  118. package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -1
  119. package/dist/src/transformers/narrative-to-model/strings.js +6 -6
  120. package/dist/src/transformers/narrative-to-model/strings.js.map +1 -1
  121. package/dist/src/validate-slice-requests.d.ts +4 -4
  122. package/dist/src/validate-slice-requests.d.ts.map +1 -1
  123. package/dist/src/validate-slice-requests.js +34 -34
  124. package/dist/src/validate-slice-requests.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +4 -4
  127. package/scripts/convert-flow-exec.ts +2 -2
  128. package/scripts/print-schema.ts +8 -8
  129. package/src/fluent-builder.specs.ts +3 -3
  130. package/src/fluent-builder.ts +141 -141
  131. package/src/{getNarratives.cache.specs.ts → getScenes.cache.specs.ts} +45 -45
  132. package/src/{getNarratives.specs.ts → getScenes.specs.ts} +302 -300
  133. package/src/{getNarratives.ts → getScenes.ts} +20 -20
  134. package/src/id/addAutoIds.specs.ts +105 -105
  135. package/src/id/addAutoIds.ts +26 -26
  136. package/src/id/hasAllIds.specs.ts +59 -59
  137. package/src/id/hasAllIds.ts +6 -6
  138. package/src/index.ts +12 -13
  139. package/src/loader/index.ts +1 -1
  140. package/src/loader/runtime-cjs.ts +1 -1
  141. package/src/model-to-narrative.specs.ts +133 -135
  142. package/src/narrative-context.specs.ts +24 -24
  143. package/src/narrative-context.ts +61 -61
  144. package/src/narrative-registry.ts +31 -31
  145. package/src/narrative.ts +31 -33
  146. package/src/parse-graphql-request.specs.ts +5 -5
  147. package/src/parse-graphql-request.ts +3 -3
  148. package/src/samples/items.narrative.ts +2 -2
  149. package/src/samples/mixed-given-types.narrative.ts +2 -2
  150. package/src/samples/place-order.narrative.ts +2 -2
  151. package/src/samples/questionnaires.narrative.ts +2 -2
  152. package/src/samples/seasonal-assistant.schema.json +2 -2
  153. package/src/samples/test-with-ids.narrative.ts +2 -2
  154. package/src/schema.specs.ts +99 -91
  155. package/src/schema.ts +89 -89
  156. package/src/slice-builder.ts +30 -30
  157. package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +1 -1
  158. package/src/transformers/model-to-narrative/cross-module-imports.specs.ts +43 -43
  159. package/src/transformers/model-to-narrative/cross-module-imports.ts +4 -4
  160. package/src/transformers/model-to-narrative/generators/compose.ts +4 -4
  161. package/src/transformers/model-to-narrative/generators/flow.ts +36 -36
  162. package/src/transformers/model-to-narrative/generators/imports.ts +1 -1
  163. package/src/transformers/model-to-narrative/generators/module-code.ts +15 -15
  164. package/src/transformers/model-to-narrative/index.ts +4 -4
  165. package/src/transformers/model-to-narrative/modules.specs.ts +58 -58
  166. package/src/transformers/model-to-narrative/spec-traversal.specs.ts +43 -43
  167. package/src/transformers/model-to-narrative/spec-traversal.ts +6 -6
  168. package/src/transformers/model-to-narrative/types.ts +1 -1
  169. package/src/transformers/model-to-narrative/utils/integration-extractor.ts +5 -5
  170. package/src/transformers/model-to-narrative/validate-modules.ts +22 -22
  171. package/src/transformers/narrative-to-model/assemble.ts +12 -4
  172. package/src/transformers/narrative-to-model/debug.ts +1 -1
  173. package/src/transformers/narrative-to-model/derive-modules.specs.ts +35 -35
  174. package/src/transformers/narrative-to-model/derive-modules.ts +11 -11
  175. package/src/transformers/narrative-to-model/index.ts +47 -47
  176. package/src/transformers/narrative-to-model/spec-processors.ts +1 -1
  177. package/src/transformers/narrative-to-model/strings.ts +6 -6
  178. package/src/transformers/narrative-to-model/type-inference.specs.ts +11 -11
  179. package/src/validate-slice-requests.specs.ts +113 -113
  180. package/src/validate-slice-requests.ts +49 -49
  181. package/dist/src/getNarratives.d.ts.map +0 -1
  182. package/dist/src/getNarratives.js.map +0 -1
@@ -48,14 +48,14 @@ describe('computeCrossModuleImports', () => {
48
48
  it('returns empty array for derived modules', () => {
49
49
  const model: Model = {
50
50
  variant: 'specs',
51
- narratives: [],
51
+ scenes: [],
52
52
  messages: [],
53
53
  integrations: [],
54
54
  modules: [
55
55
  {
56
56
  sourceFile: 'derived.ts',
57
57
  isDerived: true,
58
- contains: { narrativeIds: [] },
58
+ contains: { sceneIds: [] },
59
59
  declares: { messages: [] },
60
60
  },
61
61
  ],
@@ -69,11 +69,11 @@ describe('computeCrossModuleImports', () => {
69
69
  it('returns empty array when module declares all needed types', () => {
70
70
  const model: Model = {
71
71
  variant: 'specs',
72
- narratives: [
72
+ scenes: [
73
73
  {
74
74
  name: 'Test',
75
75
  id: 'test-1',
76
- slices: [
76
+ moments: [
77
77
  {
78
78
  name: 'test',
79
79
  type: 'command',
@@ -108,7 +108,7 @@ describe('computeCrossModuleImports', () => {
108
108
  {
109
109
  sourceFile: 'self-contained.ts',
110
110
  isDerived: false,
111
- contains: { narrativeIds: ['test-1'] },
111
+ contains: { sceneIds: ['test-1'] },
112
112
  declares: { messages: [{ kind: 'command', name: 'DoSomething' }] },
113
113
  },
114
114
  ],
@@ -122,11 +122,11 @@ describe('computeCrossModuleImports', () => {
122
122
  it('returns empty array when needed type is not declared by any module', () => {
123
123
  const model: Model = {
124
124
  variant: 'specs',
125
- narratives: [
125
+ scenes: [
126
126
  {
127
127
  name: 'Test',
128
128
  id: 'test-1',
129
- slices: [
129
+ moments: [
130
130
  {
131
131
  name: 'test',
132
132
  type: 'command',
@@ -161,7 +161,7 @@ describe('computeCrossModuleImports', () => {
161
161
  {
162
162
  sourceFile: 'consumer.ts',
163
163
  isDerived: false,
164
- contains: { narrativeIds: ['test-1'] },
164
+ contains: { sceneIds: ['test-1'] },
165
165
  declares: { messages: [] },
166
166
  },
167
167
  ],
@@ -175,12 +175,12 @@ describe('computeCrossModuleImports', () => {
175
175
  it('generates import when type is declared by another authored module', () => {
176
176
  const model: Model = {
177
177
  variant: 'specs',
178
- narratives: [
179
- { name: 'Shared', id: 'shared-1', slices: [] },
178
+ scenes: [
179
+ { name: 'Shared', id: 'shared-1', moments: [] },
180
180
  {
181
181
  name: 'Consumer',
182
182
  id: 'consumer-1',
183
- slices: [
183
+ moments: [
184
184
  {
185
185
  name: 'test',
186
186
  type: 'command',
@@ -215,13 +215,13 @@ describe('computeCrossModuleImports', () => {
215
215
  {
216
216
  sourceFile: 'shared/types.ts',
217
217
  isDerived: false,
218
- contains: { narrativeIds: ['shared-1'] },
218
+ contains: { sceneIds: ['shared-1'] },
219
219
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
220
220
  },
221
221
  {
222
222
  sourceFile: 'features/consumer.ts',
223
223
  isDerived: false,
224
- contains: { narrativeIds: ['consumer-1'] },
224
+ contains: { sceneIds: ['consumer-1'] },
225
225
  declares: { messages: [] },
226
226
  },
227
227
  ],
@@ -236,12 +236,12 @@ describe('computeCrossModuleImports', () => {
236
236
  it('groups multiple types from same module into single import', () => {
237
237
  const model: Model = {
238
238
  variant: 'specs',
239
- narratives: [
240
- { name: 'Shared', id: 'shared-1', slices: [] },
239
+ scenes: [
240
+ { name: 'Shared', id: 'shared-1', moments: [] },
241
241
  {
242
242
  name: 'Consumer',
243
243
  id: 'consumer-1',
244
- slices: [
244
+ moments: [
245
245
  {
246
246
  name: 'test',
247
247
  type: 'command',
@@ -282,7 +282,7 @@ describe('computeCrossModuleImports', () => {
282
282
  {
283
283
  sourceFile: 'shared.ts',
284
284
  isDerived: false,
285
- contains: { narrativeIds: ['shared-1'] },
285
+ contains: { sceneIds: ['shared-1'] },
286
286
  declares: {
287
287
  messages: [
288
288
  { kind: 'event', name: 'EventA' },
@@ -293,7 +293,7 @@ describe('computeCrossModuleImports', () => {
293
293
  {
294
294
  sourceFile: 'consumer.ts',
295
295
  isDerived: false,
296
- contains: { narrativeIds: ['consumer-1'] },
296
+ contains: { sceneIds: ['consumer-1'] },
297
297
  declares: { messages: [] },
298
298
  },
299
299
  ],
@@ -309,11 +309,11 @@ describe('computeCrossModuleImports', () => {
309
309
  it('ignores types declared by derived modules', () => {
310
310
  const model: Model = {
311
311
  variant: 'specs',
312
- narratives: [
312
+ scenes: [
313
313
  {
314
314
  name: 'Consumer',
315
315
  id: 'consumer-1',
316
- slices: [
316
+ moments: [
317
317
  {
318
318
  name: 'test',
319
319
  type: 'command',
@@ -348,13 +348,13 @@ describe('computeCrossModuleImports', () => {
348
348
  {
349
349
  sourceFile: 'derived.ts',
350
350
  isDerived: true,
351
- contains: { narrativeIds: [] },
351
+ contains: { sceneIds: [] },
352
352
  declares: { messages: [{ kind: 'event', name: 'DerivedEvent' }] },
353
353
  },
354
354
  {
355
355
  sourceFile: 'consumer.ts',
356
356
  isDerived: false,
357
- contains: { narrativeIds: ['consumer-1'] },
357
+ contains: { sceneIds: ['consumer-1'] },
358
358
  declares: { messages: [] },
359
359
  },
360
360
  ],
@@ -369,13 +369,13 @@ describe('computeCrossModuleImports', () => {
369
369
  it('sorts imports by source path', () => {
370
370
  const model: Model = {
371
371
  variant: 'specs',
372
- narratives: [
373
- { name: 'Types1', id: 'types-1', slices: [] },
374
- { name: 'Types2', id: 'types-2', slices: [] },
372
+ scenes: [
373
+ { name: 'Types1', id: 'types-1', moments: [] },
374
+ { name: 'Types2', id: 'types-2', moments: [] },
375
375
  {
376
376
  name: 'Consumer',
377
377
  id: 'consumer-1',
378
- slices: [
378
+ moments: [
379
379
  {
380
380
  name: 'test',
381
381
  type: 'command',
@@ -416,19 +416,19 @@ describe('computeCrossModuleImports', () => {
416
416
  {
417
417
  sourceFile: 'z-types.ts',
418
418
  isDerived: false,
419
- contains: { narrativeIds: ['types-1'] },
419
+ contains: { sceneIds: ['types-1'] },
420
420
  declares: { messages: [{ kind: 'event', name: 'ZEvent' }] },
421
421
  },
422
422
  {
423
423
  sourceFile: 'a-types.ts',
424
424
  isDerived: false,
425
- contains: { narrativeIds: ['types-2'] },
425
+ contains: { sceneIds: ['types-2'] },
426
426
  declares: { messages: [{ kind: 'event', name: 'AEvent' }] },
427
427
  },
428
428
  {
429
429
  sourceFile: 'consumer.ts',
430
430
  isDerived: false,
431
- contains: { narrativeIds: ['consumer-1'] },
431
+ contains: { sceneIds: ['consumer-1'] },
432
432
  declares: { messages: [] },
433
433
  },
434
434
  ],
@@ -445,14 +445,14 @@ describe('computeAllCrossModuleDependencies', () => {
445
445
  it('returns empty maps when no cross-module imports exist', () => {
446
446
  const model: Model = {
447
447
  variant: 'specs',
448
- narratives: [{ name: 'Test', id: 'test-1', slices: [] }],
448
+ scenes: [{ name: 'Test', id: 'test-1', moments: [] }],
449
449
  messages: [{ type: 'event', source: 'internal', name: 'LocalEvent', fields: [] }],
450
450
  integrations: [],
451
451
  modules: [
452
452
  {
453
453
  sourceFile: 'self-contained.ts',
454
454
  isDerived: false,
455
- contains: { narrativeIds: ['test-1'] },
455
+ contains: { sceneIds: ['test-1'] },
456
456
  declares: { messages: [{ kind: 'event', name: 'LocalEvent' }] },
457
457
  },
458
458
  ],
@@ -467,12 +467,12 @@ describe('computeAllCrossModuleDependencies', () => {
467
467
  it('computes imports and exports in a single pass', () => {
468
468
  const model: Model = {
469
469
  variant: 'specs',
470
- narratives: [
471
- { name: 'Shared', id: 'shared-1', slices: [] },
470
+ scenes: [
471
+ { name: 'Shared', id: 'shared-1', moments: [] },
472
472
  {
473
473
  name: 'Consumer',
474
474
  id: 'consumer-1',
475
- slices: [
475
+ moments: [
476
476
  {
477
477
  name: 'test',
478
478
  type: 'command',
@@ -507,13 +507,13 @@ describe('computeAllCrossModuleDependencies', () => {
507
507
  {
508
508
  sourceFile: 'shared/types.ts',
509
509
  isDerived: false,
510
- contains: { narrativeIds: ['shared-1'] },
510
+ contains: { sceneIds: ['shared-1'] },
511
511
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
512
512
  },
513
513
  {
514
514
  sourceFile: 'features/consumer.ts',
515
515
  isDerived: false,
516
- contains: { narrativeIds: ['consumer-1'] },
516
+ contains: { sceneIds: ['consumer-1'] },
517
517
  declares: { messages: [] },
518
518
  },
519
519
  ],
@@ -534,12 +534,12 @@ describe('computeAllCrossModuleDependencies', () => {
534
534
  it('aggregates exports from multiple importing modules', () => {
535
535
  const model: Model = {
536
536
  variant: 'specs',
537
- narratives: [
538
- { name: 'Shared', id: 'shared-1', slices: [] },
537
+ scenes: [
538
+ { name: 'Shared', id: 'shared-1', moments: [] },
539
539
  {
540
540
  name: 'Consumer1',
541
541
  id: 'consumer-1',
542
- slices: [
542
+ moments: [
543
543
  {
544
544
  name: 'test',
545
545
  type: 'command',
@@ -565,7 +565,7 @@ describe('computeAllCrossModuleDependencies', () => {
565
565
  {
566
566
  name: 'Consumer2',
567
567
  id: 'consumer-2',
568
- slices: [
568
+ moments: [
569
569
  {
570
570
  name: 'test',
571
571
  type: 'command',
@@ -598,7 +598,7 @@ describe('computeAllCrossModuleDependencies', () => {
598
598
  {
599
599
  sourceFile: 'shared.ts',
600
600
  isDerived: false,
601
- contains: { narrativeIds: ['shared-1'] },
601
+ contains: { sceneIds: ['shared-1'] },
602
602
  declares: {
603
603
  messages: [
604
604
  { kind: 'event', name: 'EventA' },
@@ -609,13 +609,13 @@ describe('computeAllCrossModuleDependencies', () => {
609
609
  {
610
610
  sourceFile: 'consumer1.ts',
611
611
  isDerived: false,
612
- contains: { narrativeIds: ['consumer-1'] },
612
+ contains: { sceneIds: ['consumer-1'] },
613
613
  declares: { messages: [] },
614
614
  },
615
615
  {
616
616
  sourceFile: 'consumer2.ts',
617
617
  isDerived: false,
618
- contains: { narrativeIds: ['consumer-2'] },
618
+ contains: { sceneIds: ['consumer-2'] },
619
619
  declares: { messages: [] },
620
620
  },
621
621
  ],
@@ -1,7 +1,7 @@
1
1
  import type { Model, Module } from '../../index';
2
2
  import { basename, dirname, extname, join, relative } from '../../loader/fs-path';
3
3
  import { parseMessageKey, sortImportsBySource, toMessageKey } from './ordering';
4
- import { collectMessageKeysFromNarratives } from './spec-traversal';
4
+ import { collectMessageKeysFromScenes } from './spec-traversal';
5
5
  import type { CrossModuleImport } from './types';
6
6
 
7
7
  export type { CrossModuleImport };
@@ -123,10 +123,10 @@ function convertToImports(fromSourceFile: string, dependencyMap: Map<string, str
123
123
  }
124
124
 
125
125
  function collectUsedMessageKeysForModule(module: Module, model: Model): Set<string> {
126
- const narrativeIds = new Set(module.contains.narrativeIds);
127
- const narratives = model.narratives.filter((n) => n.id && narrativeIds.has(n.id));
126
+ const sceneIds = new Set(module.contains.sceneIds);
127
+ const scenes = model.scenes.filter((n) => n.id && sceneIds.has(n.id));
128
128
 
129
- const usedKeys = collectMessageKeysFromNarratives(narratives);
129
+ const usedKeys = collectMessageKeysFromScenes(scenes);
130
130
 
131
131
  const modelKeys = new Set(model.messages.map((m) => toMessageKey(m.type, m.name)));
132
132
  return new Set([...usedKeys].filter((k) => modelKeys.has(k)));
@@ -10,7 +10,7 @@ import { buildTypeAliases } from './types';
10
10
  export function generateTypeScriptCode(schema: Model, opts: { flowImport: string; integrationImport: string }): string {
11
11
  const f = ts.factory;
12
12
  const messages = schema.messages ?? [];
13
- const flows = schema.narratives ?? [];
13
+ const flows = schema.scenes ?? [];
14
14
  const integrations = schema.integrations ?? [];
15
15
 
16
16
  const allTypeIntegrationNames = extractTypeIntegrationNames(flows);
@@ -61,14 +61,14 @@ export function generateTypeScriptCode(schema: Model, opts: { flowImport: string
61
61
  const usedMessages = messages.filter((msg) => {
62
62
  const isImportedFromIntegration = usedTypeIntegrationNames.includes(msg.name);
63
63
  const isUsedInFlow = usageAnalysis.usedTypes.has(msg.name);
64
- const hasEmptyFlowSlices = flows.length === 0 || flows.every((flow) => flow.slices.length === 0);
64
+ const hasEmptyFlowMoments = flows.length === 0 || flows.every((flow) => flow.moments.length === 0);
65
65
 
66
66
  // Don't generate local definitions for types imported from integrations
67
67
  if (isImportedFromIntegration) {
68
68
  return false;
69
69
  }
70
70
 
71
- return isUsedInFlow || hasEmptyFlowSlices;
71
+ return isUsedInFlow || hasEmptyFlowMoments;
72
72
  });
73
73
 
74
74
  const statements = buildStatements(
@@ -94,7 +94,7 @@ function buildStatements(
94
94
  typeIntegrationNames: string[],
95
95
  valueIntegrationNames: string[],
96
96
  usedFlowFunctionNames: string[],
97
- flows: Model['narratives'],
97
+ flows: Model['scenes'],
98
98
  ): ts.Statement[] {
99
99
  const statements: ts.Statement[] = [];
100
100
 
@@ -1,11 +1,11 @@
1
1
  import type tsNS from 'typescript';
2
2
  import type { z } from 'zod';
3
3
  import type {
4
- CommandSlice as CommandSliceType,
5
- ExperienceSlice as ExperienceSliceType,
6
- Narrative,
7
- QuerySlice as QuerySliceType,
8
- ReactSlice as ReactSliceType,
4
+ CommandMoment as CommandMomentType,
5
+ ExperienceMoment as ExperienceMomentType,
6
+ QueryMoment as QueryMomentType,
7
+ ReactMoment as ReactMomentType,
8
+ Scene,
9
9
  } from '../../../index';
10
10
  import type {
11
11
  ClientSpecNode,
@@ -19,17 +19,17 @@ import type {
19
19
  import { jsonToExpr } from '../ast/emit-helpers';
20
20
  import { buildConsolidatedGwtSpecBlock, type GWTBlock } from './gwt';
21
21
 
22
- type CommandSlice = CommandSliceType;
23
- type QuerySlice = QuerySliceType;
24
- type ReactSlice = ReactSliceType;
25
- type ExperienceSlice = ExperienceSliceType;
22
+ type CommandMoment = CommandMomentType;
23
+ type QueryMoment = QueryMomentType;
24
+ type ReactMoment = ReactMomentType;
25
+ type ExperienceMoment = ExperienceMomentType;
26
26
  type Example = z.infer<typeof ExampleSchema>;
27
27
  type DataSinkItem = z.infer<typeof DataSinkSchema>;
28
28
  type DataSourceItem = z.infer<typeof DataSourceSchema>;
29
29
  type DataTargetItem = z.infer<typeof DataTargetSchema>;
30
30
  type Destination = z.infer<typeof DestinationSchema>;
31
31
  type Origin = z.infer<typeof OriginSchema>;
32
- type Slice = CommandSlice | QuerySlice | ReactSlice | ExperienceSlice;
32
+ type Moment = CommandMoment | QueryMoment | ReactMoment | ExperienceMoment;
33
33
 
34
34
  function buildClientSpecNode(
35
35
  ts: typeof import('typescript'),
@@ -400,7 +400,7 @@ function addClientToChain(
400
400
  ts: typeof import('typescript'),
401
401
  f: tsNS.NodeFactory,
402
402
  chain: tsNS.Expression,
403
- slice: CommandSlice | QuerySlice | ReactSlice | ExperienceSlice,
403
+ slice: CommandMoment | QueryMoment | ReactMoment | ExperienceMoment,
404
404
  ): tsNS.Expression {
405
405
  if (
406
406
  'client' in slice &&
@@ -427,7 +427,7 @@ function addClientToChain(
427
427
  function addRequestToChain(
428
428
  f: tsNS.NodeFactory,
429
429
  chain: tsNS.Expression,
430
- slice: CommandSlice | QuerySlice | ReactSlice | ExperienceSlice,
430
+ slice: CommandMoment | QueryMoment | ReactMoment | ExperienceMoment,
431
431
  ): tsNS.Expression {
432
432
  if ('request' in slice && slice.request !== null && slice.request !== undefined) {
433
433
  const gqlTpl = f.createNoSubstitutionTemplateLiteral(slice.request);
@@ -487,12 +487,12 @@ function processGivenStep(step: StepWithDocString, gwtBlock: GWTBlock): void {
487
487
 
488
488
  function processWhenStep(
489
489
  step: StepWithDocString,
490
- sliceType: 'command' | 'query' | 'react' | 'experience',
490
+ momentType: 'command' | 'query' | 'react' | 'experience',
491
491
  gwtBlock: GWTBlock,
492
492
  ): void {
493
- if (sliceType === 'command') {
493
+ if (momentType === 'command') {
494
494
  gwtBlock.when = { commandRef: step.text, exampleData: step.docString ?? {} };
495
- } else if (sliceType === 'react' || sliceType === 'query') {
495
+ } else if (momentType === 'react' || momentType === 'query') {
496
496
  const eventData = { eventRef: step.text, exampleData: step.docString ?? {} };
497
497
  if (!gwtBlock.when) {
498
498
  gwtBlock.when = [eventData];
@@ -508,7 +508,7 @@ function processThenStep(step: StepWithDocString, gwtBlock: GWTBlock): void {
508
508
 
509
509
  function processStepsFormat(
510
510
  steps: Step[],
511
- sliceType: 'command' | 'query' | 'react' | 'experience',
511
+ momentType: 'command' | 'query' | 'react' | 'experience',
512
512
  gwtBlock: GWTBlock,
513
513
  ): void {
514
514
  let effectiveKeyword: 'Given' | 'When' | 'Then' = 'Given';
@@ -526,7 +526,7 @@ function processStepsFormat(
526
526
  if (effectiveKeyword === 'Given') {
527
527
  processGivenStep(step, gwtBlock);
528
528
  } else if (effectiveKeyword === 'When') {
529
- processWhenStep(step, sliceType, gwtBlock);
529
+ processWhenStep(step, momentType, gwtBlock);
530
530
  } else if (effectiveKeyword === 'Then') {
531
531
  processThenStep(step, gwtBlock);
532
532
  }
@@ -558,13 +558,13 @@ function processOldFormat(oldExample: OldFormatExample, gwtBlock: GWTBlock): voi
558
558
  }
559
559
  }
560
560
 
561
- function convertExampleToGWT(example: Example, sliceType: 'command' | 'query' | 'react' | 'experience'): GWTBlock {
561
+ function convertExampleToGWT(example: Example, momentType: 'command' | 'query' | 'react' | 'experience'): GWTBlock {
562
562
  const gwtBlock: GWTBlock = { then: [] };
563
563
  const oldExample = example as OldFormatExample;
564
564
  (gwtBlock as { name?: string }).name = oldExample.name ?? oldExample.description;
565
565
 
566
566
  if (oldExample.steps !== undefined && oldExample.steps.length > 0) {
567
- processStepsFormat(oldExample.steps, sliceType, gwtBlock);
567
+ processStepsFormat(oldExample.steps, momentType, gwtBlock);
568
568
  } else {
569
569
  processOldFormat(oldExample, gwtBlock);
570
570
  }
@@ -598,14 +598,14 @@ function buildConsolidatedRules(
598
598
  ts: typeof import('typescript'),
599
599
  f: tsNS.NodeFactory,
600
600
  ruleGroups: Map<string, RuleGroup>,
601
- sliceType: 'command' | 'query' | 'react' | 'experience',
601
+ momentType: 'command' | 'query' | 'react' | 'experience',
602
602
  messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
603
603
  ): tsNS.Statement[] {
604
604
  const allRuleStatements: tsNS.Statement[] = [];
605
605
 
606
606
  for (const { rule, examples } of ruleGroups.values()) {
607
607
  const gwtBlocks = examples.map((example) => {
608
- const gwtBlock = convertExampleToGWT(example, sliceType);
608
+ const gwtBlock = convertExampleToGWT(example, momentType);
609
609
  const extendedGwtBlock = gwtBlock as GWTBlock & {
610
610
  ruleDescription?: string;
611
611
  exampleDescription?: string;
@@ -623,7 +623,7 @@ function buildConsolidatedRules(
623
623
  });
624
624
 
625
625
  allRuleStatements.push(
626
- buildConsolidatedGwtSpecBlock(ts, f, { id: rule.id, description: rule.name }, gwtBlocks, sliceType, messages),
626
+ buildConsolidatedGwtSpecBlock(ts, f, { id: rule.id, description: rule.name }, gwtBlocks, momentType, messages),
627
627
  );
628
628
  }
629
629
 
@@ -634,11 +634,11 @@ function buildSingleSpecStatements(
634
634
  ts: typeof import('typescript'),
635
635
  f: tsNS.NodeFactory,
636
636
  spec: SpecType,
637
- sliceType: 'command' | 'query' | 'react' | 'experience',
637
+ momentType: 'command' | 'query' | 'react' | 'experience',
638
638
  messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
639
639
  ): tsNS.Statement {
640
640
  const ruleGroups = buildRuleGroups(spec.rules);
641
- const allRuleStatements = buildConsolidatedRules(ts, f, ruleGroups, sliceType, messages);
641
+ const allRuleStatements = buildConsolidatedRules(ts, f, ruleGroups, momentType, messages);
642
642
 
643
643
  const arrowFunction = f.createArrowFunction(
644
644
  undefined,
@@ -681,8 +681,8 @@ function convertOldSpecToNewFormat(oldSpec: OldSpecFormat): SpecType | null {
681
681
  function buildServerStatements(
682
682
  ts: typeof import('typescript'),
683
683
  f: tsNS.NodeFactory,
684
- server: CommandSlice['server'] | QuerySlice['server'] | ReactSlice['server'],
685
- sliceType: 'command' | 'query' | 'react' | 'experience',
684
+ server: CommandMoment['server'] | QueryMoment['server'] | ReactMoment['server'],
685
+ momentType: 'command' | 'query' | 'react' | 'experience',
686
686
  messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
687
687
  ): tsNS.Statement[] {
688
688
  const statements: tsNS.Statement[] = [];
@@ -700,12 +700,12 @@ function buildServerStatements(
700
700
  if (server.specs !== null && server.specs !== undefined) {
701
701
  if (Array.isArray(server.specs)) {
702
702
  for (const spec of server.specs as SpecType[]) {
703
- statements.push(buildSingleSpecStatements(ts, f, spec, sliceType, messages));
703
+ statements.push(buildSingleSpecStatements(ts, f, spec, momentType, messages));
704
704
  }
705
705
  } else {
706
706
  const convertedSpec = convertOldSpecToNewFormat(server.specs as OldSpecFormat);
707
707
  if (convertedSpec !== null) {
708
- statements.push(buildSingleSpecStatements(ts, f, convertedSpec, sliceType, messages));
708
+ statements.push(buildSingleSpecStatements(ts, f, convertedSpec, momentType, messages));
709
709
  }
710
710
  }
711
711
  }
@@ -717,16 +717,16 @@ function addServerToChain(
717
717
  ts: typeof import('typescript'),
718
718
  f: tsNS.NodeFactory,
719
719
  chain: tsNS.Expression,
720
- slice: CommandSlice | QuerySlice | ReactSlice | ExperienceSlice,
720
+ slice: CommandMoment | QueryMoment | ReactMoment | ExperienceMoment,
721
721
  messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
722
722
  ): tsNS.Expression {
723
723
  if ('server' in slice && slice.server !== null && slice.server !== undefined) {
724
- const sliceType = slice.type as 'command' | 'query' | 'react' | 'experience';
724
+ const momentType = slice.type as 'command' | 'query' | 'react' | 'experience';
725
725
  const serverStatements = buildServerStatements(
726
726
  ts,
727
727
  f,
728
728
  slice.server,
729
- sliceType === 'experience' ? 'react' : sliceType,
729
+ momentType === 'experience' ? 'react' : momentType,
730
730
  messages,
731
731
  );
732
732
 
@@ -744,10 +744,10 @@ function addServerToChain(
744
744
  return chain;
745
745
  }
746
746
 
747
- function buildSlice(
747
+ function buildMoment(
748
748
  ts: typeof import('typescript'),
749
749
  f: tsNS.NodeFactory,
750
- slice: CommandSlice | QuerySlice | ReactSlice | ExperienceSlice,
750
+ slice: CommandMoment | QueryMoment | ReactMoment | ExperienceMoment,
751
751
  messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
752
752
  ): tsNS.Statement {
753
753
  const sliceCtor =
@@ -775,12 +775,12 @@ function buildSlice(
775
775
 
776
776
  export function buildFlowStatements(
777
777
  ts: typeof import('typescript'),
778
- flow: Narrative,
778
+ flow: Scene,
779
779
  messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
780
780
  ): tsNS.Statement[] {
781
781
  const f = ts.factory;
782
782
 
783
- const body = (flow.slices ?? []).map((sl: Slice) => buildSlice(ts, f, sl, messages));
783
+ const body = (flow.moments ?? []).map((sl: Moment) => buildMoment(ts, f, sl, messages));
784
784
 
785
785
  const flowArgs: tsNS.Expression[] = [f.createStringLiteral(flow.name)];
786
786
  if (flow.id !== null && flow.id !== undefined) {
@@ -797,7 +797,7 @@ export function buildFlowStatements(
797
797
  ),
798
798
  );
799
799
 
800
- const flowExpr = f.createCallExpression(f.createIdentifier('narrative'), undefined, flowArgs);
800
+ const flowExpr = f.createCallExpression(f.createIdentifier('scene'), undefined, flowArgs);
801
801
 
802
802
  return [f.createExpressionStatement(flowExpr)];
803
803
  }
@@ -8,7 +8,7 @@ export const ALL_FLOW_FUNCTION_NAMES = [
8
8
  'experience',
9
9
  'gql',
10
10
  'it',
11
- 'narrative',
11
+ 'scene',
12
12
  'query',
13
13
  'react',
14
14
  'rule',