tangled
alpha
login
or
join now
notnite.com
/
moonlight
3
fork
atom
this repo has no description
3
fork
atom
overview
issues
pulls
pipelines
Skip multiple extensions with the same ID
notnite.com
1 year ago
779b424c
3f8172af
+17
-5
1 changed file
expand all
collapse all
unified
split
packages
core
src
extension.ts
+17
-5
packages/core/src/extension.ts
···
24
24
return ret;
25
25
}
26
26
27
27
-
async function loadDetectedExtensions(dir: string, type: ExtensionLoadSource): Promise<DetectedExtension[]> {
27
27
+
async function loadDetectedExtensions(
28
28
+
dir: string,
29
29
+
type: ExtensionLoadSource,
30
30
+
seen: Set<string>
31
31
+
): Promise<DetectedExtension[]> {
28
32
const ret: DetectedExtension[] = [];
29
33
30
34
const manifests = await findManifests(dir);
···
34
38
const dir = moonlightFS.dirname(manifestPath);
35
39
36
40
const manifest: ExtensionManifest = JSON.parse(await moonlightFS.readFileString(manifestPath));
41
41
+
if (seen.has(manifest.id)) {
42
42
+
logger.warn(`Duplicate extension found, skipping: ${manifest.id}`);
43
43
+
continue;
44
44
+
}
45
45
+
seen.add(manifest.id);
37
46
38
47
const webPath = moonlightFS.join(dir, "index.js");
39
48
const nodePath = moonlightFS.join(dir, "node.js");
···
92
101
async function getExtensionsNative(): Promise<DetectedExtension[]> {
93
102
const config = await readConfig();
94
103
const res = [];
104
104
+
const seen = new Set<string>();
95
105
96
96
-
res.push(...(await loadDetectedExtensions(getCoreExtensionsPath(), ExtensionLoadSource.Core)));
106
106
+
res.push(...(await loadDetectedExtensions(getCoreExtensionsPath(), ExtensionLoadSource.Core, seen)));
97
107
98
98
-
res.push(...(await loadDetectedExtensions(await getExtensionsPath(), ExtensionLoadSource.Normal)));
108
108
+
res.push(...(await loadDetectedExtensions(await getExtensionsPath(), ExtensionLoadSource.Normal, seen)));
99
109
100
110
for (const devSearchPath of config.devSearchPaths ?? []) {
101
101
-
res.push(...(await loadDetectedExtensions(devSearchPath, ExtensionLoadSource.Developer)));
111
111
+
res.push(...(await loadDetectedExtensions(devSearchPath, ExtensionLoadSource.Developer, seen)));
102
112
}
103
113
104
114
return res;
···
106
116
107
117
async function getExtensionsBrowser(): Promise<DetectedExtension[]> {
108
118
const ret: DetectedExtension[] = [];
119
119
+
const seen = new Set<string>();
109
120
110
121
const coreExtensionsFs: Record<string, string> = JSON.parse(
111
122
// @ts-expect-error shut up
···
137
148
webpackModules: wpModules
138
149
}
139
150
});
151
151
+
seen.add(manifest.id);
140
152
}
141
153
142
154
if (await moonlightFS.exists("/extensions")) {
143
143
-
ret.push(...(await loadDetectedExtensions("/extensions", ExtensionLoadSource.Normal)));
155
155
+
ret.push(...(await loadDetectedExtensions("/extensions", ExtensionLoadSource.Normal, seen)));
144
156
}
145
157
146
158
return ret;