modality-ts 0.0.8 → 0.0.10

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 (615) hide show
  1. package/README.md +9 -7
  2. package/dist/check/diagnostics/bounds.d.ts +4 -0
  3. package/dist/check/diagnostics/bounds.d.ts.map +1 -0
  4. package/dist/check/diagnostics/bounds.js +25 -0
  5. package/dist/check/diagnostics/bounds.js.map +1 -0
  6. package/dist/check/diagnostics/vacuity.d.ts +3 -0
  7. package/dist/check/diagnostics/vacuity.d.ts.map +1 -0
  8. package/dist/check/diagnostics/vacuity.js +22 -0
  9. package/dist/check/diagnostics/vacuity.js.map +1 -0
  10. package/dist/check/engine/check-model.d.ts +4 -0
  11. package/dist/check/engine/check-model.d.ts.map +1 -0
  12. package/dist/check/engine/check-model.js +162 -0
  13. package/dist/check/engine/check-model.js.map +1 -0
  14. package/dist/check/engine/initial-states.d.ts +3 -0
  15. package/dist/check/engine/initial-states.d.ts.map +1 -0
  16. package/dist/check/engine/initial-states.js +11 -0
  17. package/dist/check/engine/initial-states.js.map +1 -0
  18. package/dist/check/engine/model-api.d.ts +4 -0
  19. package/dist/check/engine/model-api.d.ts.map +1 -0
  20. package/dist/check/engine/model-api.js +15 -0
  21. package/dist/check/engine/model-api.js.map +1 -0
  22. package/dist/check/engine/mounts.d.ts +3 -0
  23. package/dist/check/engine/mounts.d.ts.map +1 -0
  24. package/dist/check/engine/mounts.js +13 -0
  25. package/dist/check/engine/mounts.js.map +1 -0
  26. package/dist/check/engine/stabilize.d.ts +3 -0
  27. package/dist/check/engine/stabilize.d.ts.map +1 -0
  28. package/dist/check/engine/stabilize.js +82 -0
  29. package/dist/check/engine/stabilize.js.map +1 -0
  30. package/dist/check/engine/state-utils.d.ts +12 -0
  31. package/dist/check/engine/state-utils.d.ts.map +1 -0
  32. package/dist/check/engine/state-utils.js +30 -0
  33. package/dist/check/engine/state-utils.js.map +1 -0
  34. package/dist/check/engine/transitions.d.ts +4 -0
  35. package/dist/check/engine/transitions.d.ts.map +1 -0
  36. package/dist/check/engine/transitions.js +15 -0
  37. package/dist/check/engine/transitions.js.map +1 -0
  38. package/dist/check/index.d.ts +14 -0
  39. package/dist/check/index.d.ts.map +1 -0
  40. package/dist/check/index.js +13 -0
  41. package/dist/check/index.js.map +1 -0
  42. package/dist/check/properties/checked-state.d.ts +3 -0
  43. package/dist/check/properties/checked-state.d.ts.map +1 -0
  44. package/dist/check/properties/checked-state.js +21 -0
  45. package/dist/check/properties/checked-state.js.map +1 -0
  46. package/dist/check/properties/finalize.d.ts +4 -0
  47. package/dist/check/properties/finalize.d.ts.map +1 -0
  48. package/dist/check/properties/finalize.js +71 -0
  49. package/dist/check/properties/finalize.js.map +1 -0
  50. package/dist/check/properties/leads-to.d.ts +8 -0
  51. package/dist/check/properties/leads-to.d.ts.map +1 -0
  52. package/dist/check/properties/leads-to.js +69 -0
  53. package/dist/check/properties/leads-to.js.map +1 -0
  54. package/dist/check/properties/observe.d.ts +5 -0
  55. package/dist/check/properties/observe.d.ts.map +1 -0
  56. package/dist/check/properties/observe.js +56 -0
  57. package/dist/check/properties/observe.js.map +1 -0
  58. package/dist/check/properties/reachable-from.d.ts +8 -0
  59. package/dist/check/properties/reachable-from.d.ts.map +1 -0
  60. package/dist/check/properties/reachable-from.js +19 -0
  61. package/dist/check/properties/reachable-from.js.map +1 -0
  62. package/dist/check/runtime/domains.d.ts +5 -0
  63. package/dist/check/runtime/domains.d.ts.map +1 -0
  64. package/dist/check/runtime/domains.js +53 -0
  65. package/dist/check/runtime/domains.js.map +1 -0
  66. package/dist/check/runtime/effects.d.ts +9 -0
  67. package/dist/check/runtime/effects.d.ts.map +1 -0
  68. package/dist/check/runtime/effects.js +86 -0
  69. package/dist/check/runtime/effects.js.map +1 -0
  70. package/dist/check/runtime/expr.d.ts +7 -0
  71. package/dist/check/runtime/expr.d.ts.map +1 -0
  72. package/dist/check/runtime/expr.js +49 -0
  73. package/dist/check/runtime/expr.js.map +1 -0
  74. package/dist/check/runtime/navigation.d.ts +7 -0
  75. package/dist/check/runtime/navigation.d.ts.map +1 -0
  76. package/dist/check/runtime/navigation.js +60 -0
  77. package/dist/check/runtime/navigation.js.map +1 -0
  78. package/dist/check/runtime/opaque.d.ts +3 -0
  79. package/dist/check/runtime/opaque.d.ts.map +1 -0
  80. package/dist/check/runtime/opaque.js +72 -0
  81. package/dist/check/runtime/opaque.js.map +1 -0
  82. package/dist/check/runtime/paths.d.ts +4 -0
  83. package/dist/check/runtime/paths.d.ts.map +1 -0
  84. package/dist/check/runtime/paths.js +28 -0
  85. package/dist/check/runtime/paths.js.map +1 -0
  86. package/dist/check/runtime/pending.d.ts +9 -0
  87. package/dist/check/runtime/pending.d.ts.map +1 -0
  88. package/dist/check/runtime/pending.js +5 -0
  89. package/dist/check/runtime/pending.js.map +1 -0
  90. package/dist/check/runtime/tokens.d.ts +7 -0
  91. package/dist/check/runtime/tokens.d.ts.map +1 -0
  92. package/dist/check/runtime/tokens.js +36 -0
  93. package/dist/check/runtime/tokens.js.map +1 -0
  94. package/dist/check/slicing/slice-model.d.ts +5 -0
  95. package/dist/check/slicing/slice-model.d.ts.map +1 -0
  96. package/dist/check/slicing/slice-model.js +48 -0
  97. package/dist/check/slicing/slice-model.js.map +1 -0
  98. package/dist/check/traces/step-facts.d.ts +3 -0
  99. package/dist/check/traces/step-facts.d.ts.map +1 -0
  100. package/dist/check/traces/step-facts.js +35 -0
  101. package/dist/check/traces/step-facts.js.map +1 -0
  102. package/dist/check/traces/trace.d.ts +8 -0
  103. package/dist/check/traces/trace.d.ts.map +1 -0
  104. package/dist/check/traces/trace.js +42 -0
  105. package/dist/check/traces/trace.js.map +1 -0
  106. package/dist/{checker/search/index.d.ts → check/types.d.ts} +16 -6
  107. package/dist/check/types.d.ts.map +1 -0
  108. package/dist/{kernel/ir → check}/types.js.map +1 -1
  109. package/dist/cli/check.d.ts +3 -0
  110. package/dist/cli/check.d.ts.map +1 -0
  111. package/dist/cli/check.js +2 -0
  112. package/dist/cli/check.js.map +1 -0
  113. package/dist/cli/ci.d.ts.map +1 -0
  114. package/dist/cli/ci.js.map +1 -0
  115. package/dist/{modality → cli}/cli.d.ts.map +1 -1
  116. package/dist/{modality → cli}/cli.js +183 -50
  117. package/dist/cli/cli.js.map +1 -0
  118. package/dist/cli/codegen/model.d.ts +3 -0
  119. package/dist/cli/codegen/model.d.ts.map +1 -0
  120. package/dist/{modality → cli}/codegen/model.js +18 -10
  121. package/dist/cli/codegen/model.js.map +1 -0
  122. package/dist/{modality → cli}/codegen/replay-test.d.ts +1 -1
  123. package/dist/cli/codegen/replay-test.d.ts.map +1 -0
  124. package/dist/{modality → cli}/codegen/replay-test.js +12 -12
  125. package/dist/cli/codegen/replay-test.js.map +1 -0
  126. package/dist/cli/conform.d.ts +3 -0
  127. package/dist/cli/conform.d.ts.map +1 -0
  128. package/dist/cli/conform.js +2 -0
  129. package/dist/cli/conform.js.map +1 -0
  130. package/dist/cli/defaults.d.ts +13 -0
  131. package/dist/cli/defaults.d.ts.map +1 -0
  132. package/dist/cli/defaults.js +57 -0
  133. package/dist/cli/defaults.js.map +1 -0
  134. package/dist/cli/export-tla.d.ts +3 -0
  135. package/dist/cli/export-tla.d.ts.map +1 -0
  136. package/dist/cli/export-tla.js +2 -0
  137. package/dist/cli/export-tla.js.map +1 -0
  138. package/dist/{modality → cli}/extract.d.ts +1 -1
  139. package/dist/cli/extract.d.ts.map +1 -0
  140. package/dist/cli/extract.js.map +1 -0
  141. package/dist/{modality → cli}/features/check/command.d.ts +3 -2
  142. package/dist/cli/features/check/command.d.ts.map +1 -0
  143. package/dist/{modality → cli}/features/check/command.js +67 -27
  144. package/dist/cli/features/check/command.js.map +1 -0
  145. package/dist/cli/features/check/index.d.ts +3 -0
  146. package/dist/cli/features/check/index.d.ts.map +1 -0
  147. package/dist/cli/features/check/index.js +2 -0
  148. package/dist/cli/features/check/index.js.map +1 -0
  149. package/dist/cli/features/ci/command.d.ts.map +1 -0
  150. package/dist/{modality → cli}/features/ci/command.js +66 -26
  151. package/dist/cli/features/ci/command.js.map +1 -0
  152. package/dist/cli/features/ci/index.d.ts.map +1 -0
  153. package/dist/cli/features/ci/index.js.map +1 -0
  154. package/dist/{modality → cli}/features/conform/command.d.ts +1 -1
  155. package/dist/cli/features/conform/command.d.ts.map +1 -0
  156. package/dist/{modality → cli}/features/conform/command.js +67 -25
  157. package/dist/cli/features/conform/command.js.map +1 -0
  158. package/dist/cli/features/conform/index.d.ts.map +1 -0
  159. package/dist/cli/features/conform/index.js.map +1 -0
  160. package/dist/{modality → cli}/features/export/command.d.ts +1 -1
  161. package/dist/cli/features/export/command.d.ts.map +1 -0
  162. package/dist/{modality → cli}/features/export/command.js +72 -27
  163. package/dist/cli/features/export/command.js.map +1 -0
  164. package/dist/{modality → cli}/features/export/index.d.ts +2 -2
  165. package/dist/cli/features/export/index.d.ts.map +1 -0
  166. package/dist/cli/features/export/index.js +2 -0
  167. package/dist/cli/features/export/index.js.map +1 -0
  168. package/dist/{modality → cli}/features/extract/command.d.ts +5 -4
  169. package/dist/cli/features/extract/command.d.ts.map +1 -0
  170. package/dist/{modality → cli}/features/extract/command.js +295 -82
  171. package/dist/cli/features/extract/command.js.map +1 -0
  172. package/dist/{modality → cli}/features/extract/index.d.ts +1 -1
  173. package/dist/cli/features/extract/index.d.ts.map +1 -0
  174. package/dist/cli/features/extract/index.js.map +1 -0
  175. package/dist/cli/features/init/command.d.ts +9 -0
  176. package/dist/cli/features/init/command.d.ts.map +1 -0
  177. package/dist/cli/features/init/command.js +23 -0
  178. package/dist/cli/features/init/command.js.map +1 -0
  179. package/dist/cli/features/init/index.d.ts +3 -0
  180. package/dist/cli/features/init/index.d.ts.map +1 -0
  181. package/dist/cli/features/init/index.js +2 -0
  182. package/dist/cli/features/init/index.js.map +1 -0
  183. package/dist/{modality → cli}/features/replay/command.d.ts +1 -1
  184. package/dist/cli/features/replay/command.d.ts.map +1 -0
  185. package/dist/{modality → cli}/features/replay/command.js +42 -16
  186. package/dist/cli/features/replay/command.js.map +1 -0
  187. package/dist/cli/features/replay/index.d.ts.map +1 -0
  188. package/dist/cli/features/replay/index.js.map +1 -0
  189. package/dist/{harness → cli/harness}/index.d.ts +1 -1
  190. package/dist/cli/harness/index.d.ts.map +1 -0
  191. package/dist/{harness → cli/harness}/index.js +128 -37
  192. package/dist/cli/harness/index.js.map +1 -0
  193. package/dist/{modality → cli}/overlay.d.ts +1 -1
  194. package/dist/cli/overlay.d.ts.map +1 -0
  195. package/dist/{modality → cli}/overlay.js +1 -1
  196. package/dist/cli/overlay.js.map +1 -0
  197. package/dist/{modality → cli}/registry/index.d.ts +2 -2
  198. package/dist/cli/registry/index.d.ts.map +1 -0
  199. package/dist/{modality → cli}/registry/index.js +32 -17
  200. package/dist/cli/registry/index.js.map +1 -0
  201. package/dist/cli/replay.d.ts +3 -0
  202. package/dist/cli/replay.d.ts.map +1 -0
  203. package/dist/cli/replay.js.map +1 -0
  204. package/dist/{runtime → cli/runtime}/index.d.ts +1 -1
  205. package/dist/cli/runtime/index.d.ts.map +1 -0
  206. package/dist/{runtime → cli/runtime}/index.js +37 -10
  207. package/dist/cli/runtime/index.js.map +1 -0
  208. package/dist/core/artifacts/index.d.ts.map +1 -0
  209. package/dist/{kernel → core}/artifacts/index.js +7 -2
  210. package/dist/core/artifacts/index.js.map +1 -0
  211. package/dist/core/index.d.ts.map +1 -0
  212. package/dist/core/index.js.map +1 -0
  213. package/dist/core/ir/canonical.d.ts.map +1 -0
  214. package/dist/{kernel → core}/ir/canonical.js +30 -7
  215. package/dist/core/ir/canonical.js.map +1 -0
  216. package/dist/core/ir/domains.d.ts.map +1 -0
  217. package/dist/{kernel → core}/ir/domains.js +18 -6
  218. package/dist/core/ir/domains.js.map +1 -0
  219. package/dist/core/ir/types.d.ts.map +1 -0
  220. package/dist/{kernel/trace → core/ir}/types.js.map +1 -1
  221. package/dist/core/ir/validator.d.ts.map +1 -0
  222. package/dist/{kernel → core}/ir/validator.js +48 -19
  223. package/dist/core/ir/validator.js.map +1 -0
  224. package/dist/core/overlay/index.d.ts.map +1 -0
  225. package/dist/{kernel → core}/overlay/index.js +35 -14
  226. package/dist/core/overlay/index.js.map +1 -0
  227. package/dist/core/props/index.d.ts.map +1 -0
  228. package/dist/{kernel → core}/props/index.js +69 -21
  229. package/dist/core/props/index.js.map +1 -0
  230. package/dist/{kernel → core}/report/types.d.ts.map +1 -1
  231. package/dist/{kernel → core}/report/types.js.map +1 -1
  232. package/dist/core/trace/types.d.ts.map +1 -0
  233. package/dist/core/trace/types.js +2 -0
  234. package/dist/core/trace/types.js.map +1 -0
  235. package/dist/extract/engine/index.d.ts +4 -0
  236. package/dist/extract/engine/index.d.ts.map +1 -0
  237. package/dist/extract/engine/index.js +4 -0
  238. package/dist/extract/engine/index.js.map +1 -0
  239. package/dist/{extraction → extract/engine}/pipeline/index.d.ts +1 -2
  240. package/dist/extract/engine/pipeline/index.d.ts.map +1 -0
  241. package/dist/{extraction → extract/engine}/pipeline/index.js +55 -18
  242. package/dist/extract/engine/pipeline/index.js.map +1 -0
  243. package/dist/{extraction → extract/engine}/spi/index.d.ts +17 -1
  244. package/dist/extract/engine/spi/index.d.ts.map +1 -0
  245. package/dist/extract/engine/spi/index.js.map +1 -0
  246. package/dist/extract/engine/ts/ast.d.ts +23 -0
  247. package/dist/extract/engine/ts/ast.d.ts.map +1 -0
  248. package/dist/extract/engine/ts/ast.js +97 -0
  249. package/dist/extract/engine/ts/ast.js.map +1 -0
  250. package/dist/extract/engine/ts/components.d.ts +21 -0
  251. package/dist/extract/engine/ts/components.d.ts.map +1 -0
  252. package/dist/extract/engine/ts/components.js +287 -0
  253. package/dist/extract/engine/ts/components.js.map +1 -0
  254. package/dist/extract/engine/ts/context.d.ts +10 -0
  255. package/dist/extract/engine/ts/context.d.ts.map +1 -0
  256. package/dist/extract/engine/ts/context.js +273 -0
  257. package/dist/extract/engine/ts/context.js.map +1 -0
  258. package/dist/extract/engine/ts/domains.d.ts +8 -0
  259. package/dist/extract/engine/ts/domains.d.ts.map +1 -0
  260. package/dist/extract/engine/ts/domains.js +262 -0
  261. package/dist/extract/engine/ts/domains.js.map +1 -0
  262. package/dist/extract/engine/ts/expressions.d.ts +2 -0
  263. package/dist/extract/engine/ts/expressions.d.ts.map +1 -0
  264. package/dist/extract/engine/ts/expressions.js +2 -0
  265. package/dist/extract/engine/ts/expressions.js.map +1 -0
  266. package/dist/extract/engine/ts/handlers.d.ts +4 -0
  267. package/dist/extract/engine/ts/handlers.d.ts.map +1 -0
  268. package/dist/extract/engine/ts/handlers.js +3 -0
  269. package/dist/extract/engine/ts/handlers.js.map +1 -0
  270. package/dist/extract/engine/ts/ids.d.ts +7 -0
  271. package/dist/extract/engine/ts/ids.d.ts.map +1 -0
  272. package/dist/extract/engine/ts/ids.js +63 -0
  273. package/dist/extract/engine/ts/ids.js.map +1 -0
  274. package/dist/extract/engine/ts/input-transitions.d.ts +5 -0
  275. package/dist/extract/engine/ts/input-transitions.d.ts.map +1 -0
  276. package/dist/extract/engine/ts/input-transitions.js +132 -0
  277. package/dist/extract/engine/ts/input-transitions.js.map +1 -0
  278. package/dist/extract/engine/ts/jsx.d.ts +3 -0
  279. package/dist/extract/engine/ts/jsx.d.ts.map +1 -0
  280. package/dist/extract/engine/ts/jsx.js +3 -0
  281. package/dist/extract/engine/ts/jsx.js.map +1 -0
  282. package/dist/extract/engine/ts/react-source-transitions.d.ts +24 -0
  283. package/dist/extract/engine/ts/react-source-transitions.d.ts.map +1 -0
  284. package/dist/extract/engine/ts/react-source-transitions.js +243 -0
  285. package/dist/extract/engine/ts/react-source-transitions.js.map +1 -0
  286. package/dist/extract/engine/ts/routes.d.ts +9 -0
  287. package/dist/extract/engine/ts/routes.d.ts.map +1 -0
  288. package/dist/extract/engine/ts/routes.js +94 -0
  289. package/dist/extract/engine/ts/routes.js.map +1 -0
  290. package/dist/extract/engine/ts/source.d.ts +3 -0
  291. package/dist/extract/engine/ts/source.d.ts.map +1 -0
  292. package/dist/extract/engine/ts/source.js +5 -0
  293. package/dist/extract/engine/ts/source.js.map +1 -0
  294. package/dist/extract/engine/ts/static-navigation.d.ts +5 -0
  295. package/dist/extract/engine/ts/static-navigation.d.ts.map +1 -0
  296. package/dist/extract/engine/ts/static-navigation.js +425 -0
  297. package/dist/extract/engine/ts/static-navigation.js.map +1 -0
  298. package/dist/extract/engine/ts/transition/async.d.ts +45 -0
  299. package/dist/extract/engine/ts/transition/async.d.ts.map +1 -0
  300. package/dist/extract/engine/ts/transition/async.js +578 -0
  301. package/dist/extract/engine/ts/transition/async.js.map +1 -0
  302. package/dist/extract/engine/ts/transition/component-props.d.ts +26 -0
  303. package/dist/extract/engine/ts/transition/component-props.d.ts.map +1 -0
  304. package/dist/extract/engine/ts/transition/component-props.js +200 -0
  305. package/dist/extract/engine/ts/transition/component-props.js.map +1 -0
  306. package/dist/extract/engine/ts/transition/effects.d.ts +12 -0
  307. package/dist/extract/engine/ts/transition/effects.d.ts.map +1 -0
  308. package/dist/extract/engine/ts/transition/effects.js +139 -0
  309. package/dist/extract/engine/ts/transition/effects.js.map +1 -0
  310. package/dist/extract/engine/ts/transition/expressions.d.ts +34 -0
  311. package/dist/extract/engine/ts/transition/expressions.d.ts.map +1 -0
  312. package/dist/extract/engine/ts/transition/expressions.js +374 -0
  313. package/dist/extract/engine/ts/transition/expressions.js.map +1 -0
  314. package/dist/extract/engine/ts/transition/guards.d.ts +21 -0
  315. package/dist/extract/engine/ts/transition/guards.d.ts.map +1 -0
  316. package/dist/extract/engine/ts/transition/guards.js +258 -0
  317. package/dist/extract/engine/ts/transition/guards.js.map +1 -0
  318. package/dist/extract/engine/ts/transition/handlers.d.ts +32 -0
  319. package/dist/extract/engine/ts/transition/handlers.d.ts.map +1 -0
  320. package/dist/extract/engine/ts/transition/handlers.js +294 -0
  321. package/dist/extract/engine/ts/transition/handlers.js.map +1 -0
  322. package/dist/extract/engine/ts/transition/locals.d.ts +20 -0
  323. package/dist/extract/engine/ts/transition/locals.d.ts.map +1 -0
  324. package/dist/extract/engine/ts/transition/locals.js +123 -0
  325. package/dist/extract/engine/ts/transition/locals.js.map +1 -0
  326. package/dist/extract/engine/ts/transition/navigation.d.ts +21 -0
  327. package/dist/extract/engine/ts/transition/navigation.d.ts.map +1 -0
  328. package/dist/extract/engine/ts/transition/navigation.js +129 -0
  329. package/dist/extract/engine/ts/transition/navigation.js.map +1 -0
  330. package/dist/extract/engine/ts/transition/plugin-calls.d.ts +10 -0
  331. package/dist/extract/engine/ts/transition/plugin-calls.d.ts.map +1 -0
  332. package/dist/extract/engine/ts/transition/plugin-calls.js +114 -0
  333. package/dist/extract/engine/ts/transition/plugin-calls.js.map +1 -0
  334. package/dist/extract/engine/ts/transition/statement-summary.d.ts +34 -0
  335. package/dist/extract/engine/ts/transition/statement-summary.d.ts.map +1 -0
  336. package/dist/extract/engine/ts/transition/statement-summary.js +502 -0
  337. package/dist/extract/engine/ts/transition/statement-summary.js.map +1 -0
  338. package/dist/extract/engine/ts/transition/timers.d.ts +15 -0
  339. package/dist/extract/engine/ts/transition/timers.d.ts.map +1 -0
  340. package/dist/extract/engine/ts/transition/timers.js +109 -0
  341. package/dist/extract/engine/ts/transition/timers.js.map +1 -0
  342. package/dist/extract/engine/ts/transition/ui.d.ts +12 -0
  343. package/dist/extract/engine/ts/transition/ui.d.ts.map +1 -0
  344. package/dist/extract/engine/ts/transition/ui.js +113 -0
  345. package/dist/extract/engine/ts/transition/ui.js.map +1 -0
  346. package/dist/extract/engine/ts/traversal.d.ts +3 -0
  347. package/dist/extract/engine/ts/traversal.d.ts.map +1 -0
  348. package/dist/extract/engine/ts/traversal.js +6 -0
  349. package/dist/extract/engine/ts/traversal.js.map +1 -0
  350. package/dist/extract/engine/ts/types.d.ts +46 -0
  351. package/dist/extract/engine/ts/types.d.ts.map +1 -0
  352. package/dist/extract/engine/ts/types.js +2 -0
  353. package/dist/extract/engine/ts/types.js.map +1 -0
  354. package/dist/extract/index.d.ts +2 -0
  355. package/dist/extract/index.d.ts.map +1 -0
  356. package/dist/extract/index.js +2 -0
  357. package/dist/extract/index.js.map +1 -0
  358. package/dist/extract/sources/jotai/discover.d.ts +3 -0
  359. package/dist/extract/sources/jotai/discover.d.ts.map +1 -0
  360. package/dist/extract/sources/jotai/discover.js +65 -0
  361. package/dist/extract/sources/jotai/discover.js.map +1 -0
  362. package/dist/extract/sources/jotai/domains.d.ts +6 -0
  363. package/dist/extract/sources/jotai/domains.d.ts.map +1 -0
  364. package/dist/extract/sources/jotai/domains.js +283 -0
  365. package/dist/extract/sources/jotai/domains.js.map +1 -0
  366. package/dist/{sources → extract/sources}/jotai/harness.d.ts +2 -2
  367. package/dist/extract/sources/jotai/harness.d.ts.map +1 -0
  368. package/dist/{sources → extract/sources}/jotai/harness.js +1 -1
  369. package/dist/extract/sources/jotai/harness.js.map +1 -0
  370. package/dist/extract/sources/jotai/index.d.ts +4 -0
  371. package/dist/extract/sources/jotai/index.d.ts.map +1 -0
  372. package/dist/extract/sources/jotai/index.js +3 -0
  373. package/dist/extract/sources/jotai/index.js.map +1 -0
  374. package/dist/extract/sources/jotai/plugin.d.ts +4 -0
  375. package/dist/extract/sources/jotai/plugin.d.ts.map +1 -0
  376. package/dist/extract/sources/jotai/plugin.js +19 -0
  377. package/dist/extract/sources/jotai/plugin.js.map +1 -0
  378. package/dist/extract/sources/jotai/transitions.d.ts +15 -0
  379. package/dist/extract/sources/jotai/transitions.d.ts.map +1 -0
  380. package/dist/extract/sources/jotai/transitions.js +44 -0
  381. package/dist/extract/sources/jotai/transitions.js.map +1 -0
  382. package/dist/extract/sources/jotai/writes.d.ts +8 -0
  383. package/dist/extract/sources/jotai/writes.d.ts.map +1 -0
  384. package/dist/extract/sources/jotai/writes.js +173 -0
  385. package/dist/extract/sources/jotai/writes.js.map +1 -0
  386. package/dist/{sources → extract/sources}/router/harness.d.ts +1 -1
  387. package/dist/extract/sources/router/harness.d.ts.map +1 -0
  388. package/dist/{sources → extract/sources}/router/harness.js +6 -2
  389. package/dist/extract/sources/router/harness.js.map +1 -0
  390. package/dist/extract/sources/router/index.d.ts +9 -0
  391. package/dist/extract/sources/router/index.d.ts.map +1 -0
  392. package/dist/extract/sources/router/index.js +22 -0
  393. package/dist/extract/sources/router/index.js.map +1 -0
  394. package/dist/extract/sources/router/navigation.d.ts +5 -0
  395. package/dist/extract/sources/router/navigation.d.ts.map +1 -0
  396. package/dist/extract/sources/router/navigation.js +16 -0
  397. package/dist/extract/sources/router/navigation.js.map +1 -0
  398. package/dist/extract/sources/router/routes.d.ts +4 -0
  399. package/dist/extract/sources/router/routes.d.ts.map +1 -0
  400. package/dist/extract/sources/router/routes.js +28 -0
  401. package/dist/extract/sources/router/routes.js.map +1 -0
  402. package/dist/extract/sources/shared/react-transition-extract.d.ts +13 -0
  403. package/dist/extract/sources/shared/react-transition-extract.d.ts.map +1 -0
  404. package/dist/extract/sources/shared/react-transition-extract.js +22 -0
  405. package/dist/extract/sources/shared/react-transition-extract.js.map +1 -0
  406. package/dist/extract/sources/swr/discover.d.ts +11 -0
  407. package/dist/extract/sources/swr/discover.d.ts.map +1 -0
  408. package/dist/extract/sources/swr/discover.js +175 -0
  409. package/dist/extract/sources/swr/discover.js.map +1 -0
  410. package/dist/extract/sources/swr/domains.d.ts +5 -0
  411. package/dist/extract/sources/swr/domains.d.ts.map +1 -0
  412. package/dist/extract/sources/swr/domains.js +99 -0
  413. package/dist/extract/sources/swr/domains.js.map +1 -0
  414. package/dist/{sources → extract/sources}/swr/harness.d.ts +2 -2
  415. package/dist/extract/sources/swr/harness.d.ts.map +1 -0
  416. package/dist/{sources → extract/sources}/swr/harness.js +3 -1
  417. package/dist/extract/sources/swr/harness.js.map +1 -0
  418. package/dist/extract/sources/swr/index.d.ts +6 -0
  419. package/dist/extract/sources/swr/index.d.ts.map +1 -0
  420. package/dist/extract/sources/swr/index.js +4 -0
  421. package/dist/extract/sources/swr/index.js.map +1 -0
  422. package/dist/extract/sources/swr/plugin.d.ts +4 -0
  423. package/dist/extract/sources/swr/plugin.d.ts.map +1 -0
  424. package/dist/extract/sources/swr/plugin.js +21 -0
  425. package/dist/extract/sources/swr/plugin.js.map +1 -0
  426. package/dist/{sources/swr/index.d.ts → extract/sources/swr/template.d.ts} +4 -6
  427. package/dist/extract/sources/swr/template.d.ts.map +1 -0
  428. package/dist/extract/sources/swr/template.js +331 -0
  429. package/dist/extract/sources/swr/template.js.map +1 -0
  430. package/dist/extract/sources/swr/transitions.d.ts +15 -0
  431. package/dist/extract/sources/swr/transitions.d.ts.map +1 -0
  432. package/dist/extract/sources/swr/transitions.js +43 -0
  433. package/dist/extract/sources/swr/transitions.js.map +1 -0
  434. package/dist/extract/sources/swr/writes.d.ts +3 -0
  435. package/dist/extract/sources/swr/writes.d.ts.map +1 -0
  436. package/dist/extract/sources/swr/writes.js +54 -0
  437. package/dist/extract/sources/swr/writes.js.map +1 -0
  438. package/dist/{sources → extract/sources}/use-state/harness.d.ts +2 -2
  439. package/dist/extract/sources/use-state/harness.d.ts.map +1 -0
  440. package/dist/{sources → extract/sources}/use-state/harness.js +1 -1
  441. package/dist/extract/sources/use-state/harness.js.map +1 -0
  442. package/dist/extract/sources/use-state/index.d.ts +4 -0
  443. package/dist/extract/sources/use-state/index.d.ts.map +1 -0
  444. package/dist/{sources → extract/sources}/use-state/index.js +84 -31
  445. package/dist/extract/sources/use-state/index.js.map +1 -0
  446. package/dist/extract/sources/use-state/transitions.d.ts +4 -0
  447. package/dist/extract/sources/use-state/transitions.d.ts.map +1 -0
  448. package/dist/extract/sources/use-state/transitions.js +27 -0
  449. package/dist/extract/sources/use-state/transitions.js.map +1 -0
  450. package/dist/extract/sources/use-state/types.d.ts +67 -0
  451. package/dist/extract/sources/use-state/types.d.ts.map +1 -0
  452. package/dist/extract/sources/use-state/types.js +2 -0
  453. package/dist/extract/sources/use-state/types.js.map +1 -0
  454. package/package.json +85 -71
  455. package/dist/checker/encode/index.d.ts +0 -2
  456. package/dist/checker/encode/index.d.ts.map +0 -1
  457. package/dist/checker/encode/index.js +0 -2
  458. package/dist/checker/encode/index.js.map +0 -1
  459. package/dist/checker/index.d.ts +0 -6
  460. package/dist/checker/index.d.ts.map +0 -1
  461. package/dist/checker/index.js +0 -6
  462. package/dist/checker/index.js.map +0 -1
  463. package/dist/checker/monitors/index.d.ts +0 -2
  464. package/dist/checker/monitors/index.d.ts.map +0 -1
  465. package/dist/checker/monitors/index.js.map +0 -1
  466. package/dist/checker/search/eval.d.ts +0 -16
  467. package/dist/checker/search/eval.d.ts.map +0 -1
  468. package/dist/checker/search/eval.js +0 -308
  469. package/dist/checker/search/eval.js.map +0 -1
  470. package/dist/checker/search/index.d.ts.map +0 -1
  471. package/dist/checker/search/index.js +0 -556
  472. package/dist/checker/search/index.js.map +0 -1
  473. package/dist/checker/slicing/index.d.ts +0 -2
  474. package/dist/checker/slicing/index.d.ts.map +0 -1
  475. package/dist/checker/slicing/index.js +0 -2
  476. package/dist/checker/slicing/index.js.map +0 -1
  477. package/dist/checker/traces/index.d.ts +0 -2
  478. package/dist/checker/traces/index.d.ts.map +0 -1
  479. package/dist/checker/traces/index.js +0 -2
  480. package/dist/checker/traces/index.js.map +0 -1
  481. package/dist/extraction/index.d.ts +0 -34
  482. package/dist/extraction/index.d.ts.map +0 -1
  483. package/dist/extraction/index.js +0 -2982
  484. package/dist/extraction/index.js.map +0 -1
  485. package/dist/extraction/pipeline/index.d.ts.map +0 -1
  486. package/dist/extraction/pipeline/index.js.map +0 -1
  487. package/dist/extraction/spi/index.d.ts.map +0 -1
  488. package/dist/extraction/spi/index.js +0 -2
  489. package/dist/extraction/spi/index.js.map +0 -1
  490. package/dist/harness/index.d.ts.map +0 -1
  491. package/dist/harness/index.js.map +0 -1
  492. package/dist/kernel/artifacts/index.d.ts.map +0 -1
  493. package/dist/kernel/artifacts/index.js.map +0 -1
  494. package/dist/kernel/index.d.ts.map +0 -1
  495. package/dist/kernel/index.js.map +0 -1
  496. package/dist/kernel/ir/canonical.d.ts.map +0 -1
  497. package/dist/kernel/ir/canonical.js.map +0 -1
  498. package/dist/kernel/ir/domains.d.ts.map +0 -1
  499. package/dist/kernel/ir/domains.js.map +0 -1
  500. package/dist/kernel/ir/types.d.ts.map +0 -1
  501. package/dist/kernel/ir/validator.d.ts.map +0 -1
  502. package/dist/kernel/ir/validator.js.map +0 -1
  503. package/dist/kernel/overlay/index.d.ts.map +0 -1
  504. package/dist/kernel/overlay/index.js.map +0 -1
  505. package/dist/kernel/props/index.d.ts.map +0 -1
  506. package/dist/kernel/props/index.js.map +0 -1
  507. package/dist/kernel/trace/types.d.ts.map +0 -1
  508. package/dist/modality/check.d.ts +0 -3
  509. package/dist/modality/check.d.ts.map +0 -1
  510. package/dist/modality/check.js +0 -2
  511. package/dist/modality/check.js.map +0 -1
  512. package/dist/modality/ci.d.ts.map +0 -1
  513. package/dist/modality/ci.js.map +0 -1
  514. package/dist/modality/cli.js.map +0 -1
  515. package/dist/modality/codegen/model.d.ts +0 -3
  516. package/dist/modality/codegen/model.d.ts.map +0 -1
  517. package/dist/modality/codegen/model.js.map +0 -1
  518. package/dist/modality/codegen/replay-test.d.ts.map +0 -1
  519. package/dist/modality/codegen/replay-test.js.map +0 -1
  520. package/dist/modality/conform.d.ts +0 -3
  521. package/dist/modality/conform.d.ts.map +0 -1
  522. package/dist/modality/conform.js +0 -2
  523. package/dist/modality/conform.js.map +0 -1
  524. package/dist/modality/export-tla.d.ts +0 -3
  525. package/dist/modality/export-tla.d.ts.map +0 -1
  526. package/dist/modality/export-tla.js +0 -2
  527. package/dist/modality/export-tla.js.map +0 -1
  528. package/dist/modality/extract.d.ts.map +0 -1
  529. package/dist/modality/extract.js.map +0 -1
  530. package/dist/modality/features/check/command.d.ts.map +0 -1
  531. package/dist/modality/features/check/command.js.map +0 -1
  532. package/dist/modality/features/check/index.d.ts +0 -3
  533. package/dist/modality/features/check/index.d.ts.map +0 -1
  534. package/dist/modality/features/check/index.js +0 -2
  535. package/dist/modality/features/check/index.js.map +0 -1
  536. package/dist/modality/features/ci/command.d.ts.map +0 -1
  537. package/dist/modality/features/ci/command.js.map +0 -1
  538. package/dist/modality/features/ci/index.d.ts.map +0 -1
  539. package/dist/modality/features/ci/index.js.map +0 -1
  540. package/dist/modality/features/conform/command.d.ts.map +0 -1
  541. package/dist/modality/features/conform/command.js.map +0 -1
  542. package/dist/modality/features/conform/index.d.ts.map +0 -1
  543. package/dist/modality/features/conform/index.js.map +0 -1
  544. package/dist/modality/features/export/command.d.ts.map +0 -1
  545. package/dist/modality/features/export/command.js.map +0 -1
  546. package/dist/modality/features/export/index.d.ts.map +0 -1
  547. package/dist/modality/features/export/index.js +0 -2
  548. package/dist/modality/features/export/index.js.map +0 -1
  549. package/dist/modality/features/extract/command.d.ts.map +0 -1
  550. package/dist/modality/features/extract/command.js.map +0 -1
  551. package/dist/modality/features/extract/index.d.ts.map +0 -1
  552. package/dist/modality/features/extract/index.js.map +0 -1
  553. package/dist/modality/features/replay/command.d.ts.map +0 -1
  554. package/dist/modality/features/replay/command.js.map +0 -1
  555. package/dist/modality/features/replay/index.d.ts.map +0 -1
  556. package/dist/modality/features/replay/index.js.map +0 -1
  557. package/dist/modality/overlay.d.ts.map +0 -1
  558. package/dist/modality/overlay.js.map +0 -1
  559. package/dist/modality/registry/index.d.ts.map +0 -1
  560. package/dist/modality/registry/index.js.map +0 -1
  561. package/dist/modality/replay.d.ts +0 -3
  562. package/dist/modality/replay.d.ts.map +0 -1
  563. package/dist/modality/replay.js.map +0 -1
  564. package/dist/runtime/index.d.ts.map +0 -1
  565. package/dist/runtime/index.js.map +0 -1
  566. package/dist/sources/jotai/harness.d.ts.map +0 -1
  567. package/dist/sources/jotai/harness.js.map +0 -1
  568. package/dist/sources/jotai/index.d.ts +0 -11
  569. package/dist/sources/jotai/index.d.ts.map +0 -1
  570. package/dist/sources/jotai/index.js +0 -432
  571. package/dist/sources/jotai/index.js.map +0 -1
  572. package/dist/sources/router/harness.d.ts.map +0 -1
  573. package/dist/sources/router/harness.js.map +0 -1
  574. package/dist/sources/router/index.d.ts +0 -15
  575. package/dist/sources/router/index.d.ts.map +0 -1
  576. package/dist/sources/router/index.js +0 -41
  577. package/dist/sources/router/index.js.map +0 -1
  578. package/dist/sources/swr/harness.d.ts.map +0 -1
  579. package/dist/sources/swr/harness.js.map +0 -1
  580. package/dist/sources/swr/index.d.ts.map +0 -1
  581. package/dist/sources/swr/index.js +0 -528
  582. package/dist/sources/swr/index.js.map +0 -1
  583. package/dist/sources/use-state/harness.d.ts.map +0 -1
  584. package/dist/sources/use-state/harness.js.map +0 -1
  585. package/dist/sources/use-state/index.d.ts +0 -9
  586. package/dist/sources/use-state/index.d.ts.map +0 -1
  587. package/dist/sources/use-state/index.js.map +0 -1
  588. /package/dist/{kernel/ir → check}/types.js +0 -0
  589. /package/dist/{modality → cli}/ci.d.ts +0 -0
  590. /package/dist/{modality → cli}/ci.js +0 -0
  591. /package/dist/{modality → cli}/cli.d.ts +0 -0
  592. /package/dist/{modality → cli}/extract.js +0 -0
  593. /package/dist/{modality → cli}/features/ci/command.d.ts +0 -0
  594. /package/dist/{modality → cli}/features/ci/index.d.ts +0 -0
  595. /package/dist/{modality → cli}/features/ci/index.js +0 -0
  596. /package/dist/{modality → cli}/features/conform/index.d.ts +0 -0
  597. /package/dist/{modality → cli}/features/conform/index.js +0 -0
  598. /package/dist/{modality → cli}/features/extract/index.js +0 -0
  599. /package/dist/{modality → cli}/features/replay/index.d.ts +0 -0
  600. /package/dist/{modality → cli}/features/replay/index.js +0 -0
  601. /package/dist/{modality → cli}/replay.js +0 -0
  602. /package/dist/{kernel → core}/artifacts/index.d.ts +0 -0
  603. /package/dist/{kernel → core}/index.d.ts +0 -0
  604. /package/dist/{kernel → core}/index.js +0 -0
  605. /package/dist/{kernel → core}/ir/canonical.d.ts +0 -0
  606. /package/dist/{kernel → core}/ir/domains.d.ts +0 -0
  607. /package/dist/{kernel → core}/ir/types.d.ts +0 -0
  608. /package/dist/{kernel/report → core/ir}/types.js +0 -0
  609. /package/dist/{kernel → core}/ir/validator.d.ts +0 -0
  610. /package/dist/{kernel → core}/overlay/index.d.ts +0 -0
  611. /package/dist/{kernel → core}/props/index.d.ts +0 -0
  612. /package/dist/{kernel → core}/report/types.d.ts +0 -0
  613. /package/dist/{kernel/trace → core/report}/types.js +0 -0
  614. /package/dist/{kernel → core}/trace/types.d.ts +0 -0
  615. /package/dist/{checker/monitors → extract/engine/spi}/index.js +0 -0
