diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 3ccf435..9839d4e 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -3,7 +3,7 @@ module.exports = { parser: '@typescript-eslint/parser', extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], plugins: ['svelte3', '@typescript-eslint'], - ignorePatterns: ['*.cjs'], + ignorePatterns: ['*.cjs', '*.emcc.js'], overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], settings: { 'svelte3/typescript': () => require('typescript') diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b9ef5e7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "svelte.plugin.svelte.useNewTransformation": true +} diff --git a/README.md b/README.md index 8b95dba..041b4a8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Relative to that demo, this one removes some complexity (specifically, related t - Typescript - Integration into a svelte app rather than vanilla html. - ## Developing To get started: diff --git a/package-lock.json b/package-lock.json index c3ab701..f3c6d86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,14 @@ "": { "name": "cpython-wasm-svelte-demo", "version": "0.0.1", + "license": "MIT", "devDependencies": { "@playwright/test": "^1.21.0", - "@sveltejs/adapter-auto": "next", "@sveltejs/adapter-netlify": "^1.0.0-next.56", "@sveltejs/kit": "next", + "@swc/core": "^1.2.175", + "@swc/helpers": "^0.3.13", + "@types/emscripten": "^1.39.6", "@typescript-eslint/eslint-plugin": "^5.10.1", "@typescript-eslint/parser": "^5.10.1", "bulma": "^0.9.3", @@ -20,12 +23,16 @@ "eslint-plugin-svelte3": "^3.2.1", "prettier": "^2.5.1", "prettier-plugin-svelte": "^2.5.0", + "regenerator-runtime": "^0.13.9", "sass": "^1.49.11", "svelte": "^3.44.0", "svelte-check": "^2.2.6", "svelte-preprocess": "^4.10.5", + "ts-node": "^10.7.0", + "tsconfig-paths": "^4.0.0", "tslib": "^2.3.1", - "typescript": "~4.6.2" + "typescript": "~4.6.2", + "zx": "^6.1.0" } }, "node_modules/@babel/code-frame": { @@ -752,6 +759,27 @@ "node": ">=6.9.0" } }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -1032,27 +1060,6 @@ "node": ">= 8.0.0" } }, - "node_modules/@sveltejs/adapter-auto": { - "version": "1.0.0-next.40", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.40.tgz", - "integrity": "sha512-TT6YJUF3asJ/2RbviEpcDJQ/TixPcvmH0L2266fGNT7+KfAf9wbbVdegPWRODk2E2hTN0X+h5YS9l+lap+BK9w==", - "dev": true, - "dependencies": { - "@sveltejs/adapter-cloudflare": "1.0.0-next.19", - "@sveltejs/adapter-netlify": "1.0.0-next.56", - "@sveltejs/adapter-vercel": "1.0.0-next.50" - } - }, - "node_modules/@sveltejs/adapter-cloudflare": { - "version": "1.0.0-next.19", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.19.tgz", - "integrity": "sha512-LET3DUYpl+deoKhkWCzhHUT7iipYkgVkOcRIJX7qT4m23A+MAbzcAC3npgwEYSe9RokOSWMVBr3tVujeES5EeA==", - "dev": true, - "dependencies": { - "esbuild": "^0.14.21", - "worktop": "0.8.0-next.13" - } - }, "node_modules/@sveltejs/adapter-netlify": { "version": "1.0.0-next.56", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.56.tgz", @@ -1064,15 +1071,6 @@ "tiny-glob": "^0.2.9" } }, - "node_modules/@sveltejs/adapter-vercel": { - "version": "1.0.0-next.50", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.50.tgz", - "integrity": "sha512-yta0AkuWEr7qrm8LB34F4ZdCtMxj+cHD4huwrRYCgjv+PSJHLPwe7aH53+Mhrv6La0TgeyQ/f2lTyhBMXZXn9Q==", - "dev": true, - "dependencies": { - "esbuild": "^0.14.21" - } - }, "node_modules/@sveltejs/kit": { "version": "1.0.0-next.324", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.324.tgz", @@ -1143,6 +1141,293 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/@swc/core": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.175.tgz", + "integrity": "sha512-CCLr8qV0sGsiWnN7xqmmNwqnGlBg3CKZc5+EKIxSWjRAExRV1rFLejW2aesBn2RRyKZRpnwEyOk/GFxjsKBxzw==", + "dev": true, + "bin": { + "swcx": "run_swcx.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-android-arm-eabi": "1.2.175", + "@swc/core-android-arm64": "1.2.175", + "@swc/core-darwin-arm64": "1.2.175", + "@swc/core-darwin-x64": "1.2.175", + "@swc/core-freebsd-x64": "1.2.175", + "@swc/core-linux-arm-gnueabihf": "1.2.175", + "@swc/core-linux-arm64-gnu": "1.2.175", + "@swc/core-linux-arm64-musl": "1.2.175", + "@swc/core-linux-x64-gnu": "1.2.175", + "@swc/core-linux-x64-musl": "1.2.175", + "@swc/core-win32-arm64-msvc": "1.2.175", + "@swc/core-win32-ia32-msvc": "1.2.175", + "@swc/core-win32-x64-msvc": "1.2.175" + } + }, + "node_modules/@swc/core-android-arm-eabi": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.175.tgz", + "integrity": "sha512-Uyg19XdczD1IrZe4IZO4qzZ3HCp8MynSCBvtkbyeM2ok7UGse/KjeP+giYEHvock3cvVVkPVaOKoU2gVGhkm7A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-android-arm64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.175.tgz", + "integrity": "sha512-fov7p47Eq2fAj/zZOfNicTkOO3ILblxJMMUPeTHEMsQ4DTFr3SgjZjWKxHiMwiWxitLGR2YoTdCUs1qWcGALcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.175.tgz", + "integrity": "sha512-Rht5U9gDBiVoF3nTOySv2as5TJ+rkBB0ZtY4kG57wJGPet9dQtm3yZsxUSz6EYlo4pRTtXmd+PvMnfmgFwddUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.175.tgz", + "integrity": "sha512-W+EMt9Cwusl8bmEwrR3WO6XO3OEXp6D1pTUzPCS5aoESEAmuKtTiTuhUQYhz2KZpJOdWYm4HxPn/UewRxi6cjA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-freebsd-x64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.175.tgz", + "integrity": "sha512-fK0HFGYBLInelyKu2Ze/jv3wzaUw6gq5xRL1zf2ZpwEBy92MkuxFixplSxnO7J9gEL7tR8JCpRYm9ir60Wtfgw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.175.tgz", + "integrity": "sha512-voAk62+IRz+tEdL1xsxgwxfNxAmYPCqbgIh1YDFHhWhAnPjJIX0RGEatqCTLwM1lOObLtPs1JPLpvm6sa5JfEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.175.tgz", + "integrity": "sha512-TjJDnycH0rTY9DIowLVEP+X8Ll6P60LbUzd+yGq9UV9uGv7kB65Kf7LSLteYXDLHP34JPqyqh6O7GeGB4jiEEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.175.tgz", + "integrity": "sha512-FH/yetoJPKBJHGYsu5iBMU382TEXZWhCToJA5iYqXcjye9WqR5Ss2qA2bQtikWGxFNKeNv8yCfGfesUpg7Edzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.175.tgz", + "integrity": "sha512-vdFFRpayifouqu9T+UPuWrxfERABaBDkB+CxUNrWgxE+iOJZCCPl6eFyWEqkVhjPnlmD2aHaVtzeyweIewEh4w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.175.tgz", + "integrity": "sha512-eNgC//N7IJ40HQjSKhi7xPh7mMmK9ks9KAXzVbs+BTXvEXZV/L8753uC6B19FY9UEs27e6sXUG60kEoqtCfH5w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.175.tgz", + "integrity": "sha512-eOrRfB7eRFMmXBqQ4J50hN4Xu8PsaV4G51oUuhnYZFR5hVnzEjVYHWPCCNxq5DEwBIXDGUa5JbJ0y1e05wLQyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.175.tgz", + "integrity": "sha512-Zr7mdjGiJLWv0a4eczfb8gPSLjrAy/MZWwWUY1gDnA8GeWP9dE/tiqnrMNg4bqXuuZmqLBPEC3hybRuQuWtzBA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.175.tgz", + "integrity": "sha512-Vx1AwLcbqjEkEhtRmCIdU3SoDp9Mi+fJv0mLgQ33SsZG1QPkTfn4bq4Vu9wJE+D0Em7lPmRiZpdsvx0G7oBH5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/helpers": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.13.tgz", + "integrity": "sha512-A1wswJhnqaLRn8uYVQ8YiNTtY5i/JIPmV08EXXjjTresIkUVUEUaFv/wXVhGXfRNYMvHPkuoMR1Nb6NgpxGjNg==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@types/emscripten": { + "version": "1.39.6", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", + "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -1173,6 +1458,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, "node_modules/@types/node": { "version": "17.0.31", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", @@ -1200,6 +1491,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", + "dev": true + }, "node_modules/@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", @@ -1460,6 +1757,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1531,6 +1837,12 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1775,6 +2087,12 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1789,6 +2107,15 @@ "node": ">= 8" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -1852,6 +2179,15 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -1885,6 +2221,12 @@ "node": ">=6.0.0" } }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.4.132", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.132.tgz", @@ -2693,6 +3035,21 @@ "node": ">=0.10.0" } }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, "node_modules/expect": { "version": "27.2.5", "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", @@ -2794,6 +3151,29 @@ "pend": "~1.2.0" } }, + "node_modules/fetch-blob": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2837,6 +3217,38 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3541,6 +3953,18 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/kleur": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", @@ -3599,6 +4023,18 @@ "node": ">=12" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3681,15 +4117,6 @@ "node": ">=4" } }, - "node_modules/mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3714,6 +4141,43 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.4.tgz", + "integrity": "sha512-WvYJRN7mMyOLurFR2YpysQGuwYrJN+qrrpHjJDuKMcSPdfFccRUla/kng2mz6HWSBxJcqPbvatS6Gb4RhOzCJw==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-releases": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", @@ -3844,6 +4308,15 @@ "node": ">=8" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -4049,6 +4522,21 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4106,14 +4594,11 @@ "node": ">=8.10.0" } }, - "node_modules/regexparam": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", - "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true }, "node_modules/regexpp": { "version": "3.2.0", @@ -4474,6 +4959,18 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -4501,6 +4998,15 @@ "node": ">=8" } }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4527,6 +5033,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -4746,6 +5261,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -4777,6 +5298,72 @@ "node": ">=8.0" } }, + "node_modules/ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz", + "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==", + "dev": true, + "dependencies": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -4841,6 +5428,15 @@ "node": ">=4.2.0" } }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4856,6 +5452,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/vite": { "version": "2.9.7", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.7.tgz", @@ -4893,6 +5495,15 @@ } } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4917,19 +5528,6 @@ "node": ">=0.10.0" } }, - "node_modules/worktop": { - "version": "0.8.0-next.13", - "resolved": "https://registry.npmjs.org/worktop/-/worktop-0.8.0-next.13.tgz", - "integrity": "sha512-aLPWSneFtPJr3RAf841orF9GNlVdVkQd2Wj/BbcGHp3whBZoXx6dcwwClA9fezm7muNan4SuT+ZTyMWdoJSCAg==", - "dev": true, - "dependencies": { - "mrmime": "^1.0.0", - "regexparam": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4963,6 +5561,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.1.tgz", + "integrity": "sha512-1NpAYQ3wjzIlMs0mgdBmYzLkFgWBIWrzYVDYfrixhoFNNgJ444/jT2kUT2sicRbJES3oQYRZugjB6Ro8SjKeFg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -4981,6 +5588,84 @@ "dependencies": { "buffer-crc32": "~0.2.3" } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/zx": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/zx/-/zx-6.1.0.tgz", + "integrity": "sha512-LcvyN946APdktLPm1ta4wfNiJaDuq1iHOTDwApP69ug5hNYWzMYaVMC5Ek6Ny4nnSLpJ6wdY42feR/2LY5/nVA==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.13", + "@types/minimist": "^1.2.2", + "@types/node": "^17.0", + "@types/which": "^2.0.1", + "chalk": "^5.0.1", + "fs-extra": "^10.0.1", + "globby": "^13.1.1", + "minimist": "^1.2.6", + "node-fetch": "^3.2.3", + "ps-tree": "^1.2.0", + "which": "^2.0.2", + "yaml": "^2.0.0" + }, + "bin": { + "zx": "zx.mjs" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/zx/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/zx/node_modules/globby": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", + "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -5500,6 +6185,21 @@ "to-fast-properties": "^2.0.0" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -5721,27 +6421,6 @@ "picomatch": "^2.2.2" } }, - "@sveltejs/adapter-auto": { - "version": "1.0.0-next.40", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.40.tgz", - "integrity": "sha512-TT6YJUF3asJ/2RbviEpcDJQ/TixPcvmH0L2266fGNT7+KfAf9wbbVdegPWRODk2E2hTN0X+h5YS9l+lap+BK9w==", - "dev": true, - "requires": { - "@sveltejs/adapter-cloudflare": "1.0.0-next.19", - "@sveltejs/adapter-netlify": "1.0.0-next.56", - "@sveltejs/adapter-vercel": "1.0.0-next.50" - } - }, - "@sveltejs/adapter-cloudflare": { - "version": "1.0.0-next.19", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.19.tgz", - "integrity": "sha512-LET3DUYpl+deoKhkWCzhHUT7iipYkgVkOcRIJX7qT4m23A+MAbzcAC3npgwEYSe9RokOSWMVBr3tVujeES5EeA==", - "dev": true, - "requires": { - "esbuild": "^0.14.21", - "worktop": "0.8.0-next.13" - } - }, "@sveltejs/adapter-netlify": { "version": "1.0.0-next.56", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.56.tgz", @@ -5753,15 +6432,6 @@ "tiny-glob": "^0.2.9" } }, - "@sveltejs/adapter-vercel": { - "version": "1.0.0-next.50", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.50.tgz", - "integrity": "sha512-yta0AkuWEr7qrm8LB34F4ZdCtMxj+cHD4huwrRYCgjv+PSJHLPwe7aH53+Mhrv6La0TgeyQ/f2lTyhBMXZXn9Q==", - "dev": true, - "requires": { - "esbuild": "^0.14.21" - } - }, "@sveltejs/kit": { "version": "1.0.0-next.324", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.324.tgz", @@ -5804,6 +6474,166 @@ } } }, + "@swc/core": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.175.tgz", + "integrity": "sha512-CCLr8qV0sGsiWnN7xqmmNwqnGlBg3CKZc5+EKIxSWjRAExRV1rFLejW2aesBn2RRyKZRpnwEyOk/GFxjsKBxzw==", + "dev": true, + "requires": { + "@swc/core-android-arm-eabi": "1.2.175", + "@swc/core-android-arm64": "1.2.175", + "@swc/core-darwin-arm64": "1.2.175", + "@swc/core-darwin-x64": "1.2.175", + "@swc/core-freebsd-x64": "1.2.175", + "@swc/core-linux-arm-gnueabihf": "1.2.175", + "@swc/core-linux-arm64-gnu": "1.2.175", + "@swc/core-linux-arm64-musl": "1.2.175", + "@swc/core-linux-x64-gnu": "1.2.175", + "@swc/core-linux-x64-musl": "1.2.175", + "@swc/core-win32-arm64-msvc": "1.2.175", + "@swc/core-win32-ia32-msvc": "1.2.175", + "@swc/core-win32-x64-msvc": "1.2.175" + } + }, + "@swc/core-android-arm-eabi": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.175.tgz", + "integrity": "sha512-Uyg19XdczD1IrZe4IZO4qzZ3HCp8MynSCBvtkbyeM2ok7UGse/KjeP+giYEHvock3cvVVkPVaOKoU2gVGhkm7A==", + "dev": true, + "optional": true + }, + "@swc/core-android-arm64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.175.tgz", + "integrity": "sha512-fov7p47Eq2fAj/zZOfNicTkOO3ILblxJMMUPeTHEMsQ4DTFr3SgjZjWKxHiMwiWxitLGR2YoTdCUs1qWcGALcQ==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-arm64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.175.tgz", + "integrity": "sha512-Rht5U9gDBiVoF3nTOySv2as5TJ+rkBB0ZtY4kG57wJGPet9dQtm3yZsxUSz6EYlo4pRTtXmd+PvMnfmgFwddUA==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.175.tgz", + "integrity": "sha512-W+EMt9Cwusl8bmEwrR3WO6XO3OEXp6D1pTUzPCS5aoESEAmuKtTiTuhUQYhz2KZpJOdWYm4HxPn/UewRxi6cjA==", + "dev": true, + "optional": true + }, + "@swc/core-freebsd-x64": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.175.tgz", + "integrity": "sha512-fK0HFGYBLInelyKu2Ze/jv3wzaUw6gq5xRL1zf2ZpwEBy92MkuxFixplSxnO7J9gEL7tR8JCpRYm9ir60Wtfgw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.175.tgz", + "integrity": "sha512-voAk62+IRz+tEdL1xsxgwxfNxAmYPCqbgIh1YDFHhWhAnPjJIX0RGEatqCTLwM1lOObLtPs1JPLpvm6sa5JfEg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.175.tgz", + "integrity": "sha512-TjJDnycH0rTY9DIowLVEP+X8Ll6P60LbUzd+yGq9UV9uGv7kB65Kf7LSLteYXDLHP34JPqyqh6O7GeGB4jiEEw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.175.tgz", + "integrity": "sha512-FH/yetoJPKBJHGYsu5iBMU382TEXZWhCToJA5iYqXcjye9WqR5Ss2qA2bQtikWGxFNKeNv8yCfGfesUpg7Edzg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.175.tgz", + "integrity": "sha512-vdFFRpayifouqu9T+UPuWrxfERABaBDkB+CxUNrWgxE+iOJZCCPl6eFyWEqkVhjPnlmD2aHaVtzeyweIewEh4w==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.175.tgz", + "integrity": "sha512-eNgC//N7IJ40HQjSKhi7xPh7mMmK9ks9KAXzVbs+BTXvEXZV/L8753uC6B19FY9UEs27e6sXUG60kEoqtCfH5w==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.175.tgz", + "integrity": "sha512-eOrRfB7eRFMmXBqQ4J50hN4Xu8PsaV4G51oUuhnYZFR5hVnzEjVYHWPCCNxq5DEwBIXDGUa5JbJ0y1e05wLQyw==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.175.tgz", + "integrity": "sha512-Zr7mdjGiJLWv0a4eczfb8gPSLjrAy/MZWwWUY1gDnA8GeWP9dE/tiqnrMNg4bqXuuZmqLBPEC3hybRuQuWtzBA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.2.175", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.175.tgz", + "integrity": "sha512-Vx1AwLcbqjEkEhtRmCIdU3SoDp9Mi+fJv0mLgQ33SsZG1QPkTfn4bq4Vu9wJE+D0Em7lPmRiZpdsvx0G7oBH5A==", + "dev": true, + "optional": true + }, + "@swc/helpers": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.13.tgz", + "integrity": "sha512-A1wswJhnqaLRn8uYVQ8YiNTtY5i/JIPmV08EXXjjTresIkUVUEUaFv/wXVhGXfRNYMvHPkuoMR1Nb6NgpxGjNg==", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "@types/emscripten": { + "version": "1.39.6", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz", + "integrity": "sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==", + "dev": true + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -5834,6 +6664,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, "@types/node": { "version": "17.0.31", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", @@ -5861,6 +6697,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", + "dev": true + }, "@types/yargs": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", @@ -6016,6 +6858,12 @@ "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -6068,6 +6916,12 @@ "picomatch": "^2.0.4" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6245,6 +7099,12 @@ "safe-buffer": "~5.1.1" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6256,6 +7116,12 @@ "which": "^2.0.1" } }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -6301,6 +7167,12 @@ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -6325,6 +7197,12 @@ "esutils": "^2.0.2" } }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, "electron-to-chromium": { "version": "1.4.132", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.132.tgz", @@ -6826,6 +7704,21 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, "expect": { "version": "27.2.5", "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", @@ -6909,6 +7802,16 @@ "pend": "~1.2.0" } }, + "fetch-blob": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6943,6 +7846,32 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7463,6 +8392,16 @@ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "kleur": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", @@ -7509,6 +8448,18 @@ "sourcemap-codec": "^1.4.8" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -7567,12 +8518,6 @@ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, - "mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", - "dev": true - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -7591,6 +8536,23 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-fetch": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.4.tgz", + "integrity": "sha512-WvYJRN7mMyOLurFR2YpysQGuwYrJN+qrrpHjJDuKMcSPdfFccRUla/kng2mz6HWSBxJcqPbvatS6Gb4RhOzCJw==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, "node-releases": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", @@ -7688,6 +8650,15 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -7833,6 +8804,15 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7870,10 +8850,10 @@ "picomatch": "^2.2.1" } }, - "regexparam": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", - "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==", + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regexpp": { @@ -8129,6 +9109,15 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -8152,6 +9141,15 @@ } } }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -8172,6 +9170,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -8303,6 +9307,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -8328,6 +9338,46 @@ "is-number": "^7.0.0" } }, + "ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz", + "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", @@ -8372,6 +9422,12 @@ "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8387,6 +9443,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "vite": { "version": "2.9.7", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.7.tgz", @@ -8400,6 +9462,12 @@ "rollup": "^2.59.0" } }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8415,16 +9483,6 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "worktop": { - "version": "0.8.0-next.13", - "resolved": "https://registry.npmjs.org/worktop/-/worktop-0.8.0-next.13.tgz", - "integrity": "sha512-aLPWSneFtPJr3RAf841orF9GNlVdVkQd2Wj/BbcGHp3whBZoXx6dcwwClA9fezm7muNan4SuT+ZTyMWdoJSCAg==", - "dev": true, - "requires": { - "mrmime": "^1.0.0", - "regexparam": "^2.0.0" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -8444,6 +9502,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.1.tgz", + "integrity": "sha512-1NpAYQ3wjzIlMs0mgdBmYzLkFgWBIWrzYVDYfrixhoFNNgJ444/jT2kUT2sicRbJES3oQYRZugjB6Ro8SjKeFg==", + "dev": true + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -8462,6 +9526,59 @@ "requires": { "buffer-crc32": "~0.2.3" } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "zx": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/zx/-/zx-6.1.0.tgz", + "integrity": "sha512-LcvyN946APdktLPm1ta4wfNiJaDuq1iHOTDwApP69ug5hNYWzMYaVMC5Ek6Ny4nnSLpJ6wdY42feR/2LY5/nVA==", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.13", + "@types/minimist": "^1.2.2", + "@types/node": "^17.0", + "@types/which": "^2.0.1", + "chalk": "^5.0.1", + "fs-extra": "^10.0.1", + "globby": "^13.1.1", + "minimist": "^1.2.6", + "node-fetch": "^3.2.3", + "ps-tree": "^1.2.0", + "which": "^2.0.2", + "yaml": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "dev": true + }, + "globby": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", + "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } } } } diff --git a/package.json b/package.json index 3c96071..a475700 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "scripts": { "dev": "svelte-kit dev", "build": "rm -rf .netlify build .svelte-kit && svelte-kit build", + "build:wasm": "TS_NODE_PROJECT=./scripts/tsconfig.json ts-node ./scripts/add-demo.ts", "package": "svelte-kit package", "preview": "svelte-kit preview", "prepare": "svelte-kit sync", @@ -29,6 +30,9 @@ "@playwright/test": "^1.21.0", "@sveltejs/adapter-netlify": "^1.0.0-next.56", "@sveltejs/kit": "next", + "@swc/core": "^1.2.175", + "@swc/helpers": "^0.3.13", + "@types/emscripten": "^1.39.6", "@typescript-eslint/eslint-plugin": "^5.10.1", "@typescript-eslint/parser": "^5.10.1", "bulma": "^0.9.3", @@ -37,12 +41,15 @@ "eslint-plugin-svelte3": "^3.2.1", "prettier": "^2.5.1", "prettier-plugin-svelte": "^2.5.0", + "regenerator-runtime": "^0.13.9", "sass": "^1.49.11", "svelte": "^3.44.0", "svelte-check": "^2.2.6", "svelte-preprocess": "^4.10.5", + "ts-node": "^10.7.0", "tslib": "^2.3.1", - "typescript": "~4.6.2" + "typescript": "~4.6.2", + "zx": "^6.1.0" }, "type": "module" } diff --git a/scripts/add-demo.ts b/scripts/add-demo.ts new file mode 100755 index 0000000..9e605ae --- /dev/null +++ b/scripts/add-demo.ts @@ -0,0 +1,33 @@ +import { $, cd, chalk, path, glob } from 'zx'; +import { baseDir, formatDir, logWithEmoji } from './script.utils.js'; + +void (async function () { + logWithEmoji(chalk.blue('Compiling "add" wasm example.'), '🏗️'); + + const addPath = glob.globbySync('./**/add.c'); + if (addPath.length === 0) { + throw new Error('Could not find add.c!?'); + } + const wasmDirRelative = path.dirname(addPath[0]); + const wasmDir = wasmDirRelative; //path.resolve(baseDir, wasmDirRelative); + + logWithEmoji(`Found "add.c" in "${wasmDirRelative}"`, '📁'); + cd(wasmDir); + + // Building the module + const tic = performance.now(); + await $`emcc add.c -o add.emcc.js \ + -s EXPORTED_FUNCTIONS="['_add']" \ + -s MODULARIZE=1 \ + -s EXPORT_ES6=1 \ + -s EXPORT_NAME="createAddModule" \ + --post-js add.post.emcc.js`; + const compileTime = (performance.now() - tic) / 1000; + + cd(baseDir); + + logWithEmoji(chalk.magenta(`Completed compilation in ${compileTime.toPrecision(3)}s.`), '⏲️'); + + await formatDir(wasmDir); + logWithEmoji(chalk.green('Compilation complete.'), '🏁'); +})(); diff --git a/scripts/script.utils.ts b/scripts/script.utils.ts new file mode 100644 index 0000000..9f37049 --- /dev/null +++ b/scripts/script.utils.ts @@ -0,0 +1,23 @@ +import { $, quiet } from 'zx'; + +export const formatDir = async (dir: string): Promise => { + await quiet( + $`npx prettier --ignore-path .gitignore --write --plugin-search-dir=${baseDir} ${dir}` + ); +}; + +export const logWithEmoji = (msg: string, emoji?: string): void => + console.log(((emoji || ' ') + ' '.repeat(3)).slice(0, 10) + msg); + +const getBaseDir = (): string => { + const _baseDir = process.env.npm_config_local_prefix; + + if (!_baseDir) { + throw new Error('ENVVAR "npm_config_local_prefix" is not defined?!'); + } + + return _baseDir; +}; + +export const baseDir = getBaseDir(); +await quiet($`cd ${baseDir}`); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 0000000..fc8c45c --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,34 @@ +{ + "extends": "../tsconfig.json", + "ts-node": { + "esm": true, + "swc": true, + "require": ["ts-node/register", "tsconfig-paths/register"], + "files": false, + "cwd": "../..", + "experimentalResolverFeatures": false, + "scopeDir": "..", + "compilerOptions": { + "module": "esnext", + "rootDir": ".." + } + }, + "compilerOptions": { + "module": "es2022", + "baseUrl": "..", + "rootDir": "..", + "rootDirs": ["..", "../.svelte-kit/types"], + "paths": { + "$lib": ["src/lib"], + "$lib/*": ["src/lib/*"], + "$components": ["src/components"], + "$components/*": ["src/components/*"], + "$containers": ["src/containers"], + "$containers/*": ["src/containers/*"], + "$scripts": ["scripts"], + "$scripts/*": ["scripts/*"] + } + }, + "include": ["../src/**/*.js", "../src/**/*.ts", "../src/**/*.d.ts", "../src/**/*.svelte", "*.ts"], + "exclude": ["../node_modules/**", "../.svelte-kit/**", "../src/**/*.emcc.js"] +} diff --git a/src/containers/AddDemo.svelte b/src/containers/AddDemo.svelte new file mode 100644 index 0000000..0431ff1 --- /dev/null +++ b/src/containers/AddDemo.svelte @@ -0,0 +1,38 @@ + + +
+
+

Change the inputs to recompute with add!

+
+
+
+ +
+
+
+
+ +
+
=
+
+ +
+
+
diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/lib/wasm/add.c b/src/lib/wasm/add.c new file mode 100644 index 0000000..2b2d81d --- /dev/null +++ b/src/lib/wasm/add.c @@ -0,0 +1,4 @@ +int add(int a, int b) +{ + return a + b; +} \ No newline at end of file diff --git a/src/lib/wasm/add.emcc.d.ts b/src/lib/wasm/add.emcc.d.ts new file mode 100644 index 0000000..0763f70 --- /dev/null +++ b/src/lib/wasm/add.emcc.d.ts @@ -0,0 +1,17 @@ +/// +/** Above will import declarations from @types/emscripten, including Module etc. */ + +// This will merge to the existing EmscriptenModule interface from @types/emscripten +// If this doesn't work, try globalThis.EmscriptenModule instead. +export interface AddModule extends EmscriptenModule { + // Module.cwrap() will be available by doing this. + // Requires -s "EXTRA_EXPORTED_RUNTIME_METHODS=['cwrap']" + cwrap: typeof cwrap; + // Exported from add.cpp + // Requires "EXPORTED_FUNCTIONS=['_add']" + _add(a: number, b: number): number; + // or using cwrap. See below + add(a: number, b: number): number; +} + +export default async function createAddModule(mod?: EmscriptenModule): Promise; diff --git a/src/lib/wasm/add.emcc.js b/src/lib/wasm/add.emcc.js new file mode 100644 index 0000000..167db2a --- /dev/null +++ b/src/lib/wasm/add.emcc.js @@ -0,0 +1,2597 @@ +var createAddModule = (() => { + var _scriptDir = import.meta.url; + + return function (createAddModule) { + createAddModule = createAddModule || {}; + + // The Module object: Our interface to the outside world. We import + // and export values on it. There are various ways Module can be used: + // 1. Not defined. We create it here + // 2. A function parameter, function(Module) { ..generated code.. } + // 3. pre-run appended it, var Module = {}; ..generated code.. + // 4. External script tag defines var Module. + // We need to check if Module already exists (e.g. case 3 above). + // Substitution will be replaced with actual code on later stage of the build, + // this way Closure Compiler will not mangle it (e.g. case 4. above). + // Note that if you want to run closure, and also to use Module + // after the generated code, you will need to define var Module = {}; + // before the code. Then that object will be used in the code, and you + // can continue to use Module afterwards as well. + var Module = typeof createAddModule != 'undefined' ? createAddModule : {}; + + // See https://caniuse.com/mdn-javascript_builtins_object_assign + + // Set up the promise that indicates the Module is initialized + var readyPromiseResolve, readyPromiseReject; + Module['ready'] = new Promise(function (resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '_add')) { + Object.defineProperty(Module['ready'], '_add', { + configurable: true, + get: function () { + abort( + 'You are getting _add on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js' + ); + } + }); + Object.defineProperty(Module['ready'], '_add', { + configurable: true, + set: function () { + abort( + 'You are setting _add on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js' + ); + } + }); + } + + if (!Object.getOwnPropertyDescriptor(Module['ready'], '___stdio_exit')) { + Object.defineProperty(Module['ready'], '___stdio_exit', { + configurable: true, + get: function () { + abort( + 'You are getting ___stdio_exit on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js' + ); + } + }); + Object.defineProperty(Module['ready'], '___stdio_exit', { + configurable: true, + set: function () { + abort( + 'You are setting ___stdio_exit on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js' + ); + } + }); + } + + if (!Object.getOwnPropertyDescriptor(Module['ready'], 'onRuntimeInitialized')) { + Object.defineProperty(Module['ready'], 'onRuntimeInitialized', { + configurable: true, + get: function () { + abort( + 'You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js' + ); + } + }); + Object.defineProperty(Module['ready'], 'onRuntimeInitialized', { + configurable: true, + set: function () { + abort( + 'You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js' + ); + } + }); + } + + // --pre-jses are emitted after the Module integration code, so that they can + // refer to Module (if they choose; they can also define Module) + + // Sometimes an existing Module object exists with properties + // meant to overwrite the default module functionality. Here + // we collect those properties and reapply _after_ we configure + // the current environment's defaults to avoid having to be so + // defensive during initialization. + var moduleOverrides = Object.assign({}, Module); + + var arguments_ = []; + var thisProgram = './this.program'; + var quit_ = (status, toThrow) => { + throw toThrow; + }; + + // Determine the runtime environment we are in. You can customize this by + // setting the ENVIRONMENT setting at compile time (see settings.js). + + // Attempt to auto-detect the environment + var ENVIRONMENT_IS_WEB = typeof window == 'object'; + var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function'; + // N.b. Electron.js environment is simultaneously a NODE-environment, but + // also a web environment. + var ENVIRONMENT_IS_NODE = + typeof process == 'object' && + typeof process.versions == 'object' && + typeof process.versions.node == 'string'; + var ENVIRONMENT_IS_SHELL = + !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + + if (Module['ENVIRONMENT']) { + throw new Error( + 'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)' + ); + } + + // `/` should be present at the end if `scriptDirectory` is not empty + var scriptDirectory = ''; + function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; + } + + // Hooks that are implemented differently in different runtime environments. + var read_, readAsync, readBinary, setWindowTitle; + + // Normally we don't log exceptions but instead let them bubble out the top + // level where the embedding environment (e.g. the browser) can handle + // them. + // However under v8 and node we sometimes exit the process direcly in which case + // its up to use us to log the exception before exiting. + // If we fix https://github.com/emscripten-core/emscripten/issues/15080 + // this may no longer be needed under node. + function logExceptionOnExit(e) { + if (e instanceof ExitStatus) return; + let toLog = e; + if (e && typeof e == 'object' && e.stack) { + toLog = [e, e.stack]; + } + err('exiting due to exception: ' + toLog); + } + + var fs; + var nodePath; + var requireNodeFS; + + if (ENVIRONMENT_IS_NODE) { + if (!(typeof process == 'object' && typeof require == 'function')) + throw new Error( + 'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)' + ); + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require('path').dirname(scriptDirectory) + '/'; + } else { + scriptDirectory = __dirname + '/'; + } + + // include: node_shell_read.js + + requireNodeFS = () => { + // Use nodePath as the indicator for these not being initialized, + // since in some environments a global fs may have already been + // created. + if (!nodePath) { + fs = require('fs'); + nodePath = require('path'); + } + }; + + read_ = function shell_read(filename, binary) { + requireNodeFS(); + filename = nodePath['normalize'](filename); + return fs.readFileSync(filename, binary ? undefined : 'utf8'); + }; + + readBinary = (filename) => { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; + }; + + readAsync = (filename, onload, onerror) => { + requireNodeFS(); + filename = nodePath['normalize'](filename); + fs.readFile(filename, function (err, data) { + if (err) onerror(err); + else onload(data.buffer); + }); + }; + + // end include: node_shell_read.js + if (process['argv'].length > 1) { + thisProgram = process['argv'][1].replace(/\\/g, '/'); + } + + arguments_ = process['argv'].slice(2); + + // MODULARIZE will export the module in the proper place outside, we don't need to export here + + process['on']('uncaughtException', function (ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + + // Without this older versions of node (< v15) will log unhandled rejections + // but return 0, which is not normally the desired behaviour. This is + // not be needed with node v15 and about because it is now the default + // behaviour: + // See https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode + process['on']('unhandledRejection', function (reason) { + throw reason; + }); + + quit_ = (status, toThrow) => { + if (keepRuntimeAlive()) { + process['exitCode'] = status; + throw toThrow; + } + logExceptionOnExit(toThrow); + process['exit'](status); + }; + + Module['inspect'] = function () { + return '[Emscripten Module object]'; + }; + } else if (ENVIRONMENT_IS_SHELL) { + if ( + (typeof process == 'object' && typeof require === 'function') || + typeof window == 'object' || + typeof importScripts == 'function' + ) + throw new Error( + 'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)' + ); + + if (typeof read != 'undefined') { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + let data; + if (typeof readbuffer == 'function') { + return new Uint8Array(readbuffer(f)); + } + data = read(f, 'binary'); + assert(typeof data == 'object'); + return data; + }; + + readAsync = function readAsync(f, onload, onerror) { + setTimeout(() => onload(readBinary(f)), 0); + }; + + if (typeof scriptArgs != 'undefined') { + arguments_ = scriptArgs; + } else if (typeof arguments != 'undefined') { + arguments_ = arguments; + } + + if (typeof quit == 'function') { + quit_ = (status, toThrow) => { + logExceptionOnExit(toThrow); + quit(status); + }; + } + + if (typeof print != 'undefined') { + // Prefer to use print/printErr where they exist, as they usually work better. + if (typeof console == 'undefined') console = /** @type{!Console} */ ({}); + console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); + console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ ( + typeof printErr != 'undefined' ? printErr : print + ); + } + } + + // Note that this includes Node.js workers when relevant (pthreads is enabled). + // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and + // ENVIRONMENT_IS_NODE. + else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { + // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { + // web + scriptDirectory = document.currentScript.src; + } + // When MODULARIZE, this JS may be executed later, after document.currentScript + // is gone, so we saved it, and we use it here instead of any other info. + if (_scriptDir) { + scriptDirectory = _scriptDir; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr( + 0, + scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/') + 1 + ); + } else { + scriptDirectory = ''; + } + + if (!(typeof window == 'object' || typeof importScripts == 'function')) + throw new Error( + 'not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)' + ); + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { + // include: web_or_worker_shell_read.js + + read_ = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */ (xhr.response)); + }; + } + + readAsync = (url, onload, onerror) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { + // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + + // end include: web_or_worker_shell_read.js + } + + setWindowTitle = (title) => (document.title = title); + } else { + throw new Error('environment detection error'); + } + + var out = Module['print'] || console.log.bind(console); + var err = Module['printErr'] || console.warn.bind(console); + + // Merge back in the overrides + Object.assign(Module, moduleOverrides); + // Free the object hierarchy contained in the overrides, this lets the GC + // reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. + moduleOverrides = null; + checkIncomingModuleAPI(); + + // Emit code to handle expected values on the Module object. This applies Module.x + // to the proper local x. This has two benefits: first, we only emit it if it is + // expected to arrive, and second, by using a local everywhere else that can be + // minified. + + if (Module['arguments']) arguments_ = Module['arguments']; + legacyModuleProp('arguments', 'arguments_'); + + if (Module['thisProgram']) thisProgram = Module['thisProgram']; + legacyModuleProp('thisProgram', 'thisProgram'); + + if (Module['quit']) quit_ = Module['quit']; + legacyModuleProp('quit', 'quit_'); + + // perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message + // Assertions on removed incoming Module JS APIs. + assert( + typeof Module['memoryInitializerPrefixURL'] == 'undefined', + 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead' + ); + assert( + typeof Module['pthreadMainPrefixURL'] == 'undefined', + 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead' + ); + assert( + typeof Module['cdInitializerPrefixURL'] == 'undefined', + 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead' + ); + assert( + typeof Module['filePackagePrefixURL'] == 'undefined', + 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead' + ); + assert( + typeof Module['read'] == 'undefined', + 'Module.read option was removed (modify read_ in JS)' + ); + assert( + typeof Module['readAsync'] == 'undefined', + 'Module.readAsync option was removed (modify readAsync in JS)' + ); + assert( + typeof Module['readBinary'] == 'undefined', + 'Module.readBinary option was removed (modify readBinary in JS)' + ); + assert( + typeof Module['setWindowTitle'] == 'undefined', + 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)' + ); + assert( + typeof Module['TOTAL_MEMORY'] == 'undefined', + 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY' + ); + legacyModuleProp('read', 'read_'); + legacyModuleProp('readAsync', 'readAsync'); + legacyModuleProp('readBinary', 'readBinary'); + legacyModuleProp('setWindowTitle', 'setWindowTitle'); + var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; + var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; + var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; + var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + function alignMemory() { + abort( + '`alignMemory` is now a library function and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line' + ); + } + + assert( + !ENVIRONMENT_IS_SHELL, + "shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable." + ); + + var STACK_ALIGN = 16; + var POINTER_SIZE = 4; + + function getNativeTypeSize(type) { + switch (type) { + case 'i1': + case 'i8': + return 1; + case 'i16': + return 2; + case 'i32': + return 4; + case 'i64': + return 8; + case 'float': + return 4; + case 'double': + return 8; + default: { + if (type[type.length - 1] === '*') { + return POINTER_SIZE; + } else if (type[0] === 'i') { + const bits = Number(type.substr(1)); + assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); + return bits / 8; + } else { + return 0; + } + } + } + } + + function warnOnce(text) { + if (!warnOnce.shown) warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } + } + + // include: runtime_functions.js + + // This gives correct answers for everything less than 2^{14} = 16384 + // I hope nobody is contemplating functions with 16384 arguments... + function uleb128Encode(n) { + assert(n < 16384); + if (n < 128) { + return [n]; + } + return [n % 128 | 128, n >> 7]; + } + + // Wraps a JS function as a wasm function with a given signature. + function convertJsFunctionToWasm(func, sig) { + // If the type reflection proposal is available, use the new + // "WebAssembly.Function" constructor. + // Otherwise, construct a minimal wasm module importing the JS function and + // re-exporting it. + if (typeof WebAssembly.Function == 'function') { + var typeNames = { + i: 'i32', + j: 'i64', + f: 'f32', + d: 'f64' + }; + var type = { + parameters: [], + results: sig[0] == 'v' ? [] : [typeNames[sig[0]]] + }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func); + } + + // The module is static, with the exception of the type section, which is + // generated based on the signature passed in. + var typeSection = [ + 0x01, // count: 1 + 0x60 // form: func + ]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { + i: 0x7f, // i32 + j: 0x7e, // i64 + f: 0x7d, // f32 + d: 0x7c // f64 + }; + + // Parameters, length + signatures + typeSection = typeSection.concat(uleb128Encode(sigParam.length)); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + + // Return values, length + signatures + // With no multi-return in MVP, either 0 (void) or 1 (anything else) + if (sigRet == 'v') { + typeSection.push(0x00); + } else { + typeSection = typeSection.concat([0x01, typeCodes[sigRet]]); + } + + // Write the section code and overall length of the type section into the + // section header + typeSection = [0x01 /* Type section code */].concat( + uleb128Encode(typeSection.length), + typeSection + ); + + // Rest of the module is static + var bytes = new Uint8Array( + [ + 0x00, + 0x61, + 0x73, + 0x6d, // magic ("\0asm") + 0x01, + 0x00, + 0x00, + 0x00 // version: 1 + ].concat(typeSection, [ + 0x02, + 0x07, // import section + // (import "e" "f" (func 0 (type 0))) + 0x01, + 0x01, + 0x65, + 0x01, + 0x66, + 0x00, + 0x00, + 0x07, + 0x05, // export section + // (export "f" (func 0 (type 0))) + 0x01, + 0x01, + 0x66, + 0x00, + 0x00 + ]) + ); + + // We can compile this wasm module synchronously because it is very small. + // This accepts an import (at "e.f"), that it reroutes to an export (at "f") + var module = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module, { + e: { + f: func + } + }); + var wrappedFunc = instance.exports['f']; + return wrappedFunc; + } + + var freeTableIndexes = []; + + // Weak map of functions in the table to their indexes, created on first use. + var functionsInTableMap; + + function getEmptyTableSlot() { + // Reuse a free index if there is one, otherwise grow. + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + // Grow the table + try { + wasmTable.grow(1); + } catch (err) { + if (!(err instanceof RangeError)) { + throw err; + } + throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.'; + } + return wasmTable.length - 1; + } + + function updateTableMap(offset, count) { + for (var i = offset; i < offset + count; i++) { + var item = getWasmTableEntry(i); + // Ignore null values. + if (item) { + functionsInTableMap.set(item, i); + } + } + } + + /** + * Add a function to the table. + * 'sig' parameter is required if the function being added is a JS function. + * @param {string=} sig + */ + function addFunction(func, sig) { + assert(typeof func != 'undefined'); + + // Check if the function is already in the table, to ensure each function + // gets a unique index. First, create the map if this is the first use. + if (!functionsInTableMap) { + functionsInTableMap = new WeakMap(); + updateTableMap(0, wasmTable.length); + } + if (functionsInTableMap.has(func)) { + return functionsInTableMap.get(func); + } + + // It's not in the table, add it now. + + var ret = getEmptyTableSlot(); + + // Set the new value. + try { + // Attempting to call this with JS function will cause of table.set() to fail + setWasmTableEntry(ret, func); + } catch (err) { + if (!(err instanceof TypeError)) { + throw err; + } + assert(typeof sig != 'undefined', 'Missing signature argument to addFunction: ' + func); + var wrapped = convertJsFunctionToWasm(func, sig); + setWasmTableEntry(ret, wrapped); + } + + functionsInTableMap.set(func, ret); + + return ret; + } + + function removeFunction(index) { + functionsInTableMap.delete(getWasmTableEntry(index)); + freeTableIndexes.push(index); + } + + // end include: runtime_functions.js + // include: runtime_debug.js + + function legacyModuleProp(prop, newName) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get: function () { + abort( + 'Module.' + + prop + + ' has been replaced with plain ' + + newName + + ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' + ); + } + }); + } + } + + function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort( + '`Module.' + + prop + + '` was supplied but `' + + prop + + '` not included in INCOMING_MODULE_JS_API' + ); + } + } + + function unexportedMessage(sym, isFSSybol) { + var msg = "'" + sym + "' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"; + if (isFSSybol) { + msg += + '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + return msg; + } + + function unexportedRuntimeSymbol(sym, isFSSybol) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get: function () { + abort(unexportedMessage(sym, isFSSybol)); + } + }); + } + } + + function unexportedRuntimeFunction(sym, isFSSybol) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Module[sym] = () => abort(unexportedMessage(sym, isFSSybol)); + } + } + + // end include: runtime_debug.js + var tempRet0 = 0; + var setTempRet0 = (value) => { + tempRet0 = value; + }; + var getTempRet0 = () => tempRet0; + + // === Preamble library stuff === + + // Documentation for the public APIs defined in this file must be updated in: + // site/source/docs/api_reference/preamble.js.rst + // A prebuilt local version of the documentation is available at: + // site/build/text/docs/api_reference/preamble.js.txt + // You can also build docs locally as HTML or other formats in site/ + // An online HTML version (which may be of a different version of Emscripten) + // is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + + var wasmBinary; + if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; + legacyModuleProp('wasmBinary', 'wasmBinary'); + var noExitRuntime = Module['noExitRuntime'] || true; + legacyModuleProp('noExitRuntime', 'noExitRuntime'); + + if (typeof WebAssembly != 'object') { + abort('no native wasm support detected'); + } + + // include: runtime_safe_heap.js + + // In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking. + // In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties) + + /** @param {number} ptr + @param {number} value + @param {string} type + @param {number|boolean=} noSafe */ + function setValue(ptr, value, type = 'i8', noSafe) { + if (type.charAt(type.length - 1) === '*') type = 'i32'; + switch (type) { + case 'i1': + HEAP8[ptr >> 0] = value; + break; + case 'i8': + HEAP8[ptr >> 0] = value; + break; + case 'i16': + HEAP16[ptr >> 1] = value; + break; + case 'i32': + HEAP32[ptr >> 2] = value; + break; + case 'i64': + (tempI64 = [ + value >>> 0, + ((tempDouble = value), + +Math.abs(tempDouble) >= 1.0 + ? tempDouble > 0.0 + ? (Math.min(+Math.floor(tempDouble / 4294967296.0), 4294967295.0) | 0) >>> 0 + : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296.0) >>> 0 + : 0) + ]), + (HEAP32[ptr >> 2] = tempI64[0]), + (HEAP32[(ptr + 4) >> 2] = tempI64[1]); + break; + case 'float': + HEAPF32[ptr >> 2] = value; + break; + case 'double': + HEAPF64[ptr >> 3] = value; + break; + default: + abort('invalid type for setValue: ' + type); + } + } + + /** @param {number} ptr + @param {string} type + @param {number|boolean=} noSafe */ + function getValue(ptr, type = 'i8', noSafe) { + if (type.charAt(type.length - 1) === '*') type = 'i32'; + switch (type) { + case 'i1': + return HEAP8[ptr >> 0]; + case 'i8': + return HEAP8[ptr >> 0]; + case 'i16': + return HEAP16[ptr >> 1]; + case 'i32': + return HEAP32[ptr >> 2]; + case 'i64': + return HEAP32[ptr >> 2]; + case 'float': + return HEAPF32[ptr >> 2]; + case 'double': + return Number(HEAPF64[ptr >> 3]); + default: + abort('invalid type for getValue: ' + type); + } + return null; + } + + // end include: runtime_safe_heap.js + // Wasm globals + + var wasmMemory; + + //======================================== + // Runtime essentials + //======================================== + + // whether we are quitting the application. no code should run after this. + // set in exit() and abort() + var ABORT = false; + + // set by exit() and abort(). Passed to 'onExit' handler. + // NOTE: This is also used as the process return code code in shell environments + // but only when noExitRuntime is false. + var EXITSTATUS; + + /** @type {function(*, string=)} */ + function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } + } + + // Returns the C function with a specified identifier (for C++, you need to do manual name mangling) + function getCFunc(ident) { + var func = Module['_' + ident]; // closure exported function + assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); + return func; + } + + // C calling interface. + /** @param {string|null=} returnType + @param {Array=} argTypes + @param {Arguments|Array=} args + @param {Object=} opts */ + function ccall(ident, returnType, argTypes, args, opts) { + // For fast lookup of conversion functions + var toC = { + string: function (str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { + // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + var len = (str.length << 2) + 1; + ret = stackAlloc(len); + stringToUTF8(str, ret, len); + } + return ret; + }, + array: function (arr) { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + } + }; + + function convertReturnValue(ret) { + if (returnType === 'string') return UTF8ToString(ret); + if (returnType === 'boolean') return Boolean(ret); + return ret; + } + + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + assert(returnType !== 'array', 'Return type should not be "array".'); + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + function onDone(ret) { + if (stack !== 0) stackRestore(stack); + return convertReturnValue(ret); + } + + ret = onDone(ret); + return ret; + } + + /** @param {string=} returnType + @param {Array=} argTypes + @param {Object=} opts */ + function cwrap(ident, returnType, argTypes, opts) { + return function () { + return ccall(ident, returnType, argTypes, arguments, opts); + }; + } + + // We used to include malloc/free by default in the past. Show a helpful error in + // builds with assertions. + function _malloc() { + abort("malloc() called but not included in the build - add '_malloc' to EXPORTED_FUNCTIONS"); + } + function _free() { + // Show a helpful error since we used to include free by default in the past. + abort("free() called but not included in the build - add '_free' to EXPORTED_FUNCTIONS"); + } + + // include: runtime_legacy.js + + var ALLOC_NORMAL = 0; // Tries to use _malloc() + var ALLOC_STACK = 1; // Lives for the duration of the current function call + + /** + * allocate(): This function is no longer used by emscripten but is kept around to avoid + * breaking external users. + * You should normally not use allocate(), and instead allocate + * memory using _malloc()/stackAlloc(), initialize it with + * setValue(), and so forth. + * @param {(Uint8Array|Array)} slab: An array of data. + * @param {number=} allocator : How to allocate memory, see ALLOC_* + */ + function allocate(slab, allocator) { + var ret; + assert(typeof allocator == 'number', 'allocate no longer takes a type argument'); + assert(typeof slab != 'number', 'allocate no longer takes a number as arg0'); + + if (allocator == ALLOC_STACK) { + ret = stackAlloc(slab.length); + } else { + ret = abort( + 'malloc was not included, but is needed in allocate. Adding "_malloc" to EXPORTED_FUNCTIONS should fix that. This may be a bug in the compiler, please file an issue.' + ); + } + + if (!slab.subarray && !slab.slice) { + slab = new Uint8Array(slab); + } + HEAPU8.set(slab, ret); + return ret; + } + + // end include: runtime_legacy.js + // include: runtime_strings.js + + // runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime. + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined; + + // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns + // a copy of that string as a Javascript String object. + /** + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } else { + var str = ''; + // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { + str += String.fromCharCode(u0); + continue; + } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xe0) == 0xc0) { + str += String.fromCharCode(((u0 & 31) << 6) | u1); + continue; + } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xf0) == 0xe0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xf8) != 0xf0) + warnOnce( + 'Invalid UTF-8 leading byte 0x' + + u0.toString(16) + + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!' + ); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff)); + } + } + } + return str; + } + + // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a + // copy of that string as a Javascript String object. + // maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit + // this parameter to scan the string until the first \0 byte. If maxBytesToRead is + // passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the + // middle, then the string will cut short at that byte index (i.e. maxBytesToRead will + // not produce a string of exact length [ptr, ptr+maxBytesToRead[) + // N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may + // throw JS JIT optimizations off, so it is worth to consider consistently using one + // style or the other. + /** + * @param {number} ptr + * @param {number=} maxBytesToRead + * @return {string} + */ + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + } + + // Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', + // encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. + // Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. + // Parameters: + // str: the Javascript string to copy. + // heap: the array to copy to. Each index in this array is assumed to be one 8-byte element. + // outIdx: The starting offset in the array to begin the copying. + // maxBytesToWrite: The maximum number of bytes this function can write to the array. + // This count should include the null terminator, + // i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. + // maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. + // Returns the number of bytes written, EXCLUDING the null terminator. + + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xd800 && u <= 0xdfff) { + var u1 = str.charCodeAt(++i); + u = (0x10000 + ((u & 0x3ff) << 10)) | (u1 & 0x3ff); + } + if (u <= 0x7f) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7ff) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xc0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xffff) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xe0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10ffff) + warnOnce( + 'Invalid Unicode code point 0x' + + u.toString(16) + + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).' + ); + heap[outIdx++] = 0xf0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + } + + // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', + // null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. + // Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. + // Returns the number of bytes written, EXCLUDING the null terminator. + + function stringToUTF8(str, outPtr, maxBytesToWrite) { + assert( + typeof maxBytesToWrite == 'number', + 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!' + ); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + + // Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xd800 && u <= 0xdfff) + u = (0x10000 + ((u & 0x3ff) << 10)) | (str.charCodeAt(++i) & 0x3ff); + if (u <= 0x7f) ++len; + else if (u <= 0x7ff) len += 2; + else if (u <= 0xffff) len += 3; + else len += 4; + } + return len; + } + + // end include: runtime_strings.js + // include: runtime_strings_extra.js + + // runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime. + + // Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns + // a copy of that string as a Javascript String object. + + function AsciiToString(ptr) { + var str = ''; + while (1) { + var ch = HEAPU8[ptr++ >> 0]; + if (!ch) return str; + str += String.fromCharCode(ch); + } + } + + // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', + // null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. + + function stringToAscii(str, outPtr) { + return writeAsciiToMemory(str, outPtr, false); + } + + // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns + // a copy of that string as a Javascript String object. + + var UTF16Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf-16le') : undefined; + + function UTF16ToString(ptr, maxBytesToRead) { + assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); + var endPtr = ptr; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + var idx = endPtr >> 1; + var maxIdx = idx + maxBytesToRead / 2; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; + endPtr = idx << 1; + + if (endPtr - ptr > 32 && UTF16Decoder) { + return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); + } else { + var str = ''; + + // If maxBytesToRead is not passed explicitly, it will be undefined, and the for-loop's condition + // will always evaluate to true. The loop is then terminated on the first null char. + for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { + var codeUnit = HEAP16[(ptr + i * 2) >> 1]; + if (codeUnit == 0) break; + // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } + + return str; + } + } + + // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', + // null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. + // Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. + // Parameters: + // str: the Javascript string to copy. + // outPtr: Byte address in Emscripten HEAP where to write the string to. + // maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null + // terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. + // maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. + // Returns the number of bytes written, EXCLUDING the null terminator. + + function stringToUTF16(str, outPtr, maxBytesToWrite) { + assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); + assert( + typeof maxBytesToWrite == 'number', + 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!' + ); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7fffffff; + } + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[outPtr >> 1] = codeUnit; + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + HEAP16[outPtr >> 1] = 0; + return outPtr - startPtr; + } + + // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + + function lengthBytesUTF16(str) { + return str.length * 2; + } + + function UTF32ToString(ptr, maxBytesToRead) { + assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); + var i = 0; + + var str = ''; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(i >= maxBytesToRead / 4)) { + var utf32 = HEAP32[(ptr + i * 4) >> 2]; + if (utf32 == 0) break; + ++i; + // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + if (utf32 >= 0x10000) { + var ch = utf32 - 0x10000; + str += String.fromCharCode(0xd800 | (ch >> 10), 0xdc00 | (ch & 0x3ff)); + } else { + str += String.fromCharCode(utf32); + } + } + return str; + } + + // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', + // null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. + // Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. + // Parameters: + // str: the Javascript string to copy. + // outPtr: Byte address in Emscripten HEAP where to write the string to. + // maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null + // terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. + // maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. + // Returns the number of bytes written, EXCLUDING the null terminator. + + function stringToUTF32(str, outPtr, maxBytesToWrite) { + assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); + assert( + typeof maxBytesToWrite == 'number', + 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!' + ); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7fffffff; + } + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + if (codeUnit >= 0xd800 && codeUnit <= 0xdfff) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = (0x10000 + ((codeUnit & 0x3ff) << 10)) | (trailSurrogate & 0x3ff); + } + HEAP32[outPtr >> 2] = codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + // Null-terminate the pointer to the HEAP. + HEAP32[outPtr >> 2] = 0; + return outPtr - startPtr; + } + + // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + + function lengthBytesUTF32(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 0xd800 && codeUnit <= 0xdfff) ++i; // possibly a lead surrogate, so skip over the tail surrogate. + len += 4; + } + + return len; + } + + // Allocate heap space for a JS string, and write it there. + // It is the responsibility of the caller to free() that memory. + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = abort( + 'malloc was not included, but is needed in allocateUTF8. Adding "_malloc" to EXPORTED_FUNCTIONS should fix that. This may be a bug in the compiler, please file an issue.' + ); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + + // Allocate stack space for a JS string, and write it there. + function allocateUTF8OnStack(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + + // Deprecated: This function should not be called because it is unsafe and does not provide + // a maximum length limit of how many bytes it is allowed to write. Prefer calling the + // function stringToUTF8Array() instead, which takes in a maximum length that can be used + // to be secure from out of bounds writes. + /** @deprecated + @param {boolean=} dontAddNull */ + function writeStringToMemory(string, buffer, dontAddNull) { + warnOnce( + 'writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!' + ); + + var /** @type {number} */ lastChar, /** @type {number} */ end; + if (dontAddNull) { + // stringToUTF8Array always appends null. If we don't want to do that, remember the + // character that existed at the location where the null will be placed, and restore + // that after the write (below). + end = buffer + lengthBytesUTF8(string); + lastChar = HEAP8[end]; + } + stringToUTF8(string, buffer, Infinity); + if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. + } + + function writeArrayToMemory(array, buffer) { + assert( + array.length >= 0, + 'writeArrayToMemory array must have a length (should be an array or typed array)' + ); + HEAP8.set(array, buffer); + } + + /** @param {boolean=} dontAddNull */ + function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === (str.charCodeAt(i) & 0xff)); + HEAP8[buffer++ >> 0] = str.charCodeAt(i); + } + // Null-terminate the pointer to the HEAP. + if (!dontAddNull) HEAP8[buffer >> 0] = 0; + } + + // end include: runtime_strings_extra.js + // Memory management + + var HEAP, + /** @type {!ArrayBuffer} */ + buffer, + /** @type {!Int8Array} */ + HEAP8, + /** @type {!Uint8Array} */ + HEAPU8, + /** @type {!Int16Array} */ + HEAP16, + /** @type {!Uint16Array} */ + HEAPU16, + /** @type {!Int32Array} */ + HEAP32, + /** @type {!Uint32Array} */ + HEAPU32, + /** @type {!Float32Array} */ + HEAPF32, + /** @type {!Float64Array} */ + HEAPF64; + + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module['HEAP8'] = HEAP8 = new Int8Array(buf); + Module['HEAP16'] = HEAP16 = new Int16Array(buf); + Module['HEAP32'] = HEAP32 = new Int32Array(buf); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf); + Module['HEAPF32'] = HEAPF32 = new Float32Array(buf); + Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); + } + + var TOTAL_STACK = 5242880; + if (Module['TOTAL_STACK']) + assert( + TOTAL_STACK === Module['TOTAL_STACK'], + 'the stack size can no longer be determined at runtime' + ); + + var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216; + legacyModuleProp('INITIAL_MEMORY', 'INITIAL_MEMORY'); + + assert( + INITIAL_MEMORY >= TOTAL_STACK, + 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + + INITIAL_MEMORY + + '! (TOTAL_STACK=' + + TOTAL_STACK + + ')' + ); + + // check for full engine support (use string 'subarray' to avoid closure compiler confusion) + assert( + typeof Int32Array != 'undefined' && + typeof Float64Array !== 'undefined' && + Int32Array.prototype.subarray != undefined && + Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support' + ); + + // If memory is defined in wasm, the user can't provide it. + assert( + !Module['wasmMemory'], + 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally' + ); + assert( + INITIAL_MEMORY == 16777216, + 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically' + ); + + // include: runtime_init_table.js + // In regular non-RELOCATABLE mode the table is exported + // from the wasm module and this will be assigned once + // the exports are available. + var wasmTable; + + // end include: runtime_init_table.js + // include: runtime_stack_check.js + + // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. + function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAP32[max >> 2] = 0x2135467; + HEAP32[(max + 4) >> 2] = 0x89bacdfe; + // Also test the global address 0 for integrity. + HEAP32[0] = 0x63736d65; /* 'emsc' */ + } + + function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + var cookie1 = HEAPU32[max >> 2]; + var cookie2 = HEAPU32[(max + 4) >> 2]; + if (cookie1 != 0x2135467 || cookie2 != 0x89bacdfe) { + abort( + 'Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + + cookie2.toString(16) + + ' 0x' + + cookie1.toString(16) + ); + } + // Also test the global address 0 for integrity. + if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } + + // end include: runtime_stack_check.js + // include: runtime_assertions.js + + // Endianness check + (function () { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) + throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; + })(); + + // end include: runtime_assertions.js + var __ATPRERUN__ = []; // functions called before the runtime is initialized + var __ATINIT__ = []; // functions called during startup + var __ATEXIT__ = []; // functions called during shutdown + var __ATPOSTRUN__ = []; // functions called after the main() is called + + var runtimeInitialized = false; + + function keepRuntimeAlive() { + return noExitRuntime; + } + + function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPRERUN__); + } + + function initRuntime() { + checkStackCookie(); + assert(!runtimeInitialized); + runtimeInitialized = true; + + callRuntimeCallbacks(__ATINIT__); + } + + function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); + } + + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + + function addOnExit(cb) {} + + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + + // include: runtime_math.js + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc + + assert( + Math.imul, + 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill' + ); + assert( + Math.fround, + 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill' + ); + assert( + Math.clz32, + 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill' + ); + assert( + Math.trunc, + 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill' + ); + + // end include: runtime_math.js + // A counter of dependencies for calling run(). If we need to + // do asynchronous work before running, increment this and + // decrement it. Incrementing must happen in a place like + // Module.preRun (used by emcc to add file preloading). + // Note that you can add dependencies in preRun, even though + // it happens right before run - run will be postponed until + // the dependencies are met. + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled + var runDependencyTracking = {}; + + function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } + } + + function addRunDependency(id) { + runDependencies++; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(function () { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err('dependency: ' + dep); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } + } + + function removeRunDependency(id) { + runDependencies--; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } + } + + /** @param {string|number=} what */ + function abort(what) { + { + if (Module['onAbort']) { + Module['onAbort'](what); + } + } + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + EXITSTATUS = 1; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // defintion for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + readyPromiseReject(e); + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; + } + + // {{MEM_INITIALIZER}} + + // include: memoryprofiler.js + + // end include: memoryprofiler.js + // show errors on likely calls to FS when it was not included + var FS = { + error: function () { + abort( + 'Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM' + ); + }, + init: function () { + FS.error(); + }, + createDataFile: function () { + FS.error(); + }, + createPreloadedFile: function () { + FS.error(); + }, + createLazyFile: function () { + FS.error(); + }, + open: function () { + FS.error(); + }, + mkdev: function () { + FS.error(); + }, + registerDevice: function () { + FS.error(); + }, + analyzePath: function () { + FS.error(); + }, + loadFilesFromDB: function () { + FS.error(); + }, + + ErrnoError: function ErrnoError() { + FS.error(); + } + }; + Module['FS_createDataFile'] = FS.createDataFile; + Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + + // include: URIUtils.js + + // Prefix of data URIs emitted by SINGLE_FILE and related options. + var dataURIPrefix = 'data:application/octet-stream;base64,'; + + // Indicates whether filename is a base64 data URI. + function isDataURI(filename) { + // Prefix of data URIs emitted by SINGLE_FILE and related options. + return filename.startsWith(dataURIPrefix); + } + + // Indicates whether filename is delivered via file protocol (as opposed to http/https) + function isFileURI(filename) { + return filename.startsWith('file://'); + } + + // end include: URIUtils.js + /** @param {boolean=} fixedasm */ + function createExportWrapper(name, fixedasm) { + return function () { + var displayName = name; + var asm = fixedasm; + if (!fixedasm) { + asm = Module['asm']; + } + assert( + runtimeInitialized, + 'native function `' + displayName + '` called before runtime initialization' + ); + if (!asm[name]) { + assert(asm[name], 'exported native function `' + displayName + '` not found'); + } + return asm[name].apply(null, arguments); + }; + } + + var wasmBinaryFile; + if (Module['locateFile']) { + wasmBinaryFile = 'add.emcc.wasm'; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + } else { + // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too. + wasmBinaryFile = new URL('add.emcc.wasm', import.meta.url).toString(); + } + + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw 'both async and sync fetching of the wasm failed'; + } + } catch (err) { + abort(err); + } + } + + function getBinaryPromise() { + // If we don't have the binary yet, try to to load it asynchronously. + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use fetch if it is available and the url is not a file, otherwise fall back to XHR. + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch == 'function' && !isFileURI(wasmBinaryFile)) { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }) + .then(function (response) { + if (!response['ok']) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response['arrayBuffer'](); + }) + .catch(function () { + return getBinary(wasmBinaryFile); + }); + } else { + if (readAsync) { + // fetch is not available or url is file => try XHR (readAsync uses XHR internally) + return new Promise(function (resolve, reject) { + readAsync( + wasmBinaryFile, + function (response) { + resolve(new Uint8Array(/** @type{!ArrayBuffer} */ (response))); + }, + reject + ); + }); + } + } + } + + // Otherwise, getBinary should be able to get it synchronously + return Promise.resolve().then(function () { + return getBinary(wasmBinaryFile); + }); + } + + // Create the wasm instance. + // Receives the wasm imports, returns the exports. + function createWasm() { + // prepare imports + var info = { + env: asmLibraryArg, + wasi_snapshot_preview1: asmLibraryArg + }; + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + var exports = instance.exports; + + Module['asm'] = exports; + + wasmMemory = Module['asm']['memory']; + assert(wasmMemory, 'memory not found in wasm exports'); + // This assertion doesn't hold when emscripten is run in --post-link + // mode. + // TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode. + //assert(wasmMemory.buffer.byteLength === 16777216); + updateGlobalBufferAndViews(wasmMemory.buffer); + + wasmTable = Module['asm']['__indirect_function_table']; + assert(wasmTable, 'table not found in wasm exports'); + + addOnInit(Module['asm']['__wasm_call_ctors']); + + removeRunDependency('wasm-instantiate'); + } + // we can't run yet (except in a pthread, where we have a custom sync instantiator) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert( + Module === trueModule, + 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?' + ); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above USE_PTHREADS-enabled path. + receiveInstance(result['instance']); + } + + function instantiateArrayBuffer(receiver) { + return getBinaryPromise() + .then(function (binary) { + return WebAssembly.instantiate(binary, info); + }) + .then(function (instance) { + return instance; + }) + .then(receiver, function (reason) { + err('failed to asynchronously prepare wasm: ' + reason); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err( + 'warning: Loading from a file URI (' + + wasmBinaryFile + + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing' + ); + } + abort(reason); + }); + } + + function instantiateAsync() { + if ( + !wasmBinary && + typeof WebAssembly.instantiateStreaming == 'function' && + !isDataURI(wasmBinaryFile) && + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(wasmBinaryFile) && + typeof fetch == 'function' + ) { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { + // Suppress closure warning here since the upstream definition for + // instantiateStreaming only allows Promise rather than + // an actual Response. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed. + /** @suppress {checkTypes} */ + var result = WebAssembly.instantiateStreaming(response, info); + + return result.then(receiveInstantiationResult, function (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err('wasm streaming compile failed: ' + reason); + err('falling back to ArrayBuffer instantiation'); + return instantiateArrayBuffer(receiveInstantiationResult); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiationResult); + } + } + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel + // to any other async startup actions they are performing. + // Also pthreads and wasm workers initialize the wasm instance through this path. + if (Module['instantiateWasm']) { + try { + var exports = Module['instantiateWasm'](info, receiveInstance); + return exports; + } catch (e) { + err('Module.instantiateWasm callback failed with error: ' + e); + return false; + } + } + + // If instantiation fails, reject the module ready promise. + instantiateAsync().catch(readyPromiseReject); + return {}; // no exports yet; we'll fill them in later + } + + // Globals used by JS i64 conversions (see makeSetValue) + var tempDouble; + var tempI64; + + // === Body === + + var ASM_CONSTS = {}; + + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == 'function') { + callback(Module); // Pass the module as the first argument. + continue; + } + var func = callback.func; + if (typeof func == 'number') { + if (callback.arg === undefined) { + // Run the wasm function ptr with signature 'v'. If no function + // with such signature was exported, this call does not need + // to be emitted (and would confuse Closure) + getWasmTableEntry(func)(); + } else { + // If any function with signature 'vi' was exported, run + // the callback with that signature. + getWasmTableEntry(func)(callback.arg); + } + } else { + func(callback.arg === undefined ? null : callback.arg); + } + } + } + + function withStackSave(f) { + var stack = stackSave(); + var ret = f(); + stackRestore(stack); + return ret; + } + function demangle(func) { + warnOnce('warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling'); + return func; + } + + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function (x) { + var y = demangle(x); + return x === y ? x : y + ' [' + x + ']'; + }); + } + + var wasmTableMirror = []; + function getWasmTableEntry(funcPtr) { + var func = wasmTableMirror[funcPtr]; + if (!func) { + if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1; + wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr); + } + assert( + wasmTable.get(funcPtr) == func, + 'JavaScript-side Wasm function table mirror is out of date!' + ); + return func; + } + + function handleException(e) { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + quit_(1, e); + } + + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + // IE10+ special cases: It does have callstack info, but it is only + // populated if an Error object is thrown, so try that as a special-case. + try { + throw new Error(); + } catch (e) { + error = e; + } + if (!error.stack) { + return '(no stack trace available)'; + } + } + return error.stack.toString(); + } + + function setWasmTableEntry(idx, func) { + wasmTable.set(idx, func); + // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overriden to return wrapped + // functions so we need to call it here to retrieve the potential wrapper correctly + // instead of just storing 'func' directly into wasmTableMirror + wasmTableMirror[idx] = wasmTable.get(idx); + } + + function stackTrace() { + var js = jsStackTrace(); + if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); + return demangleAll(js); + } + var ASSERTIONS = true; + + /** @type {function(string, boolean=, number=)} */ + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + } + + function intArrayToString(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + var chr = array[i]; + if (chr > 0xff) { + if (ASSERTIONS) { + assert( + false, + 'Character code ' + + chr + + ' (' + + String.fromCharCode(chr) + + ') at offset ' + + i + + ' not in 0x00-0xFF.' + ); + } + chr &= 0xff; + } + ret.push(String.fromCharCode(chr)); + } + return ret.join(''); + } + + function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); + } + var asmLibraryArg = {}; + var asm = createWasm(); + /** @type {function(...*):?} */ + var ___wasm_call_ctors = (Module['___wasm_call_ctors'] = + createExportWrapper('__wasm_call_ctors')); + + /** @type {function(...*):?} */ + var _add = (Module['_add'] = createExportWrapper('add')); + + /** @type {function(...*):?} */ + var ___errno_location = (Module['___errno_location'] = createExportWrapper('__errno_location')); + + /** @type {function(...*):?} */ + var ___stdio_exit = (Module['___stdio_exit'] = createExportWrapper('__stdio_exit')); + + /** @type {function(...*):?} */ + var _emscripten_stack_init = (Module['_emscripten_stack_init'] = function () { + return (_emscripten_stack_init = Module['_emscripten_stack_init'] = + Module['asm']['emscripten_stack_init']).apply(null, arguments); + }); + + /** @type {function(...*):?} */ + var _emscripten_stack_get_free = (Module['_emscripten_stack_get_free'] = function () { + return (_emscripten_stack_get_free = Module['_emscripten_stack_get_free'] = + Module['asm']['emscripten_stack_get_free']).apply(null, arguments); + }); + + /** @type {function(...*):?} */ + var _emscripten_stack_get_base = (Module['_emscripten_stack_get_base'] = function () { + return (_emscripten_stack_get_base = Module['_emscripten_stack_get_base'] = + Module['asm']['emscripten_stack_get_base']).apply(null, arguments); + }); + + /** @type {function(...*):?} */ + var _emscripten_stack_get_end = (Module['_emscripten_stack_get_end'] = function () { + return (_emscripten_stack_get_end = Module['_emscripten_stack_get_end'] = + Module['asm']['emscripten_stack_get_end']).apply(null, arguments); + }); + + /** @type {function(...*):?} */ + var stackSave = (Module['stackSave'] = createExportWrapper('stackSave')); + + /** @type {function(...*):?} */ + var stackRestore = (Module['stackRestore'] = createExportWrapper('stackRestore')); + + /** @type {function(...*):?} */ + var stackAlloc = (Module['stackAlloc'] = createExportWrapper('stackAlloc')); + + // === Auto-generated postamble setup entry stuff === + + unexportedRuntimeFunction('intArrayFromString', false); + unexportedRuntimeFunction('intArrayToString', false); + unexportedRuntimeFunction('ccall', false); + unexportedRuntimeFunction('cwrap', false); + unexportedRuntimeFunction('setValue', false); + unexportedRuntimeFunction('getValue', false); + unexportedRuntimeFunction('allocate', false); + unexportedRuntimeFunction('UTF8ArrayToString', false); + unexportedRuntimeFunction('UTF8ToString', false); + unexportedRuntimeFunction('stringToUTF8Array', false); + unexportedRuntimeFunction('stringToUTF8', false); + unexportedRuntimeFunction('lengthBytesUTF8', false); + unexportedRuntimeFunction('stackTrace', false); + unexportedRuntimeFunction('addOnPreRun', false); + unexportedRuntimeFunction('addOnInit', false); + unexportedRuntimeFunction('addOnPreMain', false); + unexportedRuntimeFunction('addOnExit', false); + unexportedRuntimeFunction('addOnPostRun', false); + unexportedRuntimeFunction('writeStringToMemory', false); + unexportedRuntimeFunction('writeArrayToMemory', false); + unexportedRuntimeFunction('writeAsciiToMemory', false); + unexportedRuntimeFunction('addRunDependency', true); + unexportedRuntimeFunction('removeRunDependency', true); + unexportedRuntimeFunction('FS_createFolder', false); + unexportedRuntimeFunction('FS_createPath', true); + unexportedRuntimeFunction('FS_createDataFile', true); + unexportedRuntimeFunction('FS_createPreloadedFile', true); + unexportedRuntimeFunction('FS_createLazyFile', true); + unexportedRuntimeFunction('FS_createLink', false); + unexportedRuntimeFunction('FS_createDevice', true); + unexportedRuntimeFunction('FS_unlink', true); + unexportedRuntimeFunction('getLEB', false); + unexportedRuntimeFunction('getFunctionTables', false); + unexportedRuntimeFunction('alignFunctionTables', false); + unexportedRuntimeFunction('registerFunctions', false); + unexportedRuntimeFunction('addFunction', false); + unexportedRuntimeFunction('removeFunction', false); + unexportedRuntimeFunction('prettyPrint', false); + unexportedRuntimeFunction('dynCall', false); + unexportedRuntimeFunction('getCompilerSetting', false); + unexportedRuntimeFunction('print', false); + unexportedRuntimeFunction('printErr', false); + unexportedRuntimeFunction('getTempRet0', false); + unexportedRuntimeFunction('setTempRet0', false); + unexportedRuntimeFunction('callMain', false); + unexportedRuntimeFunction('abort', false); + unexportedRuntimeFunction('keepRuntimeAlive', false); + unexportedRuntimeFunction('ptrToString', false); + unexportedRuntimeFunction('zeroMemory', false); + unexportedRuntimeFunction('stringToNewUTF8', false); + unexportedRuntimeFunction('abortOnCannotGrowMemory', false); + unexportedRuntimeFunction('emscripten_realloc_buffer', false); + unexportedRuntimeFunction('ENV', false); + unexportedRuntimeFunction('ERRNO_CODES', false); + unexportedRuntimeFunction('ERRNO_MESSAGES', false); + unexportedRuntimeFunction('setErrNo', false); + unexportedRuntimeFunction('inetPton4', false); + unexportedRuntimeFunction('inetNtop4', false); + unexportedRuntimeFunction('inetPton6', false); + unexportedRuntimeFunction('inetNtop6', false); + unexportedRuntimeFunction('readSockaddr', false); + unexportedRuntimeFunction('writeSockaddr', false); + unexportedRuntimeFunction('DNS', false); + unexportedRuntimeFunction('getHostByName', false); + unexportedRuntimeFunction('Protocols', false); + unexportedRuntimeFunction('Sockets', false); + unexportedRuntimeFunction('getRandomDevice', false); + unexportedRuntimeFunction('traverseStack', false); + unexportedRuntimeFunction('UNWIND_CACHE', false); + unexportedRuntimeFunction('convertPCtoSourceLocation', false); + unexportedRuntimeFunction('readAsmConstArgsArray', false); + unexportedRuntimeFunction('readAsmConstArgs', false); + unexportedRuntimeFunction('mainThreadEM_ASM', false); + unexportedRuntimeFunction('jstoi_q', false); + unexportedRuntimeFunction('jstoi_s', false); + unexportedRuntimeFunction('getExecutableName', false); + unexportedRuntimeFunction('listenOnce', false); + unexportedRuntimeFunction('autoResumeAudioContext', false); + unexportedRuntimeFunction('dynCallLegacy', false); + unexportedRuntimeFunction('getDynCaller', false); + unexportedRuntimeFunction('dynCall', false); + unexportedRuntimeFunction('handleException', false); + unexportedRuntimeFunction('runtimeKeepalivePush', false); + unexportedRuntimeFunction('runtimeKeepalivePop', false); + unexportedRuntimeFunction('callUserCallback', false); + unexportedRuntimeFunction('maybeExit', false); + unexportedRuntimeFunction('safeSetTimeout', false); + unexportedRuntimeFunction('asmjsMangle', false); + unexportedRuntimeFunction('asyncLoad', false); + unexportedRuntimeFunction('alignMemory', false); + unexportedRuntimeFunction('mmapAlloc', false); + unexportedRuntimeFunction('reallyNegative', false); + unexportedRuntimeFunction('unSign', false); + unexportedRuntimeFunction('reSign', false); + unexportedRuntimeFunction('formatString', false); + unexportedRuntimeFunction('PATH', false); + unexportedRuntimeFunction('PATH_FS', false); + unexportedRuntimeFunction('SYSCALLS', false); + unexportedRuntimeFunction('getSocketFromFD', false); + unexportedRuntimeFunction('getSocketAddress', false); + unexportedRuntimeFunction('JSEvents', false); + unexportedRuntimeFunction('registerKeyEventCallback', false); + unexportedRuntimeFunction('specialHTMLTargets', false); + unexportedRuntimeFunction('maybeCStringToJsString', false); + unexportedRuntimeFunction('findEventTarget', false); + unexportedRuntimeFunction('findCanvasEventTarget', false); + unexportedRuntimeFunction('getBoundingClientRect', false); + unexportedRuntimeFunction('fillMouseEventData', false); + unexportedRuntimeFunction('registerMouseEventCallback', false); + unexportedRuntimeFunction('registerWheelEventCallback', false); + unexportedRuntimeFunction('registerUiEventCallback', false); + unexportedRuntimeFunction('registerFocusEventCallback', false); + unexportedRuntimeFunction('fillDeviceOrientationEventData', false); + unexportedRuntimeFunction('registerDeviceOrientationEventCallback', false); + unexportedRuntimeFunction('fillDeviceMotionEventData', false); + unexportedRuntimeFunction('registerDeviceMotionEventCallback', false); + unexportedRuntimeFunction('screenOrientation', false); + unexportedRuntimeFunction('fillOrientationChangeEventData', false); + unexportedRuntimeFunction('registerOrientationChangeEventCallback', false); + unexportedRuntimeFunction('fillFullscreenChangeEventData', false); + unexportedRuntimeFunction('registerFullscreenChangeEventCallback', false); + unexportedRuntimeFunction('registerRestoreOldStyle', false); + unexportedRuntimeFunction('hideEverythingExceptGivenElement', false); + unexportedRuntimeFunction('restoreHiddenElements', false); + unexportedRuntimeFunction('setLetterbox', false); + unexportedRuntimeFunction('currentFullscreenStrategy', false); + unexportedRuntimeFunction('restoreOldWindowedStyle', false); + unexportedRuntimeFunction('softFullscreenResizeWebGLRenderTarget', false); + unexportedRuntimeFunction('doRequestFullscreen', false); + unexportedRuntimeFunction('fillPointerlockChangeEventData', false); + unexportedRuntimeFunction('registerPointerlockChangeEventCallback', false); + unexportedRuntimeFunction('registerPointerlockErrorEventCallback', false); + unexportedRuntimeFunction('requestPointerLock', false); + unexportedRuntimeFunction('fillVisibilityChangeEventData', false); + unexportedRuntimeFunction('registerVisibilityChangeEventCallback', false); + unexportedRuntimeFunction('registerTouchEventCallback', false); + unexportedRuntimeFunction('fillGamepadEventData', false); + unexportedRuntimeFunction('registerGamepadEventCallback', false); + unexportedRuntimeFunction('registerBeforeUnloadEventCallback', false); + unexportedRuntimeFunction('fillBatteryEventData', false); + unexportedRuntimeFunction('battery', false); + unexportedRuntimeFunction('registerBatteryEventCallback', false); + unexportedRuntimeFunction('setCanvasElementSize', false); + unexportedRuntimeFunction('getCanvasElementSize', false); + unexportedRuntimeFunction('demangle', false); + unexportedRuntimeFunction('demangleAll', false); + unexportedRuntimeFunction('jsStackTrace', false); + unexportedRuntimeFunction('stackTrace', false); + unexportedRuntimeFunction('getEnvStrings', false); + unexportedRuntimeFunction('checkWasiClock', false); + unexportedRuntimeFunction('flush_NO_FILESYSTEM', false); + unexportedRuntimeFunction('writeI53ToI64', false); + unexportedRuntimeFunction('writeI53ToI64Clamped', false); + unexportedRuntimeFunction('writeI53ToI64Signaling', false); + unexportedRuntimeFunction('writeI53ToU64Clamped', false); + unexportedRuntimeFunction('writeI53ToU64Signaling', false); + unexportedRuntimeFunction('readI53FromI64', false); + unexportedRuntimeFunction('readI53FromU64', false); + unexportedRuntimeFunction('convertI32PairToI53', false); + unexportedRuntimeFunction('convertU32PairToI53', false); + unexportedRuntimeFunction('dlopenMissingError', false); + unexportedRuntimeFunction('setImmediateWrapped', false); + unexportedRuntimeFunction('clearImmediateWrapped', false); + unexportedRuntimeFunction('polyfillSetImmediate', false); + unexportedRuntimeFunction('uncaughtExceptionCount', false); + unexportedRuntimeFunction('exceptionLast', false); + unexportedRuntimeFunction('exceptionCaught', false); + unexportedRuntimeFunction('ExceptionInfo', false); + unexportedRuntimeFunction('exception_addRef', false); + unexportedRuntimeFunction('exception_decRef', false); + unexportedRuntimeFunction('Browser', false); + unexportedRuntimeFunction('setMainLoop', false); + unexportedRuntimeFunction('wget', false); + unexportedRuntimeFunction('FS', false); + unexportedRuntimeFunction('MEMFS', false); + unexportedRuntimeFunction('TTY', false); + unexportedRuntimeFunction('PIPEFS', false); + unexportedRuntimeFunction('SOCKFS', false); + unexportedRuntimeFunction('_setNetworkCallback', false); + unexportedRuntimeFunction('tempFixedLengthArray', false); + unexportedRuntimeFunction('miniTempWebGLFloatBuffers', false); + unexportedRuntimeFunction('heapObjectForWebGLType', false); + unexportedRuntimeFunction('heapAccessShiftForWebGLHeap', false); + unexportedRuntimeFunction('GL', false); + unexportedRuntimeFunction('emscriptenWebGLGet', false); + unexportedRuntimeFunction('computeUnpackAlignedImageSize', false); + unexportedRuntimeFunction('emscriptenWebGLGetTexPixelData', false); + unexportedRuntimeFunction('emscriptenWebGLGetUniform', false); + unexportedRuntimeFunction('webglGetUniformLocation', false); + unexportedRuntimeFunction('webglPrepareUniformLocationsBeforeFirstUse', false); + unexportedRuntimeFunction('webglGetLeftBracePos', false); + unexportedRuntimeFunction('emscriptenWebGLGetVertexAttrib', false); + unexportedRuntimeFunction('writeGLArray', false); + unexportedRuntimeFunction('AL', false); + unexportedRuntimeFunction('SDL_unicode', false); + unexportedRuntimeFunction('SDL_ttfContext', false); + unexportedRuntimeFunction('SDL_audio', false); + unexportedRuntimeFunction('SDL', false); + unexportedRuntimeFunction('SDL_gfx', false); + unexportedRuntimeFunction('GLUT', false); + unexportedRuntimeFunction('EGL', false); + unexportedRuntimeFunction('GLFW_Window', false); + unexportedRuntimeFunction('GLFW', false); + unexportedRuntimeFunction('GLEW', false); + unexportedRuntimeFunction('IDBStore', false); + unexportedRuntimeFunction('runAndAbortIfError', false); + unexportedRuntimeFunction('warnOnce', false); + unexportedRuntimeFunction('stackSave', false); + unexportedRuntimeFunction('stackRestore', false); + unexportedRuntimeFunction('stackAlloc', false); + unexportedRuntimeFunction('AsciiToString', false); + unexportedRuntimeFunction('stringToAscii', false); + unexportedRuntimeFunction('UTF16ToString', false); + unexportedRuntimeFunction('stringToUTF16', false); + unexportedRuntimeFunction('lengthBytesUTF16', false); + unexportedRuntimeFunction('UTF32ToString', false); + unexportedRuntimeFunction('stringToUTF32', false); + unexportedRuntimeFunction('lengthBytesUTF32', false); + unexportedRuntimeFunction('allocateUTF8', false); + unexportedRuntimeFunction('allocateUTF8OnStack', false); + Module['writeStackCookie'] = writeStackCookie; + Module['checkStackCookie'] = checkStackCookie; + unexportedRuntimeSymbol('ALLOC_NORMAL', false); + unexportedRuntimeSymbol('ALLOC_STACK', false); + + var calledRun; + + /** + * @constructor + * @this {ExitStatus} + */ + function ExitStatus(status) { + this.name = 'ExitStatus'; + this.message = 'Program terminated with exit(' + status + ')'; + this.status = status; + } + + var calledMain = false; + + dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled + }; + + function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + // TODO(sbc): Move writeStackCookie to native to to avoid this. + _emscripten_stack_init(); + writeStackCookie(); + } + + /** @type {function(Array=)} */ + function run(args) { + args = args || arguments_; + + if (runDependencies > 0) { + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + if (calledRun) return; + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + readyPromiseResolve(Module); + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + assert( + !Module['_main'], + 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]' + ); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function () { + setTimeout(function () { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + checkStackCookie(); + } + Module['run'] = run; + + function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + }; + try { + // it doesn't matter if it fails + var flush = null; + if (flush) flush(); + } catch (e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce( + 'stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.' + ); + warnOnce( + '(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)' + ); + } + } + + /** @param {boolean|number=} implicit */ + function exit(status, implicit) { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = + 'program exited (with status: ' + + status + + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)'; + readyPromiseReject(msg); + err(msg); + } + + procExit(status); + } + + function procExit(code) { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + if (Module['onExit']) Module['onExit'](code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + } + + if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } + } + + run(); + + /// + /** Above will import declarations from @types/emscripten, including Module etc. */ + /** It is not .ts file but declaring reference will pass TypeScript Check. */ + + Module['onRuntimeInitialized'] = function () { + // Just Module._add() will work, but I'm just demontrating usage of cwrap + Module['add'] = cwrap('add', 'number', ['number', 'number']); + }; + + return createAddModule.ready; + }; +})(); +export default createAddModule; diff --git a/src/lib/wasm/add.emcc.wasm b/src/lib/wasm/add.emcc.wasm new file mode 100755 index 0000000..f84eb04 Binary files /dev/null and b/src/lib/wasm/add.emcc.wasm differ diff --git a/src/lib/wasm/add.post.emcc.js b/src/lib/wasm/add.post.emcc.js new file mode 100644 index 0000000..b4b0496 --- /dev/null +++ b/src/lib/wasm/add.post.emcc.js @@ -0,0 +1,8 @@ +/// +/** Above will import declarations from @types/emscripten, including Module etc. */ +/** It is not .ts file but declaring reference will pass TypeScript Check. */ + +Module['onRuntimeInitialized'] = function () { + // Just Module._add() will work, but I'm just demontrating usage of cwrap + Module['add'] = cwrap('add', 'number', ['number', 'number']); +}; diff --git a/src/lib/wasm/build.sh b/src/lib/wasm/build.sh new file mode 100644 index 0000000..e239bd1 --- /dev/null +++ b/src/lib/wasm/build.sh @@ -0,0 +1,6 @@ +emcc add.c -o add.emcc.js \ + -s EXPORTED_FUNCTIONS="['_add']" \ + -s MODULARIZE=1 \ + -s EXPORT_ES6=1 \ + -s EXPORT_NAME="create_add_module" \ + --post-js add.post.emcc.js \ No newline at end of file diff --git a/src/routes/index.svelte b/src/routes/index.svelte index c72a806..84e767c 100644 --- a/src/routes/index.svelte +++ b/src/routes/index.svelte @@ -1,16 +1,9 @@ - - -

Welcome to SvelteKit

-

Visit kit.svelte.dev to read the documentation

+
+
+ +
+
diff --git a/svelte.config.js b/svelte.config.js index dcfcece..cc4436b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -14,15 +14,17 @@ const config = { }) ], + compilerOptions: { + generate: 'dom' // + }, + kit: { adapter: adapter({ - // if true, will create a Netlify Edge Function rather - // than using standard Node-based functions + // We don't need any of netlify's edge functions, etc. + // + // We need netlify (or something beyond github pages) because it allows us to send + // the response headers required by SharedArrayBuffer. edge: false, - - // if true, will split your app into multiple functions - // instead of creating a single one for the entire app. - // if `edge` is true, this option cannot be used split: false }), @@ -42,9 +44,7 @@ const config = { } }, - build: { - ssr: false - }, + build: {}, server: { headers: { diff --git a/tsconfig.json b/tsconfig.json index 232d647..d3a2b67 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,13 +5,23 @@ "checkJs": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "lib": ["es2020", "DOM"], + "lib": ["es2020", "DOM", "WebWorker"], "moduleResolution": "node", "module": "es2020", "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, "strict": true, - "target": "es2020" - } + "target": "es2020", + "paths": { + "$lib": ["src/lib"], + "$lib/*": ["src/lib/*"], + "$components": ["src/components"], + "$components/*": ["src/components/*"], + "$containers": ["src/containers"], + "$containers/*": ["src/containers/*"] + } + }, + "include": ["src/**/*.js", "src/**/*.ts", "src/**/*.d.ts", "src/**/*.svelte"], + "exclude": ["node_modules/**", "./.svelte-kit/**", "./src/**/*.emcc.js", "scripts/**"] }