Skip to content

Fix cloudflare workers #437

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ jobs:
}
set "@restatedev/restate-sdk-core"
set "@restatedev/restate-sdk"
set "@restatedev/restate-sdk-cloudflare-workers"
set "@restatedev/restate-sdk-clients"
npm --workspaces update
# We use dist-tag dev for the snapshot releases, see https://docs.npmjs.com/cli/v9/commands/npm-dist-tag for more info
Expand Down
1 change: 1 addition & 0 deletions .tools/build_core.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ PROJECT_ROOT="$(dirname "$SELF_PATH")/.."
pushd $PROJECT_ROOT/sdk-shared-core-wasm-bindings
wasm-pack build --target web
npx wasm-pack-inline ./pkg --dir ../packages/restate-sdk/src/endpoint/handlers/vm --name sdk_shared_core_wasm_bindings
wasm-pack build --target bundler -d ../packages/restate-sdk-cloudflare-workers/patches/vm
popd
19 changes: 19 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"workspaces": [
"packages/restate-sdk-core",
"packages/restate-sdk",
"packages/restate-sdk-cloudflare-workers",
"packages/restate-sdk-clients",
"packages/restate-sdk-examples",
"packages/restate-e2e-services"
Expand All @@ -29,7 +30,7 @@
"format": "npm run format -ws --if-present",
"format-check": "npm run format-check -ws --if-present",
"verify": "npm run verify -ws --if-present",
"clean": "rm -rf packages/restate-sdk/dist && rm -rf packages/restate-sdk-examples/dist && rm -rf packages/restate-sdk-ingress/dist && rm -rf packages/restate-e2e-services/dist && rm -rf packages/restate-sdk-core/dist"
"clean": "rm -rf packages/restate-sdk/dist && rm -rf packages/restate-sdk-cloudflare-workers/dist && rm -rf packages/restate-sdk-examples/dist && rm -rf packages/restate-sdk-ingress/dist && rm -rf packages/restate-e2e-services/dist && rm -rf packages/restate-sdk-core/dist"
},
"devDependencies": {
"@arethetypeswrong/cli": "^0.15.3",
Expand Down
82 changes: 82 additions & 0 deletions packages/restate-sdk-cloudflare-workers/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
{
"name": "@restatedev/restate-sdk-cloudflare-workers",
"version": "1.3.1",
"description": "Typescript SDK for Restate",
"author": "Restate Developers",
"license": "MIT",
"email": "[email protected]",
"homepage": "https://github.com/restatedev/sdk-typescript#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/restatedev/sdk-typescript.git"
},
"bugs": {
"url": "https://github.com/restatedev/sdk-typescript/issues"
},
"type": "module",
"sideEffects": false,
"main": "./dist/cjs/src/public_api.js",
"module": "./dist/esm/src/public_api.js",
"exports": {
".": {
"import": {
"types": "./dist/esm/src/public_api.d.ts",
"default": "./dist/esm/src/public_api.js"
},
"require": {
"types": "./dist/cjs/src/public_api.d.ts",
"default": "./dist/cjs/src/public_api.js"
}
},
"./fetch": {
"import": {
"types": "./dist/esm/src/fetch.d.ts",
"default": "./dist/esm/src/fetch.js"
},
"require": {
"types": "./dist/cjs/src/fetch.d.ts",
"default": "./dist/cjs/src/fetch.js"
}
},
"./lambda": {
"import": {
"types": "./dist/esm/src/lambda.d.ts",
"default": "./dist/esm/src/lambda.js"
},
"require": {
"types": "./dist/cjs/src/lambda.d.ts",
"default": "./dist/cjs/src/lambda.js"
}
}
},
"typesVersions": {
"*": {
"fetch": [
"dist/cjs/src/fetch.d.ts"
],
"lambda": [
"dist/cjs/src/lambda.d.ts"
]
}
},
"types": "./dist/cjs/src/public_api.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "./patch_sdk_cf_workers.sh",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can this be under ./scripts/ ?

"release": "release-it"
},
"dependencies": {
"@restatedev/restate-sdk-core": "^1.3.1"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.115"
},
"engines": {
"node": ">= 18.13"
},
"publishConfig": {
"@restatedev:registry": "https://registry.npmjs.org"
}
}
19 changes: 19 additions & 0 deletions packages/restate-sdk-cloudflare-workers/patch_sdk_cf_workers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

if [[ ! -d ../restate-sdk/dist ]]; then
echo "ERROR - You need to build the restate-sdk module first!"
exit 1
fi

cp -r ../restate-sdk/dist .
rm -r dist/cjs

# Copy fetch.js
cp patches/fetch.js dist/esm/src/fetch.js

# Copy vm
rm -r dist/esm/src/endpoint/handlers/vm
cp -r patches/vm dist/esm/src/endpoint/handlers

# Copy vm entrypoint
cp patches/sdk_shared_core_wasm_bindings.js dist/esm/src/endpoint/handlers/vm
23 changes: 23 additions & 0 deletions packages/restate-sdk-cloudflare-workers/patches/fetch.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import * as imports from "./sdk_shared_core_wasm_bindings_bg.js";

// switch between both syntax for node and for workerd
import wkmod from "./sdk_shared_core_wasm_bindings_bg.wasm";

const instance = new WebAssembly.Instance(wkmod, {
"./sdk_shared_core_wasm_bindings_bg.js": imports,
});
imports.__wbg_set_wasm(instance.exports);

export * from "./sdk_shared_core_wasm_bindings_bg.js";

instance.exports.__wbindgen_start();

export function cloudflareWorkersBundlerPatch() {
// This is the result of many hours of debugging.
// The patch described here https://developers.cloudflare.com/workers/languages/rust/#javascript-plumbing-wasm-bindgen
// won't "just work", because the CF worker bundler has some bug that will eliminate this file.
// To prevent the elimination, we call this empty function from the fetch.js file, which is the user entrypoint of the SDK.
}
Loading