Skip to content

Commit aed2fbc

Browse files
committed
Remove server-side code from Manager.listPackages() method
1 parent f7b9180 commit aed2fbc

3 files changed

Lines changed: 35 additions & 5 deletions

File tree

src/classes/Manager.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { ManagerReport, PackageVersion } from '../types/Package.js';
66
import { RegistryInterface, RegistryPackages, RegistryType } from '../types/Registry.js';
77
import { Base } from './Base.js';
88
import { packageCompatibleFiles } from '../helpers/package.js';
9-
import { getArchitecture, getSystem } from '../helpers/utilsLocal.js';
9+
import { Architecture, SystemType } from '../index-browser.js';
1010

1111
export class Manager extends Base {
1212
protected config: Config;
@@ -64,7 +64,7 @@ export class Manager extends Base {
6464
}
6565
}
6666

67-
listPackages(installed?: boolean, showAll = false) {
67+
listPackages(installed?: boolean, architecture?: Architecture, system?: SystemType) {
6868
let packages = Array.from(this.packages.values());
6969

7070
if (installed !== undefined) {
@@ -75,11 +75,13 @@ export class Manager extends Base {
7575
);
7676
}
7777

78-
if (!showAll) {
78+
if (architecture || system) {
7979
packages = packages.filter(pkg => {
8080
const pkgVersion = pkg.getVersionLatest();
8181
if (!pkgVersion) return false;
82-
const files = packageCompatibleFiles(pkgVersion, [getArchitecture()], [getSystem()], []);
82+
const archArr = architecture ? [architecture] : [];
83+
const sysArr = system ? [system] : [];
84+
const files = packageCompatibleFiles(pkgVersion, archArr, sysArr, []);
8385
return files.length > 0;
8486
});
8587
}

tests/classes/Manager.test.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import { expect, test } from 'vitest';
2-
import { PLUGIN, PLUGIN_PACKAGE, PLUGIN_PACKAGE_EMPTY, PLUGIN_PACKAGE_MULTIPLE } from '../data/Plugin';
2+
import {
3+
PLUGIN,
4+
PLUGIN_INCOMPATIBLE,
5+
PLUGIN_PACKAGE,
6+
PLUGIN_PACKAGE_EMPTY,
7+
PLUGIN_PACKAGE_INCOMPATIBLE,
8+
PLUGIN_PACKAGE_MULTIPLE,
9+
} from '../data/Plugin';
310
import { Manager } from '../../src/classes/Manager';
411
import { RegistryType } from '../../src/types/Registry';
512
import { Package } from '../../src/classes/Package';
@@ -110,6 +117,15 @@ test('Manager list packages', () => {
110117
expect(manager.listPackages(false)).toEqual([pkg]);
111118
});
112119

120+
test('Manager list packages incompatible', () => {
121+
const manager = new Manager(RegistryType.Plugins);
122+
const pkgNoWin = new Package(PLUGIN_PACKAGE_INCOMPATIBLE.slug);
123+
pkgNoWin.addVersion(PLUGIN_PACKAGE_INCOMPATIBLE.version, PLUGIN_INCOMPATIBLE);
124+
manager.addPackage(pkgNoWin);
125+
expect(manager.listPackages(undefined, Architecture.X64, SystemType.Win)).toEqual([]);
126+
expect(manager.listPackages(undefined, Architecture.X64, SystemType.Linux)).toEqual([pkgNoWin]);
127+
});
128+
113129
test('Manager filter packages', () => {
114130
const manager = new Manager(RegistryType.Plugins);
115131
const pkg = new Package(PLUGIN_PACKAGE.slug);

tests/data/Plugin.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ export const PLUGIN: PluginInterface = {
9191
export const PLUGIN_INSTALLED: PluginInterface = structuredClone(PLUGIN);
9292
PLUGIN_INSTALLED.installed = true;
9393

94+
export const PLUGIN_INCOMPATIBLE: PluginInterface = structuredClone(PLUGIN);
95+
// Remove the Windows-compatible file entry so this package is incompatible with Win.
96+
PLUGIN_INCOMPATIBLE.files.splice(4, 1);
97+
9498
export const PLUGIN_PACKAGE: PackageInterface = {
9599
slug,
96100
version,
@@ -121,3 +125,11 @@ export const PLUGIN_PACKAGE_MULTIPLE: PackageInterface = {
121125
'1.3.2': PLUGIN,
122126
},
123127
};
128+
129+
export const PLUGIN_PACKAGE_INCOMPATIBLE: PackageInterface = {
130+
slug,
131+
version,
132+
versions: {
133+
[version]: PLUGIN_INCOMPATIBLE,
134+
},
135+
};

0 commit comments

Comments
 (0)