UNPKG

@codingame/monaco-vscode-extensions-service-override

Version:

VSCode public API plugged on the monaco editor - extensions service-override

74 lines (71 loc) 2.97 kB
import { ExtensionIdentifierMap } from 'vscode/vscode/vs/platform/extensions/common/extensions'; import { localize } from 'vscode/vscode/vs/nls'; import { semverExports } from 'vscode/external/vscode-semver/semver.js'; 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( 4825, "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( 4825, "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( 4826, "Overwriting {0} with Workspace Extension {1}.", extension.extensionLocation.fsPath, workspaceExtension.extensionLocation.fsPath ))); } result.set(workspaceExtension.identifier, workspaceExtension); }); development.forEach(developedExtension => { logService.info(( localize( 4827, "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 };