@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
@@ -1,78 +1,82 @@
1
1
  import { ANY_STATUS, INTRINSIC_ORDER, IntrinsicPolicy, IntrinsicStatus } from '../consts.js';
2
2
  import { PlanningError, UnknownStatusFlow } from '../errors.js';
3
- /** The primary flow id of a type — `flows[0]`. @throws {UnknownStatusFlow} when it declares none */
4
- export const primaryFlowOf = (type) => {
5
- const primary = type.flows[0];
6
- if (primary == null) {
7
- throw new UnknownStatusFlow(`${type.type}:primary`);
8
- }
9
- return primary;
10
- };
11
- export const flowIdsOf = (type) => [...type.flows];
12
- export const statusDefinitionOf = (flow, status) => flow.statuses.find(definition => definition.key === status);
13
- /** The intrinsic state a status maps onto, or `undefined` for a status the flow does not declare. */
14
- export const intrinsicOf = (flow, status) => statusDefinitionOf(flow, status)?.intrinsic;
15
- /** The status marked `initial`, else the first one. @throws {PlanningError} for a flow with none */
16
- export const initialStatusOf = (flow) => {
17
- const status = flow.statuses.find(definition => definition.initial === true) ?? flow.statuses[0];
18
- if (status == null) {
19
- throw new PlanningError(`flow-empty:${flow.id}`);
20
- }
21
- return status.key;
22
- };
23
- export const isTerminal = (flow, status) => statusDefinitionOf(flow, status)?.terminal === true;
24
- const fromMatches = (rule, status) => rule.from === ANY_STATUS || (Array.isArray(rule.from) && rule.from.includes(status));
25
- /**
26
- * The rule a named transition follows from a status.
27
- *
28
- * A name may be declared several times with different `from` sets; the rule naming the status
29
- * explicitly wins, and a `'*'` rule of that name answers only when none does.
30
- */
31
- export const ruleOf = (flow, transition, from) => {
32
- const named = flow.transitions.filter(rule => rule.name === transition);
33
- return named.find(rule => rule.from !== ANY_STATUS && fromMatches(rule, from))
34
- ?? named.find(rule => rule.from === ANY_STATUS);
35
- };
36
- export const canTransit = (flow, transition, from) => ruleOf(flow, transition, from) != null;
37
- /**
38
- * Every transition available from a status, one rule per name (the one `ruleOf` would pick), in
39
- * declaration order. `explicit: true` keeps only the rules offered to a person.
40
- */
41
- export const transitionsFrom = (flow, status, opts) => {
42
- const names = [...new Set(flow.transitions.map(rule => rule.name))];
43
- return names.map(name => ruleOf(flow, name, status))
44
- .filter((rule) => rule != null)
45
- .filter(rule => opts?.explicit !== true || rule.explicit === true);
46
- };
47
- /**
48
- * A new card's status per flow: every flow's initial status, with the primary one overridden by
49
- * `status` when the draft names one.
50
- *
51
- * @throws {UnknownStatusFlow}
52
- */
53
- export const initialFlowsOf = (type, registry, status) => {
54
- const primary = primaryFlowOf(type);
55
- return Object.fromEntries(type.flows.map(id => [
56
- id, id === primary && status != null ? status : initialStatusOf(registry.flow(id)),
57
- ]));
58
- };
59
- /**
60
- * The card's intrinsic state over its flows. {@link IntrinsicPolicy.Primary} reads the primary
61
- * flow; {@link IntrinsicPolicy.All} takes the least advanced flow. A status the flow does not
62
- * declare reads as planned.
63
- *
64
- * @throws {UnknownStatusFlow}
65
- */
66
- export const resolveIntrinsic = (type, flows, registry) => {
67
- const read = (id) => {
68
- const status = flows[id];
69
- return status == null
70
- ? IntrinsicStatus.Planned
71
- : intrinsicOf(registry.flow(id), status) ?? IntrinsicStatus.Planned;
3
+ export const createStatusHelper = () => {
4
+ const primaryFlowOf = (type) => {
5
+ const primary = type.flows[0];
6
+ if (primary == null) {
7
+ throw new UnknownStatusFlow(`${type.type}:primary`);
8
+ }
9
+ return primary;
10
+ };
11
+ const flowIdsOf = (type) => [...type.flows];
12
+ const statusDefinitionOf = (flow, status) => flow.statuses.find(definition => definition.key === status);
13
+ const intrinsicOf = (flow, status) => statusDefinitionOf(flow, status)?.intrinsic;
14
+ const initialStatusOf = (flow) => {
15
+ const status = flow.statuses.find(definition => definition.initial === true) ?? flow.statuses[0];
16
+ if (status == null) {
17
+ throw new PlanningError(`flow-empty:${flow.id}`);
18
+ }
19
+ return status.key;
20
+ };
21
+ const isTerminal = (flow, status) => statusDefinitionOf(flow, status)?.terminal === true;
22
+ const fromMatches = (rule, status) => rule.from === ANY_STATUS || (Array.isArray(rule.from) && rule.from.includes(status));
23
+ const ruleOf = (flow, transition, from) => {
24
+ const named = flow.transitions.filter(rule => rule.name === transition);
25
+ return named.find(rule => rule.from !== ANY_STATUS && fromMatches(rule, from))
26
+ ?? named.find(rule => rule.from === ANY_STATUS)
27
+ ?? (statusDefinitionOf(flow, from) == null ? named[0] : undefined);
28
+ };
29
+ const canTransit = (flow, transition, from) => ruleOf(flow, transition, from) != null;
30
+ const transitionsFrom = (flow, status, opts) => {
31
+ const names = [...new Set(flow.transitions.map(rule => rule.name))];
32
+ return names.map(name => ruleOf(flow, name, status))
33
+ .filter((rule) => rule != null)
34
+ .filter(rule => opts?.explicit !== true || rule.explicit === true);
35
+ };
36
+ const initialFlowsOf = (type, registry, status) => {
37
+ const primary = primaryFlowOf(type);
38
+ return Object.fromEntries(type.flows.map(id => [
39
+ id, id === primary && status != null ? status : initialStatusOf(registry.flow(id)),
40
+ ]));
41
+ };
42
+ const resolveIntrinsic = (type, flows, registry) => {
43
+ const read = (id) => {
44
+ const status = flows[id];
45
+ return status == null
46
+ ? IntrinsicStatus.Planned
47
+ : intrinsicOf(registry.flow(id), status) ?? IntrinsicStatus.Planned;
48
+ };
49
+ if (type.intrinsic !== IntrinsicPolicy.All) {
50
+ return read(primaryFlowOf(type));
51
+ }
52
+ return type.flows.map(read).reduce((least, intrinsic) => INTRINSIC_ORDER[intrinsic] < INTRINSIC_ORDER[least] ? intrinsic : least, IntrinsicStatus.Closed);
53
+ };
54
+ return {
55
+ primaryFlowOf, flowIdsOf, statusDefinitionOf, intrinsicOf, initialStatusOf, isTerminal, ruleOf, canTransit,
56
+ transitionsFrom, initialFlowsOf, resolveIntrinsic,
72
57
  };
73
- if (type.intrinsic !== IntrinsicPolicy.All) {
74
- return read(primaryFlowOf(type));
75
- }
76
- return type.flows.map(read).reduce((least, intrinsic) => INTRINSIC_ORDER[intrinsic] < INTRINSIC_ORDER[least] ? intrinsic : least, IntrinsicStatus.Closed);
77
58
  };
59
+ export const statusHelper = createStatusHelper();
60
+ /** @deprecated compat:factory-refactor — use `statusHelper.primaryFlowOf(…)` */
61
+ export const primaryFlowOf = (type) => statusHelper.primaryFlowOf(type);
62
+ /** @deprecated compat:factory-refactor — use `statusHelper.flowIdsOf(…)` */
63
+ export const flowIdsOf = (type) => statusHelper.flowIdsOf(type);
64
+ /** @deprecated compat:factory-refactor — use `statusHelper.statusDefinitionOf(…)` */
65
+ export const statusDefinitionOf = (flow, status) => statusHelper.statusDefinitionOf(flow, status);
66
+ /** @deprecated compat:factory-refactor — use `statusHelper.intrinsicOf(…)` */
67
+ export const intrinsicOf = (flow, status) => statusHelper.intrinsicOf(flow, status);
68
+ /** @deprecated compat:factory-refactor — use `statusHelper.initialStatusOf(…)` */
69
+ export const initialStatusOf = (flow) => statusHelper.initialStatusOf(flow);
70
+ /** @deprecated compat:factory-refactor — use `statusHelper.isTerminal(…)` */
71
+ export const isTerminal = (flow, status) => statusHelper.isTerminal(flow, status);
72
+ /** @deprecated compat:factory-refactor — use `statusHelper.ruleOf(…)` */
73
+ export const ruleOf = (flow, transition, from) => statusHelper.ruleOf(flow, transition, from);
74
+ /** @deprecated compat:factory-refactor — use `statusHelper.canTransit(…)` */
75
+ export const canTransit = (flow, transition, from) => statusHelper.canTransit(flow, transition, from);
76
+ /** @deprecated compat:factory-refactor — use `statusHelper.transitionsFrom(…)` */
77
+ export const transitionsFrom = (flow, status, opts) => statusHelper.transitionsFrom(flow, status, opts);
78
+ /** @deprecated compat:factory-refactor — use `statusHelper.initialFlowsOf(…)` */
79
+ export const initialFlowsOf = (type, registry, status) => statusHelper.initialFlowsOf(type, registry, status);
80
+ /** @deprecated compat:factory-refactor — use `statusHelper.resolveIntrinsic(…)` */
81
+ export const resolveIntrinsic = (type, flows, registry) => statusHelper.resolveIntrinsic(type, flows, registry);
78
82
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/helpers/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/helpers/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { PlanningSchemaRegistry, PlanningScope } from '../types.js';
2
+ import type { SchemaOrigin } from '../consts.js';
3
+ export interface FlowLookup extends Pick<PlanningSchemaRegistry, 'flow'> {
4
+ }
5
+ export interface Scope extends Pick<PlanningScope, 'entityId'> {
6
+ }
7
+ export interface Candidate<T> {
8
+ origin: SchemaOrigin;
9
+ definition: T;
10
+ retired: boolean;
11
+ }
12
+ export interface Resolved<T> {
13
+ definitions: T[];
14
+ origins: Record<string, SchemaOrigin>;
15
+ retired: string[];
16
+ }
17
+ //# sourceMappingURL=types.local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.local.d.ts","sourceRoot":"","sources":["../../src/helpers/types.local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC;CAAG;AAE3E,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;CAAG;AAEjE,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,CAAC,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.local.js","sourceRoot":"","sources":["../../src/helpers/types.local.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { ErrorObject } from 'ajv';
2
+ import type { PlanningSchemaRegistry, SpecificationSlot, Workcard } from '../../types.js';
3
+ /** A record's shape, its type's `fields` and a document's body, checked against their schemas. */
4
+ export interface ValidateHelper {
5
+ /** One line per ajv error: `/path message`. */
6
+ ajvErrorText: (errors?: ErrorObject[] | null) => string;
7
+ /** Keys holding `.` or `$` at any depth — a document store cannot hold them. */
8
+ invalidFieldKeys: (fields: unknown, path?: string) => string[];
9
+ /**
10
+ * Check `fields` against the type's schema, and its keys against the store rule.
11
+ *
12
+ * @throws {FieldsInvalid}
13
+ */
14
+ validateFields: (registry: Pick<PlanningSchemaRegistry, 'validator'>, type: string, fields: Record<string, unknown>) => void;
15
+ /**
16
+ * Check a whole record: its shape by kind, then its `fields` by type.
17
+ *
18
+ * @throws {PlanningError} `malformed:card:…` for a shape fault
19
+ * @throws {FieldsInvalid}
20
+ */
21
+ validateCard: (card: Workcard, registry: Pick<PlanningSchemaRegistry, 'validator'>) => void;
22
+ /**
23
+ * Check a document body against its slot: a JSON slot must parse, and match the slot's schema when
24
+ * it declares one.
25
+ *
26
+ * @throws {FieldsInvalid}
27
+ */
28
+ validateSpecificationBody: (slot: SpecificationSlot, body?: string | null) => void;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/helpers/validate/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzF,kGAAkG;AAClG,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,KAAK,MAAM,CAAA;IACvD,gFAAgF;IAChF,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IAC9D;;;;OAIG;IACH,cAAc,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC5H;;;;;OAKG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,KAAK,IAAI,CAAA;IAC3F;;;;;OAKG;IACH,yBAAyB,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;CACnF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/helpers/validate/types.ts"],"names":[],"mappings":""}
@@ -1,30 +1,19 @@
1
1
  import { Ajv } from 'ajv';
2
2
  import type { ErrorObject } from 'ajv';
3
3
  import type { PlanningSchemaRegistry, SpecificationSlot, Workcard } from '../types.js';
4
+ import type { ValidateHelper } from './validate/types.js';
4
5
  /** The ajv every planning validation compiles with: lenient about unknown keywords, all errors, formats. */
5
6
  export declare const makeAjv: () => Ajv;
6
- /** One line per ajv error: `/path message`. */
7
+ export declare const createValidateHelper: () => ValidateHelper;
8
+ export declare const validateHelper: ValidateHelper;
9
+ /** @deprecated compat:factory-refactor — use `validateHelper.ajvErrorText(…)` */
7
10
  export declare const ajvErrorText: (errors?: ErrorObject[] | null) => string;
8
- /** Keys holding `.` or `$` at any depth — a document store cannot hold them. */
11
+ /** @deprecated compat:factory-refactor — use `validateHelper.invalidFieldKeys(…)` */
9
12
  export declare const invalidFieldKeys: (fields: unknown, path?: string) => string[];
10
- /**
11
- * Check `fields` against the type's schema, and its keys against the store rule.
12
- *
13
- * @throws {FieldsInvalid}
14
- */
13
+ /** @deprecated compat:factory-refactor — use `validateHelper.validateFields(…)` */
15
14
  export declare const validateFields: (registry: Pick<PlanningSchemaRegistry, 'validator'>, type: string, fields: Record<string, unknown>) => void;
16
- /**
17
- * Check a whole record: its shape by kind, then its `fields` by type.
18
- *
19
- * @throws {PlanningError} `malformed:card:…` for a shape fault
20
- * @throws {FieldsInvalid}
21
- */
15
+ /** @deprecated compat:factory-refactor — use `validateHelper.validateCard(…)` */
22
16
  export declare const validateCard: (card: Workcard, registry: Pick<PlanningSchemaRegistry, 'validator'>) => void;
23
- /**
24
- * Check a document body against its slot: a JSON slot must parse, and match the slot's schema when
25
- * it declares one.
26
- *
27
- * @throws {FieldsInvalid}
28
- */
17
+ /** @deprecated compat:factory-refactor — use `validateHelper.validateSpecificationBody(…)` */
29
18
  export declare const validateSpecificationBody: (slot: SpecificationSlot, body?: string | null) => void;
30
19
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/helpers/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,KAAK,CAAA;AAKxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtF,4GAA4G;AAC5G,eAAO,MAAM,OAAO,QAAO,GAK1B,CAAA;AAgBD,+CAA+C;AAC/C,eAAO,MAAM,YAAY,YAAa,WAAW,EAAE,GAAG,IAAI,KAAG,MAE9C,CAAA;AAEf,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,WAAY,OAAO,SAAQ,MAAM,KAAQ,MAAM,EAY3E,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,aACf,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,QAAQ,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACjG,IASF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,SAAU,QAAQ,YAAY,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,KAAG,IAQlG,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,SAAU,iBAAiB,SAAS,MAAM,GAAG,IAAI,KAAG,IAgBzF,CAAA"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/helpers/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,KAAK,CAAA;AAMxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,4GAA4G;AAC5G,eAAO,MAAM,OAAO,QAAO,GAK1B,CAAA;AAED,eAAO,MAAM,oBAAoB,QAAO,cA0EvC,CAAA;AAED,eAAO,MAAM,cAAc,gBAAyB,CAAA;AAEpD,iFAAiF;AACjF,eAAO,MAAM,YAAY,YAAa,WAAW,EAAE,GAAG,IAAI,KAAG,MAA6C,CAAA;AAE1G,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,WAAY,OAAO,SAAQ,MAAM,KAAQ,MAAM,EAAmD,CAAA;AAE/H,mFAAmF;AACnF,eAAO,MAAM,cAAc,aACf,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,QAAQ,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACjG,IAA6D,CAAA;AAEhE,iFAAiF;AACjF,eAAO,MAAM,YAAY,SAAU,QAAQ,YAAY,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,KAAG,IACtD,CAAA;AAE7C,8FAA8F;AAC9F,eAAO,MAAM,yBAAyB,SAAU,iBAAiB,SAAS,MAAM,GAAG,IAAI,KAAG,IACpC,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { Ajv } from 'ajv';
2
2
  import formatsPlugin from 'ajv-formats';
3
+ import { memoHelper } from '@owlmeans/context';
3
4
  import { SpecificationFormat, WorkcardKind } from '../consts.js';
4
5
  import { FieldsInvalid, PlanningError } from '../errors.js';
5
6
  import { AnyWorkcardSchema, SpecificationSchema, WorkcardSchema } from '../schemas.js';
@@ -9,85 +10,79 @@ export const makeAjv = () => {
9
10
  formatsPlugin(ajv);
10
11
  return ajv;
11
12
  };
12
- let shared;
13
- const ajvOf = () => shared ??= makeAjv();
14
- const compiled = new Map();
15
- const compile = (schema) => {
16
- let validate = compiled.get(schema);
17
- if (validate == null) {
18
- validate = ajvOf().compile(schema);
19
- compiled.set(schema, validate);
20
- }
21
- return validate;
22
- };
23
- /** One line per ajv error: `/path message`. */
24
- export const ajvErrorText = (errors) => (errors ?? []).map(error => `${error.instancePath === '' ? '/' : error.instancePath} ${error.message ?? 'invalid'}`)
25
- .join('; ');
26
- /** Keys holding `.` or `$` at any depth — a document store cannot hold them. */
27
- export const invalidFieldKeys = (fields, path = '') => {
28
- if (fields == null || typeof fields !== 'object') {
29
- return [];
30
- }
31
- if (Array.isArray(fields)) {
32
- return fields.flatMap((entry, index) => invalidFieldKeys(entry, `${path}${index}.`));
33
- }
34
- return Object.entries(fields).flatMap(([key, value]) => [
35
- ...(key.includes('.') || key.includes('$') ? [`${path}${key}`] : []),
36
- ...invalidFieldKeys(value, `${path}${key}.`),
37
- ]);
38
- };
39
- /**
40
- * Check `fields` against the type's schema, and its keys against the store rule.
41
- *
42
- * @throws {FieldsInvalid}
43
- */
44
- export const validateFields = (registry, type, fields) => {
45
- const keys = invalidFieldKeys(fields);
46
- if (keys.length > 0) {
47
- throw new FieldsInvalid(`keys:${keys.join(',')}`);
48
- }
49
- const validate = registry.validator(type);
50
- if (!validate(fields)) {
51
- throw new FieldsInvalid(`${type}:${ajvErrorText(validate.errors)}`);
52
- }
53
- };
54
- /**
55
- * Check a whole record: its shape by kind, then its `fields` by type.
56
- *
57
- * @throws {PlanningError} `malformed:card:…` for a shape fault
58
- * @throws {FieldsInvalid}
59
- */
60
- export const validateCard = (card, registry) => {
61
- const validate = compile(card.kind === WorkcardKind.Specification
62
- ? SpecificationSchema
63
- : card.kind === WorkcardKind.Card || card.kind === WorkcardKind.Project ? WorkcardSchema : AnyWorkcardSchema);
64
- if (!validate(card)) {
65
- throw new PlanningError(`malformed:card:${ajvErrorText(validate.errors)}`);
66
- }
67
- validateFields(registry, card.type, card.fields);
68
- };
69
- /**
70
- * Check a document body against its slot: a JSON slot must parse, and match the slot's schema when
71
- * it declares one.
72
- *
73
- * @throws {FieldsInvalid}
74
- */
75
- export const validateSpecificationBody = (slot, body) => {
76
- if (body == null || slot.format !== SpecificationFormat.Json) {
77
- return;
78
- }
79
- let parsed;
80
- try {
81
- parsed = JSON.parse(body);
82
- }
83
- catch {
84
- throw new FieldsInvalid(`body:${slot.category}:not-json`);
85
- }
86
- if (slot.schema != null && typeof slot.schema === 'object') {
87
- const validate = compile(slot.schema);
88
- if (!validate(parsed)) {
89
- throw new FieldsInvalid(`body:${slot.category}:${ajvErrorText(validate.errors)}`);
13
+ export const createValidateHelper = () => {
14
+ const ajvOf = memoHelper.once(makeAjv);
15
+ const compiled = new Map();
16
+ const compile = (schema) => {
17
+ let validate = compiled.get(schema);
18
+ if (validate == null) {
19
+ validate = ajvOf().compile(schema);
20
+ compiled.set(schema, validate);
21
+ }
22
+ return validate;
23
+ };
24
+ const ajvErrorText = (errors) => (errors ?? []).map(error => `${error.instancePath === '' ? '/' : error.instancePath} ${error.message ?? 'invalid'}`)
25
+ .join('; ');
26
+ const invalidFieldKeys = (fields, path = '') => {
27
+ if (fields == null || typeof fields !== 'object') {
28
+ return [];
29
+ }
30
+ if (Array.isArray(fields)) {
31
+ return fields.flatMap((entry, index) => invalidFieldKeys(entry, `${path}${index}.`));
32
+ }
33
+ return Object.entries(fields).flatMap(([key, value]) => [
34
+ ...(key.includes('.') || key.includes('$') ? [`${path}${key}`] : []),
35
+ ...invalidFieldKeys(value, `${path}${key}.`),
36
+ ]);
37
+ };
38
+ const validateFields = (registry, type, fields) => {
39
+ const keys = invalidFieldKeys(fields);
40
+ if (keys.length > 0) {
41
+ throw new FieldsInvalid(`keys:${keys.join(',')}`);
42
+ }
43
+ const validate = registry.validator(type);
44
+ if (!validate(fields)) {
45
+ throw new FieldsInvalid(`${type}:${ajvErrorText(validate.errors)}`);
46
+ }
47
+ };
48
+ const validateCard = (card, registry) => {
49
+ const validate = compile(card.kind === WorkcardKind.Specification
50
+ ? SpecificationSchema
51
+ : card.kind === WorkcardKind.Card || card.kind === WorkcardKind.Project ? WorkcardSchema : AnyWorkcardSchema);
52
+ if (!validate(card)) {
53
+ throw new PlanningError(`malformed:card:${ajvErrorText(validate.errors)}`);
54
+ }
55
+ validateFields(registry, card.type, card.fields);
56
+ };
57
+ const validateSpecificationBody = (slot, body) => {
58
+ if (body == null || slot.format !== SpecificationFormat.Json) {
59
+ return;
60
+ }
61
+ let parsed;
62
+ try {
63
+ parsed = JSON.parse(body);
64
+ }
65
+ catch {
66
+ throw new FieldsInvalid(`body:${slot.category}:not-json`);
67
+ }
68
+ if (slot.schema != null && typeof slot.schema === 'object') {
69
+ const validate = compile(slot.schema);
70
+ if (!validate(parsed)) {
71
+ throw new FieldsInvalid(`body:${slot.category}:${ajvErrorText(validate.errors)}`);
72
+ }
90
73
  }
91
- }
74
+ };
75
+ return { ajvErrorText, invalidFieldKeys, validateFields, validateCard, validateSpecificationBody };
92
76
  };
77
+ export const validateHelper = createValidateHelper();
78
+ /** @deprecated compat:factory-refactor — use `validateHelper.ajvErrorText(…)` */
79
+ export const ajvErrorText = (errors) => validateHelper.ajvErrorText(errors);
80
+ /** @deprecated compat:factory-refactor — use `validateHelper.invalidFieldKeys(…)` */
81
+ export const invalidFieldKeys = (fields, path = '') => validateHelper.invalidFieldKeys(fields, path);
82
+ /** @deprecated compat:factory-refactor — use `validateHelper.validateFields(…)` */
83
+ export const validateFields = (registry, type, fields) => validateHelper.validateFields(registry, type, fields);
84
+ /** @deprecated compat:factory-refactor — use `validateHelper.validateCard(…)` */
85
+ export const validateCard = (card, registry) => validateHelper.validateCard(card, registry);
86
+ /** @deprecated compat:factory-refactor — use `validateHelper.validateSpecificationBody(…)` */
87
+ export const validateSpecificationBody = (slot, body) => validateHelper.validateSpecificationBody(slot, body);
93
88
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/helpers/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/helpers/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Sort } from '@owlmeans/resource';
2
+ import type { RelationshipQuery, RelationshipQueryWire, SpecificationQuery, SpecificationQueryWire, SummaryQuery, SummaryQueryWire, TransitionQuery, TransitionQueryWire, WorkcardQuery, WorkcardQueryWire } from '../../types.js';
3
+ /**
4
+ * The query objects to and from the shape they travel in a URL (`*QueryWire`): a list is
5
+ * comma-joined (JSON when an element holds a comma), an object is JSON, a sort is `field,-field`.
6
+ * Every decoder also accepts the rich form.
7
+ */
8
+ export interface WireHelper {
9
+ /** A list as one query value: comma-joined, or JSON when an element itself holds a comma. */
10
+ encodeList: (value?: string | readonly string[] | null) => string | undefined;
11
+ /** Every entry of a list query value, whatever shape the transport left it in. */
12
+ decodeList: (value: unknown, key?: string) => string[] | undefined;
13
+ /** `[{ field: 'order' }, { field: 'updatedAt', order: 'desc' }]` ⇄ `order,-updatedAt`. */
14
+ encodeSort: <T>(sort?: Sort<T>[] | null) => string | undefined;
15
+ decodeSort: <T>(value: unknown) => Sort<T>[] | undefined;
16
+ encodeWorkcardQuery: (query?: WorkcardQuery | null) => WorkcardQueryWire;
17
+ /** @throws {PlanningError} `malformed:query:<key>` for a value that does not decode */
18
+ decodeWorkcardQuery: (wire?: WorkcardQueryWire | WorkcardQuery | null) => WorkcardQuery;
19
+ encodeSummaryQuery: (query: SummaryQuery) => SummaryQueryWire;
20
+ decodeSummaryQuery: (wire?: SummaryQueryWire | SummaryQuery | null) => SummaryQuery;
21
+ encodeTransitionQuery: (query?: TransitionQuery | null) => TransitionQueryWire;
22
+ decodeTransitionQuery: (wire?: TransitionQueryWire | TransitionQuery | null) => TransitionQuery;
23
+ encodeSpecificationQuery: (query?: SpecificationQuery | null) => SpecificationQueryWire;
24
+ decodeSpecificationQuery: (wire?: SpecificationQueryWire | SpecificationQuery | null) => SpecificationQuery;
25
+ encodeRelationshipQuery: (query?: RelationshipQuery | null) => RelationshipQueryWire;
26
+ decodeRelationshipQuery: (wire?: RelationshipQueryWire | RelationshipQuery | null) => RelationshipQuery;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/helpers/wire/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EACV,iBAAiB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,YAAY,EAAE,gBAAgB,EACpH,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EACvE,MAAM,gBAAgB,CAAA;AAEvB;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,CAAA;IAC7E,kFAAkF;IAClF,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,SAAS,CAAA;IAClE,0FAA0F;IAC1F,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,KAAK,MAAM,GAAG,SAAS,CAAA;IAC9D,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAA;IACxD,mBAAmB,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,KAAK,iBAAiB,CAAA;IACxE,uFAAuF;IACvF,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,aAAa,GAAG,IAAI,KAAK,aAAa,CAAA;IACvF,kBAAkB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,gBAAgB,CAAA;IAC7D,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,YAAY,GAAG,IAAI,KAAK,YAAY,CAAA;IACnF,qBAAqB,EAAE,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,KAAK,mBAAmB,CAAA;IAC9E,qBAAqB,EAAE,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,eAAe,GAAG,IAAI,KAAK,eAAe,CAAA;IAC/F,wBAAwB,EAAE,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI,KAAK,sBAAsB,CAAA;IACvF,wBAAwB,EAAE,CAAC,IAAI,CAAC,EAAE,sBAAsB,GAAG,kBAAkB,GAAG,IAAI,KAAK,kBAAkB,CAAA;IAC3G,uBAAuB,EAAE,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,KAAK,qBAAqB,CAAA;IACpF,uBAAuB,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,iBAAiB,GAAG,IAAI,KAAK,iBAAiB,CAAA;CACxG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/helpers/wire/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { WireHelper } from './wire/types.js';
2
+ export declare const createWireHelper: () => WireHelper;
3
+ export declare const wireHelper: WireHelper;
4
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/helpers/wire.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKjD,eAAO,MAAM,gBAAgB,QAAO,UA+OnC,CAAA;AAED,eAAO,MAAM,UAAU,YAAqB,CAAA"}