@auto-engineer/narrative 0.11.11 → 0.11.13

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 (244) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +22 -0
  3. package/dist/src/commands/export-schema-helper.js +1 -2
  4. package/dist/src/commands/export-schema-helper.js.map +1 -1
  5. package/dist/src/getNarratives.cache.specs.d.ts +2 -0
  6. package/dist/src/getNarratives.cache.specs.d.ts.map +1 -0
  7. package/dist/src/{getFlows.cache.specs.js → getNarratives.cache.specs.js} +19 -19
  8. package/dist/src/getNarratives.cache.specs.js.map +1 -0
  9. package/dist/src/getNarratives.specs.d.ts +2 -0
  10. package/dist/src/getNarratives.specs.d.ts.map +1 -0
  11. package/dist/src/{getFlows.specs.js → getNarratives.specs.js} +28 -41
  12. package/dist/src/getNarratives.specs.js.map +1 -0
  13. package/dist/src/id/addAutoIds.specs.js +6 -6
  14. package/dist/src/id/addAutoIds.specs.js.map +1 -1
  15. package/dist/src/id/hasAllIds.specs.js +16 -16
  16. package/dist/src/id/hasAllIds.specs.js.map +1 -1
  17. package/dist/src/model-to-narrative.specs.d.ts +2 -0
  18. package/dist/src/model-to-narrative.specs.d.ts.map +1 -0
  19. package/dist/src/{model-to-flow.specs.js → model-to-narrative.specs.js} +212 -4
  20. package/dist/src/model-to-narrative.specs.js.map +1 -0
  21. package/dist/src/narrative-context.d.ts.map +1 -1
  22. package/dist/src/narrative-context.js +0 -1
  23. package/dist/src/narrative-context.js.map +1 -1
  24. package/dist/src/narrative.d.ts +1 -0
  25. package/dist/src/narrative.d.ts.map +1 -1
  26. package/dist/src/narrative.js +11 -0
  27. package/dist/src/narrative.js.map +1 -1
  28. package/dist/src/samples/items.narrative.d.ts +2 -0
  29. package/dist/src/samples/items.narrative.d.ts.map +1 -0
  30. package/dist/src/samples/{items.flow.js → items.narrative.js} +1 -1
  31. package/dist/src/samples/items.narrative.js.map +1 -0
  32. package/dist/src/samples/mixed-given-types.narrative.d.ts +2 -0
  33. package/dist/src/samples/mixed-given-types.narrative.d.ts.map +1 -0
  34. package/dist/src/samples/{mixed-given-types.flow.js → mixed-given-types.narrative.js} +1 -2
  35. package/dist/src/samples/mixed-given-types.narrative.js.map +1 -0
  36. package/dist/src/samples/{place-order.flow.d.ts → place-order.narrative.d.ts} +2 -2
  37. package/dist/src/samples/place-order.narrative.d.ts.map +1 -0
  38. package/dist/src/samples/{place-order.flow.js → place-order.narrative.js} +1 -1
  39. package/dist/src/samples/place-order.narrative.js.map +1 -0
  40. package/dist/src/samples/questionnaires.narrative.d.ts +2 -0
  41. package/dist/src/samples/questionnaires.narrative.d.ts.map +1 -0
  42. package/dist/src/samples/{questionnaires.flow.js → questionnaires.narrative.js} +1 -3
  43. package/dist/src/samples/questionnaires.narrative.js.map +1 -0
  44. package/dist/src/samples/seasonal-assistant.schema.json +1 -1
  45. package/dist/src/samples/test-with-ids.narrative.d.ts +2 -0
  46. package/dist/src/samples/test-with-ids.narrative.d.ts.map +1 -0
  47. package/dist/src/samples/{test-with-ids.flow.js → test-with-ids.narrative.js} +1 -1
  48. package/dist/src/samples/test-with-ids.narrative.js.map +1 -0
  49. package/dist/src/schema.d.ts +2980 -2980
  50. package/dist/src/schema.d.ts.map +1 -1
  51. package/dist/src/schema.js +1 -0
  52. package/dist/src/schema.js.map +1 -1
  53. package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts.map +1 -1
  54. package/dist/src/transformers/model-to-narrative/generators/gwt.js +32 -8
  55. package/dist/src/transformers/model-to-narrative/generators/gwt.js.map +1 -1
  56. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -1
  57. package/dist/src/transformers/narrative-to-model/debug.js +1 -1
  58. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -1
  59. package/dist/tsconfig.tsbuildinfo +1 -1
  60. package/package.json +5 -5
  61. package/src/commands/export-schema-helper.ts +1 -2
  62. package/src/{getFlows.cache.specs.ts → getNarratives.cache.specs.ts} +18 -18
  63. package/src/{getFlows.specs.ts → getNarratives.specs.ts} +29 -41
  64. package/src/id/addAutoIds.specs.ts +6 -6
  65. package/src/id/hasAllIds.specs.ts +16 -16
  66. package/src/{model-to-flow.specs.ts → model-to-narrative.specs.ts} +215 -3
  67. package/src/narrative-context.ts +0 -1
  68. package/src/narrative.ts +16 -1
  69. package/src/samples/{mixed-given-types.flow.ts → mixed-given-types.narrative.ts} +0 -1
  70. package/src/samples/{place-order.flow.ts → place-order.narrative.ts} +2 -2
  71. package/src/samples/{questionnaires.flow.ts → questionnaires.narrative.ts} +0 -2
  72. package/src/samples/seasonal-assistant.schema.json +1 -1
  73. package/src/schema.ts +1 -0
  74. package/src/transformers/model-to-narrative/generators/gwt.ts +44 -9
  75. package/src/transformers/narrative-to-model/debug.ts +1 -1
  76. package/.turbo/turbo-format.log +0 -4
  77. package/.turbo/turbo-lint.log +0 -4
  78. package/.turbo/turbo-test.log +0 -14
  79. package/.turbo/turbo-type-check.log +0 -4
  80. package/dist/src/data-flow-builders.d.ts +0 -71
  81. package/dist/src/data-flow-builders.d.ts.map +0 -1
  82. package/dist/src/data-flow-builders.js +0 -326
  83. package/dist/src/data-flow-builders.js.map +0 -1
  84. package/dist/src/flow-context.d.ts +0 -25
  85. package/dist/src/flow-context.d.ts.map +0 -1
  86. package/dist/src/flow-context.js +0 -579
  87. package/dist/src/flow-context.js.map +0 -1
  88. package/dist/src/flow-context.specs.d.ts +0 -2
  89. package/dist/src/flow-context.specs.d.ts.map +0 -1
  90. package/dist/src/flow-context.specs.js +0 -185
  91. package/dist/src/flow-context.specs.js.map +0 -1
  92. package/dist/src/flow-registry.d.ts +0 -12
  93. package/dist/src/flow-registry.d.ts.map +0 -1
  94. package/dist/src/flow-registry.js +0 -46
  95. package/dist/src/flow-registry.js.map +0 -1
  96. package/dist/src/flow.d.ts +0 -49
  97. package/dist/src/flow.d.ts.map +0 -1
  98. package/dist/src/flow.js +0 -146
  99. package/dist/src/flow.js.map +0 -1
  100. package/dist/src/getFlows.cache.specs.d.ts +0 -2
  101. package/dist/src/getFlows.cache.specs.d.ts.map +0 -1
  102. package/dist/src/getFlows.cache.specs.js.map +0 -1
  103. package/dist/src/getFlows.d.ts +0 -21
  104. package/dist/src/getFlows.d.ts.map +0 -1
  105. package/dist/src/getFlows.js +0 -119
  106. package/dist/src/getFlows.js.map +0 -1
  107. package/dist/src/getFlows.specs.d.ts +0 -2
  108. package/dist/src/getFlows.specs.d.ts.map +0 -1
  109. package/dist/src/getFlows.specs.js.map +0 -1
  110. package/dist/src/model-to-flow.specs.d.ts +0 -2
  111. package/dist/src/model-to-flow.specs.d.ts.map +0 -1
  112. package/dist/src/model-to-flow.specs.js.map +0 -1
  113. package/dist/src/samples/items.flow.d.ts +0 -2
  114. package/dist/src/samples/items.flow.d.ts.map +0 -1
  115. package/dist/src/samples/items.flow.js.map +0 -1
  116. package/dist/src/samples/mixed-given-types.flow.d.ts +0 -2
  117. package/dist/src/samples/mixed-given-types.flow.d.ts.map +0 -1
  118. package/dist/src/samples/mixed-given-types.flow.js.map +0 -1
  119. package/dist/src/samples/place-order.flow.d.ts.map +0 -1
  120. package/dist/src/samples/place-order.flow.js.map +0 -1
  121. package/dist/src/samples/questionnaires.flow.d.ts +0 -2
  122. package/dist/src/samples/questionnaires.flow.d.ts.map +0 -1
  123. package/dist/src/samples/questionnaires.flow.js.map +0 -1
  124. package/dist/src/samples/test-with-ids.flow.d.ts +0 -2
  125. package/dist/src/samples/test-with-ids.flow.d.ts.map +0 -1
  126. package/dist/src/samples/test-with-ids.flow.js.map +0 -1
  127. package/dist/src/transformers/flow-to-model/assemble.d.ts +0 -3
  128. package/dist/src/transformers/flow-to-model/assemble.d.ts.map +0 -1
  129. package/dist/src/transformers/flow-to-model/assemble.js +0 -9
  130. package/dist/src/transformers/flow-to-model/assemble.js.map +0 -1
  131. package/dist/src/transformers/flow-to-model/debug.d.ts +0 -3
  132. package/dist/src/transformers/flow-to-model/debug.d.ts.map +0 -1
  133. package/dist/src/transformers/flow-to-model/debug.js +0 -6
  134. package/dist/src/transformers/flow-to-model/debug.js.map +0 -1
  135. package/dist/src/transformers/flow-to-model/example-shapes.d.ts +0 -6
  136. package/dist/src/transformers/flow-to-model/example-shapes.d.ts.map +0 -1
  137. package/dist/src/transformers/flow-to-model/example-shapes.js +0 -60
  138. package/dist/src/transformers/flow-to-model/example-shapes.js.map +0 -1
  139. package/dist/src/transformers/flow-to-model/guards.d.ts +0 -15
  140. package/dist/src/transformers/flow-to-model/guards.d.ts.map +0 -1
  141. package/dist/src/transformers/flow-to-model/guards.js +0 -18
  142. package/dist/src/transformers/flow-to-model/guards.js.map +0 -1
  143. package/dist/src/transformers/flow-to-model/index.d.ts +0 -4
  144. package/dist/src/transformers/flow-to-model/index.d.ts.map +0 -1
  145. package/dist/src/transformers/flow-to-model/index.js +0 -193
  146. package/dist/src/transformers/flow-to-model/index.js.map +0 -1
  147. package/dist/src/transformers/flow-to-model/inlining.d.ts +0 -4
  148. package/dist/src/transformers/flow-to-model/inlining.d.ts.map +0 -1
  149. package/dist/src/transformers/flow-to-model/inlining.js +0 -95
  150. package/dist/src/transformers/flow-to-model/inlining.js.map +0 -1
  151. package/dist/src/transformers/flow-to-model/integrations.d.ts +0 -36
  152. package/dist/src/transformers/flow-to-model/integrations.d.ts.map +0 -1
  153. package/dist/src/transformers/flow-to-model/integrations.js +0 -147
  154. package/dist/src/transformers/flow-to-model/integrations.js.map +0 -1
  155. package/dist/src/transformers/flow-to-model/messages.d.ts +0 -5
  156. package/dist/src/transformers/flow-to-model/messages.d.ts.map +0 -1
  157. package/dist/src/transformers/flow-to-model/messages.js +0 -88
  158. package/dist/src/transformers/flow-to-model/messages.js.map +0 -1
  159. package/dist/src/transformers/flow-to-model/normalize.d.ts +0 -3
  160. package/dist/src/transformers/flow-to-model/normalize.d.ts.map +0 -1
  161. package/dist/src/transformers/flow-to-model/normalize.js +0 -23
  162. package/dist/src/transformers/flow-to-model/normalize.js.map +0 -1
  163. package/dist/src/transformers/flow-to-model/spec-processors.d.ts +0 -34
  164. package/dist/src/transformers/flow-to-model/spec-processors.d.ts.map +0 -1
  165. package/dist/src/transformers/flow-to-model/spec-processors.js +0 -395
  166. package/dist/src/transformers/flow-to-model/spec-processors.js.map +0 -1
  167. package/dist/src/transformers/flow-to-model/strings.d.ts +0 -2
  168. package/dist/src/transformers/flow-to-model/strings.d.ts.map +0 -1
  169. package/dist/src/transformers/flow-to-model/strings.js +0 -11
  170. package/dist/src/transformers/flow-to-model/strings.js.map +0 -1
  171. package/dist/src/transformers/flow-to-model/type-inference.d.ts +0 -3
  172. package/dist/src/transformers/flow-to-model/type-inference.d.ts.map +0 -1
  173. package/dist/src/transformers/flow-to-model/type-inference.js +0 -92
  174. package/dist/src/transformers/flow-to-model/type-inference.js.map +0 -1
  175. package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts +0 -2
  176. package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts.map +0 -1
  177. package/dist/src/transformers/flow-to-model/type-inference.specs.js +0 -167
  178. package/dist/src/transformers/flow-to-model/type-inference.specs.js.map +0 -1
  179. package/dist/src/transformers/flow-to-model/zod-adapter.d.ts +0 -6
  180. package/dist/src/transformers/flow-to-model/zod-adapter.d.ts.map +0 -1
  181. package/dist/src/transformers/flow-to-model/zod-adapter.js +0 -101
  182. package/dist/src/transformers/flow-to-model/zod-adapter.js.map +0 -1
  183. package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts +0 -2
  184. package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts.map +0 -1
  185. package/dist/src/transformers/model-to-flow/analysis/extract-flow.js +0 -22
  186. package/dist/src/transformers/model-to-flow/analysis/extract-flow.js.map +0 -1
  187. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts +0 -18
  188. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts.map +0 -1
  189. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js +0 -78
  190. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js.map +0 -1
  191. package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts +0 -7
  192. package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts.map +0 -1
  193. package/dist/src/transformers/model-to-flow/analysis/type-decls.js +0 -74
  194. package/dist/src/transformers/model-to-flow/analysis/type-decls.js.map +0 -1
  195. package/dist/src/transformers/model-to-flow/analysis/usage.d.ts +0 -9
  196. package/dist/src/transformers/model-to-flow/analysis/usage.d.ts.map +0 -1
  197. package/dist/src/transformers/model-to-flow/analysis/usage.js +0 -90
  198. package/dist/src/transformers/model-to-flow/analysis/usage.js.map +0 -1
  199. package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts +0 -18
  200. package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts.map +0 -1
  201. package/dist/src/transformers/model-to-flow/ast/emit-helpers.js +0 -159
  202. package/dist/src/transformers/model-to-flow/ast/emit-helpers.js.map +0 -1
  203. package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts +0 -2
  204. package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts.map +0 -1
  205. package/dist/src/transformers/model-to-flow/formatting/prettier.js +0 -26
  206. package/dist/src/transformers/model-to-flow/formatting/prettier.js.map +0 -1
  207. package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts +0 -6
  208. package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts.map +0 -1
  209. package/dist/src/transformers/model-to-flow/formatting/sort-types.js +0 -17
  210. package/dist/src/transformers/model-to-flow/formatting/sort-types.js.map +0 -1
  211. package/dist/src/transformers/model-to-flow/generators/compose.d.ts +0 -6
  212. package/dist/src/transformers/model-to-flow/generators/compose.d.ts.map +0 -1
  213. package/dist/src/transformers/model-to-flow/generators/compose.js +0 -79
  214. package/dist/src/transformers/model-to-flow/generators/compose.js.map +0 -1
  215. package/dist/src/transformers/model-to-flow/generators/flow.d.ts +0 -15
  216. package/dist/src/transformers/model-to-flow/generators/flow.d.ts.map +0 -1
  217. package/dist/src/transformers/model-to-flow/generators/flow.js +0 -316
  218. package/dist/src/transformers/model-to-flow/generators/flow.js.map +0 -1
  219. package/dist/src/transformers/model-to-flow/generators/gwt.d.ts +0 -57
  220. package/dist/src/transformers/model-to-flow/generators/gwt.d.ts.map +0 -1
  221. package/dist/src/transformers/model-to-flow/generators/gwt.js +0 -186
  222. package/dist/src/transformers/model-to-flow/generators/gwt.js.map +0 -1
  223. package/dist/src/transformers/model-to-flow/generators/imports.d.ts +0 -16
  224. package/dist/src/transformers/model-to-flow/generators/imports.d.ts.map +0 -1
  225. package/dist/src/transformers/model-to-flow/generators/imports.js +0 -57
  226. package/dist/src/transformers/model-to-flow/generators/imports.js.map +0 -1
  227. package/dist/src/transformers/model-to-flow/generators/types.d.ts +0 -13
  228. package/dist/src/transformers/model-to-flow/generators/types.d.ts.map +0 -1
  229. package/dist/src/transformers/model-to-flow/generators/types.js +0 -22
  230. package/dist/src/transformers/model-to-flow/generators/types.js.map +0 -1
  231. package/dist/src/transformers/model-to-flow/index.d.ts +0 -13
  232. package/dist/src/transformers/model-to-flow/index.d.ts.map +0 -1
  233. package/dist/src/transformers/model-to-flow/index.js +0 -25
  234. package/dist/src/transformers/model-to-flow/index.js.map +0 -1
  235. package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts +0 -12
  236. package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts.map +0 -1
  237. package/dist/src/transformers/model-to-flow/utils/integration-extractor.js +0 -64
  238. package/dist/src/transformers/model-to-flow/utils/integration-extractor.js.map +0 -1
  239. package/dist/src/transformers/model-to-flow/utils/strings.d.ts +0 -9
  240. package/dist/src/transformers/model-to-flow/utils/strings.d.ts.map +0 -1
  241. package/dist/src/transformers/model-to-flow/utils/strings.js +0 -11
  242. package/dist/src/transformers/model-to-flow/utils/strings.js.map +0 -1
  243. /package/src/samples/{items.flow.ts → items.narrative.ts} +0 -0
  244. /package/src/samples/{test-with-ids.flow.ts → test-with-ids.narrative.ts} +0 -0
