@owlmeans/planning 0.1.18-rc.2 → 0.1.18-rc.21

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 (228) hide show
  1. package/README.md +69 -26
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/planning/SKILL.md +157 -45
  4. package/build/aliases/types.d.ts +49 -0
  5. package/build/aliases/types.d.ts.map +1 -0
  6. package/build/aliases/types.js +2 -0
  7. package/build/aliases/types.js.map +1 -0
  8. package/build/aliases.d.ts +4 -0
  9. package/build/aliases.d.ts.map +1 -0
  10. package/build/aliases.js +27 -0
  11. package/build/aliases.js.map +1 -0
  12. package/build/consts.d.ts +23 -34
  13. package/build/consts.d.ts.map +1 -1
  14. package/build/consts.js +26 -25
  15. package/build/consts.js.map +1 -1
  16. package/build/entrypoints/types.d.ts +96 -0
  17. package/build/entrypoints/types.d.ts.map +1 -0
  18. package/build/entrypoints/types.js +2 -0
  19. package/build/entrypoints/types.js.map +1 -0
  20. package/build/entrypoints.d.ts +5 -1
  21. package/build/entrypoints.d.ts.map +1 -1
  22. package/build/entrypoints.js +17 -6
  23. package/build/entrypoints.js.map +1 -1
  24. package/build/errors.d.ts +41 -0
  25. package/build/errors.d.ts.map +1 -1
  26. package/build/errors.js +61 -0
  27. package/build/errors.js.map +1 -1
  28. package/build/helpers/apply/consts.local.d.ts +7 -0
  29. package/build/helpers/apply/consts.local.d.ts.map +1 -0
  30. package/build/helpers/apply/consts.local.js +9 -0
  31. package/build/helpers/apply/consts.local.js.map +1 -0
  32. package/build/helpers/apply/types.d.ts +32 -0
  33. package/build/helpers/apply/types.d.ts.map +1 -0
  34. package/build/helpers/apply/types.js +2 -0
  35. package/build/helpers/apply/types.js.map +1 -0
  36. package/build/helpers/apply.d.ts +5 -23
  37. package/build/helpers/apply.d.ts.map +1 -1
  38. package/build/helpers/apply.js +121 -143
  39. package/build/helpers/apply.js.map +1 -1
  40. package/build/helpers/card/types.d.ts +20 -0
  41. package/build/helpers/card/types.d.ts.map +1 -0
  42. package/build/helpers/card/types.js +2 -0
  43. package/build/helpers/card/types.js.map +1 -0
  44. package/build/helpers/card.d.ts +11 -7
  45. package/build/helpers/card.d.ts.map +1 -1
  46. package/build/helpers/card.js +41 -28
  47. package/build/helpers/card.js.map +1 -1
  48. package/build/helpers/changes/consts.local.d.ts +13 -0
  49. package/build/helpers/changes/consts.local.d.ts.map +1 -0
  50. package/build/helpers/changes/consts.local.js +13 -0
  51. package/build/helpers/changes/consts.local.js.map +1 -0
  52. package/build/helpers/changes/types.d.ts +58 -0
  53. package/build/helpers/changes/types.d.ts.map +1 -0
  54. package/build/helpers/changes/types.js +2 -0
  55. package/build/helpers/changes/types.js.map +1 -0
  56. package/build/helpers/changes.d.ts +11 -42
  57. package/build/helpers/changes.d.ts.map +1 -1
  58. package/build/helpers/changes.js +234 -251
  59. package/build/helpers/changes.js.map +1 -1
  60. package/build/helpers/code/types.d.ts +27 -0
  61. package/build/helpers/code/types.d.ts.map +1 -0
  62. package/build/helpers/code/types.js +2 -0
  63. package/build/helpers/code/types.js.map +1 -0
  64. package/build/helpers/code.d.ts +6 -17
  65. package/build/helpers/code.d.ts.map +1 -1
  66. package/build/helpers/code.js +39 -40
  67. package/build/helpers/code.js.map +1 -1
  68. package/build/helpers/index.d.ts +12 -0
  69. package/build/helpers/index.d.ts.map +1 -1
  70. package/build/helpers/index.js +2 -0
  71. package/build/helpers/index.js.map +1 -1
  72. package/build/helpers/query/types.d.ts +23 -0
  73. package/build/helpers/query/types.d.ts.map +1 -0
  74. package/build/helpers/query/types.js +2 -0
  75. package/build/helpers/query/types.js.map +1 -0
  76. package/build/helpers/query.d.ts +25 -17
  77. package/build/helpers/query.d.ts.map +1 -1
  78. package/build/helpers/query.js +108 -280
  79. package/build/helpers/query.js.map +1 -1
  80. package/build/helpers/scoped/types.d.ts +59 -0
  81. package/build/helpers/scoped/types.d.ts.map +1 -0
  82. package/build/helpers/scoped/types.js +2 -0
  83. package/build/helpers/scoped/types.js.map +1 -0
  84. package/build/helpers/scoped.d.ts +24 -0
  85. package/build/helpers/scoped.d.ts.map +1 -0
  86. package/build/helpers/scoped.js +197 -0
  87. package/build/helpers/scoped.js.map +1 -0
  88. package/build/helpers/specification/types.d.ts +24 -0
  89. package/build/helpers/specification/types.d.ts.map +1 -0
  90. package/build/helpers/specification/types.js +2 -0
  91. package/build/helpers/specification/types.js.map +1 -0
  92. package/build/helpers/specification.d.ts +9 -13
  93. package/build/helpers/specification.d.ts.map +1 -1
  94. package/build/helpers/specification.js +47 -44
  95. package/build/helpers/specification.js.map +1 -1
  96. package/build/helpers/status/types.d.ts +48 -0
  97. package/build/helpers/status/types.d.ts.map +1 -0
  98. package/build/helpers/status/types.js +2 -0
  99. package/build/helpers/status/types.js.map +1 -0
  100. package/build/helpers/status.d.ts +16 -29
  101. package/build/helpers/status.d.ts.map +1 -1
  102. package/build/helpers/status.js +77 -73
  103. package/build/helpers/status.js.map +1 -1
  104. package/build/helpers/types.local.d.ts +17 -0
  105. package/build/helpers/types.local.d.ts.map +1 -0
  106. package/build/helpers/types.local.js +2 -0
  107. package/build/helpers/types.local.js.map +1 -0
  108. package/build/helpers/validate/types.d.ts +30 -0
  109. package/build/helpers/validate/types.d.ts.map +1 -0
  110. package/build/helpers/validate/types.js +2 -0
  111. package/build/helpers/validate/types.js.map +1 -0
  112. package/build/helpers/validate.d.ts +8 -19
  113. package/build/helpers/validate.d.ts.map +1 -1
  114. package/build/helpers/validate.js +74 -79
  115. package/build/helpers/validate.js.map +1 -1
  116. package/build/helpers/wire/types.d.ts +28 -0
  117. package/build/helpers/wire/types.d.ts.map +1 -0
  118. package/build/helpers/wire/types.js +2 -0
  119. package/build/helpers/wire/types.js.map +1 -0
  120. package/build/helpers/wire.d.ts +4 -0
  121. package/build/helpers/wire.d.ts.map +1 -0
  122. package/build/helpers/wire.js +215 -0
  123. package/build/helpers/wire.js.map +1 -0
  124. package/build/i18n/be.json +5 -0
  125. package/build/i18n/de.json +5 -0
  126. package/build/i18n/en.json +5 -0
  127. package/build/i18n/es.json +5 -0
  128. package/build/i18n/fr.json +56 -0
  129. package/build/i18n/pl.json +5 -0
  130. package/build/i18n/ru.json +5 -0
  131. package/build/i18n/uk.json +5 -0
  132. package/build/i18n.js +5 -4
  133. package/build/i18n.js.map +1 -1
  134. package/build/index.d.ts +4 -0
  135. package/build/index.d.ts.map +1 -1
  136. package/build/index.js +2 -0
  137. package/build/index.js.map +1 -1
  138. package/build/models/index.d.ts +2 -3
  139. package/build/models/index.d.ts.map +1 -1
  140. package/build/models/index.js +1 -15
  141. package/build/models/index.js.map +1 -1
  142. package/build/models/model.d.ts +5 -0
  143. package/build/models/model.d.ts.map +1 -0
  144. package/build/models/model.js +16 -0
  145. package/build/models/model.js.map +1 -0
  146. package/build/models/project.d.ts +2 -1
  147. package/build/models/project.d.ts.map +1 -1
  148. package/build/models/project.js.map +1 -1
  149. package/build/models/specification.d.ts +2 -1
  150. package/build/models/specification.d.ts.map +1 -1
  151. package/build/models/specification.js.map +1 -1
  152. package/build/models/types.d.ts +69 -0
  153. package/build/models/types.d.ts.map +1 -0
  154. package/build/models/types.js +2 -0
  155. package/build/models/types.js.map +1 -0
  156. package/build/models/workcard.d.ts +2 -1
  157. package/build/models/workcard.d.ts.map +1 -1
  158. package/build/models/workcard.js +12 -12
  159. package/build/models/workcard.js.map +1 -1
  160. package/build/schemas.d.ts +10 -2
  161. package/build/schemas.d.ts.map +1 -1
  162. package/build/schemas.js +87 -1
  163. package/build/schemas.js.map +1 -1
  164. package/build/types.d.ts +199 -148
  165. package/build/types.d.ts.map +1 -1
  166. package/build/utils.d.ts +6 -0
  167. package/build/utils.d.ts.map +1 -0
  168. package/build/utils.js +6 -0
  169. package/build/utils.js.map +1 -0
  170. package/package.json +11 -11
  171. package/src/aliases/types.ts +38 -0
  172. package/src/aliases.ts +31 -0
  173. package/src/consts.ts +26 -25
  174. package/src/entrypoints/types.ts +68 -0
  175. package/src/entrypoints.ts +34 -14
  176. package/src/errors.ts +71 -0
  177. package/src/helpers/apply/consts.local.ts +10 -0
  178. package/src/helpers/apply/types.ts +32 -0
  179. package/src/helpers/apply.ts +135 -152
  180. package/src/helpers/card/types.ts +20 -0
  181. package/src/helpers/card.ts +59 -33
  182. package/src/helpers/changes/consts.local.ts +17 -0
  183. package/src/helpers/changes/types.ts +66 -0
  184. package/src/helpers/changes.ts +267 -280
  185. package/src/helpers/code/types.ts +31 -0
  186. package/src/helpers/code.ts +52 -48
  187. package/src/helpers/index.ts +13 -0
  188. package/src/helpers/query/types.ts +26 -0
  189. package/src/helpers/query.ts +144 -314
  190. package/src/helpers/scoped/types.ts +64 -0
  191. package/src/helpers/scoped.ts +257 -0
  192. package/src/helpers/specification/types.ts +26 -0
  193. package/src/helpers/specification.ts +69 -51
  194. package/src/helpers/status/types.ts +46 -0
  195. package/src/helpers/status.ts +117 -93
  196. package/src/helpers/types.local.ts +18 -0
  197. package/src/helpers/validate/types.ts +30 -0
  198. package/src/helpers/validate.ts +84 -77
  199. package/src/helpers/wire/types.ts +31 -0
  200. package/src/helpers/wire.ts +251 -0
  201. package/src/i18n/be.json +5 -0
  202. package/src/i18n/de.json +5 -0
  203. package/src/i18n/en.json +5 -0
  204. package/src/i18n/es.json +5 -0
  205. package/src/i18n/fr.json +56 -0
  206. package/src/i18n/pl.json +5 -0
  207. package/src/i18n/ru.json +5 -0
  208. package/src/i18n/uk.json +5 -0
  209. package/src/i18n.ts +6 -4
  210. package/src/index.ts +4 -0
  211. package/src/models/index.ts +2 -17
  212. package/src/models/model.ts +18 -0
  213. package/src/models/project.ts +2 -1
  214. package/src/models/specification.ts +2 -1
  215. package/src/models/types.ts +70 -0
  216. package/src/models/workcard.ts +14 -16
  217. package/src/schemas.ts +98 -2
  218. package/src/types.ts +207 -126
  219. package/src/utils.ts +9 -0
  220. package/tests/apply.spec.ts +95 -31
  221. package/tests/code.spec.ts +9 -9
  222. package/tests/entrypoints.spec.ts +18 -2
  223. package/tests/error-status.spec.ts +6 -1
  224. package/tests/models.spec.ts +16 -15
  225. package/tests/query.spec.ts +13 -15
  226. package/tests/schemas.spec.ts +8 -8
  227. package/tests/scoped.spec.ts +154 -0
  228. package/tests/status.spec.ts +31 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/helpers/apply/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAExE,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,EAAE,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,UAAU,EAAE,UAAU,KAAK,CAAC,GAAG,IAAI,CAAA;IAChH;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,UAAU,KAAK,YAAY,EAAE,CAAA;CACrF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/helpers/apply/types.ts"],"names":[],"mappings":""}
