@owlmeans/server-planning 0.1.18-rc.8 → 0.1.18

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 (438) hide show
  1. package/README.md +92 -19
  2. package/agent-meta/manifest.json +105 -4
  3. package/agent-meta/skills/server-planning/SKILL.md +89 -138
  4. package/agent-meta/skills/server-planning/parts/auxiliary.md +54 -0
  5. package/agent-meta/skills/server-planning/parts/executor.md +82 -0
  6. package/agent-meta/skills/server-planning/parts/schemas.md +26 -0
  7. package/agent-meta/skills/server-planning/parts/serving.md +88 -0
  8. package/agent-meta/skills/server-planning/parts/stores.md +91 -0
  9. package/build/actions/apply-schema-request.d.ts +8 -0
  10. package/build/actions/apply-schema-request.d.ts.map +1 -0
  11. package/build/actions/apply-schema-request.js +33 -0
  12. package/build/actions/apply-schema-request.js.map +1 -0
  13. package/build/actions/commit.d.ts +3 -3
  14. package/build/actions/commit.d.ts.map +1 -1
  15. package/build/actions/commit.js +5 -4
  16. package/build/actions/commit.js.map +1 -1
  17. package/build/actions/define-schemas.d.ts +13 -0
  18. package/build/actions/define-schemas.d.ts.map +1 -0
  19. package/build/actions/define-schemas.js +28 -0
  20. package/build/actions/define-schemas.js.map +1 -0
  21. package/build/actions/execute.d.ts +11 -10
  22. package/build/actions/execute.d.ts.map +1 -1
  23. package/build/actions/execute.js +17 -27
  24. package/build/actions/execute.js.map +1 -1
  25. package/build/actions/execution/types.d.ts +34 -0
  26. package/build/actions/execution/types.d.ts.map +1 -0
  27. package/build/actions/execution/types.js +2 -0
  28. package/build/actions/execution/types.js.map +1 -0
  29. package/build/actions/execution.d.ts +4 -0
  30. package/build/actions/execution.d.ts.map +1 -0
  31. package/build/actions/execution.js +88 -0
  32. package/build/actions/execution.js.map +1 -0
  33. package/build/actions/get-card.d.ts +6 -0
  34. package/build/actions/get-card.d.ts.map +1 -0
  35. package/build/actions/get-card.js +9 -0
  36. package/build/actions/get-card.js.map +1 -0
  37. package/build/actions/get-specification.d.ts +6 -0
  38. package/build/actions/get-specification.d.ts.map +1 -0
  39. package/build/actions/get-specification.js +9 -0
  40. package/build/actions/get-specification.js.map +1 -0
  41. package/build/actions/index.d.ts +12 -3
  42. package/build/actions/index.d.ts.map +1 -1
  43. package/build/actions/index.js +11 -3
  44. package/build/actions/index.js.map +1 -1
  45. package/build/actions/links.d.ts +3 -3
  46. package/build/actions/links.d.ts.map +1 -1
  47. package/build/actions/links.js +6 -5
  48. package/build/actions/links.js.map +1 -1
  49. package/build/actions/list-card-specifications.d.ts +6 -0
  50. package/build/actions/list-card-specifications.d.ts.map +1 -0
  51. package/build/actions/list-card-specifications.js +11 -0
  52. package/build/actions/list-card-specifications.js.map +1 -0
  53. package/build/actions/list-card-transitions.d.ts +6 -0
  54. package/build/actions/list-card-transitions.d.ts.map +1 -0
  55. package/build/actions/list-card-transitions.js +11 -0
  56. package/build/actions/list-card-transitions.js.map +1 -0
  57. package/build/actions/list-cards.d.ts +6 -0
  58. package/build/actions/list-cards.d.ts.map +1 -0
  59. package/build/actions/list-cards.js +10 -0
  60. package/build/actions/list-cards.js.map +1 -0
  61. package/build/actions/list-schemas.d.ts +13 -0
  62. package/build/actions/list-schemas.d.ts.map +1 -0
  63. package/build/actions/list-schemas.js +20 -0
  64. package/build/actions/list-schemas.js.map +1 -0
  65. package/build/actions/list-specification-revisions.d.ts +6 -0
  66. package/build/actions/list-specification-revisions.d.ts.map +1 -0
  67. package/build/actions/list-specification-revisions.js +10 -0
  68. package/build/actions/list-specification-revisions.js.map +1 -0
  69. package/build/actions/resources.d.ts +5 -0
  70. package/build/actions/resources.d.ts.map +1 -0
  71. package/build/actions/resources.js +111 -0
  72. package/build/actions/resources.js.map +1 -0
  73. package/build/actions/summarize-cards.d.ts +6 -0
  74. package/build/actions/summarize-cards.d.ts.map +1 -0
  75. package/build/actions/summarize-cards.js +11 -0
  76. package/build/actions/summarize-cards.js.map +1 -0
  77. package/build/actions/transitions.d.ts +3 -3
  78. package/build/actions/transitions.d.ts.map +1 -1
  79. package/build/actions/transitions.js +4 -3
  80. package/build/actions/transitions.js.map +1 -1
  81. package/build/actions/types.d.ts +6 -0
  82. package/build/actions/types.d.ts.map +1 -0
  83. package/build/actions/types.js +2 -0
  84. package/build/actions/types.js.map +1 -0
  85. package/build/actions/watch.d.ts +2 -2
  86. package/build/actions/watch.d.ts.map +1 -1
  87. package/build/actions/watch.js +8 -6
  88. package/build/actions/watch.js.map +1 -1
  89. package/build/conformance/assert/types.d.ts +19 -0
  90. package/build/conformance/assert/types.d.ts.map +1 -0
  91. package/build/conformance/assert/types.js +2 -0
  92. package/build/conformance/assert/types.js.map +1 -0
  93. package/build/conformance/assert.d.ts +15 -0
  94. package/build/conformance/assert.d.ts.map +1 -0
  95. package/build/conformance/assert.js +52 -0
  96. package/build/conformance/assert.js.map +1 -0
  97. package/build/conformance/cases.d.ts +7 -0
  98. package/build/conformance/cases.d.ts.map +1 -0
  99. package/build/conformance/cases.js +544 -0
  100. package/build/conformance/cases.js.map +1 -0
  101. package/build/conformance/clock.d.ts +6 -0
  102. package/build/conformance/clock.d.ts.map +1 -0
  103. package/build/conformance/clock.js +12 -0
  104. package/build/conformance/clock.js.map +1 -0
  105. package/build/conformance/consts.d.ts +30 -0
  106. package/build/conformance/consts.d.ts.map +1 -0
  107. package/build/conformance/consts.js +159 -0
  108. package/build/conformance/consts.js.map +1 -0
  109. package/build/conformance/errors.d.ts +5 -0
  110. package/build/conformance/errors.d.ts.map +1 -0
  111. package/build/conformance/errors.js +8 -0
  112. package/build/conformance/errors.js.map +1 -0
  113. package/build/conformance/fixtures/types.d.ts +13 -0
  114. package/build/conformance/fixtures/types.d.ts.map +1 -0
  115. package/build/conformance/fixtures/types.js +2 -0
  116. package/build/conformance/fixtures/types.js.map +1 -0
  117. package/build/conformance/fixtures.d.ts +14 -0
  118. package/build/conformance/fixtures.d.ts.map +1 -0
  119. package/build/conformance/fixtures.js +26 -0
  120. package/build/conformance/fixtures.js.map +1 -0
  121. package/build/conformance/index.d.ts +15 -0
  122. package/build/conformance/index.d.ts.map +1 -0
  123. package/build/conformance/index.js +12 -0
  124. package/build/conformance/index.js.map +1 -0
  125. package/build/conformance/resources.d.ts +4 -0
  126. package/build/conformance/resources.d.ts.map +1 -0
  127. package/build/conformance/resources.js +228 -0
  128. package/build/conformance/resources.js.map +1 -0
  129. package/build/conformance/types.d.ts +18 -0
  130. package/build/conformance/types.d.ts.map +1 -0
  131. package/build/conformance/types.js +2 -0
  132. package/build/conformance/types.js.map +1 -0
  133. package/build/consts.d.ts +5 -0
  134. package/build/consts.d.ts.map +1 -1
  135. package/build/consts.js +5 -0
  136. package/build/consts.js.map +1 -1
  137. package/build/definitions.d.ts +18 -0
  138. package/build/definitions.d.ts.map +1 -0
  139. package/build/definitions.js +225 -0
  140. package/build/definitions.js.map +1 -0
  141. package/build/executor/changes/types.d.ts +36 -0
  142. package/build/executor/changes/types.d.ts.map +1 -0
  143. package/build/executor/changes/types.js +2 -0
  144. package/build/executor/changes/types.js.map +1 -0
  145. package/build/executor/changes.d.ts +3 -30
  146. package/build/executor/changes.d.ts.map +1 -1
  147. package/build/executor/changes.js +42 -51
  148. package/build/executor/changes.js.map +1 -1
  149. package/build/executor/code/types.d.ts +17 -0
  150. package/build/executor/code/types.d.ts.map +1 -0
  151. package/build/executor/code/types.js +2 -0
  152. package/build/executor/code/types.js.map +1 -0
  153. package/build/executor/code.d.ts +3 -14
  154. package/build/executor/code.d.ts.map +1 -1
  155. package/build/executor/code.js +50 -54
  156. package/build/executor/code.js.map +1 -1
  157. package/build/executor/consts.local.d.ts +5 -0
  158. package/build/executor/consts.local.d.ts.map +1 -0
  159. package/build/executor/consts.local.js +6 -0
  160. package/build/executor/consts.local.js.map +1 -0
  161. package/build/executor/creator/types.d.ts +33 -0
  162. package/build/executor/creator/types.d.ts.map +1 -0
  163. package/build/executor/creator/types.js +2 -0
  164. package/build/executor/creator/types.js.map +1 -0
  165. package/build/executor/creator.d.ts +11 -0
  166. package/build/executor/creator.d.ts.map +1 -0
  167. package/build/executor/creator.js +32 -0
  168. package/build/executor/creator.js.map +1 -0
  169. package/build/executor/resolve/types.d.ts +30 -0
  170. package/build/executor/resolve/types.d.ts.map +1 -0
  171. package/build/executor/resolve/types.js +2 -0
  172. package/build/executor/resolve/types.js.map +1 -0
  173. package/build/executor/resolve.d.ts +5 -34
  174. package/build/executor/resolve.d.ts.map +1 -1
  175. package/build/executor/resolve.js +169 -110
  176. package/build/executor/resolve.js.map +1 -1
  177. package/build/executor/types.d.ts +23 -0
  178. package/build/executor/types.d.ts.map +1 -0
  179. package/build/executor/types.js +2 -0
  180. package/build/executor/types.js.map +1 -0
  181. package/build/executor/validate.d.ts +6 -5
  182. package/build/executor/validate.d.ts.map +1 -1
  183. package/build/executor/validate.js +38 -27
  184. package/build/executor/validate.js.map +1 -1
  185. package/build/executor.d.ts +11 -7
  186. package/build/executor.d.ts.map +1 -1
  187. package/build/executor.js +27 -21
  188. package/build/executor.js.map +1 -1
  189. package/build/facade.d.ts +20 -2
  190. package/build/facade.d.ts.map +1 -1
  191. package/build/facade.js +144 -22
  192. package/build/facade.js.map +1 -1
  193. package/build/helper.d.ts +5 -9
  194. package/build/helper.d.ts.map +1 -1
  195. package/build/helper.js +12 -11
  196. package/build/helper.js.map +1 -1
  197. package/build/hierarchy/types.d.ts +20 -0
  198. package/build/hierarchy/types.d.ts.map +1 -0
  199. package/build/hierarchy/types.js +2 -0
  200. package/build/hierarchy/types.js.map +1 -0
  201. package/build/hierarchy.d.ts +5 -0
  202. package/build/hierarchy.d.ts.map +1 -0
  203. package/build/hierarchy.js +133 -0
  204. package/build/hierarchy.js.map +1 -0
  205. package/build/index.d.ts +1 -0
  206. package/build/index.d.ts.map +1 -1
  207. package/build/index.js +1 -0
  208. package/build/index.js.map +1 -1
  209. package/build/invariants/types.d.ts +6 -0
  210. package/build/invariants/types.d.ts.map +1 -0
  211. package/build/invariants/types.js +2 -0
  212. package/build/invariants/types.js.map +1 -0
  213. package/build/invariants.d.ts +5 -0
  214. package/build/invariants.d.ts.map +1 -0
  215. package/build/invariants.js +126 -0
  216. package/build/invariants.js.map +1 -0
  217. package/build/projection.d.ts +4 -10
  218. package/build/projection.d.ts.map +1 -1
  219. package/build/projection.js +7 -5
  220. package/build/projection.js.map +1 -1
  221. package/build/queue/consts.d.ts +5 -0
  222. package/build/queue/consts.d.ts.map +1 -0
  223. package/build/queue/consts.js +5 -0
  224. package/build/queue/consts.js.map +1 -0
  225. package/build/queue/declare.d.ts +5 -0
  226. package/build/queue/declare.d.ts.map +1 -0
  227. package/build/queue/declare.js +5 -0
  228. package/build/queue/declare.js.map +1 -0
  229. package/build/queue/index.d.ts +3 -18
  230. package/build/queue/index.d.ts.map +1 -1
  231. package/build/queue/index.js +2 -7
  232. package/build/queue/index.js.map +1 -1
  233. package/build/queue/types.d.ts +13 -0
  234. package/build/queue/types.d.ts.map +1 -0
  235. package/build/queue/types.js +2 -0
  236. package/build/queue/types.js.map +1 -0
  237. package/build/registry.d.ts +5 -22
  238. package/build/registry.d.ts.map +1 -1
  239. package/build/registry.js +16 -10
  240. package/build/registry.js.map +1 -1
  241. package/build/resources.d.ts +5 -0
  242. package/build/resources.d.ts.map +1 -0
  243. package/build/resources.js +287 -0
  244. package/build/resources.js.map +1 -0
  245. package/build/service.d.ts +3 -16
  246. package/build/service.d.ts.map +1 -1
  247. package/build/service.js +12 -0
  248. package/build/service.js.map +1 -1
  249. package/build/store/commits.d.ts.map +1 -1
  250. package/build/store/commits.js +3 -1
  251. package/build/store/commits.js.map +1 -1
  252. package/build/store/composite.d.ts +1 -0
  253. package/build/store/composite.d.ts.map +1 -1
  254. package/build/store/composite.js +7 -2
  255. package/build/store/composite.js.map +1 -1
  256. package/build/store/consts.local.d.ts +2 -0
  257. package/build/store/consts.local.d.ts.map +1 -0
  258. package/build/store/consts.local.js +2 -0
  259. package/build/store/consts.local.js.map +1 -0
  260. package/build/store/fold/types.d.ts +43 -0
  261. package/build/store/fold/types.d.ts.map +1 -0
  262. package/build/store/fold/types.js +2 -0
  263. package/build/store/fold/types.js.map +1 -0
  264. package/build/store/fold.d.ts +8 -30
  265. package/build/store/fold.d.ts.map +1 -1
  266. package/build/store/fold.js +190 -198
  267. package/build/store/fold.js.map +1 -1
  268. package/build/store/index.d.ts +1 -0
  269. package/build/store/index.d.ts.map +1 -1
  270. package/build/store/index.js.map +1 -1
  271. package/build/store/memory.d.ts +12 -0
  272. package/build/store/memory.d.ts.map +1 -1
  273. package/build/store/memory.js +0 -0
  274. package/build/store/memory.js.map +1 -1
  275. package/build/store/types.d.ts +15 -1
  276. package/build/store/types.d.ts.map +1 -1
  277. package/build/store/types.local.d.ts +5 -0
  278. package/build/store/types.local.d.ts.map +1 -0
  279. package/build/store/types.local.js +2 -0
  280. package/build/store/types.local.js.map +1 -0
  281. package/build/types.d.ts +126 -2
  282. package/build/types.d.ts.map +1 -1
  283. package/build/types.local.d.ts +7 -0
  284. package/build/types.local.d.ts.map +1 -0
  285. package/build/types.local.js +2 -0
  286. package/build/types.local.js.map +1 -0
  287. package/build/utils/access/types.d.ts +30 -0
  288. package/build/utils/access/types.d.ts.map +1 -0
  289. package/build/utils/access/types.js +2 -0
  290. package/build/utils/access/types.js.map +1 -0
  291. package/build/utils/access.d.ts +4 -0
  292. package/build/utils/access.d.ts.map +1 -0
  293. package/build/utils/access.js +28 -0
  294. package/build/utils/access.js.map +1 -0
  295. package/build/utils/guard/types.d.ts +23 -0
  296. package/build/utils/guard/types.d.ts.map +1 -0
  297. package/build/utils/guard/types.js +2 -0
  298. package/build/utils/guard/types.js.map +1 -0
  299. package/build/utils/guard.d.ts +7 -10
  300. package/build/utils/guard.d.ts.map +1 -1
  301. package/build/utils/guard.js +36 -32
  302. package/build/utils/guard.js.map +1 -1
  303. package/build/utils/handler/types.d.ts +26 -0
  304. package/build/utils/handler/types.d.ts.map +1 -0
  305. package/build/utils/handler/types.js +2 -0
  306. package/build/utils/handler/types.js.map +1 -0
  307. package/build/utils/handler.d.ts +6 -0
  308. package/build/utils/handler.d.ts.map +1 -0
  309. package/build/utils/handler.js +21 -0
  310. package/build/utils/handler.js.map +1 -0
  311. package/build/utils/index.d.ts +8 -0
  312. package/build/utils/index.d.ts.map +1 -1
  313. package/build/utils/index.js +3 -0
  314. package/build/utils/index.js.map +1 -1
  315. package/build/utils/request/types.d.ts +23 -0
  316. package/build/utils/request/types.d.ts.map +1 -0
  317. package/build/utils/request/types.js +2 -0
  318. package/build/utils/request/types.js.map +1 -0
  319. package/build/utils/request.d.ts +4 -0
  320. package/build/utils/request.d.ts.map +1 -0
  321. package/build/utils/request.js +27 -0
  322. package/build/utils/request.js.map +1 -0
  323. package/build/utils/scope.d.ts +17 -13
  324. package/build/utils/scope.d.ts.map +1 -1
  325. package/build/utils/scope.js +21 -35
  326. package/build/utils/scope.js.map +1 -1
  327. package/build/utils/types.d.ts +8 -0
  328. package/build/utils/types.d.ts.map +1 -0
  329. package/build/utils/types.js +2 -0
  330. package/build/utils/types.js.map +1 -0
  331. package/package.json +30 -22
  332. package/src/actions/apply-schema-request.ts +36 -0
  333. package/src/actions/commit.ts +7 -5
  334. package/src/actions/define-schemas.ts +34 -0
  335. package/src/actions/execute.ts +32 -34
  336. package/src/actions/execution/types.ts +34 -0
  337. package/src/actions/execution.ts +100 -0
  338. package/src/actions/get-card.ts +14 -0
  339. package/src/actions/get-specification.ts +14 -0
  340. package/src/actions/index.ts +13 -3
  341. package/src/actions/links.ts +8 -6
  342. package/src/actions/list-card-specifications.ts +15 -0
  343. package/src/actions/list-card-transitions.ts +15 -0
  344. package/src/actions/list-cards.ts +14 -0
  345. package/src/actions/list-schemas.ts +29 -0
  346. package/src/actions/list-specification-revisions.ts +15 -0
  347. package/src/actions/resources.ts +79 -0
  348. package/src/actions/summarize-cards.ts +15 -0
  349. package/src/actions/transitions.ts +6 -4
  350. package/src/actions/types.ts +5 -0
  351. package/src/actions/watch.ts +11 -7
  352. package/src/conformance/assert/types.ts +16 -0
  353. package/src/conformance/assert.ts +67 -0
  354. package/src/conformance/cases.ts +631 -0
  355. package/src/conformance/clock.ts +11 -0
  356. package/src/conformance/consts.ts +165 -0
  357. package/src/conformance/errors.ts +7 -0
  358. package/src/conformance/fixtures/types.ts +11 -0
  359. package/src/conformance/fixtures.ts +46 -0
  360. package/src/conformance/index.ts +14 -0
  361. package/src/conformance/resources.ts +227 -0
  362. package/src/conformance/types.ts +20 -0
  363. package/src/consts.ts +6 -0
  364. package/src/definitions.ts +264 -0
  365. package/src/executor/changes/types.ts +38 -0
  366. package/src/executor/changes.ts +49 -68
  367. package/src/executor/code/types.ts +23 -0
  368. package/src/executor/code.ts +62 -69
  369. package/src/executor/consts.local.ts +8 -0
  370. package/src/executor/creator/types.ts +33 -0
  371. package/src/executor/creator.ts +43 -0
  372. package/src/executor/resolve/types.ts +30 -0
  373. package/src/executor/resolve.ts +181 -139
  374. package/src/executor/types.ts +23 -0
  375. package/src/executor/validate.ts +40 -38
  376. package/src/executor.ts +33 -27
  377. package/src/facade.ts +132 -29
  378. package/src/helper.ts +12 -11
  379. package/src/hierarchy/types.ts +20 -0
  380. package/src/hierarchy.ts +113 -0
  381. package/src/index.ts +1 -0
  382. package/src/invariants/types.ts +6 -0
  383. package/src/invariants.ts +106 -0
  384. package/src/projection.ts +12 -18
  385. package/src/queue/consts.ts +5 -0
  386. package/src/queue/declare.ts +7 -0
  387. package/src/queue/index.ts +3 -25
  388. package/src/queue/types.ts +14 -0
  389. package/src/registry.ts +18 -36
  390. package/src/resources.ts +256 -0
  391. package/src/service.ts +16 -20
  392. package/src/store/commits.ts +5 -4
  393. package/src/store/composite.ts +7 -2
  394. package/src/store/consts.local.ts +1 -0
  395. package/src/store/fold/types.ts +44 -0
  396. package/src/store/fold.ts +214 -212
  397. package/src/store/index.ts +1 -0
  398. package/src/store/memory.ts +0 -0
  399. package/src/store/types.local.ts +3 -0
  400. package/src/store/types.ts +16 -1
  401. package/src/types.local.ts +7 -0
  402. package/src/types.ts +139 -6
  403. package/src/utils/access/types.ts +30 -0
  404. package/src/utils/access.ts +33 -0
  405. package/src/utils/guard/types.ts +21 -0
  406. package/src/utils/guard.ts +44 -31
  407. package/src/utils/handler/types.ts +28 -0
  408. package/src/utils/handler.ts +35 -0
  409. package/src/utils/index.ts +9 -0
  410. package/src/utils/request/types.ts +23 -0
  411. package/src/utils/request.ts +40 -0
  412. package/src/utils/scope.ts +39 -42
  413. package/src/utils/types.ts +8 -0
  414. package/tests/access.spec.ts +160 -0
  415. package/tests/app.spec.ts +112 -0
  416. package/tests/conformance.spec.ts +47 -0
  417. package/tests/create-example.spec.ts +202 -0
  418. package/tests/creator.spec.ts +257 -0
  419. package/tests/entrypoints.spec.ts +5 -0
  420. package/tests/memory-store.spec.ts +52 -0
  421. package/tests/narrowing.spec.ts +94 -0
  422. package/tests/plugins.spec.ts +4 -3
  423. package/tests/writes.spec.ts +140 -0
  424. package/build/actions/cards.d.ts +0 -16
  425. package/build/actions/cards.d.ts.map +0 -1
  426. package/build/actions/cards.js +0 -32
  427. package/build/actions/cards.js.map +0 -1
  428. package/build/actions/schemas.d.ts +0 -6
  429. package/build/actions/schemas.d.ts.map +0 -1
  430. package/build/actions/schemas.js +0 -9
  431. package/build/actions/schemas.js.map +0 -1
  432. package/build/actions/specs.d.ts +0 -10
  433. package/build/actions/specs.d.ts.map +0 -1
  434. package/build/actions/specs.js +0 -14
  435. package/build/actions/specs.js.map +0 -1
  436. package/src/actions/cards.ts +0 -52
  437. package/src/actions/schemas.ts +0 -15
  438. package/src/actions/specs.ts +0 -23
