@graview/core 0.1.62 → 0.1.64

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 (340) hide show
  1. package/dist/app.d.ts +12 -0
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/arranging.js +2 -2
  5. package/dist/arranging.js.map +1 -1
  6. package/dist/cli/check/index.d.ts +1 -0
  7. package/dist/cli/check/index.d.ts.map +1 -1
  8. package/dist/cli/check/index.js +1 -0
  9. package/dist/cli/check/index.js.map +1 -1
  10. package/dist/cli/check/workflows.d.ts +11 -0
  11. package/dist/cli/check/workflows.d.ts.map +1 -0
  12. package/dist/cli/check/workflows.js +20 -0
  13. package/dist/cli/check/workflows.js.map +1 -0
  14. package/dist/cli/check.d.ts.map +1 -1
  15. package/dist/cli/check.js +2 -1
  16. package/dist/cli/check.js.map +1 -1
  17. package/dist/cli/describe.d.ts.map +1 -1
  18. package/dist/cli/describe.js +31 -1
  19. package/dist/cli/describe.js.map +1 -1
  20. package/dist/cli/document-schema.d.ts.map +1 -1
  21. package/dist/cli/document-schema.js +9 -0
  22. package/dist/cli/document-schema.js.map +1 -1
  23. package/dist/compose.d.ts +1 -1
  24. package/dist/compose.d.ts.map +1 -1
  25. package/dist/document/amount.d.ts +1 -1
  26. package/dist/document/amount.d.ts.map +1 -1
  27. package/dist/document/amount.js +2 -2
  28. package/dist/document/amount.js.map +1 -1
  29. package/dist/document/blocks.d.ts.map +1 -1
  30. package/dist/document/blocks.js +17 -1
  31. package/dist/document/blocks.js.map +1 -1
  32. package/dist/document/brand-check.d.ts.map +1 -1
  33. package/dist/document/brand-check.js +8 -2
  34. package/dist/document/brand-check.js.map +1 -1
  35. package/dist/document/compile-checked.d.ts.map +1 -1
  36. package/dist/document/compile-checked.js +4 -2
  37. package/dist/document/compile-checked.js.map +1 -1
  38. package/dist/document/compile.d.ts.map +1 -1
  39. package/dist/document/compile.js +48 -9
  40. package/dist/document/compile.js.map +1 -1
  41. package/dist/document/compiled.d.ts +14 -0
  42. package/dist/document/compiled.d.ts.map +1 -1
  43. package/dist/document/compiled.js +39 -4
  44. package/dist/document/compiled.js.map +1 -1
  45. package/dist/document/connection-findings.js +93 -21
  46. package/dist/document/connection-findings.js.map +1 -1
  47. package/dist/document/connection-spec.d.ts +54 -1
  48. package/dist/document/connection-spec.d.ts.map +1 -1
  49. package/dist/document/connection-spec.js +76 -8
  50. package/dist/document/connection-spec.js.map +1 -1
  51. package/dist/document/derives-findings.d.ts +4 -0
  52. package/dist/document/derives-findings.d.ts.map +1 -0
  53. package/dist/document/derives-findings.js +68 -0
  54. package/dist/document/derives-findings.js.map +1 -0
  55. package/dist/document/describe-forms.js +2 -2
  56. package/dist/document/describe-forms.js.map +1 -1
  57. package/dist/document/diff.d.ts +6 -0
  58. package/dist/document/diff.d.ts.map +1 -1
  59. package/dist/document/diff.js +43 -1
  60. package/dist/document/diff.js.map +1 -1
  61. package/dist/document/edit.d.ts +1 -1
  62. package/dist/document/edit.d.ts.map +1 -1
  63. package/dist/document/edit.js +264 -23
  64. package/dist/document/edit.js.map +1 -1
  65. package/dist/document/expr/evaluate.d.ts +7 -0
  66. package/dist/document/expr/evaluate.d.ts.map +1 -1
  67. package/dist/document/expr/evaluate.js +29 -2
  68. package/dist/document/expr/evaluate.js.map +1 -1
  69. package/dist/document/format-words.d.ts +1 -0
  70. package/dist/document/format-words.d.ts.map +1 -1
  71. package/dist/document/format-words.js +2 -2
  72. package/dist/document/format-words.js.map +1 -1
  73. package/dist/document/kept-in-step-with.d.ts +20 -0
  74. package/dist/document/kept-in-step-with.d.ts.map +1 -0
  75. package/dist/document/kept-in-step-with.js +38 -0
  76. package/dist/document/kept-in-step-with.js.map +1 -0
  77. package/dist/document/kept-in-step.d.ts.map +1 -1
  78. package/dist/document/kept-in-step.js +3 -1
  79. package/dist/document/kept-in-step.js.map +1 -1
  80. package/dist/document/money.d.ts +10 -2
  81. package/dist/document/money.d.ts.map +1 -1
  82. package/dist/document/money.js +14 -5
  83. package/dist/document/money.js.map +1 -1
  84. package/dist/document/policy-words.d.ts +2 -0
  85. package/dist/document/policy-words.d.ts.map +1 -1
  86. package/dist/document/policy-words.js +11 -1
  87. package/dist/document/policy-words.js.map +1 -1
  88. package/dist/document/schema.d.ts +46 -1
  89. package/dist/document/schema.d.ts.map +1 -1
  90. package/dist/document/schema.js +48 -8
  91. package/dist/document/schema.js.map +1 -1
  92. package/dist/document/template-parse.d.ts.map +1 -1
  93. package/dist/document/template-parse.js +7 -1
  94. package/dist/document/template-parse.js.map +1 -1
  95. package/dist/document/template.d.ts +2 -0
  96. package/dist/document/template.d.ts.map +1 -1
  97. package/dist/document/template.js +10 -1
  98. package/dist/document/template.js.map +1 -1
  99. package/dist/document/to-document.js +2 -2
  100. package/dist/document/to-document.js.map +1 -1
  101. package/dist/document/workflow-spec.d.ts +72 -0
  102. package/dist/document/workflow-spec.d.ts.map +1 -0
  103. package/dist/document/workflow-spec.js +45 -0
  104. package/dist/document/workflow-spec.js.map +1 -0
  105. package/dist/document.schema.json +883 -4
  106. package/dist/head.d.ts +81 -0
  107. package/dist/head.d.ts.map +1 -0
  108. package/dist/head.js +123 -0
  109. package/dist/head.js.map +1 -0
  110. package/dist/history.d.ts.map +1 -1
  111. package/dist/history.js +2 -0
  112. package/dist/history.js.map +1 -1
  113. package/dist/index.d.ts +7 -5
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +4 -3
  116. package/dist/index.js.map +1 -1
  117. package/dist/installation.d.ts +1 -1
  118. package/dist/job-findings.d.ts +5 -0
  119. package/dist/job-findings.d.ts.map +1 -1
  120. package/dist/job-findings.js +9 -3
  121. package/dist/job-findings.js.map +1 -1
  122. package/dist/keep-linked.d.ts +45 -0
  123. package/dist/keep-linked.d.ts.map +1 -0
  124. package/dist/keep-linked.js +188 -0
  125. package/dist/keep-linked.js.map +1 -0
  126. package/dist/mutations/derive-edits.js +2 -2
  127. package/dist/mutations/propose-changes.d.ts +24 -0
  128. package/dist/mutations/propose-changes.d.ts.map +1 -0
  129. package/dist/mutations/propose-changes.js +30 -0
  130. package/dist/mutations/propose-changes.js.map +1 -0
  131. package/dist/mutations/vote-suggestion.d.ts +30 -0
  132. package/dist/mutations/vote-suggestion.d.ts.map +1 -1
  133. package/dist/mutations/vote-suggestion.js +23 -0
  134. package/dist/mutations/vote-suggestion.js.map +1 -1
  135. package/dist/mutations/words.js +3 -3
  136. package/dist/ops/digest.d.ts +3 -1
  137. package/dist/ops/digest.d.ts.map +1 -1
  138. package/dist/ops/digest.js +7 -2
  139. package/dist/ops/digest.js.map +1 -1
  140. package/dist/ops/lineage.d.ts +19 -2
  141. package/dist/ops/lineage.d.ts.map +1 -1
  142. package/dist/ops/lineage.js +8 -4
  143. package/dist/ops/lineage.js.map +1 -1
  144. package/dist/ops/log.d.ts.map +1 -1
  145. package/dist/ops/log.js +13 -2
  146. package/dist/ops/log.js.map +1 -1
  147. package/dist/ops/suggestions.d.ts +47 -5
  148. package/dist/ops/suggestions.d.ts.map +1 -1
  149. package/dist/ops/suggestions.js +88 -13
  150. package/dist/ops/suggestions.js.map +1 -1
  151. package/dist/ops/tidying.d.ts.map +1 -1
  152. package/dist/ops/tidying.js +6 -1
  153. package/dist/ops/tidying.js.map +1 -1
  154. package/dist/ops/types.d.ts +28 -0
  155. package/dist/ops/types.d.ts.map +1 -1
  156. package/dist/ops/undo.d.ts.map +1 -1
  157. package/dist/ops/undo.js +17 -0
  158. package/dist/ops/undo.js.map +1 -1
  159. package/dist/permissions/policy.d.ts +7 -0
  160. package/dist/permissions/policy.d.ts.map +1 -1
  161. package/dist/permissions/policy.js +12 -0
  162. package/dist/permissions/policy.js.map +1 -1
  163. package/dist/permissions/types.d.ts +27 -0
  164. package/dist/permissions/types.d.ts.map +1 -1
  165. package/dist/permissions/types.js.map +1 -1
  166. package/dist/places.d.ts +10 -0
  167. package/dist/places.d.ts.map +1 -1
  168. package/dist/places.js +35 -1
  169. package/dist/places.js.map +1 -1
  170. package/dist/scene.d.ts +2 -0
  171. package/dist/scene.d.ts.map +1 -1
  172. package/dist/scene.js +2 -0
  173. package/dist/scene.js.map +1 -1
  174. package/dist/schema/amount-mark.d.ts +2 -0
  175. package/dist/schema/amount-mark.d.ts.map +1 -1
  176. package/dist/schema/amount-mark.js.map +1 -1
  177. package/dist/schema/amount-words.js +2 -2
  178. package/dist/schema/amount-words.js.map +1 -1
  179. package/dist/schema/choice-words.js +2 -2
  180. package/dist/schema/define-node.d.ts +8 -2
  181. package/dist/schema/define-node.d.ts.map +1 -1
  182. package/dist/schema/define-node.js +2 -2
  183. package/dist/schema/define-node.js.map +1 -1
  184. package/dist/schema/humanize.d.ts +17 -0
  185. package/dist/schema/humanize.d.ts.map +1 -1
  186. package/dist/schema/humanize.js +28 -1
  187. package/dist/schema/humanize.js.map +1 -1
  188. package/dist/schema/reading.d.ts +8 -0
  189. package/dist/schema/reading.d.ts.map +1 -1
  190. package/dist/schema/reading.js +16 -2
  191. package/dist/schema/reading.js.map +1 -1
  192. package/dist/schema/types.d.ts +8 -0
  193. package/dist/schema/types.d.ts.map +1 -1
  194. package/dist/schema/value-words.js +2 -2
  195. package/dist/schema/value-words.js.map +1 -1
  196. package/dist/starting-document.d.ts +16 -3
  197. package/dist/starting-document.d.ts.map +1 -1
  198. package/dist/starting-document.js +32 -5
  199. package/dist/starting-document.js.map +1 -1
  200. package/dist/store.d.ts +47 -2
  201. package/dist/store.d.ts.map +1 -1
  202. package/dist/store.js +176 -13
  203. package/dist/store.js.map +1 -1
  204. package/dist/sync/connection.d.ts +24 -5
  205. package/dist/sync/connection.d.ts.map +1 -1
  206. package/dist/sync/connection.js +168 -31
  207. package/dist/sync/connection.js.map +1 -1
  208. package/dist/sync/engine.d.ts +97 -0
  209. package/dist/sync/engine.d.ts.map +1 -1
  210. package/dist/sync/engine.js +159 -1
  211. package/dist/sync/engine.js.map +1 -1
  212. package/dist/sync/google-calendar.d.ts.map +1 -1
  213. package/dist/sync/google-calendar.js +18 -1
  214. package/dist/sync/google-calendar.js.map +1 -1
  215. package/dist/sync/guest-words.d.ts +9 -0
  216. package/dist/sync/guest-words.d.ts.map +1 -0
  217. package/dist/sync/guest-words.js +41 -0
  218. package/dist/sync/guest-words.js.map +1 -0
  219. package/dist/sync/index.d.ts +8 -5
  220. package/dist/sync/index.d.ts.map +1 -1
  221. package/dist/sync/index.js +2 -0
  222. package/dist/sync/index.js.map +1 -1
  223. package/dist/sync/notion-stub.d.ts +4 -1
  224. package/dist/sync/notion-stub.d.ts.map +1 -1
  225. package/dist/sync/notion-stub.js +40 -0
  226. package/dist/sync/notion-stub.js.map +1 -1
  227. package/dist/sync/notion.d.ts +44 -2
  228. package/dist/sync/notion.d.ts.map +1 -1
  229. package/dist/sync/notion.js +289 -143
  230. package/dist/sync/notion.js.map +1 -1
  231. package/dist/sync/status.d.ts +43 -0
  232. package/dist/sync/status.d.ts.map +1 -0
  233. package/dist/sync/status.js +46 -0
  234. package/dist/sync/status.js.map +1 -0
  235. package/dist/sync/types.d.ts +60 -0
  236. package/dist/sync/types.d.ts.map +1 -1
  237. package/dist/sync/types.js.map +1 -1
  238. package/dist/theme/marks.d.ts +12 -0
  239. package/dist/theme/marks.d.ts.map +1 -1
  240. package/dist/theme/marks.js +5 -0
  241. package/dist/theme/marks.js.map +1 -1
  242. package/dist/tidying.d.ts +53 -4
  243. package/dist/tidying.d.ts.map +1 -1
  244. package/dist/tidying.js +110 -8
  245. package/dist/tidying.js.map +1 -1
  246. package/dist/validate-graph.d.ts +2 -1
  247. package/dist/validate-graph.d.ts.map +1 -1
  248. package/dist/validate-graph.js +32 -1
  249. package/dist/validate-graph.js.map +1 -1
  250. package/dist/version.d.ts +1 -1
  251. package/dist/version.js +1 -1
  252. package/dist/words.d.ts +4 -1
  253. package/dist/words.d.ts.map +1 -1
  254. package/dist/words.js +4 -1
  255. package/dist/words.js.map +1 -1
  256. package/dist/workflow-shape.d.ts +223 -0
  257. package/dist/workflow-shape.d.ts.map +1 -0
  258. package/dist/workflow-shape.js +31 -0
  259. package/dist/workflow-shape.js.map +1 -0
  260. package/dist/workflows/findings.d.ts +13 -0
  261. package/dist/workflows/findings.d.ts.map +1 -0
  262. package/dist/workflows/findings.js +157 -0
  263. package/dist/workflows/findings.js.map +1 -0
  264. package/dist/workflows/generate-words.d.ts +12 -0
  265. package/dist/workflows/generate-words.d.ts.map +1 -0
  266. package/dist/workflows/generate-words.js +25 -0
  267. package/dist/workflows/generate-words.js.map +1 -0
  268. package/dist/workflows/generate.d.ts +59 -0
  269. package/dist/workflows/generate.d.ts.map +1 -0
  270. package/dist/workflows/generate.js +165 -0
  271. package/dist/workflows/generate.js.map +1 -0
  272. package/dist/workflows/judging.d.ts +17 -0
  273. package/dist/workflows/judging.d.ts.map +1 -0
  274. package/dist/workflows/judging.js +11 -0
  275. package/dist/workflows/judging.js.map +1 -0
  276. package/dist/workflows/next.d.ts +18 -0
  277. package/dist/workflows/next.d.ts.map +1 -0
  278. package/dist/workflows/next.js +75 -0
  279. package/dist/workflows/next.js.map +1 -0
  280. package/dist/workflows/on-the-map.d.ts +79 -0
  281. package/dist/workflows/on-the-map.d.ts.map +1 -0
  282. package/dist/workflows/on-the-map.js +96 -0
  283. package/dist/workflows/on-the-map.js.map +1 -0
  284. package/dist/workflows/policies.d.ts +39 -0
  285. package/dist/workflows/policies.d.ts.map +1 -0
  286. package/dist/workflows/policies.js +95 -0
  287. package/dist/workflows/policies.js.map +1 -0
  288. package/dist/workflows/resolve.d.ts +55 -0
  289. package/dist/workflows/resolve.d.ts.map +1 -0
  290. package/dist/workflows/resolve.js +57 -0
  291. package/dist/workflows/resolve.js.map +1 -0
  292. package/dist/workflows/schedule.d.ts +28 -0
  293. package/dist/workflows/schedule.d.ts.map +1 -0
  294. package/dist/workflows/schedule.js +160 -0
  295. package/dist/workflows/schedule.js.map +1 -0
  296. package/dist/workflows/step-act.d.ts +6 -0
  297. package/dist/workflows/step-act.d.ts.map +1 -0
  298. package/dist/workflows/step-act.js +79 -0
  299. package/dist/workflows/step-act.js.map +1 -0
  300. package/dist/workflows/step-agent.d.ts +4 -0
  301. package/dist/workflows/step-agent.d.ts.map +1 -0
  302. package/dist/workflows/step-agent.js +55 -0
  303. package/dist/workflows/step-agent.js.map +1 -0
  304. package/dist/workflows/step-archive.d.ts +8 -0
  305. package/dist/workflows/step-archive.d.ts.map +1 -0
  306. package/dist/workflows/step-archive.js +74 -0
  307. package/dist/workflows/step-archive.js.map +1 -0
  308. package/dist/workflows/step-classify.d.ts +25 -0
  309. package/dist/workflows/step-classify.d.ts.map +1 -0
  310. package/dist/workflows/step-classify.js +160 -0
  311. package/dist/workflows/step-classify.js.map +1 -0
  312. package/dist/workflows/step-generate.d.ts +7 -0
  313. package/dist/workflows/step-generate.d.ts.map +1 -0
  314. package/dist/workflows/step-generate.js +185 -0
  315. package/dist/workflows/step-generate.js.map +1 -0
  316. package/dist/workflows/steps.d.ts +75 -0
  317. package/dist/workflows/steps.d.ts.map +1 -0
  318. package/dist/workflows/steps.js +40 -0
  319. package/dist/workflows/steps.js.map +1 -0
  320. package/dist/workflows/triggered.d.ts +35 -0
  321. package/dist/workflows/triggered.d.ts.map +1 -0
  322. package/dist/workflows/triggered.js +69 -0
  323. package/dist/workflows/triggered.js.map +1 -0
  324. package/dist/workflows/values.d.ts +28 -0
  325. package/dist/workflows/values.d.ts.map +1 -0
  326. package/dist/workflows/values.js +75 -0
  327. package/dist/workflows/values.js.map +1 -0
  328. package/dist/workflows/words.d.ts +10 -0
  329. package/dist/workflows/words.d.ts.map +1 -0
  330. package/dist/workflows/words.js +30 -0
  331. package/dist/workflows/words.js.map +1 -0
  332. package/dist/workflows/world.d.ts +23 -0
  333. package/dist/workflows/world.d.ts.map +1 -0
  334. package/dist/workflows/world.js +50 -0
  335. package/dist/workflows/world.js.map +1 -0
  336. package/dist/workflows.d.ts +35 -0
  337. package/dist/workflows.d.ts.map +1 -0
  338. package/dist/workflows.js +20 -0
  339. package/dist/workflows.js.map +1 -0
  340. package/package.json +12 -2
