this repo has no description

Fix API levels skipping an extension completely

Changed files
+13 -12
packages
core
src
core-extensions
src
moonbase
webpackModules
+9 -7
packages/core-extensions/src/moonbase/webpackModules/stores.ts
···
import {
Config,
+
constants,
ExtensionLoadSource,
MoonlightBranch
} from "@moonlight-mod/types";
···
for (const [repo, exts] of Object.entries(ret)) {
try {
for (const ext of exts) {
-
const level = ext.apiLevel ?? 1;
-
if (level !== window.moonlight.apiLevel) continue;
-
const uniqueId = this.extensionIndex++;
const extensionData = {
id: ext.id,
···
state: ExtensionState.NotDownloaded
};
-
if (this.alreadyExists(extensionData)) {
+
const apiLevel = ext.apiLevel ?? 1;
+
if (apiLevel !== constants.apiLevel) continue;
+
+
const existing = this.getExisting(extensionData);
+
if (existing != null) {
// Make sure the download URL is properly updated
for (const [id, e] of Object.entries(this.extensions)) {
if (e.id === ext.id && e.source.url === repo) {
···
}
if (this.hasUpdate(extensionData)) {
-
this.updates[uniqueId] = {
+
this.updates[existing.uniqueId] = {
version: ext.version!,
download: ext.download
};
···
});
}
-
private alreadyExists(ext: MoonbaseExtension) {
-
return Object.values(this.extensions).some(
+
private getExisting(ext: MoonbaseExtension) {
+
return Object.values(this.extensions).find(
(e) => e.id === ext.id && e.source.url === ext.source.url
);
}
-4
packages/core/src/extension.ts
···
const manifest: ExtensionManifest = JSON.parse(
await fs.readFile(manifestPath)
);
-
const level = manifest.apiLevel ?? 1;
-
if (level !== constants.apiLevel) {
-
continue;
-
}
const webPath = fs.join(dir, "index.js");
const nodePath = fs.join(dir, "node.js");
+4 -1
packages/core/src/extension/loader.ts
···
ExtensionWebExports,
DetectedExtension,
ProcessedExtensions,
-
WebpackModuleFunc
+
WebpackModuleFunc,
+
constants
} from "@moonlight-mod/types";
import { readConfig } from "../config";
import Logger from "../util/logger";
···
export async function loadExtensions(
exts: DetectedExtension[]
): Promise<ProcessedExtensions> {
+
exts = exts.filter((x) => x.manifest.apiLevel === constants.apiLevel);
+
const config = await readConfig();
const items = exts
.map((ext) => {