diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b6924528f6..84bb3d263d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,6 +37,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" # Workaround for yarn install timeouts, especially on Windows - run: yarn config set network-timeout 300000 diff --git a/.github/workflows/build_develop.yml b/.github/workflows/build_develop.yml index 96b96c8398..2407d2e6f1 100644 --- a/.github/workflows/build_develop.yml +++ b/.github/workflows/build_develop.yml @@ -26,6 +26,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" - name: Install Dependencies run: "./scripts/layered.sh" diff --git a/.github/workflows/static_analysis.yaml b/.github/workflows/static_analysis.yaml index 2caa342b6b..ed0148f36c 100644 --- a/.github/workflows/static_analysis.yaml +++ b/.github/workflows/static_analysis.yaml @@ -21,6 +21,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" - name: Install Dependencies run: "./scripts/layered.sh" @@ -43,6 +44,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" # Does not need branch matching as only analyses this layer - name: Install Deps @@ -60,6 +62,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" # Needs branch matching as it inherits .stylelintrc.js from matrix-react-sdk - name: Install Dependencies @@ -77,6 +80,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" # Does not need branch matching as only analyses this layer - name: Install Deps @@ -94,6 +98,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" - name: Install Deps run: "scripts/layered.sh" diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b654b2a3a2..01965af419 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -23,6 +23,7 @@ jobs: uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" - name: Install Dependencies run: "./scripts/layered.sh" diff --git a/.github/workflows/update-jitsi.yml b/.github/workflows/update-jitsi.yml index 383ed0b1c8..cf25e602e5 100644 --- a/.github/workflows/update-jitsi.yml +++ b/.github/workflows/update-jitsi.yml @@ -13,6 +13,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: "yarn" + node-version: "lts/*" - name: Install Deps run: "yarn install --frozen-lockfile" diff --git a/package.json b/package.json index 17454356a6..6b1d3c4724 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,6 @@ "@types/react": "17.0.80" }, "dependencies": { - "@matrix-org/olm": "3.2.15", "@matrix-org/react-sdk-module-api": "^2.3.0", "jsrsasign": "^11.0.0", "katex": "^0.16.0", diff --git a/src/vector/index.html b/src/vector/index.html index f5213701cf..37a1d294bd 100644 --- a/src/vector/index.html +++ b/src/vector/index.html @@ -81,31 +81,6 @@ - - - - - - -
diff --git a/src/vector/index.ts b/src/vector/index.ts index c5fee22a04..b5255d4974 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -56,8 +56,8 @@ function checkBrowserFeatures(): boolean { return false; } - // Custom checks atop Modernizr because it doesn't have ES2018/ES2019 checks - // in it for some features we depend on. + // Custom checks atop Modernizr because it doesn't have checks in it for + // some features we depend on. // Modernizr requires rules to be lowercase with no punctuation. // ES2018: http://262.ecma-international.org/9.0/#sec-promise.prototype.finally window.Modernizr.addTest("promiseprototypefinally", () => typeof window.Promise?.prototype?.finally === "function"); @@ -70,6 +70,13 @@ function checkBrowserFeatures(): boolean { ); // ES2019: http://262.ecma-international.org/10.0/#sec-object.fromentries window.Modernizr.addTest("objectfromentries", () => typeof window.Object?.fromEntries === "function"); + // ES2024: https://tc39.es/ecma262/2024/#sec-get-regexp.prototype.unicodesets + window.Modernizr.addTest( + "regexpunicodesets", + () => window.RegExp?.prototype && "unicodeSets" in window.RegExp.prototype, + ); + // ES2024: https://402.ecma-international.org/9.0/#sec-intl.segmenter + window.Modernizr.addTest("intlsegmenter", () => typeof window.Intl?.Segmenter === "function"); const featureList = Object.keys(window.Modernizr) as Array; @@ -105,7 +112,6 @@ async function start(): Promise { rageshakePromise, setupLogStorage, preparePlatform, - loadOlm, loadConfig, loadLanguage, loadTheme, @@ -143,7 +149,6 @@ async function start(): Promise { } } - const loadOlmPromise = loadOlm(); // set the platform for react sdk preparePlatform(); // load config requires the platform to be ready @@ -210,7 +215,6 @@ async function start(): Promise { // app load critical path starts here // assert things started successfully // ################################## - await loadOlmPromise; await loadModulesPromise; await loadThemePromise; await loadLanguagePromise; diff --git a/src/vector/init.tsx b/src/vector/init.tsx index f5db07ba67..9885f567a7 100644 --- a/src/vector/init.tsx +++ b/src/vector/init.tsx @@ -17,10 +17,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import olmWasmPath from "@matrix-org/olm/olm.wasm"; -import Olm from "@matrix-org/olm"; import * as ReactDOM from "react-dom"; import * as React from "react"; import * as languageHandler from "matrix-react-sdk/src/languageHandler"; @@ -76,48 +72,6 @@ export async function loadConfig(): Promise { } } -export function loadOlm(): Promise { - /* Load Olm. We try the WebAssembly version first, and then the legacy, - * asm.js version if that fails. For this reason we need to wait for this - * to finish before continuing to load the rest of the app. In future - * we could somehow pass a promise down to react-sdk and have it wait on - * that so olm can be loading in parallel with the rest of the app. - * - * We also need to tell the Olm js to look for its wasm file at the same - * level as index.html. It really should be in the same place as the js, - * ie. in the bundle directory, but as far as I can tell this is - * completely impossible with webpack. We do, however, use a hashed - * filename to avoid caching issues. - */ - return Olm.init({ - locateFile: () => olmWasmPath, - }) - .then(() => { - logger.log("Using WebAssembly Olm"); - }) - .catch((wasmLoadError) => { - logger.log("Failed to load Olm: trying legacy version", wasmLoadError); - return new Promise((resolve, reject) => { - const s = document.createElement("script"); - s.src = "olm_legacy.js"; // XXX: This should be cache-busted too - s.onload = resolve; - s.onerror = reject; - document.body.appendChild(s); - }) - .then(() => { - // Init window.Olm, ie. the one just loaded by the script tag, - // not 'Olm' which is still the failed wasm version. - return window.Olm.init(); - }) - .then(() => { - logger.log("Using legacy Olm"); - }) - .catch((legacyLoadError) => { - logger.log("Both WebAssembly and asm.js Olm failed!", legacyLoadError); - }); - }); -} - export async function loadLanguage(): Promise { const prefLang = SettingsStore.getValue("language", null, /*excludeDefault=*/ true); let langs: string[] = []; diff --git a/webpack.config.js b/webpack.config.js index 462dde351b..570cf87990 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -274,10 +274,6 @@ module.exports = (env, argv) => { // there is no need for webpack to parse them - they can just be // included as-is. /highlight\.js[\\/]lib[\\/]languages/, - - // olm takes ages for webpack to process, and it's already heavily - // optimised, so there is little to gain by us uglifying it. - /olm[\\/](javascript[\\/])?olm\.js$/, ], rules: [ useHMR && { @@ -443,20 +439,6 @@ module.exports = (env, argv) => { }, ], }, - { - // the olm library wants to load its own wasm, rather than have webpack do it. - // We therefore use the `file-loader` to tell webpack to dump the contents to - // a separate file and return the name, and override the default `type` for `.wasm` files - // (which is `webassembly/experimental` under webpack 4) to stop webpack trying to interpret - // the filename as webassembly. (see also https://github.com/webpack/webpack/issues/6725) - test: /olm\.wasm$/, - loader: "file-loader", - type: "javascript/auto", - options: { - name: "[name].[hash:7].[ext]", - outputPath: ".", - }, - }, { // Fix up the name of the opus-recorder worker (react-sdk dependency). // We more or less just want it to be clear it's for opus and not something else. @@ -498,8 +480,11 @@ module.exports = (env, argv) => { }, }, { - // Same deal as olm.wasm: the decoderWorker wants to load the wasm artifact - // itself. + // The decoderWorker wants to load its own wasm, rather than have webpack do it. + // We therefore use the `file-loader` to tell webpack to dump the contents to + // a separate file and return the name, and override the default `type` for `.wasm` files + // (which is `webassembly/experimental` under webpack 4) to stop webpack trying to interpret + // the filename as webassembly. (see also https://github.com/webpack/webpack/issues/6725) test: /decoderWorker\.min\.wasm$/, loader: "file-loader", type: "javascript/auto", @@ -750,7 +735,6 @@ module.exports = (env, argv) => { { from: "vector-icons/**", context: path.resolve(__dirname, "res") }, { from: "decoder-ring/**", context: path.resolve(__dirname, "res") }, { from: "media/**", context: path.resolve(__dirname, "node_modules/matrix-react-sdk/res/") }, - "node_modules/@matrix-org/olm/olm_legacy.js", { from: "config.json", noErrorOnMissing: true }, "contribute.json", ],