@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
77 lines (73 loc) • 3.07 kB
JavaScript
import { ExtensionIdentifierMap } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
import { semverExports } from '@codingame/monaco-vscode-api/_virtual/semver';
function dedupExtensions(system, user, workspace, development, logService) {
const result = ( new ExtensionIdentifierMap());
system.forEach(systemExtension => {
const extension = result.get(systemExtension.identifier);
if (extension) {
logService.warn(( localize(
16733,
"Overwriting extension {0} with {1}.",
extension.extensionLocation.fsPath,
systemExtension.extensionLocation.fsPath
)));
}
result.set(systemExtension.identifier, systemExtension);
});
user.forEach(userExtension => {
const extension = result.get(userExtension.identifier);
if (extension) {
if (extension.isBuiltin) {
if (semverExports.gte(extension.version, userExtension.version)) {
logService.warn(
`Skipping extension ${userExtension.extensionLocation.path} in favour of the builtin extension ${extension.extensionLocation.path}.`
);
return;
}
userExtension.isBuiltin = true;
} else {
logService.warn(( localize(
16733,
"Overwriting extension {0} with {1}.",
extension.extensionLocation.fsPath,
userExtension.extensionLocation.fsPath
)));
}
} else if (userExtension.isBuiltin) {
logService.warn(
`Skipping obsolete builtin extension ${userExtension.extensionLocation.path}`
);
return;
}
result.set(userExtension.identifier, userExtension);
});
workspace.forEach(workspaceExtension => {
const extension = result.get(workspaceExtension.identifier);
if (extension) {
logService.warn(( localize(
16734,
"Overwriting {0} with Workspace Extension {1}.",
extension.extensionLocation.fsPath,
workspaceExtension.extensionLocation.fsPath
)));
}
result.set(workspaceExtension.identifier, workspaceExtension);
});
development.forEach(developedExtension => {
logService.info(( localize(
16735,
"Loading development extension at {0}",
developedExtension.extensionLocation.fsPath
)));
const extension = result.get(developedExtension.identifier);
if (extension) {
if (extension.isBuiltin) {
developedExtension.isBuiltin = true;
}
}
result.set(developedExtension.identifier, developedExtension);
});
return Array.from(( result.values()));
}
export { dedupExtensions };