diff --git a/module_system/installer.ts b/module_system/installer.ts index 9bc3721ae1..a1e31e42a8 100644 --- a/module_system/installer.ts +++ b/module_system/installer.ts @@ -185,9 +185,20 @@ function getModuleApiVersionFor(moduleName: string): string { return findDepVersionInPackageJson(moduleApiDepName, pkgJsonStr); } +// A list of Module API versions that are supported in addition to the currently installed one +// defined in the package.json. This is necessary because semantic versioning is applied to both +// the Module-side surface of the API and the Client-side surface of the API. So breaking changes +// in the Client-side surface lead to a major bump even though the Module-side surface stays +// compatible. We aim to not break the Module-side surface so we maintain a list of compatible +// older versions. +const backwardsCompatibleMajorVersions = ["1.0.0"]; + function isModuleVersionCompatible(ourApiVersion: string, moduleApiVersion: string): boolean { if (!moduleApiVersion) return false; - return semver.satisfies(ourApiVersion, moduleApiVersion); + return ( + semver.satisfies(ourApiVersion, moduleApiVersion) || + backwardsCompatibleMajorVersions.some((version) => semver.satisfies(version, moduleApiVersion)) + ); } function writeModulesTs(content: string): void { diff --git a/package.json b/package.json index 61e524db56..897a6b33ce 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ }, "dependencies": { "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.14.tgz", - "@matrix-org/react-sdk-module-api": "^1.0.0", + "@matrix-org/react-sdk-module-api": "^2.0.0", "gfm.css": "^1.1.2", "jsrsasign": "^10.5.25", "katex": "^0.16.0", diff --git a/webpack.config.js b/webpack.config.js index 6ae7c02294..8c6923902c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -216,6 +216,10 @@ module.exports = (env, argv) => { // Same goes for js/react-sdk - we don't need two copies. "matrix-js-sdk": path.resolve(__dirname, "node_modules/matrix-js-sdk"), "matrix-react-sdk": path.resolve(__dirname, "node_modules/matrix-react-sdk"), + "@matrix-org/react-sdk-module-api": path.resolve( + __dirname, + "node_modules/@matrix-org/react-sdk-module-api", + ), // and matrix-events-sdk & matrix-widget-api "matrix-events-sdk": path.resolve(__dirname, "node_modules/matrix-events-sdk"), "matrix-widget-api": path.resolve(__dirname, "node_modules/matrix-widget-api"), diff --git a/yarn.lock b/yarn.lock index d0bcf4479c..ee90db70ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1636,6 +1636,13 @@ dependencies: "@babel/runtime" "^7.17.9" +"@matrix-org/react-sdk-module-api@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@matrix-org/react-sdk-module-api/-/react-sdk-module-api-2.0.0.tgz#f894af429ad352d5151dc7240cc2f987d9dab780" + integrity sha512-o/M+IfB3bu4S3yTO10zMRiEtTQagV9AJ9cNmq8a/ksniCx3QLShtzWeL5FkTa8co0ab/VdxdqTlEux0aStT/dg== + dependencies: + "@babel/runtime" "^7.17.9" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"