@graview/core 0.1.61 → 0.1.63

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 (464) hide show
  1. package/README.md +13 -1
  2. package/dist/app-places.d.ts.map +1 -1
  3. package/dist/app-places.js +2 -2
  4. package/dist/app-places.js.map +1 -1
  5. package/dist/app.d.ts +22 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js.map +1 -1
  8. package/dist/arranging.js +2 -2
  9. package/dist/arranging.js.map +1 -1
  10. package/dist/capabilities.js +1 -1
  11. package/dist/capabilities.js.map +1 -1
  12. package/dist/cli/check/hidden-reads.d.ts.map +1 -1
  13. package/dist/cli/check/hidden-reads.js +26 -0
  14. package/dist/cli/check/hidden-reads.js.map +1 -1
  15. package/dist/cli/check/index.d.ts +2 -0
  16. package/dist/cli/check/index.d.ts.map +1 -1
  17. package/dist/cli/check/index.js +2 -0
  18. package/dist/cli/check/index.js.map +1 -1
  19. package/dist/cli/check/tidying.d.ts +14 -0
  20. package/dist/cli/check/tidying.d.ts.map +1 -0
  21. package/dist/cli/check/tidying.js +24 -0
  22. package/dist/cli/check/tidying.js.map +1 -0
  23. package/dist/cli/check/workflows.d.ts +11 -0
  24. package/dist/cli/check/workflows.d.ts.map +1 -0
  25. package/dist/cli/check/workflows.js +20 -0
  26. package/dist/cli/check/workflows.js.map +1 -0
  27. package/dist/cli/check.d.ts.map +1 -1
  28. package/dist/cli/check.js +3 -1
  29. package/dist/cli/check.js.map +1 -1
  30. package/dist/cli/describe.d.ts.map +1 -1
  31. package/dist/cli/describe.js +45 -2
  32. package/dist/cli/describe.js.map +1 -1
  33. package/dist/cli/document-schema.d.ts.map +1 -1
  34. package/dist/cli/document-schema.js +15 -2
  35. package/dist/cli/document-schema.js.map +1 -1
  36. package/dist/cli/index.js +1 -1
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/compose.d.ts +11 -3
  39. package/dist/compose.d.ts.map +1 -1
  40. package/dist/compose.js +12 -2
  41. package/dist/compose.js.map +1 -1
  42. package/dist/css/sanitize.d.ts +125 -0
  43. package/dist/css/sanitize.d.ts.map +1 -0
  44. package/dist/css/sanitize.js +989 -0
  45. package/dist/css/sanitize.js.map +1 -0
  46. package/dist/css/tables.d.ts +55 -0
  47. package/dist/css/tables.d.ts.map +1 -0
  48. package/dist/css/tables.js +137 -0
  49. package/dist/css/tables.js.map +1 -0
  50. package/dist/css.d.ts +20 -0
  51. package/dist/css.d.ts.map +1 -0
  52. package/dist/css.js +19 -0
  53. package/dist/css.js.map +1 -0
  54. package/dist/days.d.ts +15 -0
  55. package/dist/days.d.ts.map +1 -1
  56. package/dist/days.js +21 -0
  57. package/dist/days.js.map +1 -1
  58. package/dist/describe.d.ts +1 -1
  59. package/dist/describe.d.ts.map +1 -1
  60. package/dist/document/act-findings.d.ts.map +1 -1
  61. package/dist/document/act-findings.js +80 -1
  62. package/dist/document/act-findings.js.map +1 -1
  63. package/dist/document/amount.d.ts +1 -1
  64. package/dist/document/amount.d.ts.map +1 -1
  65. package/dist/document/amount.js +2 -2
  66. package/dist/document/amount.js.map +1 -1
  67. package/dist/document/blocks.d.ts.map +1 -1
  68. package/dist/document/blocks.js +17 -1
  69. package/dist/document/blocks.js.map +1 -1
  70. package/dist/document/brand-check.d.ts +15 -1
  71. package/dist/document/brand-check.d.ts.map +1 -1
  72. package/dist/document/brand-check.js +80 -0
  73. package/dist/document/brand-check.js.map +1 -1
  74. package/dist/document/brand.d.ts.map +1 -1
  75. package/dist/document/brand.js +2 -0
  76. package/dist/document/brand.js.map +1 -1
  77. package/dist/document/compile-checked.d.ts.map +1 -1
  78. package/dist/document/compile-checked.js +5 -2
  79. package/dist/document/compile-checked.js.map +1 -1
  80. package/dist/document/compile.d.ts.map +1 -1
  81. package/dist/document/compile.js +96 -16
  82. package/dist/document/compile.js.map +1 -1
  83. package/dist/document/compiled.d.ts +32 -3
  84. package/dist/document/compiled.d.ts.map +1 -1
  85. package/dist/document/compiled.js +123 -12
  86. package/dist/document/compiled.js.map +1 -1
  87. package/dist/document/connection-findings.js +165 -22
  88. package/dist/document/connection-findings.js.map +1 -1
  89. package/dist/document/connection-spec.d.ts +38 -1
  90. package/dist/document/connection-spec.d.ts.map +1 -1
  91. package/dist/document/connection-spec.js +71 -7
  92. package/dist/document/connection-spec.js.map +1 -1
  93. package/dist/document/covers.d.ts +48 -0
  94. package/dist/document/covers.d.ts.map +1 -0
  95. package/dist/document/covers.js +90 -0
  96. package/dist/document/covers.js.map +1 -0
  97. package/dist/document/derives-findings.d.ts +4 -0
  98. package/dist/document/derives-findings.d.ts.map +1 -0
  99. package/dist/document/derives-findings.js +68 -0
  100. package/dist/document/derives-findings.js.map +1 -0
  101. package/dist/document/describe-forms.js +2 -2
  102. package/dist/document/describe-forms.js.map +1 -1
  103. package/dist/document/describe-place.d.ts +3 -0
  104. package/dist/document/describe-place.d.ts.map +1 -1
  105. package/dist/document/describe-place.js +11 -0
  106. package/dist/document/describe-place.js.map +1 -1
  107. package/dist/document/described.d.ts +28 -0
  108. package/dist/document/described.d.ts.map +1 -1
  109. package/dist/document/diff.d.ts +6 -0
  110. package/dist/document/diff.d.ts.map +1 -1
  111. package/dist/document/diff.js +53 -2
  112. package/dist/document/diff.js.map +1 -1
  113. package/dist/document/edit.d.ts +1 -1
  114. package/dist/document/edit.d.ts.map +1 -1
  115. package/dist/document/edit.js +366 -29
  116. package/dist/document/edit.js.map +1 -1
  117. package/dist/document/expr/evaluate.d.ts +17 -1
  118. package/dist/document/expr/evaluate.d.ts.map +1 -1
  119. package/dist/document/expr/evaluate.js +110 -2
  120. package/dist/document/expr/evaluate.js.map +1 -1
  121. package/dist/document/expr/index.d.ts +1 -0
  122. package/dist/document/expr/index.d.ts.map +1 -1
  123. package/dist/document/expr/index.js +2 -0
  124. package/dist/document/expr/index.js.map +1 -1
  125. package/dist/document/expr/typing.d.ts +24 -0
  126. package/dist/document/expr/typing.d.ts.map +1 -0
  127. package/dist/document/expr/typing.js +219 -0
  128. package/dist/document/expr/typing.js.map +1 -0
  129. package/dist/document/expr/when.d.ts +52 -0
  130. package/dist/document/expr/when.d.ts.map +1 -0
  131. package/dist/document/expr/when.js +215 -0
  132. package/dist/document/expr/when.js.map +1 -0
  133. package/dist/document/expr-type-findings.d.ts +5 -0
  134. package/dist/document/expr-type-findings.d.ts.map +1 -0
  135. package/dist/document/expr-type-findings.js +90 -0
  136. package/dist/document/expr-type-findings.js.map +1 -0
  137. package/dist/document/format-words.d.ts +1 -0
  138. package/dist/document/format-words.d.ts.map +1 -1
  139. package/dist/document/format-words.js +2 -2
  140. package/dist/document/format-words.js.map +1 -1
  141. package/dist/document/index.d.ts +6 -3
  142. package/dist/document/index.d.ts.map +1 -1
  143. package/dist/document/index.js +5 -2
  144. package/dist/document/index.js.map +1 -1
  145. package/dist/document/kept-in-step-with.d.ts +20 -0
  146. package/dist/document/kept-in-step-with.d.ts.map +1 -0
  147. package/dist/document/kept-in-step-with.js +38 -0
  148. package/dist/document/kept-in-step-with.js.map +1 -0
  149. package/dist/document/kept-in-step.d.ts.map +1 -1
  150. package/dist/document/kept-in-step.js +3 -1
  151. package/dist/document/kept-in-step.js.map +1 -1
  152. package/dist/document/linked-findings.js +1 -1
  153. package/dist/document/linked-findings.js.map +1 -1
  154. package/dist/document/money.d.ts +10 -2
  155. package/dist/document/money.d.ts.map +1 -1
  156. package/dist/document/money.js +14 -5
  157. package/dist/document/money.js.map +1 -1
  158. package/dist/document/policy-words.d.ts +2 -0
  159. package/dist/document/policy-words.d.ts.map +1 -1
  160. package/dist/document/policy-words.js +11 -1
  161. package/dist/document/policy-words.js.map +1 -1
  162. package/dist/document/rule-line.d.ts +7 -3
  163. package/dist/document/rule-line.d.ts.map +1 -1
  164. package/dist/document/rule-line.js +17 -2
  165. package/dist/document/rule-line.js.map +1 -1
  166. package/dist/document/rule-reads.d.ts.map +1 -1
  167. package/dist/document/rule-reads.js +3 -1
  168. package/dist/document/rule-reads.js.map +1 -1
  169. package/dist/document/rules.d.ts +30 -0
  170. package/dist/document/rules.d.ts.map +1 -1
  171. package/dist/document/rules.js +74 -0
  172. package/dist/document/rules.js.map +1 -1
  173. package/dist/document/schema.d.ts +110 -2
  174. package/dist/document/schema.d.ts.map +1 -1
  175. package/dist/document/schema.js +125 -10
  176. package/dist/document/schema.js.map +1 -1
  177. package/dist/document/template-parse.d.ts.map +1 -1
  178. package/dist/document/template-parse.js +7 -1
  179. package/dist/document/template-parse.js.map +1 -1
  180. package/dist/document/template.d.ts +2 -0
  181. package/dist/document/template.d.ts.map +1 -1
  182. package/dist/document/template.js +10 -1
  183. package/dist/document/template.js.map +1 -1
  184. package/dist/document/to-document.d.ts.map +1 -1
  185. package/dist/document/to-document.js +5 -3
  186. package/dist/document/to-document.js.map +1 -1
  187. package/dist/document/workflow-spec.d.ts +72 -0
  188. package/dist/document/workflow-spec.d.ts.map +1 -0
  189. package/dist/document/workflow-spec.js +45 -0
  190. package/dist/document/workflow-spec.js.map +1 -0
  191. package/dist/document.schema.json +1143 -50
  192. package/dist/history.d.ts.map +1 -1
  193. package/dist/history.js +2 -0
  194. package/dist/history.js.map +1 -1
  195. package/dist/index.d.ts +11 -8
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +8 -5
  198. package/dist/index.js.map +1 -1
  199. package/dist/installation.d.ts +1 -1
  200. package/dist/invariants/types.d.ts +7 -2
  201. package/dist/invariants/types.d.ts.map +1 -1
  202. package/dist/job-findings.d.ts +5 -0
  203. package/dist/job-findings.d.ts.map +1 -1
  204. package/dist/job-findings.js +9 -3
  205. package/dist/job-findings.js.map +1 -1
  206. package/dist/keep-linked.d.ts +45 -0
  207. package/dist/keep-linked.d.ts.map +1 -0
  208. package/dist/keep-linked.js +188 -0
  209. package/dist/keep-linked.js.map +1 -0
  210. package/dist/lines.d.ts.map +1 -1
  211. package/dist/lines.js +6 -2
  212. package/dist/lines.js.map +1 -1
  213. package/dist/mutations/derive-edits.js +2 -2
  214. package/dist/mutations/propose-changes.d.ts +24 -0
  215. package/dist/mutations/propose-changes.d.ts.map +1 -0
  216. package/dist/mutations/propose-changes.js +30 -0
  217. package/dist/mutations/propose-changes.js.map +1 -0
  218. package/dist/mutations/types.d.ts +9 -0
  219. package/dist/mutations/types.d.ts.map +1 -1
  220. package/dist/mutations/vote-suggestion.d.ts +97 -0
  221. package/dist/mutations/vote-suggestion.d.ts.map +1 -0
  222. package/dist/mutations/vote-suggestion.js +59 -0
  223. package/dist/mutations/vote-suggestion.js.map +1 -0
  224. package/dist/mutations/words.js +3 -3
  225. package/dist/navigate.d.ts +7 -3
  226. package/dist/navigate.d.ts.map +1 -1
  227. package/dist/navigate.js +7 -3
  228. package/dist/navigate.js.map +1 -1
  229. package/dist/ops/digest.d.ts +3 -1
  230. package/dist/ops/digest.d.ts.map +1 -1
  231. package/dist/ops/digest.js +7 -2
  232. package/dist/ops/digest.js.map +1 -1
  233. package/dist/ops/lineage.d.ts +29 -2
  234. package/dist/ops/lineage.d.ts.map +1 -1
  235. package/dist/ops/lineage.js +12 -4
  236. package/dist/ops/lineage.js.map +1 -1
  237. package/dist/ops/log.d.ts.map +1 -1
  238. package/dist/ops/log.js +13 -2
  239. package/dist/ops/log.js.map +1 -1
  240. package/dist/ops/suggestions.d.ts +75 -1
  241. package/dist/ops/suggestions.d.ts.map +1 -1
  242. package/dist/ops/suggestions.js +123 -6
  243. package/dist/ops/suggestions.js.map +1 -1
  244. package/dist/ops/tidying.d.ts.map +1 -1
  245. package/dist/ops/tidying.js +6 -1
  246. package/dist/ops/tidying.js.map +1 -1
  247. package/dist/ops/types.d.ts +41 -0
  248. package/dist/ops/types.d.ts.map +1 -1
  249. package/dist/ops/types.js.map +1 -1
  250. package/dist/ops/undo.d.ts.map +1 -1
  251. package/dist/ops/undo.js +17 -0
  252. package/dist/ops/undo.js.map +1 -1
  253. package/dist/permissions/policy.d.ts +7 -0
  254. package/dist/permissions/policy.d.ts.map +1 -1
  255. package/dist/permissions/policy.js +12 -0
  256. package/dist/permissions/policy.js.map +1 -1
  257. package/dist/permissions/types.d.ts +27 -0
  258. package/dist/permissions/types.d.ts.map +1 -1
  259. package/dist/permissions/types.js.map +1 -1
  260. package/dist/place-names.d.ts +42 -0
  261. package/dist/place-names.d.ts.map +1 -0
  262. package/dist/place-names.js +43 -0
  263. package/dist/place-names.js.map +1 -0
  264. package/dist/places.d.ts +12 -0
  265. package/dist/places.d.ts.map +1 -1
  266. package/dist/places.js +37 -1
  267. package/dist/places.js.map +1 -1
  268. package/dist/scene.d.ts +2 -0
  269. package/dist/scene.d.ts.map +1 -1
  270. package/dist/scene.js +2 -0
  271. package/dist/scene.js.map +1 -1
  272. package/dist/schema/amount-mark.d.ts +2 -0
  273. package/dist/schema/amount-mark.d.ts.map +1 -1
  274. package/dist/schema/amount-mark.js.map +1 -1
  275. package/dist/schema/amount-words.js +2 -2
  276. package/dist/schema/amount-words.js.map +1 -1
  277. package/dist/schema/choice-words.js +2 -2
  278. package/dist/schema/define-node.d.ts +8 -2
  279. package/dist/schema/define-node.d.ts.map +1 -1
  280. package/dist/schema/define-node.js +2 -2
  281. package/dist/schema/define-node.js.map +1 -1
  282. package/dist/schema/humanize.d.ts +17 -0
  283. package/dist/schema/humanize.d.ts.map +1 -1
  284. package/dist/schema/humanize.js +28 -1
  285. package/dist/schema/humanize.js.map +1 -1
  286. package/dist/schema/reading.d.ts +8 -0
  287. package/dist/schema/reading.d.ts.map +1 -1
  288. package/dist/schema/reading.js +16 -2
  289. package/dist/schema/reading.js.map +1 -1
  290. package/dist/schema/types.d.ts +8 -0
  291. package/dist/schema/types.d.ts.map +1 -1
  292. package/dist/schema/value-words.js +2 -2
  293. package/dist/schema/value-words.js.map +1 -1
  294. package/dist/starting-document.d.ts +47 -2
  295. package/dist/starting-document.d.ts.map +1 -1
  296. package/dist/starting-document.js +66 -8
  297. package/dist/starting-document.js.map +1 -1
  298. package/dist/store.d.ts +75 -1
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +305 -29
  301. package/dist/store.js.map +1 -1
  302. package/dist/sync/connection.d.ts +35 -6
  303. package/dist/sync/connection.d.ts.map +1 -1
  304. package/dist/sync/connection.js +252 -47
  305. package/dist/sync/connection.js.map +1 -1
  306. package/dist/sync/engine.d.ts +83 -0
  307. package/dist/sync/engine.d.ts.map +1 -1
  308. package/dist/sync/engine.js +157 -4
  309. package/dist/sync/engine.js.map +1 -1
  310. package/dist/sync/google-calendar.d.ts +8 -0
  311. package/dist/sync/google-calendar.d.ts.map +1 -1
  312. package/dist/sync/google-calendar.js +30 -3
  313. package/dist/sync/google-calendar.js.map +1 -1
  314. package/dist/sync/guest-words.d.ts +9 -0
  315. package/dist/sync/guest-words.d.ts.map +1 -0
  316. package/dist/sync/guest-words.js +41 -0
  317. package/dist/sync/guest-words.js.map +1 -0
  318. package/dist/sync/guests.d.ts +44 -0
  319. package/dist/sync/guests.d.ts.map +1 -0
  320. package/dist/sync/guests.js +57 -0
  321. package/dist/sync/guests.js.map +1 -0
  322. package/dist/sync/index.d.ts +8 -5
  323. package/dist/sync/index.d.ts.map +1 -1
  324. package/dist/sync/index.js +2 -0
  325. package/dist/sync/index.js.map +1 -1
  326. package/dist/sync/notion-stub.d.ts +4 -1
  327. package/dist/sync/notion-stub.d.ts.map +1 -1
  328. package/dist/sync/notion-stub.js +40 -0
  329. package/dist/sync/notion-stub.js.map +1 -1
  330. package/dist/sync/notion.d.ts +43 -2
  331. package/dist/sync/notion.d.ts.map +1 -1
  332. package/dist/sync/notion.js +274 -140
  333. package/dist/sync/notion.js.map +1 -1
  334. package/dist/sync/status.d.ts +43 -0
  335. package/dist/sync/status.d.ts.map +1 -0
  336. package/dist/sync/status.js +45 -0
  337. package/dist/sync/status.js.map +1 -0
  338. package/dist/sync/types.d.ts +64 -0
  339. package/dist/sync/types.d.ts.map +1 -1
  340. package/dist/sync/types.js.map +1 -1
  341. package/dist/testing.js +1 -1
  342. package/dist/testing.js.map +1 -1
  343. package/dist/theme/contrast.d.ts +2 -0
  344. package/dist/theme/contrast.d.ts.map +1 -1
  345. package/dist/theme/contrast.js +4 -0
  346. package/dist/theme/contrast.js.map +1 -1
  347. package/dist/theme/ground.d.ts +1 -2
  348. package/dist/theme/ground.d.ts.map +1 -1
  349. package/dist/theme/ground.js +2 -5
  350. package/dist/theme/ground.js.map +1 -1
  351. package/dist/theme/marks.d.ts +14 -2
  352. package/dist/theme/marks.d.ts.map +1 -1
  353. package/dist/theme/marks.js +20 -3
  354. package/dist/theme/marks.js.map +1 -1
  355. package/dist/theme/types.d.ts +22 -0
  356. package/dist/theme/types.d.ts.map +1 -1
  357. package/dist/theme/types.js.map +1 -1
  358. package/dist/tidying.d.ts +79 -4
  359. package/dist/tidying.d.ts.map +1 -1
  360. package/dist/tidying.js +216 -9
  361. package/dist/tidying.js.map +1 -1
  362. package/dist/trait-vocabulary.d.ts +17 -0
  363. package/dist/trait-vocabulary.d.ts.map +1 -0
  364. package/dist/trait-vocabulary.js +16 -0
  365. package/dist/trait-vocabulary.js.map +1 -0
  366. package/dist/traits.d.ts +14 -7
  367. package/dist/traits.d.ts.map +1 -1
  368. package/dist/traits.js +33 -12
  369. package/dist/traits.js.map +1 -1
  370. package/dist/validate-graph.d.ts +2 -1
  371. package/dist/validate-graph.d.ts.map +1 -1
  372. package/dist/validate-graph.js +32 -1
  373. package/dist/validate-graph.js.map +1 -1
  374. package/dist/version.d.ts +1 -1
  375. package/dist/version.js +1 -1
  376. package/dist/words.d.ts +4 -1
  377. package/dist/words.d.ts.map +1 -1
  378. package/dist/words.js +4 -1
  379. package/dist/words.js.map +1 -1
  380. package/dist/workflow-shape.d.ts +217 -0
  381. package/dist/workflow-shape.d.ts.map +1 -0
  382. package/dist/workflow-shape.js +31 -0
  383. package/dist/workflow-shape.js.map +1 -0
  384. package/dist/workflows/findings.d.ts +13 -0
  385. package/dist/workflows/findings.d.ts.map +1 -0
  386. package/dist/workflows/findings.js +157 -0
  387. package/dist/workflows/findings.js.map +1 -0
  388. package/dist/workflows/generate-words.d.ts +12 -0
  389. package/dist/workflows/generate-words.d.ts.map +1 -0
  390. package/dist/workflows/generate-words.js +25 -0
  391. package/dist/workflows/generate-words.js.map +1 -0
  392. package/dist/workflows/generate.d.ts +59 -0
  393. package/dist/workflows/generate.d.ts.map +1 -0
  394. package/dist/workflows/generate.js +165 -0
  395. package/dist/workflows/generate.js.map +1 -0
  396. package/dist/workflows/judging.d.ts +17 -0
  397. package/dist/workflows/judging.d.ts.map +1 -0
  398. package/dist/workflows/judging.js +11 -0
  399. package/dist/workflows/judging.js.map +1 -0
  400. package/dist/workflows/next.d.ts +18 -0
  401. package/dist/workflows/next.d.ts.map +1 -0
  402. package/dist/workflows/next.js +75 -0
  403. package/dist/workflows/next.js.map +1 -0
  404. package/dist/workflows/on-the-map.d.ts +70 -0
  405. package/dist/workflows/on-the-map.d.ts.map +1 -0
  406. package/dist/workflows/on-the-map.js +94 -0
  407. package/dist/workflows/on-the-map.js.map +1 -0
  408. package/dist/workflows/policies.d.ts +39 -0
  409. package/dist/workflows/policies.d.ts.map +1 -0
  410. package/dist/workflows/policies.js +95 -0
  411. package/dist/workflows/policies.js.map +1 -0
  412. package/dist/workflows/resolve.d.ts +55 -0
  413. package/dist/workflows/resolve.d.ts.map +1 -0
  414. package/dist/workflows/resolve.js +57 -0
  415. package/dist/workflows/resolve.js.map +1 -0
  416. package/dist/workflows/schedule.d.ts +28 -0
  417. package/dist/workflows/schedule.d.ts.map +1 -0
  418. package/dist/workflows/schedule.js +160 -0
  419. package/dist/workflows/schedule.js.map +1 -0
  420. package/dist/workflows/step-act.d.ts +6 -0
  421. package/dist/workflows/step-act.d.ts.map +1 -0
  422. package/dist/workflows/step-act.js +79 -0
  423. package/dist/workflows/step-act.js.map +1 -0
  424. package/dist/workflows/step-agent.d.ts +4 -0
  425. package/dist/workflows/step-agent.d.ts.map +1 -0
  426. package/dist/workflows/step-agent.js +55 -0
  427. package/dist/workflows/step-agent.js.map +1 -0
  428. package/dist/workflows/step-archive.d.ts +8 -0
  429. package/dist/workflows/step-archive.d.ts.map +1 -0
  430. package/dist/workflows/step-archive.js +74 -0
  431. package/dist/workflows/step-archive.js.map +1 -0
  432. package/dist/workflows/step-classify.d.ts +23 -0
  433. package/dist/workflows/step-classify.d.ts.map +1 -0
  434. package/dist/workflows/step-classify.js +143 -0
  435. package/dist/workflows/step-classify.js.map +1 -0
  436. package/dist/workflows/step-generate.d.ts +7 -0
  437. package/dist/workflows/step-generate.d.ts.map +1 -0
  438. package/dist/workflows/step-generate.js +185 -0
  439. package/dist/workflows/step-generate.js.map +1 -0
  440. package/dist/workflows/steps.d.ts +75 -0
  441. package/dist/workflows/steps.d.ts.map +1 -0
  442. package/dist/workflows/steps.js +40 -0
  443. package/dist/workflows/steps.js.map +1 -0
  444. package/dist/workflows/triggered.d.ts +22 -0
  445. package/dist/workflows/triggered.d.ts.map +1 -0
  446. package/dist/workflows/triggered.js +52 -0
  447. package/dist/workflows/triggered.js.map +1 -0
  448. package/dist/workflows/values.d.ts +28 -0
  449. package/dist/workflows/values.d.ts.map +1 -0
  450. package/dist/workflows/values.js +75 -0
  451. package/dist/workflows/values.js.map +1 -0
  452. package/dist/workflows/words.d.ts +10 -0
  453. package/dist/workflows/words.d.ts.map +1 -0
  454. package/dist/workflows/words.js +30 -0
  455. package/dist/workflows/words.js.map +1 -0
  456. package/dist/workflows/world.d.ts +23 -0
  457. package/dist/workflows/world.d.ts.map +1 -0
  458. package/dist/workflows/world.js +50 -0
  459. package/dist/workflows/world.js.map +1 -0
  460. package/dist/workflows.d.ts +35 -0
  461. package/dist/workflows.d.ts.map +1 -0
  462. package/dist/workflows.js +20 -0
  463. package/dist/workflows.js.map +1 -0
  464. package/package.json +18 -2
