From 9ff29c794e906202550dbce0e4621c02810bfa2c Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Wed, 29 Jan 2025 21:01:19 +0100 Subject: [PATCH] Add TextDecoder polyfill --- .prettierignore | 3 ++- .../bundles/bson-polyfills.ivm.bundle.js | 23 +++++++++++++++---- .../server/src/jsRunner/vm/isolated-vm.ts | 5 ++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/.prettierignore b/.prettierignore index b1ee287391..b0f9f8cdbf 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,4 +9,5 @@ packages/backend-core/coverage packages/builder/.routify packages/sdk/sdk packages/pro/coverage -**/*.ivm.bundle.js \ No newline at end of file +**/*.ivm.bundle.js +!**/bson-polyfills.ivm.bundle.js \ No newline at end of file diff --git a/packages/server/src/jsRunner/bundles/bson-polyfills.ivm.bundle.js b/packages/server/src/jsRunner/bundles/bson-polyfills.ivm.bundle.js index e8147c63da..33a3e9deaa 100644 --- a/packages/server/src/jsRunner/bundles/bson-polyfills.ivm.bundle.js +++ b/packages/server/src/jsRunner/bundles/bson-polyfills.ivm.bundle.js @@ -1,6 +1,21 @@ -function atob(...args){ - return atobCB(...args) +function atob(...args) { + return atobCB(...args) } -function btoa(...args){ - return btoaCB(...args) +function btoa(...args) { + return btoaCB(...args) +} + +class TextDecoder { + constructorArgs + + constructor(...constructorArgs) { + this.constructorArgs = constructorArgs + } + + decode(...input) { + return textDecoderCb({ + constructorArgs: this.constructorArgs, + functionArgs: input, + }) + } } diff --git a/packages/server/src/jsRunner/vm/isolated-vm.ts b/packages/server/src/jsRunner/vm/isolated-vm.ts index 65a2615ed7..4b17d52dba 100644 --- a/packages/server/src/jsRunner/vm/isolated-vm.ts +++ b/packages/server/src/jsRunner/vm/isolated-vm.ts @@ -161,6 +161,8 @@ export class IsolatedVM implements VM { const bsonSource = loadBundle(BundleType.BSON) + // "Polyfilling" text decoder and other utils. `bson.deserialize` requires decoding. We are creating a bridge function so we don't need to inject the full library + const bsonPolyfills = loadBundle(BundleType.BSON_POLYFILLS) this.addToContext({ textDecoderCb: new ivm.Callback( (args: { @@ -183,9 +185,6 @@ export class IsolatedVM implements VM { }), }) - // "Polyfilling" text decoder and other utils. `bson.deserialize` requires decoding. We are creating a bridge function so we don't need to inject the full library - const bsonPolyfills = loadBundle(BundleType.BSON_POLYFILLS) - const script = this.isolate.compileScriptSync( `${bsonPolyfills};${bsonSource}` )