diff --git a/.changeset/hungry-spoons-attack.md b/.changeset/hungry-spoons-attack.md new file mode 100644 index 0000000000..3a0b1b8304 --- /dev/null +++ b/.changeset/hungry-spoons-attack.md @@ -0,0 +1,6 @@ +--- +"@workflow/core": patch +"workflow": patch +--- + +Refactor builtin step functions to use `this` value serialization instead of explicit parameter passing. Remove unused duplicate builtins file from `@workflow/core`. diff --git a/packages/core/package.json b/packages/core/package.json index a698622340..2145ab08b8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -52,10 +52,6 @@ "types": "./dist/class-serialization.d.ts", "default": "./dist/class-serialization.js" }, - "./builtins": { - "types": "./dist/builtins.d.ts", - "default": "./dist/builtins.js" - }, "./serialization": { "types": "./dist/serialization.d.ts", "default": "./dist/serialization.js" diff --git a/packages/core/src/builtins.ts b/packages/core/src/builtins.ts deleted file mode 100644 index 56a30a1ad2..0000000000 --- a/packages/core/src/builtins.ts +++ /dev/null @@ -1,14 +0,0 @@ -export async function __builtin_response_array_buffer(res: Response) { - 'use step'; - return res.arrayBuffer(); -} - -export async function __builtin_response_json(res: Response) { - 'use step'; - return res.json(); -} - -export async function __builtin_response_text(res: Response) { - 'use step'; - return res.text(); -} diff --git a/packages/core/src/workflow.ts b/packages/core/src/workflow.ts index b84bb6e85a..5d18c085b4 100644 --- a/packages/core/src/workflow.ts +++ b/packages/core/src/workflow.ts @@ -454,29 +454,34 @@ export async function runWorkflow( blob!: () => Promise; formData!: () => Promise; - async arrayBuffer() { - return resArrayBuffer(this); - } + arrayBuffer!: () => Promise; + json!: () => Promise; + text!: () => Promise; async bytes() { - return new Uint8Array(await resArrayBuffer(this)); - } - - async json() { - return resJson(this); - } - - async text() { - return resText(this); + return new Uint8Array(await this.arrayBuffer()); } } vmGlobalThis.Request = Request; - const resJson = useStep<[any], any>('__builtin_response_json'); - const resText = useStep<[any], string>('__builtin_response_text'); - const resArrayBuffer = useStep<[any], ArrayBuffer>( - '__builtin_response_array_buffer' - ); + Object.defineProperties(Request.prototype, { + arrayBuffer: { + value: useStep<[], ArrayBuffer>('__builtin_response_array_buffer'), + writable: true, + configurable: true, + }, + json: { + value: useStep<[], any>('__builtin_response_json'), + writable: true, + configurable: true, + }, + text: { + value: useStep<[], string>('__builtin_response_text'), + writable: true, + configurable: true, + }, + }); + class Response implements globalThis.Response { type!: globalThis.Response['type']; url!: string; @@ -534,16 +539,12 @@ export async function runWorkflow( return false; } - async arrayBuffer() { - return resArrayBuffer(this); - } + arrayBuffer!: () => Promise; + json!: () => Promise; + text!: () => Promise; async bytes() { - return new Uint8Array(await resArrayBuffer(this)); - } - - async json() { - return resJson(this); + return new Uint8Array(await this.arrayBuffer()); } static json(data: any, init?: ResponseInit): Response { @@ -555,10 +556,6 @@ export async function runWorkflow( return new Response(body, { ...init, headers }); } - async text() { - return resText(this); - } - static error(): Response { ENOTSUP(); } @@ -589,6 +586,24 @@ export async function runWorkflow( } vmGlobalThis.Response = Response; + Object.defineProperties(Response.prototype, { + arrayBuffer: { + value: useStep<[], ArrayBuffer>('__builtin_response_array_buffer'), + writable: true, + configurable: true, + }, + json: { + value: useStep<[], any>('__builtin_response_json'), + writable: true, + configurable: true, + }, + text: { + value: useStep<[], string>('__builtin_response_text'), + writable: true, + configurable: true, + }, + }); + class ReadableStream implements globalThis.ReadableStream { constructor() { ENOTSUP(); diff --git a/packages/workflow/src/internal/builtins.ts b/packages/workflow/src/internal/builtins.ts index 5510c1fad0..886686e50e 100644 --- a/packages/workflow/src/internal/builtins.ts +++ b/packages/workflow/src/internal/builtins.ts @@ -4,17 +4,19 @@ * alongside user defined steps. They are used internally by the runtime */ -export async function __builtin_response_array_buffer(res: Response) { +export async function __builtin_response_array_buffer( + this: Request | Response +) { 'use step'; - return res.arrayBuffer(); + return this.arrayBuffer(); } -export async function __builtin_response_json(res: Response) { +export async function __builtin_response_json(this: Request | Response) { 'use step'; - return res.json(); + return this.json(); } -export async function __builtin_response_text(res: Response) { +export async function __builtin_response_text(this: Request | Response) { 'use step'; - return res.text(); + return this.text(); }