@rytass/bpm-core-shared 0.22.0 โ 0.23.0
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 +43 -0
- package/package.json +1 -1
- package/src/lib/field-access-lint.d.ts +26 -6
- package/src/lib/field-access-lint.js +114 -49
- package/src/lib/field-access-lint.js.map +1 -1
- package/src/lib/field-access-matrix.d.ts +34 -9
- package/src/lib/field-access-matrix.js +65 -16
- package/src/lib/field-access-matrix.js.map +1 -1
- package/src/lib/field-access.d.ts +37 -1
- package/src/lib/field-access.js +71 -15
- package/src/lib/field-access.js.map +1 -1
- package/src/lib/form.d.ts +6 -2
- package/src/lib/form.js +5 -2
- package/src/lib/form.js.map +1 -1
- package/src/lib/workflow-command.js +9 -4
- package/src/lib/workflow-command.js.map +1 -1
- package/src/lib/workflow-graph.d.ts +1 -2
- package/src/lib/workflow-graph.js +2 -3
- package/src/lib/workflow-graph.js.map +1 -1
- package/src/lib/workflow-toolset.js +34 -5
- package/src/lib/workflow-toolset.js.map +1 -1
- package/src/lib/workflow.d.ts +14 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,46 @@
|
|
|
1
|
+
## 0.23.0 (2026-11-14)
|
|
2
|
+
|
|
3
|
+
### ๐ Features
|
|
4
|
+
|
|
5
|
+
- **form-data-source:** locate approver-fill VALUE_NOT_RESOLVED on its field or cell ([1a17907a](https://github.com/Rytass/BPMCore/commit/1a17907a))
|
|
6
|
+
- **shared:** add column mode to field access matrix ([d0658f54](https://github.com/Rytass/BPMCore/commit/d0658f54))
|
|
7
|
+
- **bpm-core-client:** expose host error code on BPMGraphQLRequestError ([3a388721](https://github.com/Rytass/BPMCore/commit/3a388721))
|
|
8
|
+
- **workflow-command:** keep column grants in field access matrix ([ce50a7b0](https://github.com/Rytass/BPMCore/commit/ce50a7b0))
|
|
9
|
+
- **bpm-core-react:** pass column-mode table access to approver fill ([c4fcb87d](https://github.com/Rytass/BPMCore/commit/c4fcb87d))
|
|
10
|
+
- **bpm-core-react:** add per-table access to form renderer ([98cd5208](https://github.com/Rytass/BPMCore/commit/98cd5208))
|
|
11
|
+
- **field-access:** reject publish when a table dependent column is not opened ([a4f64372](https://github.com/Rytass/BPMCore/commit/a4f64372))
|
|
12
|
+
- **field-access:** export dependency break helper for column fills ([d25212c6](https://github.com/Rytass/BPMCore/commit/d25212c6))
|
|
13
|
+
- **field-access:** allow approver-filled data-source columns in column mode ([3b8cb06a](https://github.com/Rytass/BPMCore/commit/3b8cb06a))
|
|
14
|
+
- **field-access:** lint per-column fill conflicts and approver data sources ([2d081bb2](https://github.com/Rytass/BPMCore/commit/2d081bb2))
|
|
15
|
+
- **field-access:** read per-column fill units for table fields ([996bffcc](https://github.com/Rytass/BPMCore/commit/996bffcc))
|
|
16
|
+
- **workflow-engine:** expose recordTaskAutoDecisionFailed on the engine token ([40d69180](https://github.com/Rytass/BPMCore/commit/40d69180))
|
|
17
|
+
- **instance-event:** expose admin list and retry resolvers ([4cbb84ac](https://github.com/Rytass/BPMCore/commit/4cbb84ac))
|
|
18
|
+
- **instance-event:** purge delivered rows past retention ([69d19f9a](https://github.com/Rytass/BPMCore/commit/69d19f9a))
|
|
19
|
+
- **instance-event:** schedule periodic delivery scans ([ac9b7dc3](https://github.com/Rytass/BPMCore/commit/ac9b7dc3))
|
|
20
|
+
- **instance-event:** deliver on commit via subscriber ([53641feb](https://github.com/Rytass/BPMCore/commit/53641feb))
|
|
21
|
+
- **instance-event:** add outbox delivery service ([b7ddcd3f](https://github.com/Rytass/BPMCore/commit/b7ddcd3f))
|
|
22
|
+
- **instance-event:** add outbox event writer ([fd891be4](https://github.com/Rytass/BPMCore/commit/fd891be4))
|
|
23
|
+
- **instance-event:** add lifecycle event outbox and observer wiring ([74dcdffd](https://github.com/Rytass/BPMCore/commit/74dcdffd))
|
|
24
|
+
- **workflow-engine:** add pre-decision host guard for submit, resubmit and decide ([8d450dd3](https://github.com/Rytass/BPMCore/commit/8d450dd3))
|
|
25
|
+
- **form:** add HOST_RULE issue reason with optional host code ([3d58779d](https://github.com/Rytass/BPMCore/commit/3d58779d))
|
|
26
|
+
- **shared:** allow REQUIRED on approver-filled boolean fields ([2b669b75](https://github.com/Rytass/BPMCore/commit/2b669b75))
|
|
27
|
+
- **instances:** filter approval instances by template key ([18d496c7](https://github.com/Rytass/BPMCore/commit/18d496c7))
|
|
28
|
+
- **conditions:** optionally read unfilled form fields as null ([958d3be6](https://github.com/Rytass/BPMCore/commit/958d3be6))
|
|
29
|
+
- **template:** add a HOST_ONLY launch mode to template versions ([d83db05e](https://github.com/Rytass/BPMCore/commit/d83db05e))
|
|
30
|
+
- **initiator:** let a host add customFields to the built snapshot ([609bc5ab](https://github.com/Rytass/BPMCore/commit/609bc5ab))
|
|
31
|
+
- **inbox:** filter inbox and approval history by template ([6870883a](https://github.com/Rytass/BPMCore/commit/6870883a))
|
|
32
|
+
- **migrations:** add the host integration round schema ([34eef9b2](https://github.com/Rytass/BPMCore/commit/34eef9b2))
|
|
33
|
+
|
|
34
|
+
### ๐ฉน Fixes
|
|
35
|
+
|
|
36
|
+
- **workflow-engine:** report only changed keys to the resubmit guard ([53d7bdb2](https://github.com/Rytass/BPMCore/commit/53d7bdb2))
|
|
37
|
+
- **field-access:** lint column-mode fills of data-source columns ([314ba31d](https://github.com/Rytass/BPMCore/commit/314ba31d))
|
|
38
|
+
- **field-access:** keep column-mode fills out of whole-field write paths ([dca765de](https://github.com/Rytass/BPMCore/commit/dca765de))
|
|
39
|
+
|
|
40
|
+
### โค๏ธ Thank You
|
|
41
|
+
|
|
42
|
+
- Chia Yu Pai @fantasywind
|
|
43
|
+
|
|
1
44
|
## 0.22.0 (2026-11-13)
|
|
2
45
|
|
|
3
46
|
### ๐ Features
|
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FormDefinitionSchema, FormFieldDefinition } from './form';
|
|
2
|
+
import { FieldAccessFillUnit } from './field-access';
|
|
2
3
|
import type { FieldAccessDisplay, FieldAccessEntry, FieldAccessFill, UserTaskNode, WorkflowDefinition } from './workflow';
|
|
3
4
|
import { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParallelBranchSets } from './workflow-reachability';
|
|
4
5
|
export { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParallelBranchSets, };
|
|
@@ -10,7 +11,7 @@ export { isOnOwnParallelBranch, readReachableWorkflowNodeIds, readWorkflowParall
|
|
|
10
11
|
* filled it in) stays in the backend: it needs the expression sources of
|
|
11
12
|
* every node, which the matrix does not show.
|
|
12
13
|
*/
|
|
13
|
-
export type FieldAccessIssueCode = 'applicantRuleReadsApproverFilled' | 'approverFilledFieldDataSource' | 'approverFilledFieldFileUpload' | 'approverFilledFieldFormRule' | 'approverFilledMultipleFillNodesOnPath' | '
|
|
14
|
+
export type FieldAccessIssueCode = 'applicantRuleReadsApproverFilled' | 'approverFilledFieldDataSource' | 'approverFilledFieldFileUpload' | 'approverFilledFieldFormRule' | 'approverFilledMultipleFillNodesOnPath' | 'approverFilledTableDataSourceColumn' | 'fieldAccessAutoApprove' | 'fieldAccessDuplicate' | 'fieldAccessFillHidden' | 'fieldAccessGroupPolicy' | 'fieldAccessInvalid' | 'fieldAccessSkipNode' | 'fieldAccessUnknownField' | 'legacyFieldPermissions' | 'setFormFieldApproverFilled';
|
|
14
15
|
export interface FieldAccessIssue {
|
|
15
16
|
readonly code: FieldAccessIssueCode;
|
|
16
17
|
/** The top-level fields the issue is about, the offending one first. */
|
|
@@ -83,9 +84,10 @@ export declare function readDefinitionFieldAccessIssues(definition: WorkflowDefi
|
|
|
83
84
|
* Why a form field cannot be one an approver fills in, as the issues the
|
|
84
85
|
* publish lint reports once it is: a form-level rule (`required` / `hidden`
|
|
85
86
|
* set to `true`, the others set at all โ `required: false` and
|
|
86
|
-
* `hidden: false`, what the form editor writes for "off", are not rules)
|
|
87
|
-
*
|
|
88
|
-
* when the field can be filled
|
|
87
|
+
* `hidden: false`, what the form editor writes for "off", are not rules) or a
|
|
88
|
+
* file upload. A data source, or a table with a data-source column, can be
|
|
89
|
+
* filled in by the approver (ADR 27 ยง4(b)). Empty when the field can be filled
|
|
90
|
+
* in.
|
|
89
91
|
*/
|
|
90
92
|
export declare function readFormFieldFillIssues(field: FormFieldDefinition): readonly FieldAccessIssue[];
|
|
91
93
|
/**
|
|
@@ -101,13 +103,31 @@ export declare function readFormFieldFillIssues(field: FormFieldDefinition): rea
|
|
|
101
103
|
* stricter.
|
|
102
104
|
*/
|
|
103
105
|
export declare function referencesFormField(expression: string, fieldKey: string): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* A data-source column of a column-mode table that reads another column of the
|
|
108
|
+
* same table (ADR 27 ยง4.3) while the approver may fill in the read column but
|
|
109
|
+
* not this one. Once the read column changes, this column still holds the
|
|
110
|
+
* value its old source gave.
|
|
111
|
+
*/
|
|
112
|
+
export interface FieldAccessDependencyBreak {
|
|
113
|
+
readonly fieldKey: string;
|
|
114
|
+
readonly sourceColumnKey: string;
|
|
115
|
+
readonly dependentColumnKey: string;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Every column the approver may fill in that a data-source column of the same
|
|
119
|
+
* table reads, while that data-source column is not open to the same node.
|
|
120
|
+
* A table granted whole is skipped: every column of it is then open. An
|
|
121
|
+
* EXPRESSION source counts only through a `row` reference, the way the cell
|
|
122
|
+
* reads its own row. Empty when `schema` is null.
|
|
123
|
+
*/
|
|
124
|
+
export declare function readFieldAccessDependencyBreaks(schema: FormDefinitionSchema | null, units: readonly FieldAccessFillUnit[]): readonly FieldAccessDependencyBreak[];
|
|
104
125
|
/**
|
|
105
126
|
* The issues read against the form the definition is bound to, in
|
|
106
127
|
* publish-lint order: a `fieldKey` that is not a top-level field of the form,
|
|
107
128
|
* an approver-filled field the form will not let anybody fill in
|
|
108
129
|
* (`readFormFieldFillIssues`, once per field however many nodes fill it in),
|
|
109
|
-
*
|
|
110
|
-
* fail), and an applicant's rule that reads an approver-filled field โ the
|
|
130
|
+
* and an applicant's rule that reads an approver-filled field โ the
|
|
111
131
|
* rule is evaluated against the submitted form, where that field is still
|
|
112
132
|
* empty, and the evaluation silently compares against nothing.
|
|
113
133
|
*/
|
|
@@ -8,6 +8,7 @@ exports.createWorkflowCoRunReader = createWorkflowCoRunReader;
|
|
|
8
8
|
exports.readDefinitionFieldAccessIssues = readDefinitionFieldAccessIssues;
|
|
9
9
|
exports.readFormFieldFillIssues = readFormFieldFillIssues;
|
|
10
10
|
exports.referencesFormField = referencesFormField;
|
|
11
|
+
exports.readFieldAccessDependencyBreaks = readFieldAccessDependencyBreaks;
|
|
11
12
|
exports.readFormFieldAccessIssues = readFormFieldAccessIssues;
|
|
12
13
|
const form_1 = require("./form");
|
|
13
14
|
const field_access_1 = require("./field-access");
|
|
@@ -57,6 +58,33 @@ exports.FIELD_ACCESS_FILLS = [
|
|
|
57
58
|
'OPTIONAL',
|
|
58
59
|
'REQUIRED',
|
|
59
60
|
];
|
|
61
|
+
/**
|
|
62
|
+
* Whether a stored `columns` list is one the publish lint accepts: a non-empty
|
|
63
|
+
* array of column entries with a non-blank, unique `columnKey` and a `fill` of
|
|
64
|
+
* `OPTIONAL` or `REQUIRED`. Absent means whole-field mode and is valid.
|
|
65
|
+
*/
|
|
66
|
+
const isFieldAccessColumnsValid = (columns) => {
|
|
67
|
+
if (columns === undefined) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (!Array.isArray(columns) || columns.length === 0) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const columnKeys = columns.map((column) => isPlainRecord(column) && typeof column['columnKey'] === 'string'
|
|
74
|
+
? column['columnKey']
|
|
75
|
+
: undefined);
|
|
76
|
+
return (columns.every((column) => isPlainRecord(column) &&
|
|
77
|
+
typeof column['columnKey'] === 'string' &&
|
|
78
|
+
column['columnKey'].trim() !== '' &&
|
|
79
|
+
(column['fill'] === 'OPTIONAL' || column['fill'] === 'REQUIRED')) && new Set(columnKeys).size === columnKeys.length);
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Whether two fill-unit column sets share a unit: a whole-field unit (`null`)
|
|
83
|
+
* overlaps every column, and two columns overlap only when they are the same.
|
|
84
|
+
*/
|
|
85
|
+
const doFillUnitsOverlap = (left, right) => left.some((leftColumn) => right.some((rightColumn) => leftColumn === null ||
|
|
86
|
+
rightColumn === null ||
|
|
87
|
+
leftColumn === rightColumn));
|
|
60
88
|
/**
|
|
61
89
|
* Whether a stored entry is one the publish lint accepts. Stricter than
|
|
62
90
|
* `readNodeFieldAccess`, which the engine reads with: a blank `fieldKey`
|
|
@@ -67,7 +95,8 @@ function isFieldAccessEntryValid(entry) {
|
|
|
67
95
|
typeof entry['fieldKey'] === 'string' &&
|
|
68
96
|
entry['fieldKey'].trim() !== '' &&
|
|
69
97
|
exports.FIELD_ACCESS_DISPLAYS.some((display) => display === entry['display']) &&
|
|
70
|
-
exports.FIELD_ACCESS_FILLS.some((fill) => fill === entry['fill'])
|
|
98
|
+
exports.FIELD_ACCESS_FILLS.some((fill) => fill === entry['fill']) &&
|
|
99
|
+
isFieldAccessColumnsValid(entry['columns']));
|
|
71
100
|
}
|
|
72
101
|
/**
|
|
73
102
|
* One user task node's issues, in publish-lint order: the deprecated
|
|
@@ -118,7 +147,7 @@ function readNodeFieldAccessIssues(node) {
|
|
|
118
147
|
];
|
|
119
148
|
}
|
|
120
149
|
const fieldKeys = entries.map((entry) => entry.fieldKey);
|
|
121
|
-
const
|
|
150
|
+
const fillableFieldKeys = (0, field_access_1.readNodeFillGrantFieldKeys)(node);
|
|
122
151
|
return [
|
|
123
152
|
...legacyIssues,
|
|
124
153
|
...fieldKeys
|
|
@@ -131,14 +160,14 @@ function readNodeFieldAccessIssues(node) {
|
|
|
131
160
|
nodeIds: [nodeId],
|
|
132
161
|
})),
|
|
133
162
|
...(0, field_access_1.readNodeFieldAccess)(node)
|
|
134
|
-
.filter((entry) => entry.
|
|
163
|
+
.filter((entry) => entry.display === 'HIDE' && fillableFieldKeys.has(entry.fieldKey))
|
|
135
164
|
.map((entry) => ({
|
|
136
165
|
code: 'fieldAccessFillHidden',
|
|
137
166
|
fieldKeys: [entry.fieldKey],
|
|
138
167
|
message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.fieldAccessFillHidden(nodeId, entry.fieldKey),
|
|
139
168
|
nodeIds: [nodeId],
|
|
140
169
|
})),
|
|
141
|
-
...(
|
|
170
|
+
...(fillableFieldKeys.size > 0 ? readUserTaskFillConflicts(node) : []).map((conflict) => ({
|
|
142
171
|
code: FILL_CONFLICT_ISSUES[conflict].code,
|
|
143
172
|
fieldKeys: [],
|
|
144
173
|
message: FILL_CONFLICT_ISSUES[conflict].message(nodeId),
|
|
@@ -211,19 +240,26 @@ function readDefinitionFieldAccessIssues(definition) {
|
|
|
211
240
|
const userTasks = definition.nodes.filter((node) => node.type === 'userTask');
|
|
212
241
|
const canBothRun = createWorkflowCoRunReader(definition);
|
|
213
242
|
const pathIssues = [...approverFilled].flatMap((fieldKey) => {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
243
|
+
// One filler per (fieldKey, columnKey): two nodes filling different
|
|
244
|
+
// columns of one table never overwrite each other (ADR 27 ยง4(a)).
|
|
245
|
+
const fillers = userTasks
|
|
246
|
+
.map((node) => ({
|
|
247
|
+
nodeId: node.id,
|
|
248
|
+
columnKeys: (0, field_access_1.readNodeFillUnits)(node)
|
|
249
|
+
.filter((unit) => unit.fieldKey === fieldKey)
|
|
250
|
+
.map((unit) => unit.columnKey),
|
|
251
|
+
}))
|
|
252
|
+
.filter((filler) => filler.columnKeys.length > 0);
|
|
253
|
+
return fillers.flatMap((filler, index) => fillers
|
|
220
254
|
.slice(index + 1)
|
|
221
|
-
.filter((
|
|
222
|
-
.
|
|
255
|
+
.filter((other) => other.nodeId !== filler.nodeId &&
|
|
256
|
+
doFillUnitsOverlap(filler.columnKeys, other.columnKeys) &&
|
|
257
|
+
canBothRun(filler.nodeId, other.nodeId))
|
|
258
|
+
.map((other) => ({
|
|
223
259
|
code: 'approverFilledMultipleFillNodesOnPath',
|
|
224
260
|
fieldKeys: [fieldKey],
|
|
225
|
-
message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledMultipleFillNodesOnPath(fieldKey, nodeId,
|
|
226
|
-
nodeIds: [nodeId,
|
|
261
|
+
message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledMultipleFillNodesOnPath(fieldKey, filler.nodeId, other.nodeId),
|
|
262
|
+
nodeIds: [filler.nodeId, other.nodeId],
|
|
227
263
|
})));
|
|
228
264
|
});
|
|
229
265
|
return [...writeIssues, ...pathIssues];
|
|
@@ -232,9 +268,10 @@ function readDefinitionFieldAccessIssues(definition) {
|
|
|
232
268
|
* Why a form field cannot be one an approver fills in, as the issues the
|
|
233
269
|
* publish lint reports once it is: a form-level rule (`required` / `hidden`
|
|
234
270
|
* set to `true`, the others set at all โ `required: false` and
|
|
235
|
-
* `hidden: false`, what the form editor writes for "off", are not rules)
|
|
236
|
-
*
|
|
237
|
-
* when the field can be filled
|
|
271
|
+
* `hidden: false`, what the form editor writes for "off", are not rules) or a
|
|
272
|
+
* file upload. A data source, or a table with a data-source column, can be
|
|
273
|
+
* filled in by the approver (ADR 27 ยง4(b)). Empty when the field can be filled
|
|
274
|
+
* in.
|
|
238
275
|
*/
|
|
239
276
|
function readFormFieldFillIssues(field) {
|
|
240
277
|
const { fieldKey } = field;
|
|
@@ -248,22 +285,11 @@ function readFormFieldFillIssues(field) {
|
|
|
248
285
|
...workflow_graph_1.APPROVER_FILLED_FORM_RULES.filter((rule) => rule === 'required' || rule === 'hidden'
|
|
249
286
|
? field[rule] === true
|
|
250
287
|
: field[rule] !== undefined).map((rule) => issue('approverFilledFieldFormRule', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledFieldFormRule(fieldKey, rule))),
|
|
251
|
-
...((0, form_1.isFormDataSourceFieldDefinition)(field)
|
|
252
|
-
? [
|
|
253
|
-
issue('approverFilledFieldDataSource', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledFieldDataSource(fieldKey)),
|
|
254
|
-
]
|
|
255
|
-
: []),
|
|
256
288
|
...(field.type === 'file_upload'
|
|
257
289
|
? [
|
|
258
290
|
issue('approverFilledFieldFileUpload', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledFieldFileUpload(fieldKey)),
|
|
259
291
|
]
|
|
260
292
|
: []),
|
|
261
|
-
...((0, form_1.isTableFieldDefinition)(field) &&
|
|
262
|
-
field.columns.some(form_1.isFormDataSourceFieldDefinition)
|
|
263
|
-
? [
|
|
264
|
-
issue('approverFilledTableDataSourceColumn', workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledTableDataSourceColumn(fieldKey)),
|
|
265
|
-
]
|
|
266
|
-
: []),
|
|
267
293
|
];
|
|
268
294
|
}
|
|
269
295
|
/**
|
|
@@ -279,22 +305,64 @@ function readFormFieldFillIssues(field) {
|
|
|
279
305
|
* stricter.
|
|
280
306
|
*/
|
|
281
307
|
function referencesFormField(expression, fieldKey) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
308
|
+
return referencesRootedKey(expression, '(?:formData|form)', fieldKey);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* The same match as `referencesFormField`, for an arbitrary root: `root` is a
|
|
312
|
+
* regex alternation (`(?:formData|form)`, `row`) placed before `.key` or
|
|
313
|
+
* `["key"]`. The root may not be preceded by an identifier character or a dot.
|
|
314
|
+
*/
|
|
315
|
+
function referencesRootedKey(expression, root, key) {
|
|
316
|
+
const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
|
|
317
|
+
const rootPattern = `(?<![\\p{L}\\p{N}_.])${root}\\s*`;
|
|
286
318
|
return [
|
|
287
|
-
new RegExp(`${
|
|
288
|
-
new RegExp(`${
|
|
319
|
+
new RegExp(`${rootPattern}\\.\\s*${escapedKey}(?![\\p{L}\\p{N}_])`, 'u'),
|
|
320
|
+
new RegExp(`${rootPattern}\\[\\s*["']${escapedKey}["']\\s*\\]`, 'u'),
|
|
289
321
|
].some((pattern) => pattern.test(expression));
|
|
290
322
|
}
|
|
323
|
+
const readDependentColumnKeys = (table, sourceColumnKey) => table.columns
|
|
324
|
+
.filter((column) => (0, form_1.isFormDataSourceFieldDefinition)(column) &&
|
|
325
|
+
column.dataSource.bindings.some(({ from }) => from.kind === 'ROW_FIELD'
|
|
326
|
+
? from.columnKey === sourceColumnKey
|
|
327
|
+
: from.kind === 'EXPRESSION' &&
|
|
328
|
+
referencesRootedKey(from.expression, 'row', sourceColumnKey)))
|
|
329
|
+
.map((column) => column.fieldKey);
|
|
330
|
+
/**
|
|
331
|
+
* Every column the approver may fill in that a data-source column of the same
|
|
332
|
+
* table reads, while that data-source column is not open to the same node.
|
|
333
|
+
* A table granted whole is skipped: every column of it is then open. An
|
|
334
|
+
* EXPRESSION source counts only through a `row` reference, the way the cell
|
|
335
|
+
* reads its own row. Empty when `schema` is null.
|
|
336
|
+
*/
|
|
337
|
+
function readFieldAccessDependencyBreaks(schema, units) {
|
|
338
|
+
if (schema === null) {
|
|
339
|
+
return [];
|
|
340
|
+
}
|
|
341
|
+
const wholeFieldKeys = new Set(units
|
|
342
|
+
.filter(({ columnKey }) => columnKey === null)
|
|
343
|
+
.map(({ fieldKey }) => fieldKey));
|
|
344
|
+
return schema.fields.flatMap((field) => {
|
|
345
|
+
if (!(0, form_1.isTableFieldDefinition)(field) ||
|
|
346
|
+
wholeFieldKeys.has(field.fieldKey)) {
|
|
347
|
+
return [];
|
|
348
|
+
}
|
|
349
|
+
const openColumnKeys = new Set(units.flatMap(({ fieldKey, columnKey }) => fieldKey === field.fieldKey && columnKey !== null ? [columnKey] : []));
|
|
350
|
+
return [...openColumnKeys].flatMap((sourceColumnKey) => readDependentColumnKeys(field, sourceColumnKey)
|
|
351
|
+
.filter((dependentColumnKey) => dependentColumnKey !== sourceColumnKey &&
|
|
352
|
+
!openColumnKeys.has(dependentColumnKey))
|
|
353
|
+
.map((dependentColumnKey) => ({
|
|
354
|
+
dependentColumnKey,
|
|
355
|
+
fieldKey: field.fieldKey,
|
|
356
|
+
sourceColumnKey,
|
|
357
|
+
})));
|
|
358
|
+
});
|
|
359
|
+
}
|
|
291
360
|
/**
|
|
292
361
|
* The issues read against the form the definition is bound to, in
|
|
293
362
|
* publish-lint order: a `fieldKey` that is not a top-level field of the form,
|
|
294
363
|
* an approver-filled field the form will not let anybody fill in
|
|
295
364
|
* (`readFormFieldFillIssues`, once per field however many nodes fill it in),
|
|
296
|
-
*
|
|
297
|
-
* fail), and an applicant's rule that reads an approver-filled field โ the
|
|
365
|
+
* and an applicant's rule that reads an approver-filled field โ the
|
|
298
366
|
* rule is evaluated against the submitted form, where that field is still
|
|
299
367
|
* empty, and the evaluation silently compares against nothing.
|
|
300
368
|
*/
|
|
@@ -313,18 +381,6 @@ function readFormFieldAccessIssues(definition, schema) {
|
|
|
313
381
|
message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.fieldAccessUnknownField(node.id, fieldKey),
|
|
314
382
|
nodeIds: [node.id],
|
|
315
383
|
})));
|
|
316
|
-
const requiredBooleanIssues = userTasks.flatMap((node) => (0, field_access_1.readNodeFieldAccess)(node)
|
|
317
|
-
.filter(({ fieldKey, fill }) => {
|
|
318
|
-
var _a;
|
|
319
|
-
return fill === 'REQUIRED' &&
|
|
320
|
-
((_a = fieldsByKey.get(fieldKey)) === null || _a === void 0 ? void 0 : _a.type) === 'boolean';
|
|
321
|
-
})
|
|
322
|
-
.map(({ fieldKey }) => ({
|
|
323
|
-
code: 'approverFilledRequiredBoolean',
|
|
324
|
-
fieldKeys: [fieldKey],
|
|
325
|
-
message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledRequiredBoolean(node.id, fieldKey),
|
|
326
|
-
nodeIds: [node.id],
|
|
327
|
-
})));
|
|
328
384
|
const approverFilled = (0, field_access_1.readApproverFilledFieldKeys)(definition);
|
|
329
385
|
const applicantRuleIssues = ((_b = schema === null || schema === void 0 ? void 0 : schema.fields) !== null && _b !== void 0 ? _b : [])
|
|
330
386
|
.filter((field) => !approverFilled.has(field.fieldKey))
|
|
@@ -345,10 +401,19 @@ function readFormFieldAccessIssues(definition, schema) {
|
|
|
345
401
|
const field = fieldsByKey.get(fieldKey);
|
|
346
402
|
return field === undefined ? [] : readFormFieldFillIssues(field);
|
|
347
403
|
});
|
|
404
|
+
// A column the approver fills in whose data-source dependent the same node
|
|
405
|
+
// leaves open would keep its upstream value after the approver changes its
|
|
406
|
+
// source, so the publish refuses it (ADR 27 ยง4.3).
|
|
407
|
+
const dependencyIssues = userTasks.flatMap((node) => readFieldAccessDependencyBreaks(schema, (0, field_access_1.readNodeFillUnits)(node)).map(({ fieldKey, sourceColumnKey, dependentColumnKey }) => ({
|
|
408
|
+
code: 'approverFilledTableDataSourceColumn',
|
|
409
|
+
fieldKeys: [fieldKey],
|
|
410
|
+
message: workflow_graph_1.WORKFLOW_LINT_MESSAGES.approverFilledTableDataSourceColumn(node.id, fieldKey, sourceColumnKey, dependentColumnKey),
|
|
411
|
+
nodeIds: [node.id],
|
|
412
|
+
})));
|
|
348
413
|
return [
|
|
349
414
|
...unknownFieldIssues,
|
|
350
415
|
...fieldIssues,
|
|
351
|
-
...
|
|
416
|
+
...dependencyIssues,
|
|
352
417
|
...applicantRuleIssues,
|
|
353
418
|
];
|
|
354
419
|
}
|
|
@@ -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":"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"}
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { FieldAccessIssue, UserTaskFillConflict } from './field-access-lint';
|
|
2
|
-
import type
|
|
3
|
-
import type { FieldAccessEntry, WorkflowDefinition } from './workflow';
|
|
2
|
+
import { type FormDefinitionSchema, type FormFieldDefinition } from './form';
|
|
3
|
+
import type { FieldAccessColumnEntry, FieldAccessEntry, FieldAccessFill, WorkflowDefinition } from './workflow';
|
|
4
4
|
/**
|
|
5
5
|
* What a cell of the field access matrix offers. `DEFAULT` writes nothing for
|
|
6
|
-
* the node, so the field falls back to the derived value
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* the node, so the field falls back to the derived value. `SHOW`, `HIDE`,
|
|
7
|
+
* `FILL_OPTIONAL` and `FILL_REQUIRED` each stand for one whole-field
|
|
8
|
+
* `FieldAccessEntry` (`fill` other than `NONE` is always shown, since a hidden
|
|
9
|
+
* fill cannot be published). `COLUMNS` stands for a column-mode entry (ADR 27
|
|
10
|
+
* ยง4(a)) on a table field, whose fillable columns are set per column through
|
|
11
|
+
* `updateFieldAccessColumnFill`; it may hold zero columns while being edited.
|
|
9
12
|
*/
|
|
10
|
-
export type FieldAccessChoice = 'DEFAULT' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDE' | 'SHOW';
|
|
13
|
+
export type FieldAccessChoice = 'DEFAULT' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDE' | 'SHOW' | 'COLUMNS';
|
|
11
14
|
export declare const FIELD_ACCESS_CHOICES: readonly FieldAccessChoice[];
|
|
12
15
|
/**
|
|
13
16
|
* What a viewer at one place in the flow gets for a field. `FILL` is the
|
|
14
17
|
* applicant's own field; `NOT_SHOWN` is an approver-filled field nobody has
|
|
15
18
|
* filled in yet, which BPM leaves off the screen; `HIDDEN` is a node that
|
|
16
|
-
* chose to hide the field (display only, never a permission)
|
|
19
|
+
* chose to hide the field (display only, never a permission); `FILL_COLUMNS`
|
|
20
|
+
* is a node that lets its approver fill some columns of a table.
|
|
17
21
|
*/
|
|
18
|
-
export type FieldAccessEffective = 'FILL' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDDEN' | 'NOT_SHOWN' | 'READ_ONLY';
|
|
22
|
+
export type FieldAccessEffective = 'FILL' | 'FILL_COLUMNS' | 'FILL_OPTIONAL' | 'FILL_REQUIRED' | 'HIDDEN' | 'NOT_SHOWN' | 'READ_ONLY';
|
|
23
|
+
/** One column of a table field, as the matrix lists it under the table row. */
|
|
24
|
+
export interface FieldAccessMatrixTableColumn {
|
|
25
|
+
readonly columnKey: string;
|
|
26
|
+
readonly label: string;
|
|
27
|
+
}
|
|
19
28
|
/**
|
|
20
29
|
* Why a cell reads the way it does: the node lists the field (`EXPLICIT`), an
|
|
21
30
|
* ordinary field every node sees read-only (`APPLICANT_FIELD`), an
|
|
@@ -49,6 +58,8 @@ export interface FieldAccessMatrixCell {
|
|
|
49
58
|
/** The fill choices this cell cannot take, for the node or the field. */
|
|
50
59
|
readonly disabledChoices: readonly FieldAccessChoice[];
|
|
51
60
|
readonly effective: FieldAccessEffective;
|
|
61
|
+
/** The fillable columns of a column-mode entry; empty for any other cell. */
|
|
62
|
+
readonly columnFills: readonly FieldAccessColumnEntry[];
|
|
52
63
|
readonly explicit: FieldAccessEntry | null;
|
|
53
64
|
readonly nodeId: string;
|
|
54
65
|
readonly reason: FieldAccessCellReason;
|
|
@@ -68,6 +79,8 @@ export interface FieldAccessMatrixRow {
|
|
|
68
79
|
/** Publish-blocking issues that name this field. */
|
|
69
80
|
readonly issues: readonly FieldAccessIssue[];
|
|
70
81
|
readonly notices: readonly FieldAccessNotice[];
|
|
82
|
+
/** The columns a table field offers per-column access for; empty otherwise. */
|
|
83
|
+
readonly tableColumns: readonly FieldAccessMatrixTableColumn[];
|
|
71
84
|
}
|
|
72
85
|
export interface FieldAccessMatrix {
|
|
73
86
|
readonly columns: readonly FieldAccessMatrixColumn[];
|
|
@@ -79,8 +92,20 @@ export interface FieldAccessMatrix {
|
|
|
79
92
|
readonly rows: readonly FieldAccessMatrixRow[];
|
|
80
93
|
}
|
|
81
94
|
export declare function readFieldAccessChoice(entry: FieldAccessEntry | null): FieldAccessChoice;
|
|
82
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* The entry a choice writes for the field, or `null` for `DEFAULT`. `COLUMNS`
|
|
97
|
+
* writes an empty column list, which the publish lint rejects until a column
|
|
98
|
+
* is checked, so the drawer must not apply it on its own.
|
|
99
|
+
*/
|
|
83
100
|
export declare function readFieldAccessEntryForChoice(fieldKey: string, choice: FieldAccessChoice): FieldAccessEntry | null;
|
|
101
|
+
/**
|
|
102
|
+
* The entry after one column of a table field is set to `fill`, or cleared
|
|
103
|
+
* when `fill` is `NONE`. The other columns keep their fill and order; a
|
|
104
|
+
* whole-field entry (no `columns`) starts from an empty column list.
|
|
105
|
+
*/
|
|
106
|
+
export declare function updateFieldAccessColumnFill(entry: FieldAccessEntry | null, fieldKey: string, columnKey: string, fill: FieldAccessFill): FieldAccessEntry;
|
|
107
|
+
/** The table columns a field offers per-column access for; none for other fields. */
|
|
108
|
+
export declare function readTableColumns(field: FormFieldDefinition): readonly FieldAccessMatrixTableColumn[];
|
|
84
109
|
/**
|
|
85
110
|
* The designer's field access matrix: one row per top-level form field, one
|
|
86
111
|
* column per user task in flow order, and in each cell the node's explicit
|