@miragon/pulse-engine-core 0.0.0-bootstrap.0 → 0.25.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/LICENSE +21 -0
- package/dist/activities.d.ts +31 -0
- package/dist/activities.d.ts.map +1 -0
- package/dist/activities.js +62 -0
- package/dist/activities.js.map +1 -0
- package/dist/advance-plan.d.ts +21 -0
- package/dist/advance-plan.d.ts.map +1 -0
- package/dist/advance-plan.js +192 -0
- package/dist/advance-plan.js.map +1 -0
- package/dist/conditions.d.ts +66 -0
- package/dist/conditions.d.ts.map +1 -0
- package/dist/conditions.js +119 -0
- package/dist/conditions.js.map +1 -0
- package/dist/dates.d.ts +59 -0
- package/dist/dates.d.ts.map +1 -0
- package/dist/dates.js +189 -0
- package/dist/dates.js.map +1 -0
- package/dist/durations.d.ts +4 -0
- package/dist/durations.d.ts.map +1 -0
- package/dist/durations.js +10 -0
- package/dist/durations.js.map +1 -0
- package/dist/engine-status.d.ts +57 -0
- package/dist/engine-status.d.ts.map +1 -0
- package/dist/engine-status.js +193 -0
- package/dist/engine-status.js.map +1 -0
- package/dist/errors.d.ts +101 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +18 -0
- package/dist/errors.js.map +1 -0
- package/dist/filters.d.ts +53 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +74 -0
- package/dist/filters.js.map +1 -0
- package/dist/findings.d.ts +46 -0
- package/dist/findings.d.ts.map +1 -0
- package/dist/findings.js +105 -0
- package/dist/findings.js.map +1 -0
- package/dist/incident-recovery.d.ts +35 -0
- package/dist/incident-recovery.d.ts.map +1 -0
- package/dist/incident-recovery.js +24 -0
- package/dist/incident-recovery.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect.d.ts +34 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +247 -0
- package/dist/inspect.js.map +1 -0
- package/dist/next.d.ts +26 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +83 -0
- package/dist/next.js.map +1 -0
- package/dist/operations.d.ts +9 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +41 -0
- package/dist/operations.js.map +1 -0
- package/dist/poll.d.ts +24 -0
- package/dist/poll.d.ts.map +1 -0
- package/dist/poll.js +29 -0
- package/dist/poll.js.map +1 -0
- package/dist/port.d.ts +95 -0
- package/dist/port.d.ts.map +1 -0
- package/dist/port.js +113 -0
- package/dist/port.js.map +1 -0
- package/dist/records.d.ts +27 -0
- package/dist/records.d.ts.map +1 -0
- package/dist/records.js +58 -0
- package/dist/records.js.map +1 -0
- package/dist/requests.d.ts +24 -0
- package/dist/requests.d.ts.map +1 -0
- package/dist/requests.js +35 -0
- package/dist/requests.js.map +1 -0
- package/dist/retry-plan.d.ts +62 -0
- package/dist/retry-plan.d.ts.map +1 -0
- package/dist/retry-plan.js +140 -0
- package/dist/retry-plan.js.map +1 -0
- package/dist/root-cause.d.ts +17 -0
- package/dist/root-cause.d.ts.map +1 -0
- package/dist/root-cause.js +35 -0
- package/dist/root-cause.js.map +1 -0
- package/dist/select.d.ts +16 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +133 -0
- package/dist/select.js.map +1 -0
- package/dist/snapshot.d.ts +12 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +134 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/sorting.d.ts +20 -0
- package/dist/sorting.d.ts.map +1 -0
- package/dist/sorting.js +17 -0
- package/dist/sorting.js.map +1 -0
- package/dist/status.d.ts +91 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +222 -0
- package/dist/status.js.map +1 -0
- package/dist/testing/fake-port.d.ts +31 -0
- package/dist/testing/fake-port.d.ts.map +1 -0
- package/dist/testing/fake-port.js +50 -0
- package/dist/testing/fake-port.js.map +1 -0
- package/dist/testing/fixture.d.ts +39 -0
- package/dist/testing/fixture.d.ts.map +1 -0
- package/dist/testing/fixture.js +288 -0
- package/dist/testing/fixture.js.map +1 -0
- package/dist/testing/index.d.ts +23 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +23 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/inspect-routes.d.ts +12 -0
- package/dist/testing/inspect-routes.d.ts.map +1 -0
- package/dist/testing/inspect-routes.js +63 -0
- package/dist/testing/inspect-routes.js.map +1 -0
- package/dist/testing/status.d.ts +18 -0
- package/dist/testing/status.d.ts.map +1 -0
- package/dist/testing/status.js +12 -0
- package/dist/testing/status.js.map +1 -0
- package/dist/testing/waits.d.ts +60 -0
- package/dist/testing/waits.d.ts.map +1 -0
- package/dist/testing/waits.js +53 -0
- package/dist/testing/waits.js.map +1 -0
- package/dist/timeline.d.ts +9 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +63 -0
- package/dist/timeline.js.map +1 -0
- package/dist/tree.d.ts +19 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +61 -0
- package/dist/tree.js.map +1 -0
- package/dist/types.d.ts +254 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +26 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +44 -0
- package/dist/util.js.map +1 -0
- package/dist/variable-writes.d.ts +32 -0
- package/dist/variable-writes.d.ts.map +1 -0
- package/dist/variable-writes.js +113 -0
- package/dist/variable-writes.js.map +1 -0
- package/dist/variables.d.ts +28 -0
- package/dist/variables.d.ts.map +1 -0
- package/dist/variables.js +64 -0
- package/dist/variables.js.map +1 -0
- package/dist/waits.d.ts +11 -0
- package/dist/waits.d.ts.map +1 -0
- package/dist/waits.js +253 -0
- package/dist/waits.js.map +1 -0
- package/package.json +47 -5
package/dist/inspect.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inspect: where a process instance waits and why. Loads the rounds of requests (instance, tree,
|
|
3
|
+
* wait states, root causes) and assembles the instance view.
|
|
4
|
+
*/
|
|
5
|
+
import { isWorkflowError, WorkflowError } from "./errors.js";
|
|
6
|
+
import { isMissing, PARALLEL } from "./port.js";
|
|
7
|
+
import { field, records, str } from "./records.js";
|
|
8
|
+
import { listByIds } from "./requests.js";
|
|
9
|
+
import { rootCause } from "./root-cause.js";
|
|
10
|
+
import { selectInstance } from "./select.js";
|
|
11
|
+
import { instanceView, rootIncidents } from "./snapshot.js";
|
|
12
|
+
import { activeTree } from "./tree.js";
|
|
13
|
+
import { compact, isRecord, mapLimit } from "./util.js";
|
|
14
|
+
import { historicVariableMap, RAW_VARIABLES } from "./variables.js";
|
|
15
|
+
/** Root causes are loaded for at most this many incidents per command run. */
|
|
16
|
+
const MAX_CAUSES = 10;
|
|
17
|
+
/** A stack trace an instance view carries is cut after this many lines. */
|
|
18
|
+
export const MAX_STACKTRACE_LINES = 200;
|
|
19
|
+
const NO_VALUES = { deserializeValues: String(RAW_VARIABLES.deserializeValues) };
|
|
20
|
+
const JOBS = { operationId: "getJobs", key: "processInstanceIds" };
|
|
21
|
+
/** The request that holds the root cause of an incident type. */
|
|
22
|
+
const CAUSE_OPERATIONS = new Map([
|
|
23
|
+
["failedJob", "getStacktrace"],
|
|
24
|
+
["failedExternalTask", "getExternalTaskErrorDetails"],
|
|
25
|
+
]);
|
|
26
|
+
function idInput(id) {
|
|
27
|
+
return { pathArgs: [id], query: {} };
|
|
28
|
+
}
|
|
29
|
+
/** The first round for an id: runtime and history record. */
|
|
30
|
+
export function instanceRequests(id) {
|
|
31
|
+
return [
|
|
32
|
+
{ operationId: "getProcessInstance", input: idInput(id) },
|
|
33
|
+
{ operationId: "getHistoricProcessInstance", input: idInput(id) },
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
/** An id that neither the runtime nor the history knows. */
|
|
37
|
+
function instanceMissing(id) {
|
|
38
|
+
return new WorkflowError({ kind: "instance-missing", id });
|
|
39
|
+
}
|
|
40
|
+
async function timeline(port, id) {
|
|
41
|
+
const [activities, incidents] = await Promise.all([
|
|
42
|
+
port.list("getHistoricActivityInstances", {
|
|
43
|
+
processInstanceId: id,
|
|
44
|
+
sortBy: "occurrence",
|
|
45
|
+
sortOrder: "asc",
|
|
46
|
+
}),
|
|
47
|
+
port.list("getHistoricIncidents", { processInstanceId: id }),
|
|
48
|
+
]);
|
|
49
|
+
return { timeline: activities.items, historicIncidents: incidents.items };
|
|
50
|
+
}
|
|
51
|
+
function emptyData(id, options) {
|
|
52
|
+
return {
|
|
53
|
+
id,
|
|
54
|
+
tree: [],
|
|
55
|
+
truncated: false,
|
|
56
|
+
activityTrees: [],
|
|
57
|
+
incidents: [],
|
|
58
|
+
subscriptions: [],
|
|
59
|
+
tasks: [],
|
|
60
|
+
externalTasks: [],
|
|
61
|
+
jobs: [],
|
|
62
|
+
timerJobIds: new Set(),
|
|
63
|
+
definitions: [],
|
|
64
|
+
jobDefinitions: [],
|
|
65
|
+
causes: new Map(),
|
|
66
|
+
historyRequested: options.history,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async function endedData(port, id, history, options) {
|
|
70
|
+
const [variables, past] = await Promise.all([
|
|
71
|
+
options.variables
|
|
72
|
+
? port.list("getHistoricVariableInstances", { processInstanceId: id, ...NO_VALUES })
|
|
73
|
+
: undefined,
|
|
74
|
+
options.history ? timeline(port, id) : undefined,
|
|
75
|
+
]);
|
|
76
|
+
return {
|
|
77
|
+
...emptyData(id, options),
|
|
78
|
+
history,
|
|
79
|
+
...compact({ variables: variables && historicVariableMap(variables.items, id) }),
|
|
80
|
+
...past,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The instance ended between two rounds (a job executor finished it): its activity instances
|
|
85
|
+
* answer 404, its variables 500 NullValueException (verified on all three engines).
|
|
86
|
+
*/
|
|
87
|
+
function endedMeanwhile(port, error) {
|
|
88
|
+
const failure = port.failure(error);
|
|
89
|
+
if (isMissing(failure))
|
|
90
|
+
return true;
|
|
91
|
+
return failure?.status === 500 && failure.engineType === "NullValueException";
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Per instance of the tree: activity instance tree, incidents and event subscriptions. Instances
|
|
95
|
+
* that ended since the tree was read are `gone` and left out.
|
|
96
|
+
*/
|
|
97
|
+
async function perInstance(port, ids) {
|
|
98
|
+
const rows = await mapLimit(ids, PARALLEL, async (pid) => {
|
|
99
|
+
const [activities, incidents, subscriptions] = await Promise.all([
|
|
100
|
+
port.find("getActivityInstanceTree", idInput(pid)),
|
|
101
|
+
port.list("getIncidents", { processInstanceId: pid }),
|
|
102
|
+
port.list("getEventSubscriptions", { processInstanceId: pid }),
|
|
103
|
+
]);
|
|
104
|
+
return { pid, activities, incidents: incidents.items, subscriptions: subscriptions.items };
|
|
105
|
+
});
|
|
106
|
+
const present = rows.filter((row) => row.activities !== undefined);
|
|
107
|
+
return {
|
|
108
|
+
gone: new Set(rows.filter((row) => row.activities === undefined).map((row) => row.pid)),
|
|
109
|
+
activityTrees: records(present.map((row) => row.activities)),
|
|
110
|
+
incidents: present.flatMap((row) => row.incidents),
|
|
111
|
+
subscriptions: present.flatMap((row) => row.subscriptions),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** The variables of the process scope; `gone` when the instance ended meanwhile. */
|
|
115
|
+
async function scopeVariables(port, id) {
|
|
116
|
+
try {
|
|
117
|
+
const value = await port.json("getProcessInstanceVariables", {
|
|
118
|
+
pathArgs: [id],
|
|
119
|
+
query: NO_VALUES,
|
|
120
|
+
});
|
|
121
|
+
return isRecord(value) ? value : {};
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (endedMeanwhile(port, error))
|
|
125
|
+
return "gone";
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Once for the whole tree: tasks, external tasks, jobs, timers, definitions, job definitions. */
|
|
130
|
+
async function perTree(port, ids, definitionIds) {
|
|
131
|
+
const [tasks, externalTasks, jobs, timers, definitions, jobDefinitions] = await Promise.all([
|
|
132
|
+
listByIds(port, { operationId: "getTasks", key: "processInstanceIdIn", ids }),
|
|
133
|
+
listByIds(port, { operationId: "getExternalTasks", key: "processInstanceIdIn", ids }),
|
|
134
|
+
listByIds(port, { operationId: "getJobs", key: "processInstanceIds", ids }),
|
|
135
|
+
listByIds(port, { ...JOBS, ids, query: { timers: "true" } }),
|
|
136
|
+
listByIds(port, {
|
|
137
|
+
operationId: "getProcessDefinitions",
|
|
138
|
+
key: "processDefinitionIdIn",
|
|
139
|
+
ids: definitionIds,
|
|
140
|
+
}),
|
|
141
|
+
mapLimit(definitionIds, PARALLEL, (definitionId) => port.list("getJobDefinitions", { processDefinitionId: definitionId })),
|
|
142
|
+
]);
|
|
143
|
+
const timerJobIds = new Set(timers.flatMap((timer) => str(timer, "id") ?? []));
|
|
144
|
+
return {
|
|
145
|
+
tasks,
|
|
146
|
+
externalTasks,
|
|
147
|
+
jobs,
|
|
148
|
+
timerJobIds,
|
|
149
|
+
definitions,
|
|
150
|
+
jobDefinitions: jobDefinitions.flatMap((page) => page.items),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function parentOf(port, id) {
|
|
154
|
+
const parents = await port.list("getProcessInstances", { subProcessInstance: id }, 1);
|
|
155
|
+
return str(parents.items[0], "id");
|
|
156
|
+
}
|
|
157
|
+
/** The data of a running instance; undefined when it ended while the rounds ran. */
|
|
158
|
+
async function activeData(port, ids, options) {
|
|
159
|
+
const { id, runtime, history } = ids;
|
|
160
|
+
const [tree, parentId] = await Promise.all([
|
|
161
|
+
activeTree(port, runtime),
|
|
162
|
+
history === undefined ? parentOf(port, id) : undefined,
|
|
163
|
+
]);
|
|
164
|
+
const pids = tree.nodes.map((node) => node.id);
|
|
165
|
+
const definitionIds = [...new Set(tree.nodes.map((node) => node.definitionId))];
|
|
166
|
+
const [{ gone, ...instances }, items, variables, past] = await Promise.all([
|
|
167
|
+
perInstance(port, pids),
|
|
168
|
+
perTree(port, pids, definitionIds),
|
|
169
|
+
options.variables ? scopeVariables(port, id) : undefined,
|
|
170
|
+
options.history ? timeline(port, id) : undefined,
|
|
171
|
+
]);
|
|
172
|
+
if (gone.has(id) || variables === "gone")
|
|
173
|
+
return undefined;
|
|
174
|
+
return {
|
|
175
|
+
...emptyData(id, options),
|
|
176
|
+
runtime,
|
|
177
|
+
...compact({ history, parentId, variables }),
|
|
178
|
+
// called instances that ended since the tree was read are left out
|
|
179
|
+
tree: tree.nodes.filter((node) => !gone.has(node.id)),
|
|
180
|
+
truncated: tree.truncated,
|
|
181
|
+
...instances,
|
|
182
|
+
...items,
|
|
183
|
+
...past,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The root cause of an incident: from the stacktrace of a failed job or the error details of a
|
|
188
|
+
* failed external task, else the incident message; with `stacktrace` also the (first 200) lines.
|
|
189
|
+
*/
|
|
190
|
+
export async function incidentCause(port, incident, stacktrace) {
|
|
191
|
+
const operation = CAUSE_OPERATIONS.get(field(incident, "incidentType"));
|
|
192
|
+
const configuration = str(incident, "configuration");
|
|
193
|
+
const text = operation === undefined || configuration === undefined
|
|
194
|
+
? undefined
|
|
195
|
+
: await port.text(operation, [configuration]);
|
|
196
|
+
const message = str(incident, "incidentMessage");
|
|
197
|
+
const lines = text?.trimEnd().split(/\r?\n/).slice(0, MAX_STACKTRACE_LINES);
|
|
198
|
+
return compact({
|
|
199
|
+
rootCause: (text === undefined ? undefined : rootCause(text)) ?? message,
|
|
200
|
+
stacktrace: stacktrace ? lines : undefined,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/** Root causes of the first (at most 10) open root incidents. */
|
|
204
|
+
async function causes(port, incidents, options) {
|
|
205
|
+
const first = rootIncidents(incidents).slice(0, MAX_CAUSES);
|
|
206
|
+
const loaded = await mapLimit(first, PARALLEL, (incident) => incidentCause(port, incident, options.stacktrace));
|
|
207
|
+
return new Map(first.map((incident, index) => [field(incident, "id"), loaded[index] ?? {}]));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* The instance view of `id`; `instance-missing` when neither runtime nor history know it. An instance that
|
|
211
|
+
* ends while the rounds run (a job executor finished it) is loaded once more, then as ended.
|
|
212
|
+
*/
|
|
213
|
+
export async function loadInstance(port, id, options, attempts = 2) {
|
|
214
|
+
const [runtime, history] = await Promise.all(instanceRequests(id).map(async (request) => records([await port.find(request.operationId, request.input)])[0]));
|
|
215
|
+
if (runtime === undefined && history === undefined)
|
|
216
|
+
throw instanceMissing(id);
|
|
217
|
+
if (runtime === undefined)
|
|
218
|
+
return instanceView(await endedData(port, id, history ?? {}, options));
|
|
219
|
+
const data = await activeData(port, { id, runtime, ...compact({ history }) }, options);
|
|
220
|
+
if (data === undefined) {
|
|
221
|
+
if (attempts > 1)
|
|
222
|
+
return loadInstance(port, id, options, attempts - 1);
|
|
223
|
+
throw instanceMissing(id);
|
|
224
|
+
}
|
|
225
|
+
return instanceView({ ...data, causes: await causes(port, data.incidents, options) });
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The view after a write: an instance that ended without a history record (history level none)
|
|
229
|
+
* is `{id, state: "ENDED"}` instead of `instance-missing`.
|
|
230
|
+
*/
|
|
231
|
+
export async function loadView(port, id, options) {
|
|
232
|
+
try {
|
|
233
|
+
return await loadInstance(port, id, options);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
if (isWorkflowError(error) && error.reason.kind === "instance-missing") {
|
|
237
|
+
return { id, state: "ENDED" };
|
|
238
|
+
}
|
|
239
|
+
throw error;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/** Inspect: the selected instance's view (selection rules and errors as `selectInstance`'s). */
|
|
243
|
+
export async function inspectInstance(port, selection, options) {
|
|
244
|
+
const id = await selectInstance(port, selection);
|
|
245
|
+
return loadInstance(port, id, options);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}
|
package/dist/next.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ready follow-ups of the instance view: at most three steps, always by id (never by business
|
|
3
|
+
* key), so they are reproducible. A caller renders each step in its own words. Pure.
|
|
4
|
+
*/
|
|
5
|
+
import type { InstanceView, ItemStep, NextStep, WaitState } from "./types.js";
|
|
6
|
+
/** Wait states advance can move: also receive tasks without a message. */
|
|
7
|
+
export declare function isAdvanceable(wait: WaitState): boolean;
|
|
8
|
+
/** True for incident types whose retries retry sets. */
|
|
9
|
+
export declare function isRetryable(type: string): boolean;
|
|
10
|
+
type NextInput = Pick<InstanceView<unknown>, "id" | "state" | "waitingAt" | "incidents">;
|
|
11
|
+
/** A suspended job: advance refuses to execute it. */
|
|
12
|
+
export declare function isSuspendedJob(wait: WaitState): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The step that moves one wait state (an item of a multi-instance activity) when its ids are all
|
|
15
|
+
* it needs; undefined for external tasks (they need a lock first) and conditions.
|
|
16
|
+
*/
|
|
17
|
+
export declare function itemStep(wait: WaitState): ItemStep | undefined;
|
|
18
|
+
/** The wait states per activity, in the order of the view. */
|
|
19
|
+
export declare function byActivity(waits: readonly WaitState[]): Map<string, WaitState[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Retry for a failed job or external task, the advance steps above, the history of an ended
|
|
22
|
+
* instance shown without it.
|
|
23
|
+
*/
|
|
24
|
+
export declare function nextSteps(view: NextInput, historyShown: boolean): NextStep[];
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=next.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAY,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAevF,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAItD;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC,CAAA;AAExF,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAE9D;AAMD,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAMhF;AAqBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,QAAQ,EAAE,CAU5E"}
|
package/dist/next.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ready follow-ups of the instance view: at most three steps, always by id (never by business
|
|
3
|
+
* key), so they are reproducible. A caller renders each step in its own words. Pure.
|
|
4
|
+
*/
|
|
5
|
+
import { BUILT_IN_INCIDENT_TYPES } from "./incident-recovery.js";
|
|
6
|
+
const MAX_NEXT = 3;
|
|
7
|
+
const MAX_ACTIVITIES = 2;
|
|
8
|
+
const RETRYABLE = new Set(BUILT_IN_INCIDENT_TYPES);
|
|
9
|
+
const ADVANCEABLE = new Set([
|
|
10
|
+
"userTask",
|
|
11
|
+
"externalTask",
|
|
12
|
+
"timer",
|
|
13
|
+
"asyncContinuation",
|
|
14
|
+
"message",
|
|
15
|
+
"signal",
|
|
16
|
+
]);
|
|
17
|
+
const RUNNING = new Set(["ACTIVE", "SUSPENDED"]);
|
|
18
|
+
/** Wait states advance can move: also receive tasks without a message. */
|
|
19
|
+
export function isAdvanceable(wait) {
|
|
20
|
+
return (ADVANCEABLE.has(wait.kind) || (wait.kind === "other" && wait.activityType === "receiveTask"));
|
|
21
|
+
}
|
|
22
|
+
/** True for incident types whose retries retry sets. */
|
|
23
|
+
export function isRetryable(type) {
|
|
24
|
+
return RETRYABLE.has(type);
|
|
25
|
+
}
|
|
26
|
+
/** A suspended job: advance refuses to execute it. */
|
|
27
|
+
export function isSuspendedJob(wait) {
|
|
28
|
+
return (wait.kind === "timer" || wait.kind === "asyncContinuation") && wait.suspended === true;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The step that moves one wait state (an item of a multi-instance activity) when its ids are all
|
|
32
|
+
* it needs; undefined for external tasks (they need a lock first) and conditions.
|
|
33
|
+
*/
|
|
34
|
+
export function itemStep(wait) {
|
|
35
|
+
return isItemWait(wait) ? { action: "move", wait } : undefined;
|
|
36
|
+
}
|
|
37
|
+
function isItemWait(wait) {
|
|
38
|
+
return wait.kind !== "externalTask" && wait.kind !== "conditional";
|
|
39
|
+
}
|
|
40
|
+
/** The wait states per activity, in the order of the view. */
|
|
41
|
+
export function byActivity(waits) {
|
|
42
|
+
const groups = new Map();
|
|
43
|
+
for (const wait of waits) {
|
|
44
|
+
groups.set(wait.activityId, [...(groups.get(wait.activityId) ?? []), wait]);
|
|
45
|
+
}
|
|
46
|
+
return groups;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Advance the only wait state; with several, per activity (the first two) advance at that
|
|
50
|
+
* activity, or move the first item of a multi-instance activity (advance at an activity refuses
|
|
51
|
+
* to pick one). A suspended instance is activated first.
|
|
52
|
+
*/
|
|
53
|
+
function advanceSteps(view) {
|
|
54
|
+
const processInstanceId = view.id;
|
|
55
|
+
if (view.state === "SUSPENDED")
|
|
56
|
+
return [{ action: "activate", processInstanceId }];
|
|
57
|
+
const movable = view.waitingAt.filter((wait) => isAdvanceable(wait) && !isSuspendedJob(wait));
|
|
58
|
+
if (movable.length === 1)
|
|
59
|
+
return [{ action: "advance", processInstanceId }];
|
|
60
|
+
return [...byActivity(movable).entries()]
|
|
61
|
+
.filter(([activityId]) => activityId !== "")
|
|
62
|
+
.slice(0, MAX_ACTIVITIES)
|
|
63
|
+
.flatMap(([activityId, waits]) => {
|
|
64
|
+
if (waits.length === 1)
|
|
65
|
+
return [{ action: "advance", processInstanceId, activityId }];
|
|
66
|
+
return waits[0] === undefined ? [] : (itemStep(waits[0]) ?? []);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Retry for a failed job or external task, the advance steps above, the history of an ended
|
|
71
|
+
* instance shown without it.
|
|
72
|
+
*/
|
|
73
|
+
export function nextSteps(view, historyShown) {
|
|
74
|
+
const processInstanceId = view.id;
|
|
75
|
+
const retry = view.incidents.some((incident) => isRetryable(incident.type))
|
|
76
|
+
? [{ action: "retry", processInstanceId }]
|
|
77
|
+
: [];
|
|
78
|
+
const history = !RUNNING.has(view.state) && !historyShown
|
|
79
|
+
? [{ action: "inspectHistory", processInstanceId }]
|
|
80
|
+
: [];
|
|
81
|
+
return [...retry, ...advanceSteps(view), ...history].slice(0, MAX_NEXT);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=next.js.map
|
package/dist/next.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The operations each composite may send, by operation id: the contract with a port adapter that
|
|
3
|
+
* maps operations one by one (the engine connector holds its table equal to the union).
|
|
4
|
+
*/
|
|
5
|
+
/** `inspectInstance`: the selection reads, the rounds of the instance view and its root causes. */
|
|
6
|
+
export declare const INSPECT_OPERATIONS: readonly ["getHistoricProcessInstances", "getProcessInstances", "getProcessInstance", "getHistoricProcessInstance", "getActivityInstanceTree", "getIncidents", "getEventSubscriptions", "getTasks", "getExternalTasks", "getJobs", "getProcessDefinitions", "getJobDefinitions", "getProcessInstanceVariables", "getHistoricVariableInstances", "getHistoricActivityInstances", "getHistoricIncidents", "getStacktrace", "getExternalTaskErrorDetails"];
|
|
7
|
+
/** `readStatus`: round one and the root cause of each incident group shown. */
|
|
8
|
+
export declare const STATUS_OPERATIONS: readonly ["getRestAPIVersion", "getProcessDefinitionStatistics", "getIncidents", "getIncidentsCount", "getExternalTasks", "getExternalTasksCount", "getJobsCount", "getJobs", "getTasksCount", "getBatchStatistics", "getStacktrace", "getExternalTaskErrorDetails"];
|
|
9
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,ybAmBrB,CAAA;AAEV,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,sQAapB,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The operations each composite may send, by operation id: the contract with a port adapter that
|
|
3
|
+
* maps operations one by one (the engine connector holds its table equal to the union).
|
|
4
|
+
*/
|
|
5
|
+
/** `inspectInstance`: the selection reads, the rounds of the instance view and its root causes. */
|
|
6
|
+
export const INSPECT_OPERATIONS = [
|
|
7
|
+
"getHistoricProcessInstances",
|
|
8
|
+
"getProcessInstances",
|
|
9
|
+
"getProcessInstance",
|
|
10
|
+
"getHistoricProcessInstance",
|
|
11
|
+
"getActivityInstanceTree",
|
|
12
|
+
"getIncidents",
|
|
13
|
+
"getEventSubscriptions",
|
|
14
|
+
"getTasks",
|
|
15
|
+
"getExternalTasks",
|
|
16
|
+
"getJobs",
|
|
17
|
+
"getProcessDefinitions",
|
|
18
|
+
"getJobDefinitions",
|
|
19
|
+
"getProcessInstanceVariables",
|
|
20
|
+
"getHistoricVariableInstances",
|
|
21
|
+
"getHistoricActivityInstances",
|
|
22
|
+
"getHistoricIncidents",
|
|
23
|
+
"getStacktrace",
|
|
24
|
+
"getExternalTaskErrorDetails",
|
|
25
|
+
];
|
|
26
|
+
/** `readStatus`: round one and the root cause of each incident group shown. */
|
|
27
|
+
export const STATUS_OPERATIONS = [
|
|
28
|
+
"getRestAPIVersion",
|
|
29
|
+
"getProcessDefinitionStatistics",
|
|
30
|
+
"getIncidents",
|
|
31
|
+
"getIncidentsCount",
|
|
32
|
+
"getExternalTasks",
|
|
33
|
+
"getExternalTasksCount",
|
|
34
|
+
"getJobsCount",
|
|
35
|
+
"getJobs",
|
|
36
|
+
"getTasksCount",
|
|
37
|
+
"getBatchStatistics",
|
|
38
|
+
"getStacktrace",
|
|
39
|
+
"getExternalTaskErrorDetails",
|
|
40
|
+
];
|
|
41
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mGAAmG;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,6BAA6B;IAC7B,qBAAqB;IACrB,oBAAoB;IACpB,4BAA4B;IAC5B,yBAAyB;IACzB,cAAc;IACd,uBAAuB;IACvB,UAAU;IACV,kBAAkB;IAClB,SAAS;IACT,uBAAuB;IACvB,mBAAmB;IACnB,6BAA6B;IAC7B,8BAA8B;IAC9B,8BAA8B;IAC9B,sBAAsB;IACtB,eAAe;IACf,6BAA6B;CACrB,CAAA;AAEV,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB;IACnB,gCAAgC;IAChC,cAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,uBAAuB;IACvB,cAAc;IACd,SAAS;IACT,eAAe;IACf,oBAAoB;IACpB,eAAe;IACf,6BAA6B;CACrB,CAAA"}
|
package/dist/poll.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The polling loop of waiting for a condition: a check right away, then after
|
|
3
|
+
* sleeps of 250, 500, 1000, 2000, 2000, ... ms; the last sleep ends at the deadline, where a
|
|
4
|
+
* final check runs. Pure: the clock and the sleep are injected.
|
|
5
|
+
*/
|
|
6
|
+
export interface PollTiming {
|
|
7
|
+
readonly now: () => number;
|
|
8
|
+
readonly sleep: (ms: number) => Promise<void>;
|
|
9
|
+
readonly timeoutMs: number;
|
|
10
|
+
/** Called once, before the first sleep (the wait really waits). */
|
|
11
|
+
readonly waiting?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface PollResult<T> {
|
|
14
|
+
/** The value of the check that ended the loop; undefined after the deadline. */
|
|
15
|
+
readonly value?: T;
|
|
16
|
+
readonly polls: number;
|
|
17
|
+
readonly elapsedMs: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runs `check` until it returns a value or the deadline passed. `check` gets the number of the
|
|
21
|
+
* poll (1 for the first).
|
|
22
|
+
*/
|
|
23
|
+
export declare function poll<T>(check: (polls: number) => Promise<T | undefined>, timing: PollTiming): Promise<PollResult<T>>;
|
|
24
|
+
//# sourceMappingURL=poll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAKD;;;GAGG;AACH,wBAAsB,IAAI,CAAC,CAAC,EAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,EAChD,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAaxB"}
|
package/dist/poll.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The polling loop of waiting for a condition: a check right away, then after
|
|
3
|
+
* sleeps of 250, 500, 1000, 2000, 2000, ... ms; the last sleep ends at the deadline, where a
|
|
4
|
+
* final check runs. Pure: the clock and the sleep are injected.
|
|
5
|
+
*/
|
|
6
|
+
const FIRST_DELAY_MS = 250;
|
|
7
|
+
const MAX_DELAY_MS = 2000;
|
|
8
|
+
/**
|
|
9
|
+
* Runs `check` until it returns a value or the deadline passed. `check` gets the number of the
|
|
10
|
+
* poll (1 for the first).
|
|
11
|
+
*/
|
|
12
|
+
export async function poll(check, timing) {
|
|
13
|
+
const started = timing.now();
|
|
14
|
+
const deadline = started + timing.timeoutMs;
|
|
15
|
+
let delay = FIRST_DELAY_MS;
|
|
16
|
+
for (let polls = 1;; polls++) {
|
|
17
|
+
const value = await check(polls);
|
|
18
|
+
const now = timing.now();
|
|
19
|
+
if (value !== undefined)
|
|
20
|
+
return { value, polls, elapsedMs: now - started };
|
|
21
|
+
if (now >= deadline)
|
|
22
|
+
return { polls, elapsedMs: now - started };
|
|
23
|
+
if (polls === 1)
|
|
24
|
+
timing.waiting?.();
|
|
25
|
+
await timing.sleep(Math.min(delay, deadline - now));
|
|
26
|
+
delay = Math.min(delay * 2, MAX_DELAY_MS);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=poll.js.map
|
package/dist/poll.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../src/poll.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,MAAM,cAAc,GAAG,GAAG,CAAA;AAC1B,MAAM,YAAY,GAAG,IAAI,CAAA;AAEzB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,KAAgD,EAChD,MAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC,SAAS,CAAA;IAC3C,IAAI,KAAK,GAAG,cAAc,CAAA;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,GAAI,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAA;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;QACxB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE,CAAA;QAC1E,IAAI,GAAG,IAAI,QAAQ;YAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,EAAE,CAAA;QAC/D,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA;QACnC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAA;QACnD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC"}
|
package/dist/port.d.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The engine port of the Camunda 7 REST API family: the operations a workflow sends, by the
|
|
3
|
+
* operation ids of the REST API, and the read rules every caller shares (paging, missing
|
|
4
|
+
* resources, text answers). A caller supplies the transport; vendors are its runtime config.
|
|
5
|
+
*/
|
|
6
|
+
import { type Rec } from "./records.js";
|
|
7
|
+
/** Query values by wire name, as text; undefined entries are not sent. */
|
|
8
|
+
export type Query = Readonly<Record<string, string | undefined>>;
|
|
9
|
+
/** Path values in path order, the query, an optional JSON body. */
|
|
10
|
+
export interface OperationInput {
|
|
11
|
+
readonly pathArgs: readonly string[];
|
|
12
|
+
readonly query: Query;
|
|
13
|
+
readonly body?: unknown;
|
|
14
|
+
}
|
|
15
|
+
/** A request a workflow sends. */
|
|
16
|
+
export interface PlannedRequest {
|
|
17
|
+
readonly operationId: string;
|
|
18
|
+
readonly input: OperationInput;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A write of a workflow; `label` says it in words (`execute job j1`), for a preview. Not named
|
|
22
|
+
* `summary`: scripts/hand-off-refs.test.mjs reads an object literal with a `summary` in a
|
|
23
|
+
* package's source as a hand-off to the model.
|
|
24
|
+
*/
|
|
25
|
+
export interface PlannedWrite extends PlannedRequest {
|
|
26
|
+
readonly label: string;
|
|
27
|
+
}
|
|
28
|
+
/** What an engine's error answer says. */
|
|
29
|
+
export interface EngineFailure {
|
|
30
|
+
readonly status: number;
|
|
31
|
+
readonly engineType?: string;
|
|
32
|
+
readonly engineMessage?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* How a caller reaches one engine. `A` is the caller's answer of a request, which the port reads
|
|
36
|
+
* as JSON or as text right after awaiting it.
|
|
37
|
+
*/
|
|
38
|
+
export interface EngineTransport<A = unknown> {
|
|
39
|
+
/** Sends the operation and resolves to its answer; rejects on any failure. */
|
|
40
|
+
send(operationId: string, input: OperationInput): Promise<A>;
|
|
41
|
+
/** The JSON value of an answer; undefined when it carries none. */
|
|
42
|
+
json(answer: A): unknown;
|
|
43
|
+
/** The text of an answer (stacktrace, error details); undefined when it carries none. */
|
|
44
|
+
text(answer: A): string | undefined;
|
|
45
|
+
/** The engine answer an error of `send` carries; undefined for anything else. */
|
|
46
|
+
failure(error: unknown): EngineFailure | undefined;
|
|
47
|
+
}
|
|
48
|
+
export interface ListResult {
|
|
49
|
+
readonly items: readonly Rec[];
|
|
50
|
+
/** True when the engine has more than the `cap` items that were loaded. */
|
|
51
|
+
readonly truncated: boolean;
|
|
52
|
+
}
|
|
53
|
+
/** What the workflows run on. */
|
|
54
|
+
export interface EnginePort {
|
|
55
|
+
/** The JSON value of the operation. */
|
|
56
|
+
json(operationId: string, input: OperationInput): Promise<unknown>;
|
|
57
|
+
/** As `json`; a missing resource (`isMissing`) gives undefined. */
|
|
58
|
+
find(operationId: string, input: OperationInput): Promise<unknown>;
|
|
59
|
+
/** All pages of 500, at most `cap` items (one more is asked for to tell truncation). */
|
|
60
|
+
list(operationId: string, query: Query, cap?: number): Promise<ListResult>;
|
|
61
|
+
/** A text answer; missing, 204, empty or blank give undefined. */
|
|
62
|
+
text(operationId: string, pathArgs: readonly string[]): Promise<string | undefined>;
|
|
63
|
+
/** The engine answer an error of the port carries (the transport's reading). */
|
|
64
|
+
failure(error: unknown): EngineFailure | undefined;
|
|
65
|
+
}
|
|
66
|
+
/** Most parallel requests of one round. */
|
|
67
|
+
export declare const PARALLEL = 8;
|
|
68
|
+
/**
|
|
69
|
+
* An engine 404 that names a missing resource: status 404 with an engine exception type other than
|
|
70
|
+
* NotFoundException (JAX-RS: no such endpoint, a wrong REST root) and QueryParamException (an
|
|
71
|
+
* unreadable query value).
|
|
72
|
+
*/
|
|
73
|
+
export declare function isMissing(failure: EngineFailure | undefined): boolean;
|
|
74
|
+
/** The query of a page of `list`. */
|
|
75
|
+
export declare function pageQuery(query: Query, first: number, size: number): Query;
|
|
76
|
+
/**
|
|
77
|
+
* The port over `transport`: a plain object of closures, never a class instance, so a caller can
|
|
78
|
+
* spread it and add its own methods.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createEnginePort<A>(transport: EngineTransport<A>): EnginePort;
|
|
81
|
+
/**
|
|
82
|
+
* At most `limit` requests in flight: the rounds of a workflow may start more at once, the
|
|
83
|
+
* others wait for a free slot (a released slot passes straight to the next waiter).
|
|
84
|
+
*/
|
|
85
|
+
export declare class Slots {
|
|
86
|
+
private readonly limit;
|
|
87
|
+
private active;
|
|
88
|
+
private readonly waiting;
|
|
89
|
+
constructor(limit?: number);
|
|
90
|
+
acquire(): Promise<void>;
|
|
91
|
+
release(): void;
|
|
92
|
+
/** Runs `fn` in a slot: waits for one, frees it when `fn` settles. */
|
|
93
|
+
run<T>(fn: () => Promise<T>): Promise<T>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../src/port.ts"],"names":[],"mappings":"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"}
|