UNPKG

@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
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 };