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",
],