diff --git a/apps/compose/Makefile b/apps/compose/Makefile index ddcebab..09f26ef 100644 --- a/apps/compose/Makefile +++ b/apps/compose/Makefile @@ -1,7 +1,7 @@ SHELL:=/usr/bin/env bash ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) -SERVER_COMPONENT_NAME := server.component.wasm -GO_COMPONENT_NAME := add.wasm +SERVER_COMPONENT_NAME := frontend.wasm +GO_COMPONENT_NAME := service.wasm SERVER_COMPONENT_PATH := $(ROOT_DIR)/app-js/$(SERVER_COMPONENT_NAME) GO_COMPONENT_PATH := $(ROOT_DIR)/service-go/$(GO_COMPONENT_NAME) COMPOSED_COMPONENT_PATH := $(ROOT_DIR)/composed.wasm @@ -19,23 +19,23 @@ build: build-js build-go build-compose ## Run all build steps. .PHONY: build-js build-js: ## Build the JavaScript component. $(info "Building JavaScript Component...") - @cd "$(ROOT_DIR)/app-js" && npm install && npm run build + @cd "$(ROOT_DIR)/app-js" && npm install && COMPONENT_NAME=frontend.wasm npm run build .PHONY: build-go build-go: ## Build the Go component. $(info "Building Golang Component...") - @cd $(ROOT_DIR)/service-go && go generate && tinygo build -target=wasip2 -o add.wasm --wit-package ./wit --wit-world adder service.go + @cd $(ROOT_DIR)/service-go && go generate && tinygo build -target=wasip2 -o service.wasm --wit-package ./wit --wit-world backend service.go .PHONY: build-compose build-compose: ## Compose the microservice app with the constituent components. $(info "Fusing components together with wac...") # @wac plug --plug $(GO_COMPONENT_PATH) -o composed.wasm $(SERVER_COMPONENT_PATH) - wac compose --dep example:math=$(GO_COMPONENT_PATH) --dep example:server=$(SERVER_COMPONENT_PATH) -o composed.wasm compose.wac + wac compose --dep example:service=$(GO_COMPONENT_PATH) --dep example:server=$(SERVER_COMPONENT_PATH) -o composed.wasm compose.wac .PHONY: run run: ## Run the microservice app after build. $(info "Running Component Application Using Wasmtime...") - wasmtime serve -S cli $(COMPOSED_COMPONENT_PATH) + wasmtime serve -S cli --env OPENAI_API_KEY="$${OPENAI_API_KEY}" $(COMPOSED_COMPONENT_PATH) .PHONY: build-and-run build-and-run: build run ## Build and run the microservice app. diff --git a/apps/compose/app-js/.gitignore b/apps/compose/app-js/.gitignore new file mode 100644 index 0000000..9b1c8b1 --- /dev/null +++ b/apps/compose/app-js/.gitignore @@ -0,0 +1 @@ +/dist diff --git a/apps/compose/app-js/componentize.js b/apps/compose/app-js/componentize.js index f075603..fbb92af 100644 --- a/apps/compose/app-js/componentize.js +++ b/apps/compose/app-js/componentize.js @@ -6,10 +6,11 @@ import { componentize } from "@bytecodealliance/componentize-js"; // AoT compilation makes use of weval (https://github.com/bytecodealliance/weval) const enableAot = process.env.ENABLE_AOT == "1"; -const jsSource = await readFile("server.js", "utf8"); +const jsSource = await readFile("./dist/index.js", "utf8"); const { component } = await componentize(jsSource, { witPath: resolve("wit"), + debug: true, enableAot, }); diff --git a/apps/compose/app-js/package-lock.json b/apps/compose/app-js/package-lock.json index 7deebb2..12a76e6 100644 --- a/apps/compose/app-js/package-lock.json +++ b/apps/compose/app-js/package-lock.json @@ -9,7 +9,11 @@ }, "devDependencies": { "@bytecodealliance/componentize-js": "*", - "@bytecodealliance/jco": "*" + "@bytecodealliance/jco": "*", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-node-resolve": "^16.0.1", + "rollup": "^4.37.0", + "rollup-plugin-polyfill-node": "^0.13.0" } }, "node_modules/@bytecodealliance/componentize-js": { @@ -629,6 +633,384 @@ "@tybys/wasm-util": "^0.9.0" } }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz", + "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", + "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", + "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", + "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", + "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", + "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", + "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", + "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", + "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", + "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", + "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", + "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", + "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", + "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", + "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", + "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", + "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", + "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", + "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", + "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", + "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@tybys/wasm-util": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", @@ -640,6 +1022,20 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -851,6 +1247,13 @@ "node": ">=18" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -961,6 +1364,16 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/emoji-regex": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", @@ -985,6 +1398,13 @@ "dev": true, "license": "MIT" }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -995,6 +1415,21 @@ "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", @@ -1012,6 +1447,31 @@ "dev": true, "license": "MIT" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-east-asian-width": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", @@ -1046,6 +1506,19 @@ "dev": true, "license": "ISC" }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -1074,6 +1547,22 @@ "dev": true, "license": "ISC" }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -1087,6 +1576,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -1094,6 +1590,16 @@ "dev": true, "license": "MIT" }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -1160,6 +1666,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -1272,6 +1788,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -1279,6 +1802,19 @@ "dev": true, "license": "MIT" }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -1342,6 +1878,27 @@ "dev": true, "license": "MIT" }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -1359,6 +1916,59 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rollup": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", + "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.37.0", + "@rollup/rollup-android-arm64": "4.37.0", + "@rollup/rollup-darwin-arm64": "4.37.0", + "@rollup/rollup-darwin-x64": "4.37.0", + "@rollup/rollup-freebsd-arm64": "4.37.0", + "@rollup/rollup-freebsd-x64": "4.37.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", + "@rollup/rollup-linux-arm-musleabihf": "4.37.0", + "@rollup/rollup-linux-arm64-gnu": "4.37.0", + "@rollup/rollup-linux-arm64-musl": "4.37.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", + "@rollup/rollup-linux-riscv64-gnu": "4.37.0", + "@rollup/rollup-linux-riscv64-musl": "4.37.0", + "@rollup/rollup-linux-s390x-gnu": "4.37.0", + "@rollup/rollup-linux-x64-gnu": "4.37.0", + "@rollup/rollup-linux-x64-musl": "4.37.0", + "@rollup/rollup-win32-arm64-msvc": "4.37.0", + "@rollup/rollup-win32-ia32-msvc": "4.37.0", + "@rollup/rollup-win32-x64-msvc": "4.37.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-polyfill-node": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.13.0.tgz", + "integrity": "sha512-FYEvpCaD5jGtyBuBFcQImEGmTxDTPbiHjJdrYIp+mFIwgXiXabxvKUK7ZT9P31ozu2Tqm9llYQMRWsfvTMTAOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-inject": "^5.0.4" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1509,6 +2119,19 @@ "is-natural-number": "^4.0.1" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", diff --git a/apps/compose/app-js/package.json b/apps/compose/app-js/package.json index 041d6c5..aecd084 100644 --- a/apps/compose/app-js/package.json +++ b/apps/compose/app-js/package.json @@ -2,10 +2,16 @@ "type": "module", "devDependencies": { "@bytecodealliance/componentize-js": "*", - "@bytecodealliance/jco": "*" + "@bytecodealliance/jco": "*", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-node-resolve": "^16.0.1", + "rollup": "^4.37.0", + "rollup-plugin-polyfill-node": "^0.13.0" }, "scripts": { - "build": "wkg wit fetch && node componentize.js" + "build:jco": "jco types -h ./wit", + "build:rollup": "rollup -c", + "build": "wkg wit fetch && npm run build:rollup && node componentize.js" }, "dependencies": { "itty-router": "^5.0.18" diff --git a/apps/compose/app-js/rollup.config.js b/apps/compose/app-js/rollup.config.js new file mode 100644 index 0000000..ea7f2cc --- /dev/null +++ b/apps/compose/app-js/rollup.config.js @@ -0,0 +1,11 @@ +import { nodeResolve } from "@rollup/plugin-node-resolve"; +import commonjs from "@rollup/plugin-commonjs"; + +export default { + input: ["src/server.js"], + output: { + file: "dist/index.js", + format: "esm", + }, + plugins: [commonjs(), nodeResolve()], +}; diff --git a/apps/compose/app-js/server.js b/apps/compose/app-js/server.js deleted file mode 100644 index aebd502..0000000 --- a/apps/compose/app-js/server.js +++ /dev/null @@ -1,54 +0,0 @@ -import { - IncomingRequest, - ResponseOutparam, - OutgoingBody, - OutgoingResponse, - Fields, -} from "wasi:http/types@0.2.3"; - -import { add } from "example:domain/adder@0.3.0"; - -/** - * This export represents the `wasi:http/incoming-handler` interface, - * which describes implementing a HTTP handler in WebAssembly using WASI types. - */ -export const incomingHandler = { - /** - * This Javascript will be turned into a WebAssembly component by `jco` and turned into a - * WebAssembly binary with a single export (this `handler` function). - * - * The exported `handle` method is part of the `wasi:http/incoming-handler` interface, - * which defines how to hadle incoming web requests, turning this component into one that can - * serve web requests. - */ - handle(incomingRequest, responseOutparam) { - // Start building an outgoing response - const outgoingResponse = new OutgoingResponse(new Fields()); - - // Access the outgoing response body - let outgoingBody = outgoingResponse.body(); - { - // Create a stream for the response body - let outputStream = outgoingBody.write(); - // Write hello world to the response stream - let result = add(1 + 2); - outputStream.blockingWriteAndFlush( - new Uint8Array( - new TextEncoder().encode(`Hello from Javascript ${result}!\n`), - ), - ); - // @ts-ignore: This is required in order to dispose the stream before we return - outputStream[Symbol.dispose](); - } - - // Set the status code for the response - outgoingResponse.setStatusCode(200); - // Finish the response body - OutgoingBody.finish(outgoingBody, undefined); - // Set the created response to an "OK" Result value - ResponseOutparam.set(outgoingResponse, { - tag: "ok", - val: outgoingResponse, - }); - }, -}; diff --git a/apps/compose/app-js/src/server.js b/apps/compose/app-js/src/server.js new file mode 100644 index 0000000..b4a5415 --- /dev/null +++ b/apps/compose/app-js/src/server.js @@ -0,0 +1,144 @@ +import { + ResponseOutparam, + OutgoingBody, + OutgoingResponse, + Fields, +} from "wasi:http/types@0.2.3"; + +import { add } from "example:domain/adder@0.3.0"; +import { chat } from "example:domain/chat@0.3.0"; + +import { Router, json, error, withParams } from "itty-router"; + +const router = Router({ + before: [withParams], // upstream middleware + catch: error, // error handling + finally: [json], // downstream response formatting +}); + +router + .get("/hello/:name", ({ name = "World" }) => { + // simple hello world endpoint + return `Hello ${name}!`; + }) + .get("/add", (request) => { + let { a, b } = request.query; + return { + // send the request to the add function, which is the Golang backend component. + result: add(Number(a), Number(b)), + }; + }) + .get("/chat", (request) => { + let prompt = request.query["prompt"]; + let chatRequest = { + model: "gpt-3.5-turbo", + messages: [ + { + role: "user", + content: prompt, + }, + ], + }; + + // send the request to the chat function, which is the Golang backend component. + let result = chat(chatRequest); + console.log("result", result); + return { + result: result, + }; + }); + +/** + * This export represents the `wasi:http/incoming-handler` interface, + * which describes implementing a HTTP handler in WebAssembly using WASI types. + * + * This translates the WASI incoming request into a format that the `itty-router` can understand, + * then calls the router to handle the request, and finally translates the response back into + * WASI types. + */ +export const incomingHandler = { + async handle(incomingRequest, responseOutparam) { + let requestLike = { + method: incomingRequest.method().tag.toUpperCase(), + url: `http://${incomingRequest.authority()}${incomingRequest.pathWithQuery()}`, + headers: [], + }; + + for (const [key, value] of incomingRequest.headers().entries()) { + requestLike.headers.push([key, new TextDecoder().decode(value)]); + } + + let res = await router.fetch(requestLike); + + // Set the status code for the response + let outgoingResponse = new OutgoingResponse(new Fields()); + outgoingResponse.setStatusCode(res.status); + // Set the headers for the response + for (const [key, value] of Object.entries(res.headers)) { + outgoingResponse + .headers() + .set(key, new Uint8Array(new TextEncoder().encode(value))); + } + // Finish the response body + let outgoingBody = outgoingResponse.body(); + { + // Create a stream for the response body + let outputStream = outgoingBody.write(); + + ensureIterable(res); + for await (const chunk of res.body) { + outputStream.blockingWriteAndFlush(chunk); + } + outputStream[Symbol.dispose](); + } + + OutgoingBody.finish(outgoingBody, undefined); + // Set the created response to an "OK" Result value + ResponseOutparam.set(outgoingResponse, { + tag: "ok", + val: outgoingResponse, + }); + }, +}; + +function ensureIterable(res) { + if (!res.body[Symbol.asyncIterator]) { + res.body[Symbol.asyncIterator] = () => { + const reader = res.body.getReader(); + return { + next: () => reader.read(), + }; + }; + } +} + +// handle(incomingRequest, responseOutparam) { +// // Start building an outgoing response +// const outgoingResponse = new OutgoingResponse(new Fields()); + +// // Access the outgoing response body +// let outgoingBody = outgoingResponse.body(); +// { +// // Create a stream for the response body +// let outputStream = outgoingBody.write(); +// // Write hello world to the response stream +// let result = add(1 + 2); +// outputStream.blockingWriteAndFlush( +// new Uint8Array( +// new TextEncoder().encode(`Hello from Javascript ${result}!\n`), +// ), +// ); +// // @ts-ignore: This is required in order to dispose the stream before we return +// outputStream[Symbol.dispose](); +// } + +// // Set the status code for the response +// outgoingResponse.setStatusCode(200); +// // Finish the response body +// OutgoingBody.finish(outgoingBody, undefined); +// // Set the created response to an "OK" Result value +// ResponseOutparam.set(outgoingResponse, { +// tag: "ok", +// val: outgoingResponse, +// }); +// }, diff --git a/apps/compose/app-js/wit/deps/example-domain-0.3.0/package.wit b/apps/compose/app-js/wit/deps/example-domain-0.3.0/package.wit index 310833c..23ca397 100644 --- a/apps/compose/app-js/wit/deps/example-domain-0.3.0/package.wit +++ b/apps/compose/app-js/wit/deps/example-domain-0.3.0/package.wit @@ -4,6 +4,50 @@ interface adder { add: func(x: s32, y: s32) -> s32; } -world math { +interface types { + record message { + role: string, + content: string, + } + + record chat-request { + model: string, + messages: list, + } + + record annotation { + annotation-type: string, + annotation-value: string, + } + + record choice { + index: s32, + message: message, + finish-reason: string, + } + + record chat-response { + id: string, + object: string, + created: s32, + choices: list, + } + + record error { + code: s32, + message: string, + } +} + +interface chat { + use types.{chat-request, chat-response, error}; + + chat: func(request: chat-request) -> result; +} + +world service { + import types; + export adder; + export chat; } diff --git a/apps/compose/app-js/wit/domain/domain.wit b/apps/compose/app-js/wit/domain/domain.wit deleted file mode 100644 index 782493b..0000000 --- a/apps/compose/app-js/wit/domain/domain.wit +++ /dev/null @@ -1,9 +0,0 @@ -package example:domain@0.3.0; - -world math { - export adder; -} - -interface adder { - add: func(x: s32, y: s32) -> s32; -} diff --git a/apps/compose/app-js/wit/server.wit b/apps/compose/app-js/wit/server.wit index 625e23c..8c6b140 100644 --- a/apps/compose/app-js/wit/server.wit +++ b/apps/compose/app-js/wit/server.wit @@ -3,4 +3,6 @@ package example:server; world component { export wasi:http/incoming-handler@0.2.3; import example:domain/adder@0.3.0; + import example:domain/chat@0.3.0; + import example:domain/types@0.3.0; } diff --git a/apps/compose/app-js/wkg.toml b/apps/compose/app-js/wkg.toml index 721bb7f..97e621b 100644 --- a/apps/compose/app-js/wkg.toml +++ b/apps/compose/app-js/wkg.toml @@ -1,2 +1,2 @@ [overrides] -"example:domain" = { path = "./wit/domain/" } +"example:domain" = { path = "../wit/domain/" } diff --git a/apps/compose/compose.json b/apps/compose/compose.json index 6168033..c627084 100644 --- a/apps/compose/compose.json +++ b/apps/compose/compose.json @@ -1,6 +1,6 @@ { "dependencies": { - "example:math": "service-go", + "example:service": "service-go", "example:server": "app-js" } } diff --git a/apps/compose/compose.wac b/apps/compose/compose.wac index 2f36e6f..3128888 100644 --- a/apps/compose/compose.wac +++ b/apps/compose/compose.wac @@ -1,11 +1,11 @@ package example:microservice; -// Instantiate the `math` component -let math = new example:math {...}; +// Instantiate the `service` component +let service = new example:service {...}; -// Instantiate the `server` component by plugging its `adder` -// import with the `adder` export of the `math` component. -let server = new example:server {adder: math.adder, ...}; +// Instantiate the `server` component by plugging its `service` +// import with the `service` export of the `service` component. +let server = new example:server {adder: service.adder, chat: service.chat, ...}; // Export the hander function from the server component export server.incoming-handler; diff --git a/apps/compose/service-go/go.world.toml b/apps/compose/service-go/go.world.toml index 9e8ef11..cc3d89e 100644 --- a/apps/compose/service-go/go.world.toml +++ b/apps/compose/service-go/go.world.toml @@ -1,2 +1,2 @@ [target] -world = "adder" +world = "backend" diff --git a/apps/compose/service-go/internal/example/service/adder/adder.wit.go b/apps/compose/service-go/internal/example/service/adder/adder.wit.go deleted file mode 100755 index 74f7b8d..0000000 --- a/apps/compose/service-go/internal/example/service/adder/adder.wit.go +++ /dev/null @@ -1,4 +0,0 @@ -// Code generated by wit-bindgen-go. DO NOT EDIT. - -// Package adder represents the world "example:service/adder@0.3.0". -package adder diff --git a/apps/compose/service-go/internal/example/service/backend/backend.wit.go b/apps/compose/service-go/internal/example/service/backend/backend.wit.go new file mode 100644 index 0000000..8d97540 --- /dev/null +++ b/apps/compose/service-go/internal/example/service/backend/backend.wit.go @@ -0,0 +1,4 @@ +// Code generated by wit-bindgen-go. DO NOT EDIT. + +// Package backend represents the world "example:service/backend@0.3.0". +package backend diff --git a/apps/compose/service-go/internal/wasi/cli/environment/empty.s b/apps/compose/service-go/internal/wasi/cli/environment/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/environment/environment.wasm.go b/apps/compose/service-go/internal/wasi/cli/environment/environment.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/environment/environment.wit.go b/apps/compose/service-go/internal/wasi/cli/environment/environment.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/exit/empty.s b/apps/compose/service-go/internal/wasi/cli/exit/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/exit/exit.wasm.go b/apps/compose/service-go/internal/wasi/cli/exit/exit.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/exit/exit.wit.go b/apps/compose/service-go/internal/wasi/cli/exit/exit.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stderr/empty.s b/apps/compose/service-go/internal/wasi/cli/stderr/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stderr/stderr.wasm.go b/apps/compose/service-go/internal/wasi/cli/stderr/stderr.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stderr/stderr.wit.go b/apps/compose/service-go/internal/wasi/cli/stderr/stderr.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stdin/empty.s b/apps/compose/service-go/internal/wasi/cli/stdin/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stdin/stdin.wasm.go b/apps/compose/service-go/internal/wasi/cli/stdin/stdin.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stdin/stdin.wit.go b/apps/compose/service-go/internal/wasi/cli/stdin/stdin.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stdout/empty.s b/apps/compose/service-go/internal/wasi/cli/stdout/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stdout/stdout.wasm.go b/apps/compose/service-go/internal/wasi/cli/stdout/stdout.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/stdout/stdout.wit.go b/apps/compose/service-go/internal/wasi/cli/stdout/stdout.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-input/empty.s b/apps/compose/service-go/internal/wasi/cli/terminal-input/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-input/terminal-input.wasm.go b/apps/compose/service-go/internal/wasi/cli/terminal-input/terminal-input.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-input/terminal-input.wit.go b/apps/compose/service-go/internal/wasi/cli/terminal-input/terminal-input.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-output/empty.s b/apps/compose/service-go/internal/wasi/cli/terminal-output/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-output/terminal-output.wasm.go b/apps/compose/service-go/internal/wasi/cli/terminal-output/terminal-output.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-output/terminal-output.wit.go b/apps/compose/service-go/internal/wasi/cli/terminal-output/terminal-output.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stderr/empty.s b/apps/compose/service-go/internal/wasi/cli/terminal-stderr/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stderr/terminal-stderr.wasm.go b/apps/compose/service-go/internal/wasi/cli/terminal-stderr/terminal-stderr.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stderr/terminal-stderr.wit.go b/apps/compose/service-go/internal/wasi/cli/terminal-stderr/terminal-stderr.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stdin/empty.s b/apps/compose/service-go/internal/wasi/cli/terminal-stdin/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stdin/terminal-stdin.wasm.go b/apps/compose/service-go/internal/wasi/cli/terminal-stdin/terminal-stdin.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stdin/terminal-stdin.wit.go b/apps/compose/service-go/internal/wasi/cli/terminal-stdin/terminal-stdin.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stdout/empty.s b/apps/compose/service-go/internal/wasi/cli/terminal-stdout/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stdout/terminal-stdout.wasm.go b/apps/compose/service-go/internal/wasi/cli/terminal-stdout/terminal-stdout.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/cli/terminal-stdout/terminal-stdout.wit.go b/apps/compose/service-go/internal/wasi/cli/terminal-stdout/terminal-stdout.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/clocks/monotonic-clock/empty.s b/apps/compose/service-go/internal/wasi/clocks/monotonic-clock/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/clocks/monotonic-clock/monotonic-clock.wasm.go b/apps/compose/service-go/internal/wasi/clocks/monotonic-clock/monotonic-clock.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/clocks/monotonic-clock/monotonic-clock.wit.go b/apps/compose/service-go/internal/wasi/clocks/monotonic-clock/monotonic-clock.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/clocks/wall-clock/empty.s b/apps/compose/service-go/internal/wasi/clocks/wall-clock/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/clocks/wall-clock/wall-clock.wasm.go b/apps/compose/service-go/internal/wasi/clocks/wall-clock/wall-clock.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/clocks/wall-clock/wall-clock.wit.go b/apps/compose/service-go/internal/wasi/clocks/wall-clock/wall-clock.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/preopens/empty.s b/apps/compose/service-go/internal/wasi/filesystem/preopens/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/preopens/preopens.wasm.go b/apps/compose/service-go/internal/wasi/filesystem/preopens/preopens.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/preopens/preopens.wit.go b/apps/compose/service-go/internal/wasi/filesystem/preopens/preopens.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/types/abi.go b/apps/compose/service-go/internal/wasi/filesystem/types/abi.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/types/empty.s b/apps/compose/service-go/internal/wasi/filesystem/types/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/types/types.wasm.go b/apps/compose/service-go/internal/wasi/filesystem/types/types.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/filesystem/types/types.wit.go b/apps/compose/service-go/internal/wasi/filesystem/types/types.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/error/empty.s b/apps/compose/service-go/internal/wasi/io/error/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/error/error.wasm.go b/apps/compose/service-go/internal/wasi/io/error/error.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/error/error.wit.go b/apps/compose/service-go/internal/wasi/io/error/error.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/poll/empty.s b/apps/compose/service-go/internal/wasi/io/poll/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/poll/poll.wasm.go b/apps/compose/service-go/internal/wasi/io/poll/poll.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/poll/poll.wit.go b/apps/compose/service-go/internal/wasi/io/poll/poll.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/streams/empty.s b/apps/compose/service-go/internal/wasi/io/streams/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/streams/streams.wasm.go b/apps/compose/service-go/internal/wasi/io/streams/streams.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/io/streams/streams.wit.go b/apps/compose/service-go/internal/wasi/io/streams/streams.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/insecure-seed/empty.s b/apps/compose/service-go/internal/wasi/random/insecure-seed/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/insecure-seed/insecure-seed.wasm.go b/apps/compose/service-go/internal/wasi/random/insecure-seed/insecure-seed.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/insecure-seed/insecure-seed.wit.go b/apps/compose/service-go/internal/wasi/random/insecure-seed/insecure-seed.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/insecure/empty.s b/apps/compose/service-go/internal/wasi/random/insecure/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/insecure/insecure.wasm.go b/apps/compose/service-go/internal/wasi/random/insecure/insecure.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/insecure/insecure.wit.go b/apps/compose/service-go/internal/wasi/random/insecure/insecure.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/random/empty.s b/apps/compose/service-go/internal/wasi/random/random/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/random/random.wasm.go b/apps/compose/service-go/internal/wasi/random/random/random.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/random/random/random.wit.go b/apps/compose/service-go/internal/wasi/random/random/random.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/instance-network/empty.s b/apps/compose/service-go/internal/wasi/sockets/instance-network/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/instance-network/instance-network.wasm.go b/apps/compose/service-go/internal/wasi/sockets/instance-network/instance-network.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/instance-network/instance-network.wit.go b/apps/compose/service-go/internal/wasi/sockets/instance-network/instance-network.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/abi.go b/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/abi.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/empty.s b/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/ip-name-lookup.wasm.go b/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/ip-name-lookup.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/ip-name-lookup.wit.go b/apps/compose/service-go/internal/wasi/sockets/ip-name-lookup/ip-name-lookup.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/network/abi.go b/apps/compose/service-go/internal/wasi/sockets/network/abi.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/network/empty.s b/apps/compose/service-go/internal/wasi/sockets/network/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/network/network.wasm.go b/apps/compose/service-go/internal/wasi/sockets/network/network.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/network/network.wit.go b/apps/compose/service-go/internal/wasi/sockets/network/network.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp-create-socket/empty.s b/apps/compose/service-go/internal/wasi/sockets/tcp-create-socket/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp-create-socket/tcp-create-socket.wasm.go b/apps/compose/service-go/internal/wasi/sockets/tcp-create-socket/tcp-create-socket.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp-create-socket/tcp-create-socket.wit.go b/apps/compose/service-go/internal/wasi/sockets/tcp-create-socket/tcp-create-socket.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp/abi.go b/apps/compose/service-go/internal/wasi/sockets/tcp/abi.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp/empty.s b/apps/compose/service-go/internal/wasi/sockets/tcp/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp/tcp.wasm.go b/apps/compose/service-go/internal/wasi/sockets/tcp/tcp.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/tcp/tcp.wit.go b/apps/compose/service-go/internal/wasi/sockets/tcp/tcp.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp-create-socket/empty.s b/apps/compose/service-go/internal/wasi/sockets/udp-create-socket/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp-create-socket/udp-create-socket.wasm.go b/apps/compose/service-go/internal/wasi/sockets/udp-create-socket/udp-create-socket.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp-create-socket/udp-create-socket.wit.go b/apps/compose/service-go/internal/wasi/sockets/udp-create-socket/udp-create-socket.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp/abi.go b/apps/compose/service-go/internal/wasi/sockets/udp/abi.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp/empty.s b/apps/compose/service-go/internal/wasi/sockets/udp/empty.s old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp/udp.wasm.go b/apps/compose/service-go/internal/wasi/sockets/udp/udp.wasm.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/internal/wasi/sockets/udp/udp.wit.go b/apps/compose/service-go/internal/wasi/sockets/udp/udp.wit.go old mode 100755 new mode 100644 diff --git a/apps/compose/service-go/service.go b/apps/compose/service-go/service.go index 97ccfb9..fcab1b2 100644 --- a/apps/compose/service-go/service.go +++ b/apps/compose/service-go/service.go @@ -82,8 +82,6 @@ func chatCompletion(chatRequest chat.ChatRequest) (chat.ChatResponse, error) { return chat.ChatResponse{}, chatError{Code: 0, Message: "failed to marshal request"} } - fmt.Println("Request body: ", string(reqBody)) - req, err := http.NewRequest("POST", "https://api.openai.com/v1/chat/completions", bytes.NewReader(reqBody)) if err != nil { return chat.ChatResponse{}, chatError{Code: 0, Message: "failed to create request"} diff --git a/apps/compose/service-go/wit/deps/example-domain-0.3.0/package.wit b/apps/compose/service-go/wit/deps/example-domain-0.3.0/package.wit index 911ec29..23ca397 100644 --- a/apps/compose/service-go/wit/deps/example-domain-0.3.0/package.wit +++ b/apps/compose/service-go/wit/deps/example-domain-0.3.0/package.wit @@ -45,11 +45,9 @@ interface chat { chat: func(request: chat-request) -> result; } -world math { - export adder; -} -world ai { +world service { import types; + export adder; export chat; } diff --git a/apps/compose/service-go/wit/service.wit b/apps/compose/service-go/wit/service.wit index 3811f92..854efed 100644 --- a/apps/compose/service-go/wit/service.wit +++ b/apps/compose/service-go/wit/service.wit @@ -1,8 +1,7 @@ package example:service@0.3.0; -world adder { +world backend { include wasi:cli/imports@0.2.3; - include example:domain/math@0.3.0; - include example:domain/ai@0.3.0; + include example:domain/service@0.3.0; import wasi:http/outgoing-handler@0.2.3; export wasi:cli/run@0.2.3; } diff --git a/apps/compose/service-go/wkg.toml b/apps/compose/service-go/wkg.toml index 721bb7f..97e621b 100644 --- a/apps/compose/service-go/wkg.toml +++ b/apps/compose/service-go/wkg.toml @@ -1,2 +1,2 @@ [overrides] -"example:domain" = { path = "./wit/domain/" } +"example:domain" = { path = "../wit/domain/" } diff --git a/apps/compose/wit/domain/domain.wit b/apps/compose/wit/domain/domain.wit new file mode 100644 index 0000000..b4b5a8b --- /dev/null +++ b/apps/compose/wit/domain/domain.wit @@ -0,0 +1,15 @@ +package example:domain@0.3.0; + +world service { + export adder; + export chat; +} + +interface adder { + add: func(x: s32, y: s32) -> s32; +} + +interface chat { + use types.{chat-request, chat-response, error}; + chat: func(request: chat-request) -> result; +} diff --git a/apps/compose/service-go/wit/domain/domain.wit b/apps/compose/wit/domain/types.wit similarity index 67% rename from apps/compose/service-go/wit/domain/domain.wit rename to apps/compose/wit/domain/types.wit index defea41..ecbfa75 100644 --- a/apps/compose/service-go/wit/domain/domain.wit +++ b/apps/compose/wit/domain/types.wit @@ -1,22 +1,5 @@ package example:domain@0.3.0; -world math { - export adder; -} - -interface adder { - add: func(x: s32, y: s32) -> s32; -} - -world ai { - export chat; -} - -interface chat { - use types.{chat-request, chat-response, error}; - chat: func(request: chat-request) -> result; -} - interface types { record chat-request { model: string,