@@ -0,0 +1,165 @@
1
+ import { dayOfMoment, isoToday, ISO_DAY } from "../days.js";
2
+ import { evaluateExpr, NodeSet } from "../document/expr/evaluate.js";
3
+ import { parseExpr } from "../document/expr/parse.js";
4
+ import { shapesOfSchema } from "../document/rules.js";
5
+ import { startOfWeekOf } from "../document/expr/when.js";
6
+ import { isRepeat, occurrences, repeatKey, WEEKDAYS } from "../repeat.js";
7
+ import { weekdaysOf } from "../sync/recurrence.js";
8
+ import { addDays, weekdayOf } from "../wall-time.js";
9
+ import { keyedId } from "./values.js";
10
+ import { DEFAULT_GENERATE_KEY, MOST_GENERATED, MOST_WINDOW_DAYS, WINDOW_WORDS, windowWordsProblem } from "./generate-words.js";
11
+ /*
12
+ * WHAT A GENERATE STEP WANTS MADE (Roadmap f-job-generate-from-pattern),
13
+ * worked out and never kept: the days of its window, every day a source
14
+ * record's date falls on in them — a date, a date that repeats
15
+ * (`repeat.ts`: skipped days are not among them), a set of weekdays — and
16
+ * for each, the record it wants: its key, the id that key gives it, and
17
+ * its fields as `set` reads them on the source. Running it — making what
18
+ * is not there yet, changing what the source changed and leaving what a
19
+ * person changed — is `@graview/tools/workflows`'.
20
+ */
21
+ /** The days a window covers, from and to (both included), on a day and the app's clock. A week starts on Monday. */
22
+ export function windowDays(window, at) {
23
+ const { today } = at;
24
+ if (typeof window === "string") {
25
+ const said = window.trim().toLowerCase();
26
+ const problem = windowWordsProblem(said);
27
+ if (problem)
28
+ throw new Error(problem);
29
+ const monday = startOfWeekOf({ day: today }, "mon");
30
+ if (said === "today")
31
+ return { from: today, to: today };
32
+ if (said === "tomorrow")
33
+ return { from: addDays(today, 1), to: addDays(today, 1) };
34
+ if (said === "this week")
35
+ return { from: monday, to: addDays(monday, 6) };
36
+ if (said === "next week")
37
+ return { from: addDays(monday, 7), to: addDays(monday, 13) };
38
+ const days = Number(WINDOW_WORDS.exec(said)[1]);
39
+ return { from: today, to: addDays(today, days - 1) };
40
+ }
41
+ const day = (expr, end) => {
42
+ const value = at.evaluate ? at.evaluate(expr) : null;
43
+ const read = typeof value === "string" ? dayOfMoment(value, at.zone) : undefined;
44
+ if (!read)
45
+ throw new Error(`the window's ${end} (${expr}) is not a day`);
46
+ return read;
47
+ };
48
+ const from = day(window.from, "from");
49
+ const to = day(window.to, "to");
50
+ if (to < from)
51
+ throw new Error(`the window ends (${to}) before it begins (${from})`);
52
+ if (addDays(from, MOST_WINDOW_DAYS - 1) < to)
53
+ throw new Error(`the window is longer than ${MOST_WINDOW_DAYS} days`);
54
+ return { from, to };
55
+ }
56
+ /** The days a record's date falls on between two days: a date, a date that repeats, or a set of weekdays. Each as the record says it (a moment keeps its time of day). */
57
+ export function datesIn(node, field, window, zone) {
58
+ const value = node[field];
59
+ const repeat = node[repeatKey(field)];
60
+ if (typeof value === "string" && isRepeat(repeat))
61
+ return occurrences(value, repeat, { from: window.from, to: window.to });
62
+ if (typeof value === "string") {
63
+ const day = dayOfMoment(value, zone);
64
+ if (day)
65
+ return day >= window.from && day <= window.to ? [value] : [];
66
+ }
67
+ const weekdays = weekdaysOf(value);
68
+ if (weekdays.length === 0)
69
+ return [];
70
+ const out = [];
71
+ for (let day = window.from; day <= window.to; day = addDays(day, 1))
72
+ if (weekdays.includes(WEEKDAYS[weekdayOf(day)]))
73
+ out.push(day);
74
+ return out;
75
+ }
76
+ const asValue = (value) => (value instanceof NodeSet ? value.nodes.map((node) => node.id) : value !== null && typeof value === "object" && !Array.isArray(value) && typeof value.id === "string" ? value.id : value);
77
+ /** A key's `{field}` template read: `source`, `date` (the day), `kind`, or the source's own field. */
78
+ function keyOf(template, node, kind, day) {
79
+ return template.replace(/\{([^{}|\s]+)(?:\s*\|[^{}]*)?\}/g, (_all, name) => {
80
+ if (name === "source" || name === "id")
81
+ return node.id;
82
+ if (name === "date")
83
+ return day;
84
+ if (name === "kind")
85
+ return kind;
86
+ const value = node[name];
87
+ return value === undefined || value === null ? "" : typeof value === "string" ? value : JSON.stringify(value);
88
+ });
89
+ }
90
+ /** WHAT A GENERATE STEP WANTS, on the graph as it stands: every record, in day order. */
91
+ export function generateWants(step, reading) {
92
+ const zone = reading.timeZone ?? "UTC";
93
+ const today = reading.today ?? isoToday(zone, reading.now);
94
+ const now = new Date(reading.now).toISOString();
95
+ const kinds = shapesOfSchema(reading.schema);
96
+ const base = { graph: reading.graph, kinds, today, now, timeZone: zone, ...(reading.locale ? { locale: reading.locale } : {}) };
97
+ const parsed = new Map();
98
+ const parse = (source) => {
99
+ let expr = parsed.get(source);
100
+ if (!expr)
101
+ parsed.set(source, (expr = parseExpr(source)));
102
+ return expr;
103
+ };
104
+ const problems = [];
105
+ let window;
106
+ try {
107
+ window = windowDays(step.window, { today, zone, evaluate: (expr) => evaluateExpr(parse(expr), { ...base, subject: null }) });
108
+ }
109
+ catch (e) {
110
+ return { from: today, to: today, wanted: [], problems: [{ why: e instanceof Error ? e.message : String(e) }] };
111
+ }
112
+ const wanted = [];
113
+ const seen = new Set();
114
+ const template = step.key ?? DEFAULT_GENERATE_KEY;
115
+ for (const from of step.from) {
116
+ if (!reading.schema.tryDefinition(from.kind)) {
117
+ problems.push({ why: `"${from.kind}" is not a kind of this app` });
118
+ continue;
119
+ }
120
+ for (const node of reading.graph.nodesOfKind(from.kind)) {
121
+ try {
122
+ if (from.where !== undefined && evaluateExpr(parse(from.where), { ...base, subject: node }) !== true)
123
+ continue;
124
+ for (const date of datesIn(node, from.dates, window, zone)) {
125
+ const day = ISO_DAY.test(date) ? date : (dayOfMoment(date, zone) ?? date.slice(0, 10));
126
+ const key = keyOf(template, node, from.kind, day);
127
+ if (seen.has(key))
128
+ continue;
129
+ seen.add(key);
130
+ const values = {};
131
+ for (const [field, spec] of Object.entries(step.set ?? {}))
132
+ values[field] = valueOf(spec, { node, date, today, now, read: (expr) => evaluateExpr(parse(expr), { ...base, subject: node, bindings: { date, source: node.id } }) });
133
+ wanted.push({ source: node.id, sourceKind: from.kind, date, day, key, id: keyedId(step.generate, reading.workflow, key), values });
134
+ if (wanted.length >= MOST_GENERATED) {
135
+ problems.push({ why: `it wants more than ${MOST_GENERATED} records in one run; the rest wait for the next` });
136
+ return { ...window, wanted: sorted(wanted), problems };
137
+ }
138
+ }
139
+ }
140
+ catch (e) {
141
+ problems.push({ source: node.id, why: e instanceof Error ? e.message : String(e) });
142
+ }
143
+ }
144
+ }
145
+ return { ...window, wanted: sorted(wanted), problems };
146
+ }
147
+ const sorted = (wanted) => wanted.sort((a, b) => (a.date < b.date ? -1 : a.date > b.date ? 1 : a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
148
+ /** A value `set` gives, read on the source: `$date`, `$source`, `$today`, `$now`, `{ expr }`, or itself. */
149
+ function valueOf(spec, at) {
150
+ if (typeof spec === "string") {
151
+ if (spec === "$date")
152
+ return at.date;
153
+ if (spec === "$source" || spec === "$subject")
154
+ return at.node.id;
155
+ if (spec === "$today")
156
+ return at.today;
157
+ if (spec === "$now")
158
+ return at.now;
159
+ return spec;
160
+ }
161
+ if (spec !== null && typeof spec === "object" && !Array.isArray(spec))
162
+ return asValue(at.read(spec.expr));
163
+ return spec;
164
+ }
165
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/workflows/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** A workflow judged for an edit: what refuses it, what is said of it, and its line. */
2
+ export interface WorkflowJudged {
3
+ readonly errors: readonly {
4
+ readonly code: string;
5
+ readonly path: string;
6
+ readonly message: string;
7
+ readonly fix: string;
8
+ }[];
9
+ readonly warnings: readonly string[];
10
+ /** "Every day at 3 AM, one step": how the edit says it. */
11
+ readonly said: string;
12
+ }
13
+ export interface WorkflowJudging {
14
+ judge?: (name: string, workflow: unknown, document: unknown) => WorkflowJudged;
15
+ }
16
+ export declare const WORKFLOW_JUDGING: WorkflowJudging;
17
+ //# sourceMappingURL=judging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judging.d.ts","sourceRoot":"","sources":["../../src/workflows/judging.ts"],"names":[],"mappings":"AAUA,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7H,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,cAAc,CAAC;CAChF;AAED,eAAO,MAAM,gBAAgB,EAAE,eAAoI,CAAC"}
@@ -0,0 +1,11 @@
1
+ /*
2
+ * WHERE AN EDIT FINDS THE WORKFLOW CHECKER. `editDocument` is on a page,
3
+ * and the checker — the shapes of every step kind, the schedule reader, the
4
+ * rule reader — is not: it fills this slot as it loads
5
+ * (`./findings.ts`, which `@graview/core/check` and
6
+ * `@graview/core/workflows` both bring), and an edit asks it when it is
7
+ * there. Without it, an edit keeps a workflow that is shaped as one and
8
+ * leaves the rest to `graview check`. One slot per realm, as `VOTING` is.
9
+ */
10
+ export const WORKFLOW_JUDGING = (globalThis[Symbol.for("@graview/core:workflow-judging")] ??= {});
11
+ //# sourceMappingURL=judging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judging.js","sourceRoot":"","sources":["../../src/workflows/judging.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,MAAM,CAAC,MAAM,gBAAgB,GAAoB,CAAE,UAA0D,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type Schedule } from "./schedule.js";
2
+ /**
3
+ * WHEN A SCHEDULE NEXT RUNS, after a moment: on the wall clock of `zone`
4
+ * (the runtime's when unsaid), DST-correct. Undefined when it never does
5
+ * in the next five years ("month 31" in a schedule that only says February).
6
+ */
7
+ export declare function nextOf(schedule: Schedule, after: Date | number, zone?: string): Date | undefined;
8
+ /**
9
+ * WHEN A WORKFLOW NEXT RUNS ON ITS CLOCK, after a moment: the earliest of
10
+ * its `every` and `cron` triggers, on the wall clock of `zone` (the brand's
11
+ * `timeZone`). Undefined for one that is paused, has no clock, or whose
12
+ * schedules do not read.
13
+ */
14
+ export declare function nextRunAt(workflow: {
15
+ readonly when: readonly object[];
16
+ readonly status?: string;
17
+ }, after: Date | number, zone?: string): Date | undefined;
18
+ //# sourceMappingURL=next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/workflows/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAiC1D;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAchG;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAUzJ"}
@@ -0,0 +1,75 @@
1
+ import { instantIn, wallIn } from "../days.js";
2
+ import { scheduleOf } from "./schedule.js";
3
+ /*
4
+ * WHEN A SCHEDULE NEXT RUNS, as arithmetic on the wall clock: apart from
5
+ * reading one (`./schedule.ts`), which the checker needs, so `graview
6
+ * check` and a host's worker carry none of this. On `@graview/core/workflows`.
7
+ */
8
+ const nextDay = (day) => new Date(Date.UTC(+day.slice(0, 4), +day.slice(5, 7) - 1, +day.slice(8, 10) + 1)).toISOString().slice(0, 10);
9
+ const weekdayOf = (day) => new Date(`${day}T00:00:00Z`).getUTCDay();
10
+ function dayRuns(schedule, day) {
11
+ if (!schedule.months.has(+day.slice(5, 7)))
12
+ return false;
13
+ const onDay = schedule.days.has(+day.slice(8, 10));
14
+ const onWeekday = schedule.weekdays.has(weekdayOf(day));
15
+ // Cron's rule: narrowed both ways, either runs it.
16
+ return schedule.daysSaid && schedule.weekdaysSaid ? onDay || onWeekday : onDay && onWeekday;
17
+ }
18
+ /** The instant a wall time on a day runs: a time the clock skips that day runs the moment the clock jumps past it. */
19
+ function runsAt(day, minutes, zone) {
20
+ const instant = instantIn(day, minutes, zone);
21
+ const there = wallIn(instant, zone);
22
+ if (there.day === day && there.minutes === minutes)
23
+ return instant;
24
+ // Skipped: the first instant on the wall at or after it.
25
+ for (let later = minutes + 1; later < minutes + 180 && later < 24 * 60; later++) {
26
+ const at = instantIn(day, later, zone);
27
+ const wall = wallIn(at, zone);
28
+ if (wall.day === day && wall.minutes === later)
29
+ return at;
30
+ }
31
+ return instant;
32
+ }
33
+ /**
34
+ * WHEN A SCHEDULE NEXT RUNS, after a moment: on the wall clock of `zone`
35
+ * (the runtime's when unsaid), DST-correct. Undefined when it never does
36
+ * in the next five years ("month 31" in a schedule that only says February).
37
+ */
38
+ export function nextOf(schedule, after, zone) {
39
+ const from = typeof after === "number" ? after : after.getTime();
40
+ const hours = [...schedule.hours].sort((a, b) => a - b);
41
+ const minutes = [...schedule.minutes].sort((a, b) => a - b);
42
+ let day = wallIn(from, zone).day;
43
+ for (let i = 0; i < 366 * 5; i++, day = nextDay(day)) {
44
+ if (!dayRuns(schedule, day))
45
+ continue;
46
+ for (const hour of hours)
47
+ for (const minute of minutes) {
48
+ const at = runsAt(day, hour * 60 + minute, zone);
49
+ if (at > from)
50
+ return new Date(at);
51
+ }
52
+ }
53
+ return undefined;
54
+ }
55
+ /**
56
+ * WHEN A WORKFLOW NEXT RUNS ON ITS CLOCK, after a moment: the earliest of
57
+ * its `every` and `cron` triggers, on the wall clock of `zone` (the brand's
58
+ * `timeZone`). Undefined for one that is paused, has no clock, or whose
59
+ * schedules do not read.
60
+ */
61
+ export function nextRunAt(workflow, after, zone) {
62
+ if (workflow.status === "paused")
63
+ return undefined;
64
+ let soonest;
65
+ for (const trigger of workflow.when) {
66
+ const schedule = scheduleOf(trigger);
67
+ if (schedule === undefined || typeof schedule === "string")
68
+ continue;
69
+ const next = nextOf(schedule, after, zone);
70
+ if (next && (!soonest || next < soonest))
71
+ soonest = next;
72
+ }
73
+ return soonest;
74
+ }
75
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/workflows/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAC;AAE1D;;;;GAIG;AAEH,MAAM,OAAO,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtJ,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,SAAS,EAAE,CAAC;AAEpF,SAAS,OAAO,CAAC,QAAkB,EAAE,GAAW;IAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,mDAAmD;IACnD,OAAO,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;AAC9F,CAAC;AAED,sHAAsH;AACtH,SAAS,MAAM,CAAC,GAAW,EAAE,OAAe,EAAE,IAAwB;IACpE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACnE,yDAAyD;IACzD,KAAK,IAAI,KAAK,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,GAAG,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QAChF,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,OAAO,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,QAAkB,EAAE,KAAoB,EAAE,IAAa;IAC5E,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;YAAE,SAAS;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,IAAI,EAAE,GAAG,IAAI;oBAAE,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,QAAwE,EAAE,KAAoB,EAAE,IAAa;IACrI,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,OAAyB,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,OAA4C,CAAC,CAAC;QAC1E,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,SAAS;QACrE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC;IAC3D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { GraviewApp } from "../app.js";
2
+ import type { AppWorkflows } from "../workflow-shape.js";
3
+ import type { AnySchema } from "../schema/schema.js";
4
+ /** A workflow as the Scene draws it: its name, title and status, and the kinds it reads and writes. */
5
+ export interface MapWorkflow {
6
+ readonly name: string;
7
+ readonly title: string;
8
+ readonly status: "active" | "paused";
9
+ /** Kinds its steps read, and what starts it on a change, in the order they say them. */
10
+ readonly reads: readonly string[];
11
+ /** Kinds its steps may write. */
12
+ readonly writes: readonly string[];
13
+ }
14
+ /** An act as the map reads it: the kinds it acts on and the kinds it makes. */
15
+ export interface MapAct {
16
+ readonly name: string;
17
+ readonly subject?: {
18
+ readonly kinds: readonly string[] | "*";
19
+ } | undefined;
20
+ readonly creates?: readonly string[] | undefined;
21
+ }
22
+ /**
23
+ * Every workflow the app declares (`declaredWorkflows(app)`, or a
24
+ * compiled app's document's `workflows`), as the Scene draws it, in
25
+ * declared order, given every act the app has (`store.allMutations()`: the derived
26
+ * ones too). Dreaming, built in and at work on every district, is not drawn.
27
+ */
28
+ export declare function workflowsOnTheMap<S extends AnySchema>(app: Pick<GraviewApp<S>, "schema">, workflows: AppWorkflows | undefined, acts: readonly MapAct[]): readonly MapWorkflow[];
29
+ /** A plot as a spot is found beside it: its corner cell and its side, in lattice cells. */
30
+ export interface SpotPlot {
31
+ readonly col: number;
32
+ readonly row: number;
33
+ readonly side: number;
34
+ }
35
+ /** Where a workflow stands on the lattice: the kind it stands beside, and the point, in lattice cells. */
36
+ export interface WorkflowSpot {
37
+ readonly name: string;
38
+ /** The district it stands beside: the first kind it writes that is on the map, else the first it reads. */
39
+ readonly beside: string;
40
+ readonly col: number;
41
+ readonly row: number;
42
+ }
43
+ /**
44
+ * WHERE EACH WORKFLOW STANDS: in the street along the right edge of the
45
+ * district it writes first — a cell out from the curb, down the edge, a
46
+ * cell apart for a second and a third beside the same district — so it
47
+ * reads as at work on that district and never stands on any district's
48
+ * ground. One that touches no kind on the map is not placed.
49
+ */
50
+ export declare function workflowSpots(workflows: readonly MapWorkflow[], plots: ReadonlyMap<string, SpotPlot>): readonly WorkflowSpot[];
51
+ /** A run as `lastRunWords` reads it: `WorkflowRun` from `@graview/tools/workflows`, or any record with these. */
52
+ export interface RunSaid {
53
+ readonly finished: string;
54
+ readonly outcome: "ok" | "nothing-new" | "partial" | "held" | "failed";
55
+ readonly dry: boolean;
56
+ readonly made: readonly string[];
57
+ readonly changed: readonly string[];
58
+ readonly archived: readonly string[];
59
+ readonly suggested: readonly string[];
60
+ }
61
+ /** "just now", "5 minutes ago", "2 hours ago", "yesterday", "3 days ago": how long before `now` a moment was. */
62
+ export declare function agoWords(at: string | number | Date, now?: string | number | Date): string;
63
+ /**
64
+ * HOW THE LAST RUN WENT, in words a person reads under a workflow on the
65
+ * map: "Last ran 2 hours ago: made 28, changed 3", "Last ran yesterday:
66
+ * nothing new", "Last ran 5 minutes ago, as a dry run: would make 4",
67
+ * "Last ran 3 days ago and failed". With no run, "Has not run yet".
68
+ */
69
+ export declare function lastRunWords(run: RunSaid | undefined, now?: string | number | Date): string;
70
+ //# sourceMappingURL=on-the-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-the-map.d.ts","sourceRoot":"","sources":["../../src/workflows/on-the-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAqBrD,uGAAuG;AACvG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACrC,wFAAwF;IACxF,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,+EAA+E;AAC/E,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAA;KAAE,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAClD;AAKD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,WAAW,EAAE,CAuB/K;AAED,2FAA2F;AAC3F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0GAA0G;AAC1G,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,SAAS,YAAY,EAAE,CAY9H;AAED,iHAAiH;AACjH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACvE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,iHAAiH;AACjH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,MAAM,GAAG,MAAM,GAAG,IAAiB,GAAG,MAAM,CAQrG;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,GAAE,MAAM,GAAG,MAAM,GAAG,IAAiB,GAAG,MAAM,CAcvG"}
@@ -0,0 +1,94 @@
1
+ import { subjectKindsOf } from "../mutations/derive-edits.js";
2
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ const strings = (value) => (typeof value === "string" ? [value] : Array.isArray(value) ? value.filter((one) => typeof one === "string") : []);
4
+ /**
5
+ * Every workflow the app declares (`declaredWorkflows(app)`, or a
6
+ * compiled app's document's `workflows`), as the Scene draws it, in
7
+ * declared order, given every act the app has (`store.allMutations()`: the derived
8
+ * ones too). Dreaming, built in and at work on every district, is not drawn.
9
+ */
10
+ export function workflowsOnTheMap(app, workflows, acts) {
11
+ const declared = Object.entries(workflows ?? {});
12
+ if (declared.length === 0)
13
+ return [];
14
+ const kinds = new Set(app.schema.kinds);
15
+ const byName = new Map(acts.map((act) => [act.name, act]));
16
+ const actKinds = (name) => {
17
+ const act = byName.get(name);
18
+ return act ? [...subjectKindsOf(app.schema, act), ...(act.creates ?? [])] : [];
19
+ };
20
+ return declared.map(([name, workflow]) => {
21
+ const reads = [];
22
+ const writes = [];
23
+ // What starts it on a change reads that kind: a workflow run when a grocery list is made is wired to grocery lists.
24
+ for (const trigger of (workflow.when ?? []))
25
+ reads.push(...strings(trigger["made"]), ...strings(trigger["changed"]));
26
+ for (const step of (workflow.steps ?? [])) {
27
+ const over = isRecord(step["over"]) ? strings(step["over"]["kind"]) : [];
28
+ const from = Array.isArray(step["from"]) ? step["from"].flatMap((source) => (isRecord(source) ? strings(source["kind"]) : [])) : [];
29
+ reads.push(...over, ...strings(step["reads"]), ...from, ...strings(step["archive"]), ...strings(step["classify"]));
30
+ writes.push(...[...strings(step["act"]), ...strings(step["acts"])].flatMap(actKinds), ...strings(step["generate"]), ...strings(step["archive"]), ...strings(step["classify"]));
31
+ }
32
+ const known = (list) => [...new Set(list)].filter((kind) => kinds.has(kind));
33
+ return { name, title: workflow.title, status: workflow.status === "paused" ? "paused" : "active", reads: known(reads), writes: known(writes) };
34
+ });
35
+ }
36
+ /**
37
+ * WHERE EACH WORKFLOW STANDS: in the street along the right edge of the
38
+ * district it writes first — a cell out from the curb, down the edge, a
39
+ * cell apart for a second and a third beside the same district — so it
40
+ * reads as at work on that district and never stands on any district's
41
+ * ground. One that touches no kind on the map is not placed.
42
+ */
43
+ export function workflowSpots(workflows, plots) {
44
+ const taken = new Map();
45
+ const out = [];
46
+ for (const workflow of workflows) {
47
+ const beside = [...workflow.writes, ...workflow.reads].find((kind) => plots.has(kind));
48
+ if (beside === undefined)
49
+ continue;
50
+ const plot = plots.get(beside);
51
+ const k = taken.get(beside) ?? 0;
52
+ taken.set(beside, k + 1);
53
+ out.push({ name: workflow.name, beside, col: plot.col + plot.side + 1, row: plot.row + 0.5 + k });
54
+ }
55
+ return out;
56
+ }
57
+ /** "just now", "5 minutes ago", "2 hours ago", "yesterday", "3 days ago": how long before `now` a moment was. */
58
+ export function agoWords(at, now = Date.now()) {
59
+ const minutes = Math.floor((new Date(now).getTime() - new Date(at).getTime()) / 60_000);
60
+ if (!Number.isFinite(minutes) || minutes < 1)
61
+ return "just now";
62
+ if (minutes < 60)
63
+ return minutes === 1 ? "a minute ago" : `${minutes} minutes ago`;
64
+ const hours = Math.floor(minutes / 60);
65
+ if (hours < 24)
66
+ return hours === 1 ? "an hour ago" : `${hours} hours ago`;
67
+ const days = Math.floor(hours / 24);
68
+ return days === 1 ? "yesterday" : `${days} days ago`;
69
+ }
70
+ /**
71
+ * HOW THE LAST RUN WENT, in words a person reads under a workflow on the
72
+ * map: "Last ran 2 hours ago: made 28, changed 3", "Last ran yesterday:
73
+ * nothing new", "Last ran 5 minutes ago, as a dry run: would make 4",
74
+ * "Last ran 3 days ago and failed". With no run, "Has not run yet".
75
+ */
76
+ export function lastRunWords(run, now = Date.now()) {
77
+ if (!run)
78
+ return "Has not run yet";
79
+ const when = `Last ran ${agoWords(run.finished, now)}`;
80
+ if (run.outcome === "failed")
81
+ return `${when} and failed`;
82
+ if (run.outcome === "held")
83
+ return `${when}: held back`;
84
+ const counts = [
85
+ [run.made.length, run.dry ? "would make" : "made"],
86
+ [run.changed.length, run.dry ? "would change" : "changed"],
87
+ [run.archived.length, run.dry ? "would set aside" : "set aside"],
88
+ [run.suggested.length, run.dry ? "would suggest" : "suggested"],
89
+ ];
90
+ const said = counts.filter(([count]) => count > 0).map(([count, verb]) => `${verb} ${count}`);
91
+ const what = said.length > 0 ? said.join(", ") : "nothing new";
92
+ return `${when}${run.dry ? ", as a dry run" : ""}: ${what}${run.outcome === "partial" ? " (part of it did not run)" : ""}`;
93
+ }
94
+ //# sourceMappingURL=on-the-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-the-map.js","sourceRoot":"","sources":["../../src/workflows/on-the-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { AnyGraphNode, GraphReader } from "../graph/types.js";
2
+ import type { AnySchema } from "../schema/schema.js";
3
+ import type { WorkflowFinding } from "./steps.js";
4
+ import type { WorkflowWorld } from "./world.js";
5
+ /** One rule a workflow follows: the record it is, its words, its place, and what it applies to. */
6
+ export interface WorkflowPolicy {
7
+ readonly id: string;
8
+ readonly label: string;
9
+ /** The rule, verbatim. */
10
+ readonly action: string;
11
+ readonly order?: number;
12
+ /** A kind's name or a rule-language condition; absent, every record. */
13
+ readonly appliesTo?: string;
14
+ }
15
+ /**
16
+ * THE RULES THAT STAND, IN ORDER: the live records of `follows` whose
17
+ * status does not retire them, by `order` (those with none last), then by
18
+ * label. Nothing when the workflow follows nothing or the kind is not the app's.
19
+ */
20
+ export declare function policiesOf(graph: Pick<GraphReader, "getNode"> & {
21
+ nodesOfKind(kind: string): readonly AnyGraphNode[];
22
+ }, schema: AnySchema, follows: string | undefined): WorkflowPolicy[];
23
+ /**
24
+ * WHETHER A RULE APPLIES TO A RECORD: one that says nothing of what it
25
+ * applies to applies to every record; one that names a kind (its name, or
26
+ * its plural) to that kind's; anything else is read as a condition in the
27
+ * rule language with the record as its subject — a mistake applies to nothing.
28
+ */
29
+ export declare function policyApplies(policy: WorkflowPolicy, record: AnyGraphNode, graph: GraphReader, schema: AnySchema, today?: string): boolean;
30
+ /** Whether a rule says to keep what it applies to: its words begin "keep", "never archive" or "do not archive". */
31
+ export declare const keeps: (policy: WorkflowPolicy) => boolean;
32
+ /**
33
+ * THE RULES, AS AN AGENT STEP IS HANDED THEM: verbatim, numbered in order,
34
+ * under a line that says they are the app's own — or "" when none stand.
35
+ */
36
+ export declare function policyInstruction(policies: readonly WorkflowPolicy[]): string;
37
+ /** What the checker says of `follows`: a kind the app has, or a finding with the fix. */
38
+ export declare function followsFindings(follows: string | undefined, world: WorkflowWorld): WorkflowFinding[];
39
+ //# sourceMappingURL=policies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../src/workflows/policies.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyBhD,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAYD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG;IAAE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAAA;CAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,EAAE,CAqBzL;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAe1I;AAED,mHAAmH;AACnH,eAAO,MAAM,KAAK,GAAI,QAAQ,cAAc,KAAG,OAAyF,CAAC;AAEzI;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAI7E;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,eAAe,EAAE,CAYpG"}