package/package.json CHANGED
@@ -19,9 +19,9 @@
19
19
  "typescript": "^5.9.2",
20
20
  "zod": "^3.22.4",
21
21
  "zod-to-json-schema": "^3.22.3",
22
- "@auto-engineer/file-store": "0.11.11",
23
- "@auto-engineer/id": "0.11.11",
24
- "@auto-engineer/message-bus": "0.11.11"
22
+ "@auto-engineer/file-store": "0.11.13",
23
+ "@auto-engineer/id": "0.11.13",
24
+ "@auto-engineer/message-bus": "0.11.13"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^20.0.0",
@@ -29,12 +29,12 @@
29
29
  "eslint-plugin-sort-keys-fix": "^1.1.2",
30
30
  "fake-indexeddb": "^6.0.0",
31
31
  "tsx": "^4.20.3",
32
- "@auto-engineer/cli": "0.11.11"
32
+ "@auto-engineer/cli": "0.11.13"
33
33
  },
34
34
  "publishConfig": {
35
35
  "access": "public"
36
36
  },
37
- "version": "0.11.11",
37
+ "version": "0.11.13",
38
38
  "scripts": {
39
39
  "build": "tsx scripts/build.ts",
40
40
  "test": "vitest run --reporter=dot",
@@ -12,7 +12,6 @@ const main = async () => {
12
12
  debug('Starting export-schema-helper with directory: %s', directory);
13
13
 
14
14
  try {
15
- // Import getFlows from the project's node_modules to ensure we use the same module context
16
15
  const getFileStore = getFs as () => Promise<IExtendedFileStore>;
17
16
  const fs: IExtendedFileStore = await getFileStore();
18
17
  const projectNarrativePath = fs.join(
@@ -24,7 +23,7 @@ const main = async () => {
24
23
  'src',
25
24
  'getNarratives.js',
26
25
  );
27
- debug('Importing getFlows from: %s', projectNarrativePath);
26
+ debug('Importing getNarratives from: %s', projectNarrativePath);
28
27
 
29
28
  const { pathToFileURL } = await import('url');
30
29
  const narrativeModule = (await import(pathToFileURL(projectNarrativePath).href)) as {
@@ -15,7 +15,7 @@ const importMap = {
15
15
  'graphql-tag': { default: gql, gql },
16
16
  };
17
17
 
18
- const pattern = /\.(flow)\.(ts)$/;
18
+ const pattern = /\.(narrative)\.(ts)$/;
19
19
 
20
20
  describe('getNarratives caching', () => {
21
21
  let vfs: IFileStore;
@@ -42,7 +42,7 @@ describe('getNarratives caching', () => {
42
42
  `;
43
43
 
44
44
  await vfs.write('/test/helper.ts', new TextEncoder().encode(helperContent1));
45
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
45
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
46
46
 
47
47
  const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
48
48
  const hash1 = firstCallResult.vfsFiles.sort().join(',');
@@ -69,7 +69,7 @@ describe('getNarratives caching', () => {
69
69
  const x = 1;
70
70
  });
71
71
  `;
72
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
72
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
73
73
 
74
74
  const importMap1 = { 'test-module': { default: 'value1' } };
75
75
  const result1 = await getNarratives({ vfs, root, importMap: importMap1, pattern, fastFsScan: true });
@@ -96,7 +96,7 @@ describe('getNarratives caching', () => {
96
96
  `;
97
97
 
98
98
  await vfs.write('/test/helper.ts', new TextEncoder().encode(helperContent1));
99
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
99
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
100
100
 
101
101
  const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
102
102
  const filesCount1 = firstCallResult.vfsFiles.length;
@@ -133,7 +133,7 @@ describe('getNarratives caching', () => {
133
133
  });
134
134
  `;
135
135
 
136
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
136
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
137
137
  await vfs.write('/test/unrelated.txt', new TextEncoder().encode('initial content'));
138
138
 
139
139
  const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
@@ -162,13 +162,13 @@ describe('getNarratives caching', () => {
162
162
  });
163
163
  `;
164
164
 
165
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent1));
166
- await vfs.write('/test/test2.flow.ts', new TextEncoder().encode(flowContent2));
165
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent1));
166
+ await vfs.write('/test/test2.narrative.ts', new TextEncoder().encode(flowContent2));
167
167
 
168
168
  const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
169
169
  expect(firstCallResult.narratives.length).toBeGreaterThanOrEqual(2);
170
170
 
171
- await vfs.remove('/test/test2.flow.ts');
171
+ await vfs.remove('/test/test2.narrative.ts');
172
172
 
173
173
  const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
174
174
 
@@ -185,21 +185,21 @@ describe('getNarratives caching', () => {
185
185
  });
186
186
  `;
187
187
 
188
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
188
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
189
189
 
190
190
  const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
191
- expect(firstCallResult.vfsFiles.some((f) => f.includes('test.flow.ts'))).toBe(true);
191
+ expect(firstCallResult.vfsFiles.some((f) => f.includes('test.narrative.ts'))).toBe(true);
192
192
 
193
- const content = await vfs.read('/test/test.flow.ts');
193
+ const content = await vfs.read('/test/test.narrative.ts');
194
194
  if (content) {
195
- await vfs.write('/test/renamed.flow.ts', content);
196
- await vfs.remove('/test/test.flow.ts');
195
+ await vfs.write('/test/renamed.narrative.ts', content);
196
+ await vfs.remove('/test/test.narrative.ts');
197
197
  }
198
198
 
199
199
  const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true });
200
200
 
201
- expect(secondCallResult.vfsFiles.some((f) => f.includes('renamed.flow.ts'))).toBe(true);
202
- expect(secondCallResult.vfsFiles.some((f) => f.includes('test.flow.ts'))).toBe(false);
201
+ expect(secondCallResult.vfsFiles.some((f) => f.includes('renamed.narrative.ts'))).toBe(true);
202
+ expect(secondCallResult.vfsFiles.some((f) => f.includes('test.narrative.ts'))).toBe(false);
203
203
  });
204
204
 
205
205
  it('should handle .d.ts files if they affect the graph', async () => {
@@ -217,7 +217,7 @@ describe('getNarratives caching', () => {
217
217
  `;
218
218
 
219
219
  await vfs.write('/test/types.d.ts', new TextEncoder().encode(dtsContent));
220
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
220
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
221
221
 
222
222
  const result = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
223
223
 
@@ -233,7 +233,7 @@ describe('getNarratives caching', () => {
233
233
  });
234
234
  `;
235
235
 
236
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
236
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
237
237
 
238
238
  const importMap1 = { 'module-a': 'value', 'module-b': 'value' };
239
239
  const result1 = await getNarratives({ vfs, root, importMap: importMap1, pattern, fastFsScan: true });
@@ -268,7 +268,7 @@ describe('getNarratives caching', () => {
268
268
  await vfs.write('/test/chain3.ts', new TextEncoder().encode(chain3Content));
269
269
  await vfs.write('/test/chain2.ts', new TextEncoder().encode(chain2Content));
270
270
  await vfs.write('/test/chain1.ts', new TextEncoder().encode(chain1Content));
271
- await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
271
+ await vfs.write('/test/test.narrative.ts', new TextEncoder().encode(flowContent));
272
272
 
273
273
  const result1 = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
274
274
 
@@ -8,7 +8,7 @@ import { getNarratives } from './getNarratives';
8
8
 
9
9
  const __filename = fileURLToPath(import.meta.url);
10
10
  const __dirname = path.dirname(__filename);
11
- const pattern = /\.(flow)\.(ts)$/;
11
+ const pattern = /\.(narrative)\.(ts)$/;
12
12
 
13
13
  describe('getNarratives', (_mode) => {
14
14
  let vfs: NodeFileStore;
@@ -19,7 +19,7 @@ describe('getNarratives', (_mode) => {
19
19
  root = path.resolve(__dirname);
20
20
  });
21
21
  // eslint-disable-next-line complexity
22
- it('loads multiple flows and generates correct models', async () => {
22
+ it('loads multiple narratives and generates correct models', async () => {
23
23
  const flows = await getNarratives({ vfs, root: path.resolve(__dirname), pattern, fastFsScan: true });
24
24
  const schemas = flows.toModel();
25
25
 
@@ -182,7 +182,7 @@ describe('getNarratives', (_mode) => {
182
182
  });
183
183
 
184
184
  it('validates the complete schema with Zod', async () => {
185
- const flows = await getNarratives({ vfs: vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
185
+ const flows = await getNarratives({ vfs: vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
186
186
  const schemas = flows.toModel();
187
187
  const parsed = modelSchema.parse(schemas);
188
188
  expect(parsed.variant).toBe('specs');
@@ -191,8 +191,8 @@ describe('getNarratives', (_mode) => {
191
191
  expect(Array.isArray(parsed.integrations)).toBe(true);
192
192
  });
193
193
 
194
- it('should handle flows with integrations', async () => {
195
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
194
+ it('should handle narratives with integrations', async () => {
195
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
196
196
  const specsSchema = flows.toModel();
197
197
 
198
198
  const flowsWithIntegrations = specsSchema.narratives.filter((f) =>
@@ -216,7 +216,7 @@ describe('getNarratives', (_mode) => {
216
216
  });
217
217
 
218
218
  it('should handle react slices correctly', async () => {
219
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
219
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
220
220
  const specsSchema = flows.toModel();
221
221
 
222
222
  const reactSlices = specsSchema.narratives.flatMap((f) => f.slices.filter((s) => s.type === 'react'));
@@ -241,7 +241,7 @@ describe('getNarratives', (_mode) => {
241
241
  });
242
242
 
243
243
  it('should parse and validate a complete flow with all slice types', async () => {
244
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
244
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
245
245
  const schemas = flows.toModel();
246
246
 
247
247
  const validationResult = modelSchema.safeParse(schemas);
@@ -267,8 +267,8 @@ describe('getNarratives', (_mode) => {
267
267
  ).toBe(true);
268
268
  });
269
269
 
270
- it('should have ids for flows and slices that have ids', async () => {
271
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
270
+ it('should have ids for narratives and slices that have ids', async () => {
271
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
272
272
 
273
273
  const schemas = flows.toModel();
274
274
 
@@ -286,7 +286,7 @@ describe('getNarratives', (_mode) => {
286
286
  });
287
287
 
288
288
  it('should have ids for command slice rules', async () => {
289
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
289
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
290
290
  const schemas = flows.toModel();
291
291
 
292
292
  const testFlowWithIds = schemas.narratives.find((f) => f.name === 'Test Flow with IDs');
@@ -309,7 +309,7 @@ describe('getNarratives', (_mode) => {
309
309
  });
310
310
 
311
311
  it('should have ids for query slice rules', async () => {
312
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
312
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
313
313
  const schemas = flows.toModel();
314
314
 
315
315
  const testFlowWithIds = schemas.narratives.find((f) => f.name === 'Test Flow with IDs');
@@ -327,7 +327,7 @@ describe('getNarratives', (_mode) => {
327
327
  });
328
328
 
329
329
  it('should have ids for react slice rules', async () => {
330
- const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true });
330
+ const flows = await getNarratives({ vfs: vfs, root: root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true });
331
331
  const schemas = flows.toModel();
332
332
 
333
333
  const testFlowWithIds = schemas.narratives.find((f) => f.name === 'Test Flow with IDs');
@@ -348,7 +348,7 @@ describe('getNarratives', (_mode) => {
348
348
  const flows = await getNarratives({
349
349
  vfs,
350
350
  root,
351
- pattern: /(?:^|\/)questionnaires\.flow\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
351
+ pattern: /(?:^|\/)questionnaires\.narrative\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
352
352
  });
353
353
  const model = flows.toModel();
354
354
 
@@ -379,7 +379,7 @@ describe('getNarratives', (_mode) => {
379
379
  const flows = await getNarratives({
380
380
  vfs,
381
381
  root,
382
- pattern: /(?:^|\/)questionnaires\.flow\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
382
+ pattern: /(?:^|\/)questionnaires\.narrative\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
383
383
  fastFsScan: true,
384
384
  });
385
385
  const model = flows.toModel();
@@ -401,7 +401,7 @@ flow('Test Experience Flow', () => {
401
401
  });
402
402
  `;
403
403
 
404
- await memoryVfs.write('/test/experience.flow.ts', new TextEncoder().encode(flowWithExperienceContent));
404
+ await memoryVfs.write('/test/experience.narrative.ts', new TextEncoder().encode(flowWithExperienceContent));
405
405
 
406
406
  const flows = await getNarratives({ vfs: memoryVfs, root: '/test', pattern, fastFsScan: true });
407
407
  const model = flows.toModel();
@@ -444,14 +444,14 @@ flow('Browser Test Flow', () => {
444
444
  });
445
445
  `;
446
446
 
447
- await memoryVfs.write('/browser/test.flow.ts', new TextEncoder().encode(flowContent));
447
+ await memoryVfs.write('/browser/test.narrative.ts', new TextEncoder().encode(flowContent));
448
448
 
449
449
  const { executeAST } = await import('./loader');
450
450
  const { registry } = await import('./narrative-registry');
451
451
 
452
452
  registry.clearAll();
453
453
 
454
- await executeAST(['/browser/test.flow.ts'], memoryVfs, {}, '/browser');
454
+ await executeAST(['/browser/test.narrative.ts'], memoryVfs, {}, '/browser');
455
455
 
456
456
  const flows = registry.getAllNarratives();
457
457
  expect(flows).toHaveLength(1);
@@ -484,11 +484,13 @@ flow('Questionnaires', 'AUTO-Q9m2Kp4Lx', () => {
484
484
  });
485
485
  `;
486
486
 
487
- await memoryVfs.write('/browser/questionnaires.flow.ts', new TextEncoder().encode(flowContent));
487
+ await memoryVfs.write('/browser/questionnaires.narrative.ts', new TextEncoder().encode(flowContent));
488
488
 
489
489
  registry.clearAll();
490
490
 
491
- await expect(executeAST(['/browser/questionnaires.flow.ts'], memoryVfs, {}, '/browser')).resolves.toBeDefined();
491
+ await expect(
492
+ executeAST(['/browser/questionnaires.narrative.ts'], memoryVfs, {}, '/browser'),
493
+ ).resolves.toBeDefined();
492
494
 
493
495
  const flows = registry.getAllNarratives();
494
496
  expect(flows).toHaveLength(1);
@@ -598,7 +600,7 @@ flow('questionnaires-test', () => {
598
600
  });
599
601
  `;
600
602
 
601
- await memoryVfs.write('/test/questionnaires.flow.ts', new TextEncoder().encode(questionnaireFlowContent));
603
+ await memoryVfs.write('/test/questionnaires.narrative.ts', new TextEncoder().encode(questionnaireFlowContent));
602
604
 
603
605
  const flows = await getNarratives({ vfs: memoryVfs, root: '/test', pattern, fastFsScan: true });
604
606
  const model = flows.toModel();
@@ -638,31 +640,27 @@ flow('questionnaires-test', () => {
638
640
  }
639
641
  });
640
642
 
641
- it('does not emit empty generics for empty when()', async () => {
643
+ it('does not emit empty generics or empty when clauses', async () => {
642
644
  const flows = await getNarratives({
643
645
  vfs,
644
646
  root,
645
- pattern: /(?:^|\/)questionnaires\.flow\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
647
+ pattern: /(?:^|\/)questionnaires\.narrative\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
646
648
  fastFsScan: true,
647
649
  });
648
650
 
649
651
  const model = flows.toModel();
650
652
  const code = await modelToNarrative(model);
651
653
 
652
- // Should not produce `.when<>({})` for empty when-clauses
653
654
  expect(code).not.toMatch(/\.when<>\(\{\}\)/);
654
-
655
- // should render empty whens as `.when({})` for empty when-clauses
656
- const emptyWhenCount = (code.match(/\.when\(\{}\)/g) ?? []).length;
657
- expect(emptyWhenCount).toBeGreaterThanOrEqual(2);
658
655
  expect(code).not.toMatch(/\.when<\s*\{\s*}\s*>\(\{}\)/);
656
+ expect(code).not.toMatch(/\.when\(\{}\)/);
659
657
  });
660
658
 
661
659
  it('should not generate phantom messages with empty names', async () => {
662
660
  const flows = await getNarratives({
663
661
  vfs,
664
662
  root: root,
665
- pattern: /(?:^|\/)questionnaires\.flow\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
663
+ pattern: /(?:^|\/)questionnaires\.narrative\.(?:ts|tsx|js|jsx|mjs|cjs)$/,
666
664
  fastFsScan: true,
667
665
  });
668
666
  const model = flows.toModel();
@@ -769,7 +767,7 @@ flow('Todo List', () => {
769
767
  });
770
768
  `;
771
769
 
772
- await memoryVfs.write('/test/todo-summary.flow.ts', new TextEncoder().encode(todoSummaryFlowContent));
770
+ await memoryVfs.write('/test/todo-summary.narrative.ts', new TextEncoder().encode(todoSummaryFlowContent));
773
771
 
774
772
  const flows = await getNarratives({ vfs: memoryVfs, root: '/test', pattern, fastFsScan: true });
775
773
  const model = flows.toModel();
@@ -925,17 +923,7 @@ function validateMixedGivenTypes(example: Example): void {
925
923
  }
926
924
 
927
925
  function validateEmptyWhenClause(example: Example): void {
928
- expect(example.when).toBeDefined();
929
- expect(typeof example.when === 'object' && !Array.isArray(example.when)).toBe(true);
930
- if (typeof example.when === 'object' && !Array.isArray(example.when)) {
931
- expect('commandRef' in example.when).toBe(false);
932
- expect('eventRef' in example.when).toBe(true);
933
- expect('stateRef' in example.when).toBe(false);
934
- if ('eventRef' in example.when) {
935
- expect(example.when.eventRef).toBe('');
936
- }
937
- expect(example.when.exampleData).toEqual({});
938
- }
926
+ expect(example.when).toBeUndefined();
939
927
  }
940
928
 
941
929
  function validateThenClause(example: Example): void {
@@ -971,7 +959,7 @@ function validateMixedGivenTypeMessages(model: Model): void {
971
959
  async function createQuestionnaireBugTestModel(): Promise<Model> {
972
960
  const memoryVfs = new InMemoryFileStore();
973
961
  const questionnaireFlowContent = getQuestionnaireFlowContent();
974
- await memoryVfs.write('/test/questionnaires-bug.flow.ts', new TextEncoder().encode(questionnaireFlowContent));
962
+ await memoryVfs.write('/test/questionnaires-bug.narrative.ts', new TextEncoder().encode(questionnaireFlowContent));
975
963
  const flows = await getNarratives({ vfs: memoryVfs, root: '/test', pattern, fastFsScan: true });
976
964
  return flows.toModel();
977
965
  }
@@ -220,7 +220,7 @@ describe('addAutoIds', () => {
220
220
  narratives: [
221
221
  {
222
222
  name: 'Home Screen',
223
- sourceFile: '/path/to/homepage.flow.ts',
223
+ sourceFile: '/path/to/homepage.narrative.ts',
224
224
  slices: [
225
225
  {
226
226
  name: 'Active Surveys Summary',
@@ -236,7 +236,7 @@ describe('addAutoIds', () => {
236
236
  },
237
237
  {
238
238
  name: 'Create Survey',
239
- sourceFile: '/path/to/homepage.flow.ts',
239
+ sourceFile: '/path/to/homepage.narrative.ts',
240
240
  slices: [
241
241
  {
242
242
  name: 'Create Survey Form',
@@ -252,7 +252,7 @@ describe('addAutoIds', () => {
252
252
  },
253
253
  {
254
254
  name: 'Response Analytics',
255
- sourceFile: '/path/to/homepage.flow.ts',
255
+ sourceFile: '/path/to/homepage.narrative.ts',
256
256
  slices: [
257
257
  {
258
258
  name: 'Response Rate Charts',
@@ -289,8 +289,8 @@ describe('addAutoIds', () => {
289
289
  expect(result.narratives[0].slices[0].id).not.toBe(result.narratives[2].slices[0].id);
290
290
  expect(result.narratives[1].slices[0].id).not.toBe(result.narratives[2].slices[0].id);
291
291
 
292
- expect(result.narratives[0].sourceFile).toBe('/path/to/homepage.flow.ts');
293
- expect(result.narratives[1].sourceFile).toBe('/path/to/homepage.flow.ts');
294
- expect(result.narratives[2].sourceFile).toBe('/path/to/homepage.flow.ts');
292
+ expect(result.narratives[0].sourceFile).toBe('/path/to/homepage.narrative.ts');
293
+ expect(result.narratives[1].sourceFile).toBe('/path/to/homepage.narrative.ts');
294
+ expect(result.narratives[2].sourceFile).toBe('/path/to/homepage.narrative.ts');
295
295
  });
296
296
  });
@@ -146,14 +146,14 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
146
146
  const flowContent3 = new TextEncoder().encode(multipleFlowsSameSource);
147
147
  const flowContent4 = new TextEncoder().encode(multipleFlowsIncomplete);
148
148
  const flowContent5 = new TextEncoder().encode(multipleFlowsSliceMissing);
149
- await vfs.write('/test/flow-without-ids.flow.ts', flowContent1);
150
- await vfs.write('/test/flow-with-ids.flow.ts', flowContent2);
151
- await vfs.write('/test/homepage.flow.ts', flowContent3);
152
- await vfs.write('/test/homepage-incomplete.flow.ts', flowContent4);
153
- await vfs.write('/test/homepage-slice-missing.flow.ts', flowContent5);
149
+ await vfs.write('/test/flow-without-ids.narrative.ts', flowContent1);
150
+ await vfs.write('/test/flow-with-ids.narrative.ts', flowContent2);
151
+ await vfs.write('/test/homepage.narrative.ts', flowContent3);
152
+ await vfs.write('/test/homepage-incomplete.narrative.ts', flowContent4);
153
+ await vfs.write('/test/homepage-slice-missing.narrative.ts', flowContent5);
154
154
  });
155
155
  it('should return false for models without IDs', async () => {
156
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
156
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
157
157
  const model = result.toModel();
158
158
 
159
159
  const flowWithoutIds = model.narratives.find((f) => f.name === 'Test Flow Without IDs');
@@ -166,7 +166,7 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
166
166
  });
167
167
 
168
168
  it('should return true for models with complete IDs', async () => {
169
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
169
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
170
170
  const model = result.toModel();
171
171
 
172
172
  const modelWithIds = addAutoIds(model);
@@ -174,7 +174,7 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
174
174
  });
175
175
 
176
176
  it('should return true for flows that already have IDs', async () => {
177
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
177
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
178
178
  const model = result.toModel();
179
179
 
180
180
  const testFlowWithIds = model.narratives.find((f) => f.name === 'Test Flow with IDs');
@@ -187,7 +187,7 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
187
187
  });
188
188
 
189
189
  it('should return false if any slice is missing an ID', async () => {
190
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
190
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
191
191
  const model = result.toModel();
192
192
 
193
193
  const modelWithIds = addAutoIds(model);
@@ -200,7 +200,7 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
200
200
  });
201
201
 
202
202
  it('should return false if any rule is missing an ID', async () => {
203
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
203
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
204
204
  const model = result.toModel();
205
205
 
206
206
  const modelWithIds = addAutoIds(model);
@@ -227,11 +227,11 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
227
227
  });
228
228
 
229
229
  it('should return true when multiple flows with same sourceFile all have IDs', async () => {
230
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
230
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
231
231
  const model = result.toModel();
232
232
 
233
233
  const homepageFlows = model.narratives.filter(
234
- (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage.flow.ts'),
234
+ (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage.narrative.ts'),
235
235
  );
236
236
  expect(homepageFlows.length).toBe(3);
237
237
 
@@ -240,11 +240,11 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
240
240
  });
241
241
 
242
242
  it('should return false when any flow in multiple flows with same sourceFile is missing ID', async () => {
243
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
243
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
244
244
  const model = result.toModel();
245
245
 
246
246
  const homepageFlows = model.narratives.filter(
247
- (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-incomplete.flow.ts'),
247
+ (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-incomplete.narrative.ts'),
248
248
  );
249
249
  expect(homepageFlows.length).toBe(3);
250
250
 
@@ -253,11 +253,11 @@ flow('Response Analytics', 'AUTO-eME978Euk', () => {
253
253
  });
254
254
 
255
255
  it('should return false when any slice in multiple flows with same sourceFile is missing ID', async () => {
256
- const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
256
+ const result = await getNarratives({ vfs, root, pattern: /\.(narrative)\.(ts)$/, fastFsScan: true, importMap });
257
257
  const model = result.toModel();
258
258
 
259
259
  const homepageFlows = model.narratives.filter(
260
- (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-slice-missing.flow.ts'),
260
+ (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-slice-missing.narrative.ts'),
261
261
  );
262
262
  expect(homepageFlows.length).toBe(3);
263
263