@@ -1,27 +1,9 @@
1
1
  import type { Relationship, Transition, Workcard } from '../types.js';
2
- /**
3
- * THE fold: the card after one transition. Pure, total, no I/O — every store (memory, Mongo, a
4
- * client mirror) folds with this and nothing else, so one log always means one card.
5
- *
6
- * - An already-applied transition (`seq <= card.seq`) returns the card unchanged: re-folding is
7
- * safe.
8
- * - Anything but the next seq (`card.seq + 1`, or 1 for a create with no card) is refused with
9
- * `PlanningError('fold:out-of-order')`.
10
- * - `create` builds the whole record from `changes` plus the transition's identity; `delete`
11
- * answers `null`; `link`/`unlink` only move `seq`/`head`/`updatedAt` (the edges are
12
- * {@link applyRelationship}'s); `update`/`transit` write `changes` — `fields` and `flows` merge,
13
- * everything else replaces — and clear `unset`.
14
- * - Every result has `seq = transition.seq`, `head = max(head, seq)`, `updatedAt = transition.at`.
15
- *
16
- * @throws {PlanningError} `planning:fold:out-of-order:…`
17
- */
2
+ import type { ApplyHelper } from './apply/types.js';
3
+ export declare const createApplyHelper: () => ApplyHelper;
4
+ export declare const applyHelper: ApplyHelper;
5
+ /** @deprecated compat:factory-refactor — use `applyHelper.applyTransition(…)` */
18
6
  export declare const applyTransition: <T extends Workcard = Workcard>(card: T | null | undefined, transition: Transition) => T | null;