@@ -1,71 +1,115 @@
1
1
  import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
2
2
  import { createHash } from "node:crypto";
3
- import { dirname, join, parse, resolve } from "node:path";
3
+ import { dirname, extname, join, parse, resolve } from "node:path";
4
4
  import { pathToFileURL } from "node:url";
5
5
  import * as ts from "typescript";
6
- import { extractUseStateSkeleton, runExtractionPipeline } from "modality-ts/extraction";
7
- import { canonicalJson, parseModelArtifact } from "modality-ts/kernel";
8
- import { routeVars as defaultRouteVars } from "modality-ts/source-router";
6
+ import { runExtractionPipeline } from "modality-ts/extract";
7
+ import { canonicalJson, parseModelArtifact, } from "modality-ts/core";
8
+ import { routerSource } from "modality-ts/extract/sources/router";
9
9
  import { emitAppModel } from "../../codegen/model.js";
10
10
  import { loadAndApplyOverlay, loadOverlaySpec } from "../../overlay.js";
11
11
  import { createBuiltinModalityRegistry } from "../../registry/index.js";
12
12
  export async function runExtractCommand(options) {
13
- const project = await loadExtractionProject(options.sourcePath);
14
- const config = await loadModalityConfig(options.configPath ?? await findNearestConfig(project.configStartDir));
13
+ const sourcePaths = normalizedSourcePaths(options);
14
+ const project = await loadExtractionProject(sourcePaths);
15
+ const config = await loadModalityConfig(options.configPath ?? (await findNearestConfig(project.configStartDir)));
15
16
  const route = options.route ?? config.route ?? "/";
16
17
  const appModelPath = options.appModelPath ?? `${dirname(options.modelPath)}/app.model.ts`;
17
- const packageJsonPath = options.packageJsonPath ?? config.packageJsonPath ?? await findNearestPackageJson(project.configStartDir);
18
+ const packageJsonPath = options.packageJsonPath ??
19
+ config.packageJsonPath ??
20
+ (await findNearestPackageJson(project.configStartDir));
18
21
  const dependencies = await readPackageDependencies(packageJsonPath);
19
22
  const registry = createBuiltinModalityRegistry({
20
23
  dependencies,
21
- disabledPlugins: [...(config.disabledPlugins ?? []), ...(options.disabledPlugins ?? [])],
22
- extraSourcePlugins: [...(config.plugins ?? []), ...(options.sourcePlugins ?? [])],
23
- routerPlugin: options.routerPlugin ?? config.routerPlugin
24
+ disabledPlugins: [
25
+ ...(config.disabledPlugins ?? []),
26
+ ...(options.disabledPlugins ?? []),
27
+ ],
28
+ extraSourcePlugins: [
29
+ ...(config.plugins ?? []),
30
+ ...(options.sourcePlugins ?? []),
31
+ ],
32
+ routerPlugin: options.routerPlugin ?? config.routerPlugin,
24
33
  });
25
- const effectApis = uniqueStrings([...(config.effectApis ?? []), ...(options.effectApis ?? []), ...project.effectApis]);
26
- const bounds = { maxDepth: 12, maxPending: 3, maxInternalSteps: 16, ...(config.bounds ?? {}), ...(options.bounds ?? {}) };
34
+ const effectApis = uniqueStrings([
35
+ ...(config.effectApis ?? []),
36
+ ...(options.effectApis ?? []),
37
+ ...project.effectApis,
38
+ ]);
39
+ const bounds = {
40
+ maxDepth: 12,
41
+ maxPending: 3,
42
+ maxInternalSteps: 16,
43
+ ...(config.bounds ?? {}),
44
+ ...(options.bounds ?? {}),
45
+ };
27
46
  const pipeline = runExtractionPipeline({
28
47
  sourceText: project.sourceText,
29
48
  fileName: project.entryFile,
30
49
  route,
50
+ routePatterns: project.routes,
31
51
  effectApis,
32
52
  sourcePlugins: registry.sourcePlugins,
33
53
  routerPlugin: registry.routerPlugin,
34
- extractHandlers: (sourceText, handlerOptions) => extractUseStateSkeleton(sourceText, { ...handlerOptions, routePatterns: project.routes })
35
54
  });
36
55
  const transitions = [...pipeline.transitions];
37
- const discoveredRoutes = uniqueStrings([route, ...project.routes, ...transitionNavigatedRoutes(transitions)]);
56
+ const discoveredRoutes = uniqueStrings([
57
+ route,
58
+ ...project.routes,
59
+ ...transitionNavigatedRoutes(transitions),
60
+ ]);
61
+ const defaultRouter = routerSource();
38
62
  const routeVars = registry.routerPlugin
39
- ? registry.routerPlugin.routeVars(discoveredRoutes, { route, bounds: { maxHistory: 4 } })
40
- : defaultRouteVars(discoveredRoutes, { route, bounds: { maxHistory: 4 } });
63
+ ? registry.routerPlugin.routeVars(discoveredRoutes, {
64
+ route,
65
+ bounds: { maxHistory: 4 },
66
+ })
67
+ : defaultRouter.routeVars(discoveredRoutes, {
68
+ route,
69
+ bounds: { maxHistory: 4 },
70
+ });
41
71
  const templateVars = pipeline.templateFragments.flatMap((fragment) => fragment.vars);
42
72
  const stateVars = refineAssignedLiteralDomains([...pipeline.stateVars, ...templateVars], transitions);
43
73
  const extractedModel = {
44
74
  schemaVersion: 1,
45
75
  id: "extracted-model",
46
76
  bounds,
47
- metadata: { sourceHashes: sourceHashes(project.sources), plugins: pluginProvenance(pipeline.plugins) },
48
- vars: [...routeVars, ...pendingVars(effectApis, transitions, [...routeVars, ...stateVars], bounds.maxPending), ...stateVars],
49
- transitions
77
+ metadata: {
78
+ sourceHashes: sourceHashes(project.sources),
79
+ plugins: pluginProvenance(pipeline.plugins),
80
+ },
81
+ vars: [
82
+ ...routeVars,
83
+ ...pendingVars(effectApis, transitions, [...routeVars, ...stateVars], bounds.maxPending),
84
+ ...stateVars,
85
+ ],
86
+ transitions,
50
87
  };
51
- const overlaySpec = options.explainDrift && options.overlayPath ? await readOverlaySpec(extractedModel, options.overlayPath) : undefined;
52
- const driftLines = overlaySpec ? explainOverlayDrift(extractedModel, overlaySpec) : [];
88
+ const overlaySpec = options.explainDrift && options.overlayPath
89
+ ? await readOverlaySpec(extractedModel, options.overlayPath)
90
+ : undefined;
91
+ const driftLines = overlaySpec
92
+ ? explainOverlayDrift(extractedModel, overlaySpec)
93
+ : [];
53
94
  const overlay = await loadAndApplyOverlay(extractedModel, options.overlayPath);
54
95
  if (overlay.errors.length > 0) {
55
- throw new Error([`Overlay merge failed: ${overlay.errors.join("; ")}`, ...driftLines].join("\n"));
96
+ throw new Error([
97
+ `Overlay merge failed: ${overlay.errors.join("; ")}`,
98
+ ...driftLines,
99
+ ].join("\n"));
56
100
  }
57
101
  const warnings = [
58
102
  ...pipeline.warnings,
59
103
  ...overlay.warnings,
60
- ...pluginConformanceWarnings(registry.sourcePlugins, dependencies)
104
+ ...pluginConformanceWarnings(registry.sourcePlugins, dependencies),
61
105
  ];
62
106
  const extractionCaveats = createExtractionCaveats(warnings);
63
107
  const model = {
64
108
  ...overlay.model,
65
109
  metadata: {
66
110
  ...overlay.model.metadata,
67
- extractionCaveats
68
- }
111
+ extractionCaveats,
112
+ },
69
113
  };
