@auto-engineer/narrative 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 (181) 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 +18 -0
  5. package/dist/scripts/convert-flow-exec.js +2 -2
  6. package/dist/scripts/convert-flow-exec.js.map +1 -1
  7. package/dist/scripts/print-schema.js +5 -5
  8. package/dist/scripts/print-schema.js.map +1 -1
  9. package/dist/src/fluent-builder.d.ts +29 -29
  10. package/dist/src/fluent-builder.d.ts.map +1 -1
  11. package/dist/src/fluent-builder.js +81 -81
  12. package/dist/src/fluent-builder.js.map +1 -1
  13. package/dist/src/{getNarratives.d.ts → getScenes.d.ts} +6 -6
  14. package/dist/src/getScenes.d.ts.map +1 -0
  15. package/dist/src/{getNarratives.js → getScenes.js} +16 -16
  16. package/dist/src/getScenes.js.map +1 -0
  17. package/dist/src/id/addAutoIds.d.ts.map +1 -1
  18. package/dist/src/id/addAutoIds.js +22 -22
  19. package/dist/src/id/addAutoIds.js.map +1 -1
  20. package/dist/src/id/hasAllIds.d.ts.map +1 -1
  21. package/dist/src/id/hasAllIds.js +2 -2
  22. package/dist/src/id/hasAllIds.js.map +1 -1
  23. package/dist/src/index.d.ts +8 -8
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +4 -4
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/loader/index.js +1 -1
  28. package/dist/src/loader/index.js.map +1 -1
  29. package/dist/src/loader/runtime-cjs.js +1 -1
  30. package/dist/src/loader/runtime-cjs.js.map +1 -1
  31. package/dist/src/narrative-context.d.ts +9 -9
  32. package/dist/src/narrative-context.d.ts.map +1 -1
  33. package/dist/src/narrative-context.js +47 -47
  34. package/dist/src/narrative-context.js.map +1 -1
  35. package/dist/src/narrative-registry.d.ts +6 -6
  36. package/dist/src/narrative-registry.d.ts.map +1 -1
  37. package/dist/src/narrative-registry.js +26 -26
  38. package/dist/src/narrative-registry.js.map +1 -1
  39. package/dist/src/narrative.d.ts +5 -5
  40. package/dist/src/narrative.d.ts.map +1 -1
  41. package/dist/src/narrative.js +26 -27
  42. package/dist/src/narrative.js.map +1 -1
  43. package/dist/src/parse-graphql-request.d.ts +1 -1
  44. package/dist/src/parse-graphql-request.d.ts.map +1 -1
  45. package/dist/src/parse-graphql-request.js +3 -3
  46. package/dist/src/parse-graphql-request.js.map +1 -1
  47. package/dist/src/samples/items.narrative.js +2 -2
  48. package/dist/src/samples/items.narrative.js.map +1 -1
  49. package/dist/src/samples/mixed-given-types.narrative.js +2 -2
  50. package/dist/src/samples/mixed-given-types.narrative.js.map +1 -1
  51. package/dist/src/samples/place-order.narrative.js +2 -2
  52. package/dist/src/samples/place-order.narrative.js.map +1 -1
  53. package/dist/src/samples/questionnaires.narrative.js +2 -2
  54. package/dist/src/samples/questionnaires.narrative.js.map +1 -1
  55. package/dist/src/samples/seasonal-assistant.schema.json +2 -2
  56. package/dist/src/samples/test-with-ids.narrative.js +2 -2
  57. package/dist/src/samples/test-with-ids.narrative.js.map +1 -1
  58. package/dist/src/schema.d.ts +136 -136
  59. package/dist/src/schema.d.ts.map +1 -1
  60. package/dist/src/schema.js +76 -76
  61. package/dist/src/schema.js.map +1 -1
  62. package/dist/src/slice-builder.d.ts +6 -6
  63. package/dist/src/slice-builder.d.ts.map +1 -1
  64. package/dist/src/slice-builder.js +21 -21
  65. package/dist/src/slice-builder.js.map +1 -1
  66. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +1 -1
  67. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -1
  68. package/dist/src/transformers/model-to-narrative/cross-module-imports.js +4 -4
  69. package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
  70. package/dist/src/transformers/model-to-narrative/generators/compose.js +3 -3
  71. package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -1
  72. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +2 -2
  73. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
  74. package/dist/src/transformers/model-to-narrative/generators/flow.js +20 -20
  75. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
  76. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +1 -1
  77. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -1
  78. package/dist/src/transformers/model-to-narrative/generators/imports.js +1 -1
  79. package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -1
  80. package/dist/src/transformers/model-to-narrative/generators/module-code.js +14 -14
  81. package/dist/src/transformers/model-to-narrative/generators/module-code.js.map +1 -1
  82. package/dist/src/transformers/model-to-narrative/index.d.ts +4 -4
  83. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -1
  84. package/dist/src/transformers/model-to-narrative/index.js +1 -1
  85. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts +2 -2
  86. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts.map +1 -1
  87. package/dist/src/transformers/model-to-narrative/spec-traversal.js +5 -5
  88. package/dist/src/transformers/model-to-narrative/spec-traversal.js.map +1 -1
  89. package/dist/src/transformers/model-to-narrative/types.d.ts +1 -1
  90. package/dist/src/transformers/model-to-narrative/types.d.ts.map +1 -1
  91. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +1 -1
  92. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -1
  93. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +4 -4
  94. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -1
  95. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
  96. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
  97. package/dist/src/transformers/model-to-narrative/validate-modules.js +19 -19
  98. package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
  99. package/dist/src/transformers/narrative-to-model/assemble.d.ts +2 -2
  100. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
  101. package/dist/src/transformers/narrative-to-model/assemble.js +10 -3
  102. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -1
  103. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -1
  104. package/dist/src/transformers/narrative-to-model/debug.js +1 -1
  105. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -1
  106. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts +2 -2
  107. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
  108. package/dist/src/transformers/narrative-to-model/derive-modules.js +9 -9
  109. package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -1
  110. package/dist/src/transformers/narrative-to-model/index.d.ts +2 -2
  111. package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -1
  112. package/dist/src/transformers/narrative-to-model/index.js +39 -39
  113. package/dist/src/transformers/narrative-to-model/index.js.map +1 -1
  114. package/dist/src/transformers/narrative-to-model/spec-processors.js +1 -1
  115. package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -1
  116. package/dist/src/transformers/narrative-to-model/strings.d.ts +1 -1
  117. package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -1
  118. package/dist/src/transformers/narrative-to-model/strings.js +6 -6
  119. package/dist/src/transformers/narrative-to-model/strings.js.map +1 -1
  120. package/dist/src/validate-slice-requests.d.ts +4 -4
  121. package/dist/src/validate-slice-requests.d.ts.map +1 -1
  122. package/dist/src/validate-slice-requests.js +34 -34
  123. package/dist/src/validate-slice-requests.js.map +1 -1
  124. package/dist/tsconfig.tsbuildinfo +1 -1
  125. package/package.json +4 -4
  126. package/scripts/convert-flow-exec.ts +2 -2
  127. package/scripts/print-schema.ts +8 -8
  128. package/src/fluent-builder.specs.ts +3 -3
  129. package/src/fluent-builder.ts +141 -141
  130. package/src/{getNarratives.cache.specs.ts → getScenes.cache.specs.ts} +45 -45
  131. package/src/{getNarratives.specs.ts → getScenes.specs.ts} +302 -300
  132. package/src/{getNarratives.ts → getScenes.ts} +20 -20
  133. package/src/id/addAutoIds.specs.ts +105 -105
  134. package/src/id/addAutoIds.ts +26 -26
  135. package/src/id/hasAllIds.specs.ts +59 -59
  136. package/src/id/hasAllIds.ts +6 -6
  137. package/src/index.ts +12 -13
  138. package/src/loader/index.ts +1 -1
  139. package/src/loader/runtime-cjs.ts +1 -1
  140. package/src/model-to-narrative.specs.ts +133 -135
  141. package/src/narrative-context.specs.ts +24 -24
  142. package/src/narrative-context.ts +61 -61
  143. package/src/narrative-registry.ts +31 -31
  144. package/src/narrative.ts +31 -33
  145. package/src/parse-graphql-request.specs.ts +5 -5
  146. package/src/parse-graphql-request.ts +3 -3
  147. package/src/samples/items.narrative.ts +2 -2
  148. package/src/samples/mixed-given-types.narrative.ts +2 -2
  149. package/src/samples/place-order.narrative.ts +2 -2
  150. package/src/samples/questionnaires.narrative.ts +2 -2
  151. package/src/samples/seasonal-assistant.schema.json +2 -2
  152. package/src/samples/test-with-ids.narrative.ts +2 -2
  153. package/src/schema.specs.ts +99 -91
  154. package/src/schema.ts +89 -89
  155. package/src/slice-builder.ts +30 -30
  156. package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +1 -1
  157. package/src/transformers/model-to-narrative/cross-module-imports.specs.ts +43 -43
  158. package/src/transformers/model-to-narrative/cross-module-imports.ts +4 -4
  159. package/src/transformers/model-to-narrative/generators/compose.ts +4 -4
  160. package/src/transformers/model-to-narrative/generators/flow.ts +36 -36
  161. package/src/transformers/model-to-narrative/generators/imports.ts +1 -1
  162. package/src/transformers/model-to-narrative/generators/module-code.ts +15 -15
  163. package/src/transformers/model-to-narrative/index.ts +4 -4
  164. package/src/transformers/model-to-narrative/modules.specs.ts +58 -58
  165. package/src/transformers/model-to-narrative/spec-traversal.specs.ts +43 -43
  166. package/src/transformers/model-to-narrative/spec-traversal.ts +6 -6
  167. package/src/transformers/model-to-narrative/types.ts +1 -1
  168. package/src/transformers/model-to-narrative/utils/integration-extractor.ts +5 -5
  169. package/src/transformers/model-to-narrative/validate-modules.ts +22 -22
  170. package/src/transformers/narrative-to-model/assemble.ts +12 -4
  171. package/src/transformers/narrative-to-model/debug.ts +1 -1
  172. package/src/transformers/narrative-to-model/derive-modules.specs.ts +35 -35
  173. package/src/transformers/narrative-to-model/derive-modules.ts +11 -11
  174. package/src/transformers/narrative-to-model/index.ts +47 -47
  175. package/src/transformers/narrative-to-model/spec-processors.ts +1 -1
  176. package/src/transformers/narrative-to-model/strings.ts +6 -6
  177. package/src/transformers/narrative-to-model/type-inference.specs.ts +11 -11
  178. package/src/validate-slice-requests.specs.ts +113 -113
  179. package/src/validate-slice-requests.ts +49 -49
  180. package/dist/src/getNarratives.d.ts.map +0 -1
  181. package/dist/src/getNarratives.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { Message, Model, Narrative, Slice } from '../../index';
