@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,267 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { hasAllIds, addAutoIds } from './index';
3
+ import { getNarratives } from '../getNarratives';
4
+ import { InMemoryFileStore, type IFileStore } from '@auto-engineer/file-store';
5
+ import * as flowApi from '../narrative';
6
+ import * as fluent from '../fluent-builder';
7
+ import * as dataBuilders from '../data-narrative-builders';
8
+ import * as typesApi from '../types';
9
+ import gql from 'graphql-tag';
10
+
11
+ const importMap = {
12
+ '../flow': flowApi,
13
+ '../fluent-builder': fluent,
14
+ '../data-flow-builders': dataBuilders,
15
+ '../types': typesApi,
16
+ 'graphql-tag': gql,
17
+ };
18
+
19
+ describe('hasAllIds', () => {
20
+ let vfs: IFileStore;
21
+ const root = '/test';
22
+
23
+ beforeEach(async () => {
24
+ vfs = new InMemoryFileStore();
25
+
26
+ const flowWithoutIds = `
27
+ import { flow, specs, rule, example } from '../narrative';
28
+ import { command } from '../fluent-builder';
29
+
30
+ flow('Test Flow Without IDs', () => {
31
+ command('Test slice without ID')
32
+ .server(() => {
33
+ specs('Test specs', () => {
34
+ rule('Test rule without ID', () => {
35
+ example('Test example')
36
+ .when({ test: 'data' })
37
+ .then({ result: 'success' });
38
+ });
39
+ });
40
+ });
41
+ });`;
42
+
43
+ const flowWithIds = `
44
+ import { flow, specs, rule, example } from '../narrative';
45
+ import { command } from '../fluent-builder';
46
+
47
+ flow('Test Flow with IDs', 'FLOW-001', () => {
48
+ command('Test slice with ID', 'SLICE-001')
49
+ .server(() => {
50
+ specs('Test specs', () => {
51
+ rule('Test rule with ID', 'RULE-001', () => {
52
+ example('Test example')
53
+ .when({ test: 'data' })
54
+ .then({ result: 'success' });
55
+ });
56
+ });
57
+ });
58
+ });`;
59
+
60
+ const multipleFlowsSameSource = `
61
+ import { flow, specs, should } from '../narrative';
62
+ import { experience } from '../fluent-builder';
63
+
64
+ flow('Home Screen', 'AUTO-aifPcU3hw', () => {
65
+ experience('Active Surveys Summary', 'AUTO-slice1').client(() => {
66
+ specs(() => {
67
+ should('show active surveys summary');
68
+ });
69
+ });
70
+ });
71
+
72
+ flow('Create Survey', 'AUTO-MPviTMrQC', () => {
73
+ experience('Create Survey Form', 'AUTO-slice2').client(() => {
74
+ specs(() => {
75
+ should('allow entering survey title');
76
+ });
77
+ });
78
+ });
79
+
80
+ flow('Response Analytics', 'AUTO-eME978Euk', () => {
81
+ experience('Response Rate Charts', 'AUTO-slice3').client(() => {
82
+ specs(() => {
83
+ should('show daily response rate charts');
84
+ });
85
+ });
86
+ });`;
87
+
88
+ const multipleFlowsIncomplete = `
89
+ import { flow, specs, should } from '../narrative';
90
+ import { experience } from '../fluent-builder';
91
+
92
+ flow('Home Screen', 'AUTO-aifPcU3hw', () => {
93
+ experience('Active Surveys Summary', 'AUTO-slice1').client(() => {
94
+ specs(() => {
95
+ should('show active surveys summary');
96
+ });
97
+ });
98
+ });
99
+
100
+ flow('Create Survey', () => {
101
+ experience('Create Survey Form', 'AUTO-slice2').client(() => {
102
+ specs(() => {
103
+ should('allow entering survey title');
104
+ });
105
+ });
106
+ });
107
+
108
+ flow('Response Analytics', 'AUTO-eME978Euk', () => {
109
+ experience('Response Rate Charts', 'AUTO-slice3').client(() => {
110
+ specs(() => {
111
+ should('show daily response rate charts');
112
+ });
113
+ });
114
+ });`;
115
+
116
+ const multipleFlowsSliceMissing = `
117
+ import { flow, specs, should } from '../narrative';
118
+ import { experience } from '../fluent-builder';
119
+
120
+ flow('Home Screen', 'AUTO-aifPcU3hw', () => {
121
+ experience('Active Surveys Summary', 'AUTO-slice1').client(() => {
122
+ specs(() => {
123
+ should('show active surveys summary');
124
+ });
125
+ });
126
+ });
127
+
128
+ flow('Create Survey', 'AUTO-MPviTMrQC', () => {
129
+ experience('Create Survey Form').client(() => {
130
+ specs(() => {
131
+ should('allow entering survey title');
132
+ });
133
+ });
134
+ });
135
+
136
+ flow('Response Analytics', 'AUTO-eME978Euk', () => {
137
+ experience('Response Rate Charts', 'AUTO-slice3').client(() => {
138
+ specs(() => {
139
+ should('show daily response rate charts');
140
+ });
141
+ });
142
+ });`;
143
+
144
+ const flowContent1 = new TextEncoder().encode(flowWithoutIds);
145
+ const flowContent2 = new TextEncoder().encode(flowWithIds);
146
+ const flowContent3 = new TextEncoder().encode(multipleFlowsSameSource);
147
+ const flowContent4 = new TextEncoder().encode(multipleFlowsIncomplete);
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);
154
+ });
155
+ it('should return false for models without IDs', async () => {
156
+ const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
157
+ const model = result.toModel();
158
+
159
+ const flowWithoutIds = model.narratives.find((f) => f.name === 'Test Flow Without IDs');
160
+ expect(flowWithoutIds).toBeDefined();
161
+
162
+ if (flowWithoutIds) {
163
+ const modelWithoutIds = { ...model, narratives: [flowWithoutIds] };
164
+ expect(hasAllIds(modelWithoutIds)).toBe(false);
165
+ }
166
+ });
167
+
168
+ it('should return true for models with complete IDs', async () => {
169
+ const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
170
+ const model = result.toModel();
171
+
172
+ const modelWithIds = addAutoIds(model);
173
+ expect(hasAllIds(modelWithIds)).toBe(true);
174
+ });
175
+
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 });
178
+ const model = result.toModel();
179
+
180
+ const testFlowWithIds = model.narratives.find((f) => f.name === 'Test Flow with IDs');
181
+ expect(testFlowWithIds).toBeDefined();
182
+
183
+ if (testFlowWithIds) {
184
+ const modelWithExistingIds = { ...model, narratives: [testFlowWithIds] };
185
+ expect(hasAllIds(modelWithExistingIds)).toBe(true);
186
+ }
187
+ });
188
+
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 });
191
+ const model = result.toModel();
192
+
193
+ const modelWithIds = addAutoIds(model);
194
+ expect(modelWithIds.narratives.length).toBeGreaterThan(0);
195
+ expect(modelWithIds.narratives[0].slices.length).toBeGreaterThan(0);
196
+
197
+ const modifiedModel = structuredClone(modelWithIds);
198
+ modifiedModel.narratives[0].slices[0].id = '';
199
+ expect(hasAllIds(modifiedModel)).toBe(false);
200
+ });
201
+
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 });
204
+ const model = result.toModel();
205
+
206
+ const modelWithIds = addAutoIds(model);
207
+
208
+ let found = false;
209
+ for (const flow of modelWithIds.narratives) {
210
+ for (const slice of flow.slices) {
211
+ if ('server' in slice && slice.server?.specs?.rules !== undefined && slice.server.specs.rules.length > 0) {
212
+ const modifiedModel = structuredClone(modelWithIds);
213
+ const modifiedFlow = modifiedModel.narratives.find((f) => f.name === flow.name);
214
+ const modifiedSlice = modifiedFlow?.slices.find((s) => s.name === slice.name);
215
+ if (modifiedSlice && 'server' in modifiedSlice && modifiedSlice.server?.specs?.rules !== undefined) {
216
+ modifiedSlice.server.specs.rules[0].id = '';
217
+ expect(hasAllIds(modifiedModel)).toBe(false);
218
+ found = true;
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ if (found) break;
224
+ }
225
+
226
+ expect(found).toBe(true);
227
+ });
228
+
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 });
231
+ const model = result.toModel();
232
+
233
+ const homepageFlows = model.narratives.filter(
234
+ (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage.flow.ts'),
235
+ );
236
+ expect(homepageFlows.length).toBe(3);
237
+
238
+ const homepageModel = { ...model, narratives: homepageFlows };
239
+ expect(hasAllIds(homepageModel)).toBe(true);
240
+ });
241
+
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 });
244
+ const model = result.toModel();
245
+
246
+ const homepageFlows = model.narratives.filter(
247
+ (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-incomplete.flow.ts'),
248
+ );
249
+ expect(homepageFlows.length).toBe(3);
250
+
251
+ const homepageModel = { ...model, narratives: homepageFlows };
252
+ expect(hasAllIds(homepageModel)).toBe(false);
253
+ });
254
+
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 });
257
+ const model = result.toModel();
258
+
259
+ const homepageFlows = model.narratives.filter(
260
+ (f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-slice-missing.flow.ts'),
261
+ );
262
+ expect(homepageFlows.length).toBe(3);
263
+
264
+ const homepageModel = { ...model, narratives: homepageFlows };
265
+ expect(hasAllIds(homepageModel)).toBe(false);
266
+ });
267
+ });
@@ -0,0 +1,23 @@
1
+ import { Model, Slice } from '../index';
2
+
3
+ function hasValidId(item: { id?: string }): boolean {
4
+ return item.id !== undefined && item.id !== '';
5
+ }
6
+
7
+ function hasServerSpecIds(slice: Slice): boolean {
8
+ if (!('server' in slice) || slice.server?.specs?.rules === undefined) return true;
9
+ return slice.server.specs.rules.every(hasValidId);
10
+ }
11
+
12
+ function hasClientSpecIds(_slice: Slice): boolean {
13
+ // Client specs use string rules (no IDs needed), so always valid
14
+ return true;
15
+ }
16
+
17
+ function hasSliceIds(slice: Slice): boolean {
18
+ return hasValidId(slice) && hasServerSpecIds(slice) && hasClientSpecIds(slice);
19
+ }
20
+
21
+ export function hasAllIds(specs: Model): boolean {
22
+ return specs.narratives.every((narrative) => hasValidId(narrative) && narrative.slices.every(hasSliceIds));
23
+ }
@@ -0,0 +1,2 @@
1
+ export { hasAllIds } from './hasAllIds';
2
+ export { addAutoIds } from './addAutoIds';
package/src/index.ts ADDED
@@ -0,0 +1,131 @@
1
+ import { z } from 'zod';
2
+
3
+ // Core types and utilities
4
+ export type {
5
+ Integration,
6
+ DataSink,
7
+ DataSource,
8
+ DataSinkItem,
9
+ DataSourceItem,
10
+ DataItem,
11
+ MessageTarget,
12
+ Destination,
13
+ Origin,
14
+ State,
15
+ Command,
16
+ Event,
17
+ } from './types';
18
+ export { MessageTargetSchema, DataSinkSchema, DataSourceSchema } from './schema';
19
+ export { createIntegration } from './types';
20
+
21
+ // Apollo GraphQL
22
+ export { gql } from 'graphql-tag';
23
+
24
+ // HTTP GET template literal function
25
+ export const get = (strings: TemplateStringsArray, ...values: unknown[]) => {
26
+ return strings.reduce((result, str, i) => {
27
+ const value = values[i];
28
+ return result + str + (value !== undefined && value !== null ? String(value) : '');
29
+ }, '');
30
+ };
31
+
32
+ // Fluent API
33
+ export type {
34
+ FluentCommandSliceBuilder,
35
+ FluentQuerySliceBuilder,
36
+ FluentReactionSliceBuilder,
37
+ FluentExperienceSliceBuilder,
38
+ } from './fluent-builder';
39
+ export { command, query, react, experience, decide, evolve } from './fluent-builder';
40
+
41
+ // Data narrative builders
42
+ export { sink, source } from './data-narrative-builders';
43
+ export type { FieldSelector } from './data-narrative-builders';
44
+
45
+ // Narrative language functions
46
+ export { narrative, narrative as flow } from './narrative';
47
+ export { client, server, specs, should, request, data, rule, example } from './narrative';
48
+ export type { SliceTypeValueInterface } from './narrative';
49
+ export { SliceType } from './narrative';
50
+
51
+ // Narrative conversion utilities
52
+ export { getNarratives } from './getNarratives';
53
+ export { modelToNarrative } from './transformers/model-to-narrative';
54
+
55
+ // Testing helpers
56
+ export { createNarrativeSpec, given, when } from './testing';
57
+
58
+ // Schema definitions for progressive narrative creation
59
+ export {
60
+ NarrativeNamesSchema as NarrativeNamesSystemSchema,
61
+ SliceNamesSchema as SliceNamesSystemSchema,
62
+ ClientServerNamesSchema as ClientServerNamesSystemSchema,
63
+ modelSchema as SpecsSystemSchema,
64
+ MessageFieldSchema,
65
+ MessageSchema,
66
+ CommandSchema,
67
+ EventSchema,
68
+ StateSchema,
69
+ IntegrationSchema,
70
+ CommandSliceSchema,
71
+ QuerySliceSchema,
72
+ ReactSliceSchema,
73
+ ExperienceSliceSchema,
74
+ SliceSchema,
75
+ NarrativeSchema,
76
+ modelSchema,
77
+ EventExampleSchema,
78
+ CommandExampleSchema,
79
+ ExampleSchema,
80
+ RuleSchema,
81
+ SpecSchema,
82
+ } from './schema';
83
+
84
+ import {
85
+ CommandExampleSchema,
86
+ ErrorExampleSchema,
87
+ EventExampleSchema,
88
+ NarrativeSchema,
89
+ SliceSchema,
90
+ modelSchema,
91
+ StateExampleSchema,
92
+ QuerySliceSchema,
93
+ ReactSliceSchema,
94
+ ExperienceSliceSchema,
95
+ MessageSchema,
96
+ MessageFieldSchema,
97
+ CommandSliceSchema,
98
+ ExampleSchema,
99
+ RuleSchema,
100
+ SpecSchema,
101
+ } from './schema';
102
+ export type Model = z.infer<typeof modelSchema>;
103
+ export type Narrative = z.infer<typeof NarrativeSchema>;
104
+ export type CommandExample = z.infer<typeof CommandExampleSchema>;
105
+ export type EventExample = z.infer<typeof EventExampleSchema>;
106
+ export type Slice = z.infer<typeof SliceSchema>;
107
+ export type StateExample = z.infer<typeof StateExampleSchema>;
108
+ export type ErrorExample = z.infer<typeof ErrorExampleSchema>;
109
+ export type QuerySlice = z.infer<typeof QuerySliceSchema>;
110
+ export type ReactSlice = z.infer<typeof ReactSliceSchema>;
111
+ export type CommandSlice = z.infer<typeof CommandSliceSchema>;
112
+ export type ExperienceSlice = z.infer<typeof ExperienceSliceSchema>;
113
+ export type Message = z.infer<typeof MessageSchema>;
114
+ export type Example = z.infer<typeof ExampleSchema>;
115
+ export type MessageField = z.infer<typeof MessageFieldSchema>;
116
+ export type Rule = z.infer<typeof RuleSchema>;
117
+ export type Spec = z.infer<typeof SpecSchema>;
118
+
119
+ export {
120
+ commandHandler as exportSchemaCommandHandler,
121
+ type ExportSchemaCommand,
122
+ type ExportSchemaEvents,
123
+ type SchemaExportedEvent,
124
+ type SchemaExportFailedEvent,
125
+ } from './commands/export-schema';
126
+
127
+ import { commandHandler as exportSchemaHandler } from './commands/export-schema';
128
+ export const COMMANDS = [exportSchemaHandler];
129
+
130
+ // ID assignment utilities
131
+ export { addAutoIds, hasAllIds } from './id';
@@ -0,0 +1,83 @@
1
+ import { Integration } from './types';
2
+ import { IntegrationExport } from './loader/ts-utils';
3
+
4
+ /**
5
+ * Global registry to map integration internal names to their export names and source paths
6
+ */
7
+ class IntegrationExportRegistry {
8
+ private integrationNameToExportName = new Map<string, string>();
9
+ private exportNameToIntegrationName = new Map<string, string>();
10
+ private exportNameToSourcePath = new Map<string, string>();
11
+
12
+ /**
13
+ * Register integration exports from AST parsing
14
+ */
15
+ registerIntegrationExports(integrationExports: IntegrationExport[]): void {
16
+ for (const { exportName, integrationName, sourcePath } of integrationExports) {
17
+ this.integrationNameToExportName.set(integrationName, exportName);
18
+ this.exportNameToIntegrationName.set(exportName, integrationName);
19
+ if (sourcePath !== null && sourcePath !== undefined && sourcePath !== '') {
20
+ this.exportNameToSourcePath.set(exportName, sourcePath);
21
+ }
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Get the export name for an integration based on its internal name
27
+ */
28
+ getExportName(integrationName: string): string | undefined {
29
+ return this.integrationNameToExportName.get(integrationName);
30
+ }
31
+
32
+ /**
33
+ * Get the integration name for an export name
34
+ */
35
+ getIntegrationName(exportName: string): string | undefined {
36
+ return this.exportNameToIntegrationName.get(exportName);
37
+ }
38
+
39
+ /**
40
+ * Get the source path for an export name
41
+ */
42
+ getSourcePath(exportName: string): string | undefined {
43
+ return this.exportNameToSourcePath.get(exportName);
44
+ }
45
+
46
+ /**
47
+ * Get the export name for an Integration object
48
+ * Uses the object's exportName property first, then falls back to registry lookup
49
+ */
50
+ getExportNameForIntegration(integration: Integration): string {
51
+ // First try the exportName property if set
52
+ if (integration.exportName !== null && integration.exportName !== undefined && integration.exportName !== '') {
53
+ return integration.exportName;
54
+ }
55
+
56
+ // Fall back to registry lookup
57
+ const exportName = this.getExportName(integration.name);
58
+ return exportName !== null && exportName !== undefined && exportName !== '' ? exportName : integration.name; // Ultimate fallback to internal name
59
+ }
60
+
61
+ /**
62
+ * Clear all registered exports
63
+ */
64
+ clear(): void {
65
+ this.integrationNameToExportName.clear();
66
+ this.exportNameToIntegrationName.clear();
67
+ this.exportNameToSourcePath.clear();
68
+ }
69
+
70
+ /**
71
+ * Get all registered integration exports
72
+ */
73
+ getAll(): IntegrationExport[] {
74
+ const exports: IntegrationExport[] = [];
75
+ for (const [integrationName, exportName] of this.integrationNameToExportName) {
76
+ exports.push({ exportName, integrationName });
77
+ }
78
+ return exports;
79
+ }
80
+ }
81
+
82
+ // Global singleton registry
83
+ export const integrationExportRegistry = new IntegrationExportRegistry();
@@ -0,0 +1,53 @@
1
+ // integration-helper.ts - Add this to your flow package
2
+ import { Integration } from './types';
3
+ import createDebug from 'debug';
4
+
5
+ const debug = createDebug('auto:flow:integrations');
6
+ if ('color' in debug && typeof debug === 'object') {
7
+ (debug as { color: string }).color = '6';
8
+ } // cyan
9
+
10
+ // Global registry for integrations
11
+ class GlobalIntegrationRegistry {
12
+ private integrations = new Map<string, Integration>();
13
+
14
+ register(integration: Integration) {
15
+ debug('Registering integration: %s', integration.name);
16
+ this.integrations.set(integration.name, integration);
17
+ debug('Integration registered successfully: %s, total: %d', integration.name, this.integrations.size);
18
+ }
19
+
20
+ getAll(): Integration[] {
21
+ const integrations = Array.from(this.integrations.values());
22
+ debug('Getting all integrations, count: %d', integrations.length);
23
+ if (integrations.length > 0) {
24
+ debug(
25
+ 'Integrations: %o',
26
+ integrations.map((i) => i.name),
27
+ );
28
+ }
29
+ return integrations;
30
+ }
31
+
32
+ clear() {
33
+ debug('Clearing integrations, current count: %d', this.integrations.size);
34
+ this.integrations.clear();
35
+ }
36
+
37
+ get(name: string): Integration | undefined {
38
+ const integration = this.integrations.get(name);
39
+ debug('Getting integration %s: %s', name, integration ? 'found' : 'not found');
40
+ return integration;
41
+ }
42
+ }
43
+
44
+ export const globalIntegrationRegistry = new GlobalIntegrationRegistry();
45
+
46
+ export const registerIntegrations = (...integrations: Integration[]) => {
47
+ for (const integration of integrations) {
48
+ globalIntegrationRegistry.register(integration);
49
+ }
50
+ };
51
+
52
+ // Export for use in schema generation
53
+ export { globalIntegrationRegistry as integrationRegistry };
@@ -0,0 +1,29 @@
1
+ export const toPosix = (p: string) => p.replace(/\\/g, '/');
2
+
3
+ export function dirname(p: string) {
4
+ const posix = toPosix(p);
5
+ const idx = posix.lastIndexOf('/');
6
+ return idx > 0 ? posix.slice(0, idx) : '/';
7
+ }
8
+
9
+ export function join(a: string, b: string) {
10
+ const aa = toPosix(a).replace(/\/+$/, '');
11
+ const bb = toPosix(b).replace(/^\/+/, '');
12
+ return (aa ? aa + '/' : '/') + bb;
13
+ }
14
+
15
+ export function normalize(path: string): string {
16
+ const parts = toPosix(path).split('/');
17
+ const out: string[] = [];
18
+ for (const part of parts) {
19
+ if (!part || part === '.') continue;
20
+ if (part === '..') {
21
+ if (out.length) out.pop();
22
+ continue;
23
+ }
24
+ out.push(part);
25
+ }
26
+ return '/' + out.join('/');
27
+ }
28
+
29
+ export const CANDIDATE_EXTS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];