@auto-engineer/narrative 0.11.11

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 (541) hide show
  1. package/.turbo/turbo-build.log +9 -0
  2. package/.turbo/turbo-format.log +4 -0
  3. package/.turbo/turbo-lint.log +4 -0
  4. package/.turbo/turbo-test.log +14 -0
  5. package/.turbo/turbo-type-check.log +4 -0
  6. package/CHANGELOG.md +691 -0
  7. package/DEBUG.md +136 -0
  8. package/LICENSE +10 -0
  9. package/README.md +141 -0
  10. package/dist/scripts/build.d.ts +3 -0
  11. package/dist/scripts/build.d.ts.map +1 -0
  12. package/dist/scripts/build.js +71 -0
  13. package/dist/scripts/build.js.map +1 -0
  14. package/dist/scripts/convert-flow-exec.d.ts +3 -0
  15. package/dist/scripts/convert-flow-exec.d.ts.map +1 -0
  16. package/dist/scripts/convert-flow-exec.js +17 -0
  17. package/dist/scripts/convert-flow-exec.js.map +1 -0
  18. package/dist/scripts/convert-flow-helper.d.ts +3 -0
  19. package/dist/scripts/convert-flow-helper.d.ts.map +1 -0
  20. package/dist/scripts/convert-flow-helper.js +85 -0
  21. package/dist/scripts/convert-flow-helper.js.map +1 -0
  22. package/dist/scripts/convert-flow.d.ts +3 -0
  23. package/dist/scripts/convert-flow.d.ts.map +1 -0
  24. package/dist/scripts/convert-flow.js +108 -0
  25. package/dist/scripts/convert-flow.js.map +1 -0
  26. package/dist/scripts/print-schema.d.ts +2 -0
  27. package/dist/scripts/print-schema.d.ts.map +1 -0
  28. package/dist/scripts/print-schema.js +20 -0
  29. package/dist/scripts/print-schema.js.map +1 -0
  30. package/dist/src/commands/export-schema-helper.d.ts +2 -0
  31. package/dist/src/commands/export-schema-helper.d.ts.map +1 -0
  32. package/dist/src/commands/export-schema-helper.js +48 -0
  33. package/dist/src/commands/export-schema-helper.js.map +1 -0
  34. package/dist/src/commands/export-schema-runner.d.ts +3 -0
  35. package/dist/src/commands/export-schema-runner.d.ts.map +1 -0
  36. package/dist/src/commands/export-schema-runner.js +53 -0
  37. package/dist/src/commands/export-schema-runner.js.map +1 -0
  38. package/dist/src/commands/export-schema.d.ts +23 -0
  39. package/dist/src/commands/export-schema.d.ts.map +1 -0
  40. package/dist/src/commands/export-schema.js +124 -0
  41. package/dist/src/commands/export-schema.js.map +1 -0
  42. package/dist/src/commands/filestore.node.d.ts +3 -0
  43. package/dist/src/commands/filestore.node.d.ts.map +1 -0
  44. package/dist/src/commands/filestore.node.js +11 -0
  45. package/dist/src/commands/filestore.node.js.map +1 -0
  46. package/dist/src/data-flow-builders.d.ts +71 -0
  47. package/dist/src/data-flow-builders.d.ts.map +1 -0
  48. package/dist/src/data-flow-builders.js +326 -0
  49. package/dist/src/data-flow-builders.js.map +1 -0
  50. package/dist/src/data-narrative-builders.d.ts +71 -0
  51. package/dist/src/data-narrative-builders.d.ts.map +1 -0
  52. package/dist/src/data-narrative-builders.js +326 -0
  53. package/dist/src/data-narrative-builders.js.map +1 -0
  54. package/dist/src/flow-context.d.ts +25 -0
  55. package/dist/src/flow-context.d.ts.map +1 -0
  56. package/dist/src/flow-context.js +579 -0
  57. package/dist/src/flow-context.js.map +1 -0
  58. package/dist/src/flow-context.specs.d.ts +2 -0
  59. package/dist/src/flow-context.specs.d.ts.map +1 -0
  60. package/dist/src/flow-context.specs.js +185 -0
  61. package/dist/src/flow-context.specs.js.map +1 -0
  62. package/dist/src/flow-registry.d.ts +12 -0
  63. package/dist/src/flow-registry.d.ts.map +1 -0
  64. package/dist/src/flow-registry.js +46 -0
  65. package/dist/src/flow-registry.js.map +1 -0
  66. package/dist/src/flow.d.ts +49 -0
  67. package/dist/src/flow.d.ts.map +1 -0
  68. package/dist/src/flow.js +146 -0
  69. package/dist/src/flow.js.map +1 -0
  70. package/dist/src/fluent-builder.d.ts +35 -0
  71. package/dist/src/fluent-builder.d.ts.map +1 -0
  72. package/dist/src/fluent-builder.js +287 -0
  73. package/dist/src/fluent-builder.js.map +1 -0
  74. package/dist/src/fluent-builder.specs.d.ts +2 -0
  75. package/dist/src/fluent-builder.specs.d.ts.map +1 -0
  76. package/dist/src/fluent-builder.specs.js +28 -0
  77. package/dist/src/fluent-builder.specs.js.map +1 -0
  78. package/dist/src/getFlows.cache.specs.d.ts +2 -0
  79. package/dist/src/getFlows.cache.specs.d.ts.map +1 -0
  80. package/dist/src/getFlows.cache.specs.js +234 -0
  81. package/dist/src/getFlows.cache.specs.js.map +1 -0
  82. package/dist/src/getFlows.d.ts +21 -0
  83. package/dist/src/getFlows.d.ts.map +1 -0
  84. package/dist/src/getFlows.js +119 -0
  85. package/dist/src/getFlows.js.map +1 -0
  86. package/dist/src/getFlows.specs.d.ts +2 -0
  87. package/dist/src/getFlows.specs.d.ts.map +1 -0
  88. package/dist/src/getFlows.specs.js +1080 -0
  89. package/dist/src/getFlows.specs.js.map +1 -0
  90. package/dist/src/getNarratives.d.ts +21 -0
  91. package/dist/src/getNarratives.d.ts.map +1 -0
  92. package/dist/src/getNarratives.js +119 -0
  93. package/dist/src/getNarratives.js.map +1 -0
  94. package/dist/src/id/addAutoIds.d.ts +3 -0
  95. package/dist/src/id/addAutoIds.d.ts.map +1 -0
  96. package/dist/src/id/addAutoIds.js +47 -0
  97. package/dist/src/id/addAutoIds.js.map +1 -0
  98. package/dist/src/id/addAutoIds.specs.d.ts +2 -0
  99. package/dist/src/id/addAutoIds.specs.d.ts.map +1 -0
  100. package/dist/src/id/addAutoIds.specs.js +265 -0
  101. package/dist/src/id/addAutoIds.specs.js.map +1 -0
  102. package/dist/src/id/generators.d.ts +2 -0
  103. package/dist/src/id/generators.d.ts.map +1 -0
  104. package/dist/src/id/generators.js +5 -0
  105. package/dist/src/id/generators.js.map +1 -0
  106. package/dist/src/id/hasAllIds.d.ts +3 -0
  107. package/dist/src/id/hasAllIds.d.ts.map +1 -0
  108. package/dist/src/id/hasAllIds.js +19 -0
  109. package/dist/src/id/hasAllIds.js.map +1 -0
  110. package/dist/src/id/hasAllIds.specs.d.ts +2 -0
  111. package/dist/src/id/hasAllIds.specs.d.ts.map +1 -0
  112. package/dist/src/id/hasAllIds.specs.js +231 -0
  113. package/dist/src/id/hasAllIds.specs.js.map +1 -0
  114. package/dist/src/id/index.d.ts +3 -0
  115. package/dist/src/id/index.d.ts.map +1 -0
  116. package/dist/src/id/index.js +3 -0
  117. package/dist/src/id/index.js.map +1 -0
  118. package/dist/src/index.d.ts +45 -0
  119. package/dist/src/index.d.ts.map +1 -0
  120. package/dist/src/index.js +31 -0
  121. package/dist/src/index.js.map +1 -0
  122. package/dist/src/integration-export-registry.d.ts +42 -0
  123. package/dist/src/integration-export-registry.d.ts.map +1 -0
  124. package/dist/src/integration-export-registry.js +74 -0
  125. package/dist/src/integration-export-registry.js.map +1 -0
  126. package/dist/src/integration-registry.d.ts +12 -0
  127. package/dist/src/integration-registry.d.ts.map +1 -0
  128. package/dist/src/integration-registry.js +42 -0
  129. package/dist/src/integration-registry.js.map +1 -0
  130. package/dist/src/loader/fs-path.d.ts +6 -0
  131. package/dist/src/loader/fs-path.d.ts.map +1 -0
  132. package/dist/src/loader/fs-path.js +28 -0
  133. package/dist/src/loader/fs-path.js.map +1 -0
  134. package/dist/src/loader/graph.d.ts +15 -0
  135. package/dist/src/loader/graph.d.ts.map +1 -0
  136. package/dist/src/loader/graph.js +292 -0
  137. package/dist/src/loader/graph.js.map +1 -0
  138. package/dist/src/loader/importmap.d.ts +2 -0
  139. package/dist/src/loader/importmap.d.ts.map +1 -0
  140. package/dist/src/loader/importmap.js +55 -0
  141. package/dist/src/loader/importmap.js.map +1 -0
  142. package/dist/src/loader/index.d.ts +9 -0
  143. package/dist/src/loader/index.d.ts.map +1 -0
  144. package/dist/src/loader/index.js +55 -0
  145. package/dist/src/loader/index.js.map +1 -0
  146. package/dist/src/loader/resolver.d.ts +4 -0
  147. package/dist/src/loader/resolver.d.ts.map +1 -0
  148. package/dist/src/loader/resolver.js +18 -0
  149. package/dist/src/loader/resolver.js.map +1 -0
  150. package/dist/src/loader/runtime-cjs.d.ts +3 -0
  151. package/dist/src/loader/runtime-cjs.d.ts.map +1 -0
  152. package/dist/src/loader/runtime-cjs.js +131 -0
  153. package/dist/src/loader/runtime-cjs.js.map +1 -0
  154. package/dist/src/loader/ts-utils.d.ts +39 -0
  155. package/dist/src/loader/ts-utils.d.ts.map +1 -0
  156. package/dist/src/loader/ts-utils.js +563 -0
  157. package/dist/src/loader/ts-utils.js.map +1 -0
  158. package/dist/src/loader/types.d.ts +23 -0
  159. package/dist/src/loader/types.d.ts.map +1 -0
  160. package/dist/src/loader/types.js +2 -0
  161. package/dist/src/loader/types.js.map +1 -0
  162. package/dist/src/loader/vfs-compiler-host.d.ts +5 -0
  163. package/dist/src/loader/vfs-compiler-host.d.ts.map +1 -0
  164. package/dist/src/loader/vfs-compiler-host.js +47 -0
  165. package/dist/src/loader/vfs-compiler-host.js.map +1 -0
  166. package/dist/src/model-to-flow.specs.d.ts +2 -0
  167. package/dist/src/model-to-flow.specs.d.ts.map +1 -0
  168. package/dist/src/model-to-flow.specs.js +1786 -0
  169. package/dist/src/model-to-flow.specs.js.map +1 -0
  170. package/dist/src/narrative-context.d.ts +25 -0
  171. package/dist/src/narrative-context.d.ts.map +1 -0
  172. package/dist/src/narrative-context.js +579 -0
  173. package/dist/src/narrative-context.js.map +1 -0
  174. package/dist/src/narrative-context.specs.d.ts +2 -0
  175. package/dist/src/narrative-context.specs.d.ts.map +1 -0
  176. package/dist/src/narrative-context.specs.js +185 -0
  177. package/dist/src/narrative-context.specs.js.map +1 -0
  178. package/dist/src/narrative-registry.d.ts +12 -0
  179. package/dist/src/narrative-registry.d.ts.map +1 -0
  180. package/dist/src/narrative-registry.js +46 -0
  181. package/dist/src/narrative-registry.js.map +1 -0
  182. package/dist/src/narrative.d.ts +49 -0
  183. package/dist/src/narrative.d.ts.map +1 -0
  184. package/dist/src/narrative.js +147 -0
  185. package/dist/src/narrative.js.map +1 -0
  186. package/dist/src/samples/items.flow.d.ts +2 -0
  187. package/dist/src/samples/items.flow.d.ts.map +1 -0
  188. package/dist/src/samples/items.flow.js +63 -0
  189. package/dist/src/samples/items.flow.js.map +1 -0
  190. package/dist/src/samples/mixed-given-types.flow.d.ts +2 -0
  191. package/dist/src/samples/mixed-given-types.flow.d.ts.map +1 -0
  192. package/dist/src/samples/mixed-given-types.flow.js +36 -0
  193. package/dist/src/samples/mixed-given-types.flow.js.map +1 -0
  194. package/dist/src/samples/place-order.flow.d.ts +25 -0
  195. package/dist/src/samples/place-order.flow.d.ts.map +1 -0
  196. package/dist/src/samples/place-order.flow.js +30 -0
  197. package/dist/src/samples/place-order.flow.js.map +1 -0
  198. package/dist/src/samples/questionnaires.flow.d.ts +2 -0
  199. package/dist/src/samples/questionnaires.flow.d.ts.map +1 -0
  200. package/dist/src/samples/questionnaires.flow.js +259 -0
  201. package/dist/src/samples/questionnaires.flow.js.map +1 -0
  202. package/dist/src/samples/seasonal-assistant.schema.json +737 -0
  203. package/dist/src/samples/test-with-ids.flow.d.ts +2 -0
  204. package/dist/src/samples/test-with-ids.flow.d.ts.map +1 -0
  205. package/dist/src/samples/test-with-ids.flow.js +80 -0
  206. package/dist/src/samples/test-with-ids.flow.js.map +1 -0
  207. package/dist/src/schema-test.d.ts +2 -0
  208. package/dist/src/schema-test.d.ts.map +1 -0
  209. package/dist/src/schema-test.js +57 -0
  210. package/dist/src/schema-test.js.map +1 -0
  211. package/dist/src/schema.d.ts +19393 -0
  212. package/dist/src/schema.d.ts.map +1 -0
  213. package/dist/src/schema.js +342 -0
  214. package/dist/src/schema.js.map +1 -0
  215. package/dist/src/slice-builder.d.ts +16 -0
  216. package/dist/src/slice-builder.d.ts.map +1 -0
  217. package/dist/src/slice-builder.js +72 -0
  218. package/dist/src/slice-builder.js.map +1 -0
  219. package/dist/src/testing.d.ts +32 -0
  220. package/dist/src/testing.d.ts.map +1 -0
  221. package/dist/src/testing.js +36 -0
  222. package/dist/src/testing.js.map +1 -0
  223. package/dist/src/transformers/flow-to-model/assemble.d.ts +3 -0
  224. package/dist/src/transformers/flow-to-model/assemble.d.ts.map +1 -0
  225. package/dist/src/transformers/flow-to-model/assemble.js +9 -0
  226. package/dist/src/transformers/flow-to-model/assemble.js.map +1 -0
  227. package/dist/src/transformers/flow-to-model/debug.d.ts +3 -0
  228. package/dist/src/transformers/flow-to-model/debug.d.ts.map +1 -0
  229. package/dist/src/transformers/flow-to-model/debug.js +6 -0
  230. package/dist/src/transformers/flow-to-model/debug.js.map +1 -0
  231. package/dist/src/transformers/flow-to-model/example-shapes.d.ts +6 -0
  232. package/dist/src/transformers/flow-to-model/example-shapes.d.ts.map +1 -0
  233. package/dist/src/transformers/flow-to-model/example-shapes.js +60 -0
  234. package/dist/src/transformers/flow-to-model/example-shapes.js.map +1 -0
  235. package/dist/src/transformers/flow-to-model/guards.d.ts +15 -0
  236. package/dist/src/transformers/flow-to-model/guards.d.ts.map +1 -0
  237. package/dist/src/transformers/flow-to-model/guards.js +18 -0
  238. package/dist/src/transformers/flow-to-model/guards.js.map +1 -0
  239. package/dist/src/transformers/flow-to-model/index.d.ts +4 -0
  240. package/dist/src/transformers/flow-to-model/index.d.ts.map +1 -0
  241. package/dist/src/transformers/flow-to-model/index.js +193 -0
  242. package/dist/src/transformers/flow-to-model/index.js.map +1 -0
  243. package/dist/src/transformers/flow-to-model/inlining.d.ts +4 -0
  244. package/dist/src/transformers/flow-to-model/inlining.d.ts.map +1 -0
  245. package/dist/src/transformers/flow-to-model/inlining.js +95 -0
  246. package/dist/src/transformers/flow-to-model/inlining.js.map +1 -0
  247. package/dist/src/transformers/flow-to-model/integrations.d.ts +36 -0
  248. package/dist/src/transformers/flow-to-model/integrations.d.ts.map +1 -0
  249. package/dist/src/transformers/flow-to-model/integrations.js +147 -0
  250. package/dist/src/transformers/flow-to-model/integrations.js.map +1 -0
  251. package/dist/src/transformers/flow-to-model/messages.d.ts +5 -0
  252. package/dist/src/transformers/flow-to-model/messages.d.ts.map +1 -0
  253. package/dist/src/transformers/flow-to-model/messages.js +88 -0
  254. package/dist/src/transformers/flow-to-model/messages.js.map +1 -0
  255. package/dist/src/transformers/flow-to-model/normalize.d.ts +3 -0
  256. package/dist/src/transformers/flow-to-model/normalize.d.ts.map +1 -0
  257. package/dist/src/transformers/flow-to-model/normalize.js +23 -0
  258. package/dist/src/transformers/flow-to-model/normalize.js.map +1 -0
  259. package/dist/src/transformers/flow-to-model/spec-processors.d.ts +34 -0
  260. package/dist/src/transformers/flow-to-model/spec-processors.d.ts.map +1 -0
  261. package/dist/src/transformers/flow-to-model/spec-processors.js +395 -0
  262. package/dist/src/transformers/flow-to-model/spec-processors.js.map +1 -0
  263. package/dist/src/transformers/flow-to-model/strings.d.ts +2 -0
  264. package/dist/src/transformers/flow-to-model/strings.d.ts.map +1 -0
  265. package/dist/src/transformers/flow-to-model/strings.js +11 -0
  266. package/dist/src/transformers/flow-to-model/strings.js.map +1 -0
  267. package/dist/src/transformers/flow-to-model/type-inference.d.ts +3 -0
  268. package/dist/src/transformers/flow-to-model/type-inference.d.ts.map +1 -0
  269. package/dist/src/transformers/flow-to-model/type-inference.js +92 -0
  270. package/dist/src/transformers/flow-to-model/type-inference.js.map +1 -0
  271. package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts +2 -0
  272. package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts.map +1 -0
  273. package/dist/src/transformers/flow-to-model/type-inference.specs.js +167 -0
  274. package/dist/src/transformers/flow-to-model/type-inference.specs.js.map +1 -0
  275. package/dist/src/transformers/flow-to-model/zod-adapter.d.ts +6 -0
  276. package/dist/src/transformers/flow-to-model/zod-adapter.d.ts.map +1 -0
  277. package/dist/src/transformers/flow-to-model/zod-adapter.js +101 -0
  278. package/dist/src/transformers/flow-to-model/zod-adapter.js.map +1 -0
  279. package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts +2 -0
  280. package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts.map +1 -0
  281. package/dist/src/transformers/model-to-flow/analysis/extract-flow.js +22 -0
  282. package/dist/src/transformers/model-to-flow/analysis/extract-flow.js.map +1 -0
  283. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts +18 -0
  284. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts.map +1 -0
  285. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js +78 -0
  286. package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js.map +1 -0
  287. package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts +7 -0
  288. package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts.map +1 -0
  289. package/dist/src/transformers/model-to-flow/analysis/type-decls.js +74 -0
  290. package/dist/src/transformers/model-to-flow/analysis/type-decls.js.map +1 -0
  291. package/dist/src/transformers/model-to-flow/analysis/usage.d.ts +9 -0
  292. package/dist/src/transformers/model-to-flow/analysis/usage.d.ts.map +1 -0
  293. package/dist/src/transformers/model-to-flow/analysis/usage.js +90 -0
  294. package/dist/src/transformers/model-to-flow/analysis/usage.js.map +1 -0
  295. package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts +18 -0
  296. package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts.map +1 -0
  297. package/dist/src/transformers/model-to-flow/ast/emit-helpers.js +159 -0
  298. package/dist/src/transformers/model-to-flow/ast/emit-helpers.js.map +1 -0
  299. package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts +2 -0
  300. package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts.map +1 -0
  301. package/dist/src/transformers/model-to-flow/formatting/prettier.js +26 -0
  302. package/dist/src/transformers/model-to-flow/formatting/prettier.js.map +1 -0
  303. package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts +6 -0
  304. package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts.map +1 -0
  305. package/dist/src/transformers/model-to-flow/formatting/sort-types.js +17 -0
  306. package/dist/src/transformers/model-to-flow/formatting/sort-types.js.map +1 -0
  307. package/dist/src/transformers/model-to-flow/generators/compose.d.ts +6 -0
  308. package/dist/src/transformers/model-to-flow/generators/compose.d.ts.map +1 -0
  309. package/dist/src/transformers/model-to-flow/generators/compose.js +79 -0
  310. package/dist/src/transformers/model-to-flow/generators/compose.js.map +1 -0
  311. package/dist/src/transformers/model-to-flow/generators/flow.d.ts +15 -0
  312. package/dist/src/transformers/model-to-flow/generators/flow.d.ts.map +1 -0
  313. package/dist/src/transformers/model-to-flow/generators/flow.js +316 -0
  314. package/dist/src/transformers/model-to-flow/generators/flow.js.map +1 -0
  315. package/dist/src/transformers/model-to-flow/generators/gwt.d.ts +57 -0
  316. package/dist/src/transformers/model-to-flow/generators/gwt.d.ts.map +1 -0
  317. package/dist/src/transformers/model-to-flow/generators/gwt.js +186 -0
  318. package/dist/src/transformers/model-to-flow/generators/gwt.js.map +1 -0
  319. package/dist/src/transformers/model-to-flow/generators/imports.d.ts +16 -0
  320. package/dist/src/transformers/model-to-flow/generators/imports.d.ts.map +1 -0
  321. package/dist/src/transformers/model-to-flow/generators/imports.js +57 -0
  322. package/dist/src/transformers/model-to-flow/generators/imports.js.map +1 -0
  323. package/dist/src/transformers/model-to-flow/generators/types.d.ts +13 -0
  324. package/dist/src/transformers/model-to-flow/generators/types.d.ts.map +1 -0
  325. package/dist/src/transformers/model-to-flow/generators/types.js +22 -0
  326. package/dist/src/transformers/model-to-flow/generators/types.js.map +1 -0
  327. package/dist/src/transformers/model-to-flow/index.d.ts +13 -0
  328. package/dist/src/transformers/model-to-flow/index.d.ts.map +1 -0
  329. package/dist/src/transformers/model-to-flow/index.js +25 -0
  330. package/dist/src/transformers/model-to-flow/index.js.map +1 -0
  331. package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts +12 -0
  332. package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts.map +1 -0
  333. package/dist/src/transformers/model-to-flow/utils/integration-extractor.js +64 -0
  334. package/dist/src/transformers/model-to-flow/utils/integration-extractor.js.map +1 -0
  335. package/dist/src/transformers/model-to-flow/utils/strings.d.ts +9 -0
  336. package/dist/src/transformers/model-to-flow/utils/strings.d.ts.map +1 -0
  337. package/dist/src/transformers/model-to-flow/utils/strings.js +11 -0
  338. package/dist/src/transformers/model-to-flow/utils/strings.js.map +1 -0
  339. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.d.ts +2 -0
  340. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.d.ts.map +1 -0
  341. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.js +22 -0
  342. package/dist/src/transformers/model-to-narrative/analysis/extract-flow.js.map +1 -0
  343. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.d.ts +18 -0
  344. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.d.ts.map +1 -0
  345. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +78 -0
  346. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -0
  347. package/dist/src/transformers/model-to-narrative/analysis/type-decls.d.ts +7 -0
  348. package/dist/src/transformers/model-to-narrative/analysis/type-decls.d.ts.map +1 -0
  349. package/dist/src/transformers/model-to-narrative/analysis/type-decls.js +74 -0
  350. package/dist/src/transformers/model-to-narrative/analysis/type-decls.js.map +1 -0
  351. package/dist/src/transformers/model-to-narrative/analysis/usage.d.ts +9 -0
  352. package/dist/src/transformers/model-to-narrative/analysis/usage.d.ts.map +1 -0
  353. package/dist/src/transformers/model-to-narrative/analysis/usage.js +90 -0
  354. package/dist/src/transformers/model-to-narrative/analysis/usage.js.map +1 -0
  355. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts +18 -0
  356. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts.map +1 -0
  357. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.js +159 -0
  358. package/dist/src/transformers/model-to-narrative/ast/emit-helpers.js.map +1 -0
  359. package/dist/src/transformers/model-to-narrative/formatting/prettier.d.ts +2 -0
  360. package/dist/src/transformers/model-to-narrative/formatting/prettier.d.ts.map +1 -0
  361. package/dist/src/transformers/model-to-narrative/formatting/prettier.js +26 -0
  362. package/dist/src/transformers/model-to-narrative/formatting/prettier.js.map +1 -0
  363. package/dist/src/transformers/model-to-narrative/formatting/sort-types.d.ts +6 -0
  364. package/dist/src/transformers/model-to-narrative/formatting/sort-types.d.ts.map +1 -0
  365. package/dist/src/transformers/model-to-narrative/formatting/sort-types.js +17 -0
  366. package/dist/src/transformers/model-to-narrative/formatting/sort-types.js.map +1 -0
  367. package/dist/src/transformers/model-to-narrative/generators/compose.d.ts +6 -0
  368. package/dist/src/transformers/model-to-narrative/generators/compose.d.ts.map +1 -0
  369. package/dist/src/transformers/model-to-narrative/generators/compose.js +79 -0
  370. package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -0
  371. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +15 -0
  372. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -0
  373. package/dist/src/transformers/model-to-narrative/generators/flow.js +316 -0
  374. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -0
  375. package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts +57 -0
  376. package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts.map +1 -0
  377. package/dist/src/transformers/model-to-narrative/generators/gwt.js +186 -0
  378. package/dist/src/transformers/model-to-narrative/generators/gwt.js.map +1 -0
  379. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +16 -0
  380. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -0
  381. package/dist/src/transformers/model-to-narrative/generators/imports.js +57 -0
  382. package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -0
  383. package/dist/src/transformers/model-to-narrative/generators/types.d.ts +13 -0
  384. package/dist/src/transformers/model-to-narrative/generators/types.d.ts.map +1 -0
  385. package/dist/src/transformers/model-to-narrative/generators/types.js +22 -0
  386. package/dist/src/transformers/model-to-narrative/generators/types.js.map +1 -0
  387. package/dist/src/transformers/model-to-narrative/index.d.ts +13 -0
  388. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -0
  389. package/dist/src/transformers/model-to-narrative/index.js +25 -0
  390. package/dist/src/transformers/model-to-narrative/index.js.map +1 -0
  391. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +12 -0
  392. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -0
  393. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +64 -0
  394. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -0
  395. package/dist/src/transformers/model-to-narrative/utils/strings.d.ts +9 -0
  396. package/dist/src/transformers/model-to-narrative/utils/strings.d.ts.map +1 -0
  397. package/dist/src/transformers/model-to-narrative/utils/strings.js +11 -0
  398. package/dist/src/transformers/model-to-narrative/utils/strings.js.map +1 -0
  399. package/dist/src/transformers/narrative-to-model/assemble.d.ts +3 -0
  400. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -0
  401. package/dist/src/transformers/narrative-to-model/assemble.js +9 -0
  402. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -0
  403. package/dist/src/transformers/narrative-to-model/debug.d.ts +3 -0
  404. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -0
  405. package/dist/src/transformers/narrative-to-model/debug.js +6 -0
  406. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -0
  407. package/dist/src/transformers/narrative-to-model/example-shapes.d.ts +6 -0
  408. package/dist/src/transformers/narrative-to-model/example-shapes.d.ts.map +1 -0
  409. package/dist/src/transformers/narrative-to-model/example-shapes.js +60 -0
  410. package/dist/src/transformers/narrative-to-model/example-shapes.js.map +1 -0
  411. package/dist/src/transformers/narrative-to-model/guards.d.ts +15 -0
  412. package/dist/src/transformers/narrative-to-model/guards.d.ts.map +1 -0
  413. package/dist/src/transformers/narrative-to-model/guards.js +18 -0
  414. package/dist/src/transformers/narrative-to-model/guards.js.map +1 -0
  415. package/dist/src/transformers/narrative-to-model/index.d.ts +4 -0
  416. package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -0
  417. package/dist/src/transformers/narrative-to-model/index.js +193 -0
  418. package/dist/src/transformers/narrative-to-model/index.js.map +1 -0
  419. package/dist/src/transformers/narrative-to-model/inlining.d.ts +4 -0
  420. package/dist/src/transformers/narrative-to-model/inlining.d.ts.map +1 -0
  421. package/dist/src/transformers/narrative-to-model/inlining.js +95 -0
  422. package/dist/src/transformers/narrative-to-model/inlining.js.map +1 -0
  423. package/dist/src/transformers/narrative-to-model/integrations.d.ts +36 -0
  424. package/dist/src/transformers/narrative-to-model/integrations.d.ts.map +1 -0
  425. package/dist/src/transformers/narrative-to-model/integrations.js +147 -0
  426. package/dist/src/transformers/narrative-to-model/integrations.js.map +1 -0
  427. package/dist/src/transformers/narrative-to-model/messages.d.ts +5 -0
  428. package/dist/src/transformers/narrative-to-model/messages.d.ts.map +1 -0
  429. package/dist/src/transformers/narrative-to-model/messages.js +88 -0
  430. package/dist/src/transformers/narrative-to-model/messages.js.map +1 -0
  431. package/dist/src/transformers/narrative-to-model/normalize.d.ts +3 -0
  432. package/dist/src/transformers/narrative-to-model/normalize.d.ts.map +1 -0
  433. package/dist/src/transformers/narrative-to-model/normalize.js +23 -0
  434. package/dist/src/transformers/narrative-to-model/normalize.js.map +1 -0
  435. package/dist/src/transformers/narrative-to-model/spec-processors.d.ts +34 -0
  436. package/dist/src/transformers/narrative-to-model/spec-processors.d.ts.map +1 -0
  437. package/dist/src/transformers/narrative-to-model/spec-processors.js +395 -0
  438. package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -0
  439. package/dist/src/transformers/narrative-to-model/strings.d.ts +2 -0
  440. package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -0
  441. package/dist/src/transformers/narrative-to-model/strings.js +11 -0
  442. package/dist/src/transformers/narrative-to-model/strings.js.map +1 -0
  443. package/dist/src/transformers/narrative-to-model/type-inference.d.ts +3 -0
  444. package/dist/src/transformers/narrative-to-model/type-inference.d.ts.map +1 -0
  445. package/dist/src/transformers/narrative-to-model/type-inference.js +92 -0
  446. package/dist/src/transformers/narrative-to-model/type-inference.js.map +1 -0
  447. package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts +2 -0
  448. package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts.map +1 -0
  449. package/dist/src/transformers/narrative-to-model/type-inference.specs.js +167 -0
  450. package/dist/src/transformers/narrative-to-model/type-inference.specs.js.map +1 -0
  451. package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts +6 -0
  452. package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts.map +1 -0
  453. package/dist/src/transformers/narrative-to-model/zod-adapter.js +101 -0
  454. package/dist/src/transformers/narrative-to-model/zod-adapter.js.map +1 -0
  455. package/dist/src/types.d.ts +143 -0
  456. package/dist/src/types.d.ts.map +1 -0
  457. package/dist/src/types.js +36 -0
  458. package/dist/src/types.js.map +1 -0
  459. package/dist/tsconfig.tsbuildinfo +1 -0
  460. package/eslint.config.ts +12 -0
  461. package/package.json +50 -0
  462. package/scripts/build.ts +84 -0
  463. package/scripts/convert-flow-exec.ts +17 -0
  464. package/scripts/convert-flow-helper.ts +93 -0
  465. package/scripts/convert-flow.ts +128 -0
  466. package/scripts/print-schema.ts +30 -0
  467. package/src/commands/export-schema-helper.ts +76 -0
  468. package/src/commands/export-schema-runner.ts +72 -0
  469. package/src/commands/export-schema.ts +157 -0
  470. package/src/commands/filestore.node.ts +12 -0
  471. package/src/data-narrative-builders.ts +418 -0
  472. package/src/fluent-builder.specs.ts +36 -0
  473. package/src/fluent-builder.ts +382 -0
  474. package/src/getFlows.cache.specs.ts +287 -0
  475. package/src/getFlows.specs.ts +1246 -0
  476. package/src/getNarratives.ts +186 -0
  477. package/src/id/addAutoIds.specs.ts +296 -0
  478. package/src/id/addAutoIds.ts +53 -0
  479. package/src/id/generators.ts +5 -0
  480. package/src/id/hasAllIds.specs.ts +267 -0
  481. package/src/id/hasAllIds.ts +23 -0
  482. package/src/id/index.ts +2 -0
  483. package/src/index.ts +131 -0
  484. package/src/integration-export-registry.ts +83 -0
  485. package/src/integration-registry.ts +53 -0
  486. package/src/loader/fs-path.ts +29 -0
  487. package/src/loader/graph.ts +379 -0
  488. package/src/loader/importmap.ts +68 -0
  489. package/src/loader/index.ts +81 -0
  490. package/src/loader/resolver.ts +22 -0
  491. package/src/loader/runtime-cjs.ts +151 -0
  492. package/src/loader/ts-utils.ts +770 -0
  493. package/src/loader/types.ts +20 -0
  494. package/src/loader/vfs-compiler-host.ts +51 -0
  495. package/src/model-to-flow.specs.ts +1822 -0
  496. package/src/narrative-context.specs.ts +226 -0
  497. package/src/narrative-context.ts +708 -0
  498. package/src/narrative-registry.ts +65 -0
  499. package/src/narrative.ts +236 -0
  500. package/src/samples/items.flow.ts +90 -0
  501. package/src/samples/mixed-given-types.flow.ts +70 -0
  502. package/src/samples/place-order.flow.ts +57 -0
  503. package/src/samples/questionnaires.flow.ts +359 -0
  504. package/src/samples/seasonal-assistant.schema.json +737 -0
  505. package/src/samples/test-with-ids.flow.ts +109 -0
  506. package/src/schema-test.ts +67 -0
  507. package/src/schema.ts +398 -0
  508. package/src/slice-builder.ts +100 -0
  509. package/src/testing.ts +40 -0
  510. package/src/transformers/model-to-narrative/analysis/extract-flow.ts +26 -0
  511. package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +98 -0
  512. package/src/transformers/model-to-narrative/analysis/type-decls.ts +94 -0
  513. package/src/transformers/model-to-narrative/analysis/usage.ts +111 -0
  514. package/src/transformers/model-to-narrative/ast/emit-helpers.ts +199 -0
  515. package/src/transformers/model-to-narrative/formatting/prettier.ts +30 -0
  516. package/src/transformers/model-to-narrative/formatting/sort-types.ts +19 -0
  517. package/src/transformers/model-to-narrative/generators/compose.ts +124 -0
  518. package/src/transformers/model-to-narrative/generators/flow.ts +570 -0
  519. package/src/transformers/model-to-narrative/generators/gwt.ts +335 -0
  520. package/src/transformers/model-to-narrative/generators/imports.ts +110 -0
  521. package/src/transformers/model-to-narrative/generators/types.ts +48 -0
  522. package/src/transformers/model-to-narrative/index.ts +27 -0
  523. package/src/transformers/model-to-narrative/utils/integration-extractor.ts +67 -0
  524. package/src/transformers/model-to-narrative/utils/strings.ts +10 -0
  525. package/src/transformers/narrative-to-model/assemble.ts +10 -0
  526. package/src/transformers/narrative-to-model/debug.ts +6 -0
  527. package/src/transformers/narrative-to-model/example-shapes.ts +66 -0
  528. package/src/transformers/narrative-to-model/guards.ts +24 -0
  529. package/src/transformers/narrative-to-model/index.ts +274 -0
  530. package/src/transformers/narrative-to-model/inlining.ts +106 -0
  531. package/src/transformers/narrative-to-model/integrations.ts +201 -0
  532. package/src/transformers/narrative-to-model/messages.ts +104 -0
  533. package/src/transformers/narrative-to-model/normalize.ts +27 -0
  534. package/src/transformers/narrative-to-model/spec-processors.ts +648 -0
  535. package/src/transformers/narrative-to-model/strings.ts +11 -0
  536. package/src/transformers/narrative-to-model/type-inference.specs.ts +176 -0
  537. package/src/transformers/narrative-to-model/type-inference.ts +127 -0
  538. package/src/transformers/narrative-to-model/zod-adapter.ts +110 -0
  539. package/src/types.ts +226 -0
  540. package/tsconfig.json +11 -0
  541. package/tsconfig.test.json +9 -0