1
+ import type { Message, Model, Moment, Scene } from '../../index';
2
2
  import { integrationExportRegistry } from '../../integration-export-registry';
3
3
  import { globalIntegrationRegistry } from '../../integration-registry';
4
4
  import type { TypeInfo } from '../../loader/ts-utils';
@@ -7,7 +7,7 @@ import { applyExampleShapeHints, type ExampleShapeHints } from './example-shapes
7
7
  import { inlineAllMessageFieldTypes } from './inlining';
8
8
  import { extractMessagesFromIntegrations, processDataItemIntegrations } from './integrations';
9
9
  import { processGiven, processThen, processWhen } from './spec-processors';
10
- import { matchesNarrativePattern } from './strings';
10
+ import { matchesScenePattern } from './strings';
11
11
  import { buildTypeInfoFromMessages, resolveInferredType } from './type-inference';
12
12
 
13
13
  type TypeResolver = (
@@ -23,13 +23,13 @@ function buildUnionTypes(typesByFile?: Map<string, Map<string, TypeInfo>>): Map<
23
23
  return u.size ? u : undefined;
24
24
  }
25
25
 
26
- function getTypesForNarrative(
27
- flow: Narrative,
26
+ function getTypesForScene(
27
+ scene: Scene,
28
28
  typesByFile?: Map<string, Map<string, TypeInfo>>,
29
29
  ): Map<string, TypeInfo> | undefined {
30
30
  if (!typesByFile) return undefined;
31
31
 
32
- const sf = (flow as Record<string, unknown>).sourceFile as string | undefined;
32
+ const sf = (scene as Record<string, unknown>).sourceFile as string | undefined;
33
33
  if (typeof sf === 'string') {
34
34
  const exact = typesByFile.get(sf) || typesByFile.get(sf.replace(/\\/g, '/'));
35
35
  if (exact && exact.size > 0) return exact;
@@ -37,30 +37,30 @@ function getTypesForNarrative(
37
37
 
38
38
  for (const [filePath, fileTypes] of typesByFile) {
39
39
  const fileName = filePath.toLowerCase();
40
- if (matchesNarrativePattern(fileName, flow.name)) {
40
+ if (matchesScenePattern(fileName, scene.name)) {
41
41
  return fileTypes;
42
42
  }
43
43
  }
44
44
  return undefined;
45
45
  }
46
46
 
47
- function tryResolveFromNarrativeTypes(
47
+ function tryResolveFromSceneTypes(
48
48
  t: string,
49
- narrativeSpecificTypes: Map<string, TypeInfo>,
49
+ sceneSpecificTypes: Map<string, TypeInfo>,
50
50
  expected?: 'command' | 'event' | 'state' | 'query',
51
51
  exampleData?: unknown,
52
52
  ): { resolvedName: string; typeInfo: TypeInfo | undefined } {
53
53
  if (t !== 'InferredType') {
54
- const typeInfo = narrativeSpecificTypes.get(t);
54
+ const typeInfo = sceneSpecificTypes.get(t);
55
55
  if (typeInfo) {
56
56
  return { resolvedName: t, typeInfo };
57
57
  }
58
- const inferredName = resolveInferredType(t, narrativeSpecificTypes, expected, exampleData);
59
- return { resolvedName: inferredName, typeInfo: narrativeSpecificTypes.get(inferredName) };
58
+ const inferredName = resolveInferredType(t, sceneSpecificTypes, expected, exampleData);
59
+ return { resolvedName: inferredName, typeInfo: sceneSpecificTypes.get(inferredName) };
60
60
  }
61
61
 
62
- const inferredName = resolveInferredType(t, narrativeSpecificTypes, expected, exampleData);
63
- return { resolvedName: inferredName, typeInfo: narrativeSpecificTypes.get(inferredName) };
62
+ const inferredName = resolveInferredType(t, sceneSpecificTypes, expected, exampleData);
63
+ return { resolvedName: inferredName, typeInfo: sceneSpecificTypes.get(inferredName) };
64
64
  }
65
65
 
66
66
  function tryFallbackToUnionTypes(
@@ -105,7 +105,7 @@ function tryResolveFromUnionTypes(
105
105
  }
106
106
 
107
107
  function createTypeResolver(
108
- narrativeSpecificTypes: Map<string, TypeInfo> | undefined,
108
+ sceneSpecificTypes: Map<string, TypeInfo> | undefined,
109
109
  unionTypes: Map<string, TypeInfo> | undefined,
110
110
  messages: Map<string, Message>,
111
111
  ) {
@@ -116,8 +116,8 @@ function createTypeResolver(
116
116
  ): { resolvedName: string; typeInfo: TypeInfo | undefined } => {
117
117
  let result: { resolvedName: string; typeInfo: TypeInfo | undefined } | undefined;
118
118
 
119
- if (narrativeSpecificTypes) {
120
- const nr = tryResolveFromNarrativeTypes(t, narrativeSpecificTypes, expected, exampleData);
119
+ if (sceneSpecificTypes) {
120
+ const nr = tryResolveFromSceneTypes(t, sceneSpecificTypes, expected, exampleData);
121
121
  result = unionTypes
122
122
  ? tryFallbackToUnionTypes(t, nr.resolvedName, nr.typeInfo, unionTypes, expected, exampleData)
123
123
  : nr;
@@ -138,9 +138,9 @@ function createTypeResolver(
138
138
  };
139
139
  }
140
140
 
141
- function getServerSpecs(slice: Slice) {
142
- if ('server' in slice && slice.server?.specs !== undefined) {
143
- return slice.server.specs;
141
+ function getServerSpecs(moment: Moment) {
142
+ if ('server' in moment && moment.server?.specs !== undefined) {
143
+ return moment.server.specs;
144
144
  }
145
145
  return undefined;
146
146
  }
@@ -164,7 +164,7 @@ function isStepWithError(step: Step): step is StepWithError {
164
164
 
165
165
  function processSteps(
166
166
  steps: Step[],
167
- slice: Slice,
167
+ moment: Moment,
168
168
  resolveTypeAndInfo: TypeResolver,
169
169
  messages: Map<string, Message>,
170
170
  exampleShapeHints: ExampleShapeHints,
@@ -191,7 +191,7 @@ function processSteps(
191
191
  if (effectiveKeyword === 'Given') {
192
192
  processGiven([refItem], resolveTypeAndInfo, messages, exampleShapeHints);
193
193
  } else if (effectiveKeyword === 'When') {
194
- processWhen([refItem], slice, resolveTypeAndInfo, messages, exampleShapeHints);
194
+ processWhen([refItem], moment, resolveTypeAndInfo, messages, exampleShapeHints);
195
195
  } else if (effectiveKeyword === 'Then') {
196
196
  processThen([refItem], resolveTypeAndInfo, messages, exampleShapeHints);
197
197
  }
@@ -210,7 +210,7 @@ function isSpecWithRules(spec: unknown): spec is SpecWithRules {
210
210
 
211
211
  function processRuleExamples(
212
212
  rule: { examples: Array<{ steps?: Step[] }> },
213
- slice: Slice,
213
+ moment: Moment,
214
214
  resolveTypeAndInfo: TypeResolver,
215
215
  messages: Map<string, Message>,
216
216
  exampleShapeHints: ExampleShapeHints,
@@ -218,46 +218,46 @@ function processRuleExamples(
218
218
  if (!Array.isArray(rule.examples)) return;
219
219
  for (const example of rule.examples) {
220
220
  if (Array.isArray(example.steps)) {
221
- processSteps(example.steps, slice, resolveTypeAndInfo, messages, exampleShapeHints);
221
+ processSteps(example.steps, moment, resolveTypeAndInfo, messages, exampleShapeHints);
222
222
  }
223
223
  }
224
224
  }
225
225
 
226
- function processSliceSpecs(
227
- slice: Slice,
226
+ function processMomentSpecs(
227
+ moment: Moment,
228
228
  resolveTypeAndInfo: TypeResolver,
229
229
  messages: Map<string, Message>,
230
230
  exampleShapeHints: ExampleShapeHints,
231
231
  ): void {
232
- const serverSpecs = getServerSpecs(slice);
232
+ const serverSpecs = getServerSpecs(moment);
233
233
 
234
234
  if (serverSpecs === undefined || !Array.isArray(serverSpecs)) return;
235
235
 
236
236
  for (const spec of serverSpecs) {
237
237
  if (isSpecWithRules(spec)) {
238
238
  for (const rule of spec.rules) {
239
- processRuleExamples(rule, slice, resolveTypeAndInfo, messages, exampleShapeHints);
239
+ processRuleExamples(rule, moment, resolveTypeAndInfo, messages, exampleShapeHints);
240
240
  }
241
241
  }
242
242
  }
243
243
  }
244
244
 
245
- function processSliceIntegrations(
246
- slice: Slice,
245
+ function processMomentIntegrations(
246
+ moment: Moment,
247
247
  integrations: Map<string, { name: string; description?: string; source: string }>,
248
248
  messages: Map<string, Message>,
249
249
  ): void {
250
250
  // Integrations: from data & via
251
- if ('server' in slice && slice.server != null && 'data' in slice.server && slice.server.data !== undefined) {
252
- const dataItems = slice.server.data.items;
251
+ if ('server' in moment && moment.server != null && 'data' in moment.server && moment.server.data !== undefined) {
252
+ const dataItems = moment.server.data.items;
253
253
  if (Array.isArray(dataItems)) {
254
254
  dataItems.forEach((d: unknown) => {
255
255
  processDataItemIntegrations(d, integrations, messages);
256
256
  });
257
257
  }
258
258
  }
259
- if ('via' in slice && slice.via) {
260
- slice.via.forEach((integrationName: string) => {
259
+ if ('via' in moment && moment.via) {
260
+ moment.via.forEach((integrationName: string) => {
261
261
  if (!integrations.has(integrationName)) {
262
262
  const sourcePath = integrationExportRegistry.getSourcePath(integrationName);
263
263
  if (sourcePath !== null && sourcePath !== undefined && sourcePath !== '') {
@@ -272,24 +272,24 @@ function processSliceIntegrations(
272
272
  }
273
273
  }
274
274
 
275
- function processNarrative(
276
- flow: Narrative,
277
- getNarrativeSpecificTypes: (narrative: Narrative) => Map<string, TypeInfo> | undefined,
275
+ function processScene(
276
+ scene: Scene,
277
+ getSceneSpecificTypes: (scene: Scene) => Map<string, TypeInfo> | undefined,
278
278
  unionTypes: Map<string, TypeInfo> | undefined,
279
279
  messages: Map<string, Message>,
280
280
  integrations: Map<string, { name: string; description?: string; source: string }>,
281
281
  exampleShapeHints: ExampleShapeHints,
282
282
  ): void {
283
- const narrativeSpecificTypes = getNarrativeSpecificTypes(flow);
284
- const resolveTypeAndInfo = createTypeResolver(narrativeSpecificTypes, unionTypes, messages);
283
+ const sceneSpecificTypes = getSceneSpecificTypes(scene);
284
+ const resolveTypeAndInfo = createTypeResolver(sceneSpecificTypes, unionTypes, messages);
285
285
 
286
- flow.slices.forEach((slice: Narrative['slices'][number]) => {
287
- processSliceSpecs(slice, resolveTypeAndInfo, messages, exampleShapeHints);
288
- processSliceIntegrations(slice, integrations, messages);
286
+ scene.moments.forEach((moment: Scene['moments'][number]) => {
287
+ processMomentSpecs(moment, resolveTypeAndInfo, messages, exampleShapeHints);
288
+ processMomentIntegrations(moment, integrations, messages);
289
289
  });
290
290
  }
291
291
 
292
- export const narrativesToModel = (narratives: Narrative[], typesByFile?: Map<string, Map<string, TypeInfo>>): Model => {
292
+ export const scenesToModel = (scenes: Scene[], typesByFile?: Map<string, Map<string, TypeInfo>>): Model => {
293
293
  const messages = new Map<string, Message>();
294
294
  const integrations = new Map<
295
295
  string,
@@ -312,12 +312,12 @@ export const narrativesToModel = (narratives: Narrative[], typesByFile?: Map<str
312
312
  const unionTypes = buildUnionTypes(typesByFile);
313
313
 
314
314
  // pick the best map for a given flow
315
- const getNarrativeSpecificTypes = (narrative: Narrative): Map<string, TypeInfo> | undefined => {
316
- return getTypesForNarrative(narrative, typesByFile);
315
+ const getSceneSpecificTypes = (scene: Scene): Map<string, TypeInfo> | undefined => {
316
+ return getTypesForScene(scene, typesByFile);
317
317
  };
318
318
 
319
- narratives.forEach((narrative) =>
320
- processNarrative(narrative, getNarrativeSpecificTypes, unionTypes, messages, integrations, exampleShapeHints),
319
+ scenes.forEach((scene) =>
320
+ processScene(scene, getSceneSpecificTypes, unionTypes, messages, integrations, exampleShapeHints),
321
321
  );
322
322
  // Ensure all registered integrations are listed
323
323
  for (const integration of registeredIntegrations) {
@@ -340,5 +340,5 @@ export const narrativesToModel = (narratives: Narrative[], typesByFile?: Map<str
340
340
  inlineAllMessageFieldTypes(messages, unionTypes);
341
341
  }
342
342
 
343
- return assembleSpecs(narratives, Array.from(messages.values()), Array.from(integrations.values()));
343
+ return assembleSpecs(scenes, Array.from(messages.values()), Array.from(integrations.values()));
344
344
  };
@@ -398,7 +398,7 @@ function processSingleWhen(
398
398
 
399
399
  log('DEBUG processSingleWhen:', {
400
400
  originalCommandRef,
401
- sliceType: slice.type,
401
+ momentType: slice.type,
402
402
  expected,
403
403
  exampleData: when.exampleData,
404
404
  });
@@ -1,10 +1,10 @@
1
- export function matchesNarrativePattern(fileName: string, flowName: string): boolean {
2
- const flowNameLower = flowName.toLowerCase();
1
+ export function matchesScenePattern(fileName: string, sceneName: string): boolean {
2
+ const sceneNameLower = sceneName.toLowerCase();
3
3
  const patterns = [
4
- flowNameLower.replace(/\s+/g, '-'),
5
- flowNameLower.replace(/\s+/g, ''),
6
- flowNameLower.replace(/\s+/g, '_'),
7
- flowNameLower,
4
+ sceneNameLower.replace(/\s+/g, '-'),
5
+ sceneNameLower.replace(/\s+/g, ''),
6
+ sceneNameLower.replace(/\s+/g, '_'),
7
+ sceneNameLower,
8
8
  ];
9
9
 
10
10
  return patterns.some((pattern) => fileName.includes(pattern));
@@ -1,15 +1,15 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import type { Message, Narrative } from '../../index';
3
- import { narrativesToModel } from './index';
2
+ import type { Message, Scene } from '../../index';
3
+ import { scenesToModel } from './index';
4
4
  import { buildTypeInfoFromMessages, messageToTypeInfo } from './type-inference';
5
5
 
6
6
  describe('Type inference in narrative-to-model transformer', () => {
7
7
  it('should correctly extract command types from when clauses', () => {
8
- const flows: Narrative[] = [
8
+ const flows: Scene[] = [
9
9
  {
10
10
  name: 'Test Flow',
11
11
  id: 'FLOW-001',
12
- slices: [
12
+ moments: [
13
13
  {
14
14
  id: 'SLICE-001',
15
15
  type: 'command',
@@ -108,7 +108,7 @@ describe('Type inference in narrative-to-model transformer', () => {
108
108
  },
109
109
  ];
110
110
 
111
- const model = narrativesToModel(flows);
111
+ const model = scenesToModel(flows);
112
112
 
113
113
  // Should have the correct command messages extracted
114
114
  expect(model.messages.some((msg) => msg.name === 'AnswerQuestion')).toBe(true);
@@ -130,11 +130,11 @@ describe('Type inference in narrative-to-model transformer', () => {
130
130
  });
131
131
 
132
132
  it('should handle single object when/then clauses correctly', () => {
133
- const flows: Narrative[] = [
133
+ const flows: Scene[] = [
134
134
  {
135
135
  name: 'Single Object Flow',
136
136
  id: 'FLOW-001',
137
- slices: [
137
+ moments: [
138
138
  {
139
139
  id: 'SLICE-001',
140
140
  type: 'command',
@@ -177,7 +177,7 @@ describe('Type inference in narrative-to-model transformer', () => {
177
177
  },
178
178
  ];
179
179
 
180
- const model = narrativesToModel(flows);
180
+ const model = scenesToModel(flows);
181
181
 
182
182
  // Should extract the command and event types from single objects
183
183
  expect(model.messages.some((msg) => msg.name === 'TestCommand')).toBe(true);
@@ -188,11 +188,11 @@ describe('Type inference in narrative-to-model transformer', () => {
188
188
 
189
189
  describe('Messages-derived fallback in type resolution', () => {
190
190
  it('resolves InferredType in second example When step via messages populated by first example', () => {
191
- const flows: Narrative[] = [
191
+ const flows: Scene[] = [
192
192
  {
193
193
  name: 'Booking Flow',
194
194
  id: 'FLOW-001',
195
- slices: [
195
+ moments: [
196
196
  {
197
197
  id: 'SLICE-001',
198
198
  type: 'command',
@@ -250,7 +250,7 @@ describe('Messages-derived fallback in type resolution', () => {
250
250
  },
251
251
  ];
252
252
 
253
- const model = narrativesToModel(flows);
253
+ const model = scenesToModel(flows);
254
254
 
255
255
  expect(model.messages.some((msg) => msg.name === 'InferredType')).toBe(false);
256
256
  expect(model.messages.some((msg) => msg.name === 'RequestBooking')).toBe(true);