@@ -0,0 +1,69 @@
1
+ import { shapesFor } from "../document/computed-values.js";
2
+ import { evaluateExpr, ExprEvalError } from "../document/expr/evaluate.js";
3
+ import { parseExpr } from "../document/expr/parse.js";
4
+ import { matchSubscriptions } from "../subscriptions.js";
5
+ import { workflowAuthor } from "./resolve.js";
6
+ /**
7
+ * Which workflow's run made an op: its `lineage.run` (`workflow:<name>:<started>`),
8
+ * else its author (`workflow:<name>`). Undefined for an op a person, a seat
9
+ * or anything else made.
10
+ */
11
+ export function workflowOrigin(op) {
12
+ const run = op.lineage?.run;
13
+ const fromRun = typeof run === "string" ? /^workflow:([^:]+):/.exec(run) : null;
14
+ if (fromRun)
15
+ return { workflow: fromRun[1], run: run };
16
+ const fromAuthor = typeof op.author?.id === "string" ? /^workflow:([^:]+)$/.exec(op.author.id) : null;
17
+ return fromAuthor ? { workflow: fromAuthor[1] } : undefined;
18
+ }
19
+ /** The ids an op made or changed. */
20
+ const touched = (op) => op.primitives.flatMap((primitive) => (primitive.op === "add-node" ? [primitive.node.id] : "id" in primitive && typeof primitive.id === "string" ? [primitive.id] : []));
21
+ const holds = (where, node, store) => {
22
+ if (where === undefined)
23
+ return true;
24
+ if (!node)
25
+ return false;
26
+ try {
27
+ const value = evaluateExpr(parseExpr(where), { graph: store.graph, subject: node, kinds: shapesFor(store.schema) });
28
+ return value === true;
29
+ }
30
+ catch (error) {
31
+ if (error instanceof ExprEvalError)
32
+ return false;
33
+ return false;
34
+ }
35
+ };
36
+ /** The triggers of a workflow a commit fires, in the order declared. */
37
+ export function triggeredBy(workflow, commit, given) {
38
+ const store = given;
39
+ if ("synced" in commit)
40
+ return workflow.when.filter((trigger) => "synced" in trigger && trigger.synced === commit.synced).map((trigger) => ({ trigger, records: [] }));
41
+ const who = { ...workflowAuthor(workflow) };
42
+ const fired = [];
43
+ workflow.when.forEach((trigger, at) => {
44
+ if (!("made" in trigger) && !("changed" in trigger))
45
+ return;
46
+ const kind = "made" in trigger ? trigger.made : trigger.changed;
47
+ const subscription = { id: `workflow:${workflow.name}:${at}`, who, app: "", when: "made" in trigger ? { on: "created", kind } : { on: "changed", kind }, at: "" };
48
+ const records = new Set();
49
+ for (const match of matchSubscriptions(given, commit.ops, [subscription])) {
50
+ for (const record of match.records) {
51
+ if (record.kind !== kind)
52
+ continue;
53
+ if ("made" in trigger ? record.change !== "created" : record.change !== "changed")
54
+ continue;
55
+ if ("changed" in trigger && trigger.fields?.length && !(record.fields ?? []).some((field) => trigger.fields.includes(field.field)))
56
+ continue;
57
+ if (!holds(trigger.where, store.graph.getNode(record.id), store))
58
+ continue;
59
+ records.add(record.id);
60
+ }
61
+ }
62
+ if (records.size === 0)
63
+ return;
64
+ const by = commit.ops.filter((op) => touched(op).some((id) => records.has(id))).map(workflowOrigin).find((origin) => origin !== undefined && origin.workflow !== workflow.name);
65
+ fired.push({ trigger, records: [...records], ...(by ? { by } : {}) });
66
+ });
67
+ return fired;
68
+ }
69
+ //# sourceMappingURL=triggered.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggered.js","sourceRoot":"","sources":["../../src/workflows/triggered.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMtD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8B9C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAa;IAC1C,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,IAAI,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAE,EAAE,GAAG,EAAE,GAAI,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtG,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,qCAAqC;AACrC,MAAM,OAAO,GAAG,CAAC,EAAa,EAAY,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAErN,MAAM,KAAK,GAAG,CAAC,KAAyB,EAAE,IAA8B,EAAE,KAAuB,EAAW,EAAE;IAC5G,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAc,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7H,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa;YAAE,OAAO,KAAK,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,WAAW,CAAsB,QAAsG,EAAE,MAAsB,EAAE,KAAe;IAC9L,MAAM,KAAK,GAAG,KAAoC,CAAC;IACnD,IAAI,QAAQ,IAAI,MAAM;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACvK,MAAM,GAAG,GAAG,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAe,CAAC;IACzD,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC;YAAE,OAAO;QAC5D,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAChE,MAAM,YAAY,GAAiB,EAAE,EAAE,EAAE,YAAY,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAChL,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC1E,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;oBAAE,SAAS;gBACnC,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;oBAAE,SAAS;gBAC5F,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAAE,SAAS;gBAC9I,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAA6B,EAAE,KAAK,CAAC;oBAAE,SAAS;gBACvG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChL,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { AnyGraphNode } from "../graph/types.js";
2
+ import type { Principal } from "../permissions/types.js";
3
+ import type { AnySchema } from "../schema/schema.js";
4
+ import type { Store } from "../store.js";
5
+ import type { WorkflowDeclaration, WorkflowOver, WorkflowValue } from "../workflow-shape.js";
6
+ /** The ids of the records a step runs over, as `principal` sees them: those of the kind `where` holds of, at most `limit`, in the order they stand. */
7
+ export declare function recordsOver<S extends AnySchema>(store: Store<S>, over: WorkflowOver, principal: Principal): string[];
8
+ /**
9
+ * A STEP'S VALUE, as the act is handed it: `{ expr }` read with the record
10
+ * as its subject; `$subject` the record's id; `$now` and `$today` the
11
+ * run's moment and day; `$$…` a literal "$…"; anything else as written.
12
+ */
13
+ export declare function workflowValue<S extends AnySchema>(value: WorkflowValue, record: AnyGraphNode | undefined, store: Store<S>, now: {
14
+ readonly at: string;
15
+ readonly today: string;
16
+ }): unknown;
17
+ /** A key template read on what a step has: "{id}:{date}" → "task:7f3:2026-11-02". A name it has no value for reads as nothing. */
18
+ export declare function workflowKey(template: string, values: Readonly<Record<string, unknown>>): string;
19
+ /** A workflow as declared, hashed — all but whether it is paused, which changes when it runs, not what it does. */
20
+ export declare function workflowSpecHash(declared: WorkflowDeclaration): string;
21
+ /**
22
+ * THE ID A KEYED RECORD IS MADE UNDER (Roadmap f-job-idempotency):
23
+ * `<prefix>:wf.<workflow>.<key>` — the prefix the kind's ids carry, the
24
+ * workflow's name and the key slugged — asked for as a client asks for an
25
+ * id, so the store itself refuses a second record of the same key.
26
+ */
27
+ export declare const keyedId: (prefix: string, workflow: string, key: string) => string;
28
+ //# sourceMappingURL=values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/workflows/values.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU7F,uJAAuJ;AACvJ,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAGpH;AAUD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAYzL;AAED,kIAAkI;AAClI,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAK/F;AAED,mHAAmH;AACnH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAGtE;AAQD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,UAAU,MAAM,EAAE,KAAK,MAAM,KAAG,MAAoD,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { canonicalize } from "../document/canonical.js";
2
+ import { shapesFor } from "../document/computed-values.js";
3
+ import { evaluateExpr, NodeSet } from "../document/expr/evaluate.js";
4
+ import { parseExpr } from "../document/expr/parse.js";
5
+ import { sha256Hex } from "../integrity.js";
6
+ import { answerJob } from "../jobs.js";
7
+ /*
8
+ * WHAT A STEP READS, worked out as a runner needs it: the records `over`
9
+ * picks, as the run's author sees them; the value a step hands an act,
10
+ * read on the record it is over, as an act's own `{ expr }` values are;
11
+ * the key of what it makes; and the hash of a workflow as declared, which
12
+ * says whether the next run is the first after a change.
13
+ */
14
+ /** The ids of the records a step runs over, as `principal` sees them: those of the kind `where` holds of, at most `limit`, in the order they stand. */
15
+ export function recordsOver(store, over, principal) {
16
+ const ids = answerJob(store, { kind: over.kind, ...(over.where !== undefined ? { where: over.where } : {}) }, principal).ids;
17
+ return over.limit === undefined ? [...ids] : ids.slice(0, over.limit);
18
+ }
19
+ /** A value the language gives, as an act's argument takes it: a record as its id, a set as its ids. */
20
+ const asArgument = (value) => {
21
+ if (value instanceof NodeSet)
22
+ return value.nodes.map((node) => node.id);
23
+ if (Array.isArray(value))
24
+ return value.map((one) => asArgument(one));
25
+ if (value !== null && typeof value === "object")
26
+ return value.id;
27
+ return value;
28
+ };
29
+ /**
30
+ * A STEP'S VALUE, as the act is handed it: `{ expr }` read with the record
31
+ * as its subject; `$subject` the record's id; `$now` and `$today` the
32
+ * run's moment and day; `$$…` a literal "$…"; anything else as written.
33
+ */
34
+ export function workflowValue(value, record, store, now) {
35
+ if (value !== null && typeof value === "object" && !Array.isArray(value) && "expr" in value) {
36
+ const any = store;
37
+ return asArgument(evaluateExpr(parseExpr(value.expr), { graph: any.graph, subject: record ?? null, kinds: shapesFor(any.schema), today: now.today, ...(record ? { bindings: { subject: record } } : {}) }));
38
+ }
39
+ if (typeof value === "string") {
40
+ if (value.startsWith("$$"))
41
+ return value.slice(1);
42
+ if (value === "$subject")
43
+ return record?.id;
44
+ if (value === "$now")
45
+ return now.at;
46
+ if (value === "$today")
47
+ return now.today;
48
+ }
49
+ return value;
50
+ }
51
+ /** A key template read on what a step has: "{id}:{date}" → "task:7f3:2026-11-02". A name it has no value for reads as nothing. */
52
+ export function workflowKey(template, values) {
53
+ return template.replace(/\{([^{}|\s]+)(?:\s*\|[^{}]*)?\}/g, (_, name) => {
54
+ const value = values[name];
55
+ return value === undefined || value === null ? "" : typeof value === "object" ? JSON.stringify(value) : String(value);
56
+ });
57
+ }
58
+ /** A workflow as declared, hashed — all but whether it is paused, which changes when it runs, not what it does. */
59
+ export function workflowSpecHash(declared) {
60
+ const { status: _status, ...rest } = declared;
61
+ return sha256Hex(canonicalize(rest));
62
+ }
63
+ /** A key as an id may carry it: letters, digits and a few marks; a long one, or one with none of those, by its hash. */
64
+ const keySlug = (text) => {
65
+ const slug = text.toLowerCase().replace(/[^a-z0-9._:-]+/g, "-").replace(/^-+|-+$/g, "");
66
+ return slug.length > 0 && slug.length <= 120 ? slug : sha256Hex(text).slice(0, 24);
67
+ };
68
+ /**
69
+ * THE ID A KEYED RECORD IS MADE UNDER (Roadmap f-job-idempotency):
70
+ * `<prefix>:wf.<workflow>.<key>` — the prefix the kind's ids carry, the
71
+ * workflow's name and the key slugged — asked for as a client asks for an
72
+ * id, so the store itself refuses a second record of the same key.
73
+ */
74
+ export const keyedId = (prefix, workflow, key) => `${prefix}:wf.${workflow}.${keySlug(key)}`;
75
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/workflows/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,OAAO,EAAc,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC;;;;;;GAMG;AAEH,uJAAuJ;AACvJ,MAAM,UAAU,WAAW,CAAsB,KAAe,EAAE,IAAkB,EAAE,SAAoB;IACxG,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC;IAC7H,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,GAAG,CAAC,KAAY,EAAW,EAAE;IAC3C,IAAI,KAAK,YAAY,OAAO;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAY,CAAC,CAAC,CAAC;IAC9E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAQ,KAAsB,CAAC,EAAE,CAAC;IACnF,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAsB,KAAoB,EAAE,MAAgC,EAAE,KAAe,EAAE,GAAoD;IAC9K,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QAC5F,MAAM,GAAG,GAAG,KAAoC,CAAC;QACjD,OAAO,UAAU,CAAC,YAAY,CAAC,SAAS,CAAE,KAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAA+B,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9P,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,UAAU;YAAE,OAAO,MAAM,EAAE,EAAE,CAAC;QAC5C,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kIAAkI;AAClI,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAyC;IACrF,OAAO,QAAQ,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,gBAAgB,CAAC,QAA6B;IAC5D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC9C,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,wHAAwH;AACxH,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,GAAW,EAAU,EAAE,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { WorkflowTrigger } from "../workflow-shape.js";
2
+ import { type KindNoun } from "./steps.js";
3
+ /** One trigger in words: "every Sunday at 6 PM", "when a grocery list is made". */
4
+ export declare function triggerWords(trigger: WorkflowTrigger, noun?: KindNoun): string;
5
+ /** A workflow in a sentence. */
6
+ export declare function workflowWords(workflow: {
7
+ readonly title: string;
8
+ readonly when: readonly WorkflowTrigger[];
9
+ }, noun?: KindNoun): string;
10
+ //# sourceMappingURL=words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../src/workflows/words.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWrD,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,GAAE,QAAmB,GAAG,MAAM,CAMxF;AAED,gCAAgC;AAChC,wBAAgB,aAAa,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,EAAE,IAAI,GAAE,QAAmB,GAAG,MAAM,CAKhJ"}
@@ -0,0 +1,30 @@
1
+ import { scheduleWords } from "./schedule.js";
2
+ import { withArticle } from "../schema/define-node.js";
3
+ import { kindNoun } from "./steps.js";
4
+ /*
5
+ * A WORKFLOW IN A SENTENCE: what starts it, then what it does — "Every
6
+ * Sunday at 6 PM, and when a grocery list is made: fill out next week's
7
+ * events". Each kind by its noun: the declaration's, where the caller
8
+ * hands it (`noun`), else its name read as words.
9
+ */
10
+ const listed = (said) => (said.length <= 2 ? said.join(" and ") : `${said.slice(0, -1).join(", ")} and ${said.at(-1)}`);
11
+ /** One trigger in words: "every Sunday at 6 PM", "when a grocery list is made". */
12
+ export function triggerWords(trigger, noun = kindNoun) {
13
+ if ("every" in trigger || "cron" in trigger)
14
+ return scheduleWords(trigger);
15
+ if ("made" in trigger)
16
+ return `when ${withArticle(noun(trigger.made))} is made${trigger.where ? ` where ${trigger.where}` : ""}`;
17
+ if ("changed" in trigger)
18
+ return `when ${withArticle(noun(trigger.changed))}${trigger.fields?.length ? `'s ${listed(trigger.fields)}` : ""} changes${trigger.where ? ` where ${trigger.where}` : ""}`;
19
+ if ("synced" in trigger)
20
+ return `when the connection “${trigger.synced}” finishes a pass`;
21
+ return "when somebody runs it";
22
+ }
23
+ /** A workflow in a sentence. */
24
+ export function workflowWords(workflow, noun = kindNoun) {
25
+ const when = workflow.when.map((trigger) => triggerWords(trigger, noun));
26
+ const said = when.length <= 2 ? when.join(", and ") : `${when.slice(0, -1).join(", ")}, and ${when.at(-1)}`;
27
+ const start = said.charAt(0).toUpperCase() + said.slice(1);
28
+ return `${start}: ${workflow.title.charAt(0).toLowerCase()}${workflow.title.slice(1)}`;
29
+ }
30
+ //# sourceMappingURL=words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.js","sourceRoot":"","sources":["../../src/workflows/words.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAErD;;;;;GAKG;AAEH,MAAM,MAAM,GAAG,CAAC,IAAuB,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEnJ,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAE,OAAiB,QAAQ;IAC9E,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,MAAM,IAAI,OAAO;QAAE,OAAO,QAAQ,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjI,IAAI,SAAS,IAAI,OAAO;QAAE,OAAO,QAAQ,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACtM,IAAI,QAAQ,IAAI,OAAO;QAAE,OAAO,wBAAwB,OAAO,CAAC,MAAM,mBAAmB,CAAC;IAC1F,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,aAAa,CAAC,QAA+E,EAAE,OAAiB,QAAQ;IACtI,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,GAAG,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACzF,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { GraviewApp } from "../app.js";
2
+ import type { GraviewDocument } from "../document/schema.js";
3
+ import { type JobWorld } from "../job-findings.js";
4
+ import type { AnySchema } from "../schema/schema.js";
5
+ /** A connection as a workflow reads it: the kinds it keeps in step, and whether this app's changes go out through it. */
6
+ export interface WorkflowConnection {
7
+ readonly kinds: readonly string[];
8
+ readonly writes: boolean;
9
+ }
10
+ export interface WorkflowWorld extends JobWorld {
11
+ /** Every act the app gives, declared and derived, by name. */
12
+ readonly acts: readonly string[];
13
+ /** The kinds an act makes records of; undefined where the app has no act of that name. */
14
+ actMakes(name: string): readonly string[] | undefined;
15
+ readonly connections: ReadonlyMap<string, WorkflowConnection>;
16
+ /** A kind as a person reads it: the noun its declaration says. */
17
+ noun(kind: string): string;
18
+ }
19
+ /** What a document's workflows may name, read off the document alone. */
20
+ export declare function workflowWorldOfDocument(document: GraviewDocument): WorkflowWorld;
21
+ /** What a compiled or TypeScript app's workflows may name. */
22
+ export declare function workflowWorldOfApp<S extends AnySchema>(app: GraviewApp<S>): WorkflowWorld;
23
+ //# sourceMappingURL=world.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/workflows/world.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAItF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAUrD,yHAAyH;AACzH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC9D,kEAAkE;IAClE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAaD,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa,CAiBhF;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAczF"}
@@ -0,0 +1,50 @@
1
+ import { actsOfDocument } from "../document/act-spellings.js";
2
+ import { jobWorldOfApp, jobWorldOfDocument } from "../job-findings.js";
3
+ import { deriveMutations } from "../mutations/derive-edits.js";
4
+ import { derivedActOf, givenWhenNeverArchived } from "../mutations/derived-names.js";
5
+ import { nounOf } from "../schema/define-node.js";
6
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
7
+ /** A connection's kinds and direction, read loosely: one kind, or a kind per source. */
8
+ function connectionOf(spec) {
9
+ const given = isRecord(spec) ? spec : {};
10
+ const kinds = [given["kind"], ...(Array.isArray(given["sources"]) ? given["sources"].map((source) => (isRecord(source) ? source["kind"] : undefined)) : [])].filter((kind) => typeof kind === "string");
11
+ return { kinds, writes: given["direction"] !== "read" };
12
+ }
13
+ const connectionsOf = (connections) => new Map(Object.entries(connections ?? {}).map(([name, spec]) => [name, connectionOf(spec)]));
14
+ /** What a document's workflows may name, read off the document alone. */
15
+ export function workflowWorldOfDocument(document) {
16
+ const acts = document.acts ?? {};
17
+ return {
18
+ ...jobWorldOfDocument(document),
19
+ // A kind that is never set aside (`archives: false`) is given no archive, unarchive or merge: as the app's derived acts leave them out.
20
+ acts: actsOfDocument(document).filter((act) => {
21
+ const derived = derivedActOf(act);
22
+ return !derived || document.kinds[derived.kind]?.archives !== false || givenWhenNeverArchived(derived.act);
23
+ }),
24
+ actMakes(name) {
25
+ const act = acts[name];
26
+ if (act)
27
+ return [...new Set([...(act.creates ? [act.creates] : []), ...(act.effects ?? []).flatMap((effect) => (isRecord(effect) && typeof effect["create"] === "string" ? [effect["create"]] : []))])];
28
+ return derivedActOf(name) || this.actOn(name) !== undefined ? [] : undefined;
29
+ },
30
+ connections: connectionsOf(document.connections),
31
+ noun: (kind) => nounOf(document.kinds[kind], kind),
32
+ };
33
+ }
34
+ /** What a compiled or TypeScript app's workflows may name. */
35
+ export function workflowWorldOfApp(app) {
36
+ const declared = app.mutations ?? [];
37
+ const every = [...declared, ...deriveMutations(app.schema, declared)];
38
+ const byName = new Map(every.map((mutation) => [mutation.name, mutation]));
39
+ return {
40
+ ...jobWorldOfApp(app),
41
+ acts: [...byName.keys()],
42
+ actMakes: (name) => {
43
+ const mutation = byName.get(name);
44
+ return mutation ? [...(mutation.creates ?? [])] : undefined;
45
+ },
46
+ connections: connectionsOf(app.connections),
47
+ noun: (kind) => nounOf(app.schema.tryDefinition(kind), kind),
48
+ };
49
+ }
50
+ //# sourceMappingURL=world.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.js","sourceRoot":"","sources":["../../src/workflows/world.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `@graview/core/workflows` — WHAT THE APP DOES ON ITS OWN, AND WHEN
3
+ * (Roadmap f-jobs-declared).
4
+ *
5
+ * The declaration's `workflows`, read: their shape (`WorkflowSpec`), the
6
+ * closed set of step kinds (`STEP_KINDS`) and what each may name
7
+ * (`workflowWorldOfDocument`, `workflowWorldOfApp`), each resolved with its
8
+ * defaults (`workflowsOf`, dreaming among them), said in a sentence
9
+ * (`workflowWords`), when it next runs on its clock (`nextRunAt`), what a
10
+ * commit starts (`triggeredBy`) and what the checker says of them
11
+ * (`workflowFindings`). Running one is
12
+ * `@graview/tools/workflows`' (`runWorkflow`). An entry of its own, on no
13
+ * page: nothing a page draws runs a workflow.
14
+ */
15
+ export type { ActStep, AgentStep, ArchiveStep, ClassifyFloorRule, ClassifyStep, GenerateFrom, GenerateStep, GenerateWindow, AppWorkflows, WorkflowApproval, WorkflowDeclaration, WorkflowOver, WorkflowStep, WorkflowTrigger, WorkflowValue } from "./workflow-shape.js";
16
+ export { MOST_STEPS, MOST_WORKFLOWS } from "./workflow-shape.js";
17
+ export { kindNoun, STEP_KINDS, stepKindOf, stepShapes, type KindNoun, type StepCheck, type StepKind, type StepKindKey, type StepShapes, type WorkflowFinding } from "./workflows/steps.js";
18
+ export { actStep, keyFields } from "./workflows/step-act.js";
19
+ export { agentStep } from "./workflows/step-agent.js";
20
+ export { classifyApplies, classifyAsks, classifyStep, classifyWords, floorLabel, linksIn, type FloorReading } from "./workflows/step-classify.js";
21
+ export { actsMaking, generateStep } from "./workflows/step-generate.js";
22
+ export { datesIn, generateWants, windowDays, type GenerateReading, type GenerateWants, type WantedRecord } from "./workflows/generate.js";
23
+ export { DEFAULT_GENERATE_KEY, MOST_GENERATED, MOST_WINDOW_DAYS } from "./workflows/generate-words.js";
24
+ export { afterMs, afterWords, archiveStep } from "./workflows/step-archive.js";
25
+ export { followsFindings, keeps, policiesOf, policyApplies, policyInstruction, type WorkflowPolicy } from "./workflows/policies.js";
26
+ export { workflowWorldOfApp, workflowWorldOfDocument, type WorkflowConnection, type WorkflowWorld } from "./workflows/world.js";
27
+ export { WorkflowSpec, WorkflowStepSpec, WorkflowTriggerSpec, WorkflowsSpec } from "./document/workflow-spec.js";
28
+ export { declaredWorkflows, DREAMING, dreamingWorkflow, resolveWorkflow, workflowAuthor, workflowReach, workflowsOf, type ResolvedWorkflow } from "./workflows/resolve.js";
29
+ export { scheduleOf, scheduleOfCron, scheduleOfWords, scheduleWords, SCHEDULE_WORDS, type Schedule } from "./workflows/schedule.js";
30
+ export { nextOf, nextRunAt } from "./workflows/next.js";
31
+ export { triggerWords, workflowWords } from "./workflows/words.js";
32
+ export { triggeredBy, workflowOrigin, type FiredTrigger, type WorkflowCommit, type WorkflowOrigin } from "./workflows/triggered.js";
33
+ export { documentWorkflowFindings, workflowFindings, workflowFindingsOf } from "./workflows/findings.js";
34
+ export { keyedId, recordsOver, workflowKey, workflowSpecHash, workflowValue } from "./workflows/values.js";
35
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzQ,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC3L,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAClJ,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC1I,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpI,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChI,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3K,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpI,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACpI,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export { MOST_STEPS, MOST_WORKFLOWS } from "./workflow-shape.js";
2
+ export { kindNoun, STEP_KINDS, stepKindOf, stepShapes } from "./workflows/steps.js";
3
+ export { actStep, keyFields } from "./workflows/step-act.js";
4
+ export { agentStep } from "./workflows/step-agent.js";
5
+ export { classifyApplies, classifyAsks, classifyStep, classifyWords, floorLabel, linksIn } from "./workflows/step-classify.js";
6
+ export { actsMaking, generateStep } from "./workflows/step-generate.js";
7
+ export { datesIn, generateWants, windowDays } from "./workflows/generate.js";
8
+ export { DEFAULT_GENERATE_KEY, MOST_GENERATED, MOST_WINDOW_DAYS } from "./workflows/generate-words.js";
9
+ export { afterMs, afterWords, archiveStep } from "./workflows/step-archive.js";
10
+ export { followsFindings, keeps, policiesOf, policyApplies, policyInstruction } from "./workflows/policies.js";
11
+ export { workflowWorldOfApp, workflowWorldOfDocument } from "./workflows/world.js";
12
+ export { WorkflowSpec, WorkflowStepSpec, WorkflowTriggerSpec, WorkflowsSpec } from "./document/workflow-spec.js";
13
+ export { declaredWorkflows, DREAMING, dreamingWorkflow, resolveWorkflow, workflowAuthor, workflowReach, workflowsOf } from "./workflows/resolve.js";
14
+ export { scheduleOf, scheduleOfCron, scheduleOfWords, scheduleWords, SCHEDULE_WORDS } from "./workflows/schedule.js";
15
+ export { nextOf, nextRunAt } from "./workflows/next.js";
16
+ export { triggerWords, workflowWords } from "./workflows/words.js";
17
+ export { triggeredBy, workflowOrigin } from "./workflows/triggered.js";
18
+ export { documentWorkflowFindings, workflowFindings, workflowFindingsOf } from "./workflows/findings.js";
19
+ export { keyedId, recordsOver, workflowKey, workflowSpecHash, workflowValue } from "./workflows/values.js";
20
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAyG,MAAM,sBAAsB,CAAC;AAC3L,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAqB,MAAM,8BAA8B,CAAC;AAClJ,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAA+D,MAAM,yBAAyB,CAAC;AAC1I,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAuB,MAAM,yBAAyB,CAAC;AACpI,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAA+C,MAAM,sBAAsB,CAAC;AAChI,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAyB,MAAM,wBAAwB,CAAC;AAC3K,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAiB,MAAM,yBAAyB,CAAC;AACpI,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,cAAc,EAA+D,MAAM,0BAA0B,CAAC;AACpI,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graview/core",
3
- "version": "0.1.62",
3
+ "version": "0.1.64",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -53,6 +53,10 @@
53
53
  "types": "./dist/shown.d.ts",
54
54
  "default": "./dist/shown.js"
55
55
  },
56
+ "./head": {
57
+ "types": "./dist/head.d.ts",
58
+ "default": "./dist/head.js"
59
+ },
56
60
  "./csv": {
57
61
  "types": "./dist/csv.d.ts",
58
62
  "default": "./dist/csv.js"
@@ -89,6 +93,10 @@
89
93
  "types": "./dist/jobs.d.ts",
90
94
  "default": "./dist/jobs.js"
91
95
  },
96
+ "./workflows": {
97
+ "types": "./dist/workflows.d.ts",
98
+ "default": "./dist/workflows.js"
99
+ },
92
100
  "./friction": {
93
101
  "types": "./dist/friction.d.ts",
94
102
  "default": "./dist/friction.js"
@@ -227,7 +235,9 @@
227
235
  "./dist/tidying.js",
228
236
  "./src/tidying.ts",
229
237
  "./dist/typing.js",
230
- "./src/typing.ts"
238
+ "./src/typing.ts",
239
+ "./dist/workflows/findings.js",
240
+ "./src/workflows/findings.ts"
231
241
  ],
232
242
  "repository": {
233
243
  "type": "git",