@rytass/bpm-core-shared 0.17.9 โ†’ 0.18.1

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,55 @@
1
+ ## 0.18.1 (2026-11-01)
2
+
3
+ ### ๐Ÿš€ Features
4
+
5
+ - add form-field and prior-node approver sources ([#132](https://github.com/Rytass/BPMCore/pull/132))
6
+
7
+ ### ๐Ÿฉน Fixes
8
+
9
+ - **bpm-core-react:** fill timeline rows only from their own decision ([f336c1d](https://github.com/Rytass/BPMCore/commit/f336c1d))
10
+
11
+ ### โค๏ธ Thank You
12
+
13
+ - Chia Yu Pai @fantasywind
14
+ - Kai-Chieh Yang @coollugi
15
+
16
+ ## 0.18.0 (2026-10-28)
17
+
18
+ ### ๐Ÿš€ Features
19
+
20
+ - **bpm-core-client:** check text field formats in a Web Worker ([a3c3d65](https://github.com/Rytass/BPMCore/commit/a3c3d65))
21
+ - **shared:** detect text formats that repeat a repeating group ([5a18fc7](https://github.com/Rytass/BPMCore/commit/5a18fc7))
22
+ - **bpm-core-react:** name text length and format errors on the case pages ([074d4b9](https://github.com/Rytass/BPMCore/commit/074d4b9))
23
+ - **shared:** check text length and format with one shared rule ([a38127d](https://github.com/Rytass/BPMCore/commit/a38127d))
24
+ - **shared:** add the setUserTaskReturnAllowedTargets command ([ded2690](https://github.com/Rytass/BPMCore/commit/ded2690))
25
+ - **shared:** list the nodes a return to a chosen node may go to ([306ac32](https://github.com/Rytass/BPMCore/commit/306ac32))
26
+
27
+ ### ๐Ÿฉน Fixes
28
+
29
+ - **bpm-core:** ask the directory only about delegation rules in scope ([022304e](https://github.com/Rytass/BPMCore/commit/022304e))
30
+ - **bpm-core:** hold service-task text writes to the field's rules ([fcde1df](https://github.com/Rytass/BPMCore/commit/fcde1df))
31
+ - **bpm-core-react:** check formats off the main thread on the case pages ([58a1a9d](https://github.com/Rytass/BPMCore/commit/58a1a9d))
32
+ - **bpm-core:** keep the directory's error out of the delegation refusal ([14ccd0e](https://github.com/Rytass/BPMCore/commit/14ccd0e))
33
+ - **bpm-core:** refuse to dispatch when the delegation directory lookup fails ([8ef8a88](https://github.com/Rytass/BPMCore/commit/8ef8a88))
34
+ - **shared:** refuse a text pattern whose parentheses close the anchoring early ([330ef06](https://github.com/Rytass/BPMCore/commit/330ef06))
35
+ - **bpm-core:** check the type of a text field whose visibleWhen is false ([b256040](https://github.com/Rytass/BPMCore/commit/b256040))
36
+ - **bpm-core:** share one pattern time budget per validation pass ([8f81919](https://github.com/Rytass/BPMCore/commit/8f81919))
37
+ - **shared:** refuse every repeated group in a text field pattern ([d0daa77](https://github.com/Rytass/BPMCore/commit/d0daa77))
38
+ - **shared:** refuse repeated alternations whose branches can start alike ([5e6e12e](https://github.com/Rytass/BPMCore/commit/5e6e12e))
39
+ - **shared:** report a non-text value on a text field that has rules ([41eac23](https://github.com/Rytass/BPMCore/commit/41eac23))
40
+ - **shared:** keep a later stage that loops back out of the return targets ([86c2fd0](https://github.com/Rytass/BPMCore/commit/86c2fd0))
41
+
42
+ ### ๐Ÿ”ฅ Performance
43
+
44
+ - **shared:** walk return targets over adjacency maps ([a56de04](https://github.com/Rytass/BPMCore/commit/a56de04))
45
+ - **shared:** compile each text field pattern once and reuse it ([7410ba6](https://github.com/Rytass/BPMCore/commit/7410ba6))
46
+ - **bpm-core:** ask the host directory once per node when resolving delegation ([cb62b00](https://github.com/Rytass/BPMCore/commit/cb62b00))
47
+
48
+ ### โค๏ธ Thank You
49
+
50
+ - Chia Yu Pai @fantasywind
51
+ - Kai-Chieh Yang
52
+
1
53
  ## 0.17.9 (2026-10-27)
2
54
 
3
55
  This was a version bump only for shared to align it with other projects, there were no code changes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rytass/bpm-core-shared",
3
- "version": "0.17.9",
3
+ "version": "0.18.1",
4
4
  "description": "Shared TypeScript contracts for the Rytass BPM approval workflow stack (workflow, form, condition, identity, organization, status types).",
5
5
  "keywords": [
6
6
  "bpm",
@@ -1,5 +1,7 @@
1
1
  import { FormDefinitionSchema, FormFieldDefinition } from './form';
2
- import type { FieldAccessDisplay, FieldAccessEntry, FieldAccessFill, UserTaskNode, WorkflowDefinition, WorkflowEdge } from './workflow';
2
+ import type { FieldAccessDisplay, FieldAccessEntry, FieldAccessFill, UserTaskNode, WorkflowDefinition } from './workflow';
3
+ import { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParallelBranchSets } from './workflow-reachability';
4
+ export { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParallelBranchSets, };
3
5
  /**
4
6
  * The field access rules (ADR 20 ยง4) as structured issues. The publish lint
5
7
  * turns each into its `message` line, and the designer's field access matrix
@@ -52,13 +54,6 @@ export declare function isFieldAccessEntryValid(entry: unknown): entry is FieldA
52
54
  * the form is checked against the form (`readFormFieldAccessIssues`).
53
55
  */
54
56
  export declare function readNodeFieldAccessIssues(node: UserTaskNode): readonly FieldAccessIssue[];
55
- /**
56
- * The nodes reachable from `startNodeIds` along `edges` without entering one
57
- * of `blockedNodeIds`, the start nodes included unless blocked. Walks the
58
- * graph one frontier at a time and drops every node it has already seen, so a
59
- * cycle ends the walk instead of feeding it.
60
- */
61
- export declare function readReachableWorkflowNodeIds(edges: readonly WorkflowEdge[], startNodeIds: readonly string[], blockedNodeIds?: ReadonlySet<string>): ReadonlySet<string>;
62
57
  /**
63
58
  * Whether two nodes can both run in one case: one reaches the other, or a
64
59
  * parallel split sends each down a branch of its own (reachable from one
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FIELD_ACCESS_FILLS = exports.FIELD_ACCESS_DISPLAYS = void 0;
3
+ exports.FIELD_ACCESS_FILLS = exports.FIELD_ACCESS_DISPLAYS = exports.readWorkflowParallelBranchSets = exports.readReachableWorkflowNodeIds = exports.isOnOwnParallelBranch = void 0;
4
4
  exports.readUserTaskFillConflicts = readUserTaskFillConflicts;
5
5
  exports.isFieldAccessEntryValid = isFieldAccessEntryValid;
6
6
  exports.readNodeFieldAccessIssues = readNodeFieldAccessIssues;
7
- exports.readReachableWorkflowNodeIds = readReachableWorkflowNodeIds;
8
7
  exports.createWorkflowCoRunReader = createWorkflowCoRunReader;
9
8
  exports.readDefinitionFieldAccessIssues = readDefinitionFieldAccessIssues;
10
9
  exports.readFormFieldFillIssues = readFormFieldFillIssues;
@@ -13,6 +12,10 @@ exports.readFormFieldAccessIssues = readFormFieldAccessIssues;
13
12
  const form_1 = require("./form");
14
13
  const field_access_1 = require("./field-access");
15
14
  const workflow_graph_1 = require("./workflow-graph");
15
+ const workflow_reachability_1 = require("./workflow-reachability");
16
+ Object.defineProperty(exports, "isOnOwnParallelBranch", { enumerable: true, get: function () { return workflow_reachability_1.isOnOwnParallelBranch; } });
17
+ Object.defineProperty(exports, "readReachableWorkflowNodeIds", { enumerable: true, get: function () { return workflow_reachability_1.readReachableWorkflowNodeIds; } });
18
+ Object.defineProperty(exports, "readWorkflowParallelBranchSets", { enumerable: true, get: function () { return workflow_reachability_1.readWorkflowParallelBranchSets; } });
16
19
  function readUserTaskFillConflicts(node) {
17
20
  var _a, _b, _c, _d;
18
21
  return [
@@ -143,23 +146,6 @@ function readNodeFieldAccessIssues(node) {
143
146
  })),
144
147
  ];
145
148
  }
146
- /**
147
- * The nodes reachable from `startNodeIds` along `edges` without entering one
148
- * of `blockedNodeIds`, the start nodes included unless blocked. Walks the
149
- * graph one frontier at a time and drops every node it has already seen, so a
150
- * cycle ends the walk instead of feeding it.
151
- */
152
- function readReachableWorkflowNodeIds(edges, startNodeIds, blockedNodeIds = new Set()) {
153
- const walk = (frontier, visited) => {
154
- const fresh = [...new Set(frontier)].filter((nodeId) => !visited.has(nodeId) && !blockedNodeIds.has(nodeId));
155
- return fresh.length
156
- ? walk(edges
157
- .filter((edge) => fresh.includes(edge.source))
158
- .map((edge) => edge.target), new Set([...visited, ...fresh]))
159
- : visited;
160
- };
161
- return walk(startNodeIds, new Set());
162
- }
163
149
  /**
164
150
  * Whether two nodes can both run in one case: one reaches the other, or a
165
151
  * parallel split sends each down a branch of its own (reachable from one
@@ -175,24 +161,14 @@ function createWorkflowCoRunReader(definition) {
175
161
  if (cached !== undefined) {
176
162
  return cached;
177
163
  }
178
- const reachable = readReachableWorkflowNodeIds(definition.edges, [nodeId]);
164
+ const reachable = (0, workflow_reachability_1.readReachableWorkflowNodeIds)(definition.edges, [nodeId]);
179
165
  reachableCache.set(nodeId, reachable);
180
166
  return reachable;
181
167
  };
182
- const parallelBranches = definition.nodes
183
- .filter((node) => node.type === 'parallelGateway')
184
- .map((node) => definition.edges
185
- .filter((edge) => edge.source === node.id)
186
- .map((edge) => readReachable(edge.target)))
187
- .filter((branches) => branches.length >= 2);
188
- const isOnOwnBranch = (branches, nodeId, otherNodeId) => branches.some((branch, index) => branch.has(nodeId) &&
189
- !branch.has(otherNodeId) &&
190
- branches.some((other, otherIndex) => otherIndex !== index &&
191
- other.has(otherNodeId) &&
192
- !other.has(nodeId)));
168
+ const parallelBranches = (0, workflow_reachability_1.readWorkflowParallelBranchSets)(definition, readReachable);
193
169
  return (nodeId, otherNodeId) => readReachable(nodeId).has(otherNodeId) ||
194
170
  readReachable(otherNodeId).has(nodeId) ||
195
- parallelBranches.some((branches) => isOnOwnBranch(branches, nodeId, otherNodeId));
171
+ parallelBranches.some((branches) => (0, workflow_reachability_1.isOnOwnParallelBranch)(branches, nodeId, otherNodeId));
196
172
  }
197
173
  /**
198
174
  * The issues read from the whole definition, in publish-lint order: a system
@@ -1 +1 @@
1
- {"version":3,"file":"field-access-lint.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/field-access-lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-access-lint.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/field-access-lint.ts"],"names":[],"mappings":";;;AAkFA,8DAeC;AA+CD,0DAUC;AAmBD,8DA0EC;AAUD,8DA4BC;AAiBD,0EA6DC;AAUD,0DAqDC;AAcD,kDAaC;AAYD,8DAyFC;AA1iBD,iCAKgB;AAChB,iDAKwB;AAQxB,qDAI0B;AAC1B,mEAIiC;AAK/B,sGARA,6CAAqB,OAQA;AACrB,6GARA,oDAA4B,OAQA;AAC5B,+GARA,sDAA8B,OAQA;AA+ChC,SAAgB,yBAAyB,CACvC,IAAkB;;IAElB,OAAO;QACL,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,cAAc,0CAAE,IAAI,MAAK,cAAc;YACrD,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,cAAc,0CAAE,IAAI,MAAK,QAAQ;YACzC,CAAC,CAAE,CAAC,aAAa,CAAW;YAC5B,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,SAAS,MAAK,cAAc;YAC7C,CAAC,CAAE,CAAC,aAAa,CAAW;YAC5B,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,0CAAE,SAAS,MAAK,WAAW;YACvD,CAAC,CAAE,CAAC,UAAU,CAAW;YACzB,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAQtB;IACF,WAAW,EAAE;QACX,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,uCAAsB,CAAC,sBAAsB;KACvD;IACD,WAAW,EAAE;QACX,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,uCAAsB,CAAC,sBAAsB;KACvD;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,uCAAsB,CAAC,mBAAmB;KACpD;CACF,CAAC;AAEF,SAAS,aAAa,CACpB,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAEY,QAAA,qBAAqB,GAAkC;IAClE,MAAM;IACN,MAAM;CACP,CAAC;AAEW,QAAA,kBAAkB,GAA+B;IAC5D,MAAM;IACN,UAAU;IACV,UAAU;CACX,CAAC;AAEF;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,KAAc;IAEd,OAAO,CACL,aAAa,CAAC,KAAK,CAAC;QACpB,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ;QACrC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAC/B,6BAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;QACrE,0BAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,yBAAyB,CACvC,IAAkB;IAElB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACvB,MAAM,MAAM,GAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD,MAAM,YAAY,GAChB,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,uCAAsB,CAAC,sBAAsB,CAAC,MAAM,CAAC;gBAC9D,OAAO,EAAE,CAAC,MAAM,CAAC;aAClB;SACF,CAAC;IACR,MAAM,GAAG,GAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAE3C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAmC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAChE,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,GAAG,YAAY;YACf;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,uCAAsB,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC1D,OAAO,EAAE,CAAC,MAAM,CAAC;aAClB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,IAAA,wCAAyB,EAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAElE,OAAO;QACL,GAAG,YAAY;QACf,GAAG,SAAS;aACT,MAAM,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC;aAClE,MAAM,CACL,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,CACpE;aACA,GAAG,CAAC,CAAC,QAAQ,EAAoB,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,sBAAsB;YAC5B,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,uCAAsB,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC;YACtE,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB,CAAC,CAAC;QACL,GAAG,IAAA,kCAAmB,EAAC,IAAI,CAAC;aACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;aACpE,GAAG,CAAC,CAAC,KAAK,EAAoB,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,uBAAuB;YAC7B,SAAS,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3B,OAAO,EAAE,uCAAsB,CAAC,qBAAqB,CACnD,MAAM,EACN,KAAK,CAAC,QAAQ,CACf;YACD,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB,CAAC,CAAC;QACL,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAC9D,CAAC,QAAQ,EAAoB,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC,IAAI;YACzC,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvD,OAAO,EAAE,CAAC,MAAM,CAAC;SAClB,CAAC,CACH;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,yBAAyB,CACvC,UAA8B;IAE9B,MAAM,cAAc,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC9D,MAAM,aAAa,GAAG,CAAC,MAAc,EAAuB,EAAE;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,SAAS,GAAG,IAAA,oDAA4B,EAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3E,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEtC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAA,sDAA8B,EACrD,UAAU,EACV,aAAa,CACd,CAAC;IAEF,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC7B,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QACtC,aAAa,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QACtC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjC,IAAA,6CAAqB,EAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CACrD,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,+BAA+B,CAC7C,UAA8B;IAE9B,MAAM,cAAc,GAAG,IAAA,0CAA2B,EAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK;SACjC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;SAC7C,OAAO,CAAC,CAAC,IAAI,EAA+B,EAAE;QAC7C,MAAM,MAAM,GAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACzC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,QAAQ,GACZ,aAAa,CAAC,MAAM,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,KAAK,gBAAgB;YACnC,OAAO,SAAS,KAAK,QAAQ;YAC3B,CAAC,CAAC,IAAA,2CAA4B,EAAC,SAAS,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO,QAAQ,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC3D,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,CAAC,QAAQ,CAAC;oBACrB,OAAO,EAAE,uCAAsB,CAAC,0BAA0B,CACxD,IAAI,CAAC,EAAE,EACP,QAAQ,CACT;oBACD,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;iBACnB;aACF;YACH,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACL,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC,IAAI,EAAwB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CACzD,CAAC;IACF,MAAM,UAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC1D,MAAM,WAAW,GAAG;YAClB,GAAG,IAAI,GAAG,CACR,SAAS;iBACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,wCAAyB,EAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;iBAC/D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAC1B;SACF,CAAC;QAEF,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAC3C,WAAW;aACR,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;aAChB,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,WAAW,EAAoB,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,uCAAuC;YAC7C,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,uCAAsB,CAAC,qCAAqC,CACnE,QAAQ,EACR,MAAM,EACN,WAAW,CACZ;YACD,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;SAC/B,CAAC,CAAC,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,uBAAuB,CACrC,KAA0B;IAE1B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAG,CACZ,IAA0B,EAC1B,OAAe,EACG,EAAE,CAAC,CAAC;QACtB,IAAI;QACJ,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,OAAO;QACP,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,2CAA0B,CAAC,MAAM,CAAC,CAAC,IAAI,EAAW,EAAE,CACrD,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ;YACtC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI;YACtB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAC9B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,KAAK,CACH,6BAA6B,EAC7B,uCAAsB,CAAC,2BAA2B,CAAC,QAAQ,EAAE,IAAI,CAAC,CACnE,CACF;QACD,GAAG,CAAC,IAAA,sCAA+B,EAAC,KAAK,CAAC;YACxC,CAAC,CAAC;gBACE,KAAK,CACH,+BAA+B,EAC/B,uCAAsB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAC/D;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa;YAC9B,CAAC,CAAC;gBACE,KAAK,CACH,+BAA+B,EAC/B,uCAAsB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAC/D;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAA,6BAAsB,EAAC,KAAK,CAAC;YACjC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sCAA+B,CAAC;YACjD,CAAC,CAAC;gBACE,KAAK,CACH,qCAAqC,EACrC,uCAAsB,CAAC,mCAAmC,CACxD,QAAQ,CACT,CACF;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,mBAAmB,CACjC,UAAkB,EAClB,QAAgB;IAEhB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACpE,oEAAoE;IACpE,qCAAqC;IACrC,MAAM,IAAI,GAAG,4CAA4C,CAAC;IAE1D,OAAO;QACL,IAAI,MAAM,CAAC,GAAG,IAAI,UAAU,UAAU,qBAAqB,EAAE,GAAG,CAAC;QACjE,IAAI,MAAM,CAAC,GAAG,IAAI,cAAc,UAAU,aAAa,EAAE,GAAG,CAAC;KAC9D,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CACvC,UAA8B,EAC9B,MAAmC;;IAEnC,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,mCAAI,EAAE,CAAC,CAAC,GAAG,CACxB,CAAC,KAAK,EAA0C,EAAE,CAAC;QACjD,KAAK,CAAC,QAAQ;QACd,KAAK;KACN,CACF,CACF,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC,IAAI,EAAwB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CACzD,CAAC;IACF,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAC1C,CAAC,IAAI,EAA+B,EAAE,CACpC,IAAA,kCAAmB,EAAC,IAAI,CAAC;SACtB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAW,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,OAAO,EAAE,uCAAsB,CAAC,uBAAuB,CACrD,IAAI,CAAC,EAAE,EACP,QAAQ,CACT;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;KACnB,CAAC,CAAC,CACR,CAAC;IACF,MAAM,qBAAqB,GAAG,SAAS,CAAC,OAAO,CAC7C,CAAC,IAAI,EAA+B,EAAE,CACpC,IAAA,kCAAmB,EAAC,IAAI,CAAC;SACtB,MAAM,CACL,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAW,EAAE;;QAC9B,OAAA,IAAI,KAAK,UAAU;YACnB,CAAA,MAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,0CAAE,IAAI,MAAK,SAAS,CAAA;KAAA,CAChD;SACA,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,+BAA+B;QACrC,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,OAAO,EAAE,uCAAsB,CAAC,6BAA6B,CAC3D,IAAI,CAAC,EAAE,EACP,QAAQ,CACT;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;KACnB,CAAC,CAAC,CACR,CAAC;IACF,MAAM,cAAc,GAAG,IAAA,0CAA2B,EAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,mCAAI,EAAE,CAAC;SAC/C,MAAM,CAAC,CAAC,KAAK,EAAW,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC/D,OAAO,CAAC,CAAC,KAAK,EAA+B,EAAE,CAC9C,gDAA+B,CAAC,OAAO,CACrC,CAAC,IAAI,EAA+B,EAAE;QACpC,MAAM,UAAU,GAAY,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,OAAO,OAAO,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;iBAChB,MAAM,CAAC,CAAC,QAAQ,EAAW,EAAE,CAC5B,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC1C;iBACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,kCAAkC;gBACxC,SAAS,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBACrC,OAAO,EACL,uCAAsB,CAAC,gCAAgC,CACrD,KAAK,CAAC,QAAQ,EACd,IAAI,EACJ,QAAQ,CACT;gBACH,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;YACP,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CACF,CACF,CAAC;IACJ,MAAM,WAAW,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,OAAO,CAC7C,CAAC,QAAQ,EAA+B,EAAE;QACxC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CACF,CAAC;IAEF,OAAO;QACL,GAAG,kBAAkB;QACrB,GAAG,WAAW;QACd,GAAG,qBAAqB;QACxB,GAAG,mBAAmB;KACvB,CAAC;AACJ,CAAC"}
package/src/lib/form.d.ts CHANGED
@@ -2,7 +2,7 @@ export interface FormDefinitionSchema {
2
2
  readonly fields: readonly FormFieldDefinition[];
3
3
  readonly schemaVersion: 1;
4
4
  }
5
- export type FormFieldDefinition = TextFieldDefinition | NumberFieldDefinition | DateFieldDefinition | SelectFieldDefinition | AutoCompleteFieldDefinition | RadioFieldDefinition | CheckboxFieldDefinition | BooleanFieldDefinition | FileUploadFieldDefinition | MemberFieldDefinition | TableFieldDefinition;
5
+ export type FormFieldDefinition = TextFieldDefinition | NumberFieldDefinition | DateFieldDefinition | SelectFieldDefinition | AutoCompleteFieldDefinition | RadioFieldDefinition | CheckboxFieldDefinition | BooleanFieldDefinition | FileUploadFieldDefinition | MemberFieldDefinition | OrgUnitFieldDefinition | TableFieldDefinition;
6
6
  interface BaseFormFieldDefinition<TType extends string> {
7
7
  readonly defaultValue?: FormFieldValue;
8
8
  readonly description?: string;
@@ -40,8 +40,17 @@ export type TextFieldDefinition = BaseFormFieldDefinition<'text' | 'textarea'> &
40
40
  * `http(s)://` ็ถฒๅ€ๆœƒ่ฎŠๆˆ้€ฃ็ต๏ผŒๅ…ถไป–ๅ€ผ็…ง็ด”ๆ–‡ๅญ—้กฏ็คบใ€‚ไธๆ”ฏๆด table ๆฌ„ใ€‚
41
41
  */
42
42
  readonly displayAs?: 'link';
43
+ /** ๅญ—ๆ•ธไธŠ้™๏ผŒไปฅๅญ—ๅ…ƒ๏ผˆcode point๏ผ‰่จˆใ€‚้€ๅ‡บๆ™‚ๅ‰ๅพŒ็ซฏ้ƒฝๆœƒๆชขๆŸฅใ€‚ */
43
44
  readonly maxLength?: number;
45
+ /** ๅญ—ๆ•ธไธ‹้™๏ผŒไปฅๅญ—ๅ…ƒ๏ผˆcode point๏ผ‰่จˆ๏ผ›็ฉบๅ€ผไบค็ตฆ `required` ๅˆคๆ–ทใ€‚ */
44
46
  readonly minLength?: number;
47
+ /**
48
+ * ๆ ผๅผ๏ผšๆ•ดๅ€‹ๅ€ผๅฟ…้ ˆ็ฌฆๅˆ็š„ๆญฃ่ฆ่กจ็คบๅผ๏ผŒไธ็”จ่‡ชๅทฑๅฏซ `^`๏ผ`$`๏ผˆๅŒ HTML `pattern`๏ผ‰๏ผŒ
49
+ * ไปฅ `u` ๆ——ๆจ™ๆฏ”ๅฐใ€‚้€ๅ‡บๆ™‚ๅ‰ๅพŒ็ซฏ้ƒฝๆœƒๆชขๆŸฅ๏ผŒ็ฉบๅ€ผไธๆชขๆŸฅใ€‚
50
+ */
51
+ readonly pattern?: string;
52
+ /** ไธ็ฌฆๅˆ `pattern` ๆ™‚็ตฆๅกซๅฏซ่€…็œ‹็š„่จŠๆฏ๏ผ›ๆฒ’ๅกซๆ™‚้กฏ็คบ้ ่จญ่จŠๆฏใ€‚ */
53
+ readonly patternErrorMessage?: string;
45
54
  };
46
55
  export type NumberFieldDefinition = BaseFormFieldDefinition<'number' | 'money'> & {
47
56
  readonly maximum?: number;
@@ -118,6 +127,12 @@ export type FileUploadFieldDefinition = BaseFormFieldDefinition<'file_upload'> &
118
127
  export type MemberFieldDefinition = BaseFormFieldDefinition<'member'> & {
119
128
  readonly multiple?: boolean;
120
129
  };
130
+ /**
131
+ * ็ต„็น”้ธๆ“‡. The stored value is a single organization unit id (string) โ€” id
132
+ * only, so it feeds a `FORM_ORG_UNIT_MANAGER` approver resolver unchanged.
133
+ * `multiple` is not supported and it is not a table column type.
134
+ */
135
+ export type OrgUnitFieldDefinition = BaseFormFieldDefinition<'org_unit'>;
121
136
  /**
122
137
  * Field types a table column may use. `textarea`, `radio`, `checkbox`,
123
138
  * `file_upload` and nested `table` are intentionally excluded in V1
@@ -156,6 +171,9 @@ export interface FormLayoutItem {
156
171
  }
157
172
  export declare function isFormOptionFieldDefinition(field: FormFieldDefinition): field is FormOptionFieldDefinition;
158
173
  export declare function isMemberFieldDefinition(field: FormFieldDefinition): field is MemberFieldDefinition;
174
+ export declare function isOrgUnitFieldDefinition(field: FormFieldDefinition): field is OrgUnitFieldDefinition;
175
+ /** Whether `value` is a well-formed stored org unit value: a non-blank string. */
176
+ export declare function isFormOrgUnitValue(value: unknown): boolean;
159
177
  /**
160
178
  * Whether `value` is a well-formed stored member value: a non-empty string
161
179
  * (`multiple` false) or an array of non-empty strings (`multiple` true). `[]`
@@ -168,6 +186,87 @@ export declare function isFormMemberValue(value: unknown, multiple: boolean): bo
168
186
  * that is not a string or an array of strings yields no ids.
169
187
  */
170
188
  export declare function readFormMemberIds(value: FormFieldValue | undefined): readonly string[];
189
+ /**
190
+ * Runs a compiled text field pattern on a value and answers whether it
191
+ * matches. A test with a time budget throws when the budget runs out; the
192
+ * error goes to the caller of {@link readTextFieldValueIssue}.
193
+ */
194
+ export type TextFieldPatternTest = (pattern: RegExp, value: string) => boolean;
195
+ export type TextFieldValueIssue = Readonly<{
196
+ kind: 'maxLength';
197
+ limit: number;
198
+ }> | Readonly<{
199
+ kind: 'minLength';
200
+ limit: number;
201
+ }> | Readonly<{
202
+ kind: 'pattern';
203
+ message: string | null;
204
+ }> | Readonly<{
205
+ kind: 'type';
206
+ }>;
207
+ /**
208
+ * Compiles a text field `pattern` the way the value check applies it: the whole
209
+ * value has to match, under the `u` flag. Returns `null` for a pattern that
210
+ * does not compile, which the schema lint rejects at publish time.
211
+ *
212
+ * The pattern is compiled on its own first: wrapped in `^(?:โ€ฆ)$` straight
213
+ * away, an unbalanced one such as `a)|(?:b` would close the wrapper early and
214
+ * compile as `^(?:a)|(?:b)$`, which no longer anchors the whole value.
215
+ *
216
+ * Compiled once per pattern and reused, since a table checks the same pattern
217
+ * on every row. The flags carry no `g` or `y`, so a shared `RegExp` keeps no
218
+ * `lastIndex` between tests.
219
+ */
220
+ export declare function compileTextFieldPattern(pattern: string): RegExp | null;
221
+ /**
222
+ * How long the text field patterns of one validation pass may spend matching,
223
+ * together. A normal format check spends about a microsecond in the regular
224
+ * expression, so even a full table of them uses a small part of it; a pass
225
+ * that still runs past this is backtracking. The engine enforces it on submit
226
+ * and fill, and the form renderer applies the same budget in a Web Worker
227
+ * (`validateFormRendererValuesInWorker`), so the two agree on what times out.
228
+ */
229
+ export declare const TEXT_FIELD_PATTERN_TIME_BUDGET_MS = 50;
230
+ /** Longest `pattern` the schema lint accepts. */
231
+ export declare const TEXT_FIELD_PATTERN_MAX_LENGTH = 500;
232
+ /** Longest `patternErrorMessage` the schema lint accepts. */
233
+ export declare const TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH = 200;
234
+ /**
235
+ * Whether a text field `pattern` repeats a group: a `(...)` followed by `*`,
236
+ * `+`, `{n,}`, `{n,m}` with m > 1 or `{n}` with n > 1. The engine runs the
237
+ * pattern on whatever a filler sends, and a repeated group is the only way a
238
+ * pattern's backtracking can grow exponentially with the length of the value:
239
+ * `(a+)*`, `(\w|\d)+`, `(a?a?)+` and `(ab?|b)+` all take seconds on a few
240
+ * dozen characters that almost match. A repeated character, class or escape
241
+ * matches each character one way, so without repeated groups the cost grows
242
+ * at most polynomially with the value. The degree grows with the pattern,
243
+ * though: `\w*\w*\w*!` is slow on a few hundred characters, a dozen `\w*`
244
+ * on a few dozen, and a long run of overlapping alternatives such as
245
+ * `(?:a|a)(?:a|a)โ€ฆ` is slow on any value. The engine bounds all of that with a
246
+ * time budget (see the `testPattern` option of {@link readTextFieldValueIssue})
247
+ * and refuses the value as not checked; the form renderer applies the same
248
+ * budget in a Web Worker (`validateFormRendererValuesInWorker`). This check
249
+ * does not warn the designer about it.
250
+ * Safe repeated groups are refused too, such as `(-[a-z]+)*` or `(ab){2}`;
251
+ * the designer writes the repetition out or drops the group.
252
+ */
253
+ export declare function hasRepeatedTextFieldPatternGroup(pattern: string): boolean;
254
+ /**
255
+ * The first rule a filled-in text value breaks โ€” length first, then format โ€”
256
+ * or `null` when it passes. The one check the form renderer and the engine
257
+ * both run, so a value the filler is allowed to send is one the server takes.
258
+ * An empty value is left to the required check. Any other value that is not a
259
+ * string is a `type` issue when the field sets a length or a format, since
260
+ * none of those rules can be applied to it; a field without rules keeps
261
+ * accepting what it accepted before. A pattern that does not compile fails
262
+ * closed: the lint keeps one from being published, and silently accepting
263
+ * every value would be worse. `testPattern` runs the compiled pattern on the
264
+ * value; the engine passes one with a time limit, since a pattern the lint
265
+ * lets through can still backtrack long enough to stall a server.
266
+ */
267
+ export declare function readTextFieldValueIssue(field: Pick<TextFieldDefinition, 'maxLength' | 'minLength' | 'pattern' | 'patternErrorMessage'>, value: unknown, { testPattern, }?: {
268
+ readonly testPattern?: TextFieldPatternTest;
269
+ }): TextFieldValueIssue | null;
171
270
  export declare function isTableFieldDefinition(field: FormFieldDefinition): field is TableFieldDefinition;
172
271
  export declare function isTableColumnFieldType(type: FormFieldDefinition['type']): type is TableColumnDefinition['type'];
173
272
  export declare function isFormTableCellValue(value: unknown): value is FormTableCellValue;
package/src/lib/form.js CHANGED
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FORM_TABLE_MAX_ROWS = exports.TABLE_COLUMN_FIELD_TYPES = void 0;
3
+ exports.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH = exports.TEXT_FIELD_PATTERN_MAX_LENGTH = exports.TEXT_FIELD_PATTERN_TIME_BUDGET_MS = exports.FORM_TABLE_MAX_ROWS = exports.TABLE_COLUMN_FIELD_TYPES = void 0;
4
4
  exports.isFormOptionFieldDefinition = isFormOptionFieldDefinition;
5
5
  exports.isMemberFieldDefinition = isMemberFieldDefinition;
6
+ exports.isOrgUnitFieldDefinition = isOrgUnitFieldDefinition;
7
+ exports.isFormOrgUnitValue = isFormOrgUnitValue;
6
8
  exports.isFormMemberValue = isFormMemberValue;
7
9
  exports.readFormMemberIds = readFormMemberIds;
10
+ exports.compileTextFieldPattern = compileTextFieldPattern;
11
+ exports.hasRepeatedTextFieldPatternGroup = hasRepeatedTextFieldPatternGroup;
12
+ exports.readTextFieldValueIssue = readTextFieldValueIssue;
8
13
  exports.isTableFieldDefinition = isTableFieldDefinition;
9
14
  exports.isTableColumnFieldType = isTableColumnFieldType;
10
15
  exports.isFormTableCellValue = isFormTableCellValue;
@@ -45,6 +50,13 @@ function isFormOptionFieldDefinition(field) {
45
50
  function isMemberFieldDefinition(field) {
46
51
  return field.type === 'member';
47
52
  }
53
+ function isOrgUnitFieldDefinition(field) {
54
+ return field.type === 'org_unit';
55
+ }
56
+ /** Whether `value` is a well-formed stored org unit value: a non-blank string. */
57
+ function isFormOrgUnitValue(value) {
58
+ return typeof value === 'string' && value.trim().length > 0;
59
+ }
48
60
  /**
49
61
  * Whether `value` is a well-formed stored member value: a non-empty string
50
62
  * (`multiple` false) or an array of non-empty strings (`multiple` true). `[]`
@@ -70,6 +82,170 @@ function readFormMemberIds(value) {
70
82
  ? value.filter((item) => typeof item === 'string' && item.trim().length > 0)
71
83
  : [];
72
84
  }
85
+ function readCompiledPatternMatch(pattern, value, testPattern) {
86
+ const compiled = compileTextFieldPattern(pattern);
87
+ return compiled !== null && testPattern(compiled, value);
88
+ }
89
+ /** How many compiled patterns {@link compileTextFieldPattern} keeps. */
90
+ const COMPILED_TEXT_FIELD_PATTERN_CACHE_SIZE = 256;
91
+ const compiledTextFieldPatterns = new Map();
92
+ /**
93
+ * Compiles a text field `pattern` the way the value check applies it: the whole
94
+ * value has to match, under the `u` flag. Returns `null` for a pattern that
95
+ * does not compile, which the schema lint rejects at publish time.
96
+ *
97
+ * The pattern is compiled on its own first: wrapped in `^(?:โ€ฆ)$` straight
98
+ * away, an unbalanced one such as `a)|(?:b` would close the wrapper early and
99
+ * compile as `^(?:a)|(?:b)$`, which no longer anchors the whole value.
100
+ *
101
+ * Compiled once per pattern and reused, since a table checks the same pattern
102
+ * on every row. The flags carry no `g` or `y`, so a shared `RegExp` keeps no
103
+ * `lastIndex` between tests.
104
+ */
105
+ function compileTextFieldPattern(pattern) {
106
+ const cached = compiledTextFieldPatterns.get(pattern);
107
+ if (cached !== undefined) {
108
+ return cached;
109
+ }
110
+ const compiled = compileAnchoredTextFieldPattern(pattern);
111
+ if (compiledTextFieldPatterns.size >= COMPILED_TEXT_FIELD_PATTERN_CACHE_SIZE) {
112
+ // Designers write the patterns, so the set is open-ended: drop the oldest.
113
+ compiledTextFieldPatterns.delete(compiledTextFieldPatterns.keys().next().value);
114
+ }
115
+ compiledTextFieldPatterns.set(pattern, compiled);
116
+ return compiled;
117
+ }
118
+ function compileAnchoredTextFieldPattern(pattern) {
119
+ try {
120
+ new RegExp(pattern, 'u');
121
+ return new RegExp(`^(?:${pattern})$`, 'u');
122
+ }
123
+ catch (_a) {
124
+ return null;
125
+ }
126
+ }
127
+ /**
128
+ * How long the text field patterns of one validation pass may spend matching,
129
+ * together. A normal format check spends about a microsecond in the regular
130
+ * expression, so even a full table of them uses a small part of it; a pass
131
+ * that still runs past this is backtracking. The engine enforces it on submit
132
+ * and fill, and the form renderer applies the same budget in a Web Worker
133
+ * (`validateFormRendererValuesInWorker`), so the two agree on what times out.
134
+ */
135
+ exports.TEXT_FIELD_PATTERN_TIME_BUDGET_MS = 50;
136
+ /** Longest `pattern` the schema lint accepts. */
137
+ exports.TEXT_FIELD_PATTERN_MAX_LENGTH = 500;
138
+ /** Longest `patternErrorMessage` the schema lint accepts. */
139
+ exports.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH = 200;
140
+ const REPEATING_QUANTIFIER = /^(?:([*+])|\{(\d+)(,(\d*))?\})\??/;
141
+ const BRACED_ESCAPE = /^\\[pPu]\{[^}]*\}/;
142
+ const FIXED_ESCAPE = /^\\(?:x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|k<[^>]*>)/;
143
+ /**
144
+ * Length of the quantifier at `index` when it lets the preceding atom repeat
145
+ * (`*`, `+`, `{n,}`, `{n,m}` with m > 1, `{n}` with n > 1, each optionally
146
+ * lazy), or 0. `?` and `{1}` do not repeat anything.
147
+ */
148
+ function readRepeatingQuantifierLength(pattern, index) {
149
+ const match = REPEATING_QUANTIFIER.exec(pattern.slice(index));
150
+ if (!match) {
151
+ return 0;
152
+ }
153
+ const [quantifier, starOrPlus, minimum, range, maximum] = match;
154
+ const repeats = starOrPlus
155
+ ? true
156
+ : range === undefined
157
+ ? Number(minimum) > 1
158
+ : maximum === '' || Number(maximum) > 1;
159
+ return repeats ? quantifier.length : 0;
160
+ }
161
+ /** Length of the escape at `index`, so `\u{41}` or `\p{L}` is read as one atom. */
162
+ function readEscapeLength(pattern, index) {
163
+ var _a;
164
+ const rest = pattern.slice(index);
165
+ const match = (_a = BRACED_ESCAPE.exec(rest)) !== null && _a !== void 0 ? _a : FIXED_ESCAPE.exec(rest);
166
+ return match ? match[0].length : 2;
167
+ }
168
+ /**
169
+ * Whether a text field `pattern` repeats a group: a `(...)` followed by `*`,
170
+ * `+`, `{n,}`, `{n,m}` with m > 1 or `{n}` with n > 1. The engine runs the
171
+ * pattern on whatever a filler sends, and a repeated group is the only way a
172
+ * pattern's backtracking can grow exponentially with the length of the value:
173
+ * `(a+)*`, `(\w|\d)+`, `(a?a?)+` and `(ab?|b)+` all take seconds on a few
174
+ * dozen characters that almost match. A repeated character, class or escape
175
+ * matches each character one way, so without repeated groups the cost grows
176
+ * at most polynomially with the value. The degree grows with the pattern,
177
+ * though: `\w*\w*\w*!` is slow on a few hundred characters, a dozen `\w*`
178
+ * on a few dozen, and a long run of overlapping alternatives such as
179
+ * `(?:a|a)(?:a|a)โ€ฆ` is slow on any value. The engine bounds all of that with a
180
+ * time budget (see the `testPattern` option of {@link readTextFieldValueIssue})
181
+ * and refuses the value as not checked; the form renderer applies the same
182
+ * budget in a Web Worker (`validateFormRendererValuesInWorker`). This check
183
+ * does not warn the designer about it.
184
+ * Safe repeated groups are refused too, such as `(-[a-z]+)*` or `(ab){2}`;
185
+ * the designer writes the repetition out or drops the group.
186
+ */
187
+ function hasRepeatedTextFieldPatternGroup(pattern) {
188
+ const scan = (index, inClass) => {
189
+ if (index >= pattern.length) {
190
+ return false;
191
+ }
192
+ const char = pattern[index];
193
+ if (char === '\\') {
194
+ return scan(index + readEscapeLength(pattern, index), inClass);
195
+ }
196
+ if (inClass) {
197
+ return scan(index + 1, char !== ']');
198
+ }
199
+ if (char === '[') {
200
+ return scan(index + 1, true);
201
+ }
202
+ return ((char === ')' && readRepeatingQuantifierLength(pattern, index + 1) > 0) ||
203
+ scan(index + 1, false));
204
+ };
205
+ return scan(0, false);
206
+ }
207
+ /**
208
+ * The first rule a filled-in text value breaks โ€” length first, then format โ€”
209
+ * or `null` when it passes. The one check the form renderer and the engine
210
+ * both run, so a value the filler is allowed to send is one the server takes.
211
+ * An empty value is left to the required check. Any other value that is not a
212
+ * string is a `type` issue when the field sets a length or a format, since
213
+ * none of those rules can be applied to it; a field without rules keeps
214
+ * accepting what it accepted before. A pattern that does not compile fails
215
+ * closed: the lint keeps one from being published, and silently accepting
216
+ * every value would be worse. `testPattern` runs the compiled pattern on the
217
+ * value; the engine passes one with a time limit, since a pattern the lint
218
+ * lets through can still backtrack long enough to stall a server.
219
+ */
220
+ function readTextFieldValueIssue(field, value, { testPattern = (pattern, text) => pattern.test(text), } = {}) {
221
+ var _a;
222
+ if (value === undefined || value === null || value === '') {
223
+ return null;
224
+ }
225
+ if (typeof value !== 'string') {
226
+ return typeof field.minLength === 'number' ||
227
+ typeof field.maxLength === 'number' ||
228
+ Boolean(field.pattern)
229
+ ? { kind: 'type' }
230
+ : null;
231
+ }
232
+ const length = Array.from(value).length;
233
+ if (typeof field.minLength === 'number' && length < field.minLength) {
234
+ return { kind: 'minLength', limit: field.minLength };
235
+ }
236
+ if (typeof field.maxLength === 'number' && length > field.maxLength) {
237
+ return { kind: 'maxLength', limit: field.maxLength };
238
+ }
239
+ if (typeof field.pattern === 'string' &&
240
+ field.pattern !== '' &&
241
+ !readCompiledPatternMatch(field.pattern, value, testPattern)) {
242
+ return {
243
+ kind: 'pattern',
244
+ message: ((_a = field.patternErrorMessage) === null || _a === void 0 ? void 0 : _a.trim()) || null,
245
+ };
246
+ }
247
+ return null;
248
+ }
73
249
  function isTableFieldDefinition(field) {
74
250
  return field.type === 'table';
75
251
  }
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../../../libs/shared/src/lib/form.ts"],"names":[],"mappings":";;;AAiQA,kEASC;AAED,0DAIC;AAED,4DAIC;AAGD,gDAEC;AAQD,8CASC;AAMD,8CAaC;AA2CD,0DAqBC;AAiFD,4EA2BC;AAeD,0DA4CC;AAED,wDAIC;AAED,wDAMC;AAED,oDAUC;AAED,kDASC;AASD,oDAIC;AAOD,wDAIC;AAQD,kDAEC;AAED,0EAQC;AAED,8EAQC;AAED,gEAYC;AAED,sEAOC;AApcD;;;;GAIG;AACU,QAAA,wBAAwB,GACnC;IACE,cAAc;IACd,SAAS;IACT,MAAM;IACN,UAAU;IACV,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;CACP,CAAC;AAEJ;;;GAGG;AACU,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAwBvC,SAAgB,2BAA2B,CACzC,KAA0B;IAE1B,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,QAAQ;QACvB,KAAK,CAAC,IAAI,KAAK,cAAc;QAC7B,KAAK,CAAC,IAAI,KAAK,OAAO;QACtB,KAAK,CAAC,IAAI,KAAK,UAAU,CAC1B,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CACrC,KAA0B;IAE1B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED,SAAgB,wBAAwB,CACtC,KAA0B;IAE1B,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,kFAAkF;AAClF,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,KAAc,EAAE,QAAiB;IACjE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,KAAiC;IAEjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CACV,CAAC,IAAI,EAAkB,EAAE,CACvB,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CACrD;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AASD,SAAS,wBAAwB,CAC/B,OAAe,EACf,KAAa,EACb,WAAiC;IAEjC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO,QAAQ,KAAK,IAAI,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAQD,wEAAwE;AACxE,MAAM,sCAAsC,GAAG,GAAG,CAAC;AAEnD,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,SAAgB,uBAAuB,CAAC,OAAe;IACrD,MAAM,MAAM,GAAG,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAE1D,IACE,yBAAyB,CAAC,IAAI,IAAI,sCAAsC,EACxE,CAAC;QACD,2EAA2E;QAC3E,yBAAyB,CAAC,MAAM,CAC9B,yBAAyB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CACxD,CAAC;IACJ,CAAC;IAED,yBAAyB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEjD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,+BAA+B,CAAC,OAAe;IACtD,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEzB,OAAO,IAAI,MAAM,CAAC,OAAO,OAAO,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACU,QAAA,iCAAiC,GAAG,EAAE,CAAC;AAEpD,iDAAiD;AACpC,QAAA,6BAA6B,GAAG,GAAG,CAAC;AAEjD,6DAA6D;AAChD,QAAA,2CAA2C,GAAG,GAAG,CAAC;AAE/D,MAAM,oBAAoB,GAAG,mCAAmC,CAAC;AACjE,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,YAAY,GAAG,2DAA2D,CAAC;AAEjF;;;;GAIG;AACH,SAAS,6BAA6B,CAAC,OAAe,EAAE,KAAa;IACnE,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;IAChE,MAAM,OAAO,GAAG,UAAU;QACxB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,KAAK,SAAS;YACnB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACrB,CAAC,CAAC,OAAO,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,mFAAmF;AACnF,SAAS,gBAAgB,CAAC,OAAe,EAAE,KAAa;;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,gCAAgC,CAAC,OAAe;IAC9D,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAgB,EAAW,EAAE;QACxD,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,CACL,CAAC,IAAI,KAAK,GAAG,IAAI,6BAA6B,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CACvB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,uBAAuB,CACrC,KAGC,EACD,KAAc,EACd,EACE,WAAW,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MACA,EAAE;;IAEvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACxC,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;YACnC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YACtB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;YAClB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAExC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,IACE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,KAAK,CAAC,OAAO,KAAK,EAAE;QACpB,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,EAC5D,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAA,MAAA,KAAK,CAAC,mBAAmB,0CAAE,IAAI,EAAE,KAAI,IAAI;SACnD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,sBAAsB,CACpC,KAA0B;IAE1B,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAChC,CAAC;AAED,SAAgB,sBAAsB,CACpC,IAAiC;IAEjC,OAAO,gCAAwB,CAAC,QAAQ,CACtC,IAAqC,CACtC,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAClC,KAAc;IAEd,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,SAAS;QAC1B,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,KAAc;IAEd,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CACpC,KAAiC;IAEjC,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,+BAA+B,CAC7C,KAA0B;IAE1B,OAAO,CACL,2BAA2B,CAAC,KAAK,CAAC;QAClC,YAAY,IAAI,KAAK;QACrB,OAAO,KAAK,CAAC,UAAU,KAAK,WAAW,CACxC,CAAC;AACJ,CAAC;AAED,SAAgB,iCAAiC,CAC/C,KAA0B;IAE1B,OAAO,CACL,2BAA2B,CAAC,KAAK,CAAC;QAClC,SAAS,IAAI,KAAK;QAClB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,SAAgB,0BAA0B,CACxC,KAAgC;;IAEhC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,MAAA,KAAK,CAAC,IAAI,mCAAI,QAAQ,CAAC;AAChC,CAAC;AAED,SAAgB,6BAA6B,CAC3C,MAA4B;IAE5B,uCACK,MAAM,KACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,IACvD;AACJ,CAAC;AAsBD,SAAS,4BAA4B,CACnC,KAA0B;;IAE1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,uCACK,KAAK,KACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAC1D;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC7D,uCACK,KAAK,KACR,IAAI,EAAE,MAAA,KAAK,CAAC,IAAI,mCAAI,QAAQ,IAC5B;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,8BAA8B,CACrC,MAA6B;;IAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC/D,uCACK,MAAM,KACT,IAAI,EAAE,MAAA,MAAM,CAAC,IAAI,mCAAI,QAAQ,IAC7B;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { FormDefinitionSchema } from './form';
2
- import { ApproverResolver, DecisionPolicy, ExcludeInitiatorConfig, FieldAccessEntry, ReturnResubmitStrategy, ServiceAction, SlaConfig, WorkflowDefinition, WorkflowEdgeConditionOperator, WorkflowNodeTriggerMode } from './workflow';
2
+ import { ApproverResolver, DecisionPolicy, ExcludeInitiatorConfig, FieldAccessEntry, ReturnBehavior, ReturnResubmitStrategy, ServiceAction, SlaConfig, WorkflowDefinition, WorkflowEdgeConditionOperator, WorkflowNodeTriggerMode } from './workflow';
3
3
  import { NodePaletteType, WorkflowEdgeIdFactory } from './workflow-graph';
4
4
  /**
5
5
  * The serialisable command layer that the template designer โ€” and the LLM
@@ -46,6 +46,10 @@ export type WorkflowCommand = {
46
46
  readonly type: 'setUserTaskApprover';
47
47
  readonly nodeId: string;
48
48
  readonly approverResolver: ApproverResolver;
49
+ } | {
50
+ readonly type: 'setUserTaskReturnAllowedTargets';
51
+ readonly nodeId: string;
52
+ readonly allowedTargets: ReturnBehavior['allowedTargets'];
49
53
  } | {
50
54
  readonly type: 'setUserTaskReturnResubmitStrategy';
51
55
  readonly nodeId: string;
@@ -39,6 +39,8 @@ function applyWorkflowCommand(state, command, options = {}) {
39
39
  return applySetNodeTriggerMode(state, command);
40
40
  case 'setUserTaskApprover':
41
41
  return applySetUserTaskApprover(state, command);
42
+ case 'setUserTaskReturnAllowedTargets':
43
+ return applySetUserTaskReturnAllowedTargets(state, command);
42
44
  case 'setUserTaskReturnResubmitStrategy':
43
45
  return applySetUserTaskReturnResubmitStrategy(state, command);
44
46
  case 'setUserTaskReturnRequireComment':
@@ -217,6 +219,10 @@ function applySetUserTaskApprover(state, command) {
217
219
  : ((_a = node.data.decisionPolicy) !== null && _a !== void 0 ? _a : { type: 'SINGLE' }) }) }) : node;
218
220
  }, 'userTask');
219
221
  }
222
+ function applySetUserTaskReturnAllowedTargets(state, command) {
223
+ return mapNode(state, command.nodeId, (node) => node.type === 'userTask'
224
+ ? Object.assign(Object.assign({}, node), { data: Object.assign(Object.assign({}, node.data), { returnBehavior: Object.assign(Object.assign({}, node.data.returnBehavior), { allowedTargets: command.allowedTargets }) }) }) : node, 'userTask');
225
+ }
220
226
  function applySetUserTaskReturnResubmitStrategy(state, command) {
221
227
  return mapNode(state, command.nodeId, (node) => node.type === 'userTask'
222
228
  ? Object.assign(Object.assign({}, node), { data: Object.assign(Object.assign({}, node.data), { returnBehavior: Object.assign(Object.assign({}, node.data.returnBehavior), { resubmitStrategy: command.resubmitStrategy }) }) }) : node, 'userTask');