70
114
  const report = createExtractionReport(project.sourceFiles, model, warnings, overlay.ignoredVars, options.now ?? new Date());
71
115
  await mkdir(dirname(options.modelPath), { recursive: true });
@@ -88,15 +132,33 @@ export async function runExtractCommand(options) {
88
132
  `model=${options.modelPath}`,
89
133
  `appModel=${appModelPath}`,
90
134
  ...(options.overlayPath ? [`overlay=${options.overlayPath}`] : []),
91
- ...(options.explainDrift ? (driftLines.length > 0 ? driftLines : ["overlay-drift=none"]) : []),
135
+ ...(options.explainDrift
136
+ ? driftLines.length > 0
137
+ ? driftLines
138
+ : ["overlay-drift=none"]
139
+ : []),
92
140
  ...(options.configPath ? [`config=${options.configPath}`] : []),
93
- ...(options.expectModelPath ? [`expectedModel=${options.expectModelPath}`] : []),
94
- ...(options.reportPath ? [`report=${options.reportPath}`] : [])
95
- ]
141
+ ...(options.expectModelPath
142
+ ? [`expectedModel=${options.expectModelPath}`]
143
+ : []),
144
+ ...(options.reportPath ? [`report=${options.reportPath}`] : []),
145
+ ],
96
146
  };
