@sonisoft/now-sdk-ext-core 6.6.3 → 6.8.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.
Files changed (79) hide show
  1. package/README.md +6 -0
  2. package/dist/comm/http/FormHtmlParser.d.ts +34 -0
  3. package/dist/comm/http/FormHtmlParser.js +227 -0
  4. package/dist/comm/http/FormHtmlParser.js.map +1 -0
  5. package/dist/comm/http/FormRecordModels.d.ts +120 -0
  6. package/dist/comm/http/FormRecordModels.js +6 -0
  7. package/dist/comm/http/FormRecordModels.js.map +1 -0
  8. package/dist/comm/http/FormRecordWriter.d.ts +99 -0
  9. package/dist/comm/http/FormRecordWriter.js +385 -0
  10. package/dist/comm/http/FormRecordWriter.js.map +1 -0
  11. package/dist/comm/http/HTTPRequest.d.ts +4 -0
  12. package/dist/comm/http/RequestHandler.d.ts +1 -0
  13. package/dist/comm/http/RequestHandler.js +34 -22
  14. package/dist/comm/http/RequestHandler.js.map +1 -1
  15. package/dist/comm/http/internal/FormTransportModels.d.ts +26 -0
  16. package/dist/comm/http/internal/FormTransportModels.js +2 -0
  17. package/dist/comm/http/internal/FormTransportModels.js.map +1 -0
  18. package/dist/exception/FormSubmitError.d.ts +13 -0
  19. package/dist/exception/FormSubmitError.js +19 -0
  20. package/dist/exception/FormSubmitError.js.map +1 -0
  21. package/dist/exception/WorkflowValidationError.d.ts +24 -0
  22. package/dist/exception/WorkflowValidationError.js +24 -0
  23. package/dist/exception/WorkflowValidationError.js.map +1 -0
  24. package/dist/index.d.ts +19 -0
  25. package/dist/index.js +19 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/sn/metadata/MetadataFormWriter.d.ts +13 -0
  28. package/dist/sn/metadata/MetadataFormWriter.js +264 -0
  29. package/dist/sn/metadata/MetadataFormWriter.js.map +1 -0
  30. package/dist/sn/metadata/MetadataModels.d.ts +44 -0
  31. package/dist/sn/metadata/MetadataModels.js +2 -0
  32. package/dist/sn/metadata/MetadataModels.js.map +1 -0
  33. package/dist/sn/metadata/MetadataScopeError.d.ts +5 -0
  34. package/dist/sn/metadata/MetadataScopeError.js +10 -0
  35. package/dist/sn/metadata/MetadataScopeError.js.map +1 -0
  36. package/dist/sn/metadata/MetadataVerificationError.d.ts +11 -0
  37. package/dist/sn/metadata/MetadataVerificationError.js +20 -0
  38. package/dist/sn/metadata/MetadataVerificationError.js.map +1 -0
  39. package/dist/sn/metadata/internal/MetadataPreferences.d.ts +12 -0
  40. package/dist/sn/metadata/internal/MetadataPreferences.js +27 -0
  41. package/dist/sn/metadata/internal/MetadataPreferences.js.map +1 -0
  42. package/dist/sn/metadata/internal/MetadataReader.d.ts +9 -0
  43. package/dist/sn/metadata/internal/MetadataReader.js +55 -0
  44. package/dist/sn/metadata/internal/MetadataReader.js.map +1 -0
  45. package/dist/sn/variables/VariableDefinitions.d.ts +23 -0
  46. package/dist/sn/variables/VariableDefinitions.js +106 -0
  47. package/dist/sn/variables/VariableDefinitions.js.map +1 -0
  48. package/dist/sn/variables/VariableModels.d.ts +49 -0
  49. package/dist/sn/variables/VariableModels.js +6 -0
  50. package/dist/sn/variables/VariableModels.js.map +1 -0
  51. package/dist/sn/workflow/WorkflowConversionModels.d.ts +209 -0
  52. package/dist/sn/workflow/WorkflowConversionModels.js +2 -0
  53. package/dist/sn/workflow/WorkflowConversionModels.js.map +1 -0
  54. package/dist/sn/workflow/WorkflowDiagramClient.d.ts +70 -0
  55. package/dist/sn/workflow/WorkflowDiagramClient.js +151 -0
  56. package/dist/sn/workflow/WorkflowDiagramClient.js.map +1 -0
  57. package/dist/sn/workflow/WorkflowFlowConversion.d.ts +19 -0
  58. package/dist/sn/workflow/WorkflowFlowConversion.js +1013 -0
  59. package/dist/sn/workflow/WorkflowFlowConversion.js.map +1 -0
  60. package/dist/sn/workflow/WorkflowFlowHints.d.ts +3 -0
  61. package/dist/sn/workflow/WorkflowFlowHints.js +36 -0
  62. package/dist/sn/workflow/WorkflowFlowHints.js.map +1 -0
  63. package/dist/sn/workflow/WorkflowFluentGenerator.d.ts +17 -0
  64. package/dist/sn/workflow/WorkflowFluentGenerator.js +348 -0
  65. package/dist/sn/workflow/WorkflowFluentGenerator.js.map +1 -0
  66. package/dist/sn/workflow/WorkflowGraphML.d.ts +39 -0
  67. package/dist/sn/workflow/WorkflowGraphML.js +162 -0
  68. package/dist/sn/workflow/WorkflowGraphML.js.map +1 -0
  69. package/dist/sn/workflow/WorkflowManager.d.ts +236 -6
  70. package/dist/sn/workflow/WorkflowManager.js +1443 -15
  71. package/dist/sn/workflow/WorkflowManager.js.map +1 -1
  72. package/dist/sn/workflow/WorkflowModels.d.ts +738 -0
  73. package/dist/sn/workflow/WorkflowStructure.d.ts +137 -0
  74. package/dist/sn/workflow/WorkflowStructure.js +368 -0
  75. package/dist/sn/workflow/WorkflowStructure.js.map +1 -0
  76. package/dist/sn/workflow/WorkflowViews.d.ts +104 -0
  77. package/dist/sn/workflow/WorkflowViews.js +408 -0
  78. package/dist/sn/workflow/WorkflowViews.js.map +1 -0
  79. package/package.json +2 -1
