diff --git a/Dockerfile b/Dockerfile
index 54cc8c4..95aa061 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,7 +10,7 @@ WORKDIR /home/rust/src
RUN apk --no-cache add curl musl-dev
RUN curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
COPY . .
-RUN wasm-pack build --target web rustpad-wasm
+RUN wasm-pack build rustpad-wasm
FROM --platform=amd64 node:lts-alpine AS frontend
WORKDIR /usr/src/app
diff --git a/README.md b/README.md
index 79c31c6..51d8537 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ To run this application, you need to install Rust, `wasm-pack`, and Node.js.
Then, build the WebAssembly portion of the app:
```
-wasm-pack build --target web rustpad-wasm
+wasm-pack build rustpad-wasm
```
When that is complete, you can install dependencies for the frontend React
@@ -60,7 +60,7 @@ to start the frontend portion.
npm run dev
```
-This command will open a browser window to `http://localhost:3000`, with hot
+This command will open a browser window to `http://localhost:5173`, with hot
reloading on changes.
## Testing
diff --git a/package-lock.json b/package-lock.json
index b8bce95..d72abd9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -28,7 +28,9 @@
"monaco-editor": "^0.31.1",
"prettier": "2.5.1",
"typescript": "~5.5.3",
- "vite": "^5.3.4"
+ "vite": "^5.3.4",
+ "vite-plugin-top-level-await": "^1.4.1",
+ "vite-plugin-wasm": "^3.3.0"
}
},
"node_modules/@ampproject/remapping": {
@@ -1895,6 +1897,23 @@
"react-dom": "^16.8.0 || 17.x"
}
},
+ "node_modules/@rollup/plugin-virtual": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz",
+ "integrity": "sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==",
+ "dev": true,
+ "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/pluginutils": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
@@ -2116,6 +2135,21 @@
"win32"
]
},
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "dev": true
+ },
+ "node_modules/@swc/types": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.9.tgz",
+ "integrity": "sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==",
+ "dev": true,
+ "dependencies": {
+ "@swc/counter": "^0.1.3"
+ }
+ },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -3305,6 +3339,19 @@
}
}
},
+ "node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/vite": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz",
@@ -3360,6 +3407,227 @@
}
}
},
+ "node_modules/vite-plugin-top-level-await": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.4.1.tgz",
+ "integrity": "sha512-hogbZ6yT7+AqBaV6lK9JRNvJDn4/IJvHLu6ET06arNfo0t2IsyCaon7el9Xa8OumH+ESuq//SDf8xscZFE0rWw==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/plugin-virtual": "^3.0.2",
+ "@swc/core": "^1.3.100",
+ "uuid": "^9.0.1"
+ },
+ "peerDependencies": {
+ "vite": ">=2.8"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.6.13.tgz",
+ "integrity": "sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.9"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.6.13",
+ "@swc/core-darwin-x64": "1.6.13",
+ "@swc/core-linux-arm-gnueabihf": "1.6.13",
+ "@swc/core-linux-arm64-gnu": "1.6.13",
+ "@swc/core-linux-arm64-musl": "1.6.13",
+ "@swc/core-linux-x64-gnu": "1.6.13",
+ "@swc/core-linux-x64-musl": "1.6.13",
+ "@swc/core-win32-arm64-msvc": "1.6.13",
+ "@swc/core-win32-ia32-msvc": "1.6.13",
+ "@swc/core-win32-x64-msvc": "1.6.13"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "*"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-darwin-arm64": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.6.13.tgz",
+ "integrity": "sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-darwin-x64": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.6.13.tgz",
+ "integrity": "sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.6.13.tgz",
+ "integrity": "sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.6.13.tgz",
+ "integrity": "sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.6.13.tgz",
+ "integrity": "sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.6.13.tgz",
+ "integrity": "sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.6.13.tgz",
+ "integrity": "sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.6.13.tgz",
+ "integrity": "sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.6.13.tgz",
+ "integrity": "sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-top-level-await/node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.6.13.tgz",
+ "integrity": "sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/vite-plugin-wasm": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.3.0.tgz",
+ "integrity": "sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==",
+ "dev": true,
+ "peerDependencies": {
+ "vite": "^2 || ^3 || ^4 || ^5"
+ }
+ },
"node_modules/warning": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
diff --git a/package.json b/package.json
index 512fbe2..cc9e6a0 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,11 @@
"monaco-editor": "^0.31.1",
"prettier": "2.5.1",
"typescript": "~5.5.3",
- "vite": "^5.3.4"
+ "vite": "^5.3.4",
+ "vite-plugin-top-level-await": "^1.4.1",
+ "vite-plugin-wasm": "^3.3.0"
+ },
+ "overrides": {
+ "@swc/core": "~1.6.13"
}
}
diff --git a/src/index.tsx b/src/index.tsx
index dfb4f54..c233159 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,18 +1,15 @@
import { StrictMode } from "react";
import ReactDOM from "react-dom";
import { ChakraProvider } from "@chakra-ui/react";
-import init, { set_panic_hook } from "rustpad-wasm";
+import * as wasm from "rustpad-wasm";
import App from "./App";
import "./index.css";
-init().then(() => {
- set_panic_hook();
- ReactDOM.render(
-
-
-
-
- ,
- document.getElementById("root")
- );
-});
+ReactDOM.render(
+
+
+
+
+ ,
+ document.getElementById("root")
+);
diff --git a/vite.config.ts b/vite.config.ts
index cab7b9e..62a0a9b 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,11 +1,17 @@
import { defineConfig } from "vite";
+import wasm from "vite-plugin-wasm";
+import topLevelAwait from "vite-plugin-top-level-await";
import react from "@vitejs/plugin-react";
export default defineConfig({
build: {
chunkSizeWarningLimit: 1000,
},
- plugins: [react()],
+ plugins: [
+ wasm(),
+ topLevelAwait(),
+ react()
+ ],
server: {
proxy: {
"/api": {