97
147
  }
98
- async function loadExtractionProject(sourcePath) {
99
- const resolved = resolve(sourcePath);
148
+ function normalizedSourcePaths(options) {
149
+ const sourcePaths = options.sourcePaths ?? [];
150
+ const paths = [
151
+ ...sourcePaths,
152
+ ...(options.sourcePath ? [options.sourcePath] : []),
153
+ ];
154
+ if (paths.length === 0)
155
+ throw new Error("Missing source.tsx path");
156
+ return uniqueStrings(paths.map((path) => resolve(path)));
157
+ }
158
+ async function loadExtractionProject(sourcePaths) {
159
+ if (sourcePaths.length > 1)
160
+ return loadMultiFileExtractionProject(sourcePaths);
161
+ const resolved = sourcePaths[0];
100
162
  const info = await stat(resolved);
101
163
  if (!info.isDirectory()) {
102
164
  const source = await readFile(resolved, "utf8");
@@ -109,7 +171,7 @@ async function loadExtractionProject(sourcePath) {
109
171
  sources: imported.sources,
110
172
  routes: [],
111
173
  effectApis: fetchEffectApis(imported.sources.map((entry) => entry.text).join("\n")),
112
- configStartDir: dirname(resolved)
174
+ configStartDir: dirname(resolved),
113
175
  };
114
176
  }
115
177
  const routesPath = join(resolved, "app", "routes.ts");
@@ -117,8 +179,11 @@ async function loadExtractionProject(sourcePath) {
117
179
  const rootPath = join(resolved, "app", "root.tsx");
118
180
  const roots = await existingFiles([rootPath]);
119
181
  const entries = [
120
- ...await Promise.all(roots.map(async (path) => ({ path, text: await readFile(path, "utf8") }))),
121
- ...await Promise.all(routeEntries.map(async (entry) => ({ path: resolve(dirname(routesPath), entry.file), text: await readFile(resolve(dirname(routesPath), entry.file), "utf8") })))
182
+ ...(await Promise.all(roots.map(async (path) => ({ path, text: await readFile(path, "utf8") })))),
183
+ ...(await Promise.all(routeEntries.map(async (entry) => ({
184
+ path: resolve(dirname(routesPath), entry.file),
185
+ text: await readFile(resolve(dirname(routesPath), entry.file), "utf8"),
186
+ })))),
122
187
  ];
123
188
  const tsconfig = await readTsConfigResolution(resolved);
124
189
  const imported = await sourceWithLocalImports(entries, tsconfig);
@@ -130,7 +195,30 @@ async function loadExtractionProject(sourcePath) {
130
195
  sources: imported.sources,
131
196
  routes: uniqueStrings(routeEntries.map((entry) => entry.pattern)),
132
197
  effectApis: fetchEffectApis(sourceText),
133
- configStartDir: resolved
198
+ configStartDir: resolved,
199
+ };
200
+ }
201
+ async function loadMultiFileExtractionProject(sourcePaths) {
202
+ const projects = await Promise.all(sourcePaths.map((sourcePath) => loadExtractionProject([sourcePath])));
203
+ const sourcesByPath = new Map();
204
+ for (const project of projects) {
205
+ for (const source of project.sources) {
206
+ sourcesByPath.set(source.path, source);
207
+ }
208
+ }
209
+ const sources = [...sourcesByPath.values()].sort((left, right) => left.path.localeCompare(right.path));
210
+ const sourceText = sources.map((entry) => entry.text).join("\n");
211
+ return {
212
+ entryFile: projects.map((project) => project.entryFile).join(","),
213
+ sourceText,
214
+ sourceFiles: sources.map((entry) => entry.path),
215
+ sources,
216
+ routes: uniqueStrings(projects.flatMap((project) => project.routes)),
217
+ effectApis: uniqueStrings([
218
+ ...projects.flatMap((project) => project.effectApis),
219
+ ...fetchEffectApis(sourceText),
220
+ ]),
221
+ configStartDir: commonAncestor(projects.map((project) => project.configStartDir)),
134
222
  };
135
223
  }
136
224
  async function sourceWithLocalImports(entries, tsconfig) {
@@ -156,7 +244,9 @@ function localImportSpecifiers(source) {
156
244
  const specs = [];
157
245
  const parsed = tsCreateSourceFile(source);
158
246
  const visit = (node) => {
159
- if (tsIsImportDeclaration(node) && tsIsStringLiteral(node.moduleSpecifier) && isLocalImportSpecifier(node.moduleSpecifier.text)) {
247
+ if (tsIsImportDeclaration(node) &&
248
+ tsIsStringLiteral(node.moduleSpecifier) &&
249
+ isLocalImportSpecifier(node.moduleSpecifier.text)) {
160
250
  specs.push(node.moduleSpecifier.text);
161
251
  }
162
252
  tsForEachChild(node, visit);
@@ -194,7 +284,8 @@ function importBases(baseDir, specifier, tsconfig) {
194
284
  if (specifier.startsWith("."))
195
285
  return [resolve(baseDir, specifier)];
196
286
  const matches = tsconfig.paths.flatMap((entry) => {
197
- if (!specifier.startsWith(entry.prefix) || !specifier.endsWith(entry.suffix))
287
+ if (!specifier.startsWith(entry.prefix) ||
288
+ !specifier.endsWith(entry.suffix))
198
289
  return [];
199
290
  const star = specifier.slice(entry.prefix.length, specifier.length - entry.suffix.length);
200
291
  return entry.targets.map((target) => resolve(target.replace("*", star)));
@@ -206,7 +297,14 @@ function importBases(baseDir, specifier, tsconfig) {
206
297
  async function firstExistingModulePath(base) {
207
298
  const candidates = /\.[cm]?[jt]sx?$/.test(base)
208
299
  ? [base]
209
- : [`${base}.ts`, `${base}.tsx`, `${base}.mts`, `${base}.cts`, join(base, "index.ts"), join(base, "index.tsx")];
300
+ : [
301
+ `${base}.ts`,
302
+ `${base}.tsx`,
303
+ `${base}.mts`,
304
+ `${base}.cts`,
305
+ join(base, "index.ts"),
306
+ join(base, "index.tsx"),
307
+ ];
210
308
  for (const candidate of candidates) {
211
309
  try {
212
310
  const candidateStat = await stat(candidate);
@@ -226,12 +324,18 @@ async function readTsConfigResolution(startDir) {
226
324
  return { paths: [] };
227
325
  const parsed = JSON.parse(await readFile(tsconfigPath, "utf8"));
228
326
  const configDir = dirname(tsconfigPath);
229
- const baseUrl = parsed.compilerOptions?.baseUrl ? resolve(configDir, parsed.compilerOptions.baseUrl) : configDir;
327
+ const baseUrl = parsed.compilerOptions?.baseUrl
328
+ ? resolve(configDir, parsed.compilerOptions.baseUrl)
329
+ : configDir;
230
330
  const paths = Object.entries(parsed.compilerOptions?.paths ?? {}).map(([key, targets]) => {
231
331
  const star = key.indexOf("*");
232
332
  const prefix = star >= 0 ? key.slice(0, star) : key;
233
333
  const suffix = star >= 0 ? key.slice(star + 1) : "";
234
- return { prefix, suffix, targets: targets.map((target) => resolve(baseUrl, target)) };
334
+ return {
335
+ prefix,
336
+ suffix,
337
+ targets: targets.map((target) => resolve(baseUrl, target)),
338
+ };
235
339
  });
236
340
  return { baseUrl, paths };
237
341
  }
@@ -273,11 +377,17 @@ function parseReactRouterRoutes(source) {
273
377
  const parsed = tsCreateSourceFile(source);
274
378
  const visit = (node) => {
275
379
  if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
276
- if (node.expression.text === "index" && ts.isStringLiteral(node.arguments[0])) {
380
+ if (node.expression.text === "index" &&
381
+ ts.isStringLiteral(node.arguments[0])) {
277
382
  routes.push({ pattern: "/", file: node.arguments[0].text });
278
383
  }
279
- if (node.expression.text === "route" && ts.isStringLiteral(node.arguments[0]) && ts.isStringLiteral(node.arguments[1])) {
280
- routes.push({ pattern: reactRouterPathPattern(node.arguments[0].text), file: node.arguments[1].text });
384
+ if (node.expression.text === "route" &&
385
+ ts.isStringLiteral(node.arguments[0]) &&
386
+ ts.isStringLiteral(node.arguments[1])) {
387
+ routes.push({
388
+ pattern: reactRouterPathPattern(node.arguments[0].text),
389
+ file: node.arguments[1].text,
390
+ });
281
391
  }
282
392
  }
283
393
  tsForEachChild(node, visit);
@@ -296,7 +406,9 @@ function fetchEffectApis(sourceText) {
296
406
  const source = tsCreateSourceFile(sourceText);
297
407
  const ops = new Set();
298
408
  const visit = (node) => {
299
- if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "fetch") {
409
+ if (ts.isCallExpression(node) &&
410
+ ts.isIdentifier(node.expression) &&
411
+ node.expression.text === "fetch") {
300
412
  const op = fetchOpId(node);
301
413
  if (op)
302
414
  ops.add(op);
@@ -317,12 +429,13 @@ function fetchOpId(call) {
317
429
  return `${method} ${path}`;
318
430
  }
319
431
  function fetchPathValue(expression) {
320
- if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression))
432
+ if (ts.isStringLiteral(expression) ||
433
+ ts.isNoSubstitutionTemplateLiteral(expression))
321
434
  return normalizeFetchPath(expression.text);
322
435
  if (ts.isTemplateExpression(expression)) {
323
436
  let value = expression.head.text;
324
437
  for (const span of expression.templateSpans)
325
- value += ":id" + span.literal.text;
438
+ value += `:id${span.literal.text}`;
326
439
  return normalizeFetchPath(value);
327
440
  }
328
441
  return undefined;
@@ -333,15 +446,21 @@ function normalizeFetchPath(path) {
333
446
  function fetchMethodValue(expression) {
334
447
  if (!expression || !ts.isObjectLiteralExpression(expression))
335
448
  return undefined;
336
- const method = expression.properties.find((property) => ts.isPropertyAssignment(property) && propertyName(property.name) === "method");
449
+ const method = expression.properties.find((property) => ts.isPropertyAssignment(property) &&
450
+ propertyName(property.name) === "method");
337
451
  const value = method ? literalString(method.initializer) : undefined;
338
452
  return value?.toUpperCase();
339
453
  }
340
454
  function literalString(expression) {
341
- return ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression) ? expression.text : undefined;
455
+ return ts.isStringLiteral(expression) ||
456
+ ts.isNoSubstitutionTemplateLiteral(expression)
457
+ ? expression.text
458
+ : undefined;
342
459
  }
343
460
  function propertyName(name) {
344
- if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
461
+ if (ts.isIdentifier(name) ||
462
+ ts.isStringLiteral(name) ||
463
+ ts.isNumericLiteral(name))
345
464
  return name.text;
346
465
  return undefined;
347
466
  }
@@ -351,12 +470,33 @@ async function readOverlaySpec(model, overlayPath) {
351
470
  async function loadModalityConfig(configPath) {
352
471
  if (!configPath)
353
472
  return {};
354
- const module = (await import(`${pathToFileURL(configPath).href}?t=${Date.now()}`));
473
+ const module = (await importConfigModule(configPath));
355
474
  const exported = module.default ?? module.config ?? {};
356
475
  return typeof exported === "function" ? await exported() : exported;
357
476
  }
477
+ async function importConfigModule(configPath) {
478
+ if (extname(configPath) === ".ts" || extname(configPath) === ".mts") {
479
+ const source = await readFile(configPath, "utf8");
480
+ const transpiled = ts.transpileModule(source, {
481
+ compilerOptions: {
482
+ module: ts.ModuleKind.ESNext,
483
+ target: ts.ScriptTarget.ES2022,
484
+ importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove,
485
+ },
486
+ }).outputText;
487
+ const encoded = Buffer.from(transpiled).toString("base64");
488
+ const url = `data:text/javascript;base64,${encoded}`;
489
+ return import(url);
490
+ }
491
+ return import(`${pathToFileURL(configPath).href}?t=${Date.now()}`);
492
+ }
358
493
  async function findNearestConfig(startDir) {
359
- const names = ["modality.config.ts", "modality.config.mts", "modality.config.js", "modality.config.mjs"];
494
+ const names = [
495
+ "modality.config.ts",
496
+ "modality.config.mts",
497
+ "modality.config.js",
498
+ "modality.config.mjs",
499
+ ];
360
500
  let dir = startDir;
361
501
  while (true) {
362
502
  for (const name of names) {
@@ -379,6 +519,25 @@ async function findNearestConfig(startDir) {
379
519
  function uniqueStrings(values) {
380
520
  return [...new Set(values)].sort();
381
521
  }
522
+ function commonAncestor(paths) {
523
+ if (paths.length === 0)
524
+ return process.cwd();
525
+ const [first, ...rest] = paths.map((path) => resolve(path).split(/[\\/]+/));
526
+ if (!first)
527
+ return process.cwd();
528
+ let length = first.length;
529
+ for (const parts of rest) {
530
+ length = Math.min(length, parts.length);
531
+ for (let index = 0; index < length; index += 1) {
532
+ if (first[index] !== parts[index]) {
533
+ length = index;
534
+ break;
535
+ }
536
+ }
537
+ }
538
+ const prefix = first.slice(0, length).join("/");
539
+ return prefix === "" ? parse(paths[0]).root : prefix;
540
+ }
382
541
  async function findNearestPackageJson(startDir) {
383
542
  let dir = startDir;
384
543
  while (true) {
@@ -404,7 +563,7 @@ async function readPackageDependencies(packageJsonPath) {
404
563
  return {
405
564
  ...(manifest.peerDependencies ?? {}),
406
565
  ...(manifest.devDependencies ?? {}),
407
- ...(manifest.dependencies ?? {})
566
+ ...(manifest.dependencies ?? {}),
408
567
  };
409
568
  }
410
569
  function sha256(value) {
@@ -422,8 +581,12 @@ function createExtractionReport(sourceFiles, model, warnings, ignoredVars, now)
422
581
  const caveats = model.metadata?.extractionCaveats ?? emptyExtractionCaveats();
423
582
  const transitionHandlers = model.transitions.map((transition) => ({
424
583
  id: transition.id,
425
- classification: transition.confidence === "manual" ? "overlay" : transition.confidence,
426
- reasons: transition.confidence === "over-approx" ? overApproxReasons(transition) : []
584
+ classification: transition.confidence === "manual"
585
+ ? "overlay"
586
+ : transition.confidence,
587
+ reasons: transition.confidence === "over-approx"
588
+ ? overApproxReasons(transition)
589
+ : [],
427
590
  }));
428
591
  const transitionIds = new Set(transitionHandlers.map((handler) => handler.id));
429
592
  const unextractableHandlers = warnings
@@ -433,10 +596,11 @@ function createExtractionReport(sourceFiles, model, warnings, ignoredVars, now)
433
596
  .map((handler) => ({
434
597
  id: handler.id,
435
598
  classification: "unextractable",
436
- reasons: [handler.reason]
599
+ reasons: [handler.reason],
437
600
  }));
438
601
  const handlers = [...transitionHandlers, ...unextractableHandlers];
439
- const exactOrOverlay = handlers.filter((handler) => handler.classification === "exact" || handler.classification === "overlay").length;
602
+ const exactOrOverlay = handlers.filter((handler) => handler.classification === "exact" ||
603
+ handler.classification === "overlay").length;
440
604
  const unextractable = handlers.filter((handler) => handler.classification === "unextractable").length;
441
605
  return {
442
606
  schemaVersion: 1,
@@ -451,27 +615,51 @@ function createExtractionReport(sourceFiles, model, warnings, ignoredVars, now)
451
615
  domains: model.vars.map((decl) => ({
452
616
  varId: decl.id,
453
617
  domainKind: decl.domain.kind,
454
- provenance: model.metadata?.domainProvenance?.[decl.id] ?? (decl.origin === "system" ? "system" : decl.origin === "library-template" ? "template" : decl.domain.kind === "tokens" ? "default-token" : "type-derived")
618
+ provenance: model.metadata?.domainProvenance?.[decl.id] ??
619
+ (decl.origin === "system"
620
+ ? "system"
621
+ : decl.origin === "library-template"
622
+ ? "template"
623
+ : decl.domain.kind === "tokens"
624
+ ? "default-token"
625
+ : "type-derived"),
455
626
  })),
456
627
  coverage: {
457
628
  handlersTotal: handlers.length,
458
629
  exactOrOverlay,
459
630
  unextractable,
460
631
  ignoredVars: ignoredVars.length,
461
- percentExactOrOverlay: handlers.length === 0 ? 1 : exactOrOverlay / handlers.length
632
+ percentExactOrOverlay: handlers.length === 0 ? 1 : exactOrOverlay / handlers.length,
462
633
  },
463
- warnings
634
+ warnings,
464
635
  };
465
636
  }
466
637
  function emptyExtractionCaveats() {
467
- return { globalTaints: [], staleReads: [], unhandledRejections: [], unextractableHandlers: [] };
638
+ return {
639
+ globalTaints: [],
640
+ staleReads: [],
641
+ unhandledRejections: [],
642
+ unextractableHandlers: [],
643
+ };
468
644
  }
469
645
  function createExtractionCaveats(warnings) {
470
646
  return {
471
- globalTaints: warnings.map(globalTaintFromWarning).filter(isCaveat).sort(compareCaveats),
472
- staleReads: warnings.map(staleReadFromWarning).filter(isCaveat).sort(compareCaveats),
473
- unhandledRejections: warnings.map(unhandledRejectionFromWarning).filter(isCaveat).sort(compareCaveats),
474
- unextractableHandlers: warnings.map(unextractableHandlerFromWarning).filter(isCaveat).sort(compareCaveats)
647
+ globalTaints: warnings
648
+ .map(globalTaintFromWarning)
649
+ .filter(isCaveat)
650
+ .sort(compareCaveats),
651
+ staleReads: warnings
652
+ .map(staleReadFromWarning)
653
+ .filter(isCaveat)
654
+ .sort(compareCaveats),
655
+ unhandledRejections: warnings
656
+ .map(unhandledRejectionFromWarning)
657
+ .filter(isCaveat)
658
+ .sort(compareCaveats),
659
+ unextractableHandlers: warnings
660
+ .map(unextractableHandlerFromWarning)
661
+ .filter(isCaveat)
662
+ .sort(compareCaveats),
475
663
  };
476
664
  }
477
665
  function globalTaintFromWarning(warning) {
@@ -490,7 +678,7 @@ function isCaveat(value) {
490
678
  return Boolean(value);
491
679
  }
492
680
  function compareCaveats(left, right) {
493
- return left.id.localeCompare(right.id) || left.reason.localeCompare(right.reason);
681
+ return (left.id.localeCompare(right.id) || left.reason.localeCompare(right.reason));
494
682
  }
495
683
  function pluginConformanceWarnings(sourcePlugins, dependencies) {
496
684
  if (!dependencies)
@@ -538,16 +726,21 @@ function pluginProvenance(plugins) {
538
726
  function transitionNavigatedRoutes(transitions) {
539
727
  const routes = new Set();
540
728
  const visit = (effect) => {
541
- if (effect.kind === "navigate" && effect.to?.kind === "lit" && typeof effect.to.value === "string")
729
+ if (effect.kind === "navigate" &&
730
+ effect.to?.kind === "lit" &&
731
+ typeof effect.to.value === "string")
542
732
  routes.add(effect.to.value);
543
- if (effect.kind === "seq")
544
- effect.effects.forEach(visit);
733
+ if (effect.kind === "seq") {
734
+ for (const child of effect.effects)
735
+ visit(child);
736
+ }
545
737
  if (effect.kind === "if") {
546
738
  visit(effect.then);
547
739
  visit(effect.else);
548
740
  }
549
741
  };
550
- transitions.forEach((transition) => visit(transition.effect));
742
+ for (const transition of transitions)
743
+ visit(transition.effect);
551
744
  return [...routes].sort();
552
745
  }
553
746
  function overApproxReasons(transition) {
@@ -561,7 +754,9 @@ function overApproxReasons(transition) {
561
754
  return [...reasons].sort();
562
755
  }
563
756
  function explainOverlayDrift(model, overlay) {
564
- const transitionIds = model.transitions.map((transition) => transition.id).sort();
757
+ const transitionIds = model.transitions
758
+ .map((transition) => transition.id)
759
+ .sort();
565
760
  const varIds = model.vars.map((decl) => decl.id).sort();
566
761
  const lines = [];
567
762
  for (const transition of overlay.transitions ?? []) {
@@ -589,8 +784,12 @@ function formatDrift(kind, id, candidates) {
589
784
  }
590
785
  function nearestCandidates(id, candidates) {
591
786
  return candidates
592
- .map((candidate) => ({ candidate, distance: editDistance(normalizeId(id), normalizeId(candidate)) }))
593
- .sort((left, right) => left.distance - right.distance || left.candidate.localeCompare(right.candidate))
787
+ .map((candidate) => ({
788
+ candidate,
789
+ distance: editDistance(normalizeId(id), normalizeId(candidate)),
790
+ }))
791
+ .sort((left, right) => left.distance - right.distance ||
792
+ left.candidate.localeCompare(right.candidate))
594
793
  .slice(0, 3)
595
794
  .map(({ candidate, distance }) => `${candidate}(${distance})`);
596
795
  }
@@ -661,20 +860,22 @@ function pendingVars(effectApis, transitions = [], vars = [], maxPending = 3) {
661
860
  fields: {
662
861
  opId: { kind: "enum", values: ops },
663
862
  continuation: { kind: "enum", values: continuations },
664
- args: { kind: "record", fields: argFields }
665
- }
863
+ args: { kind: "record", fields: argFields },
864
+ },
666
865
  },
667
- maxLen: maxPending
866
+ maxLen: maxPending,
668
867
  },
669
868
  origin: "system",
670
869
  scope: { kind: "global" },
671
- initial: []
672
- }
870
+ initial: [],
871
+ },
673
872
  ];
674
873
  }
675
874
  function enqueueOps(effect) {
676
875
  if (effect.kind === "enqueue")
677
- return [{ op: effect.op, continuation: effect.continuation, args: effect.args }];
876
+ return [
877
+ { op: effect.op, continuation: effect.continuation, args: effect.args },
878
+ ];
678
879
  if (effect.kind === "seq")
679
880
  return effect.effects.flatMap(enqueueOps);
680
881
  if (effect.kind === "if")
@@ -702,7 +903,9 @@ function refineAssignedLiteralDomains(vars, transitions) {
702
903
  if (decl.origin === "library-template")
703
904
  return decl;
704
905
  const refinement = refinements.get(decl.id);
705
- return refinement ? { ...decl, domain: mergeAssignedDomain(decl.domain, refinement) } : decl;
906
+ return refinement
907
+ ? { ...decl, domain: mergeAssignedDomain(decl.domain, refinement) }
908
+ : decl;
706
909
  });
707
910
  }
708
911
  function mergeAssignedDomain(left, right) {
@@ -725,7 +928,10 @@ function assignedLiteralDomains(effect) {
725
928
  if (effect.kind === "seq")
726
929
  return effect.effects.flatMap(assignedLiteralDomains);
727
930
  if (effect.kind === "if")
728
- return [...assignedLiteralDomains(effect.then), ...assignedLiteralDomains(effect.else)];
931
+ return [
932
+ ...assignedLiteralDomains(effect.then),
933
+ ...assignedLiteralDomains(effect.else),
934
+ ];
729
935
  return [];
730
936
  }
731
937
  function domainForLiteral(value) {
@@ -743,9 +949,16 @@ function mergeArgDomains(left, right) {
743
949
  if (!left)
744
950
  return right;
745
951
  if (left.kind === "enum" && right.kind === "enum")
746
- return { kind: "enum", values: [...new Set([...left.values, ...right.values])].sort() };
952
+ return {
953
+ kind: "enum",
954
+ values: [...new Set([...left.values, ...right.values])].sort(),
955
+ };
747
956
  if (left.kind === "boundedInt" && right.kind === "boundedInt")
748
- return { kind: "boundedInt", min: Math.min(left.min, right.min), max: Math.max(left.max, right.max) };
957
+ return {
958
+ kind: "boundedInt",
959
+ min: Math.min(left.min, right.min),
960
+ max: Math.max(left.max, right.max),
961
+ };
749
962
  if (left.kind === right.kind)
750
963
  return left;
751
964
  return { kind: "tokens", count: 1 };