19
- /**
20
- * The relationships after one transition. Pure and total, like {@link applyTransition}.
21
- *
22
- * `create` adds its `links`, `link` adds its `link`, `unlink` removes the matching edge, and a
23
- * `delete` removes every edge touching the card. An edge that already exists is kept as it is, so
24
- * re-folding adds nothing. Every other action answers the list unchanged. Always a new array.
25
- */
7
+ /** @deprecated compat:factory-refactor — use `applyHelper.applyRelationship(…)` */
26
8
  export declare const applyRelationship: (links: Relationship[], transition: Transition) => Relationship[];
27
9
  //# sourceMappingURL=apply.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAqB,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA+DxF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,GAAG,QAAQ,QACrD,CAAC,GAAG,IAAI,GAAG,SAAS,cAAc,UAAU,KACjD,CAAC,GAAG,IAoDN,CAAA;AAgBD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,UAAW,YAAY,EAAE,cAAc,UAAU,KAAG,YAAY,EAwB7F,CAAA"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAqB,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAMnD,eAAO,MAAM,iBAAiB,QAAO,WAiJpC,CAAA;AAED,eAAO,MAAM,WAAW,aAAsB,CAAA;AAE9C,iFAAiF;AACjF,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,QAAQ,GAAG,QAAQ,QACrD,CAAC,GAAG,IAAI,GAAG,SAAS,cAAc,UAAU,KACjD,CAAC,GAAG,IAAwD,CAAA;AAE/D,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,UAAW,YAAY,EAAE,cAAc,UAAU,KAAG,YAAY,EAC5C,CAAA"}
@@ -1,162 +1,140 @@
1
1
  import { IntrinsicStatus, TransitionAction } from '../consts.js';
2
2
  import { PlanningError } from '../errors.js';