@@ -0,0 +1,137 @@
1
+ import { WorkflowExport, WorkflowExportActivity, WorkflowExportActivityType } from "./WorkflowModels.js";
2
+ /**
3
+ * The structure of a legacy workflow, rebuilt from a {@link WorkflowExport}.
4
+ *
5
+ * A workflow is a graph of activities wired exit by exit, laid out freely on a canvas.
6
+ * This finds its loops (edges back to an activity still being explored from Begin),
7
+ * where the paths leaving each activity come back together (immediate post-dominators;
8
+ * parallel branches rejoin at the Join they all reach), and from that a block tree —
9
+ * sequences, decisions, parallel lanes, loops and gotos — that every view and the
10
+ * Flow Designer conversion walk.
11
+ */
12
+ /** Marker for "the paths never come back together". */
13
+ export declare const WORKFLOW_EXIT = "__exit__";
14
+ /** One exit of an activity as the structure sees it. */
15
+ export interface StructureExit {
16
+ sysId: string;
17
+ name: string;
18
+ condition: string;
19
+ /** Targets reached without looping back */
20
+ forward: string[];
21
+ /** Targets that loop back to an activity being explored */
22
+ loop: string[];
23
+ }
24
+ /** The tree the views and the conversion are built from. */
25
+ export type OutlineItem = OutlineStep | {
26
+ kind: "end";
27
+ activity: string;
28
+ } | {
29
+ kind: "goto";
30
+ target: string;
31
+ } | {
32
+ kind: "rejoinsBelow";
33
+ } | {
34
+ kind: "rejoin";
35
+ withoutJoin: boolean;
36
+ };
37
+ /** A step and, when it branches, where each exit leads. */
38
+ export interface OutlineStep {
39
+ kind: "step";
40
+ activity: string;
41
+ /** Position in reading order, 1-based */
42
+ number: number;
43
+ /** Exits that loop back to an earlier step */
44
+ loops: Array<{
45
+ exit: string;
46
+ target: string;
47
+ }>;
48
+ /** Exits with no transition: the workflow stops there */
49
+ deadExits: Array<{
50
+ name: string;
51
+ condition: string;
52
+ }>;
53
+ /** Whether the activity has more than one exit (a decision) */
54
+ decision: boolean;
55
+ /** Branches printed under the step (decision exits, parallel lanes) */
56
+ branches: OutlineBranch[];
57
+ /** Exits that lead straight on to where the paths rejoin */
58
+ directExits: string[];
59
+ /**
60
+ * The exit the reading continues with at the same level ("guard clause" layout, or
61
+ * the only way on). Undefined when the paths rejoin or never continue.
62
+ */
63
+ mainExit?: {
64
+ name: string;
65
+ condition: string;
66
+ };
67
+ }
68
+ /** A branch under a step: one exit (decision) or one line of a parallel split. */
69
+ export interface OutlineBranch {
70
+ /** Exit name; undefined for a parallel split of a non-decision activity */
71
+ exit?: string;
72
+ condition: string;
73
+ /** Several targets on one exit run in parallel: one lane per target */
74
+ lanes: OutlineItem[][];
75
+ }
76
+ /** The rebuilt structure of a whole workflow version. */
77
+ export interface WorkflowOutline {
78
+ /** Sequence from Begin */
79
+ main: OutlineItem[];
80
+ /** Sequences from activities nothing leads to */
81
+ unreachable: OutlineItem[][];
82
+ /** Step number per activity sys_id */
83
+ numbers: Map<string, number>;
84
+ }
85
+ export declare class WorkflowStructure {
86
+ readonly data: WorkflowExport;
87
+ readonly activities: Map<string, WorkflowExportActivity>;
88
+ readonly begin: string | undefined;
89
+ /** Edges (from, exit sys_id, to) that loop back */
90
+ readonly backEdges: Set<string>;
91
+ /** Activities reachable from Begin */
92
+ readonly reachable: Set<string>;
93
+ private readonly _out;
94
+ private readonly _incoming;
95
+ private readonly _ipdom;
96
+ constructor(data: WorkflowExport);
97
+ activity(sysId: string): WorkflowExportActivity;
98
+ typeOf(sysId: string): WorkflowExportActivityType | undefined;
99
+ incoming(sysId: string): Array<{
100
+ from: string;
101
+ exit: string;
102
+ }>;
103
+ /** Canvas reading order: top to bottom, then left to right. */
104
+ compare(a: string, b: string): number;
105
+ isEnd(sysId: string): boolean;
106
+ isJoin(sysId: string): boolean;
107
+ isDesigner(sysId: string): boolean;
108
+ /** Whether the activity parks the workflow: its type waits, unless it is a task told not to. */
109
+ waits(sysId: string): boolean;
110
+ exitName(from: string, exitSysId: string): string;
111
+ /** Exits in order, each with its forward and looping targets. */
112
+ exits(sysId: string): StructureExit[];
113
+ forward(sysId: string): string[];
114
+ /** Activities reachable from root, following every transition. */
115
+ reach(root: string | undefined): Set<string>;
116
+ /** Activities reachable from root without looping back. */
117
+ forwardReach(root: string): Set<string>;
118
+ /** Activities reachable from root, not going past a Join. */
119
+ reachUntilJoin(root: string): Set<string>;
120
+ /**
121
+ * Where the paths leaving an activity come back together ({@link WORKFLOW_EXIT} if they
122
+ * never do). Parallel lines rejoin at the Join they all reach, unless they meet before
123
+ * it (then that meeting point is the merge, and the Join closes a later block).
124
+ */
125
+ mergeOf(sysId: string): string;
126
+ private distances;
127
+ private findBegin;
128
+ private rawEdges;
129
+ private findBackEdges;
130
+ private computePostDominators;
131
+ }
132
+ /**
133
+ * Rebuild the workflow as a block tree: numbered steps in reading order, decisions laid out
134
+ * as guard clauses where their paths never rejoin, parallel lanes closed at their Join,
135
+ * loops, and gotos to steps shown elsewhere.
136
+ */
137
+ export declare function buildOutline(s: WorkflowStructure): WorkflowOutline;
@@ -0,0 +1,368 @@
1
+ /**
2
+ * The structure of a legacy workflow, rebuilt from a {@link WorkflowExport}.
3
+ *
4
+ * A workflow is a graph of activities wired exit by exit, laid out freely on a canvas.
5
+ * This finds its loops (edges back to an activity still being explored from Begin),
6
+ * where the paths leaving each activity come back together (immediate post-dominators;
7
+ * parallel branches rejoin at the Join they all reach), and from that a block tree —
8
+ * sequences, decisions, parallel lanes, loops and gotos — that every view and the
9
+ * Flow Designer conversion walk.
10
+ */
11
+ /** Marker for "the paths never come back together". */
12
+ export const WORKFLOW_EXIT = "__exit__";
13
+ export class WorkflowStructure {
14
+ data;
15
+ activities = new Map();
16
+ begin;
17
+ /** Edges (from, exit sys_id, to) that loop back */
18
+ backEdges = new Set();
19
+ /** Activities reachable from Begin */
20
+ reachable;
21
+ _out = new Map();
22
+ _incoming = new Map();
23
+ _ipdom = new Map();
24
+ constructor(data) {
25
+ this.data = data;
26
+ for (const a of data.activities ?? []) {
27
+ const exits = (a.exits ?? []).map(e => ({ ...e, name: e.name ?? '', condition: e.condition ?? '' }));
28
+ this.activities.set(a.sysId, {
29
+ ...a, name: a.name ?? '', type: a.type ?? '', variables: a.variables ?? [],
30
+ exits: exits.sort((x, y) => ((x.order ?? 0) - (y.order ?? 0)) || x.name.localeCompare(y.name)),
31
+ });
32
+ this._out.set(a.sysId, new Map());
33
+ this._incoming.set(a.sysId, []);
34
+ }
35
+ for (const t of data.transitions ?? []) {
36
+ if (!this.activities.has(t.from) || !this.activities.has(t.to))
37
+ continue;
38
+ const exits = this._out.get(t.from);
39
+ const exit = t.exit || "?";
40
+ exits.set(exit, [...(exits.get(exit) ?? []), t.to]);
41
+ this._incoming.get(t.to).push({ from: t.from, exit });
42
+ }
43
+ for (const exits of this._out.values()) {
44
+ for (const [exit, targets] of exits)
45
+ exits.set(exit, [...targets].sort((a, b) => this.compare(a, b)));
46
+ }
47
+ this.begin = this.findBegin();
48
+ this.findBackEdges();
49
+ this.reachable = this.reach(this.begin);
50
+ this.computePostDominators();
51
+ }
52
+ // -------------------------------------------------------------- basics
53
+ activity(sysId) {
54
+ return this.activities.get(sysId);
55
+ }
56
+ typeOf(sysId) {
57
+ return this.data.activityTypes?.[this.activities.get(sysId)?.typeSysId];
58
+ }
59
+ incoming(sysId) {
60
+ return this._incoming.get(sysId) ?? [];
61
+ }
62
+ /** Canvas reading order: top to bottom, then left to right. */
63
+ compare(a, b) {
64
+ const x = this.activities.get(a);
65
+ const y = this.activities.get(b);
66
+ return ((x.y ?? 0) - (y.y ?? 0)) || ((x.x ?? 0) - (y.x ?? 0)) || x.name.localeCompare(y.name);
67
+ }
68
+ isEnd(sysId) {
69
+ return /(^|,)\s*end\s*=\s*true/i.test(this.typeOf(sysId)?.attributes ?? "")
70
+ || (this.activities.get(sysId)?.type === "End" && !this.activities.get(sysId).exits.length);
71
+ }
72
+ isJoin(sysId) {
73
+ return /(^|,)\s*generate\s*=\s*join/i.test(this.typeOf(sysId)?.attributes ?? "") || this.activities.get(sysId)?.type === "Join";
74
+ }
75
+ isDesigner(sysId) {
76
+ return this.typeOf(sysId)?.sysClassName === "wf_element_activity";
77
+ }
78
+ /** Whether the activity parks the workflow: its type waits, unless it is a task told not to. */
79
+ waits(sysId) {
80
+ if (!this.typeOf(sysId)?.waits)
81
+ return false;
82
+ const flag = this.activities.get(sysId).variables.find(v => v.element === "wait_for_completion");
83
+ return !(flag && (flag.value === "0" || flag.value === "false"));
84
+ }
85
+ exitName(from, exitSysId) {
86
+ return this.activities.get(from)?.exits.find(e => e.sysId === exitSysId)?.name ?? "?";
87
+ }
88
+ /** Exits in order, each with its forward and looping targets. */
89
+ exits(sysId) {
90
+ const a = this.activities.get(sysId);
91
+ const out = this._out.get(sysId);
92
+ const known = a.exits.map(e => ({ sysId: e.sysId, name: e.name, condition: e.condition ?? "" }));
93
+ if (out.has("?"))
94
+ known.push({ sysId: "?", name: "?", condition: "" });
95
+ return known.map(e => {
96
+ const targets = out.get(e.sysId) ?? [];
97
+ return {
98
+ ...e,
99
+ forward: targets.filter(t => !this.backEdges.has(edgeKey(sysId, e.sysId, t))),
100
+ loop: targets.filter(t => this.backEdges.has(edgeKey(sysId, e.sysId, t))),
101
+ };
102
+ });
103
+ }
104
+ forward(sysId) {
105
+ return this.exits(sysId).flatMap(e => e.forward);
106
+ }
107
+ /** Activities reachable from root, following every transition. */
108
+ reach(root) {
109
+ const seen = new Set();
110
+ const todo = root ? [root] : [];
111
+ while (todo.length) {
112
+ const n = todo.pop();
113
+ if (seen.has(n))
114
+ continue;
115
+ seen.add(n);
116
+ for (const targets of this._out.get(n).values())
117
+ todo.push(...targets);
118
+ }
119
+ return seen;
120
+ }
121
+ /** Activities reachable from root without looping back. */
122
+ forwardReach(root) {
123
+ const seen = new Set();
124
+ const todo = [root];
125
+ while (todo.length) {
126
+ const n = todo.pop();
127
+ if (seen.has(n))
128
+ continue;
129
+ seen.add(n);
130
+ todo.push(...this.forward(n));
131
+ }
132
+ return seen;
133
+ }
134
+ /** Activities reachable from root, not going past a Join. */
135
+ reachUntilJoin(root) {
136
+ const seen = new Set();
137
+ const todo = [root];
138
+ while (todo.length) {
139
+ const n = todo.pop();
140
+ if (seen.has(n))
141
+ continue;
142
+ seen.add(n);
143
+ if (!this.isJoin(n))
144
+ for (const targets of this._out.get(n).values())
145
+ todo.push(...targets);
146
+ }
147
+ return seen;
148
+ }
149
+ /**
150
+ * Where the paths leaving an activity come back together ({@link WORKFLOW_EXIT} if they
151
+ * never do). Parallel lines rejoin at the Join they all reach, unless they meet before
152
+ * it (then that meeting point is the merge, and the Join closes a later block).
153
+ */
154
+ mergeOf(sysId) {
155
+ let merge = this._ipdom.get(sysId) ?? WORKFLOW_EXIT;
156
+ const exits = this.exits(sysId);
157
+ const parallel = exits.some(e => e.forward.length > 1);
158
+ if (parallel && (merge === WORKFLOW_EXIT || !this.isJoin(merge))) {
159
+ const reaches = exits.flatMap(e => e.forward).map(t => this.reach(t));
160
+ // A Join after the merge point closes a later block, not this one: the lines
161
+ // meet first and run what is between once per line.
162
+ const later = merge === WORKFLOW_EXIT ? new Set() : this.reach(merge);
163
+ const joins = [...this.activities.keys()].filter(j => this.isJoin(j) && !later.has(j) && reaches.every(r => r.has(j)));
164
+ if (joins.length) {
165
+ const depth = this.distances(sysId);
166
+ merge = joins.sort((a, b) => (depth.get(a) ?? 1e6) - (depth.get(b) ?? 1e6))[0];
167
+ }
168
+ }
169
+ return merge;
170
+ }
171
+ distances(root) {
172
+ const depth = new Map([[root, 0]]);
173
+ let frontier = [root];
174
+ while (frontier.length) {
175
+ const next = [];
176
+ for (const n of frontier) {
177
+ for (const targets of this._out.get(n).values()) {
178
+ for (const t of targets) {
179
+ if (!depth.has(t)) {
180
+ depth.set(t, depth.get(n) + 1);
181
+ next.push(t);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ frontier = next;
187
+ }
188
+ return depth;
189
+ }
190
+ findBegin() {
191
+ const start = this.data.version?.start;
192
+ if (start && this.activities.has(start))
193
+ return start;
194
+ for (const id of this.activities.keys()) {
195
+ if (/(^|,)\s*begin\s*=\s*true/i.test(this.typeOf(id)?.attributes ?? ""))
196
+ return id;
197
+ }
198
+ return [...this.activities.keys()].sort((a, b) => this.compare(a, b))[0];
199
+ }
200
+ rawEdges(sysId) {
201
+ const order = [...this.activities.get(sysId).exits.map(e => e.sysId), "?"];
202
+ const out = this._out.get(sysId);
203
+ return order.flatMap(exit => (out.get(exit) ?? []).map((to) => [exit, to]));
204
+ }
205
+ findBackEdges() {
206
+ const roots = this.begin ? [this.begin] : [];
207
+ const rest = [...this.activities.keys()].filter(a => a !== this.begin).sort((a, b) => this.compare(a, b));
208
+ // Activities nothing leads to first, then any left over: a cycle nothing enters.
209
+ roots.push(...rest.filter(a => !this._incoming.get(a).length), ...rest.filter(a => this._incoming.get(a).length));
210
+ const state = new Map();
211
+ for (const root of roots) {
212
+ if (state.has(root))
213
+ continue;
214
+ const stack = [{ node: root, edges: this.rawEdges(root), i: 0 }];
215
+ state.set(root, "open");
216
+ while (stack.length) {
217
+ const top = stack[stack.length - 1];
218
+ if (top.i >= top.edges.length) {
219
+ state.set(top.node, "done");
220
+ stack.pop();
221
+ continue;
222
+ }
223
+ const [exit, to] = top.edges[top.i++];
224
+ if (state.get(to) === "open")
225
+ this.backEdges.add(edgeKey(top.node, exit, to));
226
+ else if (!state.has(to)) {
227
+ state.set(to, "open");
228
+ stack.push({ node: to, edges: this.rawEdges(to), i: 0 });
229
+ }
230
+ }
231
+ }
232
+ }
233
+ computePostDominators() {
234
+ const ids = [...this.activities.keys()];
235
+ const all = new Set([...ids, WORKFLOW_EXIT]);
236
+ const succ = new Map(ids.map(n => [n, this.forward(n).length ? this.forward(n) : [WORKFLOW_EXIT]]));
237
+ const pdom = new Map(ids.map(n => [n, new Set(all)]));
238
+ pdom.set(WORKFLOW_EXIT, new Set([WORKFLOW_EXIT]));
239
+ let changed = true;
240
+ while (changed) {
241
+ changed = false;
242
+ for (const n of ids) {
243
+ const sets = succ.get(n).map(s => pdom.get(s));
244
+ const common = sets.length ? new Set([...sets[0]].filter(x => sets.every(s => s.has(x)))) : new Set();
245
+ common.add(n);
246
+ if (common.size !== pdom.get(n).size || [...common].some(x => !pdom.get(n).has(x))) {
247
+ pdom.set(n, common);
248
+ changed = true;
249
+ }
250
+ }
251
+ }
252
+ for (const n of ids) {
253
+ const strict = [...pdom.get(n)].filter(x => x !== n);
254
+ const immediate = strict.find(c => strict.every(o => pdom.get(c)?.has(o) ?? o === WORKFLOW_EXIT));
255
+ if (immediate)
256
+ this._ipdom.set(n, immediate);
257
+ }
258
+ }
259
+ }
260
+ function edgeKey(from, exit, to) {
261
+ return `${from}|${exit}|${to}`;
262
+ }
263
+ /**
264
+ * Rebuild the workflow as a block tree: numbered steps in reading order, decisions laid out
265
+ * as guard clauses where their paths never rejoin, parallel lanes closed at their Join,
266
+ * loops, and gotos to steps shown elsewhere.
267
+ */
268
+ export function buildOutline(s) {
269
+ const numbers = new Map();
270
+ // `ahead`: steps a path further down this level will show; a branch reaching one
271
+ // continues there instead of claiming it.
272
+ const sequence = (start, stops, ahead = new Set()) => {
273
+ const items = [];
274
+ let n = start;
275
+ let first = true;
276
+ while (n && n !== WORKFLOW_EXIT) {
277
+ if (stops.has(n)) {
278
+ if (first)
279
+ items.push({ kind: "rejoinsBelow" });
280
+ return items;
281
+ }
282
+ if (s.isEnd(n)) {
283
+ items.push({ kind: "end", activity: n });
284
+ return items;
285
+ }
286
+ if (numbers.has(n) || ahead.has(n)) {
287
+ items.push({ kind: "goto", target: n });
288
+ return items;
289
+ }
290
+ numbers.set(n, numbers.size + 1);
291
+ first = false;
292
+ const exits = s.exits(n);
293
+ const step = {
294
+ kind: "step", activity: n, number: numbers.get(n),
295
+ loops: exits.flatMap(e => e.loop.map(t => ({ exit: e.name, target: t }))),
296
+ deadExits: exits.filter(e => !e.forward.length && !e.loop.length).map(e => ({ name: e.name, condition: e.condition })),
297
+ decision: s.activity(n).exits.length > 1,
298
+ branches: [], directExits: [],
299
+ };
300
+ items.push(step);
301
+ const live = exits.filter(e => e.forward.length);
302
+ if (!live.length)
303
+ return items;
304
+ if (live.length === 1 && live[0].forward.length === 1) {
305
+ // one way on: a sequence, even from a decision whose other exits lead nowhere
306
+ if (step.decision)
307
+ step.mainExit = { name: live[0].name, condition: live[0].condition };
308
+ n = live[0].forward[0];
309
+ continue;
310
+ }
311
+ let merge = s.mergeOf(n);
312
+ if (merge !== WORKFLOW_EXIT && s.isEnd(merge) && !stops.has(merge))
313
+ merge = WORKFLOW_EXIT;
314
+ const inner = new Set(stops);
315
+ if (merge !== WORKFLOW_EXIT)
316
+ inner.add(merge);
317
+ const direct = live.filter(e => e.forward.length === 1 && inner.has(e.forward[0]));
318
+ const branching = live.filter(e => !direct.includes(e));
319
+ let main;
320
+ if (merge === WORKFLOW_EXIT && step.decision && branching.length > 1) {
321
+ const single = branching.filter(e => e.forward.length === 1);
322
+ if (single.length)
323
+ main = single.reduce((best, e) => (s.forwardReach(e.forward[0]).size > s.forwardReach(best.forward[0]).size ? e : best));
324
+ }
325
+ // Side branches of a guard layout leave the steps the main path reaches to it.
326
+ const branchAhead = main ? new Set([...ahead, ...s.forwardReach(main.forward[0])]) : ahead;
327
+ for (const e of branching) {
328
+ if (e === main)
329
+ continue;
330
+ step.branches.push({
331
+ exit: step.decision ? e.name : undefined,
332
+ condition: e.condition,
333
+ lanes: e.forward.map(t => sequence(t, inner, branchAhead)),
334
+ });
335
+ }
336
+ step.directExits = direct.map(e => e.name);
337
+ if (main) {
338
+ step.mainExit = { name: main.name, condition: main.condition };
339
+ n = main.forward[0];
340
+ continue;
341
+ }
342
+ if (merge === WORKFLOW_EXIT || stops.has(merge))
343
+ return items;
344
+ if (numbers.has(merge)) {
345
+ items.push({ kind: "goto", target: merge });
346
+ return items;
347
+ }
348
+ const parallelSplit = branching.some(e => e.forward.length > 1);
349
+ if (parallelSplit && !s.isJoin(merge) && !s.isEnd(merge))
350
+ items.push({ kind: "rejoin", withoutJoin: true });
351
+ else if (branching.length && !direct.length)
352
+ items.push({ kind: "rejoin", withoutJoin: false });
353
+ n = merge;
354
+ }
355
+ return items;
356
+ };
357
+ const main = s.begin ? sequence(s.begin, new Set()) : [];
358
+ const orphans = [...s.activities.keys()].filter(a => !s.reachable.has(a)).sort((a, b) => s.compare(a, b));
359
+ const roots = orphans.filter(a => !s.incoming(a).some(i => orphans.includes(i.from)));
360
+ const unreachable = [];
361
+ // Activities nothing leads to first, then whatever is left (a cycle nothing enters).
362
+ for (const root of [...roots, ...orphans]) {
363
+ if (!numbers.has(root))
364
+ unreachable.push(sequence(root, new Set()));
365
+ }
366
+ return { main, unreachable, numbers };
367
+ }
368
+ //# sourceMappingURL=WorkflowStructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowStructure.js","sourceRoot":"","sources":["../../../src/sn/workflow/WorkflowStructure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { WorkflowExport } from "./WorkflowModels.js";
2
+ /**
3
+ * Views of a legacy workflow export that an agent (or a person) can reason on:
4
+ * a nested, flow-like outline, a flat node list, a structural analysis and a Mermaid graph.
5
+ */
6
+ export interface WorkflowViewOptions {
7
+ /** Include settings left at their default */
8
+ allValues?: boolean;
9
+ /** Print scripts in full instead of the first 25 lines */
10
+ fullScripts?: boolean;
11
+ /** Annotate steps with a likely Flow Designer construct */
12
+ flowHints?: boolean;
13
+ }
14
+ /** Lines in a script, not counting a final line break. */
15
+ export declare function lineCount(text: string): number;
16
+ /** Whether an exit's condition is just `activity.result == '<exit>'` (or always true). */
17
+ export declare function trivialCondition(name: string, condition: string): boolean;
18
+ /** Name catalog variables referenced by sys_id (`variables.<sys_id>`) using the export's references. */
19
+ export declare function nameCatalogVariables(data: WorkflowExport, value: string): string;
20
+ /**
21
+ * The workflow as a nested, flow-like outline: numbered steps, decisions ("on Approved:"),
22
+ * guard clauses, parallel branches and where they rejoin, loops ("back to step N"),
23
+ * [WAIT] on steps that park the workflow, and each step's non-default settings.
24
+ */
25
+ export declare function renderWorkflowOutline(data: WorkflowExport, opts?: WorkflowViewOptions): string;
26
+ /** Every activity flat: settings, where it is entered from, and each exit with its targets. */
27
+ export declare function renderWorkflowNodes(data: WorkflowExport, opts?: WorkflowViewOptions): string;
28
+ /** Structure, risks and data flow of a workflow version. */
29
+ export interface WorkflowAnalysis {
30
+ activityCount: number;
31
+ transitionCount: number;
32
+ activitiesByType: Record<string, number>;
33
+ /** Begin-to-end paths, loops ignored (capped at 1e9) */
34
+ pathCount: number;
35
+ waits: string[];
36
+ decisions: Array<{
37
+ activity: string;
38
+ exits: Array<{
39
+ name: string;
40
+ targets: string[];
41
+ loops: string[];
42
+ }>;
43
+ rejoinsAt?: string;
44
+ }>;
45
+ parallelSplits: Array<{
46
+ activity: string;
47
+ exit: string;
48
+ targets: string[];
49
+ rejoinsAt?: string;
50
+ rejoinIsJoin: boolean;
51
+ }>;
52
+ /** Steps after a parallel split, reached by several branches without a Join: they run once per branch */
53
+ mergesWithoutJoin: Array<{
54
+ activity: string;
55
+ splitAt: string;
56
+ }>;
57
+ loops: Array<{
58
+ from: string;
59
+ exit: string;
60
+ to: string;
61
+ cappedBy?: string;
62
+ }>;
63
+ deadExits: Array<{
64
+ activity: string;
65
+ exit: string;
66
+ }>;
67
+ unreachable: string[];
68
+ ends: string[];
69
+ /** workflow.scratchpad keys: who sets and who reads them */
70
+ scratchpad: Array<{
71
+ key: string;
72
+ setBy: string[];
73
+ usedBy: string[];
74
+ }>;
75
+ /** Catalog variables read, by name, with the steps reading them */
76
+ catalogVariables: Array<{
77
+ name: string;
78
+ readBy: string[];
79
+ }>;
80
+ /** Non-default scripts */
81
+ scripts: Array<{
82
+ activity: string;
83
+ element: string;
84
+ lines: number;
85
+ }>;
86
+ /** Fields set by template values (Set Values, task templates) */
87
+ templateFields: Array<{
88
+ activity: string;
89
+ element: string;
90
+ fields: string[];
91
+ }>;
92
+ subflows: Array<{
93
+ activity: string;
94
+ workflow: string;
95
+ workflowSysId: string;
96
+ }>;
97
+ designerActivities: string[];
98
+ }
99
+ /** Analyze a workflow version. Activity references are sys_ids. */
100
+ export declare function analyzeWorkflow(data: WorkflowExport): WorkflowAnalysis;
101
+ /** The analysis as text. */
102
+ export declare function renderWorkflowAnalysis(data: WorkflowExport): string;
103
+ /** A Mermaid flowchart of the workflow. */
104
+ export declare function renderWorkflowMermaid(data: WorkflowExport): string;