@@ -0,0 +1,382 @@
1
+ import type { Integration } from './types';
2
+ import {
3
+ addSlice,
4
+ startClientBlock,
5
+ endClientBlock,
6
+ startServerBlock,
7
+ endServerBlock,
8
+ getCurrentSlice,
9
+ } from './narrative-context';
10
+ import { CommandSlice, QuerySlice, ReactSlice, ExperienceSlice } from './index';
11
+ import { print, ASTNode } from 'graphql';
12
+ import createDebug from 'debug';
13
+
14
+ const debug = createDebug('auto:narrative:fluent-builder');
15
+ if ('color' in debug && typeof debug === 'object') {
16
+ (debug as { color: string }).color = '6';
17
+ } // cyan
18
+ const debugCommand = createDebug('auto:narrative:fluent-builder:command');
19
+ if ('color' in debugCommand && typeof debugCommand === 'object') {
20
+ (debugCommand as { color: string }).color = '4';
21
+ } // blue
22
+ const debugQuery = createDebug('auto:narrative:fluent-builder:query');
23
+ if ('color' in debugQuery && typeof debugQuery === 'object') {
24
+ (debugQuery as { color: string }).color = '4';
25
+ } // blue
26
+ const debugReact = createDebug('auto:narrative:fluent-builder:react');
27
+ if ('color' in debugReact && typeof debugReact === 'object') {
28
+ (debugReact as { color: string }).color = '2';
29
+ } // green
30
+ const debugExperience = createDebug('auto:narrative:fluent-builder:experience');
31
+ if ('color' in debugExperience && typeof debugExperience === 'object') {
32
+ (debugExperience as { color: string }).color = '5';
33
+ } // magenta
34
+
35
+ export interface FluentCommandSliceBuilder {
36
+ stream(name: string): FluentCommandSliceBuilder;
37
+ client(fn: () => void): FluentCommandSliceBuilder;
38
+ client(description: string, fn: () => void): FluentCommandSliceBuilder;
39
+ server(fn: () => void): FluentCommandSliceBuilder;
40
+ server(description: string, fn: () => void): FluentCommandSliceBuilder;
41
+ via(integration: Integration | Integration[]): FluentCommandSliceBuilder;
42
+ retries(count: number): FluentCommandSliceBuilder;
43
+ request(mutation: unknown): FluentCommandSliceBuilder;
44
+ }
45
+
46
+ export interface FluentQuerySliceBuilder {
47
+ client(fn: () => void): FluentQuerySliceBuilder;
48
+ client(description: string, fn: () => void): FluentQuerySliceBuilder;
49
+ server(fn: () => void): FluentQuerySliceBuilder;
50
+ server(description: string, fn: () => void): FluentQuerySliceBuilder;
51
+ request(query: unknown): FluentQuerySliceBuilder;
52
+ }
53
+
54
+ export interface FluentReactionSliceBuilder {
55
+ server(fn: () => void): FluentReactionSliceBuilder;
56
+ server(description: string, fn: () => void): FluentReactionSliceBuilder;
57
+ via(integration: Integration | Integration[]): FluentReactionSliceBuilder;
58
+ retries(count: number): FluentReactionSliceBuilder;
59
+ }
60
+
61
+ export interface FluentExperienceSliceBuilder {
62
+ client(fn: () => void): FluentExperienceSliceBuilder;
63
+ client(description: string, fn: () => void): FluentExperienceSliceBuilder;
64
+ }
65
+
66
+ class CommandSliceBuilderImpl implements FluentCommandSliceBuilder {
67
+ private slice: CommandSlice;
68
+
69
+ constructor(name: string, id?: string) {
70
+ debugCommand('Creating command slice: %s', name);
71
+ this.slice = {
72
+ type: 'command',
73
+ name,
74
+ id,
75
+ client: { description: '', specs: undefined },
76
+ server: { description: '', specs: { name: '', rules: [] }, data: undefined },
77
+ };
78
+ addSlice(this.slice);
79
+ debugCommand('Command slice added to flow: %s', name);
80
+ }
81
+
82
+ stream(name: string): FluentCommandSliceBuilder {
83
+ debugCommand('Setting stream for slice %s: %s', this.slice.name, name);
84
+ this.slice.stream = name;
85
+ return this;
86
+ }
87
+
88
+ client(fn: () => void): FluentCommandSliceBuilder;
89
+ client(description: string, fn: () => void): FluentCommandSliceBuilder;
90
+ client(descriptionOrFn: string | (() => void), fn?: () => void): FluentCommandSliceBuilder {
91
+ const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
92
+ const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
93
+
94
+ debugCommand('Adding client block to slice %s, description: "%s"', this.slice.name, description);
95
+
96
+ if (callback) {
97
+ const slice = getCurrentSlice();
98
+ if (slice) {
99
+ debugCommand('Starting client block execution');
100
+ startClientBlock(slice, description);
101
+ callback();
102
+ endClientBlock();
103
+ debugCommand('Client block execution completed');
104
+ } else {
105
+ debugCommand('WARNING: No current slice found for client block');
106
+ }
107
+ }
108
+
109
+ return this;
110
+ }
111
+
112
+ server(fn: () => void): FluentCommandSliceBuilder;
113
+ server(description: string, fn: () => void): FluentCommandSliceBuilder;
114
+ server(descriptionOrFn: string | (() => void), fn?: () => void): FluentCommandSliceBuilder {
115
+ const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
116
+ const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
117
+
118
+ debugCommand('Adding server block to slice %s, description: "%s"', this.slice.name, description);
119
+
120
+ if (callback) {
121
+ const slice = getCurrentSlice();
122
+ if (slice) {
123
+ debugCommand('Starting server block execution');
124
+ startServerBlock(slice, description);
125
+ callback();
126
+ endServerBlock();
127
+ debugCommand('Server block execution completed');
128
+ } else {
129
+ debugCommand('WARNING: No current slice found for server block');
130
+ }
131
+ }
132
+
133
+ return this;
134
+ }
135
+
136
+ via(integration: Integration | Integration[]): FluentCommandSliceBuilder {
137
+ const integrations = Array.isArray(integration) ? integration : [integration];
138
+ this.slice.via = integrations.map((i) => i.name);
139
+ debugCommand('Set integrations for slice %s: %o', this.slice.name, this.slice.via);
140
+ return this;
141
+ }
142
+
143
+ retries(count: number): FluentCommandSliceBuilder {
144
+ debugCommand('Setting retries for slice %s: %d', this.slice.name, count);
145
+ // Store retries in additionalInstructions or metadata
146
+ this.slice.additionalInstructions = `retries: ${count}`;
147
+ return this;
148
+ }
149
+
150
+ request(query: unknown): FluentCommandSliceBuilder {
151
+ debugCommand('Setting request for slice %s', this.slice.name);
152
+ if (typeof query === 'string') {
153
+ debugCommand('Request is string, length: %d', query.length);
154
+ this.slice.request = query;
155
+ } else if (
156
+ query !== null &&
157
+ query !== undefined &&
158
+ typeof query === 'object' &&
159
+ 'kind' in query &&
160
+ query.kind === 'Document'
161
+ ) {
162
+ debugCommand('Request is GraphQL AST Document, converting to SDL');
163
+ this.slice.request = print(query as ASTNode); // ✅ convert AST to SDL string
164
+ debugCommand('Converted SDL length: %d', this.slice.request.length);
165
+ } else {
166
+ debugCommand('ERROR: Invalid GraphQL query format');
167
+ throw new Error('Invalid GraphQL query format');
168
+ }
169
+ return this;
170
+ }
171
+ }
172
+
173
+ class QuerySliceBuilderImpl implements FluentQuerySliceBuilder {
174
+ private slice: QuerySlice;
175
+
176
+ constructor(name: string, id?: string) {
177
+ debugQuery('Creating query slice: %s', name);
178
+ this.slice = {
179
+ type: 'query',
180
+ name,
181
+ id,
182
+ client: { description: '', specs: undefined },
183
+ server: { description: '', specs: { name: '', rules: [] }, data: undefined },
184
+ };
185
+ addSlice(this.slice);
186
+ debugQuery('Query slice added to flow: %s', name);
187
+ }
188
+
189
+ client(fn: () => void): FluentQuerySliceBuilder;
190
+ client(description: string, fn: () => void): FluentQuerySliceBuilder;
191
+ client(descriptionOrFn: string | (() => void), fn?: () => void): FluentQuerySliceBuilder {
192
+ const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
193
+ const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
194
+
195
+ debugQuery('Adding client block to slice %s, description: "%s"', this.slice.name, description);
196
+
197
+ if (callback) {
198
+ const slice = getCurrentSlice();
199
+ if (slice) {
200
+ debugQuery('Starting client block execution');
201
+ startClientBlock(slice, description);
202
+ callback();
203
+ endClientBlock();
204
+ debugQuery('Client block execution completed');
205
+ } else {
206
+ debugQuery('WARNING: No current slice found for client block');
207
+ }
208
+ }
209
+
210
+ return this;
211
+ }
212
+
213
+ server(fn: () => void): FluentQuerySliceBuilder;
214
+ server(description: string, fn: () => void): FluentQuerySliceBuilder;
215
+ server(descriptionOrFn: string | (() => void), fn?: () => void): FluentQuerySliceBuilder {
216
+ const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
217
+ const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
218
+
219
+ debugQuery('Adding server block to slice %s, description: "%s"', this.slice.name, description);
220
+
221
+ if (callback) {
222
+ const slice = getCurrentSlice();
223
+ if (slice) {
224
+ debugQuery('Starting server block execution');
225
+ startServerBlock(slice, description);
226
+ callback();
227
+ endServerBlock();
228
+ debugQuery('Server block execution completed');
229
+ } else {
230
+ debugQuery('WARNING: No current slice found for server block');
231
+ }
232
+ }
233
+
234
+ return this;
235
+ }
236
+
237
+ request(query: unknown): FluentQuerySliceBuilder {
238
+ debugQuery('Setting request for slice %s', this.slice.name);
239
+ if (typeof query === 'string') {
240
+ debugQuery('Request is string, length: %d', query.length);
241
+ this.slice.request = query;
242
+ } else if (
243
+ query !== null &&
244
+ query !== undefined &&
245
+ typeof query === 'object' &&
246
+ 'kind' in query &&
247
+ query.kind === 'Document'
248
+ ) {
249
+ debugQuery('Request is GraphQL AST Document, converting to SDL');
250
+ this.slice.request = print(query as ASTNode); // ✅ convert AST to SDL string
251
+ debugQuery('Converted SDL length: %d', this.slice.request.length);
252
+ } else {
253
+ debugQuery('ERROR: Invalid GraphQL query format');
254
+ throw new Error('Invalid GraphQL query format');
255
+ }
256
+ return this;
257
+ }
258
+ }
259
+
260
+ class ReactionSliceBuilderImpl implements FluentReactionSliceBuilder {
261
+ private slice: ReactSlice;
262
+
263
+ constructor(name: string, id?: string) {
264
+ debugReact('Creating reaction slice: %s', name);
265
+ this.slice = {
266
+ type: 'react',
267
+ name,
268
+ id,
269
+ server: { specs: { name: '', rules: [] }, data: undefined },
270
+ };
271
+ addSlice(this.slice);
272
+ debugReact('Reaction slice added to flow: %s', name);
273
+ }
274
+
275
+ server(fn: () => void): FluentReactionSliceBuilder;
276
+ server(description: string, fn: () => void): FluentReactionSliceBuilder;
277
+ server(descriptionOrFn: string | (() => void), fn?: () => void): FluentReactionSliceBuilder {
278
+ const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
279
+ const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
280
+
281
+ debugReact('Adding server block to slice %s, description: "%s"', this.slice.name, description);
282
+
283
+ if (callback) {
284
+ const slice = getCurrentSlice();
285
+ if (slice) {
286
+ debugReact('Starting server block execution');
287
+ startServerBlock(slice, description);
288
+ callback();
289
+ endServerBlock();
290
+ debugReact('Server block execution completed');
291
+ } else {
292
+ debugReact('WARNING: No current slice found for server block');
293
+ }
294
+ }
295
+
296
+ return this;
297
+ }
298
+
299
+ via(integration: Integration | Integration[]): FluentReactionSliceBuilder {
300
+ const integrations = Array.isArray(integration) ? integration : [integration];
301
+ this.slice.via = integrations.map((i) => i.name);
302
+ debugReact('Set integrations for slice %s: %o', this.slice.name, this.slice.via);
303
+ return this;
304
+ }
305
+
306
+ retries(count: number): FluentReactionSliceBuilder {
307
+ debugReact('Setting retries for slice %s: %d', this.slice.name, count);
308
+ // Store retries in additionalInstructions or metadata
309
+ this.slice.additionalInstructions = `retries: ${count}`;
310
+ return this;
311
+ }
312
+ }
313
+
314
+ class ExperienceSliceBuilderImpl implements FluentExperienceSliceBuilder {
315
+ private slice: ExperienceSlice;
316
+
317
+ constructor(name: string, id?: string) {
318
+ debugExperience('Creating experience slice: %s', name);
319
+ this.slice = {
320
+ type: 'experience',
321
+ name,
322
+ id,
323
+ client: { description: '', specs: undefined },
324
+ };
325
+ addSlice(this.slice);
326
+ debugExperience('Experience slice added to flow: %s', name);
327
+ }
328
+
329
+ client(fn: () => void): FluentExperienceSliceBuilder;
330
+ client(description: string, fn: () => void): FluentExperienceSliceBuilder;
331
+ client(descriptionOrFn: string | (() => void), fn?: () => void): FluentExperienceSliceBuilder {
332
+ const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
333
+ const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
334
+
335
+ debugExperience('Adding client block to slice %s, description: "%s"', this.slice.name, description);
336
+
337
+ if (callback) {
338
+ const slice = getCurrentSlice();
339
+ if (slice) {
340
+ debugExperience('Starting client block execution');
341
+ startClientBlock(slice, description);
342
+ callback();
343
+ endClientBlock();
344
+ debugExperience('Client block execution completed');
345
+ } else {
346
+ debugExperience('WARNING: No current slice found for client block');
347
+ }
348
+ }
349
+
350
+ return this;
351
+ }
352
+ }
353
+
354
+ export const command = (name: string, id?: string): FluentCommandSliceBuilder => {
355
+ debug('Creating command slice: %s', name);
356
+ return new CommandSliceBuilderImpl(name, id);
357
+ };
358
+
359
+ export const query = (name: string, id?: string): FluentQuerySliceBuilder => {
360
+ debug('Creating query slice: %s', name);
361
+ return new QuerySliceBuilderImpl(name, id);
362
+ };
363
+
364
+ export const react = (name: string, id?: string): FluentReactionSliceBuilder => {
365
+ debug('Creating react slice: %s', name);
366
+ return new ReactionSliceBuilderImpl(name, id);
367
+ };
368
+
369
+ export const experience = (name: string, id?: string): FluentExperienceSliceBuilder => {
370
+ debug('Creating experience slice: %s', name);
371
+ return new ExperienceSliceBuilderImpl(name, id);
372
+ };
373
+
374
+ export const decide = (name: string, id?: string): FluentCommandSliceBuilder => {
375
+ debug('Creating command slice via decide alias: %s', name);
376
+ return new CommandSliceBuilderImpl(name, id);
377
+ };
378
+
379
+ export const evolve = (name: string, id?: string): FluentQuerySliceBuilder => {
380
+ debug('Creating query slice via evolve alias: %s', name);
381
+ return new QuerySliceBuilderImpl(name, id);
382
+ };
@@ -0,0 +1,287 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { getNarratives, clearGetNarrativesCache } from './getNarratives';
3
+ import { InMemoryFileStore, type IFileStore } from '@auto-engineer/file-store';
4
+ import * as flowApi from './narrative';
5
+ import * as fluent from './fluent-builder';
6
+ import * as dataBuilders from './data-narrative-builders';
7
+ import * as typesApi from './types';
8
+ import gql from 'graphql-tag';
9
+
10
+ const importMap = {
11
+ '../flow': flowApi,
12
+ '../fluent-builder': fluent,
13
+ '../data-flow-builders': dataBuilders,
14
+ '../types': typesApi,
15
+ 'graphql-tag': { default: gql, gql },
16
+ };
17
+
18
+ const pattern = /\.(flow)\.(ts)$/;
19
+
20
+ describe('getNarratives caching', () => {
21
+ let vfs: IFileStore;
22
+ const root = '/test';
23
+
24
+ beforeEach(() => {
25
+ vfs = new InMemoryFileStore();
26
+ clearGetNarrativesCache();
27
+ });
28
+
29
+ it('should rebuild cache when a helper file is modified', async () => {
30
+ const helperContent1 = `
31
+ export function formatName(name: string): string {
32
+ return name.toUpperCase();
33
+ }
34
+ `;
35
+ const flowContent = `
36
+ import { narrative } from '../narrative';
37
+ import { formatName } from './helper';
38
+
39
+ narrative('TestFlow', () => {
40
+ const name = formatName('test');
41
+ });
42
+ `;
43
+
44
+ await vfs.write('/test/helper.ts', new TextEncoder().encode(helperContent1));
45
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
46
+
47
+ const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
48
+ const hash1 = firstCallResult.vfsFiles.sort().join(',');
49
+
50
+ const helperContent2 = `
51
+ export function formatName(name: string): string {
52
+ return name.toLowerCase(); // Changed implementation
53
+ }
54
+ `;
55
+ await vfs.write('/test/helper.ts', new TextEncoder().encode(helperContent2));
56
+
57
+ const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
58
+
59
+ const hash2 = secondCallResult.vfsFiles.sort().join(',');
60
+ expect(hash1).toBe(hash2);
61
+ expect(secondCallResult.narratives).toBeDefined();
62
+ });
63
+
64
+ it('should rebuild cache when import map changes', async () => {
65
+ const flowContent = `
66
+ import { narrative } from '../narrative';
67
+
68
+ narrative('TestFlow', () => {
69
+ const x = 1;
70
+ });
71
+ `;
72
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
73
+
74
+ const importMap1 = { 'test-module': { default: 'value1' } };
75
+ const result1 = await getNarratives({ vfs, root, importMap: importMap1, pattern, fastFsScan: true });
76
+ const importMap2 = { 'test-module': { default: 'value2' } };
77
+
78
+ const result2 = await getNarratives({ vfs, root, importMap: importMap2, pattern, fastFsScan: true });
79
+
80
+ expect(result1.narratives.length).toBe(result2.narratives.length);
81
+ });
82
+
83
+ it('should rebuild cache when a new dependency is added', async () => {
84
+ const helperContent1 = `
85
+ export function getValue(): string {
86
+ return 'direct';
87
+ }
88
+ `;
89
+ const flowContent = `
90
+ import { narrative } from '../narrative';
91
+ import { getValue } from './helper';
92
+
93
+ narrative('TestFlow', () => {
94
+ const val = getValue();
95
+ });
96
+ `;
97
+
98
+ await vfs.write('/test/helper.ts', new TextEncoder().encode(helperContent1));
99
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
100
+
101
+ const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
102
+ const filesCount1 = firstCallResult.vfsFiles.length;
103
+
104
+ const transitiveContent = `
105
+ export function transitiveHelper(): string {
106
+ return 'transitive';
107
+ }
108
+ `;
109
+ const helperContent2 = `
110
+ import { transitiveHelper } from './transitive';
111
+
112
+ export function getValue(): string {
113
+ return transitiveHelper();
114
+ }
115
+ `;
116
+
117
+ await vfs.write('/test/transitive.ts', new TextEncoder().encode(transitiveContent));
118
+ await vfs.write('/test/helper.ts', new TextEncoder().encode(helperContent2));
119
+
120
+ const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
121
+
122
+ const filesCount2 = secondCallResult.vfsFiles.length;
123
+ expect(filesCount2).toBeGreaterThan(filesCount1);
124
+ expect(secondCallResult.vfsFiles.some((f) => f.includes('transitive'))).toBe(true);
125
+ });
126
+
127
+ it('should not rebuild cache when an unrelated file is touched', async () => {
128
+ const flowContent = `
129
+ import { narrative } from '../narrative';
130
+
131
+ narrative('TestFlow', () => {
132
+ const x = 1;
133
+ });
134
+ `;
135
+
136
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
137
+ await vfs.write('/test/unrelated.txt', new TextEncoder().encode('initial content'));
138
+
139
+ const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
140
+
141
+ await vfs.write('/test/unrelated.txt', new TextEncoder().encode('modified content'));
142
+
143
+ const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
144
+
145
+ expect(secondCallResult.vfsFiles.some((f) => f.includes('unrelated.txt'))).toBe(false);
146
+ expect(firstCallResult.vfsFiles).toEqual(secondCallResult.vfsFiles);
147
+ });
148
+
149
+ it('should rebuild cache when a file is deleted from the graph', async () => {
150
+ const flowContent1 = `
151
+ import { narrative } from '../narrative';
152
+
153
+ narrative('TestFlow1', () => {
154
+ const x = 1;
155
+ });
156
+ `;
157
+ const flowContent2 = `
158
+ import { narrative } from '../narrative';
159
+
160
+ narrative('TestFlow2', () => {
161
+ const x = 2;
162
+ });
163
+ `;
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));
167
+
168
+ const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
169
+ expect(firstCallResult.narratives.length).toBeGreaterThanOrEqual(2);
170
+
171
+ await vfs.remove('/test/test2.flow.ts');
172
+
173
+ const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
174
+
175
+ expect(secondCallResult.narratives.length).toBeLessThan(firstCallResult.narratives.length);
176
+ expect(secondCallResult.vfsFiles.length).toBeLessThan(firstCallResult.vfsFiles.length);
177
+ });
178
+
179
+ it('should rebuild cache when a file is renamed', async () => {
180
+ const flowContent = `
181
+ import { narrative } from '../narrative';
182
+
183
+ narrative('TestFlow', () => {
184
+ const x = 1;
185
+ });
186
+ `;
187
+
188
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
189
+
190
+ const firstCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
191
+ expect(firstCallResult.vfsFiles.some((f) => f.includes('test.flow.ts'))).toBe(true);
192
+
193
+ const content = await vfs.read('/test/test.flow.ts');
194
+ if (content) {
195
+ await vfs.write('/test/renamed.flow.ts', content);
196
+ await vfs.remove('/test/test.flow.ts');
197
+ }
198
+
199
+ const secondCallResult = await getNarratives({ vfs, root, pattern, fastFsScan: true });
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);
203
+ });
204
+
205
+ it('should handle .d.ts files if they affect the graph', async () => {
206
+ const dtsContent = `
207
+ declare module 'custom-module' {
208
+ export function customFunc(): string;
209
+ }
210
+ `;
211
+ const flowContent = `
212
+ import { narrative } from '../narrative';
213
+
214
+ narrative('TestFlow', () => {
215
+ const x: string = 'test';
216
+ });
217
+ `;
218
+
219
+ await vfs.write('/test/types.d.ts', new TextEncoder().encode(dtsContent));
220
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
221
+
222
+ const result = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
223
+
224
+ expect(result.vfsFiles.some((f) => f.endsWith('.d.ts'))).toBe(false);
225
+ });
226
+
227
+ it('should rebuild when import map keys change even with same values', async () => {
228
+ const flowContent = `
229
+ import { narrative } from '../narrative';
230
+
231
+ narrative('TestFlow', () => {
232
+ const x = 1;
233
+ });
234
+ `;
235
+
236
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
237
+
238
+ const importMap1 = { 'module-a': 'value', 'module-b': 'value' };
239
+ const result1 = await getNarratives({ vfs, root, importMap: importMap1, pattern, fastFsScan: true });
240
+ const importMap2 = { 'module-c': 'value', 'module-d': 'value' };
241
+
242
+ const result2 = await getNarratives({ vfs, root, importMap: importMap2, pattern, fastFsScan: true });
243
+
244
+ expect(result1.narratives).toEqual(result2.narratives); // Same flows
245
+ });
246
+
247
+ it('should handle complex transitive dependency chains', async () => {
248
+ const chain3Content = `
249
+ export const DEEP_VALUE = 'deep';
250
+ `;
251
+ const chain2Content = `
252
+ import { DEEP_VALUE } from './chain3';
253
+ export const MID_VALUE = DEEP_VALUE + '-mid';
254
+ `;
255
+ const chain1Content = `
256
+ import { MID_VALUE } from './chain2';
257
+ export const TOP_VALUE = MID_VALUE + '-top';
258
+ `;
259
+ const flowContent = `
260
+ import { narrative } from '../narrative';
261
+ import { TOP_VALUE } from './chain1';
262
+
263
+ narrative('TestFlow', () => {
264
+ const val = TOP_VALUE;
265
+ });
266
+ `;
267
+
268
+ await vfs.write('/test/chain3.ts', new TextEncoder().encode(chain3Content));
269
+ await vfs.write('/test/chain2.ts', new TextEncoder().encode(chain2Content));
270
+ await vfs.write('/test/chain1.ts', new TextEncoder().encode(chain1Content));
271
+ await vfs.write('/test/test.flow.ts', new TextEncoder().encode(flowContent));
272
+
273
+ const result1 = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
274
+
275
+ expect(result1.vfsFiles.some((f) => f.includes('chain1'))).toBe(true);
276
+ expect(result1.vfsFiles.some((f) => f.includes('chain2'))).toBe(true);
277
+ expect(result1.vfsFiles.some((f) => f.includes('chain3'))).toBe(true);
278
+
279
+ const modifiedChain3Content = `
280
+ export const DEEP_VALUE = 'modified-deep';
281
+ `;
282
+ await vfs.write('/test/chain3.ts', new TextEncoder().encode(modifiedChain3Content));
283
+
284
+ const result2 = await getNarratives({ vfs, root, pattern, fastFsScan: true, importMap });
285
+ expect(result2.vfsFiles.length).toBe(result1.vfsFiles.length);
286
+ });
287
+ });