3
- /** Never written by a transition's `changes`: the fold takes them from the transition itself. */
4
- const IDENTITY_KEYS = new Set(['id', 'kind', 'type', 'entityId', 'seq', 'head', 'createdAt']);
5
- /** Cannot be cleared: a record without them is not a record. */
6
- const REQUIRED_KEYS = new Set([
7
- ...IDENTITY_KEYS, 'title', 'parents', 'status', 'intrinsic', 'flows', 'labels', 'fields',
8
- ]);
9
- /** Merged shallowly into the card's own map rather than replacing it. */
10
- const MERGED_KEYS = new Set(['fields', 'flows']);
3
+ import { IDENTITY_KEYS, MERGED_KEYS, REQUIRED_KEYS } from './apply/consts.local.js';
11
4
  const clean = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
12
- const outOfOrder = (card, transition) => new PlanningError(`fold:out-of-order:${transition.card}:${card?.seq ?? 0}:${transition.seq}`);
13
- const unsetOn = (record, paths) => {
14
- for (const path of paths ?? []) {
15
- const dot = path.indexOf('.');
16
- if (dot > 0) {
17
- const head = path.slice(0, dot);
18
- const map = record[head];
19
- if (MERGED_KEYS.has(head) && map != null && typeof map === 'object') {
20
- delete map[path.slice(dot + 1)];
5
+ export const createApplyHelper = () => {
6
+ const outOfOrder = (card, transition) => new PlanningError(`fold:out-of-order:${transition.card}:${card?.seq ?? 0}:${transition.seq}`);
7
+ const unsetOn = (record, paths) => {
8
+ for (const path of paths ?? []) {
9
+ const dot = path.indexOf('.');
10
+ if (dot > 0) {
11
+ const head = path.slice(0, dot);
12
+ const map = record[head];
13
+ if (MERGED_KEYS.has(head) && map != null && typeof map === 'object') {
14
+ delete map[path.slice(dot + 1)];
15
+ }
16
+ continue;
17
+ }
18
+ if (!REQUIRED_KEYS.has(path)) {
19
+ delete record[path];
21
20
  }
22
- continue;
23
- }
24
- if (!REQUIRED_KEYS.has(path)) {
25
- delete record[path];
26
- }
27
- }
28
- };
29
- const writeChanges = (record, changes) => {
30
- for (const [key, value] of Object.entries(changes)) {
31
- if (value === undefined || IDENTITY_KEYS.has(key)) {
32
- continue;
33
21
  }
34
- if (MERGED_KEYS.has(key)) {
35
- const merged = { ...(record[key] ?? {}) };
36
- for (const [entry, entryValue] of Object.entries(value ?? {})) {
37
- if (entryValue === null) {
38
- delete merged[entry];
22
+ };
23
+ const writeChanges = (record, changes) => {
24
+ for (const [key, value] of Object.entries(changes)) {
25
+ if (value === undefined || IDENTITY_KEYS.has(key)) {
26
+ continue;
27
+ }
28
+ if (MERGED_KEYS.has(key)) {
29
+ const merged = { ...(record[key] ?? {}) };
30
+ for (const [entry, entryValue] of Object.entries(value ?? {})) {
31
+ if (entryValue === null) {
32
+ delete merged[entry];
33
+ }
34
+ else if (entryValue !== undefined) {
35
+ merged[entry] = entryValue;
36
+ }
39
37
  }
40
- else if (entryValue !== undefined) {
41
- merged[entry] = entryValue;
38
+ record[key] = merged;
39
+ continue;
40
+ }
41
+ if (value === null) {
42
+ if (!REQUIRED_KEYS.has(key)) {
43
+ delete record[key];
42
44
  }
45
+ continue;
43
46
  }
44
- record[key] = merged;
45
- continue;
47
+ record[key] = value;
46
48
  }
47
- if (value === null) {
48
- if (!REQUIRED_KEYS.has(key)) {
49
- delete record[key];
49
+ };
50
+ const applyTransition = (card, transition) => {
51
+ if (card != null && transition.seq <= card.seq) {
52
+ return card;
53
+ }
54
+ if (card == null) {
55
+ if (transition.action === TransitionAction.Delete) {
56
+ return null;
57
+ }
58
+ if (transition.action !== TransitionAction.Create || transition.seq !== 1) {
59
+ throw outOfOrder(card, transition);
50
60
  }
51
- continue;
52
61
  }
53
- record[key] = value;
54
- }
55
- };
56
- /**
57
- * THE fold: the card after one transition. Pure, total, no I/O — every store (memory, Mongo, a
58
- * client mirror) folds with this and nothing else, so one log always means one card.
59
- *
60
- * - An already-applied transition (`seq <= card.seq`) returns the card unchanged: re-folding is
61
- * safe.
62
- * - Anything but the next seq (`card.seq + 1`, or 1 for a create with no card) is refused with
63
- * `PlanningError('fold:out-of-order')`.
64
- * - `create` builds the whole record from `changes` plus the transition's identity; `delete`
65
- * answers `null`; `link`/`unlink` only move `seq`/`head`/`updatedAt` (the edges are
66
- * {@link applyRelationship}'s); `update`/`transit` write `changes` — `fields` and `flows` merge,
67
- * everything else replaces — and clear `unset`.
68
- * - Every result has `seq = transition.seq`, `head = max(head, seq)`, `updatedAt = transition.at`.
69
- *
70
- * @throws {PlanningError} `planning:fold:out-of-order:…`
71
- */
72
- export const applyTransition = (card, transition) => {
73
- if (card != null && transition.seq <= card.seq) {
74
- return card;
75
- }
76
- if (card == null) {
62
+ else if (transition.seq !== card.seq + 1) {
63
+ throw outOfOrder(card, transition);
64
+ }
77
65
  if (transition.action === TransitionAction.Delete) {
78
66
  return null;
79
67
  }
80
- if (transition.action !== TransitionAction.Create || transition.seq !== 1) {
81
- throw outOfOrder(card, transition);
68
+ const head = Math.max(card?.head ?? card?.seq ?? 0, transition.seq);
69
+ const changes = structuredClone(transition.changes ?? {});
70
+ if (transition.action === TransitionAction.Create) {
71
+ const record = {
72
+ parents: [], labels: [], fields: {}, flows: {}, status: '', intrinsic: IntrinsicStatus.Planned,
73
+ };
74
+ writeChanges(record, changes);
75
+ unsetOn(record, transition.unset);
76
+ return clean({
77
+ ...record,
78
+ id: transition.card,
79
+ kind: transition.kind,
80
+ type: transition.type,
81
+ entityId: transition.entityId,
82
+ seq: transition.seq,
83
+ head,
84
+ createdAt: transition.at,
85
+ updatedAt: transition.at,
86
+ });
82
87
  }
83
- }
84
- else if (transition.seq !== card.seq + 1) {
85
- throw outOfOrder(card, transition);
86
- }
87
- if (transition.action === TransitionAction.Delete) {
88
- return null;
89
- }
90
- const head = Math.max(card?.head ?? card?.seq ?? 0, transition.seq);
91
- const changes = structuredClone(transition.changes ?? {});
92
- if (transition.action === TransitionAction.Create) {
93
- const record = {
94
- parents: [], labels: [], fields: {}, flows: {}, status: '', intrinsic: IntrinsicStatus.Planned,
95
- };
96
- writeChanges(record, changes);
97
- unsetOn(record, transition.unset);
98
- return clean({
99
- ...record,
100
- id: transition.card,
101
- kind: transition.kind,
102
- type: transition.type,
103
- entityId: transition.entityId,
104
- seq: transition.seq,
105
- head,
106
- createdAt: transition.at,
107
- updatedAt: transition.at,
108
- });
109
- }
110
- const record = structuredClone(card);
111
- if (transition.action === TransitionAction.Update || transition.action === TransitionAction.Transit) {
112
- writeChanges(record, changes);
113
- unsetOn(record, transition.unset);
114
- }
115
- record.seq = transition.seq;
116
- record.head = head;
117
- record.updatedAt = transition.at;
118
- return clean(record);
119
- };
120
- const edgeOf = (transition, draft) => clean({
121
- entityId: transition.entityId,
122
- type: draft.type,
123
- from: draft.from ?? transition.card,
124
- to: draft.to,
125
- project: transition.project,
126
- fields: draft.fields == null ? undefined : structuredClone(draft.fields),
127
- createdAt: transition.at,
128
- transition: transition.id,
129
- });
130
- const sameEdge = (left, right) => left.entityId === right.entityId && left.from === right.from && left.to === right.to && left.type === right.type;
131
- /**
132
- * The relationships after one transition. Pure and total, like {@link applyTransition}.
133
- *
134
- * `create` adds its `links`, `link` adds its `link`, `unlink` removes the matching edge, and a
135
- * `delete` removes every edge touching the card. An edge that already exists is kept as it is, so
136
- * re-folding adds nothing. Every other action answers the list unchanged. Always a new array.
137
- */
138
- export const applyRelationship = (links, transition) => {
139
- const add = (drafts) => drafts.reduce((result, draft) => {
140
- const edge = edgeOf(transition, draft);
141
- return result.some(existing => sameEdge(existing, edge)) ? result : [...result, edge];
142
- }, [...links]);
143
- switch (transition.action) {
144
- case TransitionAction.Create:
145
- return add(transition.links ?? []);
146
- case TransitionAction.Link:
147
- return add(transition.link == null ? [] : [transition.link]);
148
- case TransitionAction.Unlink: {
149
- if (transition.link == null) {
150
- return [...links];
88
+ const record = structuredClone(card);
89
+ if (transition.action === TransitionAction.Update || transition.action === TransitionAction.Transit) {
90
+ writeChanges(record, changes);
91
+ unsetOn(record, transition.unset);
92
+ }
93
+ record.seq = transition.seq;
94
+ record.head = head;
95
+ record.updatedAt = transition.at;
96
+ return clean(record);
97
+ };
98
+ const edgeOf = (transition, draft) => clean({
99
+ entityId: transition.entityId,
100
+ type: draft.type,
101
+ from: draft.from ?? transition.card,
102
+ to: draft.to,
103
+ project: transition.project,
104
+ fields: draft.fields == null ? undefined : structuredClone(draft.fields),
105
+ createdAt: transition.at,
106
+ transition: transition.id,
107
+ });
108
+ const sameEdge = (left, right) => left.entityId === right.entityId && left.from === right.from && left.to === right.to && left.type === right.type;
109
+ const applyRelationship = (links, transition) => {
110
+ const add = (drafts) => drafts.reduce((result, draft) => {
111
+ const edge = edgeOf(transition, draft);
112
+ return result.some(existing => sameEdge(existing, edge)) ? result : [...result, edge];
113
+ }, [...links]);
114
+ switch (transition.action) {
115
+ case TransitionAction.Create:
116
+ return add(transition.links ?? []);
117
+ case TransitionAction.Link:
118
+ return add(transition.link == null ? [] : [transition.link]);
119
+ case TransitionAction.Unlink: {
120
+ if (transition.link == null) {
121
+ return [...links];
122
+ }
123
+ const edge = edgeOf(transition, transition.link);
124
+ return links.filter(existing => !sameEdge(existing, edge));
151
125
  }
152
- const edge = edgeOf(transition, transition.link);
153
- return links.filter(existing => !sameEdge(existing, edge));
126
+ case TransitionAction.Delete:
127
+ return links.filter(existing => existing.entityId !== transition.entityId
128
+ || (existing.from !== transition.card && existing.to !== transition.card));
129
+ default:
130
+ return [...links];
154
131
  }
155
- case TransitionAction.Delete:
156
- return links.filter(existing => existing.entityId !== transition.entityId
157
- || (existing.from !== transition.card && existing.to !== transition.card));
158
- default:
159
- return [...links];
160
- }
132
+ };
133
+ return { applyTransition, applyRelationship };
161
134
  };
135
+ export const applyHelper = createApplyHelper();
136
+ /** @deprecated compat:factory-refactor — use `applyHelper.applyTransition(…)` */
137
+ export const applyTransition = (card, transition) => applyHelper.applyTransition(card, transition);
138
+ /** @deprecated compat:factory-refactor — use `applyHelper.applyRelationship(…)` */
139
+ export const applyRelationship = (links, transition) => applyHelper.applyRelationship(links, transition);
162
140
  //# sourceMappingURL=apply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/helpers/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Card, Project, Specification, Workcard, WorkcardDraft } from '../../types.js';
2
+ /** The kind guards and the parent rules every record keeps. */
3
+ export interface CardHelper {
4
+ isProject: (card?: Workcard | null) => card is Project;
5
+ isCard: (card?: Workcard | null) => card is Card;
6
+ isSpecification: (card?: Workcard | null) => card is Specification;
7
+ /** `parents` with `parent` first and no repeats — the invariant every record keeps. */
8
+ normalizeParents: (parent?: string | null, parents?: string[] | null) => string[];
9
+ /** A draft with the collections every record carries filled in. */
10
+ cardDefaults: (draft: WorkcardDraft) => WorkcardDraft & Required<Pick<WorkcardDraft, 'parents' | 'labels' | 'fields'>>;
11
+ /** A transition was allocated for the card and has not been folded yet. */
12
+ isPending: (card: Pick<Workcard, 'seq' | 'head'>) => boolean;
13
+ parentOf: (card: Workcard) => string | undefined;
14
+ /**
15
+ * The project a card belongs to: a project is its own; a card under a project is that project's;
16
+ * anything deeper is its parent's project, which needs the parent to answer.
17
+ */
18
+ projectOf: (card: Workcard, parent?: Workcard | null) => string | undefined;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/helpers/card/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3F,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,IAAI,OAAO,CAAA;IACtD,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAA;IAChD,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,IAAI,aAAa,CAAA;IAClE,uFAAuF;IACvF,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,KAAK,MAAM,EAAE,CAAA;IACjF,mEAAmE;IACnE,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAA;IACtH,2EAA2E;IAC3E,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,OAAO,CAAA;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,CAAA;IAChD;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,CAAA;CAC5E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/helpers/card/types.ts"],"names":[],"mappings":""}
@@ -1,17 +1,21 @@
1
1
  import type { Card, Project, Specification, Workcard, WorkcardDraft } from '../types.js';
2
+ import type { CardHelper } from './card/types.js';
3
+ export declare const createCardHelper: () => CardHelper;
4
+ export declare const cardHelper: CardHelper;
5
+ /** @deprecated compat:factory-refactor — use `cardHelper.isProject(…)` */
2
6
  export declare const isProject: (card?: Workcard | null) => card is Project;
7
+ /** @deprecated compat:factory-refactor — use `cardHelper.isCard(…)` */
3
8
  export declare const isCard: (card?: Workcard | null) => card is Card;
9
+ /** @deprecated compat:factory-refactor — use `cardHelper.isSpecification(…)` */
4
10
  export declare const isSpecification: (card?: Workcard | null) => card is Specification;
5
- /** `parents` with `parent` first and no repeats — the invariant every record keeps. */
11
+ /** @deprecated compat:factory-refactor — use `cardHelper.normalizeParents(…)` */
6
12
  export declare const normalizeParents: (parent?: string | null, parents?: string[] | null) => string[];
7
- /** A draft with the collections every record carries filled in. */
13
+ /** @deprecated compat:factory-refactor — use `cardHelper.cardDefaults(…)` */
8
14
  export declare const cardDefaults: (draft: WorkcardDraft) => WorkcardDraft & Required<Pick<WorkcardDraft, 'parents' | 'labels' | 'fields'>>;
9
- /** A transition was allocated for the card and has not been folded yet. */
15
+ /** @deprecated compat:factory-refactor — use `cardHelper.isPending(…)` */
10
16
  export declare const isPending: (card: Pick<Workcard, 'seq' | 'head'>) => boolean;
17
+ /** @deprecated compat:factory-refactor — use `cardHelper.parentOf(…)` */
11
18
  export declare const parentOf: (card: Workcard) => string | undefined;
12
- /**
13
- * The project a card belongs to: a project is its own; a card under a project is that project's;
14
- * anything deeper is its parent's project, which needs the parent to answer.
15
- */
19
+ /** @deprecated compat:factory-refactor — use `cardHelper.projectOf(…)` */
16
20
  export declare const projectOf: (card: Workcard, parent?: Workcard | null) => string | undefined;
17
21
  //# sourceMappingURL=card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/helpers/card.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAExF,eAAO,MAAM,SAAS,UAAW,QAAQ,GAAG,IAAI,KAAG,IAAI,IAAI,OAA8C,CAAA;AAEzG,eAAO,MAAM,MAAM,UAAW,QAAQ,GAAG,IAAI,KAAG,IAAI,IAAI,IAAwC,CAAA;AAEhG,eAAO,MAAM,eAAe,UAAW,QAAQ,GAAG,IAAI,KAAG,IAAI,IAAI,aACtB,CAAA;AAE3C,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,YAAa,MAAM,GAAG,IAAI,YAAY,MAAM,EAAE,GAAG,IAAI,KAAG,MAAM,EAE/D,CAAA;AAE5B,mEAAmE;AACnE,eAAO,MAAM,YAAY,UAAW,aAAa,KAAG,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAK/H,CAAA;AAEF,2EAA2E;AAC3E,eAAO,MAAM,SAAS,SAAU,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,KAAG,OAA6C,CAAA;AAE9G,eAAO,MAAM,QAAQ,SAAU,QAAQ,KAAG,MAAM,GAAG,SAA2C,CAAA;AAE9F;;;GAGG;AACH,eAAO,MAAM,SAAS,SAAU,QAAQ,WAAW,QAAQ,GAAG,IAAI,KAAG,MAAM,GAAG,SAS7E,CAAA"}
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/helpers/card.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,eAAO,MAAM,gBAAgB,QAAO,UAmCnC,CAAA;AAED,eAAO,MAAM,UAAU,YAAqB,CAAA;AAE5C,0EAA0E;AAC1E,eAAO,MAAM,SAAS,UAAW,QAAQ,GAAG,IAAI,KAAG,IAAI,IAAI,OAAqC,CAAA;AAEhG,uEAAuE;AACvE,eAAO,MAAM,MAAM,UAAW,QAAQ,GAAG,IAAI,KAAG,IAAI,IAAI,IAA+B,CAAA;AAEvF,gFAAgF;AAChF,eAAO,MAAM,eAAe,UAAW,QAAQ,GAAG,IAAI,KAAG,IAAI,IAAI,aAAiD,CAAA;AAElH,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,YAAa,MAAM,GAAG,IAAI,YAAY,MAAM,EAAE,GAAG,IAAI,KAAG,MAAM,EAC7C,CAAA;AAE9C,6EAA6E;AAC7E,eAAO,MAAM,YAAY,UAAW,aAAa,KAAG,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,CACjG,CAAA;AAEhC,0EAA0E;AAC1E,eAAO,MAAM,SAAS,SAAU,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC,KAAG,OAAqC,CAAA;AAEtG,yEAAyE;AACzE,eAAO,MAAM,QAAQ,SAAU,QAAQ,KAAG,MAAM,GAAG,SAAsC,CAAA;AAEzF,0EAA0E;AAC1E,eAAO,MAAM,SAAS,SAAU,QAAQ,WAAW,QAAQ,GAAG,IAAI,KAAG,MAAM,GAAG,SAA+C,CAAA"}
@@ -1,31 +1,44 @@
1
1
  import { WorkcardKind } from '../consts.js';
2
- export const isProject = (card) => card?.kind === WorkcardKind.Project;
3
- export const isCard = (card) => card?.kind === WorkcardKind.Card;
4
- export const isSpecification = (card) => card?.kind === WorkcardKind.Specification;
5
- /** `parents` with `parent` first and no repeats — the invariant every record keeps. */
6
- export const normalizeParents = (parent, parents) => [...new Set([...(parent != null && parent !== '' ? [parent] : []), ...(parents ?? [])])]
7
- .filter(id => id !== '');
8
- /** A draft with the collections every record carries filled in. */
9
- export const cardDefaults = (draft) => ({
10
- ...draft,
11
- parents: normalizeParents(draft.parent, draft.parents),
12
- labels: [...new Set(draft.labels ?? [])],
13
- fields: draft.fields ?? {},
14
- });
15
- /** A transition was allocated for the card and has not been folded yet. */
16
- export const isPending = (card) => (card.head ?? card.seq) > card.seq;
17
- export const parentOf = (card) => card.parent ?? card.parents[0];
18
- /**
19
- * The project a card belongs to: a project is its own; a card under a project is that project's;
20
- * anything deeper is its parent's project, which needs the parent to answer.
21
- */
22
- export const projectOf = (card, parent) => {
23
- if (isProject(card)) {
24
- return card.id;
25
- }
26
- if (parent != null) {
27
- return isProject(parent) ? parent.id : parent.parent;
28
- }
29
- return card.parent;
2
+ export const createCardHelper = () => {
3
+ const isProject = (card) => card?.kind === WorkcardKind.Project;
4
+ const isCard = (card) => card?.kind === WorkcardKind.Card;
5
+ const isSpecification = (card) => card?.kind === WorkcardKind.Specification;
6
+ const normalizeParents = (parent, parents) => [...new Set([...(parent != null && parent !== '' ? [parent] : []), ...(parents ?? [])])]
7
+ .filter(id => id !== '');
8
+ const cardDefaults = (draft) => ({
9
+ ...draft,
10
+ parents: normalizeParents(draft.parent, draft.parents),
11
+ labels: [...new Set(draft.labels ?? [])],
12
+ fields: draft.fields ?? {},
13
+ });
14
+ const isPending = (card) => (card.head ?? card.seq) > card.seq;
15
+ const parentOf = (card) => card.parent ?? card.parents[0];
16
+ const projectOf = (card, parent) => {
17
+ if (isProject(card)) {
18
+ return card.id;
19
+ }
20
+ if (parent != null) {
21
+ return isProject(parent) ? parent.id : parent.parent;
22
+ }
23
+ return card.parent;
24
+ };
25
+ return { isProject, isCard, isSpecification, normalizeParents, cardDefaults, isPending, parentOf, projectOf };
30
26
  };
27
+ export const cardHelper = createCardHelper();
28
+ /** @deprecated compat:factory-refactor — use `cardHelper.isProject(…)` */
29
+ export const isProject = (card) => cardHelper.isProject(card);
30
+ /** @deprecated compat:factory-refactor — use `cardHelper.isCard(…)` */
31
+ export const isCard = (card) => cardHelper.isCard(card);
32
+ /** @deprecated compat:factory-refactor — use `cardHelper.isSpecification(…)` */
33
+ export const isSpecification = (card) => cardHelper.isSpecification(card);
34
+ /** @deprecated compat:factory-refactor — use `cardHelper.normalizeParents(…)` */
35
+ export const normalizeParents = (parent, parents) => cardHelper.normalizeParents(parent, parents);
36
+ /** @deprecated compat:factory-refactor — use `cardHelper.cardDefaults(…)` */
37
+ export const cardDefaults = (draft) => cardHelper.cardDefaults(draft);
38
+ /** @deprecated compat:factory-refactor — use `cardHelper.isPending(…)` */
39
+ export const isPending = (card) => cardHelper.isPending(card);
40
+ /** @deprecated compat:factory-refactor — use `cardHelper.parentOf(…)` */
41
+ export const parentOf = (card) => cardHelper.parentOf(card);
42
+ /** @deprecated compat:factory-refactor — use `cardHelper.projectOf(…)` */
43
+ export const projectOf = (card, parent) => cardHelper.projectOf(card, parent);
31
44
  //# sourceMappingURL=card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/helpers/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAsB,EAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,OAAO,CAAA;AAEzG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAsB,EAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,IAAI,CAAA;AAEhG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAsB,EAAyB,EAAE,CAC/E,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,aAAa,CAAA;AAE3C,uFAAuF;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAsB,EAAE,OAAyB,EAAY,EAAE,CAC9F,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KACrF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AAE5B,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAkF,EAAE,CAAC,CAAC;IACrI,GAAG,KAAK;IACR,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;IACtD,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;CAC3B,CAAC,CAAA;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAoC,EAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA;AAE9G,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAsB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE9F;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAc,EAAE,MAAwB,EAAsB,EAAE;IACxF,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IACD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IACtD,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAA;AACpB,CAAC,CAAA"}
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/helpers/card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Never in a caller's changes: the transition itself carries them. */
2
+ export declare const IDENTITY_KEYS: string[];
3
+ /** Written once, from a create's draft; never by `changes` or `unset`, whatever the action. */
4
+ export declare const PROVENANCE_KEYS: string[];
5
+ /** Move only through `transit` (or a create's draft). */
6
+ export declare const FLOW_KEYS: string[];
7
+ /** Computed by the executor, never supplied. */
8
+ export declare const DERIVED_KEYS: string[];
9
+ /** Cannot be cleared. */
10
+ export declare const REQUIRED_KEYS: string[];
11
+ /** Changing one of these produces a new revision of a revisioned document. */
12
+ export declare const CONTENT_KEYS: string[];
13
+ //# sourceMappingURL=consts.local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.local.d.ts","sourceRoot":"","sources":["../../../src/helpers/changes/consts.local.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,eAAO,MAAM,aAAa,UAAiE,CAAA;AAE3F,+FAA+F;AAC/F,eAAO,MAAM,eAAe,UAAgB,CAAA;AAE5C,yDAAyD;AACzD,eAAO,MAAM,SAAS,UAA+C,CAAA;AAErE,gDAAgD;AAChD,eAAO,MAAM,YAAY,UAA4B,CAAA;AAErD,yBAAyB;AACzB,eAAO,MAAM,aAAa,UAAiE,CAAA;AAE3F,8EAA8E;AAC9E,eAAO,MAAM,YAAY,UAAuC,CAAA"}
@@ -0,0 +1,13 @@
1
+ /** Never in a caller's changes: the transition itself carries them. */
2
+ export const IDENTITY_KEYS = ['id', 'kind', 'type', 'entityId', 'seq', 'head', 'createdAt'];
3
+ /** Written once, from a create's draft; never by `changes` or `unset`, whatever the action. */
4
+ export const PROVENANCE_KEYS = ['createdBy'];
5
+ /** Move only through `transit` (or a create's draft). */
6
+ export const FLOW_KEYS = ['status', 'intrinsic', 'flows', 'closedAt'];
7
+ /** Computed by the executor, never supplied. */
8
+ export const DERIVED_KEYS = ['revision', 'bodyChars'];
9
+ /** Cannot be cleared. */
10
+ export const REQUIRED_KEYS = ['title', 'parents', 'labels', 'fields', 'category', 'format'];
11
+ /** Changing one of these produces a new revision of a revisioned document. */
12
+ export const CONTENT_KEYS = ['body', 'ref', 'format', 'version'];
13
+ //# sourceMappingURL=consts.local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.local.js","sourceRoot":"","sources":["../../../src/helpers/changes/consts.local.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AAE3F,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAAW,CAAC,CAAA;AAE5C,yDAAyD;AACzD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;AAErE,gDAAgD;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAErD,yBAAyB;AACzB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;AAE3F,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA"}