diff --git a/Cargo.lock b/Cargo.lock
index 931eede2df..b21ea3ef06 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -247,6 +247,7 @@ dependencies = [
"ic-cdk-timers",
"ic-stable-structures 0.6.1",
"ic-wasi-polyfill",
+ "include_dir",
"slotmap",
"wasmedge_quickjs",
]
@@ -828,6 +829,25 @@ dependencies = [
"unicode-normalization",
]
+[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
[[package]]
name = "indexmap"
version = "2.0.0"
@@ -1875,7 +1895,7 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasmedge_quickjs"
version = "0.5.0-alpha"
-source = "git+https://github.com/demergent-labs/wasmedge-quickjs?rev=1a9b098a6d7dae30442e300a426f44a6932b26a5#1a9b098a6d7dae30442e300a426f44a6932b26a5"
+source = "git+https://github.com/demergent-labs/wasmedge-quickjs?rev=a64adb5910cd7c065b1f0efa337b0a03ffb6afc9#a64adb5910cd7c065b1f0efa337b0a03ffb6afc9"
dependencies = [
"argparse",
"encoding",
diff --git a/examples/express/.gitignore b/examples/express/.gitignore
index bcfe697161..ce15e76b02 100644
--- a/examples/express/.gitignore
+++ b/examples/express/.gitignore
@@ -1,3 +1,4 @@
.azle
.dfx
node_modules
+src/frontend/dist
diff --git a/examples/express/dfx.json b/examples/express/dfx.json
index 6a3442ea14..4cf5995f90 100644
--- a/examples/express/dfx.json
+++ b/examples/express/dfx.json
@@ -6,7 +6,9 @@
"candid": "src/backend/index.did",
"build": "npx azle express",
"wasm": ".azle/express/express.wasm",
- "gzip": true
+ "gzip": true,
+ "assets": ["src/frontend/dist"],
+ "build_assets": "npm run build"
}
}
}
diff --git a/examples/express/env.d.ts b/examples/express/env.d.ts
new file mode 100644
index 0000000000..5d16077581
--- /dev/null
+++ b/examples/express/env.d.ts
@@ -0,0 +1,9 @@
+///
+
+interface ImportMetaEnv {
+ readonly VITE_CANISTER_ID: string;
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
diff --git a/examples/express/package-lock.json b/examples/express/package-lock.json
index 1a4909e185..db5e47e8b5 100644
--- a/examples/express/package-lock.json
+++ b/examples/express/package-lock.json
@@ -6,12 +6,14 @@
"": {
"dependencies": {
"azle": "0.19.0",
- "express": "^4.18.2"
+ "express": "^4.18.2",
+ "lit": "^3.1.1"
},
"devDependencies": {
"@types/express": "^4.17.21",
"ts-node": "^10.9.1",
- "typescript": "^5.2.2"
+ "typescript": "^5.2.2",
+ "vite": "^5.0.12"
}
},
"node_modules/@cspotcode/source-map-consumer": {
@@ -379,6 +381,22 @@
"node": ">=12"
}
},
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
@@ -388,6 +406,29 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
@@ -404,6 +445,19 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
+ "node_modules/@lit-labs/ssr-dom-shim": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz",
+ "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g=="
+ },
+ "node_modules/@lit/reactive-element": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.3.tgz",
+ "integrity": "sha512-e067EuTNNgOHm1tZcc0Ia7TCzD/9ZpoPegHKgesrGK6pSDRGkGDAQbYuQclqLPIoJ9eC8Kb9mYtGryWcM5AywA==",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.1.2"
+ }
+ },
"node_modules/@noble/hashes": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
@@ -415,6 +469,175 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz",
+ "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz",
+ "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz",
+ "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz",
+ "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz",
+ "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz",
+ "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz",
+ "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz",
+ "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz",
+ "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz",
+ "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz",
+ "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz",
+ "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz",
+ "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@swc/core": {
"version": "1.3.91",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.91.tgz",
@@ -688,9 +911,12 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "17.0.21",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
- "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
+ "version": "20.11.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz",
+ "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
},
"node_modules/@types/qs": {
"version": "6.9.11",
@@ -725,6 +951,11 @@
"@types/node": "*"
}
},
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
+ },
"node_modules/@types/uuid": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz",
@@ -743,9 +974,9 @@
}
},
"node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
"bin": {
"acorn": "bin/acorn"
},
@@ -898,6 +1129,14 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -919,6 +1158,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -1151,6 +1398,20 @@
"node": ">=12"
}
},
+ "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,
+ "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",
@@ -1307,6 +1568,34 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/lit": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.1.tgz",
+ "integrity": "sha512-hF1y4K58+Gqrz+aAPS0DNBwPqPrg6P04DuWK52eMkt/SM9Qe9keWLcFgRcEKOLuDlRZlDsDbNL37Vr7ew1VCuw==",
+ "dependencies": {
+ "@lit/reactive-element": "^2.0.0",
+ "lit-element": "^4.0.0",
+ "lit-html": "^3.1.0"
+ }
+ },
+ "node_modules/lit-element": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.3.tgz",
+ "integrity": "sha512-2vhidmC7gGLfnVx41P8UZpzyS0Fb8wYhS5RCm16cMW3oERO0Khd3EsKwtRpOnttuByI5rURjT2dfoA7NlInCNw==",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.1.2",
+ "@lit/reactive-element": "^2.0.0",
+ "lit-html": "^3.1.0"
+ }
+ },
+ "node_modules/lit-html": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.1.tgz",
+ "integrity": "sha512-x/EwfGk2D/f4odSFM40hcGumzqoKv0/SUh6fBO+1Ragez81APrcAMPo1jIrCDd9Sn+Z4CT867HWKViByvkDZUA==",
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
@@ -1368,6 +1657,24 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -1408,6 +1715,40 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/postcss": {
+ "version": "8.4.33",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
+ "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -1555,6 +1896,38 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -1563,6 +1936,26 @@
"node": ">= 0.8"
}
},
+ "node_modules/terser": {
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
+ "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/text-encoding": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
@@ -1656,6 +2049,11 @@
"node": ">=14.17"
}
},
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ },
"node_modules/universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
@@ -1706,6 +2104,99 @@
"node": ">= 0.8"
}
},
+ "node_modules/vite": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz",
+ "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.32",
+ "rollup": "^4.2.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "node_modules/vite/node_modules/rollup": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz",
+ "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.9.6",
+ "@rollup/rollup-android-arm64": "4.9.6",
+ "@rollup/rollup-darwin-arm64": "4.9.6",
+ "@rollup/rollup-darwin-x64": "4.9.6",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.9.6",
+ "@rollup/rollup-linux-arm64-gnu": "4.9.6",
+ "@rollup/rollup-linux-arm64-musl": "4.9.6",
+ "@rollup/rollup-linux-riscv64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-musl": "4.9.6",
+ "@rollup/rollup-win32-arm64-msvc": "4.9.6",
+ "@rollup/rollup-win32-ia32-msvc": "4.9.6",
+ "@rollup/rollup-win32-x64-msvc": "4.9.6",
+ "fsevents": "~2.3.2"
+ }
+ },
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
@@ -1874,12 +2365,45 @@
"integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==",
"optional": true
},
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
"@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true
},
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
+ "@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
@@ -1896,11 +2420,115 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
+ "@lit-labs/ssr-dom-shim": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz",
+ "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g=="
+ },
+ "@lit/reactive-element": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.3.tgz",
+ "integrity": "sha512-e067EuTNNgOHm1tZcc0Ia7TCzD/9ZpoPegHKgesrGK6pSDRGkGDAQbYuQclqLPIoJ9eC8Kb9mYtGryWcM5AywA==",
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.2"
+ }
+ },
"@noble/hashes": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
"integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ=="
},
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz",
+ "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz",
+ "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz",
+ "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz",
+ "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz",
+ "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz",
+ "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz",
+ "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz",
+ "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz",
+ "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz",
+ "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz",
+ "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz",
+ "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz",
+ "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==",
+ "dev": true,
+ "optional": true
+ },
"@swc/core": {
"version": "1.3.91",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.91.tgz",
@@ -2066,9 +2694,12 @@
"dev": true
},
"@types/node": {
- "version": "17.0.21",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
- "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
+ "version": "20.11.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz",
+ "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==",
+ "requires": {
+ "undici-types": "~5.26.4"
+ }
},
"@types/qs": {
"version": "6.9.11",
@@ -2103,6 +2734,11 @@
"@types/node": "*"
}
},
+ "@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
+ },
"@types/uuid": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.4.tgz",
@@ -2118,9 +2754,9 @@
}
},
"acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
},
"acorn-walk": {
"version": "8.2.0",
@@ -2210,6 +2846,14 @@
"unpipe": "1.0.0"
}
},
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -2225,6 +2869,14 @@
"set-function-length": "^1.1.1"
}
},
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ },
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -2407,6 +3059,13 @@
"universalify": "^2.0.0"
}
},
+ "fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "optional": true
+ },
"function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -2511,6 +3170,34 @@
"universalify": "^2.0.0"
}
},
+ "lit": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.1.tgz",
+ "integrity": "sha512-hF1y4K58+Gqrz+aAPS0DNBwPqPrg6P04DuWK52eMkt/SM9Qe9keWLcFgRcEKOLuDlRZlDsDbNL37Vr7ew1VCuw==",
+ "requires": {
+ "@lit/reactive-element": "^2.0.0",
+ "lit-element": "^4.0.0",
+ "lit-html": "^3.1.0"
+ }
+ },
+ "lit-element": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.3.tgz",
+ "integrity": "sha512-2vhidmC7gGLfnVx41P8UZpzyS0Fb8wYhS5RCm16cMW3oERO0Khd3EsKwtRpOnttuByI5rURjT2dfoA7NlInCNw==",
+ "requires": {
+ "@lit-labs/ssr-dom-shim": "^1.1.2",
+ "@lit/reactive-element": "^2.0.0",
+ "lit-html": "^3.1.0"
+ }
+ },
+ "lit-html": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.1.tgz",
+ "integrity": "sha512-x/EwfGk2D/f4odSFM40hcGumzqoKv0/SUh6fBO+1Ragez81APrcAMPo1jIrCDd9Sn+Z4CT867HWKViByvkDZUA==",
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
"make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
@@ -2554,6 +3241,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
+ "nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true
+ },
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -2582,6 +3275,23 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.33",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
+ "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -2690,11 +3400,53 @@
"object-inspect": "^1.9.0"
}
},
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true,
+ "peer": true
+ }
+ }
+ },
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
+ "terser": {
+ "version": "5.27.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
+ "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
+ "dev": true,
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ }
+ },
"text-encoding": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
@@ -2751,6 +3503,11 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
"integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w=="
},
+ "undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ },
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
@@ -2782,6 +3539,49 @@
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
},
+ "vite": {
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz",
+ "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.19.3",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.4.32",
+ "rollup": "^4.2.0"
+ },
+ "dependencies": {
+ "@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "rollup": {
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz",
+ "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==",
+ "dev": true,
+ "requires": {
+ "@rollup/rollup-android-arm-eabi": "4.9.6",
+ "@rollup/rollup-android-arm64": "4.9.6",
+ "@rollup/rollup-darwin-arm64": "4.9.6",
+ "@rollup/rollup-darwin-x64": "4.9.6",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.9.6",
+ "@rollup/rollup-linux-arm64-gnu": "4.9.6",
+ "@rollup/rollup-linux-arm64-musl": "4.9.6",
+ "@rollup/rollup-linux-riscv64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-gnu": "4.9.6",
+ "@rollup/rollup-linux-x64-musl": "4.9.6",
+ "@rollup/rollup-win32-arm64-msvc": "4.9.6",
+ "@rollup/rollup-win32-ia32-msvc": "4.9.6",
+ "@rollup/rollup-win32-x64-msvc": "4.9.6",
+ "@types/estree": "1.0.5",
+ "fsevents": "~2.3.2"
+ }
+ }
+ }
+ },
"yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
diff --git a/examples/express/package.json b/examples/express/package.json
index 7f3ef45fd5..e6445a98ef 100644
--- a/examples/express/package.json
+++ b/examples/express/package.json
@@ -1,15 +1,18 @@
{
"scripts": {
- "pretest": "ts-node --transpile-only --ignore=false test/pretest.ts",
- "test": "ts-node --transpile-only --ignore=false test/test.ts"
+ "build": "cd src/frontend && VITE_CANISTER_ID=$(dfx canister id express) vite build",
+ "pretest": "ts-node --transpile-only --ignore=false --skip-project test/pretest.ts",
+ "test": "ts-node --transpile-only --ignore=false --skip-project test/test.ts"
},
"dependencies": {
"azle": "0.19.0",
- "express": "^4.18.2"
+ "express": "^4.18.2",
+ "lit": "^3.1.1"
},
"devDependencies": {
"@types/express": "^4.17.21",
"ts-node": "^10.9.1",
- "typescript": "^5.2.2"
+ "typescript": "^5.2.2",
+ "vite": "^5.0.12"
}
}
diff --git a/examples/express/src/backend/index.ts b/examples/express/src/backend/index.ts
index 5e60a0f5f8..c7bdc4dca5 100644
--- a/examples/express/src/backend/index.ts
+++ b/examples/express/src/backend/index.ts
@@ -6,13 +6,13 @@ let globalState = {};
export default Server(() => {
writeFileSync(
- '/public/index.html',
+ '/dist/test.html',
`
HTML from the filesystem`
);
- writeFileSync('/public/test.txt', 'I have written some text to this file');
+ writeFileSync('/dist/test.txt', 'I have written some text to this file');
- writeFileSync('/public/send-file.txt', 'Does this work too?');
+ writeFileSync('/dist/send-file.txt', 'Does this work too?');
const app = express();
@@ -26,7 +26,7 @@ export default Server(() => {
});
app.get('/file-stream', (req, res) => {
- const fileStream = createReadStream('/public/test.txt');
+ const fileStream = createReadStream('/dist/test.txt');
fileStream.pipe(res);
});
@@ -40,7 +40,7 @@ export default Server(() => {
});
app.get('/send-file', (req, res) => {
- res.sendFile('/public/send-file.txt');
+ res.sendFile('/dist/send-file.txt');
});
app.use(express.json());
@@ -67,7 +67,7 @@ export default Server(() => {
app.use('/router', router);
- app.use(express.static('/public'));
+ app.use(express.static('/dist'));
return app.listen();
});
diff --git a/examples/express/src/frontend/favicon.svg b/examples/express/src/frontend/favicon.svg
new file mode 100644
index 0000000000..e5dfe5a85e
--- /dev/null
+++ b/examples/express/src/frontend/favicon.svg
@@ -0,0 +1,93 @@
+
diff --git a/examples/express/src/frontend/index.html b/examples/express/src/frontend/index.html
index 36c52d3e2c..5e9a58a34d 100644
--- a/examples/express/src/frontend/index.html
+++ b/examples/express/src/frontend/index.html
@@ -1,9 +1,20 @@
-
+
+ Azle Express App
+
+
+
+
- It works!
+
diff --git a/examples/express/src/frontend/index.ts b/examples/express/src/frontend/index.ts
index e69de29bb2..6edac62e9e 100644
--- a/examples/express/src/frontend/index.ts
+++ b/examples/express/src/frontend/index.ts
@@ -0,0 +1,120 @@
+import { html, LitElement } from 'lit';
+import { customElement, property } from 'lit/decorators.js';
+
+@customElement('azle-app')
+export class AzleApp extends LitElement {
+ canisterOrigin: string = `http://${
+ import.meta.env.VITE_CANISTER_ID
+ }.localhost:8000`;
+
+ @property()
+ resSendResponse: string = '';
+
+ @property()
+ resWriteResponse: string = '';
+
+ @property()
+ fileStreamResponse: string = '';
+
+ @property()
+ globalStateResponse: string = JSON.stringify({});
+
+ async testResSend() {
+ this.resSendResponse = 'Loading...';
+
+ const response = await fetch(`${this.canisterOrigin}/res-send`);
+ const responseText = await response.text();
+
+ this.resSendResponse = responseText;
+ }
+
+ async testResWrite() {
+ this.resWriteResponse = 'Loading...';
+
+ const response = await fetch(`${this.canisterOrigin}/res-write`);
+ const responseText = await response.text();
+
+ this.resWriteResponse = responseText;
+ }
+
+ async testFileStream() {
+ this.fileStreamResponse = 'Loading...';
+
+ const response = await fetch(`${this.canisterOrigin}/file-stream`);
+ const responseText = await response.text();
+
+ this.fileStreamResponse = responseText;
+ }
+
+ async testGlobalState() {
+ this.globalStateResponse = 'Loading...';
+
+ const response = await fetch(
+ `${this.canisterOrigin}/global-state/post`,
+ {
+ method: 'POST',
+ headers: [['Content-Type', 'application/json']],
+ body: JSON.stringify({
+ hello: 'world'
+ })
+ }
+ );
+ const responseJson = await response.json();
+
+ this.globalStateResponse = JSON.stringify(responseJson);
+ }
+
+ async deleteGlobalState() {
+ this.globalStateResponse = 'Loading...';
+
+ const response = await fetch(
+ `${this.canisterOrigin}/global-state/delete`,
+ {
+ method: 'DELETE'
+ }
+ );
+ const responseJson = await response.json();
+
+ this.globalStateResponse = JSON.stringify(responseJson);
+ }
+
+ render() {
+ return html`
+ Azle Express App
+
+
+ :
+ ${this.resSendResponse}
+
+
+
+
+
+ :
+ ${this.resWriteResponse}
+
+
+
+
+
+ :
+ ${this.fileStreamResponse}
+
+
+
+
+
+ : ${this.globalStateResponse}
+
+
+
+
+
+
+
+ `;
+ }
+}
diff --git a/examples/express/test/tests.ts b/examples/express/test/tests.ts
index 6beca63fb7..2d8ac62daa 100644
--- a/examples/express/test/tests.ts
+++ b/examples/express/test/tests.ts
@@ -115,10 +115,10 @@ export function getTests(canisterId: string): Test[] {
}
},
{
- name: 'static index.html',
+ name: 'static test.html',
test: async () => {
try {
- const response = await fetch(`${origin}`);
+ const response = await fetch(`${origin}/test.html`);
const responseText = await response.text();
return {
diff --git a/examples/express/tsconfig.json b/examples/express/tsconfig.json
index 0817cb3fc1..055ad36719 100644
--- a/examples/express/tsconfig.json
+++ b/examples/express/tsconfig.json
@@ -5,6 +5,8 @@
"moduleResolution": "node",
"allowJs": true,
"outDir": "HACK_BECAUSE_OF_ALLOW_JS",
- "allowSyntheticDefaultImports": true
+ "allowSyntheticDefaultImports": true,
+ "experimentalDecorators": true,
+ "module": "ES2020"
}
}
diff --git a/install_rust_dependencies.sh b/install_rust_dependencies.sh
index cdccfc5d66..8a620af458 100755
--- a/install_rust_dependencies.sh
+++ b/install_rust_dependencies.sh
@@ -54,7 +54,7 @@ function install_wasmedge_quickjs() {
cd "$global_azle_version_dir" &> "$global_azle_logs_dir"/install_wasmedge_quickjs
git clone https://github.com/demergent-labs/wasmedge-quickjs &>> "$global_azle_logs_dir"/install_wasmedge_quickjs
cd wasmedge-quickjs &>> "$global_azle_logs_dir"/install_wasmedge_quickjs
- git checkout 1a9b098a6d7dae30442e300a426f44a6932b26a5 &>> "$global_azle_logs_dir"/install_wasmedge_quickjs
+ git checkout a64adb5910cd7c065b1f0efa337b0a03ffb6afc9 &>> "$global_azle_logs_dir"/install_wasmedge_quickjs
cd - &>> "$global_azle_logs_dir"/install_wasmedge_quickjs
cd - &>> "$global_azle_logs_dir"/install_wasmedge_quickjs
}
diff --git a/src/compiler/index.ts b/src/compiler/index.ts
index db20c6ccf3..8bfa3093c3 100644
--- a/src/compiler/index.ts
+++ b/src/compiler/index.ts
@@ -32,6 +32,8 @@ import { generateWorkspaceCargoToml } from './generate_cargo_toml_files';
import { generateCandidAndCanisterMethods } from './generate_candid_and_canister_methods';
import { existsSync, mkdirSync, rmSync, writeFileSync } from 'fs';
import { copySync } from 'fs-extra';
+import { basename } from 'path';
+import { execSync } from 'child_process';
azle();
@@ -109,6 +111,20 @@ async function azle() {
canisterJavaScript
);
+ if (
+ canisterConfig.build_assets !== undefined &&
+ canisterConfig.build_assets !== null
+ ) {
+ execSync(canisterConfig.build_assets);
+ }
+
+ for (const asset of canisterConfig.assets ?? []) {
+ copySync(
+ asset,
+ join(canisterPath, 'canister', 'src', basename(asset))
+ );
+ }
+
// TODO a lot of this file writing and compiler_info.json
// TODO stuff is repeated which is messy and bad of course
writeFileSync(`${canisterPath}/canister/src/candid.did`, ''); // This is for the Rust canister to have access to the candid file
@@ -122,7 +138,8 @@ async function azle() {
updates: [],
callbacks: {}
},
- env_vars: envVars
+ env_vars: envVars,
+ assets: canisterConfig.assets ?? []
};
const compilerInfoPath0 = join(
@@ -150,7 +167,8 @@ async function azle() {
canister_methods: {
...canisterMethods
}, // TODO we should probably just grab the props out that we need
- env_vars: envVars
+ env_vars: envVars,
+ assets: canisterConfig.assets ?? []
};
const compilerInfoPath = join(
diff --git a/src/compiler/rust/canister/Cargo.toml b/src/compiler/rust/canister/Cargo.toml
index 150ff105b4..eb7384c605 100644
--- a/src/compiler/rust/canister/Cargo.toml
+++ b/src/compiler/rust/canister/Cargo.toml
@@ -15,11 +15,12 @@ canister_methods = { path = "../canister_methods" }
slotmap = "=1.0.6"
ic-cdk = "0.10.0"
ic-cdk-macros = "0.7.0"
+include_dir = "0.7.3"
# TODO transient feature can be removed once https://github.com/wasm-forge/ic-wasi-polyfill/issues/14
ic-wasi-polyfill = { git = "https://github.com/wasm-forge/ic-wasi-polyfill", rev = "1693665ed57adc4f997a0313555ec0b0b5de1c07", features = [
"transient",
] }
-wasmedge_quickjs = { git = "https://github.com/demergent-labs/wasmedge-quickjs", rev = "1a9b098a6d7dae30442e300a426f44a6932b26a5" }
+wasmedge_quickjs = { git = "https://github.com/demergent-labs/wasmedge-quickjs", rev = "a64adb5910cd7c065b1f0efa337b0a03ffb6afc9" }
# wasmedge_quickjs = { path = "/home/wasmedge-quickjs" }
diff --git a/src/compiler/rust/canister/src/lib.rs b/src/compiler/rust/canister/src/lib.rs
index d6b27f65e6..a39f1e284e 100644
--- a/src/compiler/rust/canister/src/lib.rs
+++ b/src/compiler/rust/canister/src/lib.rs
@@ -7,6 +7,7 @@ use ic_stable_structures::{
storable::Bound,
DefaultMemoryImpl, StableBTreeMap, Storable,
};
+use include_dir::{include_dir, Dir};
use wasmedge_quickjs::AsObject;
mod ic;
diff --git a/src/compiler/rust/canister_methods/src/lib.rs b/src/compiler/rust/canister_methods/src/lib.rs
index 654dbd2fd2..5fd30dd025 100644
--- a/src/compiler/rust/canister_methods/src/lib.rs
+++ b/src/compiler/rust/canister_methods/src/lib.rs
@@ -1,7 +1,7 @@
// TODO we need an easy way to see the expanded file now
// TODO perhaps we should automatically do this and store it in the filesystem for easy retrieval?
-use std::fs;
+use std::{fs, path::Path};
use proc_macro::TokenStream;
use proc_macro2::Ident;
@@ -22,6 +22,7 @@ impl ToIdent for String {
struct CompilerInfo {
canister_methods: CanisterMethods,
env_vars: Vec<(String, String)>,
+ assets: Vec,
}
#[derive(Debug, Serialize, Deserialize)]
@@ -52,6 +53,34 @@ pub fn canister_methods(_: TokenStream) -> TokenStream {
.map(|(key, value)| quote!((#key, #value)))
.collect();
+ let include_dir_macros = compiler_info
+ .assets
+ .iter()
+ .enumerate()
+ .map(|(index, asset_path)| {
+ let directory_name = Path::new(asset_path).file_name().unwrap().to_string_lossy();
+ let path = format!("$CARGO_MANIFEST_DIR/src/{directory_name}");
+ let var_name = format!("ASSET_DIR{index}").to_ident();
+
+ quote!(
+ static #var_name: Dir = include_dir!(#path);
+ )
+ });
+
+ let extract_dirs: Vec<_> = compiler_info
+ .assets
+ .iter()
+ .enumerate()
+ .map(|(index, asset_path)| {
+ let directory_name = Path::new(asset_path).file_name().unwrap().to_string_lossy();
+ let var_name = format!("ASSET_DIR{index}").to_ident();
+
+ quote!(
+ #var_name.extract(#directory_name).unwrap();
+ )
+ })
+ .collect();
+
let init_method_call = compiler_info.canister_methods.init.map(|init_method| {
let js_function_name = &init_method.name;
@@ -63,6 +92,8 @@ pub fn canister_methods(_: TokenStream) -> TokenStream {
fn init() {
ic_wasi_polyfill::init(&[], &[#(#env_vars),*]);
+ #(#extract_dirs)*
+
let mut rt = wasmedge_quickjs::Runtime::new();
let r = rt.run_with_context(|context| {
@@ -111,6 +142,8 @@ pub fn canister_methods(_: TokenStream) -> TokenStream {
fn post_upgrade() {
ic_wasi_polyfill::init(&[], &[#(#env_vars),*]);
+ #(#extract_dirs)*
+
let mut rt = wasmedge_quickjs::Runtime::new();
let r = rt.run_with_context(|context| {
@@ -242,6 +275,8 @@ pub fn canister_methods(_: TokenStream) -> TokenStream {
});
quote! {
+ #(#include_dir_macros)*
+
#init_method
#post_update_method
diff --git a/src/compiler/utils/types.ts b/src/compiler/utils/types.ts
index 582aa0df23..bfb5a2476b 100644
--- a/src/compiler/utils/types.ts
+++ b/src/compiler/utils/types.ts
@@ -18,10 +18,12 @@ export type JSCanisterConfig = Readonly<{
type: 'custom';
main: string;
build: string;
+ build_assets?: string;
candid: string;
wasm: string;
env?: string[];
opt_level?: OptLevel;
+ assets?: string[];
}>;
export type OptLevel = '0' | '1' | '2' | '3' | '4';
@@ -29,6 +31,7 @@ export type OptLevel = '0' | '1' | '2' | '3' | '4';
export type CompilerInfo = {
canister_methods: CanisterMethods;
env_vars: [string, string][];
+ assets: string[];
};
export type CanisterMethods = {