@workflow/world-testing 4.0.1-beta.20 → 4.0.1-beta.21
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/dist/.well-known/workflow/v1/flow.js +4026 -188
- package/dist/.well-known/workflow/v1/flow.js.map +1 -1
- package/dist/.well-known/workflow/v1/manifest.debug.json +46 -8
- package/dist/.well-known/workflow/v1/step.js +20455 -20434
- package/dist/.well-known/workflow/v1/step.js.map +1 -1
- package/dist/src/addition.d.mts.map +1 -1
- package/dist/src/addition.mjs +5 -1
- package/dist/src/addition.mjs.map +1 -1
- package/dist/src/errors.d.mts +2 -0
- package/dist/src/errors.d.mts.map +1 -0
- package/dist/src/errors.mjs +31 -0
- package/dist/src/errors.mjs.map +1 -0
- package/dist/src/hooks.d.mts +2 -0
- package/dist/src/hooks.d.mts.map +1 -0
- package/dist/src/hooks.mjs +74 -0
- package/dist/src/hooks.mjs.map +1 -0
- package/dist/src/index.d.mts.map +1 -1
- package/dist/src/index.mjs +6 -0
- package/dist/src/index.mjs.map +1 -1
- package/dist/src/jsonlines.d.mts +2 -0
- package/dist/src/jsonlines.d.mts.map +1 -0
- package/dist/src/jsonlines.mjs +32 -0
- package/dist/src/jsonlines.mjs.map +1 -0
- package/dist/src/null-byte.d.mts +2 -0
- package/dist/src/null-byte.d.mts.map +1 -0
- package/dist/src/null-byte.mjs +20 -0
- package/dist/src/null-byte.mjs.map +1 -0
- package/dist/src/server.mjs +9 -1
- package/dist/src/server.mjs.map +1 -1
- package/dist/src/util.d.mts +3 -4
- package/dist/src/util.d.mts.map +1 -1
- package/dist/src/util.mjs +26 -4
- package/dist/src/util.mjs.map +1 -1
- package/dist/workflows/hooks.d.ts +17 -0
- package/dist/workflows/hooks.d.ts.map +1 -0
- package/dist/workflows/hooks.js +70 -0
- package/dist/workflows/hooks.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addition.d.mts","sourceRoot":"","sources":["../../src/addition.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addition.d.mts","sourceRoot":"","sources":["../../src/addition.mts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,QA0BrC"}
|
package/dist/src/addition.mjs
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { expect, test, vi } from 'vitest';
|
|
2
|
+
import { hydrateWorkflowReturnValue } from 'workflow/internal/serialization';
|
|
2
3
|
import { createFetcher, startServer } from './util.mjs';
|
|
3
4
|
export function addition(world) {
|
|
4
5
|
test('runs an addition', { timeout: 12_000 }, async () => {
|
|
5
6
|
const server = await startServer({ world }).then(createFetcher);
|
|
6
7
|
const result = await server.invoke('workflows/addition.ts', 'addition', [1, 2]);
|
|
7
8
|
expect(result.runId).toMatch(/^wrun_.+/);
|
|
8
|
-
await vi.waitFor(async () => {
|
|
9
|
+
const run = await vi.waitFor(async () => {
|
|
9
10
|
const run = await server.getRun(result.runId);
|
|
10
11
|
expect(run).toMatchObject({
|
|
11
12
|
status: 'completed',
|
|
12
13
|
output: [3],
|
|
13
14
|
});
|
|
15
|
+
return run;
|
|
14
16
|
}, {
|
|
15
17
|
interval: 200,
|
|
16
18
|
timeout: 10_000,
|
|
17
19
|
});
|
|
20
|
+
const output = await hydrateWorkflowReturnValue(run.output, [], run.runId);
|
|
21
|
+
expect(output).toEqual(3);
|
|
18
22
|
});
|
|
19
23
|
}
|
|
20
24
|
//# sourceMappingURL=addition.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addition.mjs","sourceRoot":"","sources":["../../src/addition.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,uBAAuB,EACvB,UAAU,EACV,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"addition.mjs","sourceRoot":"","sources":["../../src/addition.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,uBAAuB,EACvB,UAAU,EACV,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAsB;gBAC7C,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,CAAC,CAAC,CAAC;aACZ,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.mts","sourceRoot":"","sources":["../../src/errors.mts"],"names":[],"mappings":"AAIA,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,QAiCnC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { expect, test, vi } from 'vitest';
|
|
2
|
+
import { hydrateWorkflowReturnValue } from 'workflow/internal/serialization';
|
|
3
|
+
import { createFetcher, startServer } from './util.mjs';
|
|
4
|
+
export function errors(world) {
|
|
5
|
+
test('retriable and fatal errors', { timeout: 59_000 }, async () => {
|
|
6
|
+
const server = await startServer({ world }).then(createFetcher);
|
|
7
|
+
const result = await server.invoke('workflows/retriable-and-fatal.ts', 'retryableAndFatalErrorWorkflow', []);
|
|
8
|
+
expect(result.runId).toMatch(/^wrun_.+/);
|
|
9
|
+
const run = await vi.waitFor(async () => {
|
|
10
|
+
const run = await server.getRun(result.runId);
|
|
11
|
+
expect(run).toMatchObject({
|
|
12
|
+
status: 'completed',
|
|
13
|
+
});
|
|
14
|
+
return run;
|
|
15
|
+
}, {
|
|
16
|
+
interval: 200,
|
|
17
|
+
timeout: 50_000,
|
|
18
|
+
});
|
|
19
|
+
const output = await hydrateWorkflowReturnValue(run.output, [], run.runId);
|
|
20
|
+
expect(output).toEqual({
|
|
21
|
+
gotFatalError: true,
|
|
22
|
+
retryableResult: {
|
|
23
|
+
attempt: 2,
|
|
24
|
+
duration: expect.any(Number),
|
|
25
|
+
stepStartedAt: expect.any(Date),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
expect(output.retryableResult.duration).toBeGreaterThanOrEqual(2000);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../../src/errors.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,kCAAkC,EAClC,gCAAgC,EAChC,EAAE,CACH,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAsB;gBAC7C,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE;gBACf,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC5B,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;aAChC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.mts","sourceRoot":"","sources":["../../src/hooks.mts"],"names":[],"mappings":"AAMA,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,QAkFlC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { expect, test, vi } from 'vitest';
|
|
2
|
+
import { hydrateWorkflowReturnValue } from 'workflow/internal/serialization';
|
|
3
|
+
import { jsonlines } from './jsonlines.mjs';
|
|
4
|
+
import { createFetcher, startServer } from './util.mjs';
|
|
5
|
+
export function hooks(world) {
|
|
6
|
+
test('hooks', { timeout: 60_000 }, async () => {
|
|
7
|
+
const server = await startServer({ world }).then(createFetcher);
|
|
8
|
+
const token = Date.now().toString(36);
|
|
9
|
+
const customData = `my-custom-data-${token}`;
|
|
10
|
+
const result = await server.invoke('workflows/hooks.ts', 'collectWithHook', [token, customData]);
|
|
11
|
+
expect(result.runId).toMatch(/^wrun_.+/);
|
|
12
|
+
const readable = await server.getReadable(result.runId);
|
|
13
|
+
const events = jsonlines(readable);
|
|
14
|
+
const hookCreated = Promise.withResolvers();
|
|
15
|
+
const hookResumedEvents = [];
|
|
16
|
+
(async () => {
|
|
17
|
+
for await (const obj of events) {
|
|
18
|
+
if (obj?.event === 'hookCreated') {
|
|
19
|
+
hookCreated.resolve();
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (obj?.event === 'hookResumed') {
|
|
23
|
+
hookResumedEvents.push(obj.payload);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
console.log('unhandled event', obj);
|
|
27
|
+
}
|
|
28
|
+
})().catch(() => {
|
|
29
|
+
// ignore errors for reading stream
|
|
30
|
+
});
|
|
31
|
+
await hookCreated.promise;
|
|
32
|
+
(async () => {
|
|
33
|
+
await server.resumeHook(token, {
|
|
34
|
+
data: 'first payload',
|
|
35
|
+
});
|
|
36
|
+
await server.resumeHook(token, {
|
|
37
|
+
data: 'second payload',
|
|
38
|
+
});
|
|
39
|
+
await server.resumeHook(token, {
|
|
40
|
+
data: 'third payload',
|
|
41
|
+
done: true,
|
|
42
|
+
});
|
|
43
|
+
})();
|
|
44
|
+
const run = await vi.waitFor(async () => {
|
|
45
|
+
const run = await server.getRun(result.runId);
|
|
46
|
+
expect(run).toMatchObject({
|
|
47
|
+
status: 'completed',
|
|
48
|
+
});
|
|
49
|
+
return run;
|
|
50
|
+
}, {
|
|
51
|
+
interval: 200,
|
|
52
|
+
timeout: 59_000,
|
|
53
|
+
});
|
|
54
|
+
const output = await hydrateWorkflowReturnValue(run.output, [], run.runId);
|
|
55
|
+
expect(output).toEqual({
|
|
56
|
+
collected: [
|
|
57
|
+
{
|
|
58
|
+
data: 'first payload',
|
|
59
|
+
metadata: { customData },
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
data: 'second payload',
|
|
63
|
+
metadata: { customData },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
data: 'third payload',
|
|
67
|
+
metadata: { customData },
|
|
68
|
+
done: true,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=hooks.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.mjs","sourceRoot":"","sources":["../../src/hooks.mts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"AAMA,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,QAM9C"}
|
package/dist/src/index.mjs
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { addition } from './addition.mjs';
|
|
2
|
+
import { errors } from './errors.mjs';
|
|
3
|
+
import { hooks } from './hooks.mjs';
|
|
2
4
|
import { idempotency } from './idempotency.mjs';
|
|
5
|
+
import { nullByte } from './null-byte.mjs';
|
|
3
6
|
export function createTestSuite(pkgName) {
|
|
4
7
|
addition(pkgName);
|
|
5
8
|
idempotency(pkgName);
|
|
9
|
+
hooks(pkgName);
|
|
10
|
+
nullByte(pkgName);
|
|
11
|
+
errors(pkgName);
|
|
6
12
|
}
|
|
7
13
|
//# sourceMappingURL=index.mjs.map
|
package/dist/src/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonlines.d.mts","sourceRoot":"","sources":["../../src/jsonlines.mts"],"names":[],"mappings":"AAAA,wBAAuB,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,sCAiCpE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export async function* jsonlines(readable) {
|
|
2
|
+
const decoder = new TextDecoder();
|
|
3
|
+
const reader = readable.getReader();
|
|
4
|
+
let buffer = '';
|
|
5
|
+
const bufferedLines = () => {
|
|
6
|
+
const lines = buffer.split('\n');
|
|
7
|
+
buffer = lines.pop() || '';
|
|
8
|
+
return lines;
|
|
9
|
+
};
|
|
10
|
+
async function* bufferedObjects() {
|
|
11
|
+
const lines = bufferedLines();
|
|
12
|
+
for (const line of lines) {
|
|
13
|
+
try {
|
|
14
|
+
yield JSON.parse(line);
|
|
15
|
+
}
|
|
16
|
+
catch { }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
while (true) {
|
|
20
|
+
const read = await reader.read();
|
|
21
|
+
if (read.value) {
|
|
22
|
+
const text = decoder.decode(read.value, { stream: true });
|
|
23
|
+
buffer += text;
|
|
24
|
+
yield* bufferedObjects();
|
|
25
|
+
}
|
|
26
|
+
if (read.done) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
yield* bufferedObjects();
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=jsonlines.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonlines.mjs","sourceRoot":"","sources":["../../src/jsonlines.mts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,QAAoC;IACnE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,SAAS,CAAC,CAAC,eAAe;QAC7B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,IAAI,IAAI,CAAC;YACf,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-byte.d.mts","sourceRoot":"","sources":["../../src/null-byte.mts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,QAuBrC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { expect, test, vi } from 'vitest';
|
|
2
|
+
import { createFetcher, startServer } from './util.mjs';
|
|
3
|
+
export function nullByte(world) {
|
|
4
|
+
test('supports null bytes in step results', { timeout: 12_000 }, async () => {
|
|
5
|
+
const server = await startServer({ world }).then(createFetcher);
|
|
6
|
+
const result = await server.invoke('workflows/null-byte.ts', 'nullByteWorkflow', []);
|
|
7
|
+
expect(result.runId).toMatch(/^wrun_.+/);
|
|
8
|
+
await vi.waitFor(async () => {
|
|
9
|
+
const run = await server.getRun(result.runId);
|
|
10
|
+
expect(run).toMatchObject({
|
|
11
|
+
status: 'completed',
|
|
12
|
+
output: ['null byte \0'],
|
|
13
|
+
});
|
|
14
|
+
}, {
|
|
15
|
+
interval: 200,
|
|
16
|
+
timeout: 10_000,
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=null-byte.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"null-byte.mjs","sourceRoot":"","sources":["../../src/null-byte.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,wBAAwB,EACxB,kBAAkB,EAClB,EAAE,CACH,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,OAAO,CACd,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAsB;gBAC7C,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,CAAC,cAAc,CAAC;aACzB,CAAC,CAAC;QACL,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/server.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import { serve } from '@hono/node-server';
|
|
3
3
|
import { Hono } from 'hono';
|
|
4
|
-
import { getRun, start } from 'workflow/api';
|
|
4
|
+
import { getHookByToken, getRun, resumeHook, start } from 'workflow/api';
|
|
5
5
|
import { getWorld } from 'workflow/runtime';
|
|
6
6
|
import * as z from 'zod';
|
|
7
7
|
import flow from '../.well-known/workflow/v1/flow.js';
|
|
@@ -41,6 +41,14 @@ const app = new Hono()
|
|
|
41
41
|
const json = await ctx.req.json().then(Invoke.parse);
|
|
42
42
|
const handler = await start(json.workflow, json.args);
|
|
43
43
|
return ctx.json({ runId: handler.runId });
|
|
44
|
+
})
|
|
45
|
+
.post('/hooks/:token', async (ctx) => {
|
|
46
|
+
const hook = await getHookByToken(ctx.req.param('token'));
|
|
47
|
+
const { runId } = await resumeHook(hook.token, {
|
|
48
|
+
...(await ctx.req.json()),
|
|
49
|
+
metadata: hook.metadata,
|
|
50
|
+
});
|
|
51
|
+
return ctx.json({ runId, hookId: hook.hookId });
|
|
44
52
|
})
|
|
45
53
|
.get('/runs/:runId', async (ctx) => {
|
|
46
54
|
return ctx.json(await getWorld().runs.get(ctx.req.param('runId')));
|
package/dist/src/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","sourceRoot":"","sources":["../../src/server.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"server.mjs","sourceRoot":"","sources":["../../src/server.mts"],"names":[],"mappings":"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"}
|
package/dist/src/util.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TypedHook } from 'workflow';
|
|
1
2
|
import * as z from 'zod';
|
|
2
3
|
import type manifest from '../.well-known/workflow/v1/manifest.debug.json';
|
|
3
4
|
export declare const Control: z.ZodObject<{
|
|
@@ -9,10 +10,6 @@ export declare const Control: z.ZodObject<{
|
|
|
9
10
|
type Control = z.infer<typeof Control>;
|
|
10
11
|
type Files = keyof typeof manifest.workflows;
|
|
11
12
|
type Workflows<F extends Files> = keyof (typeof manifest.workflows)[F];
|
|
12
|
-
export declare const Worlds: {
|
|
13
|
-
embedded: string;
|
|
14
|
-
postgres: string;
|
|
15
|
-
};
|
|
16
13
|
export declare function startServer(opts: {
|
|
17
14
|
world: string;
|
|
18
15
|
}): Promise<{
|
|
@@ -82,6 +79,8 @@ export declare function createFetcher(control: Control): {
|
|
|
82
79
|
executionContext?: Record<string, any> | undefined;
|
|
83
80
|
startedAt?: Date | undefined;
|
|
84
81
|
}>;
|
|
82
|
+
getReadable(id: string): Promise<ReadableStream<Uint8Array>>;
|
|
83
|
+
resumeHook<T extends TypedHook<any, any>>(token: string, payload: Omit<NoInfer<TypedHook.Input<T>>, "metadata">): Promise<void>;
|
|
85
84
|
};
|
|
86
85
|
export {};
|
|
87
86
|
//# sourceMappingURL=util.d.mts.map
|
package/dist/src/util.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,gDAAgD,CAAC;AAE3E,eAAO,MAAM,OAAO;;;;;iBAKlB,CAAC;AACH,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAEvC,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC7C,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,
|
|
1
|
+
{"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,gDAAgD,CAAC;AAE3E,eAAO,MAAM,OAAO;;;;;iBAKlB,CAAC;AACH,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAEvC,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC7C,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;GA4CxD;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO;WAE7B,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,QAC5C,CAAC,YACG,CAAC,QACL,OAAO,EAAE;;;eAeA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAOD,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;eAcjD,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,SACrC,MAAM,WACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;EAoB3D"}
|
package/dist/src/util.mjs
CHANGED
|
@@ -12,10 +12,6 @@ export const Control = z.object({
|
|
|
12
12
|
port: z.number(),
|
|
13
13
|
}),
|
|
14
14
|
});
|
|
15
|
-
export const Worlds = {
|
|
16
|
-
embedded: 'embedded',
|
|
17
|
-
postgres: '@workflow/world-postgres',
|
|
18
|
-
};
|
|
19
15
|
export async function startServer(opts) {
|
|
20
16
|
let serverPath = new URL('./server.mts', import.meta.url);
|
|
21
17
|
if (!existsSync(serverPath)) {
|
|
@@ -66,6 +62,9 @@ export function createFetcher(control) {
|
|
|
66
62
|
body: JSON.stringify({ file, workflow, args }),
|
|
67
63
|
});
|
|
68
64
|
const data = await x.json().then(Invoke.parse);
|
|
65
|
+
onTestFailed(() => {
|
|
66
|
+
console.error('Workflow run:', data.runId);
|
|
67
|
+
});
|
|
69
68
|
return data;
|
|
70
69
|
},
|
|
71
70
|
async getRun(id) {
|
|
@@ -73,6 +72,29 @@ export function createFetcher(control) {
|
|
|
73
72
|
const data = await x.json();
|
|
74
73
|
return WorkflowRunSchema.parseAsync(data);
|
|
75
74
|
},
|
|
75
|
+
async getReadable(id) {
|
|
76
|
+
const x = await fetch(`http://localhost:${control.info.port}/runs/${encodeURIComponent(id)}/readable`);
|
|
77
|
+
if (!x.ok) {
|
|
78
|
+
throw new Error(`Failed to get readable stream: ${x.status} ${x.statusText}`);
|
|
79
|
+
}
|
|
80
|
+
if (!x.body) {
|
|
81
|
+
throw new Error('No body in response');
|
|
82
|
+
}
|
|
83
|
+
return x.body;
|
|
84
|
+
},
|
|
85
|
+
async resumeHook(token, payload) {
|
|
86
|
+
const res = await fetch(`http://localhost:${control.info.port}/hooks/${token}`, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: {
|
|
89
|
+
'content-type': 'application/json',
|
|
90
|
+
},
|
|
91
|
+
body: JSON.stringify(payload),
|
|
92
|
+
});
|
|
93
|
+
res.arrayBuffer().catch(() => { }); // Drain the body to avoid resource leaks
|
|
94
|
+
if (!res.ok) {
|
|
95
|
+
throw new Error(`Failed to resume hook: ${res.status} ${res.statusText}`);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
76
98
|
};
|
|
77
99
|
}
|
|
78
100
|
//# sourceMappingURL=util.mjs.map
|
package/dist/src/util.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.mjs","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"util.mjs","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const Hook: import("workflow", { with: { "resolution-mode": "import" } }).TypedHook<{
|
|
2
|
+
data: string;
|
|
3
|
+
metadata: unknown;
|
|
4
|
+
done?: boolean | undefined;
|
|
5
|
+
}, {
|
|
6
|
+
data: string;
|
|
7
|
+
metadata: unknown;
|
|
8
|
+
done?: boolean | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function collectWithHook(token: string, customData: string): Promise<{
|
|
11
|
+
collected: {
|
|
12
|
+
data: string;
|
|
13
|
+
metadata: unknown;
|
|
14
|
+
done?: boolean | undefined;
|
|
15
|
+
}[];
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../workflows/hooks.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,IAAI;;;;;;;;EAMf,CAAC;AAEH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;;;;;;GActE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Hook = void 0;
|
|
37
|
+
exports.collectWithHook = collectWithHook;
|
|
38
|
+
const workflow_1 = require("workflow");
|
|
39
|
+
const z = __importStar(require("zod"));
|
|
40
|
+
exports.Hook = (0, workflow_1.defineHook)({
|
|
41
|
+
schema: z.object({
|
|
42
|
+
data: z.string(),
|
|
43
|
+
done: z.boolean().optional(),
|
|
44
|
+
metadata: z.unknown(),
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
async function collectWithHook(token, customData) {
|
|
48
|
+
'use workflow';
|
|
49
|
+
const hook = exports.Hook.create({ token, metadata: { customData } });
|
|
50
|
+
const collected = [];
|
|
51
|
+
const wf = (0, workflow_1.getWritable)();
|
|
52
|
+
await writeEvent(wf, 'hookCreated');
|
|
53
|
+
for await (const event of hook) {
|
|
54
|
+
await writeEvent(wf, 'hookResumed', event);
|
|
55
|
+
collected.push(event);
|
|
56
|
+
if (event.done)
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
return { collected };
|
|
60
|
+
}
|
|
61
|
+
async function writeEvent(writable, event, payload) {
|
|
62
|
+
'use step';
|
|
63
|
+
console.log('writing event', event, payload);
|
|
64
|
+
const writer = writable.getWriter();
|
|
65
|
+
await writer.write(new TextEncoder().encode(`${JSON.stringify({
|
|
66
|
+
event,
|
|
67
|
+
payload,
|
|
68
|
+
})}\r\n`));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../workflows/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,0CAcC;AAzBD,uCAAmD;AACnD,uCAAyB;AAEZ,QAAA,IAAI,GAAG,IAAA,qBAAU,EAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;KACtB,CAAC;CACH,CAAC,CAAC;AAEI,KAAK,UAAU,eAAe,CAAC,KAAa,EAAE,UAAkB;IACrE,cAAc,CAAC;IAEf,MAAM,IAAI,GAAG,YAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAA6C,EAAE,CAAC;IAC/D,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;IACzB,MAAM,UAAU,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IACpC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,UAAU,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM;IACxB,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,QAAwB,EACxB,KAAa,EACb,OAAiB;IAEjB,UAAU,CAAC;IAEX,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,MAAM,MAAM,CAAC,KAAK,CAChB,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,KAAK;QACL,OAAO;KACR,CAAC,MAAM,CACT,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/world-testing",
|
|
3
|
-
"version": "4.0.1-beta.
|
|
3
|
+
"version": "4.0.1-beta.21",
|
|
4
4
|
"description": "Testing utilities and World implementation for Workflow DevKit",
|
|
5
5
|
"main": "dist/src/index.mjs",
|
|
6
6
|
"files": [
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"hono": "4.9.10",
|
|
22
22
|
"jsonlines": "0.1.1",
|
|
23
23
|
"zod": "4.1.11",
|
|
24
|
-
"@workflow/cli": "4.0.1-beta.19",
|
|
25
24
|
"@workflow/world": "4.0.1-beta.6",
|
|
26
|
-
"workflow": "4.0.1-beta.
|
|
25
|
+
"@workflow/cli": "4.0.1-beta.20",
|
|
26
|
+
"workflow": "4.0.1-beta.20"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "22.19.0",
|