@requence/task 1.0.0-alpha.10 → 1.0.0-alpha.12
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 +12 -0
- package/build/chunk-4r30g3ha.js +38 -0
- package/build/chunk-4r30g3ha.js.map +10 -0
- package/build/cli.js +1 -1
- package/build/index.js +378 -155
- package/build/index.js.map +11 -7
- package/build/types/helpers/src/files/mapOutput.d.ts +4 -1
- package/build/types/helpers/src/files/mapOutput.d.ts.map +1 -1
- package/build/types/helpers/src/index.d.ts +8 -6
- package/build/types/helpers/src/index.d.ts.map +1 -1
- package/build/types/helpers/src/protocol/update.d.ts +8 -8
- package/build/types/helpers/src/utils/callbackToAsyncIterator.d.ts +3 -0
- package/build/types/helpers/src/utils/callbackToAsyncIterator.d.ts.map +1 -0
- package/build/types/helpers/src/utils/clone.d.ts +3 -0
- package/build/types/helpers/src/utils/clone.d.ts.map +1 -0
- package/build/types/helpers/src/utils/createObjectProxy.d.ts +2 -0
- package/build/types/helpers/src/utils/createObjectProxy.d.ts.map +1 -0
- package/build/types/helpers/src/{createRemotePromise.d.ts → utils/createRemotePromise.d.ts} +1 -1
- package/build/types/helpers/src/utils/createRemotePromise.d.ts.map +1 -0
- package/build/types/helpers/src/utils/isRecord.d.ts +2 -0
- package/build/types/helpers/src/utils/isRecord.d.ts.map +1 -0
- package/build/types/helpers/src/{utils.d.ts → utils/mapData.d.ts} +1 -5
- package/build/types/helpers/src/utils/mapData.d.ts.map +1 -0
- package/build/types/helpers/src/utils/matchSchema.d.ts +4 -0
- package/build/types/helpers/src/utils/matchSchema.d.ts.map +1 -0
- package/build/types/helpers/src/utils/obfuscate.d.ts.map +1 -0
- package/build/types/task/src/createTask.d.ts +3 -97
- package/build/types/task/src/createTask.d.ts.map +1 -1
- package/build/types/task/src/types.d.ts +24 -17
- package/build/types/task/src/types.d.ts.map +1 -1
- package/build/types/task/src/watchTasks.d.ts +2 -97
- package/build/types/task/src/watchTasks.d.ts.map +1 -1
- package/package.json +1 -2
- package/build/chunk-ajdmm777.js +0 -125
- package/build/chunk-ajdmm777.js.map +0 -12
- package/build/types/helpers/src/clone.d.ts +0 -3
- package/build/types/helpers/src/clone.d.ts.map +0 -1
- package/build/types/helpers/src/createObjectProxy.d.ts +0 -2
- package/build/types/helpers/src/createObjectProxy.d.ts.map +0 -1
- package/build/types/helpers/src/createRemotePromise.d.ts.map +0 -1
- package/build/types/helpers/src/obfuscate.d.ts.map +0 -1
- package/build/types/helpers/src/utils.d.ts.map +0 -1
- package/build/types/task/src/utils/callbackToAsyncIterator.d.ts +0 -5
- package/build/types/task/src/utils/callbackToAsyncIterator.d.ts.map +0 -1
- /package/build/types/helpers/src/{obfuscate.d.ts → utils/obfuscate.d.ts} +0 -0
package/build/index.js
CHANGED
|
@@ -1,12 +1,253 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
mapData
|
|
5
|
-
} from "./chunk-ajdmm777.js";
|
|
2
|
+
deobfuscate
|
|
3
|
+
} from "./chunk-4r30g3ha.js";
|
|
6
4
|
|
|
7
|
-
// ../helpers/src/
|
|
5
|
+
// ../helpers/src/utils/createRemotePromise.ts
|
|
6
|
+
function createRemotePromise(onAwait) {
|
|
7
|
+
let resolvePromise;
|
|
8
|
+
let rejectPromise;
|
|
9
|
+
const internalPromise = new Promise((resolve, reject) => {
|
|
10
|
+
resolvePromise = resolve;
|
|
11
|
+
rejectPromise = reject;
|
|
12
|
+
});
|
|
13
|
+
let isAwaited = false;
|
|
14
|
+
const wrappedPromise = new Proxy(internalPromise, {
|
|
15
|
+
get(target, property) {
|
|
16
|
+
if (property === "then" || property === "catch" || property === "finally") {
|
|
17
|
+
if (!isAwaited && onAwait) {
|
|
18
|
+
isAwaited = true;
|
|
19
|
+
onAwait(resolvePromise, rejectPromise);
|
|
20
|
+
}
|
|
21
|
+
return target[property].bind(target);
|
|
22
|
+
}
|
|
23
|
+
return target[property];
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return Object.assign(wrappedPromise, {
|
|
27
|
+
resolve: resolvePromise,
|
|
28
|
+
reject: rejectPromise,
|
|
29
|
+
promise: wrappedPromise
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// ../helpers/src/utils/callbackToAsyncIterator.ts
|
|
34
|
+
function callbackToAsyncIterator(subscribe) {
|
|
35
|
+
const pullQueue = [];
|
|
36
|
+
const pushQueue = [];
|
|
37
|
+
const pushValue = (value) => {
|
|
38
|
+
if (pullQueue.length !== 0) {
|
|
39
|
+
const resolver = pullQueue.shift();
|
|
40
|
+
resolver(value);
|
|
41
|
+
} else {
|
|
42
|
+
pushQueue.push(value);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const pullValue = () => new Promise((resolve) => {
|
|
46
|
+
if (pushQueue.length !== 0) {
|
|
47
|
+
resolve(pushQueue.shift());
|
|
48
|
+
} else {
|
|
49
|
+
pullQueue.push(resolve);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
subscribe((value) => {
|
|
53
|
+
pushValue({ value });
|
|
54
|
+
}, (error) => {
|
|
55
|
+
pushValue({ error });
|
|
56
|
+
}, () => {
|
|
57
|
+
pushValue({ done: true });
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
async next() {
|
|
61
|
+
const value = await pullValue();
|
|
62
|
+
if (value.done) {
|
|
63
|
+
return { value: undefined, done: true };
|
|
64
|
+
}
|
|
65
|
+
if (value.error) {
|
|
66
|
+
throw value.error;
|
|
67
|
+
}
|
|
68
|
+
return { value: value.value, done: false };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function callbackToAsyncIterable(...args) {
|
|
73
|
+
return {
|
|
74
|
+
[Symbol.asyncIterator]() {
|
|
75
|
+
return callbackToAsyncIterator(...args);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ../helpers/src/utils/isRecord.ts
|
|
8
81
|
import { z } from "zod";
|
|
82
|
+
var recordSchema = z.record(z.unknown());
|
|
83
|
+
function isRecord(data) {
|
|
84
|
+
return recordSchema.safeParse(data).success;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ../helpers/src/utils/mapData.ts
|
|
88
|
+
function resolve(value, onResolve) {
|
|
89
|
+
if (value instanceof Promise) {
|
|
90
|
+
return Promise.resolve().then(() => value).then(onResolve);
|
|
91
|
+
}
|
|
92
|
+
return onResolve(value);
|
|
93
|
+
}
|
|
94
|
+
function notUndefined(value, fallback) {
|
|
95
|
+
return resolve(value, (resolvedValue) => typeof resolvedValue === "undefined" ? fallback : resolvedValue);
|
|
96
|
+
}
|
|
97
|
+
function mapData(data, visitors) {
|
|
98
|
+
const traverseData = (data2, path) => {
|
|
99
|
+
if (Array.isArray(data2)) {
|
|
100
|
+
return resolve(visitors.Array?.(data2, path), (resolvedData) => {
|
|
101
|
+
if (resolvedData) {
|
|
102
|
+
return resolvedData;
|
|
103
|
+
}
|
|
104
|
+
const items = data2.map((item, index) => traverseData(item, [...path, index]));
|
|
105
|
+
if (items.some((item) => item instanceof Promise)) {
|
|
106
|
+
return Promise.all(items);
|
|
107
|
+
}
|
|
108
|
+
return items;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (data2 === null) {
|
|
112
|
+
return notUndefined(visitors.Null?.(data2, path), data2);
|
|
113
|
+
}
|
|
114
|
+
if (typeof Buffer !== "undefined" && Buffer.isBuffer(data2)) {
|
|
115
|
+
return notUndefined(visitors.Buffer?.(data2, path), data2);
|
|
116
|
+
}
|
|
117
|
+
if (typeof data2 === "string") {
|
|
118
|
+
return notUndefined(visitors.String?.(data2, path), data2);
|
|
119
|
+
}
|
|
120
|
+
if (typeof data2 === "number") {
|
|
121
|
+
return notUndefined(visitors.Number?.(data2, path), data2);
|
|
122
|
+
}
|
|
123
|
+
if (isRecord(data2)) {
|
|
124
|
+
return resolve(visitors.Object?.(data2, path), (resolvedData) => {
|
|
125
|
+
if (resolvedData) {
|
|
126
|
+
return resolvedData;
|
|
127
|
+
}
|
|
128
|
+
const entries = Object.entries(data2).map(([key, value]) => [
|
|
129
|
+
key,
|
|
130
|
+
traverseData(value, [...path, key])
|
|
131
|
+
]);
|
|
132
|
+
if (entries.some(([, value]) => value instanceof Promise)) {
|
|
133
|
+
return Promise.all(entries.map(([key, value]) => Promise.resolve().then(() => value).then((resolvedValue) => [key, resolvedValue]))).then((entries2) => Object.fromEntries(entries2));
|
|
134
|
+
}
|
|
135
|
+
return Object.fromEntries(entries);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return data2;
|
|
139
|
+
};
|
|
140
|
+
return traverseData(data, []);
|
|
141
|
+
}
|
|
9
142
|
|
|
143
|
+
// ../helpers/src/files/index.ts
|
|
144
|
+
import { z as z2 } from "zod";
|
|
145
|
+
|
|
146
|
+
// ../helpers/src/files/mapOutput.ts
|
|
147
|
+
async function upload(uploadUrl, body, signal, contentType) {
|
|
148
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
149
|
+
method: "POST",
|
|
150
|
+
signal,
|
|
151
|
+
headers: contentType ? {
|
|
152
|
+
"Content-Type": contentType
|
|
153
|
+
} : {},
|
|
154
|
+
body
|
|
155
|
+
});
|
|
156
|
+
const data = await uploadResponse.json();
|
|
157
|
+
if (!data || typeof data !== "object") {
|
|
158
|
+
throw new Error("invalid upload response");
|
|
159
|
+
}
|
|
160
|
+
return toFileObject(data);
|
|
161
|
+
}
|
|
162
|
+
async function stream(streamUrl, stream2, signal, contentType) {
|
|
163
|
+
const [testStream, dataStream] = stream2.tee();
|
|
164
|
+
const reader = testStream.getReader();
|
|
165
|
+
const dataPromise = reader.read().then(({ done: done2 }) => {
|
|
166
|
+
if (done2) {
|
|
167
|
+
throw new Error("No streaming date received");
|
|
168
|
+
}
|
|
169
|
+
reader.cancel();
|
|
170
|
+
});
|
|
171
|
+
const streamResponse = await fetch(streamUrl, {
|
|
172
|
+
method: "POST",
|
|
173
|
+
signal,
|
|
174
|
+
headers: contentType ? { "Content-Type": contentType } : {}
|
|
175
|
+
});
|
|
176
|
+
const data = await streamResponse.json();
|
|
177
|
+
if (!data || typeof data !== "object") {
|
|
178
|
+
throw new Error("invalid stream response");
|
|
179
|
+
}
|
|
180
|
+
const { mime, url } = data;
|
|
181
|
+
await dataPromise;
|
|
182
|
+
const done = fetch(url, {
|
|
183
|
+
method: "POST",
|
|
184
|
+
signal,
|
|
185
|
+
duplex: "half",
|
|
186
|
+
body: dataStream
|
|
187
|
+
});
|
|
188
|
+
return [toStreamObject({ mime, url }), done];
|
|
189
|
+
}
|
|
190
|
+
async function mapOutput(params) {
|
|
191
|
+
const streamPromises = [];
|
|
192
|
+
const mapped = await mapData(params.value, {
|
|
193
|
+
async Object(obj) {
|
|
194
|
+
if (obj instanceof Blob || obj instanceof RequenceFile) {
|
|
195
|
+
if (obj instanceof RequenceFile && obj.fileObject) {
|
|
196
|
+
return obj.fileObject;
|
|
197
|
+
}
|
|
198
|
+
if (params.options.uploadUrl) {
|
|
199
|
+
try {
|
|
200
|
+
if (obj instanceof Blob) {
|
|
201
|
+
return await upload(params.options.uploadUrl, obj, params.signal, obj.type);
|
|
202
|
+
}
|
|
203
|
+
if (obj instanceof RequenceFile) {
|
|
204
|
+
return await upload(params.options.uploadUrl, await obj.blob(), params.signal, obj.mimeType);
|
|
205
|
+
}
|
|
206
|
+
} catch (error) {
|
|
207
|
+
if (!(error instanceof Error)) {
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
params.onFail?.(error);
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
} else {
|
|
214
|
+
params.onSkip?.();
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (obj instanceof Response || obj instanceof RequenceStream) {
|
|
219
|
+
if (obj instanceof RequenceStream && obj.streamObject) {
|
|
220
|
+
return obj.streamObject;
|
|
221
|
+
}
|
|
222
|
+
if (params.options.streamUrl) {
|
|
223
|
+
try {
|
|
224
|
+
if (obj instanceof Response && obj.body) {
|
|
225
|
+
const [streamObject, streamPromise] = await stream(params.options.streamUrl, obj.body, params.signal, obj.headers.get("Content-Type"));
|
|
226
|
+
streamPromises.push(streamPromise);
|
|
227
|
+
return streamObject;
|
|
228
|
+
}
|
|
229
|
+
if (obj instanceof RequenceStream) {
|
|
230
|
+
const [streamObject, streamPromise] = await stream(params.options.streamUrl, obj.stream(), params.signal, obj.mimeType);
|
|
231
|
+
streamPromises.push(streamPromise);
|
|
232
|
+
return streamObject;
|
|
233
|
+
}
|
|
234
|
+
} catch (error) {
|
|
235
|
+
if (!(error instanceof Error)) {
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
params.onFail?.(error);
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
} else {
|
|
242
|
+
params.onSkip?.();
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
Promise.allSettled(streamPromises).then(() => params.onDone?.());
|
|
249
|
+
return mapped;
|
|
250
|
+
}
|
|
10
251
|
// ../helpers/src/files/RequenceFile.ts
|
|
11
252
|
class RequenceFile {
|
|
12
253
|
#data;
|
|
@@ -70,15 +311,15 @@ class RequenceStream {
|
|
|
70
311
|
#data;
|
|
71
312
|
#stream = null;
|
|
72
313
|
#options;
|
|
73
|
-
constructor(
|
|
74
|
-
this.#data =
|
|
314
|
+
constructor(stream2, options) {
|
|
315
|
+
this.#data = stream2;
|
|
75
316
|
this.#options = options;
|
|
76
317
|
}
|
|
77
|
-
static fromStreamObject(
|
|
318
|
+
static fromStreamObject(stream2) {
|
|
78
319
|
const instance = new this(null, {
|
|
79
320
|
type: "x/x"
|
|
80
321
|
});
|
|
81
|
-
instance.#stream =
|
|
322
|
+
instance.#stream = stream2;
|
|
82
323
|
return instance;
|
|
83
324
|
}
|
|
84
325
|
get streamObject() {
|
|
@@ -127,96 +368,107 @@ class RequenceStream {
|
|
|
127
368
|
}
|
|
128
369
|
|
|
129
370
|
// ../helpers/src/files/index.ts
|
|
130
|
-
var fileObjectSchema =
|
|
131
|
-
size:
|
|
132
|
-
mime:
|
|
133
|
-
url:
|
|
134
|
-
__REQUENCE_type:
|
|
371
|
+
var fileObjectSchema = z2.object({
|
|
372
|
+
size: z2.number().int().positive(),
|
|
373
|
+
mime: z2.string(),
|
|
374
|
+
url: z2.string().url(),
|
|
375
|
+
__REQUENCE_type: z2.literal("RequenceFile")
|
|
135
376
|
});
|
|
377
|
+
function toFileObject(fileInfo) {
|
|
378
|
+
return {
|
|
379
|
+
...fileInfo,
|
|
380
|
+
__REQUENCE_type: "RequenceFile"
|
|
381
|
+
};
|
|
382
|
+
}
|
|
136
383
|
function isFileObject(data) {
|
|
137
384
|
return fileObjectSchema.safeParse(data).success;
|
|
138
385
|
}
|
|
139
|
-
var streamObjectSchema =
|
|
140
|
-
mime:
|
|
141
|
-
url:
|
|
142
|
-
__REQUENCE_type:
|
|
386
|
+
var streamObjectSchema = z2.object({
|
|
387
|
+
mime: z2.string(),
|
|
388
|
+
url: z2.string().url(),
|
|
389
|
+
__REQUENCE_type: z2.literal("RequenceStream")
|
|
143
390
|
});
|
|
391
|
+
function toStreamObject(streamInfo) {
|
|
392
|
+
return {
|
|
393
|
+
...streamInfo,
|
|
394
|
+
__REQUENCE_type: "RequenceStream"
|
|
395
|
+
};
|
|
396
|
+
}
|
|
144
397
|
function isStreamObject(data) {
|
|
145
398
|
return streamObjectSchema.safeParse(data).success;
|
|
146
399
|
}
|
|
147
400
|
|
|
148
401
|
// src/createTask.ts
|
|
149
402
|
import { EventSource } from "eventsource";
|
|
150
|
-
import FormData from "form-data";
|
|
151
403
|
|
|
152
404
|
// src/types.ts
|
|
153
|
-
import { z as
|
|
154
|
-
var serviceNodeInfoSchema =
|
|
155
|
-
id:
|
|
156
|
-
type:
|
|
157
|
-
alias:
|
|
158
|
-
service:
|
|
159
|
-
id:
|
|
160
|
-
name:
|
|
161
|
-
version:
|
|
405
|
+
import { z as z3 } from "zod";
|
|
406
|
+
var serviceNodeInfoSchema = z3.object({
|
|
407
|
+
id: z3.string().uuid(),
|
|
408
|
+
type: z3.literal("service"),
|
|
409
|
+
alias: z3.string().optional(),
|
|
410
|
+
service: z3.object({
|
|
411
|
+
id: z3.string().uuid(),
|
|
412
|
+
name: z3.string(),
|
|
413
|
+
version: z3.string()
|
|
162
414
|
}).optional()
|
|
163
415
|
});
|
|
164
|
-
var logicNodeInfoSchema =
|
|
165
|
-
id:
|
|
166
|
-
type:
|
|
167
|
-
alias:
|
|
168
|
-
logic:
|
|
169
|
-
language:
|
|
416
|
+
var logicNodeInfoSchema = z3.object({
|
|
417
|
+
id: z3.string().uuid(),
|
|
418
|
+
type: z3.literal("logic"),
|
|
419
|
+
alias: z3.string().optional(),
|
|
420
|
+
logic: z3.object({
|
|
421
|
+
language: z3.enum(["typescript", "javascript", "python"])
|
|
170
422
|
}).optional()
|
|
171
423
|
});
|
|
172
|
-
var nodeInfoSchema =
|
|
424
|
+
var nodeInfoSchema = z3.discriminatedUnion("type", [
|
|
173
425
|
serviceNodeInfoSchema,
|
|
174
426
|
logicNodeInfoSchema
|
|
175
427
|
]);
|
|
176
|
-
var baseUpdate =
|
|
177
|
-
timestamp:
|
|
178
|
-
taskId:
|
|
428
|
+
var baseUpdate = z3.object({
|
|
429
|
+
timestamp: z3.coerce.date(),
|
|
430
|
+
taskId: z3.string().uuid()
|
|
179
431
|
});
|
|
180
432
|
var taskStartUpdateSchema = baseUpdate.extend({
|
|
181
|
-
type:
|
|
182
|
-
input:
|
|
183
|
-
meta:
|
|
433
|
+
type: z3.literal("taskStart"),
|
|
434
|
+
input: z3.unknown(),
|
|
435
|
+
meta: z3.unknown()
|
|
184
436
|
});
|
|
185
437
|
var taskErrorUpdateSchema = baseUpdate.extend({
|
|
186
|
-
type:
|
|
187
|
-
error:
|
|
438
|
+
type: z3.literal("taskError"),
|
|
439
|
+
error: z3.string()
|
|
188
440
|
});
|
|
189
441
|
var taskEndUpdateSchema = baseUpdate.extend({
|
|
190
|
-
type:
|
|
191
|
-
result:
|
|
192
|
-
partialResults:
|
|
442
|
+
type: z3.literal("taskEnd"),
|
|
443
|
+
result: z3.record(z3.string(), z3.unknown()),
|
|
444
|
+
partialResults: z3.array(z3.object({
|
|
193
445
|
node: nodeInfoSchema,
|
|
194
|
-
timestamp:
|
|
195
|
-
data:
|
|
196
|
-
error:
|
|
446
|
+
timestamp: z3.coerce.date().nullable(),
|
|
447
|
+
data: z3.unknown(),
|
|
448
|
+
error: z3.string().optional()
|
|
197
449
|
}))
|
|
198
450
|
});
|
|
199
451
|
var nodeStartUpdateSchema = baseUpdate.extend({
|
|
200
|
-
type:
|
|
452
|
+
type: z3.literal("nodeStart"),
|
|
201
453
|
node: nodeInfoSchema
|
|
202
454
|
});
|
|
203
455
|
var nodeUpdateUpdateSchema = baseUpdate.extend({
|
|
204
|
-
type:
|
|
205
|
-
data:
|
|
456
|
+
type: z3.literal("nodeUpdate"),
|
|
457
|
+
data: z3.unknown()
|
|
206
458
|
});
|
|
207
459
|
var nodeErrorUpdateSchema = baseUpdate.extend({
|
|
208
|
-
type:
|
|
209
|
-
error:
|
|
460
|
+
type: z3.literal("nodeError"),
|
|
461
|
+
error: z3.string()
|
|
210
462
|
});
|
|
211
463
|
var nodeDeferUpdateSchema = baseUpdate.extend({
|
|
212
|
-
type:
|
|
213
|
-
reason:
|
|
464
|
+
type: z3.literal("nodeDefer"),
|
|
465
|
+
reason: z3.string().optional()
|
|
214
466
|
});
|
|
215
467
|
var nodeEndUpdateSchema = baseUpdate.extend({
|
|
216
|
-
type:
|
|
468
|
+
type: z3.literal("nodeEnd"),
|
|
217
469
|
node: nodeInfoSchema
|
|
218
470
|
});
|
|
219
|
-
var updateSchema =
|
|
471
|
+
var updateSchema = z3.discriminatedUnion("type", [
|
|
220
472
|
taskStartUpdateSchema,
|
|
221
473
|
taskErrorUpdateSchema,
|
|
222
474
|
taskEndUpdateSchema,
|
|
@@ -226,50 +478,7 @@ var updateSchema = z2.discriminatedUnion("type", [
|
|
|
226
478
|
nodeDeferUpdateSchema,
|
|
227
479
|
nodeEndUpdateSchema
|
|
228
480
|
]);
|
|
229
|
-
var eventSchema =
|
|
230
|
-
|
|
231
|
-
// src/utils/callbackToAsyncIterator.ts
|
|
232
|
-
function callbackToAsyncIterator(options) {
|
|
233
|
-
const pullQueue = [];
|
|
234
|
-
const pushQueue = [];
|
|
235
|
-
const pushValue = (value) => {
|
|
236
|
-
if (pullQueue.length !== 0) {
|
|
237
|
-
const resolver = pullQueue.shift();
|
|
238
|
-
resolver(value);
|
|
239
|
-
} else {
|
|
240
|
-
pushQueue.push(value);
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
const pullValue = () => new Promise((resolve) => {
|
|
244
|
-
if (pushQueue.length !== 0) {
|
|
245
|
-
resolve(pushQueue.shift());
|
|
246
|
-
} else {
|
|
247
|
-
pullQueue.push(resolve);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
return {
|
|
251
|
-
[Symbol.asyncIterator]() {
|
|
252
|
-
let done = false;
|
|
253
|
-
const unsubscribe = options.subscribe(pushValue);
|
|
254
|
-
return {
|
|
255
|
-
async next() {
|
|
256
|
-
if (done) {
|
|
257
|
-
return { value: undefined, done: true };
|
|
258
|
-
}
|
|
259
|
-
const value = await pullValue();
|
|
260
|
-
if (options.done) {
|
|
261
|
-
done = options.done(value);
|
|
262
|
-
}
|
|
263
|
-
return { value, done: false };
|
|
264
|
-
},
|
|
265
|
-
async return() {
|
|
266
|
-
unsubscribe?.();
|
|
267
|
-
return { value: undefined, done: true };
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
}
|
|
481
|
+
var eventSchema = z3.object({ type: z3.string(), data: z3.string() }).transform((event) => ({ type: event.type, ...JSON.parse(event.data) })).pipe(updateSchema);
|
|
273
482
|
|
|
274
483
|
// src/utils/getAccessToken.ts
|
|
275
484
|
import { readFileSync } from "node:fs";
|
|
@@ -292,7 +501,7 @@ in your package.json in requence.accessToken`);
|
|
|
292
501
|
}
|
|
293
502
|
|
|
294
503
|
// src/utils/mapOutput.ts
|
|
295
|
-
function
|
|
504
|
+
function mapOutput3(data) {
|
|
296
505
|
return mapData(data, {
|
|
297
506
|
Object(obj) {
|
|
298
507
|
if (isFileObject(obj)) {
|
|
@@ -316,7 +525,7 @@ class TaskError extends Error {
|
|
|
316
525
|
function createTask(options, onUpdate) {
|
|
317
526
|
const taskUpdateHandlers = new Set;
|
|
318
527
|
const { apiBaseUrl, token } = getAccessToken(options.accessToken);
|
|
319
|
-
const
|
|
528
|
+
const prepareUrl = `${apiBaseUrl}/task/prepare/${options.taskTemplate}`;
|
|
320
529
|
const payloadPromise = createRemotePromise();
|
|
321
530
|
let isMonitoring = false;
|
|
322
531
|
const startMonitoring = async () => {
|
|
@@ -338,6 +547,12 @@ function createTask(options, onUpdate) {
|
|
|
338
547
|
},
|
|
339
548
|
getData(_alias) {
|
|
340
549
|
return null;
|
|
550
|
+
},
|
|
551
|
+
getTaskId() {
|
|
552
|
+
return payload.taskId;
|
|
553
|
+
},
|
|
554
|
+
getTaskUrl() {
|
|
555
|
+
return "";
|
|
341
556
|
}
|
|
342
557
|
});
|
|
343
558
|
return;
|
|
@@ -382,89 +597,100 @@ function createTask(options, onUpdate) {
|
|
|
382
597
|
const getPartialResult = (alias) => update.partialResults.find((partialResult) => partialResult.node.alias === alias);
|
|
383
598
|
resultPromise.resolve({
|
|
384
599
|
getInput() {
|
|
385
|
-
return
|
|
600
|
+
return mapOutput3(input);
|
|
386
601
|
},
|
|
387
602
|
getMeta() {
|
|
388
|
-
return
|
|
603
|
+
return mapOutput3(meta);
|
|
389
604
|
},
|
|
390
605
|
getError(alias) {
|
|
391
606
|
return getPartialResult(alias)?.error ?? null;
|
|
392
607
|
},
|
|
393
608
|
getData(alias) {
|
|
394
609
|
if (!alias) {
|
|
395
|
-
return
|
|
610
|
+
return mapOutput3(update.result);
|
|
396
611
|
}
|
|
397
|
-
return
|
|
612
|
+
return mapOutput3(getPartialResult(alias)?.data ?? null);
|
|
613
|
+
},
|
|
614
|
+
getTaskId() {
|
|
615
|
+
return payload.taskId;
|
|
616
|
+
},
|
|
617
|
+
getTaskUrl() {
|
|
618
|
+
return payload.urls?.show ?? "";
|
|
398
619
|
}
|
|
399
620
|
});
|
|
400
621
|
}
|
|
401
622
|
if (update.type === "taskError") {
|
|
402
623
|
resultPromise.reject(new TaskError(update.error, options.taskTemplate));
|
|
403
624
|
}
|
|
404
|
-
|
|
625
|
+
const extendedUpdate = update.type === "nodeUpdate" ? { type: "nodeUpdate", data: mapOutput3(update.data) } : update;
|
|
626
|
+
taskUpdateHandlers.forEach((handler) => handler(extendedUpdate));
|
|
405
627
|
});
|
|
406
628
|
});
|
|
407
629
|
};
|
|
408
630
|
const taskIdPromise = createRemotePromise();
|
|
409
631
|
const resultPromise = createRemotePromise(startMonitoring);
|
|
410
632
|
(async () => {
|
|
411
|
-
const
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
633
|
+
const prepareResponse = await fetch(prepareUrl, {
|
|
634
|
+
method: "POST",
|
|
635
|
+
headers: {
|
|
636
|
+
Authorization: `Bearer ${token}`
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
if (!prepareResponse.ok) {
|
|
640
|
+
const error = new TaskError(await prepareResponse.text(), options.taskTemplate);
|
|
641
|
+
taskIdPromise.reject(error);
|
|
642
|
+
resultPromise.reject(error);
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
const prepareData = await prepareResponse.json();
|
|
646
|
+
const mappedParams = await mapOutput({
|
|
647
|
+
value: {
|
|
648
|
+
name: options.name,
|
|
649
|
+
input: options.input,
|
|
650
|
+
meta: options.meta
|
|
651
|
+
},
|
|
652
|
+
options: {
|
|
653
|
+
uploadUrl: prepareData.fileUrls?.uploadUrl,
|
|
654
|
+
streamUrl: prepareData.fileUrls?.streamUrl
|
|
426
655
|
}
|
|
427
|
-
};
|
|
428
|
-
await walkData({
|
|
429
|
-
input: options.input ?? null,
|
|
430
|
-
meta: options.meta ?? null,
|
|
431
|
-
name: options.name ?? null
|
|
432
656
|
});
|
|
433
|
-
|
|
434
|
-
const response = await fetch(startUrl, {
|
|
657
|
+
const finalizeResponse = await fetch(prepareData.finalizeUrl, {
|
|
435
658
|
method: "POST",
|
|
436
|
-
body:
|
|
659
|
+
body: JSON.stringify(mappedParams),
|
|
437
660
|
headers: {
|
|
438
|
-
Authorization: `Bearer ${token}
|
|
661
|
+
Authorization: `Bearer ${token}`,
|
|
662
|
+
"Content-Type": "application/json"
|
|
439
663
|
}
|
|
440
664
|
});
|
|
441
|
-
if (!
|
|
442
|
-
const error = new TaskError(await
|
|
665
|
+
if (!finalizeResponse.ok) {
|
|
666
|
+
const error = new TaskError(await prepareResponse.text(), options.taskTemplate);
|
|
443
667
|
taskIdPromise.reject(error);
|
|
444
668
|
resultPromise.reject(error);
|
|
445
669
|
return;
|
|
446
670
|
}
|
|
447
|
-
const payload = await
|
|
448
|
-
taskIdPromise.resolve(payload.
|
|
671
|
+
const payload = await finalizeResponse.json();
|
|
672
|
+
taskIdPromise.resolve(payload.taskId);
|
|
449
673
|
payloadPromise.resolve(payload);
|
|
450
674
|
if (onUpdate) {
|
|
451
675
|
taskUpdateHandlers.add(onUpdate);
|
|
452
676
|
startMonitoring();
|
|
453
677
|
}
|
|
454
678
|
})();
|
|
455
|
-
const asyncIterable =
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
taskUpdateHandlers.delete(
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
679
|
+
const asyncIterable = callbackToAsyncIterable((push, _fail, done) => {
|
|
680
|
+
taskUpdateHandlers.add(function handleUpdate(update) {
|
|
681
|
+
push(update);
|
|
682
|
+
if (update.type === "taskEnd" || update.type === "taskError") {
|
|
683
|
+
done();
|
|
684
|
+
taskUpdateHandlers.delete(handleUpdate);
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
startMonitoring();
|
|
464
688
|
});
|
|
465
689
|
return Object.assign(resultPromise.promise, asyncIterable, {
|
|
466
690
|
getTaskId() {
|
|
467
691
|
return taskIdPromise;
|
|
692
|
+
},
|
|
693
|
+
getTaskUrl() {
|
|
468
694
|
}
|
|
469
695
|
});
|
|
470
696
|
}
|
|
@@ -486,13 +712,8 @@ function watchTasks(options) {
|
|
|
486
712
|
}
|
|
487
713
|
})
|
|
488
714
|
});
|
|
489
|
-
const asyncIterable =
|
|
490
|
-
|
|
491
|
-
taskUpdateHandlers.add(push);
|
|
492
|
-
return () => {
|
|
493
|
-
taskUpdateHandlers.delete(push);
|
|
494
|
-
};
|
|
495
|
-
}
|
|
715
|
+
const asyncIterable = callbackToAsyncIterable((push) => {
|
|
716
|
+
taskUpdateHandlers.add(push);
|
|
496
717
|
});
|
|
497
718
|
const taskEvents = [
|
|
498
719
|
"taskStart",
|
|
@@ -511,7 +732,9 @@ function watchTasks(options) {
|
|
|
511
732
|
eventSource.close();
|
|
512
733
|
throw new Error("invalid update");
|
|
513
734
|
}
|
|
514
|
-
|
|
735
|
+
const update = updateResult.data;
|
|
736
|
+
const extendedUpdate = update.type === "nodeUpdate" ? { type: "nodeUpdate", data: mapOutput3(update.data) } : update;
|
|
737
|
+
taskUpdateHandlers.forEach((handler) => handler(extendedUpdate));
|
|
515
738
|
});
|
|
516
739
|
});
|
|
517
740
|
const stopWatching = () => {
|
|
@@ -526,5 +749,5 @@ export {
|
|
|
526
749
|
RequenceFile
|
|
527
750
|
};
|
|
528
751
|
|
|
529
|
-
//# debugId=
|
|
752
|
+
//# debugId=17D151A31EA3238664756E2164756E21
|
|
530
753
|
//# sourceMappingURL=index.js.map
|