package/build/helper.js CHANGED
@@ -1,14 +1,20 @@
1
+ import { servePlanningResources } from './actions/resources.js';
1
2
  import { bind } from '@owlmeans/server-entrypoint';
2
- import { executePlanning, getCard, getCommit, getSpecification, getTransition, listCardSpecifications, listCardTransitions, listCards, listLinks, listSchemas, listSpecificationRevisions, summarizeCards, watchCommits, } from './actions/index.js';
3
- import { planningServiceOf, scopeOf } from './utils/index.js';
3
+ import { defineSchemas, executePlanning, getCard, getCommit, getSpecification, getTransition, listCardSpecifications, listCardTransitions, listCards, listLinks, listSchemas, listSpecificationRevisions, summarizeCards, watchCommits, } from './actions/index.js';
4
+ import { planningHandlerOf } from './utils/handler.js';
4
5
  /**
5
6
  * Bind this package's handlers to a tree declared by `makePlanningProtocols` — one binding per
6
- * protocol, the base included. Pass the tree itself, never a flattened list; an application that
7
- * wants its own handler for one leaf binds that protocol afterwards.
7
+ * protocol, the base included (and `schema.define` when the tree declares it). Pass the tree
8
+ * itself, never a flattened list; an application that wants its own handler for one leaf binds
9
+ * that protocol afterwards.
8
10
  */
