From d8519d2c825d4df8e81accd1009e395b0194ed54 Mon Sep 17 00:00:00 2001 From: netcon Date: Fri, 11 Jul 2025 01:37:25 +0800 Subject: [PATCH] chore: bump vscode to 1.101.2 (#634) --- package-lock.json | 8 ++-- package.json | 2 +- vscode-web/.VERSION | 2 +- vscode-web/package-lock.json | 4 +- vscode-web/package.json | 2 +- vscode-web/scripts/.patch | 8 ++-- .../parts/activitybar/activitybarPart.ts | 23 ++++++----- .../src/vs/workbench/browser/web.main.ts | 6 +-- .../contrib/webview/browser/pre/index.html | 20 ++++++++-- .../textfile/browser/textFileService.ts | 38 ++++++++++++++----- 10 files changed, 72 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2235bf956..d7b9795f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "ISC", "devDependencies": { "@cloudflare/workers-types": "^4.20250109.0", - "@github1s/vscode-web": "0.25.1", + "@github1s/vscode-web": "^0.26.0", "chokidar": "^4.0.3", "clean-css": "^5.3.3", "copy-webpack-plugin": "^12.0.2", @@ -248,9 +248,9 @@ } }, "node_modules/@github1s/vscode-web": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@github1s/vscode-web/-/vscode-web-0.25.1.tgz", - "integrity": "sha512-cv1mS3ulPl28uxpCpNR2TFZWAjSnYtw0a/STJUnCJfNGG1r3McZKIIHf/tr0xo2oexUg8JOSLKcBh2uXFqrTNg==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@github1s/vscode-web/-/vscode-web-0.26.0.tgz", + "integrity": "sha512-z46VwaF4eRZ+N5c39F5dpMraHPB0dOre4QUZji2Tnkp0cUVrtjT7V/1+XTG+TUvusK4/BvCKOyCLDyyUxBo0aw==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index ef7120438..fd5e3c367 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "license": "ISC", "devDependencies": { "@cloudflare/workers-types": "^4.20250109.0", - "@github1s/vscode-web": "0.25.1", + "@github1s/vscode-web": "^0.26.0", "chokidar": "^4.0.3", "clean-css": "^5.3.3", "copy-webpack-plugin": "^12.0.2", diff --git a/vscode-web/.VERSION b/vscode-web/.VERSION index 8b14e4022..cc9152e04 100644 --- a/vscode-web/.VERSION +++ b/vscode-web/.VERSION @@ -1 +1 @@ -1.99.1 \ No newline at end of file +1.101.2 \ No newline at end of file diff --git a/vscode-web/package-lock.json b/vscode-web/package-lock.json index 545764f81..87230c6ce 100644 --- a/vscode-web/package-lock.json +++ b/vscode-web/package-lock.json @@ -1,12 +1,12 @@ { "name": "@github1s/vscode-web", - "version": "0.25.1", + "version": "0.26.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@github1s/vscode-web", - "version": "0.25.1", + "version": "0.26.0", "license": "MIT", "devDependencies": { "chokidar": "^4.0.3", diff --git a/vscode-web/package.json b/vscode-web/package.json index a44202796..548b6bc10 100644 --- a/vscode-web/package.json +++ b/vscode-web/package.json @@ -1,6 +1,6 @@ { "name": "@github1s/vscode-web", - "version": "0.25.1", + "version": "0.26.0", "description": "VS Code web for GitHub1s", "author": "github1s", "license": "MIT", diff --git a/vscode-web/scripts/.patch b/vscode-web/scripts/.patch index 4e4602f5b..696e75346 100644 --- a/vscode-web/scripts/.patch +++ b/vscode-web/scripts/.patch @@ -1,12 +1,12 @@ { - "src/vs/workbench/browser/parts/activitybar/activitybarPart.ts": "a195c8b4170a58eca301c3044ae278fa3b811539a7274830691afc73f6da86b8", + "src/vs/workbench/browser/parts/activitybar/activitybarPart.ts": "49575327f7d302dad48a46beba42a675c75d6bfd2caa6b3e5e3bb3e7f41a71e0", "src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css": "6be71e59eeb2e650262bb6d15a05dbd7636928fbbae7f33998f1554b436b4108", - "src/vs/workbench/browser/web.main.ts": "0cf354b9221fdb15a738366043fbf69d8f8373891faf9f5e66a033de935eba79", + "src/vs/workbench/browser/web.main.ts": "b3276e26f954a434d1b6174eeece432f448fbbd831566d6451aa35208a0d5627", "src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts": "e986095a30dbea54af56c25fa1b184b55f34f8914129b27e2f20d8c4ea9fd16b", - "src/vs/workbench/contrib/webview/browser/pre/index.html": "a325d58526d8ac86f3460afdb63787e09ea71d10e95c20518b92586ed028834c", + "src/vs/workbench/contrib/webview/browser/pre/index.html": "7ce2885c633813288123a7dde3981448e387471450cf0d861c1c02b9cbdbf0bc", "src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.ts": "c220568141adf6ed560bab754ea7769795465c6fa93ecd461e9b59f05ca56377", "src/vs/workbench/services/label/common/labelService.ts": "72d72581bd521c2edadd60d4458de4d1c6a9a2cc2cf83820034c82815a2eae6a", - "src/vs/workbench/services/textfile/browser/textFileService.ts": "fbb6ae9a1d9ed4d57ce8b0f91e54c5a9505a293a8b15c72e09773ee54fb5cd28", + "src/vs/workbench/services/textfile/browser/textFileService.ts": "607da093a8562c6a42e9bdb1b2456fa9eb1065a53a5ac6afbb323f6f8505e03f", "src/vs/base/common/network.ts": "34fc2461d4b6029e71b60a3bf5d7438585e9d2b66ccdcab0893cc69d77fab5b5", "src/vs/workbench/contrib/webview/browser/pre/index-no-csp.html": "40d576ad2307d28012b34b86858ba36ba49ae10e5aedb394bd06b14a35b869a5" } \ No newline at end of file diff --git a/vscode-web/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/vscode-web/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 8c6bbb2e6..464d1d2d5 100644 --- a/vscode-web/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/vscode-web/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -19,7 +19,7 @@ import { addDisposableListener, append, EventType, isAncestor, $, clearNode } fr import { assertIsDefined } from '../../../../base/common/types.js'; import { CustomMenubarControl } from '../titlebar/menubarControl.js'; import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; -import { getMenuBarVisibility } from '../../../../platform/window/common/window.js'; +import { getMenuBarVisibility, MenuSettings } from '../../../../platform/window/common/window.js'; import { IAction, Separator, SubmenuAction, toAction } from '../../../../base/common/actions.js'; import { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js'; import { KeyCode } from '../../../../base/common/keyCodes.js'; @@ -194,7 +194,7 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { private element: HTMLElement | undefined; - private menuBar: CustomMenubarControl | undefined; + private readonly menuBar = this._register(new MutableDisposable()); private menuBarContainer: HTMLElement | undefined; private compositeBarContainer: HTMLElement | undefined; private readonly globalCompositeBar: GlobalCompositeBar | undefined; @@ -231,7 +231,7 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { // Register for configuration changes this._register(this.configurationService.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('window.menuBarVisibility')) { + if (e.affectsConfiguration(MenuSettings.MenuBarVisibility)) { if (getMenuBarVisibility(this.configurationService) === 'compact') { this.installMenubar(); } else { @@ -245,12 +245,12 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { // Menu const menuBarVisibility = getMenuBarVisibility(this.configurationService); if (menuBarVisibility === 'compact' || menuBarVisibility === 'hidden' || menuBarVisibility === 'toggle') { - actions.unshift(...[toAction({ id: 'toggleMenuVisibility', label: localize('menu', "Menu"), checked: menuBarVisibility === 'compact', run: () => this.configurationService.updateValue('window.menuBarVisibility', menuBarVisibility === 'compact' ? 'toggle' : 'compact') }), new Separator()]); + actions.unshift(...[toAction({ id: 'toggleMenuVisibility', label: localize('menu', "Menu"), checked: menuBarVisibility === 'compact', run: () => this.configurationService.updateValue(MenuSettings.MenuBarVisibility, menuBarVisibility === 'compact' ? 'toggle' : 'compact') }), new Separator()]); } if (menuBarVisibility === 'compact' && this.menuBarContainer && e?.target) { if (isAncestor(e.target as Node, this.menuBarContainer)) { - actions.unshift(...[toAction({ id: 'hideCompactMenu', label: localize('hideMenu', "Hide Menu"), run: () => this.configurationService.updateValue('window.menuBarVisibility', 'toggle') }), new Separator()]); + actions.unshift(...[toAction({ id: 'hideCompactMenu', label: localize('hideMenu', "Hide Menu"), run: () => this.configurationService.updateValue(MenuSettings.MenuBarVisibility, 'toggle') }), new Separator()]); } } @@ -264,9 +264,8 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { } private uninstallMenubar() { - if (this.menuBar) { - this.menuBar.dispose(); - this.menuBar = undefined; + if (this.menuBar.value) { + this.menuBar.value = undefined; } if (this.menuBarContainer) { @@ -276,7 +275,7 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { } private installMenubar() { - if (this.menuBar) { + if (this.menuBar.value) { return; // prevent menu bar from installing twice #110720 } @@ -293,8 +292,8 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { /* above codes are changed by github1s */ // Menubar: install a custom menu bar depending on configuration - this.menuBar = this._register(this.instantiationService.createInstance(CustomMenubarControl)); - this.menuBar.create(this.menuBarContainer); + this.menuBar.value = this._register(this.instantiationService.createInstance(CustomMenubarControl)); + this.menuBar.value.create(this.menuBarContainer); } @@ -318,7 +317,7 @@ export class ActivityBarCompositeBar extends PaneCompositeBar { if (kbEvent.equals(KeyCode.DownArrow) || kbEvent.equals(KeyCode.RightArrow)) { this.globalCompositeBar?.focus(); } else if (kbEvent.equals(KeyCode.UpArrow) || kbEvent.equals(KeyCode.LeftArrow)) { - this.menuBar?.toggleFocus(); + this.menuBar.value?.toggleFocus(); } })); } diff --git a/vscode-web/src/vs/workbench/browser/web.main.ts b/vscode-web/src/vs/workbench/browser/web.main.ts index 791c94d37..c48d84d97 100644 --- a/vscode-web/src/vs/workbench/browser/web.main.ts +++ b/vscode-web/src/vs/workbench/browser/web.main.ts @@ -27,7 +27,7 @@ import { IAnyWorkspaceIdentifier, IWorkspaceContextService, UNKNOWN_EMPTY_WINDOW import { IWorkbenchConfigurationService } from '../services/configuration/common/configuration.js'; import { onUnexpectedError } from '../../base/common/errors.js'; import { setFullscreen } from '../../base/browser/browser.js'; -import { URI } from '../../base/common/uri.js'; +import { URI, UriComponents } from '../../base/common/uri.js'; import { WorkspaceService } from '../services/configuration/browser/configurationService.js'; import { ConfigurationCache } from '../services/configuration/common/configurationCache.js'; import { ISignService } from '../../platform/sign/common/sign.js'; @@ -182,8 +182,8 @@ export class BrowserMain extends Disposable { return timerService.getPerformanceMarks(); }, - async openUri(uri: URI): Promise { - return openerService.open(uri, {}); + async openUri(uri: URI | UriComponents): Promise { + return openerService.open(URI.isUri(uri) ? uri : URI.from(uri), {}); } }, logger: { diff --git a/vscode-web/src/vs/workbench/contrib/webview/browser/pre/index.html b/vscode-web/src/vs/workbench/contrib/webview/browser/pre/index.html index 20d9d82dd..a2ad9e7d1 100644 --- a/vscode-web/src/vs/workbench/contrib/webview/browser/pre/index.html +++ b/vscode-web/src/vs/workbench/contrib/webview/browser/pre/index.html @@ -37,6 +37,8 @@ const onElectron = searchParams.get('platform') === 'electron'; const disableServiceWorker = searchParams.has('disableServiceWorker'); const expectedWorkerVersion = parseInt(searchParams.get('swVersion')); + /** @type {MessageChannel | undefined} */ + let outerIframeMessageChannel; /** * Use polling to track focus of main webview and iframes within the webview @@ -237,8 +239,8 @@ return reject(new Error('Service Workers are not enabled. Webviews will not work. Try disabling private/incognito mode.')); } - const swPath = encodeURI(`service-worker.js?v=${expectedWorkerVersion}&vscode-resource-base-authority=${searchParams.get('vscode-resource-base-authority')}&id=${ID}&remoteAuthority=${searchParams.get('remoteAuthority') ?? ''}`); - navigator.serviceWorker.register(swPath) + const swPath = encodeURI(`service-worker.js?v=${expectedWorkerVersion}&vscode-resource-base-authority=${searchParams.get('vscode-resource-base-authority')}&remoteAuthority=${searchParams.get('remoteAuthority') ?? ''}`); + navigator.serviceWorker.register(swPath, { type: 'module' }) .then(async registration => { /** * @param {MessageEvent} event @@ -266,7 +268,8 @@ navigator.serviceWorker.addEventListener('message', versionHandler); const postVersionMessage = (/** @type {ServiceWorker} */ controller) => { - controller.postMessage({ channel: 'version' }); + outerIframeMessageChannel = new MessageChannel(); + controller.postMessage({ channel: 'version' }, [outerIframeMessageChannel.port2]); }; // At this point, either the service worker is ready and @@ -1173,6 +1176,17 @@ unloadMonitor.onIframeLoaded(newFrame); } + + if (!disableServiceWorker && outerIframeMessageChannel) { + outerIframeMessageChannel.port1.onmessage = event => { + switch (event.data.channel) { + case 'load-resource': + case 'load-localhost': + hostMessaging.postMessage(event.data.channel, event.data); + return; + } + }; + } }); // propagate vscode-context-menu-visible class diff --git a/vscode-web/src/vs/workbench/services/textfile/browser/textFileService.ts b/vscode-web/src/vs/workbench/services/textfile/browser/textFileService.ts index c515abe1e..488dbcdac 100644 --- a/vscode-web/src/vs/workbench/services/textfile/browser/textFileService.ts +++ b/vscode-web/src/vs/workbench/services/textfile/browser/textFileService.ts @@ -277,11 +277,6 @@ export abstract class AbstractTextFileService extends Disposable implements ITex return this.fileService.writeFile(resource, readable, options); } - getEncoding(resource: URI): string { - const model = resource.scheme === Schemas.untitled ? this.untitled.get(resource) : this.files.get(resource); - return model?.getEncoding() ?? this.encoding.getUnvalidatedEncodingForResource(resource); - } - async getEncodedReadable(resource: URI | undefined, value: ITextSnapshot): Promise; async getEncodedReadable(resource: URI | undefined, value: string): Promise; async getEncodedReadable(resource: URI | undefined, value?: ITextSnapshot): Promise; @@ -321,14 +316,37 @@ export abstract class AbstractTextFileService extends Disposable implements ITex candidateGuessEncodings: options?.candidateGuessEncodings || this.textResourceConfigurationService.getValue(resource, 'files.candidateGuessEncodings'), - overwriteEncoding: async detectedEncoding => { - const { encoding } = await this.encoding.getPreferredReadEncoding(resource, options, detectedEncoding ?? undefined); - - return encoding; - } + overwriteEncoding: async detectedEncoding => this.validateDetectedEncoding(resource, detectedEncoding ?? undefined, options) }); } + getEncoding(resource: URI): string { + const model = resource.scheme === Schemas.untitled ? this.untitled.get(resource) : this.files.get(resource); + return model?.getEncoding() ?? this.encoding.getUnvalidatedEncodingForResource(resource); + } + + async resolveDecoding(resource: URI | undefined, options?: IReadTextFileEncodingOptions): Promise<{ preferredEncoding: string; guessEncoding: boolean; candidateGuessEncodings: string[] }> { + return { + preferredEncoding: (await this.encoding.getPreferredReadEncoding(resource, options, undefined)).encoding, + guessEncoding: + options?.autoGuessEncoding || + this.textResourceConfigurationService.getValue(resource, 'files.autoGuessEncoding'), + candidateGuessEncodings: + options?.candidateGuessEncodings || + this.textResourceConfigurationService.getValue(resource, 'files.candidateGuessEncodings'), + }; + } + + async validateDetectedEncoding(resource: URI | undefined, detectedEncoding: string | undefined, options?: IReadTextFileEncodingOptions): Promise { + const { encoding } = await this.encoding.getPreferredReadEncoding(resource, options, detectedEncoding); + + return encoding; + } + + resolveEncoding(resource: URI | undefined, options?: IWriteTextFileOptions): Promise<{ encoding: string; addBOM: boolean }> { + return this.encoding.getWriteEncoding(resource, options); + } + //#endregion