9
11
  export const servePlanningEntrypoints = (protocols, opts) => [
12
+ ...servePlanningResources(protocols, opts),
10
13
  bind(protocols.base),
11
14
  bind(protocols.schema.list, listSchemas(protocols.schema.list, opts)),
15
+ ...(protocols.schema.define != null
16
+ ? [bind(protocols.schema.define, defineSchemas(protocols.schema.define, opts))]
17
+ : []),
12
18
  bind(protocols.card.list, listCards(protocols.card.list, opts)),
13
19
  bind(protocols.card.summary, summarizeCards(protocols.card.summary, opts)),
14
20
  bind(protocols.card.get, getCard(protocols.card.get, opts)),
@@ -22,11 +28,6 @@ export const servePlanningEntrypoints = (protocols, opts) => [
22
28
  bind(protocols.commit.get, getCommit(protocols.commit.get, opts)),
23
29
  bind(protocols.commit.events, watchCommits(protocols.commit.events, opts)),
24
30
  ];
25
- /**
26
- * The facade a hand-written handler works through: the request's entity and subject, plus `extra`
27
- * (a `channel`) — never an entity from the request body.
28
- *
29
- * @throws {AuthorizationError} when the request carries no organization
30
- */
31
- export const planningFor = (ctx, req, extra, opts) => planningServiceOf(ctx, opts).for(scopeOf(req, extra));
31
+ /** @deprecated compat:factory-refactor — use `planningHandlerOf(ctx).planningFor(…)` */
32
+ export const planningFor = (ctx, req, extra, opts) => planningHandlerOf(ctx).planningFor(req, extra, opts);
32
33
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClD,OAAO,EACL,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAC5F,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE,cAAc,EAClG,YAAY,GACb,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAA4B,EAAE,IAA6B,EAAE,EAAE,CAAC;IACvG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACvF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAChG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1F,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7E,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC3E,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,GAA8B,EAAE,GAAoB,EAAE,KAA8B,EACpF,IAA8C,EAC9B,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Workcard } from '@owlmeans/planning';
2
+ export interface PlanningHierarchy {
3
+ ancestors: (card: Pick<Workcard, 'entityId' | 'parent' | 'parents'>) => Promise<Workcard[]>;
4
+ project: (card: Pick<Workcard, 'entityId' | 'kind' | 'id' | 'parent'>) => Promise<string | undefined>;
5
+ projects: (card: Workcard) => Promise<string[]>;
6
+ visible: (card: Workcard, projects?: readonly string[]) => Promise<boolean>;
7
+ descendants: (id: string, entityId: string) => Promise<Workcard[]>;
8
+ /**
9
+ * A card's own documents: the specifications whose primary parent is the card, and theirs in
10
+ * turn. They never block the card's delete — its fold removes them with it.
11
+ */
12
+ documents: (id: string, entityId: string) => Promise<Workcard[]>;
13
+ /**
14
+ * The card's own shape against its schemas — or, `deleting`, whether it may go: a project always
15
+ * (its delete purges what is under it); any other card only when everything under it is one of
16
+ * its own `documents` (`hierarchy:parent-in-use` otherwise).
17
+ */
18
+ validate: (card: Workcard, deleting?: boolean) => Promise<void>;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hierarchy/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC3F,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACrG,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/C,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3E,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAClE;;;OAGG;IACH,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChE;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hierarchy/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { PlanningRuntime } from './types.js';
2
+ import type { PlanningHierarchy } from './hierarchy/types.js';
3
+ /** One recursive resolver for schema inheritance, project authorization and hierarchy constraints. */
4
+ export declare const makePlanningHierarchy: (runtime: PlanningRuntime) => PlanningHierarchy;
5
+ //# sourceMappingURL=hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../src/hierarchy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,sGAAsG;AACtG,eAAO,MAAM,qBAAqB,YAAa,eAAe,KAAG,iBAwGhE,CAAA"}
@@ -0,0 +1,133 @@
1
+ import { CardTypeNotAllowed, FieldsInvalid, ParentNotFound, PlanningError, PlanningSchemaKind, SchemaOrigin, WorkcardKind, } from '@owlmeans/planning';
2
+ /** One recursive resolver for schema inheritance, project authorization and hierarchy constraints. */
3
+ export const makePlanningHierarchy = (runtime) => {
4
+ const cards = () => runtime.reader().cards;
5
+ const ancestors = async (card) => {
6
+ const visited = new Set();
7
+ const result = [];
8
+ const visit = async (id, path) => {
9
+ if (path.has(id))
10
+ throw new PlanningError(`hierarchy:cycle:${id}`);
11
+ if (visited.has(id))
12
+ return;
13
+ const parent = await cards().get(id, card.entityId);
14
+ if (parent == null || parent.entityId !== card.entityId)
15
+ throw new ParentNotFound(id);
16
+ const next = new Set([...path, id]);
17
+ for (const reference of parent.parents)
18
+ await visit(reference, next);
19
+ visited.add(id);
20
+ result.push(parent);
21
+ };
22
+ for (const id of card.parents)
23
+ await visit(id, new Set());
24
+ return result;
25
+ };
26
+ const project = async (card) => {
27
+ if (card.kind === WorkcardKind.Project)
28
+ return card.id;
29
+ const visited = new Set();
30
+ let parent = card.parent;
31
+ while (parent != null) {
32
+ if (visited.has(parent))
33
+ throw new PlanningError(`hierarchy:cycle:${parent}`);
34
+ visited.add(parent);
35
+ const found = await cards().get(parent, card.entityId);
36
+ if (found == null)
37
+ throw new ParentNotFound(parent);
38
+ if (found.kind === WorkcardKind.Project)
39
+ return found.id;
40
+ parent = found.parent;
41
+ }
42
+ return undefined;
43
+ };
44
+ const descendants = async (id, entityId) => {
45
+ const found = new Map();
46
+ let frontier = [id];
47
+ while (frontier.length > 0) {
48
+ const result = await cards().list({ entityId, parents: { $overlaps: frontier }, kind: [WorkcardKind.Card, WorkcardKind.Project, WorkcardKind.Specification] }, { size: 0 });
49
+ frontier = [];
50
+ for (const card of result.items)
51
+ if (card.id !== id && !found.has(card.id)) {
52
+ found.set(card.id, card);
53
+ frontier.push(card.id);
54
+ }
55
+ }
56
+ return [...found.values()];
57
+ };
58
+ /** The specifications among `below` whose primary parent is `id` or one already owned. */
59
+ const ownedOf = (id, below) => {
60
+ const owners = new Set([id]);
61
+ const owned = [];
62
+ let grown = true;
63
+ while (grown) {
64
+ grown = false;
65
+ for (const card of below) {
66
+ if (card.kind === WorkcardKind.Specification && card.parent != null && owners.has(card.parent) && !owners.has(card.id)) {
67
+ owners.add(card.id);
68
+ owned.push(card);
69
+ grown = true;
70
+ }
71
+ }
72
+ }
73
+ return owned;
74
+ };
75
+ const assertPair = (parent, card, schemas) => {
76
+ if (card.kind === WorkcardKind.Specification)
77
+ return;
78
+ const childType = schemas.type(card.type);
79
+ if (childType.parents?.types != null && !childType.parents.types.includes(parent.type))
80
+ throw new CardTypeNotAllowed(`${card.type}:parent:${parent.type}`);
81
+ const parentType = schemas.type(parent.type);
82
+ if (parentType.children != null) {
83
+ if (!parentType.children.types.includes(card.type))
84
+ throw new CardTypeNotAllowed(`${parent.type}:child:${card.type}`);
85
+ return;
86
+ }
87
+ if (parent.kind !== WorkcardKind.Project)
88
+ throw new CardTypeNotAllowed(`${parent.type}:child:${card.type}`);
89
+ const container = parentType;
90
+ const allowed = card.kind === WorkcardKind.Project ? container.projectTypes ?? [] : container.cardTypes;
91
+ const origin = schemas.originOf?.(PlanningSchemaKind.Type, card.type);
92
+ if (!allowed.includes(card.type) && !(card.kind === WorkcardKind.Card && container.scopedCardTypes && (origin === SchemaOrigin.Project || origin === SchemaOrigin.Entity)))
93
+ throw new CardTypeNotAllowed(`${parent.type}:${card.type}`);
94
+ };
95
+ const hierarchy = {
96
+ ancestors,
97
+ project,
98
+ descendants,
99
+ documents: async (id, entityId) => ownedOf(id, await descendants(id, entityId)),
100
+ projects: async (card) => [...new Set([...(card.kind === WorkcardKind.Project ? [card.id] : []), ...(await ancestors(card)).filter(parent => parent.kind === WorkcardKind.Project).map(parent => parent.id)])],
101
+ visible: async (card, projects) => projects == null || (await hierarchy.projects(card)).some(id => projects.includes(id)),
102
+ validate: async (card, deleting = false) => {
103
+ if (deleting) {
104
+ if (card.kind === WorkcardKind.Project)
105
+ return;
106
+ // The card's own documents go with it; anything else under it keeps it alive.
107
+ const below = await descendants(card.id, card.entityId);
108
+ if (below.length > ownedOf(card.id, below).length)
109
+ throw new PlanningError(`hierarchy:parent-in-use:${card.id}`);
110
+ return;
111
+ }
112
+ const schemas = await runtime.schemasFor(card.entityId, await project(card));
113
+ const type = schemas.type(card.type);
114
+ if (type.parents?.required && card.parent == null)
115
+ throw new ParentNotFound(`required:${card.type}`);
116
+ if (card.parent != null && !card.parents.includes(card.parent))
117
+ throw new FieldsInvalid('hierarchy:primary-membership');
118
+ const parents = await ancestors(card);
119
+ if (parents.some(parent => parent.id === card.id))
120
+ throw new PlanningError(`hierarchy:cycle:${card.id}`);
121
+ for (const id of card.parents) {
122
+ const parent = parents.find(parent => parent.id === id);
123
+ assertPair(parent, card, await runtime.schemasFor(card.entityId, await project(parent)));
124
+ }
125
+ if (card.parent != null)
126
+ card.parentType = parents.find(parent => parent.id === card.parent).type;
127
+ else
128
+ delete card.parentType;
129
+ },
130
+ };
131
+ return hierarchy;
132
+ };
133
+ //# sourceMappingURL=hierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../src/hierarchy.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from './consts.js';
4
4
  export * from './service.js';
5
5
  export * from './registry.js';
6
6
  export * from './facade.js';
7
+ export * from './definitions.js';
7
8
  export * from './executor.js';
8
9
  export * from './helper.js';
9
10
  export * from './projection.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA;AAC/B,mBAAmB,kBAAkB,CAAA;AAErC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA;AAC/B,mBAAmB,kBAAkB,CAAA;AAErC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
package/build/index.js CHANGED
@@ -2,6 +2,7 @@ export * from './consts.js';
2
2
  export * from './service.js';
3
3
  export * from './registry.js';
4
4
  export * from './facade.js';
5
+ export * from './definitions.js';
5
6
  export * from './executor.js';
6
7
  export * from './helper.js';
7
8
  export * from './projection.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { Workcard, Transition } from '@owlmeans/planning';
2
+ export interface PlanningInvariants {
3
+ validate: (before: Workcard | null, after: Workcard | null, transition: Transition) => Promise<void>;
4
+ references: (after: Workcard, transition: Transition) => Promise<void>;
5
+ }
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/invariants/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpG,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACvE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/invariants/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { PlanningRuntime } from './types.js';
2
+ import type { PlanningInvariants } from './invariants/types.js';
3
+ /** Checks projected state again at persistence time, including queued writes whose parents moved. */
4
+ export declare const makePlanningInvariants: (runtime: PlanningRuntime) => PlanningInvariants;
5
+ //# sourceMappingURL=invariants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../src/invariants.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,YAAa,eAAe,KAAG,kBAgGjE,CAAA"}
@@ -0,0 +1,126 @@
1
+ import { FieldsInvalid, PlanningResourceKind, PLANNING_ASSIGNEE, PLANNING_REPORTER, ProjectMode, RelationshipRefused, TransitionAction, validateHelper, WorkcardKind, } from '@owlmeans/planning';
2
+ import { makePlanningHierarchy } from './hierarchy.js';
3
+ /** Checks projected state again at persistence time, including queued writes whose parents moved. */
4
+ export const makePlanningInvariants = (runtime) => {
5
+ const registryFor = async (card) => await runtime.schemasFor(card.entityId, await makePlanningHierarchy(runtime).project(card));
6
+ const referencesOf = async (card) => {
7
+ const schemas = await registryFor(card);
8
+ const refs = [];
9
+ if (card.reporter != null)
10
+ refs.push({ type: PLANNING_REPORTER, to: card.reporter, toKind: PlanningResourceKind.Assignee });
11
+ if (card.assignee != null)
12
+ refs.push({ type: PLANNING_ASSIGNEE, to: card.assignee, toKind: PlanningResourceKind.Assignee });
13
+ for (const rule of schemas.type(card.type).relationships ?? []) {
14
+ if (rule.field == null)
15
+ continue;
16
+ const value = card.fields[rule.field];
17
+ if (value == null)
18
+ continue;
19
+ if (rule.multiple !== true && typeof value !== 'string')
20
+ throw new FieldsInvalid(`relationship:field:${rule.field}:single`);
21
+ if (rule.multiple === true && (!Array.isArray(value) || value.some(id => typeof id !== 'string')))
22
+ throw new FieldsInvalid(`relationship:field:${rule.field}:multiple`);
23
+ for (const id of Array.isArray(value) ? value : [value])
24
+ refs.push({ type: rule.name, to: id, toKind: rule.toKind ?? PlanningResourceKind.Workcard });
25
+ }
26
+ return refs;
27
+ };
28
+ const assertReference = async (card, ref, existing) => {
29
+ const reader = runtime.reader();
30
+ const kind = ref.toKind ?? PlanningResourceKind.Workcard;
31
+ const target = kind === PlanningResourceKind.Assignee ? await reader.assignees?.get(ref.to, card.entityId)
32
+ : kind === PlanningResourceKind.Team ? await reader.teams?.get(ref.to, card.entityId)
33
+ : kind === PlanningResourceKind.Workcard ? await reader.cards.get(ref.to, card.entityId) : null;
34
+ if (target == null || target.entityId !== card.entityId)
35
+ throw new RelationshipRefused(`reference:${kind}:${ref.to}`);
36
+ const rule = (await registryFor(card)).type(card.type).relationships?.find(rule => rule.name === ref.type);
37
+ if (rule?.from != null && !rule.from.includes(card.type))
38
+ throw new RelationshipRefused(`from-type:${ref.type}:${card.type}`);
39
+ if (rule?.to != null && !rule.to.includes('type' in target ? String(target.type) : ''))
40
+ throw new RelationshipRefused(`to-type:${ref.type}`);
41
+ if (kind === PlanningResourceKind.Assignee && !existing && 'retired' in target && target.retired)
42
+ throw new RelationshipRefused(`assignee:retired:${ref.to}`);
43
+ };
44
+ const invariants = {
45
+ validate: async (before, after, transition) => {
46
+ const hierarchy = makePlanningHierarchy(runtime);
47
+ if (after == null) {
48
+ if (before != null) {
49
+ await hierarchy.validate(before, true);
50
+ // What the delete's fold removes: a project's whole subtree, any other card's own documents.
51
+ const removed = before.kind === WorkcardKind.Project ? await hierarchy.descendants(before.id, before.entityId) : await hierarchy.documents(before.id, before.entityId);
52
+ const doomed = new Set([before.id, ...removed.map(card => card.id)]);
53
+ const incoming = await runtime.reader().links?.list({ entityId: before.entityId, to: [...doomed], toKind: PlanningResourceKind.Workcard }, { size: 0 });
54
+ for (const edge of incoming?.items ?? []) {
55
+ if (doomed.has(edge.from) || (edge.fromKind ?? PlanningResourceKind.Workcard) !== PlanningResourceKind.Workcard)
56
+ continue;
57
+ const owner = await runtime.reader().cards.get(edge.from, before.entityId);
58
+ if (owner != null && (await registryFor(owner)).type(owner.type).relationships?.some(rule => rule.name === edge.type && rule.field != null)) {
59
+ throw new RelationshipRefused(`reference-in-use:${edge.to}:${edge.from}`);
60
+ }
61
+ }
62
+ }
63
+ return;
64
+ }
65
+ await hierarchy.validate(after);
66
+ const schemas = await registryFor(after);
67
+ validateHelper.validateCard(after, schemas);
68
+ if (after.kind !== WorkcardKind.Project && after.mode != null)
69
+ throw new FieldsInvalid('mode:project-only');
70
+ if (after.kind === WorkcardKind.Project && after.mode == null)
71
+ after.mode = ProjectMode.Opened;
72
+ const previous = before == null ? [] : await referencesOf(before);
73
+ for (const ref of await referencesOf(after))
74
+ await assertReference(after, ref, previous.some(entry => entry.type === ref.type && entry.to === ref.to && entry.toKind === ref.toKind));
75
+ const counted = new Map();
76
+ for (const link of transition.links ?? (transition.link != null ? [transition.link] : [])) {
77
+ const rule = schemas.type(after.type).relationships?.find(rule => rule.name === link.type);
78
+ if (rule == null)
79
+ throw new RelationshipRefused(`unknown:${link.type}`);
80
+ if ((link.toKind ?? PlanningResourceKind.Workcard) !== (rule.toKind ?? PlanningResourceKind.Workcard) || (link.fromKind ?? PlanningResourceKind.Workcard) !== PlanningResourceKind.Workcard)
81
+ throw new RelationshipRefused(`kind:${link.type}`);
82
+ if (link.from != null && link.from !== after.id)
83
+ throw new RelationshipRefused(`from:${link.from}`);
84
+ if (rule?.field != null)
85
+ throw new RelationshipRefused(`field-authoritative:${rule.field}`);
86
+ if (transition.action !== TransitionAction.Unlink) {
87
+ await assertReference(after, link, false);
88
+ if (rule.single) {
89
+ const destinations = counted.get(rule.name) ?? new Set();
90
+ destinations.add(link.to);
91
+ for (const edge of (await runtime.reader().links?.list({ entityId: after.entityId, from: after.id, type: rule.name }, { size: 0 }))?.items ?? [])
92
+ destinations.add(edge.to);
93
+ counted.set(rule.name, destinations);
94
+ if (destinations.size > 1)
95
+ throw new RelationshipRefused(`single:${rule.name}`);
96
+ }
97
+ }
98
+ }
99
+ if (before != null && (before.parent !== after.parent || JSON.stringify(before.parents) !== JSON.stringify(after.parents))) {
100
+ const reader = runtime.reader();
101
+ const alternate = { ...runtime, reader: () => ({ ...reader, cards: { ...reader.cards, get: async (id, entityId) => id === after.id && entityId === after.entityId ? after : await reader.cards.get(id, entityId) } }) };
102
+ const hypothetical = makePlanningHierarchy(alternate);
103
+ for (const child of await hierarchy.descendants(after.id, after.entityId)) {
104
+ await hypothetical.validate(child);
105
+ await makePlanningInvariants(alternate).validate(child, child, { ...transition, links: undefined, link: undefined, action: TransitionAction.Update });
106
+ }
107
+ }
108
+ },
109
+ references: async (after, transition) => {
110
+ const links = runtime.service().store(after.type).links;
111
+ if (links == null)
112
+ return;
113
+ const schemas = await registryFor(after);
114
+ const types = [PLANNING_REPORTER, PLANNING_ASSIGNEE, ...(schemas.type(after.type).relationships ?? []).filter(rule => rule.field != null).map(rule => rule.name)];
115
+ const wanted = await referencesOf(after);
116
+ const stored = await links.list({ entityId: after.entityId, from: after.id, type: types }, { size: 0 });
117
+ for (const link of stored.items)
118
+ if (!wanted.some(ref => ref.type === link.type && ref.to === link.to && (ref.toKind ?? PlanningResourceKind.Workcard) === (link.toKind ?? PlanningResourceKind.Workcard)))
119
+ await links.drop({ entityId: after.entityId, id: link.id });
120
+ for (const ref of wanted)
121
+ await links.put({ ...ref, from: after.id, fromKind: PlanningResourceKind.Workcard, entityId: after.entityId, createdAt: transition.at, transition: transition.id, project: transition.project });
122
+ },
123
+ };
124
+ return invariants;
125
+ };
126
+ //# sourceMappingURL=invariants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.js","sourceRoot":"","sources":["../src/invariants.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EACtF,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,GACpE,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAItD,qGAAqG;AACrG,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAwB,EAAsB,EAAE;IACrF,MAAM,WAAW,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACzI,MAAM,YAAY,GAAG,KAAK,EAAE,IAAc,EAAgC,EAAE;QAC1E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,IAAI,GAAwB,EAAE,CAAA;QACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC3H,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC3H,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;gBAAE,SAAQ;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,KAAK,IAAI,IAAI;gBAAE,SAAQ;YAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,MAAM,IAAI,aAAa,CAAC,sBAAsB,IAAI,CAAC,KAAK,SAAS,CAAC,CAAA;YAC3H,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,sBAAsB,IAAI,CAAC,KAAK,WAAW,CAAC,CAAA;YACvK,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAA;QACjK,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,eAAe,GAAG,KAAK,EAAE,IAAc,EAAE,GAAsB,EAAE,QAAiB,EAAiB,EAAE;QACzG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAA;QACxD,MAAM,MAAM,GAAG,IAAI,KAAK,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;YACxG,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACnF,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACnG,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,mBAAmB,CAAC,aAAa,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QACrH,MAAM,IAAI,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1G,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7H,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5I,IAAI,IAAI,KAAK,oBAAoB,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,mBAAmB,CAAC,oBAAoB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/J,CAAC,CAAA;IACD,MAAM,UAAU,GAAuB;QACrC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;oBACtC,6FAA6F;oBAC7F,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;oBACxK,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC,CAAC,CAAA;oBACtE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;oBACvJ,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;wBACzC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAAK,oBAAoB,CAAC,QAAQ;4BAAE,SAAQ;wBACzH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;wBAC1E,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;4BAC5I,MAAM,IAAI,mBAAmB,CAAC,oBAAoB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;wBAC3E,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAM;YACR,CAAC;YACD,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;YACxC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI;gBAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAAA;YAC3G,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,CAAA;YAC9F,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAA;YACjE,KAAK,MAAM,GAAG,IAAI,MAAM,YAAY,CAAC,KAAK,CAAC;gBAAE,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;YACrL,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;YAC9C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC1F,IAAI,IAAI,IAAI,IAAI;oBAAE,MAAM,IAAI,mBAAmB,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBACvE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAAK,oBAAoB,CAAC,QAAQ;oBAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC/O,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;oBAAE,MAAM,IAAI,mBAAmB,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBACnG,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI;oBAAE,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC3F,IAAI,UAAU,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAClD,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;oBACzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAChB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAA;wBAChE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wBACzB,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;4BAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wBAC3K,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;wBACpC,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;4BAAE,MAAM,IAAI,mBAAmB,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;oBACjF,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC3H,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;gBAC/B,MAAM,SAAS,GAAoB,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;gBACxO,MAAM,YAAY,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;gBACrD,KAAK,MAAM,KAAK,IAAI,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3E,MAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;oBAClC,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAA;gBACvJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;YACvD,IAAI,KAAK,IAAI,IAAI;gBAAE,OAAM;YACzB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YACjK,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;YACvG,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;oBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACvQ,KAAK,MAAM,GAAG,IAAI,MAAM;gBAAE,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAG,EAAE,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7N,CAAC;KACF,CAAA;IACD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
@@ -1,16 +1,8 @@
1
1
  import type { BasicConfig, BasicContext } from '@owlmeans/context';
2
- import type { CommitEvent, PlanningService, PlanningStore } from '@owlmeans/planning';
3
- import type { ProjectionRequest } from './queue/index.js';
2
+ import type { ProjectionRequest } from './queue/types.js';
4
3
  import type { JobProcessor, QueueHooks } from '@owlmeans/queue';
4
+ import type { ProjectionOptions } from './types.js';
5
5
  import type { FoldResult } from './store/types.js';
6
- export interface ProjectionOptions {
7
- /** The planning service alias. */
8
- service?: string;
9
- /** The store the queue folds — the service's default store when omitted. */
10
- store?: (service: PlanningService) => PlanningStore;
11
- /** Where events go — the store's commit hub `publish` when it has one. */
12
- publish?: (event: CommitEvent) => Promise<void>;
13
- }
14
6
  /**
15
7
  * The body of a projection job: fold one card with the service's `committed` as the commit
16
8
  * listener, so the `after` chain runs in the process that took the job.
@@ -24,5 +16,7 @@ export declare const makeProjectionProcessor: (ctx: BasicContext<BasicConfig>, o
24
16
  * failed event is published — otherwise `execute({ wait: true })` and `commits.wait` hang to their
25
17
  * timeout. Merge it into the queue driver's hooks.
26
18
  */
19
+ export declare const makePlanningQueueHooks: (ctx: BasicContext<BasicConfig>, opts?: ProjectionOptions) => QueueHooks;
20
+ /** @deprecated compat:factory-refactor — use `makePlanningQueueHooks(…)` */
27
21
  export declare const planningQueueHooks: (ctx: BasicContext<BasicConfig>, opts?: ProjectionOptions) => QueueHooks;
28
22
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG/D,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7D,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,aAAa,CAAA;IACnD,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChD;AAWD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,QAC7B,YAAY,CAAC,WAAW,CAAC,SAAS,iBAAiB,KACvD,YAAY,CAAC,iBAAiB,EAAE,UAAU,CAU5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAS,YAAY,CAAC,WAAW,CAAC,SAAS,iBAAiB,KAAG,UAU5F,CAAA"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,KAAK,EAAuB,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAW7D;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,QAC7B,YAAY,CAAC,WAAW,CAAC,SAAS,iBAAiB,KACvD,YAAY,CAAC,iBAAiB,EAAE,UAAU,CAU5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAS,YAAY,CAAC,WAAW,CAAC,SAAS,iBAAiB,KAAG,UAUhG,CAAA;AAEF,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,QAAS,YAAY,CAAC,WAAW,CAAC,SAAS,iBAAiB,KAAG,UAC3D,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { PLANNING_SERVICE } from '@owlmeans/planning';
2
- import { PLANNING_PROJECT_JOB, PLANNING_PROJECTION_QUEUE } from './queue/index.js';
3
- import { failPending, foldPending } from './store/fold.js';
2
+ import { PLANNING_PROJECT_JOB, PLANNING_PROJECTION_QUEUE } from './queue/consts.js';
3
+ import { foldHelper } from './store/fold.js';
4
4
  const serviceOf = (ctx, opts) => ctx.service(opts?.service ?? PLANNING_SERVICE);
5
5
  const storeOf = (service, opts) => opts?.store?.(service) ?? service.store();
6
6
  const publisherOf = (store, opts) => opts?.publish ?? store.commits?.publish;
@@ -15,7 +15,7 @@ export const makeProjectionProcessor = (ctx, opts) => async (job) => {
15
15
  const service = serviceOf(ctx, opts);
16
16
  const store = storeOf(service, opts);
17
17
  const publish = publisherOf(store, opts);
18
- return await foldPending(store, job.data.cardId, job.data.entityId, {
18
+ return await foldHelper.foldPending(store, job.data.cardId, job.data.entityId, {
19
19
  touch: job.touch,
20
20
  onCommitted: async (event) => { await service.committed(event); },
21
21
  ...(publish != null ? { publish } : {}),
@@ -26,7 +26,7 @@ export const makeProjectionProcessor = (ctx, opts) => async (job) => {
26
26
  * failed event is published — otherwise `execute({ wait: true })` and `commits.wait` hang to their
27
27
  * timeout. Merge it into the queue driver's hooks.
28
28
  */
29
- export const planningQueueHooks = (ctx, opts) => ({
29
+ export const makePlanningQueueHooks = (ctx, opts) => ({
30
30
  onJobDead: async (job, reason) => {
31
31
  if (job.queue !== PLANNING_PROJECTION_QUEUE || job.name !== PLANNING_PROJECT_JOB) {
32
32
  return;
@@ -34,7 +34,9 @@ export const planningQueueHooks = (ctx, opts) => ({
34
34
  const request = job.data;
35
35
  const store = storeOf(serviceOf(ctx, opts), opts);
36
36
  const publish = publisherOf(store, opts);
37
- await failPending(store, request.cardId, request.entityId, reason, publish != null ? { publish } : {});
37
+ await foldHelper.failPending(store, request.cardId, request.entityId, reason, publish != null ? { publish } : {});
38
38
  },
39
39
  });
40
+ /** @deprecated compat:factory-refactor — use `makePlanningQueueHooks(…)` */
41
+ export const planningQueueHooks = (ctx, opts) => makePlanningQueueHooks(ctx, opts);
40
42
  //# sourceMappingURL=projection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAGlF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAa1D,MAAM,SAAS,GAAG,CAAC,GAA8B,EAAE,IAAwB,EAAmB,EAAE,CAC9F,GAAG,CAAC,OAAO,CAAsB,IAAI,EAAE,OAAO,IAAI,gBAAgB,CAAC,CAAA;AAErE,MAAM,OAAO,GAAG,CAAC,OAAwB,EAAE,IAAwB,EAAiB,EAAE,CACpF,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAA;AAE3C,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,IAAwB,EAAE,EAAE,CACrE,IAAI,EAAE,OAAO,IAAK,KAAK,CAAC,OAA0C,EAAE,OAAO,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,GAA8B,EAAE,IAAwB,EACX,EAAE,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;IAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAExC,OAAO,MAAM,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClE,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;QAC9D,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAA8B,EAAE,IAAwB,EAAc,EAAE,CAAC,CAAC;IAC3G,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC/B,IAAI,GAAG,CAAC,KAAK,KAAK,yBAAyB,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACjF,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAyB,CAAA;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACxC,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACxG,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAA4C,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAGnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,MAAM,SAAS,GAAG,CAAC,GAA8B,EAAE,IAAwB,EAAmB,EAAE,CAC9F,GAAG,CAAC,OAAO,CAAsB,IAAI,EAAE,OAAO,IAAI,gBAAgB,CAAC,CAAA;AAErE,MAAM,OAAO,GAAG,CAAC,OAAwB,EAAE,IAAwB,EAAiB,EAAE,CACpF,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAA;AAE3C,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,IAAwB,EAAE,EAAE,CACrE,IAAI,EAAE,OAAO,IAAK,KAAK,CAAC,OAA0C,EAAE,OAAO,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,GAA8B,EAAE,IAAwB,EACX,EAAE,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;IAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAExC,OAAO,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC7E,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;QAC9D,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAA8B,EAAE,IAAwB,EAAc,EAAE,CAAC,CAAC;IAC/G,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC/B,IAAI,GAAG,CAAC,KAAK,KAAK,yBAAyB,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACjF,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAyB,CAAA;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACxC,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACnH,CAAC;CACF,CAAC,CAAA;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAA8B,EAAE,IAAwB,EAAc,EAAE,CACzG,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ /** The server-side queue used to project planning transitions. */
2
+ export declare const PLANNING_PROJECTION_QUEUE = "planning-projection";
3
+ /** The processor name accepted by the planning projection queue. */
4
+ export declare const PLANNING_PROJECT_JOB = "planning:project";
5
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/queue/consts.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,yBAAyB,wBAAwB,CAAA;AAE9D,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,qBAAqB,CAAA"}
@@ -0,0 +1,5 @@
1
+ /** The server-side queue used to project planning transitions. */
2
+ export const PLANNING_PROJECTION_QUEUE = 'planning-projection';
3
+ /** The processor name accepted by the planning projection queue. */
4
+ export const PLANNING_PROJECT_JOB = 'planning:project';
5
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/queue/consts.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAA;AAE9D,oEAAoE;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { type Config } from '@owlmeans/queue';
2
+ import type { PlanningQueueOptions } from './types.js';
3
+ /** Declare the shared projection address; each process separately chooses whether to listen. */
4
+ export declare const declarePlanningQueue: <C extends Config>(cfg: C, opts?: PlanningQueueOptions) => C;
5
+ //# sourceMappingURL=declare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declare.d.ts","sourceRoot":"","sources":["../../src/queue/declare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,gGAAgG;AAChG,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,OAAO,CAAC,SAAS,oBAAoB,KAAG,CACjB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { declareQueue } from '@owlmeans/queue';
2
+ import { PLANNING_PROJECT_JOB, PLANNING_PROJECTION_QUEUE } from './consts.js';
3
+ /** Declare the shared projection address; each process separately chooses whether to listen. */
4
+ export const declarePlanningQueue = (cfg, opts) => declareQueue(cfg, PLANNING_PROJECTION_QUEUE, [PLANNING_PROJECT_JOB], opts);
5
+ //# sourceMappingURL=declare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declare.js","sourceRoot":"","sources":["../../src/queue/declare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAG7E,gGAAgG;AAChG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAmB,GAAM,EAAE,IAA2B,EAAK,EAAE,CAC/F,YAAY,CAAC,GAAG,EAAE,yBAAyB,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,CAAA"}
@@ -1,19 +1,4 @@
1
- import type { Config, JobOptions, QueueWorkerOptions } from '@owlmeans/queue';
2
- /** The server-side queue used to project planning transitions. */
3
- export declare const PLANNING_PROJECTION_QUEUE = "planning-projection";
4
- /** The processor name accepted by the planning projection queue. */
5
- export declare const PLANNING_PROJECT_JOB = "planning:project";
6
- /** What one projection job folds. */
7
- export interface ProjectionRequest {
8
- cardId: string;
9
- entityId: string;
10
- /** The transition that requested projection; it is a hint rather than a fold bound. */
11
- transition?: string;
12
- }
13
- export interface PlanningQueueOptions {
14
- worker?: QueueWorkerOptions;
15
- defaults?: JobOptions;
16
- }
17
- /** Declare the shared projection address; each process separately chooses whether to listen. */
18
- export declare const declarePlanningQueue: <C extends Config>(cfg: C, opts?: PlanningQueueOptions) => C;
1
+ export { declarePlanningQueue } from './declare.js';
2
+ export { PLANNING_PROJECTION_QUEUE, PLANNING_PROJECT_JOB } from './consts.js';
3
+ export type { PlanningQueueOptions, ProjectionRequest } from './types.js';
19
4
  //# sourceMappingURL=index.d.ts.map