From ccded68cd4d4e111b0685b50fc24aec36a4b09d3 Mon Sep 17 00:00:00 2001 From: qupig <61939856+qupig@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:41:49 +0000 Subject: [PATCH 001/150] chore: update and fixed prettier to 3.4.2 --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 44a1ba0991f0..3779af901516 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "globals": "^15.10.0", - "prettier": "^3.0.3", + "prettier": "3.4.2", "prettier-plugin-sh": "^0.14.0", "ts-node": "^10.9.1", "typescript": "^5.6.2", @@ -4643,10 +4643,11 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/package.json b/package.json index d3484172f8bd..e91feacc035e 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "globals": "^15.10.0", - "prettier": "^3.0.3", + "prettier": "3.4.2", "prettier-plugin-sh": "^0.14.0", "ts-node": "^10.9.1", "typescript": "^5.6.2", From 9b0340a09276f93c054d705d1b9a5f24cc5dbc97 Mon Sep 17 00:00:00 2001 From: qupig <61939856+qupig@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:44:10 +0000 Subject: [PATCH 002/150] chore: format code to prettier 3.4.2 --- src/node/cli.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/node/cli.ts b/src/node/cli.ts index 6320c2025239..9eb6e5163e8a 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -118,18 +118,18 @@ interface Option { type OptionType = T extends boolean ? "boolean" : T extends OptionalString - ? typeof OptionalString - : T extends LogLevel - ? typeof LogLevel - : T extends AuthType - ? typeof AuthType - : T extends number - ? "number" - : T extends string - ? "string" - : T extends string[] - ? "string[]" - : "unknown" + ? typeof OptionalString + : T extends LogLevel + ? typeof LogLevel + : T extends AuthType + ? typeof AuthType + : T extends number + ? "number" + : T extends string + ? "string" + : T extends string[] + ? "string[]" + : "unknown" export type Options = { [P in keyof T]: Option> From 8f00c2e2893a770c3c2983efe244b5abcccddf9e Mon Sep 17 00:00:00 2001 From: qupig <61939856+qupig@users.noreply.github.com> Date: Thu, 12 Dec 2024 19:01:09 +0000 Subject: [PATCH 003/150] chore: ignore prettier 3.4.2 code format commit --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000000..793a923d16eb --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Prettier 3.4.2 +9b0340a09276f93c054d705d1b9a5f24cc5dbc97 \ No newline at end of file From 25c2183be043bb5b21e0f6feaeb1946a01166413 Mon Sep 17 00:00:00 2001 From: qupig <61939856+qupig@users.noreply.github.com> Date: Thu, 12 Dec 2024 20:13:22 +0000 Subject: [PATCH 004/150] ci: fix prettier check job Use prettier version specified in `package.json` instead of fixed versions from third-party workflows. --- .github/workflows/build.yaml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 67969af2951a..337b55ba6e73 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -23,17 +23,25 @@ concurrency: jobs: prettier: - name: Format with Prettier + name: Run prettier check runs-on: ubuntu-22.04 timeout-minutes: 5 steps: - name: Checkout repo uses: actions/checkout@v4 - - name: Run prettier with actionsx/prettier - uses: actionsx/prettier@v3 + - name: Install Node.js + uses: actions/setup-node@v4 with: - args: --check --log-level=warn . + node-version-file: .node-version + cache: npm + cache-dependency-path: | + package-lock.json + test/package-lock.json + + - run: SKIP_SUBMODULE_DEPS=1 npm ci + + - run: npx prettier --check . doctoc: name: Doctoc markdown files From ccd2a30dfc999d1f897bbea4c2aded5e82baaa80 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 13 Dec 2024 19:13:59 +0100 Subject: [PATCH 005/150] Update Code to 1.96.0 (#7112) --- .node-version | 2 +- lib/vscode | 2 +- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 12 ++++++------ patches/external-file-actions.diff | 18 +++++++++--------- patches/getting-started.diff | 6 +++--- patches/integration.diff | 2 +- patches/proposed-api.diff | 2 +- patches/telemetry.diff | 2 +- 9 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.node-version b/.node-version index 2a393af592b8..d4b7699d36ca 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.18.0 +20.18.1 diff --git a/lib/vscode b/lib/vscode index f1a4fb101478..138f619c86f1 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit f1a4fb101478ce6ec82fe9627c43efbf9e98c813 +Subproject commit 138f619c86f1199955d53b4166bef66ef252935c diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index 2ccb344bc4b3..842b54534747 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -315,6 +315,10 @@ export class Extension implements IExten +@@ -320,6 +320,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index 03ecfb6f04eb..9cfc21ca5083 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; -@@ -243,6 +243,9 @@ export async function setupServerService +@@ -245,6 +245,9 @@ export async function setupServerService const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority)); socketServer.registerChannel('extensions', channel); @@ -288,7 +288,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -@@ -433,9 +433,6 @@ export class InstallAction extends Exten +@@ -435,9 +435,6 @@ export class InstallAction extends Exten if (this.extension.isBuiltin) { return; } @@ -298,7 +298,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens if (this.extension.state !== ExtensionState.Uninstalled) { return; } -@@ -740,7 +737,7 @@ export abstract class InstallInOtherServ +@@ -742,7 +739,7 @@ export abstract class InstallInOtherServ } if (isLanguagePackExtension(this.extension.local.manifest)) { @@ -307,7 +307,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } // Prefers to run on UI -@@ -2001,17 +1998,6 @@ export class SetLanguageAction extends E +@@ -2028,17 +2025,6 @@ export class SetLanguageAction extends E update(): void { this.enabled = false; this.class = SetLanguageAction.DisabledClass; @@ -325,7 +325,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } override async run(): Promise { -@@ -2028,7 +2014,6 @@ export class ClearLanguageAction extends +@@ -2055,7 +2041,6 @@ export class ClearLanguageAction extends private static readonly DisabledClass = `${this.EnabledClass} disabled`; constructor( @@ -333,7 +333,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens @ILocaleService private readonly localeService: ILocaleService, ) { super(ClearLanguageAction.ID, ClearLanguageAction.TITLE.value, ClearLanguageAction.DisabledClass, false); -@@ -2038,17 +2023,6 @@ export class ClearLanguageAction extends +@@ -2065,17 +2050,6 @@ export class ClearLanguageAction extends update(): void { this.enabled = false; this.class = ClearLanguageAction.DisabledClass; diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index aff613da8f3a..dd89f4882f41 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -165,14 +165,14 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions +++ code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts @@ -20,7 +20,7 @@ import { CLOSE_SAVED_EDITORS_COMMAND_ID, import { AutoSaveAfterShortDelayContext } from '../../../services/filesConfiguration/common/filesConfigurationService.js'; - import { WorkbenchListDoubleSelection, WorkbenchTreeFindOpen } from '../../../../platform/list/browser/listService.js'; + import { WorkbenchListDoubleSelection } from '../../../../platform/list/browser/listService.js'; import { Schemas } from '../../../../base/common/network.js'; -import { DirtyWorkingCopiesContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, WorkbenchStateContext, WorkspaceFolderCountContext, SidebarFocusContext, ActiveEditorCanRevertContext, ActiveEditorContext, ResourceContextKey, ActiveEditorAvailableEditorIdsContext, MultipleEditorsSelectedInGroupContext, TwoEditorsSelectedInGroupContext, SelectedEditorsInGroupFileOrUntitledResourceContextKey } from '../../../common/contextkeys.js'; +import { IsEnabledFileDownloads, IsEnabledFileUploads, DirtyWorkingCopiesContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, WorkbenchStateContext, WorkspaceFolderCountContext, SidebarFocusContext, ActiveEditorCanRevertContext, ActiveEditorContext, ResourceContextKey, ActiveEditorAvailableEditorIdsContext, MultipleEditorsSelectedInGroupContext, TwoEditorsSelectedInGroupContext, SelectedEditorsInGroupFileOrUntitledResourceContextKey } from '../../../common/contextkeys.js'; import { IsWebContext } from '../../../../platform/contextkey/common/contextkeys.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { ThemeIcon } from '../../../../base/common/themables.js'; -@@ -572,13 +572,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo +@@ -571,13 +571,16 @@ MenuRegistry.appendMenuItem(MenuId.Explo id: DOWNLOAD_COMMAND_ID, title: DOWNLOAD_LABEL }, @@ -196,7 +196,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/fileActions ) })); -@@ -590,6 +593,7 @@ MenuRegistry.appendMenuItem(MenuId.Explo +@@ -589,6 +592,7 @@ MenuRegistry.appendMenuItem(MenuId.Explo title: UPLOAD_LABEL, }, when: ContextKeyExpr.and( @@ -208,7 +208,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -40,6 +40,9 @@ export const HasWebFileSystemAccess = ne +@@ -41,6 +41,9 @@ export const HasWebFileSystemAccess = ne export const EmbedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined')); @@ -286,10 +286,10 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/views/explo import { mainWindow } from '../../../../../base/browser/window.js'; import { IExplorerFileContribution, explorerFileContribRegistry } from '../explorerFileContrib.js'; +import { IBrowserWorkbenchEnvironmentService } from '../../../../services/environment/browser/environmentService.js'; - - export class ExplorerDelegate implements IListVirtualDelegate { - -@@ -1030,7 +1031,8 @@ export class FileDragAndDrop implements + import { WorkbenchCompressibleAsyncDataTree } from '../../../../../platform/list/browser/listService.js'; + import { ISearchService, QueryType, getExcludes, ISearchConfiguration, ISearchComplete, IFileQuery } from '../../../../services/search/common/search.js'; + import { CancellationToken } from '../../../../../base/common/cancellation.js'; +@@ -1601,7 +1602,8 @@ export class FileDragAndDrop implements @IConfigurationService private configurationService: IConfigurationService, @IInstantiationService private instantiationService: IInstantiationService, @IWorkspaceEditingService private workspaceEditingService: IWorkspaceEditingService, @@ -299,7 +299,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/files/browser/views/explo ) { const updateDropEnablement = (e: IConfigurationChangeEvent | undefined) => { if (!e || e.affectsConfiguration('explorer.enableDragAndDrop')) { -@@ -1255,15 +1257,17 @@ export class FileDragAndDrop implements +@@ -1826,15 +1828,17 @@ export class FileDragAndDrop implements // External file DND (Import/Upload file) if (data instanceof NativeDragAndDropData) { diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 0e6513c44532..cf06077f8a0a 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -826,6 +826,72 @@ export class GettingStartedPage extends +@@ -834,6 +834,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -861,6 +927,9 @@ export class GettingStartedPage extends +@@ -869,6 +935,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } @@ -234,7 +234,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -42,6 +42,7 @@ export const EmbedderIdentifierContext = +@@ -43,6 +43,7 @@ export const EmbedderIdentifierContext = export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/integration.diff b/patches/integration.diff index 22aeb0a918f8..09a072e53c83 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -113,7 +113,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandl =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +++ code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -@@ -77,8 +77,11 @@ export class BrowserDialogHandler extend +@@ -78,8 +78,11 @@ export class BrowserDialogHandler extend async about(): Promise { const detailString = (useAgo: boolean): string => { diff --git a/patches/proposed-api.diff b/patches/proposed-api.diff index 8e6d60f64729..dd9f25badfc7 100644 --- a/patches/proposed-api.diff +++ b/patches/proposed-api.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts +++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts -@@ -313,10 +313,7 @@ function extensionDescriptionArrayToMap( +@@ -314,10 +314,7 @@ function extensionDescriptionArrayToMap( } export function isProposedApiEnabled(extension: IExtensionDescription, proposal: ApiProposalName): boolean { diff --git a/patches/telemetry.diff b/patches/telemetry.diff index e72fade53587..850a3f3d78ff 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { NullPolicyService } from '../../platform/policy/common/policy.js'; import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; -@@ -151,11 +153,23 @@ export async function setupServerService +@@ -152,11 +154,23 @@ export async function setupServerService const requestService = new RequestService(configurationService, environmentService, logService); services.set(IRequestService, requestService); From db311e6ff5607157e253d3c1b34856701104ac20 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Wed, 18 Dec 2024 21:35:24 +0100 Subject: [PATCH 006/150] Update Code to 1.96.1 (#7130) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 138f619c86f1..42b266171e51 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 138f619c86f1199955d53b4166bef66ef252935c +Subproject commit 42b266171e51a016313f47d0c48aca9295b9cbb2 From 318c582043d4177e218d9149bd3e839f6b786986 Mon Sep 17 00:00:00 2001 From: qupig <61939856+qupig@users.noreply.github.com> Date: Thu, 19 Dec 2024 05:37:53 +0800 Subject: [PATCH 007/150] style: add dark theme color scheme (#7118) hen the user's browser does not support `light-dark`, fall back to the light theme color scheme. --- src/browser/pages/error.css | 1 + src/browser/pages/error.html | 2 +- src/browser/pages/global.css | 12 ++++++++++++ src/browser/pages/login.css | 3 ++- src/browser/pages/login.html | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/browser/pages/error.css b/src/browser/pages/error.css index 15b7d4aca532..d100ee5c4666 100644 --- a/src/browser/pages/error.css +++ b/src/browser/pages/error.css @@ -11,6 +11,7 @@ .error-display > .body { color: #444; + color: light-dark(#444, #ccc); font-size: 1.2rem; } diff --git a/src/browser/pages/error.html b/src/browser/pages/error.html index 5131c6a3d931..b3ad56757ae2 100644 --- a/src/browser/pages/error.html +++ b/src/browser/pages/error.html @@ -10,7 +10,7 @@ http-equiv="Content-Security-Policy" content="style-src 'self'; manifest-src 'self'; img-src 'self' data:; font-src 'self' data:;" /> - + {{ERROR_TITLE}} - code-server diff --git a/src/browser/pages/global.css b/src/browser/pages/global.css index e16b6ca887e5..6ccbdc8367a6 100644 --- a/src/browser/pages/global.css +++ b/src/browser/pages/global.css @@ -1,3 +1,7 @@ +:root { + color-scheme: light dark; +} + html, body, #root { @@ -7,7 +11,9 @@ body, body { background: rgb(244, 247, 252); + background: light-dark(rgb(244, 247, 252), #111); color: #111; + color: light-dark(#111, #ddd); margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; @@ -23,10 +29,12 @@ button { .-button { background-color: rgb(87, 114, 245); + background-color: light-dark(rgb(87, 114, 245), rgb(50, 85, 250)); border-radius: 5px; border: none; box-sizing: border-box; color: white; + color: light-dark(white, #ddd); cursor: pointer; padding: 18px 20px; text-decoration: none; @@ -45,6 +53,7 @@ button { .card-box { background-color: rgb(250, 253, 258); + background-color: light-dark(rgb(250, 253, 258), #000); border-radius: 5px; box-shadow: rgba(60, 66, 87, 0.117647) 0px 7px 14px 0px, @@ -55,7 +64,9 @@ button { .card-box > .header { border-bottom: 1px solid #ddd; + border-bottom: 1px solid light-dark(#ddd, #222); color: #444; + color: light-dark(#444, #ccc); padding: 30px; } @@ -66,6 +77,7 @@ button { .card-box > .header > .sub { color: #555; + color: light-dark(#555, #aaa); margin-top: 10px; } diff --git a/src/browser/pages/login.css b/src/browser/pages/login.css index 026cac97f5d6..1647c575f954 100644 --- a/src/browser/pages/login.css +++ b/src/browser/pages/login.css @@ -30,10 +30,11 @@ body { .login-form > .field > .password { background-color: rgb(244, 247, 252); + background-color: light-dark(rgb(244, 247, 252), #222); border-radius: 5px; border: 1px solid #ddd; + border: 1px solid light-dark(#ddd, #333); box-sizing: border-box; - color: black; flex: 1; padding: 16px; } diff --git a/src/browser/pages/login.html b/src/browser/pages/login.html index fa4af8592edf..c7fb2f2ac67e 100644 --- a/src/browser/pages/login.html +++ b/src/browser/pages/login.html @@ -10,6 +10,7 @@ http-equiv="Content-Security-Policy" content="style-src 'self'; script-src 'self' 'unsafe-inline'; manifest-src 'self'; img-src 'self' data:; font-src 'self' data:;" /> + {{I18N_LOGIN_TITLE}} From c187e5e782bdfce9cdb1357cd1825c745df47ef6 Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 15 Nov 2024 10:33:19 -0900 Subject: [PATCH 008/150] Release v4.95.3 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd17b29b3589..8878eec4fe68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.95.3](https://github.com/coder/code-server/releases/tag/v4.95.3) - 2024-11-18 + +Code v1.95.3 + +### Changed + +- Update to Code 1.95.3. + ## [4.95.2](https://github.com/coder/code-server/releases/tag/v4.95.2) - 2024-11-12 Code v1.95.2 From 272e28abc68ef068e4dde44e8a4f7eca26c42efb Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 18 Dec 2024 13:42:08 -0900 Subject: [PATCH 009/150] Set GITHUB_TOKEN on macOS job Trying to see if this will help with the 403s trying to download ripgrep. --- .github/workflows/release.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 8eb4ae995645..1a09c6dda41b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -196,6 +196,9 @@ jobs: runs-on: macos-latest timeout-minutes: 15 needs: npm-version + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: - name: Checkout repo uses: actions/checkout@v4 From 339a4484719b6849bc79b85a67159ad2ebb1dfea Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 18 Dec 2024 14:25:02 -0900 Subject: [PATCH 010/150] Release v4.96.1 --- CHANGELOG.md | 12 ++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8878eec4fe68..93a642a5a019 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,18 @@ Code v99.99.999 ## Unreleased +## [4.96.1](https://github.com/coder/code-server/releases/tag/v4.96.1) - 2024-12-18 + +Code v1.96.1 + +### Added + +- Dark color scheme for login and error pages. + +### Changed + +- Update to Code 1.96.1. + ## [4.95.3](https://github.com/coder/code-server/releases/tag/v4.95.3) - 2024-11-18 Code v1.95.3 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index ec8579303ecc..7222e1f25a21 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.24.0 +version: 3.25.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.93.1 +appVersion: 4.96.1 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 4789399577f4..b73235716028 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.93.1' + tag: '4.96.1' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 08cbdfbdf11925e8a14ee03de97b942bba7e8a94 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 19 Dec 2024 22:19:11 +0100 Subject: [PATCH 011/150] Update Code to 1.96.2 (#7133) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 42b266171e51..fabdb6a30b49 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 42b266171e51a016313f47d0c48aca9295b9cbb2 +Subproject commit fabdb6a30b49f79a7aba0f2ad9df9b399473380f From f4f02655a1fad78570386ac2a4063fa936bf4c3a Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 20 Dec 2024 12:43:50 -0900 Subject: [PATCH 012/150] Release v4.96.2 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93a642a5a019..005d93099596 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.96.2](https://github.com/coder/code-server/releases/tag/v4.96.2) - 2024-12-20 + +Code v1.96.2 + +### Changed + +- Update to Code 1.96.2. + ## [4.96.1](https://github.com/coder/code-server/releases/tag/v4.96.1) - 2024-12-18 Code v1.96.1 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 7222e1f25a21..c6ee2e023d14 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.25.0 +version: 3.25.1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.96.1 +appVersion: 4.96.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index b73235716028..7da5cc13c445 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.96.1' + tag: '4.96.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From b18a647d0abc08d2860243478e0c50c8d40c26f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Mon, 13 Jan 2025 21:18:53 +0100 Subject: [PATCH 013/150] Update Alpine instructions (#7156) While trying to set up code-server on Alpine, I ran into build errors. To solve them, I had to add Kerberos development libs. Also, it looks like npm config doesn't work in recent version of Node and doesn't seem to be necessary. These instructions were tested in the Docker `node:20-alpine` image. --- docs/npm.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/npm.md b/docs/npm.md index 46fa5d02f505..d300cfa5bd55 100644 --- a/docs/npm.md +++ b/docs/npm.md @@ -62,8 +62,7 @@ Proceed to [installing](#installing) ## Alpine ```bash -apk add alpine-sdk bash libstdc++ libc6-compat -npm config set python python3 +apk add alpine-sdk bash libstdc++ libc6-compat python3 krb5-dev ``` Proceed to [installing](#installing) From b60985e53bb97ad570f5b30c07efbb59c56a7508 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Mon, 13 Jan 2025 21:37:17 +0100 Subject: [PATCH 014/150] Update Code to 1.96.3 (#7164) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index fabdb6a30b49..91fbdddc47bc 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit fabdb6a30b49f79a7aba0f2ad9df9b399473380f +Subproject commit 91fbdddc47bc9c09064bf7acf133d22631cbf083 From b7ef8f9bd70cb5b342fa8ec8a0086bad676d8124 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 17 Jan 2025 23:46:30 +0100 Subject: [PATCH 015/150] Update Code to 1.96.4 (#7170) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 91fbdddc47bc..cd4ee3b1c348 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 91fbdddc47bc9c09064bf7acf133d22631cbf083 +Subproject commit cd4ee3b1c348a13bafd8f9ad8060705f6d4b9cba From 7cc61ab1f40e158d620e7a7ca08ce772e0924853 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 20 Jan 2025 15:33:32 -0900 Subject: [PATCH 016/150] Release v4.96.4 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 005d93099596..8d6003b33317 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.96.4](https://github.com/coder/code-server/releases/tag/v4.96.4) - 2025-01-20 + +Code v1.96.4 + +### Changed + +- Update to Code 1.96.4. + ## [4.96.2](https://github.com/coder/code-server/releases/tag/v4.96.2) - 2024-12-20 Code v1.96.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index c6ee2e023d14..6a4123a9aa72 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.25.1 +version: 3.25.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.96.2 +appVersion: 4.96.4 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 7da5cc13c445..91c258929fe6 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.96.2' + tag: '4.96.4' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 0b7c04485715756aa87fddfc6487b2c328945798 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:11:21 -0900 Subject: [PATCH 017/150] chore: bump codecov/codecov-action from 4 to 5 (#7096) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yaml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 337b55ba6e73..621e609f00d1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -188,7 +188,7 @@ jobs: run: npm run test:unit - name: Upload coverage report to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} if: success() diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1a09c6dda41b..9e693e09583b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -71,7 +71,7 @@ jobs: - run: npm run test:integration - name: Upload coverage report to Codecov - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} if: success() From 96800cc52126ed8e8420169cea1ff8684d87c36b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:11:50 -0900 Subject: [PATCH 018/150] chore: bump aquasecurity/trivy-action from 0.28.0 to 0.29.0 (#7097) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.28.0 to 0.29.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2...18f2510ee396bbf400402947b394f2dd8c87dbb0) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security.yaml | 2 +- .github/workflows/trivy-docker.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index 5f41bec5bade..d67018340754 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -51,7 +51,7 @@ jobs: fetch-depth: 0 - name: Run Trivy vulnerability scanner in repo mode - uses: aquasecurity/trivy-action@915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2 + uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 with: scan-type: "fs" scan-ref: "." diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index 30c6efda575d..133720a621e5 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -51,7 +51,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in image mode - uses: aquasecurity/trivy-action@915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2 + uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 with: image-ref: "docker.io/codercom/code-server:latest" ignore-unfixed: true From 1c3fcf2a838e2bdb05c0cc63db5ccb8a0d2f1373 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:12:14 -0900 Subject: [PATCH 019/150] chore: bump @eslint/eslintrc from 3.1.0 to 3.2.0 (#7100) Bumps [@eslint/eslintrc](https://github.com/eslint/eslintrc) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/eslint/eslintrc/releases) - [Changelog](https://github.com/eslint/eslintrc/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslintrc/compare/v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: "@eslint/eslintrc" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3779af901516..937bf9e77eab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -164,11 +164,10 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", From ef713bde58bb1df096220158091211e9e839484b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 11:12:36 -0900 Subject: [PATCH 020/150] chore: bump globals from 15.10.0 to 15.14.0 (#7146) Bumps [globals](https://github.com/sindresorhus/globals) from 15.10.0 to 15.14.0. - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v15.10.0...v15.14.0) --- updated-dependencies: - dependency-name: globals dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 937bf9e77eab..0d52008a225f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2928,11 +2928,10 @@ } }, "node_modules/globals": { - "version": "15.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.10.0.tgz", - "integrity": "sha512-tqFIbz83w4Y5TCbtgjZjApohbuh7K9BxGYFm7ifwDR240tvdb7P9x+/9VvUKlmkPoiknoJtanI8UOrqxS3a7lQ==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, From 18cd97dc12747ec20ce1b33d373f3c1e7dbcb96a Mon Sep 17 00:00:00 2001 From: ChenPi11 <102936596+ChenPi11@users.noreply.github.com> Date: Wed, 12 Feb 2025 04:16:40 +0800 Subject: [PATCH 021/150] fix: invalid ESM module path on Windows (#7162) --- src/node/main.ts | 7 ++++++- src/node/routes/vscode.ts | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/node/main.ts b/src/node/main.ts index b3c4e4c14500..990a7af792b1 100644 --- a/src/node/main.ts +++ b/src/node/main.ts @@ -9,6 +9,7 @@ import { commit, version, vsRootPath } from "./constants" import { register } from "./routes" import { VSCodeModule } from "./routes/vscode" import { isDirectory, open } from "./util" +import * as os from "os" /** * Return true if the user passed an extension-related VS Code flag. @@ -51,7 +52,11 @@ export const runCodeCli = async (args: DefaultedArgs): Promise => { try { // See vscode.loadVSCode for more on this jank. process.env.CODE_SERVER_PARENT_PID = process.pid.toString() - const modPath = path.join(vsRootPath, "out/server-main.js") + let modPath = path.join(vsRootPath, "out/server-main.js") + if (os.platform() === "win32") { + // On Windows, absolute paths of ESM modules must be a valid file URI. + modPath = "file:///" + modPath.replace(/\\/g, "/") + } const mod = (await eval(`import("${modPath}")`)) as VSCodeModule const serverModule = await mod.loadCodeWithNls() await serverModule.spawnCli(await toCodeArgs(args)) diff --git a/src/node/routes/vscode.ts b/src/node/routes/vscode.ts index 7e8f0f3ff4e5..637a30352ceb 100644 --- a/src/node/routes/vscode.ts +++ b/src/node/routes/vscode.ts @@ -5,6 +5,7 @@ import { promises as fs } from "fs" import * as http from "http" import * as net from "net" import * as path from "path" +import * as os from "os" import { WebsocketRequest } from "../../../typings/pluginapi" import { logError } from "../../common/util" import { CodeArgs, toCodeArgs } from "../cli" @@ -58,7 +59,11 @@ async function loadVSCode(req: express.Request): Promise { // which will also require that we switch to ESM, since a hybrid approach // breaks importing `rotating-file-stream` for some reason. To work around // this, use `eval` for now, but we should consider switching to ESM. - const modPath = path.join(vsRootPath, "out/server-main.js") + let modPath = path.join(vsRootPath, "out/server-main.js") + if (os.platform() === "win32") { + // On Windows, absolute paths of ESM modules must be a valid file URI. + modPath = "file:///" + modPath.replace(/\\/g, "/") + } const mod = (await eval(`import("${modPath}")`)) as VSCodeModule const serverModule = await mod.loadCodeWithNls() return serverModule.createServer(null, { From a6fad66e5e667a1200e2c92d898a6e0bf6b2e65c Mon Sep 17 00:00:00 2001 From: Jan Larwig Date: Tue, 11 Feb 2025 21:24:31 +0100 Subject: [PATCH 022/150] doc: update upstream documentation urls (#7165) --- docs/guide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guide.md b/docs/guide.md index 60098ca7e679..c2f230ee5eb7 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -271,9 +271,9 @@ should see OSSStatus: 9836 in the browser console. If you want to use external authentication mechanism (e.g., Sign in with Google), you can do this with a reverse proxy such as: -- [Pomerium](https://www.pomerium.io/guides/code-server.html) -- [oauth2_proxy](https://github.com/pusher/oauth2_proxy) -- [Cloudflare Access](https://teams.cloudflare.com/access) +- [Pomerium](https://www.pomerium.com/docs/guides/code-server.html) +- [oauth2-proxy](https://oauth2-proxy.github.io/oauth2-proxy/) +- [Cloudflare Access](https://www.cloudflare.com/zero-trust/products/access/) ## HTTPS and self-signed certificates From d23d1a9541974f88d2a3f9e350dde17235f782c7 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 13 Feb 2025 00:34:05 +0100 Subject: [PATCH 023/150] Update Code to 1.97.0 (#7199) * Update Code to 1.97.0 * Update flake This is to get a newer version of Node since we need > 20.18.1. * Hijack new base path var * Update test path matchers --- flake.lock | 12 ++--- lib/vscode | 2 +- patches/base-path.diff | 60 ++++++++++--------------- patches/clipboard.diff | 16 +++---- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 22 ++------- patches/external-file-actions.diff | 12 ++--- patches/getting-started.diff | 8 ++-- patches/integration.diff | 8 ++-- patches/local-storage.diff | 10 ++--- patches/logout.diff | 10 ++--- patches/marketplace.diff | 19 ++++---- patches/proxy-uri.diff | 12 ++--- patches/service-worker.diff | 10 ++--- patches/sourcemaps.diff | 6 +-- patches/telemetry.diff | 6 +-- patches/update-check.diff | 8 ++-- patches/webview.diff | 12 ++--- test/e2e/routes.test.ts | 50 +++++++++++++-------- 19 files changed, 135 insertions(+), 150 deletions(-) diff --git a/flake.lock b/flake.lock index a877450fff10..948f73585131 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730359060, - "narHash": "sha256-Hkk0mf4pgvX9Ut0YA397nsFqMLhzFVBdFHc4PhBrxYE=", + "lastModified": 1739303263, + "narHash": "sha256-c/Z/6gZLN8BIpYh1B3qMzEn0TArjf4F2lmy59lDLVBM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e19cfce6f3f08d07653157d8826f5c920c770d7b", + "rev": "6cc4213488e886db863878a1e3dc26cc932d38b8", "type": "github" }, "original": { diff --git a/lib/vscode b/lib/vscode index cd4ee3b1c348..33fc5a94a3f9 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit cd4ee3b1c348a13bafd8f9ad8060705f6d4b9cba +Subproject commit 33fc5a94a3f99ebe7087e8fe79fbe1d37a251016 diff --git a/patches/base-path.diff b/patches/base-path.diff index ba6e054a8fe5..3a8a0eb41f36 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -111,21 +111,26 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -271,16 +271,15 @@ export class WebClientServer { - return void res.end(); - } +@@ -246,7 +246,9 @@ export class WebClientServer { + }; + + // Prefix routes with basePath for clients +- const basePath = getFirstHeader('x-forwarded-prefix') || this._basePath; ++ const rootBase = relativeRoot(getOriginalUrl(req)) ++ const vscodeBase = relativePath(getOriginalUrl(req)) ++ const basePath = vscodeBase || getFirstHeader('x-forwarded-prefix') || this._basePath; + + const queryConnectionToken = parsedUrl.query[connectionTokenQueryName]; + if (typeof queryConnectionToken === 'string') { +@@ -285,10 +287,14 @@ export class WebClientServer { + }; -- const getFirstHeader = (headerName: string) => { -- const val = req.headers[headerName]; -- return Array.isArray(val) ? val[0] : val; -- }; -- const useTestResolver = (!this._environmentService.isBuilt && this._environmentService.args['use-test-resolver']); + // For now we are getting the remote authority from the client to avoid + // needing specific configuration for reverse proxies to work. Set this to + // something invalid to make sure we catch code that is using this value + // from the backend when it should not. - const remoteAuthority = ( + let remoteAuthority = ( useTestResolver ? 'test+test' - : (getFirstHeader('x-original-host') || getFirstHeader('x-forwarded-host') || req.headers.host) @@ -133,43 +138,26 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts ); if (!remoteAuthority) { return serveError(req, res, 400, `Bad request.`); -@@ -307,8 +306,12 @@ export class WebClientServer { - scopes: [['user:email'], ['repo']] - } : undefined; +@@ -335,6 +341,7 @@ export class WebClientServer { -+ const base = relativeRoot(getOriginalUrl(req)) -+ const vscodeBase = relativePath(getOriginalUrl(req)) -+ const productConfiguration = { codeServerVersion: this._productService.codeServerVersion, -+ rootEndpoint: base, ++ rootEndpoint: rootBase, embedderIdentifier: 'server-distro', extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? { ...this._productService.extensionsGallery, -@@ -337,7 +340,7 @@ export class WebClientServer { - folderUri: resolveWorkspaceURI(this._environmentService.args['default-folder']), - workspaceUri: resolveWorkspaceURI(this._environmentService.args['default-workspace']), - productConfiguration, -- callbackRoute: this._callbackRoute -+ callbackRoute: vscodeBase + this._callbackRoute - }; - - const cookies = cookie.parse(req.headers.cookie || ''); -@@ -354,9 +357,11 @@ export class WebClientServer { - const values: { [key: string]: string } = { - WORKBENCH_WEB_CONFIGURATION: asJSON(workbenchWebConfiguration), +@@ -382,7 +389,9 @@ export class WebClientServer { WORKBENCH_AUTH_SESSION: authSessionInfo ? asJSON(authSessionInfo) : '', -- WORKBENCH_WEB_BASE_URL: this._staticRoute, -+ WORKBENCH_WEB_BASE_URL: vscodeBase + this._staticRoute, + WORKBENCH_WEB_BASE_URL: staticRoute, WORKBENCH_NLS_URL, -- WORKBENCH_NLS_FALLBACK_URL: `${this._staticRoute}/out/nls.messages.js` -+ WORKBENCH_NLS_FALLBACK_URL: `${vscodeBase}${this._staticRoute}/out/nls.messages.js`, -+ BASE: base, -+ VS_BASE: vscodeBase, +- WORKBENCH_NLS_FALLBACK_URL: `${staticRoute}/out/nls.messages.js` ++ WORKBENCH_NLS_FALLBACK_URL: `${staticRoute}/out/nls.messages.js`, ++ BASE: rootBase, ++ VS_BASE: basePath, }; // DEV --------------------------------------------------------------------------------------- -@@ -393,7 +398,7 @@ export class WebClientServer { +@@ -419,7 +428,7 @@ export class WebClientServer { 'default-src \'self\';', 'img-src \'self\' https: data: blob:;', 'media-src \'self\';', @@ -178,7 +166,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts 'child-src \'self\';', `frame-src 'self' https://*.vscode-cdn.net data:;`, 'worker-src \'self\' data: blob:;', -@@ -466,3 +471,70 @@ export class WebClientServer { +@@ -492,3 +501,70 @@ export class WebClientServer { return void res.end(data); } } diff --git a/patches/clipboard.diff b/patches/clipboard.diff index 84d6c8f84ebc..69b0f8558d13 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -26,7 +26,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostCLIServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/api/node/extHostCLIServer.ts +++ code-server/lib/vscode/src/vs/workbench/api/node/extHostCLIServer.ts -@@ -43,7 +43,12 @@ export interface ExtensionManagementPipe +@@ -44,7 +44,12 @@ export interface ExtensionManagementPipe force?: boolean; } @@ -40,7 +40,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostCLIServer.ts export interface ICommandsExecuter { executeCommand(id: string, ...args: any[]): Promise; -@@ -105,6 +110,9 @@ export class CLIServerBase { +@@ -106,6 +111,9 @@ export class CLIServerBase { case 'extensionManagement': returnObj = await this.manageExtensions(data); break; @@ -50,7 +50,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostCLIServer.ts default: sendResponse(404, `Unknown message type: ${data.type}`); break; -@@ -172,6 +180,10 @@ export class CLIServerBase { +@@ -173,6 +181,10 @@ export class CLIServerBase { return await this._commands.executeCommand('_remoteCLI.getSystemStatus'); } @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/common/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/argv.ts -@@ -119,6 +119,7 @@ export interface NativeParsedArgs { +@@ -121,6 +121,7 @@ export interface NativeParsedArgs { sandbox?: boolean; 'enable-coi'?: boolean; @@ -90,7 +90,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/node/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/node/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/node/argv.ts -@@ -90,6 +90,7 @@ export const OPTIONS: OptionDescriptions +@@ -91,6 +91,7 @@ export const OPTIONS: OptionDescriptions 'user-data-dir': { type: 'string', cat: 'o', args: 'dir', description: localize('userDataDir', "Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code.") }, 'profile': { type: 'string', 'cat': 'o', args: 'profileName', description: localize('profileName', "Opens the provided folder or workspace with the given profile and associates the profile with the workspace. If the profile does not exist, a new empty one is created.") }, 'help': { type: 'boolean', cat: 'o', alias: 'h', description: localize('help', "Print usage.") }, @@ -102,7 +102,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/server.cli.ts +++ code-server/lib/vscode/src/vs/server/node/server.cli.ts -@@ -76,6 +76,7 @@ const isSupportedForPipe = (optionId: ke +@@ -77,6 +77,7 @@ const isSupportedForPipe = (optionId: ke case 'verbose': case 'remote': case 'locate-shell-integration-path': @@ -110,7 +110,7 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts return true; default: return false; -@@ -293,6 +294,22 @@ export async function main(desc: Product +@@ -295,6 +296,22 @@ export async function main(desc: Product } } } else { @@ -131,5 +131,5 @@ Index: code-server/lib/vscode/src/vs/server/node/server.cli.ts + } + if (parsedArgs.status) { - sendToPipe({ + await sendToPipe({ type: 'status' diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index 842b54534747..6fd1da8b68c0 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -320,6 +320,10 @@ export class Extension implements IExten +@@ -321,6 +321,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index 9cfc21ca5083..51a384305ebc 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -161,23 +161,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts import { CharCode } from '../../base/common/charCode.js'; import { IExtensionManifest } from '../../platform/extensions/common/extensions.js'; import { ICSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js'; -@@ -98,6 +99,7 @@ export class WebClientServer { - private readonly _webExtensionResourceUrlTemplate: URI | undefined; - - private readonly _staticRoute: string; -+ private readonly _serverRoot: string; - private readonly _callbackRoute: string; - private readonly _webExtensionRoute: string; - -@@ -113,6 +115,7 @@ export class WebClientServer { - ) { - this._webExtensionResourceUrlTemplate = this._productService.extensionsGallery?.resourceUrlTemplate ? URI.parse(this._productService.extensionsGallery.resourceUrlTemplate) : undefined; - -+ this._serverRoot = serverRootPath; - this._staticRoute = `${serverRootPath}/static`; - this._callbackRoute = `${serverRootPath}/callback`; - this._webExtensionRoute = `/web-extension-resource`; -@@ -351,14 +354,22 @@ export class WebClientServer { +@@ -380,14 +381,22 @@ export class WebClientServer { }; const cookies = cookie.parse(req.headers.cookie || ''); @@ -193,7 +177,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + try { + const nlsFile = await getBrowserNLSConfiguration(locale, this._environmentService.userDataPath); + WORKBENCH_NLS_URL = nlsFile -+ ? `${vscodeBase}${this._serverRoot}/vscode-remote-resource?path=${encodeURIComponent(nlsFile)}` ++ ? `${vscodeBase}/vscode-remote-resource?path=${encodeURIComponent(nlsFile)}` + : ''; + } catch (error) { + console.error("Failed to generate translations", error); @@ -214,7 +198,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -105,6 +106,7 @@ export interface ServerParsedArgs { +@@ -106,6 +107,7 @@ export interface ServerParsedArgs { 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index dd89f4882f41..aff427dcf9d0 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -99,7 +99,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -99,6 +101,8 @@ export interface ServerParsedArgs { +@@ -100,6 +102,8 @@ export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; 'auth'?: string; @@ -112,9 +112,9 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -335,6 +335,8 @@ export class WebClientServer { - serverBasePath: this._basePath, - webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', +@@ -364,6 +364,8 @@ export class WebClientServer { + serverBasePath: basePath, + webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', userDataPath: this._environmentService.userDataPath, + isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'], + isEnabledFileUploads: !this._environmentService.args['disable-file-uploads'], @@ -240,10 +240,10 @@ Index: code-server/lib/vscode/src/vs/workbench/services/dialogs/browser/simpleFi @IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService, @IPathService protected readonly pathService: IPathService, @IKeybindingService private readonly keybindingService: IKeybindingService, -@@ -283,20 +283,22 @@ export class SimpleFileDialog extends Di - this.filePickBox.sortByLabel = false; +@@ -284,20 +284,22 @@ export class SimpleFileDialog extends Di this.filePickBox.ignoreFocusOut = true; this.filePickBox.ok = true; + this.filePickBox.okLabel = this.options.openLabel; - if ((this.scheme !== Schemas.file) && this.options && this.options.availableFileSystems && (this.options.availableFileSystems.length > 1) && (this.options.availableFileSystems.indexOf(Schemas.file) > -1)) { - this.filePickBox.customButton = true; - this.filePickBox.customLabel = nls.localize('remoteFileDialog.local', 'Show Local'); diff --git a/patches/getting-started.diff b/patches/getting-started.diff index cf06077f8a0a..4fa3e4f91c16 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -834,6 +834,72 @@ export class GettingStartedPage extends +@@ -869,6 +869,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -869,6 +935,9 @@ export class GettingStartedPage extends +@@ -904,6 +970,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } @@ -189,7 +189,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -103,6 +104,7 @@ export interface ServerParsedArgs { +@@ -104,6 +105,7 @@ export interface ServerParsedArgs { 'auth'?: string; 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; @@ -201,7 +201,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -339,6 +339,7 @@ export class WebClientServer { +@@ -368,6 +368,7 @@ export class WebClientServer { userDataPath: this._environmentService.userDataPath, isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'], isEnabledFileUploads: !this._environmentService.args['disable-file-uploads'], diff --git a/patches/integration.diff b/patches/integration.diff index 09a072e53c83..172a3d146945 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -113,7 +113,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandl =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +++ code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -@@ -78,8 +78,11 @@ export class BrowserDialogHandler extend +@@ -77,8 +77,11 @@ export class BrowserDialogHandler extend async about(): Promise { const detailString = (useAgo: boolean): string => { @@ -187,10 +187,10 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/web.main.ts import { IndexedDB } from '../../base/browser/indexedDB.js'; import { WebFileSystemAccess } from '../../platform/files/browser/webFileSystemAccess.js'; +import { CodeServerClient } from '../../workbench/browser/client.js'; - import { ITelemetryService } from '../../platform/telemetry/common/telemetry.js'; import { IProgressService } from '../../platform/progress/common/progress.js'; import { DelayedLogChannel } from '../services/output/common/delayedLogChannel.js'; -@@ -131,6 +132,9 @@ export class BrowserMain extends Disposa + import { dirname, joinPath } from '../../base/common/resources.js'; +@@ -130,6 +131,9 @@ export class BrowserMain extends Disposa // Startup const instantiationService = workbench.startup(); @@ -269,7 +269,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -308,6 +308,7 @@ export class WebClientServer { +@@ -334,6 +334,7 @@ export class WebClientServer { } : undefined; const productConfiguration = { diff --git a/patches/local-storage.diff b/patches/local-storage.diff index 3e187b5ffb94..da73ef401148 100644 --- a/patches/local-storage.diff +++ b/patches/local-storage.diff @@ -18,10 +18,10 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -330,6 +330,7 @@ export class WebClientServer { +@@ -359,6 +359,7 @@ export class WebClientServer { remoteAuthority, - serverBasePath: this._basePath, - webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', + serverBasePath: basePath, + webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', + userDataPath: this._environmentService.userDataPath, _wrapWebWorkerExtHostInIframe, developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() }, @@ -66,7 +66,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts +++ code-server/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts -@@ -145,8 +145,10 @@ export class WorkspaceService extends Di +@@ -147,8 +147,10 @@ export class WorkspaceService extends Di this.workspaceConfiguration = this._register(new WorkspaceConfiguration(configurationCache, fileService, uriIdentityService, logService)); this._register(this.workspaceConfiguration.onDidUpdateConfiguration(fromCache => { this.onWorkspaceConfigurationChanged(fromCache).then(() => { @@ -79,7 +79,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co }); })); -@@ -552,6 +554,12 @@ export class WorkspaceService extends Di +@@ -555,6 +557,12 @@ export class WorkspaceService extends Di previousFolders = this.workspace.folders; this.workspace.update(workspace); } else { diff --git a/patches/logout.diff b/patches/logout.diff index 32f4ecaf5de0..b351b1947fc9 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -97,6 +98,7 @@ export const serverOptions: OptionDescri +@@ -98,6 +99,7 @@ export const serverOptions: OptionDescri export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; @@ -40,11 +40,11 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -313,6 +313,7 @@ export class WebClientServer { +@@ -342,6 +342,7 @@ export class WebClientServer { codeServerVersion: this._productService.codeServerVersion, - rootEndpoint: base, - updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined, -+ logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined, + rootEndpoint: rootBase, + updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, ++ logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? rootBase + '/logout' : undefined, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, } satisfies Partial; diff --git a/patches/marketplace.diff b/patches/marketplace.diff index ccc809dbdc5d..c5735bd6e61f 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -40,25 +40,24 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -115,7 +115,7 @@ export class WebClientServer { +@@ -327,7 +327,6 @@ export class WebClientServer { - this._staticRoute = `${serverRootPath}/static`; - this._callbackRoute = `${serverRootPath}/callback`; -- this._webExtensionRoute = `${serverRootPath}/web-extension-resource`; -+ this._webExtensionRoute = `/web-extension-resource`; - } + const staticRoute = posix.join(basePath, this._productPath, STATIC_PATH); + const callbackRoute = posix.join(basePath, this._productPath, CALLBACK_PATH); +- const webExtensionRoute = posix.join(basePath, this._productPath, WEB_EXTENSION_PATH); + + const resolveWorkspaceURI = (defaultLocation?: string) => defaultLocation && URI.file(path.resolve(defaultLocation)).with({ scheme: Schemas.vscodeRemote, authority: remoteAuthority }); - /** -@@ -313,14 +313,7 @@ export class WebClientServer { +@@ -343,14 +342,7 @@ export class WebClientServer { codeServerVersion: this._productService.codeServerVersion, - rootEndpoint: base, + rootEndpoint: rootBase, embedderIdentifier: 'server-distro', - extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? { - ...this._productService.extensionsGallery, - resourceUrlTemplate: this._webExtensionResourceUrlTemplate.with({ - scheme: 'http', - authority: remoteAuthority, -- path: `${this._webExtensionRoute}/${this._webExtensionResourceUrlTemplate.authority}${this._webExtensionResourceUrlTemplate.path}` +- path: `${webExtensionRoute}/${this._webExtensionResourceUrlTemplate.authority}${this._webExtensionResourceUrlTemplate.path}` - }).toString(true) - } : undefined + extensionsGallery: this._productService.extensionsGallery, diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index 2d2e014e3cf8..3adceb265a5c 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -71,11 +71,11 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -314,6 +314,7 @@ export class WebClientServer { - rootEndpoint: base, - updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined, - logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined, -+ proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? base + '/proxy/{{port}}/', +@@ -343,6 +343,7 @@ export class WebClientServer { + rootEndpoint: rootBase, + updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, + logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? rootBase + '/logout' : undefined, ++ proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? rootBase + '/proxy/{{port}}/', embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, } satisfies Partial; @@ -148,7 +148,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/remote/browser/remoteExpl =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts -@@ -77,8 +77,8 @@ export class ForwardedPortsView extends +@@ -83,8 +83,8 @@ export class ForwardedPortsView extends private async enableForwardedPortsFeatures() { this.contextKeyListener.clear(); diff --git a/patches/service-worker.diff b/patches/service-worker.diff index 3adf246fbf30..96266ee50c6d 100644 --- a/patches/service-worker.diff +++ b/patches/service-worker.diff @@ -54,13 +54,13 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -315,6 +315,10 @@ export class WebClientServer { - updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined, - logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? base + '/logout' : undefined, - proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? base + '/proxy/{{port}}/', +@@ -344,6 +344,10 @@ export class WebClientServer { + updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, + logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? rootBase + '/logout' : undefined, + proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? rootBase + '/proxy/{{port}}/', + serviceWorker: { + scope: vscodeBase + '/', -+ path: base + '/_static/out/browser/serviceWorker.js', ++ path: rootBase + '/_static/out/browser/serviceWorker.js', + }, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, diff --git a/patches/sourcemaps.diff b/patches/sourcemaps.diff index 18792a317e51..ceef9dcb5404 100644 --- a/patches/sourcemaps.diff +++ b/patches/sourcemaps.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js =================================================================== --- code-server.orig/lib/vscode/build/gulpfile.reh.js +++ code-server/lib/vscode/build/gulpfile.reh.js -@@ -253,8 +253,7 @@ function packageTask(type, platform, arc +@@ -256,8 +256,7 @@ function packageTask(type, platform, arc const src = gulp.src(sourceFolderName + '/**', { base: '.' }) .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); })) @@ -20,7 +20,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js const workspaceExtensionPoints = ['debuggers', 'jsonValidation']; const isUIExtension = (manifest) => { -@@ -293,9 +292,9 @@ function packageTask(type, platform, arc +@@ -296,9 +295,9 @@ function packageTask(type, platform, arc .map(name => `.build/extensions/${name}/**`); const extensions = gulp.src(extensionPaths, { base: '.build', dot: true }); @@ -32,7 +32,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js let version = packageJson.version; const quality = product.quality; -@@ -454,7 +453,7 @@ function tweakProductForServerWeb(produc +@@ -457,7 +456,7 @@ function tweakProductForServerWeb(produc const minifyTask = task.define(`minify-vscode-${type}`, task.series( bundleTask, util.rimraf(`out-vscode-${type}-min`), diff --git a/patches/telemetry.diff b/patches/telemetry.diff index 850a3f3d78ff..bf6b2c2d3fd2 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -29,7 +29,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; @@ -152,11 +154,23 @@ export async function setupServerService - const requestService = new RequestService(configurationService, environmentService, logService); + const requestService = new RequestService('remote', configurationService, environmentService, logService); services.set(IRequestService, requestService); + let isContainer = undefined; @@ -134,9 +134,9 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -319,6 +319,8 @@ export class WebClientServer { +@@ -348,6 +348,8 @@ export class WebClientServer { scope: vscodeBase + '/', - path: base + '/_static/out/browser/serviceWorker.js', + path: rootBase + '/_static/out/browser/serviceWorker.js', }, + enableTelemetry: this._productService.enableTelemetry, + telemetryEndpoint: this._productService.telemetryEndpoint, diff --git a/patches/update-check.diff b/patches/update-check.diff index 91dbca114738..63617afdd41f 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -105,11 +105,11 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -312,6 +312,7 @@ export class WebClientServer { +@@ -341,6 +341,7 @@ export class WebClientServer { const productConfiguration = { codeServerVersion: this._productService.codeServerVersion, - rootEndpoint: base, -+ updateEndpoint: !this._environmentService.args['disable-update-check'] ? base + '/update/check' : undefined, + rootEndpoint: rootBase, ++ updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, } satisfies Partial; @@ -126,7 +126,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -93,6 +95,8 @@ export const serverOptions: OptionDescri +@@ -94,6 +96,8 @@ export const serverOptions: OptionDescri }; export interface ServerParsedArgs { diff --git a/patches/webview.diff b/patches/webview.diff index aab7aa9309f8..5a1cff46afa7 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -54,11 +54,11 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -326,6 +326,7 @@ export class WebClientServer { +@@ -355,6 +355,7 @@ export class WebClientServer { const workbenchWebConfiguration = { remoteAuthority, - serverBasePath: this._basePath, -+ webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', + serverBasePath: basePath, ++ webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', _wrapWebWorkerExtHostInIframe, developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() }, settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined, @@ -113,12 +113,12 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/worker/webWor -@@ -23,6 +23,13 @@ +@@ -25,6 +25,13 @@ // validation not requested return start(); } diff --git a/test/e2e/routes.test.ts b/test/e2e/routes.test.ts index 2ac87d0026a9..39c19697e9b9 100644 --- a/test/e2e/routes.test.ts +++ b/test/e2e/routes.test.ts @@ -1,7 +1,26 @@ import { clean, getMaybeProxiedPathname } from "../utils/helpers" import { describe, test, expect } from "./baseFixture" -const routes = ["/", "/vscode", "/vscode/"] +const routes = { + "/": [ + /\.\/manifest.json/, + /\.\/_static\//, + /[a-z]+-[0-9a-z]+\/static\//, + /http:\/\/localhost:[0-9]+\/[a-z]+-[0-9a-z]+\/static\//, + ], + "/vscode": [ + /\.\/vscode\/manifest.json/, + /\.\/_static\//, + /vscode\/[a-z]+-[0-9a-z]+\/static\//, + /http:\/\/localhost:[0-9]+\/vscode\/[a-z]+-[0-9a-z]+\/static\//, + ], + "/vscode/": [ + /\.\/manifest.json/, + /\.\/\.\.\/_static\//, + /[a-z]+-[0-9a-z]+\/static\//, + /http:\/\/localhost:[0-9]+\/vscode\/[a-z]+-[0-9a-z]+\/static\//, + ], +} describe("VS Code Routes", ["--disable-workspace-trust"], {}, async () => { const testName = "vscode-routes-default" @@ -10,7 +29,7 @@ describe("VS Code Routes", ["--disable-workspace-trust"], {}, async () => { }) test("should load all route variations", async ({ codeServerPage }) => { - for (const route of routes) { + for (const [route, matchers] of Object.entries(routes)) { await codeServerPage.navigate(route) // Check there were no redirections @@ -18,21 +37,16 @@ describe("VS Code Routes", ["--disable-workspace-trust"], {}, async () => { const pathname = getMaybeProxiedPathname(url) expect(pathname).toBe(route) - // TODO@jsjoeio - // now that we are in a proper browser instead of scraping the HTML we - // could possibly intercept requests to make sure assets are loading from - // the right spot. - // - // Check that page loaded from correct route - const html = await codeServerPage.page.innerHTML("html") - switch (route) { - case "/": - case "/vscode/": - expect(html).toMatch(/src="\.\/[a-z]+-[0-9a-z]+\/static\//) - break - case "/vscode": - expect(html).toMatch(/src="\.\/vscode\/[a-z]+-[0-9a-z]+\/static\//) - break + // Check that assets are pointing to the right spot. Some will be + // relative, without a leading dot (VS Code's assets). Some will be + // relative with a leading dot (our assets). Others will have been + // resolved against the origin. + const elements = await codeServerPage.page.locator("[src]").all() + for (const element of elements) { + const src = await element.getAttribute("src") + if (src && !matchers.some((m) => m.test(src))) { + throw new Error(`${src} did not match any validators for route ${route}`) + } } } }) @@ -85,7 +99,7 @@ describe("VS Code Routes with no workspace or folder", ["--disable-workspace-tru // If you visit again without query parameters it will re-attach them by // redirecting. It should always redirect to the same route. - for (const route of routes) { + for (const route of Object.keys(routes)) { await codeServerPage.navigate(route) const url = new URL(codeServerPage.page.url()) const pathname = getMaybeProxiedPathname(url) From 33aa21fd0f0d22fa8561284ac60755f1b29eca4b Mon Sep 17 00:00:00 2001 From: bilogic <946010+bilogic@users.noreply.github.com> Date: Thu, 13 Feb 2025 08:08:39 +0800 Subject: [PATCH 024/150] Softer dark mode (#7178) --- src/browser/pages/global.css | 17 +++++++++-------- src/browser/pages/login.css | 12 ++++++++++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/browser/pages/global.css b/src/browser/pages/global.css index 6ccbdc8367a6..e6e42e65652d 100644 --- a/src/browser/pages/global.css +++ b/src/browser/pages/global.css @@ -11,7 +11,7 @@ body, body { background: rgb(244, 247, 252); - background: light-dark(rgb(244, 247, 252), #111); + background: light-dark(rgb(244, 247, 252), #111827); color: #111; color: light-dark(#111, #ddd); margin: 0; @@ -29,14 +29,15 @@ button { .-button { background-color: rgb(87, 114, 245); - background-color: light-dark(rgb(87, 114, 245), rgb(50, 85, 250)); + background-color: light-dark(rgb(87, 114, 245), rgb(26, 86, 219)); border-radius: 5px; border: none; box-sizing: border-box; color: white; - color: light-dark(white, #ddd); + color: light-dark(white, white); cursor: pointer; padding: 18px 20px; + font-weight: 500; text-decoration: none; } @@ -53,10 +54,10 @@ button { .card-box { background-color: rgb(250, 253, 258); - background-color: light-dark(rgb(250, 253, 258), #000); + background-color: light-dark(rgb(250, 253, 258), #1f2937); border-radius: 5px; box-shadow: - rgba(60, 66, 87, 0.117647) 0px 7px 14px 0px, + light-dark(rgba(60, 66, 87, 0.117647), rgba(10, 10, 10, 0.617647)) 0px 7px 14px 0px, rgba(0, 0, 0, 0.117647) 0px 3px 6px 0px; max-width: 650px; width: 100%; @@ -64,9 +65,9 @@ button { .card-box > .header { border-bottom: 1px solid #ddd; - border-bottom: 1px solid light-dark(#ddd, #222); + border-bottom: 1px solid light-dark(#ddd, #111827); color: #444; - color: light-dark(#444, #ccc); + color: light-dark(#444, #fff); padding: 30px; } @@ -77,7 +78,7 @@ button { .card-box > .header > .sub { color: #555; - color: light-dark(#555, #aaa); + color: light-dark(#555, #9ca3af); margin-top: 10px; } diff --git a/src/browser/pages/login.css b/src/browser/pages/login.css index 1647c575f954..33b541c9e844 100644 --- a/src/browser/pages/login.css +++ b/src/browser/pages/login.css @@ -30,15 +30,23 @@ body { .login-form > .field > .password { background-color: rgb(244, 247, 252); - background-color: light-dark(rgb(244, 247, 252), #222); + background-color: light-dark(rgb(244, 247, 252), #374151); border-radius: 5px; border: 1px solid #ddd; - border: 1px solid light-dark(#ddd, #333); + border: 1px solid light-dark(#ddd, #4b5563); box-sizing: border-box; flex: 1; padding: 16px; } +.login-form > .field > .password::placeholder { + color: rgb(148 163 184); +} + +.login-form > .field > .password:focus { + outline: 2px solid rgb(63, 131, 248); +} + .login-form > .user { display: none; } From ac65db2c880f078f78d9dca51e23b2e59b0a2092 Mon Sep 17 00:00:00 2001 From: mickkael <19755421+mickkael@users.noreply.github.com> Date: Thu, 13 Feb 2025 08:10:08 +0800 Subject: [PATCH 025/150] fix replicas and existingSecret. bump to 3.25.3 (#7187) --- ci/helm-chart/Chart.yaml | 2 +- ci/helm-chart/templates/deployment.yaml | 2 +- ci/helm-chart/values.yaml | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 6a4123a9aa72..3eaa024172a5 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.25.2 +version: 3.25.3 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to diff --git a/ci/helm-chart/templates/deployment.yaml b/ci/helm-chart/templates/deployment.yaml index 474653c33aac..b0bde8621840 100644 --- a/ci/helm-chart/templates/deployment.yaml +++ b/ci/helm-chart/templates/deployment.yaml @@ -8,7 +8,7 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} spec: - replicas: 1 + replicas: {{ .Values.replicaCount | default 1 }} strategy: type: Recreate selector: diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 91c258929fe6..120615925ab0 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -19,6 +19,9 @@ nameOverride: "" fullnameOverride: "" hostnameOverride: "" +# The existing secret to use for code-server authentication in the frontend. the password is stored in the secret under the key `password` +# existingSecret: "" + serviceAccount: # Specifies whether a service account should be created create: true From ebf2df63f5f4af4b6e2680118ad12f319592709b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:12:31 -0900 Subject: [PATCH 026/150] chore: bump dawidd6/action-download-artifact from 6 to 8 (#7191) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 6 to 8. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v6...v8) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9e693e09583b..90c73443f8d5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -275,7 +275,7 @@ jobs: timeout-minutes: 15 steps: - name: Download artifacts - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v8 id: download with: branch: ${{ github.ref }} From 626d2cf1c389b6fdb0166a5e7cb47fed2348eb06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:15:32 -0900 Subject: [PATCH 027/150] chore: bump @types/node from 20.16.10 to 20.17.17 (#7201) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.16.10 to 20.17.17. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d52008a225f..b24075611341 100644 --- a/package-lock.json +++ b/package-lock.json @@ -593,10 +593,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.16.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", - "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", + "version": "20.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", + "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } From 9b89774ff6e1122fc9131173fd71683c9b92f31f Mon Sep 17 00:00:00 2001 From: SXX Date: Thu, 13 Feb 2025 08:17:19 +0800 Subject: [PATCH 028/150] Add back macOS amd64 release (#7196) --- .github/workflows/release.yaml | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 90c73443f8d5..d85a927e4ab4 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -193,6 +193,67 @@ jobs: package-macos-amd64: name: x86-64 macOS build + runs-on: macos-13 + timeout-minutes: 15 + needs: npm-version + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + cache-dependency-path: | + package-lock.json + test/package-lock.json + + - run: SKIP_SUBMODULE_DEPS=1 npm ci + + - name: Install nfpm + run: | + mkdir -p ~/.local/bin + curl -sSfL https://github.com/goreleaser/nfpm/releases/download/v2.3.1/nfpm_2.3.1_`uname -s`_`uname -m`.tar.gz | tar -C ~/.local/bin -zxv nfpm + echo "$HOME/.local/bin" >> $GITHUB_PATH + + # The version of node-gyp we use depends on distutils but it was removed + # in Python 3.12. It seems to be fixed in the latest node-gyp so when we + # next update Node we can probably remove this. For now, install + # setuptools since it contains distutils. + - run: brew install python-setuptools + + - name: Download npm package + uses: actions/download-artifact@v4 + with: + name: npm-release-package + + - run: tar -xzf package.tar.gz + - run: npm run release:standalone + - run: npm run test:native + + # Strip out the v (v4.9.1 -> 4.9.1). + - name: Get and set VERSION + run: | + TAG="${{ inputs.version || github.ref_name }}" + echo "VERSION=${TAG#v}" >> $GITHUB_ENV + + - name: Build packages with nfpm + env: + VERSION: ${{ env.VERSION }} + run: npm run package + + - uses: softprops/action-gh-release@v1 + with: + draft: true + discussion_category_name: "📣 Announcements" + files: ./release-packages/* + + package-macos-arm64: + name: arm64 macOS build runs-on: macos-latest timeout-minutes: 15 needs: npm-version From 3172cb16b8c1f947bc8d79f447a2baac1d219c08 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 13 Feb 2025 11:01:51 +0100 Subject: [PATCH 029/150] Update Code to 1.97.1 (#7202) --- lib/vscode | 2 +- patches/integration.diff | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/vscode b/lib/vscode index 33fc5a94a3f9..e249dada235c 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 33fc5a94a3f99ebe7087e8fe79fbe1d37a251016 +Subproject commit e249dada235c2083c83813bd65b7f4707fb97b76 diff --git a/patches/integration.diff b/patches/integration.diff index 172a3d146945..6d577670792f 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -299,7 +299,7 @@ Index: code-server/lib/vscode/src/server-main.ts function sanitizeStringArg(val: any): string | undefined { if (Array.isArray(val)) { // if an argument is passed multiple times, minimist creates an array -@@ -283,3 +287,22 @@ function prompt(question: string): Promi +@@ -286,3 +290,22 @@ function prompt(question: string): Promi }); }); } From 34b8d2ed69811c3315a465f01492e9448c9254aa Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 14 Feb 2025 01:27:27 +0100 Subject: [PATCH 030/150] Update Code to 1.97.2 (#7205) --- lib/vscode | 2 +- patches/external-file-actions.diff | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/vscode b/lib/vscode index e249dada235c..e54c774e0add 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit e249dada235c2083c83813bd65b7f4707fb97b76 +Subproject commit e54c774e0add60467559eb0d1e229c6452cf8447 diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index aff427dcf9d0..5fcd3c01c3c9 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -243,7 +243,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/dialogs/browser/simpleFi @@ -284,20 +284,22 @@ export class SimpleFileDialog extends Di this.filePickBox.ignoreFocusOut = true; this.filePickBox.ok = true; - this.filePickBox.okLabel = this.options.openLabel; + this.filePickBox.okLabel = typeof this.options.openLabel === 'string' ? this.options.openLabel : this.options.openLabel?.withoutMnemonic; - if ((this.scheme !== Schemas.file) && this.options && this.options.availableFileSystems && (this.options.availableFileSystems.length > 1) && (this.options.availableFileSystems.indexOf(Schemas.file) > -1)) { - this.filePickBox.customButton = true; - this.filePickBox.customLabel = nls.localize('remoteFileDialog.local', 'Show Local'); From 6f8493ebc67835fab0d2cc9b6b56f86db201c672 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 6 Mar 2025 21:16:42 +0100 Subject: [PATCH 031/150] Delete user 1000 in Docker before adding coder user (#7235) - Resolve https://github.com/coder/code-server/issues/7232 --- ci/release-image/Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci/release-image/Dockerfile b/ci/release-image/Dockerfile index afdd1b851601..fba7189e6999 100644 --- a/ci/release-image/Dockerfile +++ b/ci/release-image/Dockerfile @@ -31,7 +31,10 @@ RUN sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen \ && locale-gen ENV LANG=en_US.UTF-8 -RUN adduser --gecos '' --disabled-password coder \ +RUN if grep -q 1000 /etc/passwd; then \ + userdel -r "$(id -un 1000)"; \ + fi \ + && adduser --gecos '' --disabled-password coder \ && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd RUN ARCH="$(dpkg --print-architecture)" \ From 31c211adedc75dee22dbee2b608d0a370523f14a Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 6 Mar 2025 21:32:11 +0100 Subject: [PATCH 032/150] Update Code to 1.98.0 (#7249) * Update Code to 1.98.0 * Avoid sudo when launching caddy It is erroring about needing a password, but also do we even need to run this as root considering we are not binding to privileged ports? --------- Co-authored-by: Asher --- .github/workflows/build.yaml | 4 ++-- .node-version | 2 +- lib/vscode | 2 +- patches/clipboard.diff | 2 +- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 2 +- patches/external-file-actions.diff | 6 +++--- patches/getting-started.diff | 6 +++--- patches/integration.diff | 2 +- patches/telemetry.diff | 2 +- patches/webview.diff | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 621e609f00d1..897f72e1b9fb 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -377,12 +377,12 @@ jobs: mkdir -p ~/.cache/caddy tar -xzf caddy_2.5.2_linux_amd64.tar.gz --directory ~/.cache/caddy - - run: sudo ~/.cache/caddy/caddy start --config ./ci/Caddyfile + - run: ~/.cache/caddy/caddy start --config ./ci/Caddyfile - run: CODE_SERVER_TEST_ENTRY=./release npm run test:e2e:proxy - if: always() - run: sudo ~/.cache/caddy/caddy stop --config ./ci/Caddyfile + run: ~/.cache/caddy/caddy stop --config ./ci/Caddyfile - if: always() uses: actions/upload-artifact@v4 diff --git a/.node-version b/.node-version index d4b7699d36ca..0254b1e633c7 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.18.1 +20.18.2 diff --git a/lib/vscode b/lib/vscode index e54c774e0add..6609ac3d66f4 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit e54c774e0add60467559eb0d1e229c6452cf8447 +Subproject commit 6609ac3d66f4eade5cf376d1cb76f13985724bcb diff --git a/patches/clipboard.diff b/patches/clipboard.diff index 69b0f8558d13..2c4063c0247c 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/common/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/argv.ts -@@ -121,6 +121,7 @@ export interface NativeParsedArgs { +@@ -122,6 +122,7 @@ export interface NativeParsedArgs { sandbox?: boolean; 'enable-coi'?: boolean; diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index 6fd1da8b68c0..73a78c574b28 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -321,6 +321,10 @@ export class Extension implements IExten +@@ -319,6 +319,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index 51a384305ebc..96d996ea7bcc 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; -@@ -245,6 +245,9 @@ export async function setupServerService +@@ -246,6 +246,9 @@ export async function setupServerService const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority)); socketServer.registerChannel('extensions', channel); diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index 5fcd3c01c3c9..912279e8a4f9 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -208,7 +208,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -41,6 +41,9 @@ export const HasWebFileSystemAccess = ne +@@ -39,6 +39,9 @@ export const HasWebFileSystemAccess = ne export const EmbedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined')); @@ -231,7 +231,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/dialogs/browser/simpleFi import { IRemoteAgentService } from '../../remote/common/remoteAgentService.js'; import { IContextKeyService, IContextKey, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; import { equalsIgnoreCase, format, startsWithIgnoreCase } from '../../../../base/common/strings.js'; -@@ -139,7 +139,7 @@ export class SimpleFileDialog extends Di +@@ -144,7 +144,7 @@ export class SimpleFileDialog extends Di @IFileDialogService private readonly fileDialogService: IFileDialogService, @IModelService private readonly modelService: IModelService, @ILanguageService private readonly languageService: ILanguageService, @@ -240,7 +240,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/dialogs/browser/simpleFi @IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService, @IPathService protected readonly pathService: IPathService, @IKeybindingService private readonly keybindingService: IKeybindingService, -@@ -284,20 +284,22 @@ export class SimpleFileDialog extends Di +@@ -310,20 +310,22 @@ export class SimpleFileDialog extends Di this.filePickBox.ignoreFocusOut = true; this.filePickBox.ok = true; this.filePickBox.okLabel = typeof this.options.openLabel === 'string' ? this.options.openLabel : this.options.openLabel?.withoutMnemonic; diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 4fa3e4f91c16..9bdbaa8aaa03 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -869,6 +869,72 @@ export class GettingStartedPage extends +@@ -870,6 +870,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -904,6 +970,9 @@ export class GettingStartedPage extends +@@ -905,6 +971,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } @@ -234,7 +234,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -43,6 +43,7 @@ export const EmbedderIdentifierContext = +@@ -41,6 +41,7 @@ export const EmbedderIdentifierContext = export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/integration.diff b/patches/integration.diff index 6d577670792f..06a4ddb6a5e7 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -113,7 +113,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandl =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +++ code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -@@ -77,8 +77,11 @@ export class BrowserDialogHandler extend +@@ -79,8 +79,11 @@ export class BrowserDialogHandler extend async about(): Promise { const detailString = (useAgo: boolean): string => { diff --git a/patches/telemetry.diff b/patches/telemetry.diff index bf6b2c2d3fd2..f1919bd168a0 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { NullPolicyService } from '../../platform/policy/common/policy.js'; import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; -@@ -152,11 +154,23 @@ export async function setupServerService +@@ -153,11 +155,23 @@ export async function setupServerService const requestService = new RequestService('remote', configurationService, environmentService, logService); services.set(IRequestService, requestService); diff --git a/patches/webview.diff b/patches/webview.diff index 5a1cff46afa7..b22eca84b577 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -41,7 +41,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/envi =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts +++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts -@@ -225,7 +225,7 @@ export class BrowserWorkbenchEnvironment +@@ -220,7 +220,7 @@ export class BrowserWorkbenchEnvironment @memoize get webviewExternalEndpoint(): string { From 0db3cbe4e7c25915b449029d589aed07844dbe9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 11:32:37 -0900 Subject: [PATCH 033/150] chore: bump semver from 7.6.3 to 7.7.1 (#7238) Bumps [semver](https://github.com/npm/node-semver) from 7.6.3 to 7.7.1. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.6.3...v7.7.1) --- updated-dependencies: - dependency-name: semver dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b24075611341..a0ce55557452 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5105,9 +5105,10 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, From 611798650f3e83c068d1d0bbf80357b51184bdf8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 11:32:55 -0900 Subject: [PATCH 034/150] chore: bump compression from 1.7.4 to 1.8.0 (#7236) Bumps [compression](https://github.com/expressjs/compression) from 1.7.4 to 1.8.0. - [Release notes](https://github.com/expressjs/compression/releases) - [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/compression/compare/1.7.4...1.8.0) --- updated-dependencies: - dependency-name: compression dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 50 +++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index a0ce55557452..97fbf1a29547 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1236,14 +1236,6 @@ "node": ">= 0.10" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -1313,9 +1305,10 @@ "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1458,16 +1451,17 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -1487,10 +1481,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -4812,14 +4810,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", From fd761b4e8bbaf7da21221bf1df61089617ca9ad6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 11:34:04 -0900 Subject: [PATCH 035/150] chore: bump eslint-import-resolver-typescript from 3.6.3 to 3.8.3 (#7240) Bumps [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) from 3.6.3 to 3.8.3. - [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases) - [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v3.6.3...v3.8.3) --- updated-dependencies: - dependency-name: eslint-import-resolver-typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 76 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97fbf1a29547..9f300cad98b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2141,19 +2141,19 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", - "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.8.3.tgz", + "integrity": "sha512-A0bu4Ks2QqDWNpeEgTQMPTngaMhuDu4yv6xpftBMAf+1ziXnpx+eSR1WRfoPTe2BAiAjHFZ7kSNx1fvr5g5pmQ==", "dev": true, + "license": "ISC", "dependencies": { "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.5", + "debug": "^4.3.7", "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", + "get-tsconfig": "^4.10.0", "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3" + "stable-hash": "^0.0.4", + "tinyglobby": "^0.2.12" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -2869,10 +2869,11 @@ } }, "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", "dev": true, + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -4947,6 +4948,7 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -5314,6 +5316,13 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -5501,6 +5510,51 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", From db5f99dc7820590e94053be5ce48a3a07fdeb61c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 11:34:15 -0900 Subject: [PATCH 036/150] chore: bump dawidd6/action-download-artifact from 8 to 9 (#7241) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 8 to 9. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v8...v9) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d85a927e4ab4..20e77e847aaf 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -336,7 +336,7 @@ jobs: timeout-minutes: 15 steps: - name: Download artifacts - uses: dawidd6/action-download-artifact@v8 + uses: dawidd6/action-download-artifact@v9 id: download with: branch: ${{ github.ref }} From 949aed1cef80a7bbbcf450112788839efc38bf43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:16:42 +0000 Subject: [PATCH 037/150] Update to Express 5 --- package-lock.json | 723 +++++++++++++++++++++++++++++----------------- package.json | 4 +- 2 files changed, 458 insertions(+), 269 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f300cad98b6..ae176eb012fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "compression": "^1.7.4", "cookie-parser": "^1.4.6", "env-paths": "^2.2.1", - "express": "5.0.0-beta.3", + "express": "^5.0.1", "http-proxy": "^1.18.1", "httpolyglot": "^0.1.2", "i18next": "^23.5.1", @@ -42,7 +42,7 @@ "@types/compression": "^1.7.3", "@types/cookie-parser": "^1.4.4", "@types/eslint__js": "^8.42.3", - "@types/express": "^4.17.17", + "@types/express": "^5.0.0", "@types/http-proxy": "1.17.7", "@types/js-yaml": "^4.0.6", "@types/node": "20.x", @@ -219,18 +219,32 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", - "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@eslint/core": "^0.12.0", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@humanfs/core": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", @@ -520,22 +534,24 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", + "@types/express-serve-static-core": "^5.0.0", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -621,16 +637,18 @@ } }, "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "dev": true + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/safe-compare": { "version": "1.1.2", @@ -898,12 +916,13 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" @@ -1062,11 +1081,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" - }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", @@ -1216,45 +1230,32 @@ } }, "node_modules/body-parser": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.0.0-beta.2.tgz", - "integrity": "sha512-oxdqeGYQcO5ovwwkC1A89R0Mf0v3+7smTVh0chGfzDeiK37bg5bYNtXDy3Nmzn6CShoIYk5+nHTyBoSZIWwnCA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", + "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "3.1.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.5.2", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "3.0.0-beta.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.5.2", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" + "node": ">=18" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -1317,6 +1318,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1331,6 +1333,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1502,9 +1533,10 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -1516,24 +1548,27 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "license": "MIT", "dependencies": { - "cookie": "0.4.1", + "cookie": "0.7.2", "cookie-signature": "1.0.6" }, "engines": { @@ -1552,10 +1587,11 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1633,9 +1669,10 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -1658,6 +1695,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1709,6 +1747,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1717,6 +1756,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1820,10 +1860,25 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/emoji-regex": { "version": "10.1.0", @@ -1832,9 +1887,10 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1933,12 +1989,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1952,10 +2006,10 @@ } }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -2014,7 +2068,8 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -2424,6 +2479,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2434,83 +2490,89 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/express": { - "version": "5.0.0-beta.3", - "resolved": "https://registry.npmjs.org/express/-/express-5.0.0-beta.3.tgz", - "integrity": "sha512-e7Qizw4gMBVe1Ky2oNi5C1h6oS8aWDcY2yYxvRMy5aMc6t2aqobuHpQRfR3LRC9NAW/c6081SeGWMGBorLXePg==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "3.0.0", - "body-parser": "2.0.0-beta.2", - "content-disposition": "0.5.4", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", + "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.0.1", + "content-disposition": "^1.0.0", "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "3.1.0", + "cookie": "0.7.1", + "cookie-signature": "^1.2.1", + "debug": "4.3.6", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", + "finalhandler": "^2.0.0", + "fresh": "2.0.0", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "^2.0.0", "methods": "~1.1.2", - "mime-types": "~2.1.34", + "mime-types": "^3.0.0", "on-finished": "2.4.1", + "once": "1.4.0", "parseurl": "~1.3.3", - "path-is-absolute": "1.0.1", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", - "router": "2.0.0-beta.2", + "router": "^2.0.0", "safe-buffer": "5.2.1", - "send": "1.0.0-beta.2", - "serve-static": "2.0.0-beta.2", + "send": "^1.1.0", + "serve-static": "^2.1.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", - "type-is": "~1.6.18", + "type-is": "^2.0.0", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { - "node": ">= 4" + "node": ">= 18" } }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/express/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" + "node_modules/express/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/express/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "ms": "2.1.2" }, "engines": { - "node": ">=0.6" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/express/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2619,35 +2681,22 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2731,11 +2780,12 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fs-extra": { @@ -2834,15 +2884,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2851,6 +2907,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -2956,11 +3025,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2999,6 +3069,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -3010,6 +3081,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3018,9 +3090,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3082,6 +3155,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -3175,6 +3249,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -3503,7 +3578,8 @@ "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" }, "node_modules/is-regex": { "version": "1.1.4", @@ -3779,6 +3855,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -3949,17 +4034,25 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge2": { "version": "1.4.1", @@ -3974,6 +4067,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4126,24 +4220,17 @@ } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.53.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4225,9 +4312,10 @@ "dev": true }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4299,9 +4387,10 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4389,6 +4478,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -4555,6 +4645,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4592,9 +4683,13 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/pem": { "version": "1.14.8", @@ -4793,24 +4888,38 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "3.0.0-beta.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0-beta.1.tgz", - "integrity": "sha512-XlSTHr67bCjSo5aOfAnN3x507zGvi3unF65BW57limYkc2ws/XB0mLUtJvvP7JGFeSPsYrlCv1ZrPGh0cwDxPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.5.2", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4990,20 +5099,17 @@ } }, "node_modules/router": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/router/-/router-2.0.0-beta.2.tgz", - "integrity": "sha512-ascmzrv4IAB64SpWzFwYOA+jz6PaUbrzHLPsQrPjQ3uQTL2qlhwY9S2sRvvBMgUISQptQG457jcWWcWqtwrbag==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.1.0.tgz", + "integrity": "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==", + "license": "MIT", "dependencies": { - "array-flatten": "3.0.0", - "is-promise": "4.0.0", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "3.2.0", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 18" } }, "node_modules/run-parallel": { @@ -5094,7 +5200,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/semver": { "version": "7.7.1", @@ -5109,52 +5216,71 @@ } }, "node_modules/send": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/send/-/send-1.0.0-beta.2.tgz", - "integrity": "sha512-k1yHu/FNK745PULKdsGpQ+bVSXYNwSk+bWnYzbxGZbt5obZc0JKDVANsCRuJD1X/EG15JtP9eZpwxkhUxIYEcg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", + "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", + "license": "MIT", "dependencies": { - "debug": "3.1.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime-types": "~2.1.34", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "http-errors": "^2.0.0", + "mime-types": "^2.1.35", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" + "node_modules/send/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/send/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/serve-static": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.0.0-beta.2.tgz", - "integrity": "sha512-Ge718g4UJjzYoXFEGLY/VLSuTHp0kQcUV65QA98J8d3XREsVIHu53GBh9NWjDy4u2xwsSwRzu9nu7Q+b4o6Xyw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", + "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "^1.0.0-beta.2" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 18" } }, "node_modules/set-blocking": { @@ -5166,6 +5292,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -5196,7 +5323,8 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/sh-syntax": { "version": "0.4.2", @@ -5235,14 +5363,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5327,6 +5510,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5571,6 +5755,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -5692,12 +5877,14 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", + "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", + "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" @@ -5950,6 +6137,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5979,6 +6167,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } diff --git a/package.json b/package.json index e91feacc035e..c552dc074f88 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@types/compression": "^1.7.3", "@types/cookie-parser": "^1.4.4", "@types/eslint__js": "^8.42.3", - "@types/express": "^4.17.17", + "@types/express": "^5.0.0", "@types/http-proxy": "1.17.7", "@types/js-yaml": "^4.0.6", "@types/node": "20.x", @@ -73,7 +73,7 @@ "compression": "^1.7.4", "cookie-parser": "^1.4.6", "env-paths": "^2.2.1", - "express": "5.0.0-beta.3", + "express": "^5.0.1", "http-proxy": "^1.18.1", "httpolyglot": "^0.1.2", "i18next": "^23.5.1", From 2809245dda52e3260c07a0f71214f0df569d9aaa Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 6 Mar 2025 14:29:18 -0900 Subject: [PATCH 038/150] Remove long-unused internal plugin system We are trying to update Express to fix a vulnerability. We would have to update the plugins as well, but since we are no longer using the plugin system, we can just delete it instead. --- ci/build/build-release.sh | 4 - ci/dev/test-integration.sh | 2 +- ci/dev/test-unit.sh | 7 +- package.json | 2 +- src/node/plugin.ts | 302 ------------------- src/node/routes/apps.ts | 17 -- src/node/routes/errors.ts | 2 +- src/node/routes/index.ts | 24 +- src/node/routes/pathProxy.ts | 4 +- src/node/routes/vscode.ts | 3 +- src/node/wsRouter.ts | 23 +- test/tsconfig.json | 3 +- test/unit/node/plugin.test.ts | 118 -------- test/unit/node/test-plugin/.eslintrc.js | 9 - test/unit/node/test-plugin/.gitignore | 1 - test/unit/node/test-plugin/Makefile | 6 - test/unit/node/test-plugin/package-lock.json | 90 ------ test/unit/node/test-plugin/package.json | 16 - test/unit/node/test-plugin/public/icon.svg | 1 - test/unit/node/test-plugin/public/index.html | 10 - test/unit/node/test-plugin/src/index.ts | 52 ---- test/unit/node/test-plugin/tsconfig.json | 71 ----- typings/pluginapi.d.ts | 297 ------------------ 23 files changed, 32 insertions(+), 1032 deletions(-) delete mode 100644 src/node/plugin.ts delete mode 100644 src/node/routes/apps.ts delete mode 100644 test/unit/node/plugin.test.ts delete mode 100644 test/unit/node/test-plugin/.eslintrc.js delete mode 100644 test/unit/node/test-plugin/.gitignore delete mode 100644 test/unit/node/test-plugin/Makefile delete mode 100644 test/unit/node/test-plugin/package-lock.json delete mode 100644 test/unit/node/test-plugin/package.json delete mode 100644 test/unit/node/test-plugin/public/icon.svg delete mode 100644 test/unit/node/test-plugin/public/index.html delete mode 100644 test/unit/node/test-plugin/src/index.ts delete mode 100644 test/unit/node/test-plugin/tsconfig.json delete mode 100644 typings/pluginapi.d.ts diff --git a/ci/build/build-release.sh b/ci/build/build-release.sh index 780e84bf18b5..0d226fd83a25 100755 --- a/ci/build/build-release.sh +++ b/ci/build/build-release.sh @@ -44,10 +44,6 @@ bundle_code_server() { rsync src/browser/pages/*.css "$RELEASE_PATH/src/browser/pages" rsync src/browser/robots.txt "$RELEASE_PATH/src/browser" - # Add typings for plugins - mkdir -p "$RELEASE_PATH/typings" - rsync typings/pluginapi.d.ts "$RELEASE_PATH/typings" - # Adds the commit to package.json jq --slurp '(.[0] | del(.scripts,.jest,.devDependencies)) * .[1]' package.json <( cat << EOF diff --git a/ci/dev/test-integration.sh b/ci/dev/test-integration.sh index 7f8fd5b3e826..380502c230ba 100755 --- a/ci/dev/test-integration.sh +++ b/ci/dev/test-integration.sh @@ -33,7 +33,7 @@ main() { exit 1 fi - CODE_SERVER_PATH="$path" CS_DISABLE_PLUGINS=true ./test/node_modules/.bin/jest "$@" --coverage=false --testRegex "./test/integration" --testPathIgnorePatterns "./test/integration/fixtures" + CODE_SERVER_PATH="$path" ./test/node_modules/.bin/jest "$@" --coverage=false --testRegex "./test/integration" --testPathIgnorePatterns "./test/integration/fixtures" } main "$@" diff --git a/ci/dev/test-unit.sh b/ci/dev/test-unit.sh index e312c073e4ef..15fd2030ea59 100755 --- a/ci/dev/test-unit.sh +++ b/ci/dev/test-unit.sh @@ -6,15 +6,10 @@ main() { source ./ci/lib.sh - echo "Building test plugin" - pushd test/unit/node/test-plugin - make -s out/index.js - popd - # We must keep jest in a sub-directory. See ../../test/package.json for more # information. We must also run it from the root otherwise coverage will not # include our source files. - CS_DISABLE_PLUGINS=true ./test/node_modules/.bin/jest "$@" --testRegex "./test/unit/.*ts" --testPathIgnorePatterns "./test/unit/node/test-plugin" + ./test/node_modules/.bin/jest "$@" --testRegex "./test/unit/.*ts" } main "$@" diff --git a/package.json b/package.json index c552dc074f88..ffdfccafdede 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "publish:docker": "./ci/steps/docker-buildx-push.sh", "fmt": "npm run prettier && ./ci/dev/doctoc.sh", "lint:scripts": "./ci/dev/lint-scripts.sh", - "lint:ts": "eslint --max-warnings=0 --fix $(git ls-files '*.ts' '*.js' | grep -v 'lib/vscode' | grep -v test-plugin)", + "lint:ts": "eslint --max-warnings=0 --fix $(git ls-files '*.ts' '*.js' | grep -v 'lib/vscode')", "test": "echo 'Run npm run test:unit or npm run test:e2e' && exit 1", "watch": "VSCODE_DEV=1 VSCODE_IPC_HOOK_CLI= NODE_OPTIONS='--max_old_space_size=32384 --trace-warnings' ts-node ./ci/dev/watch.ts", "icons": "./ci/dev/gen_icons.sh" diff --git a/src/node/plugin.ts b/src/node/plugin.ts deleted file mode 100644 index 85c588c9ab7b..000000000000 --- a/src/node/plugin.ts +++ /dev/null @@ -1,302 +0,0 @@ -import { field, Level, Logger } from "@coder/logger" -import * as express from "express" -import * as fs from "fs" -import * as path from "path" -import * as semver from "semver" -import * as pluginapi from "../../typings/pluginapi" -import { HttpCode, HttpError } from "../common/http" -import { version } from "./constants" -import { authenticated, ensureAuthenticated, replaceTemplates } from "./http" -import { proxy } from "./proxy" -import * as util from "./util" -import { Router as WsRouter, WebsocketRouter, wss } from "./wsRouter" -const fsp = fs.promises - -// Represents a required module which could be anything. -type Module = any - -/** - * Inject code-server when `require`d. This is required because the API provides - * more than just types so these need to be provided at run-time. - */ -const originalLoad = require("module")._load -require("module")._load = function (request: string, parent: object, isMain: boolean): Module { - return request === "code-server" ? codeServer : originalLoad.apply(this, [request, parent, isMain]) -} - -/** - * The module you get when importing "code-server". - */ -export const codeServer = { - HttpCode, - HttpError, - Level, - authenticated, - ensureAuthenticated, - express, - field, - proxy, - replaceTemplates, - WsRouter, - wss, -} - -interface Plugin extends pluginapi.Plugin { - /** - * These fields are populated from the plugin's package.json - * and now guaranteed to exist. - */ - name: string - version: string - - /** - * path to the node module on the disk. - */ - modulePath: string -} - -interface Application extends pluginapi.Application { - /* - * Clone of the above without functions. - */ - plugin: Omit -} - -/** - * PluginAPI implements the plugin API described in typings/pluginapi.d.ts - * Please see that file for details. - */ -export class PluginAPI { - private readonly plugins = new Map() - private readonly logger: Logger - - public constructor( - logger: Logger, - /** - * These correspond to $CS_PLUGIN_PATH and $CS_PLUGIN respectively. - */ - private readonly csPlugin = "", - private readonly csPluginPath = `${path.join(util.paths.data, "plugins")}:/usr/share/code-server/plugins`, - private readonly workingDirectory: string | undefined = undefined, - ) { - this.logger = logger.named("pluginapi") - } - - /** - * applications grabs the full list of applications from - * all loaded plugins. - */ - public async applications(): Promise { - const apps = new Array() - for (const [, p] of this.plugins) { - if (!p.applications) { - continue - } - const pluginApps = await p.applications() - - // Add plugin key to each app. - apps.push( - ...pluginApps.map((app) => { - app = { ...app, path: path.join(p.routerPath, app.path || "") } - app = { ...app, iconPath: path.join(app.path || "", app.iconPath) } - return { - ...app, - plugin: { - name: p.name, - version: p.version, - modulePath: p.modulePath, - - displayName: p.displayName, - description: p.description, - routerPath: p.routerPath, - homepageURL: p.homepageURL, - }, - } - }), - ) - } - return apps - } - - /** - * mount mounts all plugin routers onto r and websocket routers onto wr. - */ - public mount(r: express.Router, wr: express.Router): void { - for (const [, p] of this.plugins) { - if (p.router) { - r.use(`${p.routerPath}`, p.router()) - } - if (p.wsRouter) { - wr.use(`${p.routerPath}`, (p.wsRouter() as WebsocketRouter).router) - } - } - } - - /** - * loadPlugins loads all plugins based on this.csPlugin, - * this.csPluginPath and the built in plugins. - */ - public async loadPlugins(loadBuiltin = true): Promise { - for (const dir of this.csPlugin.split(":")) { - if (!dir) { - continue - } - await this.loadPlugin(dir) - } - - for (const dir of this.csPluginPath.split(":")) { - if (!dir) { - continue - } - await this._loadPlugins(dir) - } - - if (loadBuiltin) { - await this._loadPlugins(path.join(__dirname, "../../plugins")) - } - } - - /** - * _loadPlugins is the counterpart to loadPlugins. - * - * It differs in that it loads all plugins in a single - * directory whereas loadPlugins uses all available directories - * as documented. - */ - private async _loadPlugins(dir: string): Promise { - try { - const entries = await fsp.readdir(dir, { withFileTypes: true }) - for (const ent of entries) { - if (!ent.isDirectory()) { - continue - } - await this.loadPlugin(path.join(dir, ent.name)) - } - } catch (error: any) { - if (error.code !== "ENOENT") { - this.logger.warn(`failed to load plugins from ${q(dir)}: ${error.message}`) - } - } - } - - private async loadPlugin(dir: string): Promise { - try { - const str = await fsp.readFile(path.join(dir, "package.json"), { - encoding: "utf8", - }) - const packageJSON: PackageJSON = JSON.parse(str) - for (const [, p] of this.plugins) { - if (p.name === packageJSON.name) { - this.logger.warn( - `ignoring duplicate plugin ${q(p.name)} at ${q(dir)}, using previously loaded ${q(p.modulePath)}`, - ) - return - } - } - const p = this._loadPlugin(dir, packageJSON) - this.plugins.set(p.name, p) - } catch (error: any) { - if (error.code !== "ENOENT") { - this.logger.warn(`failed to load plugin: ${error.stack}`) - } - } - } - - /** - * _loadPlugin is the counterpart to loadPlugin and actually - * loads the plugin now that we know there is no duplicate - * and that the package.json has been read. - */ - private _loadPlugin(dir: string, packageJSON: PackageJSON): Plugin { - dir = path.resolve(dir) - - const logger = this.logger.named(packageJSON.name) - logger.debug("loading plugin", field("plugin_dir", dir), field("package_json", packageJSON)) - - if (!packageJSON.name) { - throw new Error("plugin package.json missing name") - } - if (!packageJSON.version) { - throw new Error("plugin package.json missing version") - } - if (!packageJSON.engines || !packageJSON.engines["code-server"]) { - throw new Error(`plugin package.json missing code-server range like: - "engines": { - "code-server": "^3.7.0" - } -`) - } - if (!semver.satisfies(version, packageJSON.engines["code-server"])) { - this.logger.warn( - `plugin range ${q(packageJSON.engines["code-server"])} incompatible` + ` with code-server version ${version}`, - ) - } - - const pluginModule = require(dir) - if (!pluginModule.plugin) { - throw new Error("plugin module does not export a plugin") - } - - const p = { - name: packageJSON.name, - version: packageJSON.version, - modulePath: dir, - ...pluginModule.plugin, - } as Plugin - - if (!p.displayName) { - throw new Error("plugin missing displayName") - } - if (!p.description) { - throw new Error("plugin missing description") - } - if (!p.routerPath) { - throw new Error("plugin missing router path") - } - if (!p.routerPath.startsWith("/")) { - throw new Error(`plugin router path ${q(p.routerPath)}: invalid`) - } - if (!p.homepageURL) { - throw new Error("plugin missing homepage") - } - - p.init({ - logger: logger, - workingDirectory: this.workingDirectory, - }) - - logger.debug("loaded") - - return p - } - - public async dispose(): Promise { - await Promise.all( - Array.from(this.plugins.values()).map(async (p) => { - if (!p.deinit) { - return - } - try { - await p.deinit() - } catch (error: any) { - this.logger.error("plugin failed to deinit", field("name", p.name), field("error", error.message)) - } - }), - ) - } -} - -interface PackageJSON { - name: string - version: string - engines: { - "code-server": string - } -} - -function q(s: string | undefined): string { - if (s === undefined) { - s = "undefined" - } - return JSON.stringify(s) -} diff --git a/src/node/routes/apps.ts b/src/node/routes/apps.ts deleted file mode 100644 index 5c8541fc9ad4..000000000000 --- a/src/node/routes/apps.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as express from "express" -import { PluginAPI } from "../plugin" - -/** - * Implements the /api/applications endpoint - * - * See typings/pluginapi.d.ts for details. - */ -export function router(papi: PluginAPI): express.Router { - const router = express.Router() - - router.get("/", async (req, res) => { - res.json(await papi.applications()) - }) - - return router -} diff --git a/src/node/routes/errors.ts b/src/node/routes/errors.ts index 743699c847ef..1f1475e9beee 100644 --- a/src/node/routes/errors.ts +++ b/src/node/routes/errors.ts @@ -2,8 +2,8 @@ import { logger } from "@coder/logger" import express from "express" import { promises as fs } from "fs" import path from "path" -import { WebsocketRequest } from "../../../typings/pluginapi" import { HttpCode } from "../../common/http" +import type { WebsocketRequest } from "../wsRouter" import { rootPath } from "../constants" import { replaceTemplates } from "../http" import { escapeHtml, getMediaMime } from "../util" diff --git a/src/node/routes/index.ts b/src/node/routes/index.ts index e61cbd65795c..b744d4c0a445 100644 --- a/src/node/routes/index.ts +++ b/src/node/routes/index.ts @@ -4,7 +4,6 @@ import * as express from "express" import { promises as fs } from "fs" import * as path from "path" import * as tls from "tls" -import * as pluginapi from "../../../typings/pluginapi" import { Disposable } from "../../common/emitter" import { HttpCode, HttpError } from "../../common/http" import { plural } from "../../common/util" @@ -12,12 +11,11 @@ import { App } from "../app" import { AuthType, DefaultedArgs } from "../cli" import { commit, rootPath } from "../constants" import { Heart } from "../heart" -import { ensureAuthenticated, redirect } from "../http" -import { PluginAPI } from "../plugin" +import { redirect } from "../http" import { CoderSettings, SettingsProvider } from "../settings" import { UpdateProvider } from "../update" +import type { WebsocketRequest } from "../wsRouter" import { getMediaMime, paths } from "../util" -import * as apps from "./apps" import * as domainProxy from "./domainProxy" import { errorHandler, wsErrorHandler } from "./errors" import * as health from "./health" @@ -113,7 +111,7 @@ export const register = async (app: App, args: DefaultedArgs): Promise { - await pathProxy.wsProxy(req as pluginapi.WebsocketRequest) + await pathProxy.wsProxy(req as WebsocketRequest) }) // These two routes pass through the path directly. // So the proxied app must be aware it is running @@ -125,21 +123,12 @@ export const register = async (app: App, args: DefaultedArgs): Promise { - await pathProxy.wsProxy(req as pluginapi.WebsocketRequest, { + await pathProxy.wsProxy(req as WebsocketRequest, { passthroughPath: true, proxyBasePath: args["abs-proxy-base-path"], }) }) - let pluginApi: PluginAPI - if (!process.env.CS_DISABLE_PLUGINS) { - const workingDir = args._ && args._.length > 0 ? path.resolve(args._[args._.length - 1]) : undefined - pluginApi = new PluginAPI(logger, process.env.CS_PLUGIN, process.env.CS_PLUGIN_PATH, workingDir) - await pluginApi.loadPlugins() - pluginApi.mount(app.router, app.wsRouter) - app.router.use("/api/applications", ensureAuthenticated, apps.router(pluginApi)) - } - app.router.use(express.json()) app.router.use(express.urlencoded({ extended: true })) @@ -172,7 +161,9 @@ export const register = async (app: App, args: DefaultedArgs): Promise { heart.dispose() - pluginApi?.dispose() vscode.dispose() } } diff --git a/src/node/routes/pathProxy.ts b/src/node/routes/pathProxy.ts index ccfb0cc824a0..bb8efd40d832 100644 --- a/src/node/routes/pathProxy.ts +++ b/src/node/routes/pathProxy.ts @@ -1,9 +1,9 @@ import { Request, Response } from "express" import * as path from "path" -import * as pluginapi from "../../../typings/pluginapi" import { HttpCode, HttpError } from "../../common/http" import { ensureProxyEnabled, authenticated, ensureAuthenticated, ensureOrigin, redirect, self } from "../http" import { proxy as _proxy } from "../proxy" +import type { WebsocketRequest } from "../wsRouter" const getProxyTarget = ( req: Request, @@ -49,7 +49,7 @@ export async function proxy( } export async function wsProxy( - req: pluginapi.WebsocketRequest, + req: WebsocketRequest, opts?: { passthroughPath?: boolean proxyBasePath?: string diff --git a/src/node/routes/vscode.ts b/src/node/routes/vscode.ts index 637a30352ceb..89b65a220875 100644 --- a/src/node/routes/vscode.ts +++ b/src/node/routes/vscode.ts @@ -6,14 +6,13 @@ import * as http from "http" import * as net from "net" import * as path from "path" import * as os from "os" -import { WebsocketRequest } from "../../../typings/pluginapi" import { logError } from "../../common/util" import { CodeArgs, toCodeArgs } from "../cli" import { isDevMode, vsRootPath } from "../constants" import { authenticated, ensureAuthenticated, ensureOrigin, redirect, replaceTemplates, self } from "../http" import { SocketProxyProvider } from "../socket" import { isFile } from "../util" -import { Router as WsRouter } from "../wsRouter" +import { type WebsocketRequest, Router as WsRouter } from "../wsRouter" export const router = express.Router() diff --git a/src/node/wsRouter.ts b/src/node/wsRouter.ts index 3f15ba9928bc..0f901bb8ad7f 100644 --- a/src/node/wsRouter.ts +++ b/src/node/wsRouter.ts @@ -1,8 +1,17 @@ import * as express from "express" import * as expressCore from "express-serve-static-core" import * as http from "http" +import * as stream from "stream" import Websocket from "ws" -import * as pluginapi from "../../typings/pluginapi" + +export interface WebsocketRequest extends express.Request { + ws: stream.Duplex + head: Buffer +} + +interface InternalWebsocketRequest extends WebsocketRequest { + _ws_handled: boolean +} export const handleUpgrade = (app: express.Express, server: http.Server): void => { server.on("upgrade", (req, socket, head) => { @@ -22,9 +31,11 @@ export const handleUpgrade = (app: express.Express, server: http.Server): void = }) } -interface InternalWebsocketRequest extends pluginapi.WebsocketRequest { - _ws_handled: boolean -} +export type WebSocketHandler = ( + req: WebsocketRequest, + res: express.Response, + next: express.NextFunction, +) => void | Promise export class WebsocketRouter { public readonly router = express.Router() @@ -36,13 +47,13 @@ export class WebsocketRouter { * If the origin header exists it must match the host or the connection will * be prevented. */ - public ws(route: expressCore.PathParams, ...handlers: pluginapi.WebSocketHandler[]): void { + public ws(route: expressCore.PathParams, ...handlers: WebSocketHandler[]): void { this.router.get( route, ...handlers.map((handler) => { const wrapped: express.Handler = (req, res, next) => { ;(req as InternalWebsocketRequest)._ws_handled = true - return handler(req as pluginapi.WebsocketRequest, res, next) + return handler(req as WebsocketRequest, res, next) } return wrapped }), diff --git a/test/tsconfig.json b/test/tsconfig.json index 3e568e887dd6..5197ce2769f4 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,5 +1,4 @@ { "extends": "../tsconfig.json", - "include": ["./**/*.ts"], - "exclude": ["./unit/node/test-plugin"] + "include": ["./**/*.ts"] } diff --git a/test/unit/node/plugin.test.ts b/test/unit/node/plugin.test.ts deleted file mode 100644 index 8237b1177d53..000000000000 --- a/test/unit/node/plugin.test.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { logger } from "@coder/logger" -import * as express from "express" -import * as fs from "fs" -import * as path from "path" -import { HttpCode } from "../../../src/common/http" -import { AuthType } from "../../../src/node/cli" -import { codeServer, PluginAPI } from "../../../src/node/plugin" -import * as apps from "../../../src/node/routes/apps" -import * as httpserver from "../../utils/httpserver" -const fsp = fs.promises - -// Jest overrides `require` so our usual override doesn't work. -jest.mock("code-server", () => codeServer, { virtual: true }) - -/** - * Use $LOG_LEVEL=debug to see debug logs. - */ -describe("plugin", () => { - let papi: PluginAPI - let s: httpserver.HttpServer - - beforeAll(async () => { - // Only include the test plugin to avoid contaminating results with other - // plugins that might be on the filesystem. - papi = new PluginAPI(logger, `${path.resolve(__dirname, "test-plugin")}:meow`, "") - await papi.loadPlugins(false) - - const app = express.default() - const wsApp = express.default() - - const common: express.RequestHandler = (req, _, next) => { - // Routes might use these arguments. - req.args = { - _: [], - auth: AuthType.None, - host: "localhost", - port: 8080, - "proxy-domain": [], - config: "~/.config/code-server/config.yaml", - verbose: false, - "disable-file-downloads": false, - usingEnvPassword: false, - usingEnvHashedPassword: false, - "extensions-dir": "", - "user-data-dir": "", - "session-socket": "", - } - next() - } - - app.use(common) - wsApp.use(common) - - papi.mount(app, wsApp) - app.use("/api/applications", apps.router(papi)) - - s = new httpserver.HttpServer() - await s.listen(app) - s.listenUpgrade(wsApp) - }) - - afterAll(async () => { - await s.dispose() - }) - - it("/api/applications", async () => { - const resp = await s.fetch("https://github.com/api/applications") - expect(resp.status).toBe(200) - const body = await resp.json() - logger.debug(`${JSON.stringify(body)}`) - expect(body).toStrictEqual([ - { - name: "Test App", - version: "4.0.1", - - description: "This app does XYZ.", - iconPath: "/test-plugin/test-app/icon.svg", - homepageURL: "https://example.com/", - path: "/test-plugin/test-app", - - plugin: { - name: "test-plugin", - version: "1.0.0", - modulePath: path.join(__dirname, "test-plugin"), - - displayName: "Test Plugin", - description: "Plugin used in code-server tests.", - routerPath: "/test-plugin", - homepageURL: "https://example.com/", - }, - }, - ]) - }) - - it("/test-plugin/test-app", async () => { - const indexHTML = await fsp.readFile(path.join(__dirname, "test-plugin/public/index.html"), { - encoding: "utf8", - }) - const resp = await s.fetch("https://github.com/test-plugin/test-app") - expect(resp.status).toBe(200) - const body = await resp.text() - expect(body).toBe(indexHTML) - }) - - it("/test-plugin/test-app (websocket)", async () => { - const ws = s.ws("/test-plugin/test-app") - const message = await new Promise((resolve) => { - ws.once("message", (message) => resolve(message)) - }) - ws.terminate() - expect(message).toBe("hello") - }) - - it("/test-plugin/error", async () => { - const resp = await s.fetch("https://github.com/test-plugin/error") - expect(resp.status).toBe(HttpCode.LargePayload) - }) -}) diff --git a/test/unit/node/test-plugin/.eslintrc.js b/test/unit/node/test-plugin/.eslintrc.js deleted file mode 100644 index 3999419107b0..000000000000 --- a/test/unit/node/test-plugin/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - settings: { - "import/resolver": { - typescript: { - project: __dirname, - }, - }, - }, -} diff --git a/test/unit/node/test-plugin/.gitignore b/test/unit/node/test-plugin/.gitignore deleted file mode 100644 index 1fcb1529f8e5..000000000000 --- a/test/unit/node/test-plugin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -out diff --git a/test/unit/node/test-plugin/Makefile b/test/unit/node/test-plugin/Makefile deleted file mode 100644 index 397424629bb5..000000000000 --- a/test/unit/node/test-plugin/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -out/index.js: src/index.ts - # Typescript always emits, even on errors. - npm run build || rm out/index.js - -node_modules: package.json package-lock.json - npm install diff --git a/test/unit/node/test-plugin/package-lock.json b/test/unit/node/test-plugin/package-lock.json deleted file mode 100644 index 0bcd9b40eebc..000000000000 --- a/test/unit/node/test-plugin/package-lock.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "test-plugin", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - }, - "dev": true - }, - "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", - "requires": { - "@types/node": "*" - }, - "dev": true - }, - "@types/express": { - "version": "4.17.8", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.8.tgz", - "integrity": "sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/qs": "*", - "@types/serve-static": "*" - }, - "dev": true - }, - "@types/express-serve-static-core": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz", - "integrity": "sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - }, - "dev": true - }, - "@types/mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", - "dev": true - }, - "@types/node": { - "version": "14.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", - "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", - "dev": true - }, - "@types/qs": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", - "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.6.tgz", - "integrity": "sha512-nuRJmv7jW7VmCVTn+IgYDkkbbDGyIINOeu/G0d74X3lm6E5KfMeQPJhxIt1ayQeQB3cSxvYs1RA/wipYoFB4EA==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - }, - "dev": true - }, - "typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true - } - } -} \ No newline at end of file diff --git a/test/unit/node/test-plugin/package.json b/test/unit/node/test-plugin/package.json deleted file mode 100644 index 0247d60beefb..000000000000 --- a/test/unit/node/test-plugin/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "private": true, - "name": "test-plugin", - "version": "1.0.0", - "engines": { - "code-server": "*" - }, - "main": "out/index.js", - "devDependencies": { - "@types/express": "^4.17.8", - "typescript": "^4.0.5" - }, - "scripts": { - "build": "tsc" - } -} diff --git a/test/unit/node/test-plugin/public/icon.svg b/test/unit/node/test-plugin/public/icon.svg deleted file mode 100644 index 25b9cf0474cf..000000000000 --- a/test/unit/node/test-plugin/public/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/unit/node/test-plugin/public/index.html b/test/unit/node/test-plugin/public/index.html deleted file mode 100644 index e3f70cab0c8e..000000000000 --- a/test/unit/node/test-plugin/public/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Test Plugin - - -

Welcome to the test plugin!

- - diff --git a/test/unit/node/test-plugin/src/index.ts b/test/unit/node/test-plugin/src/index.ts deleted file mode 100644 index 22ef723bac1a..000000000000 --- a/test/unit/node/test-plugin/src/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import * as cs from "code-server" -import * as fspath from "path" - -export const plugin: cs.Plugin = { - displayName: "Test Plugin", - routerPath: "/test-plugin", - homepageURL: "https://example.com/", - description: "Plugin used in code-server tests.", - - init(config) { - config.logger.debug("test-plugin loaded!") - }, - - router() { - const r = cs.express.Router() - r.get("/test-app", (_, res) => { - res.sendFile(fspath.resolve(__dirname, "../public/index.html")) - }) - r.get("/goland/icon.svg", (_, res) => { - res.sendFile(fspath.resolve(__dirname, "../public/icon.svg")) - }) - r.get("/error", () => { - throw new cs.HttpError("error", cs.HttpCode.LargePayload) - }) - return r - }, - - wsRouter() { - const wr = cs.WsRouter() - wr.ws("/test-app", (req) => { - cs.wss.handleUpgrade(req, req.ws, req.head, (ws) => { - req.ws.resume() - ws.send("hello") - }) - }) - return wr - }, - - applications() { - return [ - { - name: "Test App", - version: "4.0.1", - iconPath: "/icon.svg", - path: "/test-app", - - description: "This app does XYZ.", - homepageURL: "https://example.com/", - }, - ] - }, -} diff --git a/test/unit/node/test-plugin/tsconfig.json b/test/unit/node/test-plugin/tsconfig.json deleted file mode 100644 index 194af1418df9..000000000000 --- a/test/unit/node/test-plugin/tsconfig.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./out" /* Redirect output structure to the directory. */, - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "baseUrl": "./" /* Base directory to resolve non-absolute module names. */, - "paths": { - "code-server": ["../../../../typings/pluginapi"] - } /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */, - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } -} diff --git a/typings/pluginapi.d.ts b/typings/pluginapi.d.ts deleted file mode 100644 index 829709b2d163..000000000000 --- a/typings/pluginapi.d.ts +++ /dev/null @@ -1,297 +0,0 @@ -/** - * This file describes the code-server plugin API for adding new applications. - */ -import { field, Level, Logger } from "@coder/logger" -import * as express from "express" -import * as expressCore from "express-serve-static-core" -import ProxyServer from "http-proxy" -import * as stream from "stream" -import Websocket from "ws" - -/** - * Overlay - * - * The homepage of code-server will launch into VS Code. However, there will be an overlay - * button that when clicked, will show all available applications with their names, - * icons and provider plugins. When one clicks on an app's icon, they will be directed - * to // to access the application. - */ - -/** - * Plugins - * - * Plugins are just node modules that contain a top level export "plugin" that implements - * the Plugin interface. - * - * 1. code-server uses $CS_PLUGIN to find plugins. - * - * e.g. CS_PLUGIN=/tmp/will:/tmp/teffen will cause code-server to load - * /tmp/will and /tmp/teffen as plugins. - * - * 2. code-server uses $CS_PLUGIN_PATH to find plugins. Each subdirectory in - * $CS_PLUGIN_PATH with a package.json where the engine is code-server is - * a valid plugin. - * - * e.g. CS_PLUGIN_PATH=/tmp/nhooyr:/tmp/ash will cause code-server to search - * /tmp/nhooyr and then /tmp/ash for plugins. - * - * CS_PLUGIN_PATH defaults to - * ~/.local/share/code-server/plugins:/usr/share/code-server/plugins - * if unset. - * - * - * 3. Built in plugins are loaded from __dirname/../plugins - * - * Plugins are required as soon as they are found and then initialized. - * See the Plugin interface for details. - * - * If two plugins are found with the exact same name, then code-server will - * use the first one and emit a warning. - * - */ - -/** - * Programmability - * - * There is also a /api/applications endpoint to allow programmatic access to all - * available applications. It could be used to create a custom application dashboard - * for example. An important difference with the API is that all application paths - * will be absolute (i.e have the plugin path prepended) so that they may be used - * directly. - * - * Example output: - * - * [ - * { - * "name": "Test App", - * "version": "4.0.1", - * "iconPath": "/test-plugin/test-app/icon.svg", - * "path": "/test-plugin/test-app", - * "description": "This app does XYZ.", - * "homepageURL": "https://example.com/", - * "plugin": { - * "name": "test-plugin", - * "version": "1.0.0", - * "modulePath": "/Users/nhooyr/src/coder/code-server/test/test-plugin", - * "displayName": "Test Plugin", - * "description": "Plugin used in code-server tests.", - * "routerPath": "/test-plugin", - * "homepageURL": "https://example.com/" - * } - * } - * ] - */ - -export enum HttpCode { - Ok = 200, - Redirect = 302, - NotFound = 404, - BadRequest = 400, - Unauthorized = 401, - LargePayload = 413, - ServerError = 500, -} - -export declare class HttpError extends Error { - constructor(message: string, status: HttpCode, details?: object) -} - -export interface WebsocketRequest extends express.Request { - ws: stream.Duplex - head: Buffer -} - -export type WebSocketHandler = ( - req: WebsocketRequest, - res: express.Response, - next: express.NextFunction, -) => void | Promise - -export interface WebsocketRouter { - readonly router: express.Router - ws(route: expressCore.PathParams, ...handlers: WebSocketHandler[]): void -} - -/** - * Create a router for websocket routes. - */ -export function WsRouter(): WebsocketRouter - -/** - * The websocket server used by code-server. - */ -export const wss: Websocket.Server - -/** - * The Express import used by code-server. - * - * Re-exported so plugins don't have to import duplicate copies of Express and - * to avoid potential version differences or issues caused by running separate - * instances. - */ -export { express } -/** - * Use to add a field to a log. - * - * Re-exported so plugins don't have to import duplicate copies of the logger. - */ -export { field, Level, Logger } - -/** - * code-server's proxy server. - */ -export const proxy: ProxyServer - -/** - * Middleware to ensure the user is authenticated. Throws if they are not. - */ -export function ensureAuthenticated( - req: express.Request, - res?: express.Response, - next?: express.NextFunction, -): Promise - -/** - * Returns true if the user is authenticated. - */ -export function authenticated(req: express.Request): Promise - -/** - * Replace variables in HTML: TO, BASE, CS_STATIC_BASE, and OPTIONS. - */ -export function replaceTemplates( - req: express.Request, - content: string, - extraOpts?: Omit, -): string - -/** - * Your plugin module must have a top level export "plugin" that implements this interface. - * - * The plugin's router will be mounted at / - */ -export interface Plugin { - /** - * name is used as the plugin's unique identifier. - * No two plugins may share the same name. - * - * Fetched from package.json. - */ - readonly name?: string - - /** - * The version for the plugin in the overlay. - * - * Fetched from package.json. - */ - readonly version?: string - - /** - * Name used in the overlay. - */ - readonly displayName: string - - /** - * Used in overlay. - * Should be a full sentence describing the plugin. - */ - readonly description: string - - /** - * The path at which the plugin router is to be registered. - */ - readonly routerPath: string - - /** - * Link to plugin homepage. - */ - readonly homepageURL: string - - /** - * init is called so that the plugin may initialize itself with the config. - */ - init(config: PluginConfig): void - - /** - * Called when the plugin should dispose/shutdown everything. - */ - deinit?(): Promise - - /** - * Returns the plugin's router. - * - * Mounted at / - * - * If not present, the plugin provides no routes. - */ - router?(): express.Router - - /** - * Returns the plugin's websocket router. - * - * Mounted at / - * - * If not present, the plugin provides no websockets. - */ - wsRouter?(): WebsocketRouter - - /** - * code-server uses this to collect the list of applications that - * the plugin can currently provide. - * It is called when /api/applications is hit or the overlay needs to - * refresh the list of applications - * - * Ensure this is as fast as possible. - * - * If not present, the plugin provides no applications. - */ - applications?(): Application[] | Promise -} - -/** - * PluginConfig contains the configuration required for initializing - * a plugin. - */ -export interface PluginConfig { - /** - * All plugin logs should be logged via this logger. - */ - readonly logger: Logger - - /** - * This can be specified by the user on the command line. Plugins should - * default to this directory when applicable. For example, the Jupyter plugin - * uses this to launch in this directory. - */ - readonly workingDirectory?: string -} - -/** - * Application represents a user accessible application. - */ -export interface Application { - readonly name: string - readonly version: string - - /** - * When the user clicks on the icon in the overlay, they will be - * redirected to // - * where the application should be accessible. - * - * If undefined, then / is used. - */ - readonly path?: string - - readonly description?: string - - /** - * The path at which the icon for this application can be accessed. - * /// - */ - readonly iconPath: string - - /** - * Link to application homepage. - */ - readonly homepageURL: string -} From 50c3e4bb1bcb0f58b27a7d3791373749bf9a780d Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 6 Mar 2025 14:31:30 -0900 Subject: [PATCH 039/150] Add 4.97.2 to the changelog --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d6003b33317..9ba305f15d93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,19 @@ Code v99.99.999 ## Unreleased +## [4.97.2](https://github.com/coder/code-server/releases/tag/v4.96.4) - 2025-02-18 + +Code v1.97.2 + +### Added + +- Added back macOS amd64 builds. + +### Changed + +- Update to Code 1.97.2. +- Softened dark mode login page colors. + ## [4.96.4](https://github.com/coder/code-server/releases/tag/v4.96.4) - 2025-01-20 Code v1.96.4 From 4b7bca38e28b48cb66da5b5affe1f5596e61bec8 Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 6 Mar 2025 15:03:20 -0900 Subject: [PATCH 040/150] Fix routing for Express 5 --- src/node/routes/index.ts | 39 ++++++++++++++++++--------------------- src/node/routes/vscode.ts | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/node/routes/index.ts b/src/node/routes/index.ts index b744d4c0a445..36cf76b4a7ca 100644 --- a/src/node/routes/index.ts +++ b/src/node/routes/index.ts @@ -79,51 +79,48 @@ export const register = async (app: App, args: DefaultedArgs): Promise { + app.router.use(/.*/, async (req, res, next) => { // If we're handling TLS ensure all requests are redirected to HTTPS. // TODO: This does *NOT* work if you have a base path since to specify the // protocol we need to specify the whole path. if (args.cert && !(req.connection as tls.TLSSocket).encrypted) { return res.redirect(`https://${req.headers.host}${req.originalUrl}`) } + next() + }) - // Return security.txt. - if (req.originalUrl === "/security.txt" || req.originalUrl === "/.well-known/security.txt") { - const resourcePath = path.resolve(rootPath, "src/browser/security.txt") - res.set("Content-Type", getMediaMime(resourcePath)) - return res.send(await fs.readFile(resourcePath)) - } - - // Return robots.txt. - if (req.originalUrl === "/robots.txt") { - const resourcePath = path.resolve(rootPath, "src/browser/robots.txt") - res.set("Content-Type", getMediaMime(resourcePath)) - return res.send(await fs.readFile(resourcePath)) - } + app.router.get(["/security.txt", "/.well-known/security.txt"], async (_, res) => { + const resourcePath = path.resolve(rootPath, "src/browser/security.txt") + res.set("Content-Type", getMediaMime(resourcePath)) + res.send(await fs.readFile(resourcePath)) + }) - next() + app.router.get("/robots.txt", async (_, res) => { + const resourcePath = path.resolve(rootPath, "src/browser/robots.txt") + res.set("Content-Type", getMediaMime(resourcePath)) + res.send(await fs.readFile(resourcePath)) }) app.router.use("/", domainProxy.router) app.wsRouter.use("/", domainProxy.wsRouter.router) - app.router.all("/proxy/:port/:path(.*)?", async (req, res) => { + app.router.all("/proxy/:port{/*path}", async (req, res) => { await pathProxy.proxy(req, res) }) - app.wsRouter.get("/proxy/:port/:path(.*)?", async (req) => { - await pathProxy.wsProxy(req as WebsocketRequest) + app.wsRouter.get("/proxy/:port{/*path}", async (req) => { + await pathProxy.wsProxy(req as unknown as WebsocketRequest) }) // These two routes pass through the path directly. // So the proxied app must be aware it is running // under /absproxy// - app.router.all("/absproxy/:port/:path(.*)?", async (req, res) => { + app.router.all("/absproxy/:port{/*path}", async (req, res) => { await pathProxy.proxy(req, res, { passthroughPath: true, proxyBasePath: args["abs-proxy-base-path"], }) }) - app.wsRouter.get("/absproxy/:port/:path(.*)?", async (req) => { - await pathProxy.wsProxy(req as WebsocketRequest, { + app.wsRouter.get("/absproxy/:port{/*path}", async (req) => { + await pathProxy.wsProxy(req as unknown as WebsocketRequest, { passthroughPath: true, proxyBasePath: args["abs-proxy-base-path"], }) diff --git a/src/node/routes/vscode.ts b/src/node/routes/vscode.ts index 89b65a220875..4efb32993115 100644 --- a/src/node/routes/vscode.ts +++ b/src/node/routes/vscode.ts @@ -175,7 +175,7 @@ router.get("/manifest.json", async (req, res) => { const appName = req.args["app-name"] || "code-server" res.writeHead(200, { "Content-Type": "application/manifest+json" }) - return res.end( + res.end( replaceTemplates( req, JSON.stringify( From 727555b4147dfaec9d0346d11ea9c18f0068b926 Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 7 Mar 2025 10:36:27 -0900 Subject: [PATCH 041/150] Skip e2e when only changing workflows --- .github/workflows/build.yaml | 266 ++++++++++++----------------------- 1 file changed, 93 insertions(+), 173 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 897f72e1b9fb..0a243e388740 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,127 +22,114 @@ concurrency: # will skip running `npm install` if it successfully fetched from cache jobs: + changes: + runs-on: ubuntu-latest + outputs: + ci: ${{ steps.filter.outputs.ci }} + code: ${{ steps.filter.outputs.code }} + deps: ${{ steps.filter.outputs.deps }} + docs: ${{ steps.filter.outputs.docs }} + helm: ${{ steps.filter.outputs.helm }} + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Check changed files + uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + ci: + - ".github/**" + - "ci/**" + docs: + - "docs/**" + - "README.md" + - "CHANGELOG.md" + helm: + - "ci/helm-chart/**" + code: + - "src/**" + - "test/**" + deps: + - "lib/**" + - "patches/**" + - "package-lock.json" + - "test/package-lock.json" + - id: debug + run: | + echo "${{ toJSON(steps.filter )}}" + prettier: name: Run prettier check runs-on: ubuntu-22.04 timeout-minutes: 5 steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Install Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - run: SKIP_SUBMODULE_DEPS=1 npm ci - - run: npx prettier --check . doctoc: name: Doctoc markdown files runs-on: ubuntu-22.04 timeout-minutes: 5 + needs: changes + if: needs.changes.outputs.docs == 'true' steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v45 - with: - files: | - docs/** - - - name: Install Node.js - if: steps.changed-files.outputs.any_changed == 'true' - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - - if: steps.changed-files.outputs.any_changed == 'true' - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - if: steps.changed-files.outputs.any_changed == 'true' - run: npm run doctoc + - run: SKIP_SUBMODULE_DEPS=1 npm ci + - run: npm run doctoc lint-helm: name: Lint Helm chart runs-on: ubuntu-22.04 timeout-minutes: 5 + needs: changes + if: needs.changes.outputs.helm == 'true' steps: - - name: Checkout repo - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v45 - with: - files: | - ci/helm-chart/** - - - name: Install helm - if: steps.changed-files.outputs.any_changed == 'true' - uses: azure/setup-helm@v4 + - uses: actions/checkout@v4 + - uses: azure/setup-helm@v4 with: token: ${{ secrets.GITHUB_TOKEN }} - - - if: steps.changed-files.outputs.any_changed == 'true' - run: helm plugin install https://github.com/instrumenta/helm-kubeval - - - if: steps.changed-files.outputs.any_changed == 'true' - run: helm kubeval ci/helm-chart + - run: helm plugin install https://github.com/instrumenta/helm-kubeval + - run: helm kubeval ci/helm-chart lint-ts: name: Lint TypeScript files runs-on: ubuntu-22.04 timeout-minutes: 5 + needs: changes + if: needs.changes.outputs.code == 'true' steps: - - name: Checkout repo - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v45 - with: - files: | - **/*.ts - **/*.js - files_ignore: | - lib/vscode/** - - - name: Install Node.js - if: steps.changed-files.outputs.any_changed == 'true' - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - - if: steps.changed-files.outputs.any_changed == 'true' - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - name: Lint TypeScript files - if: steps.changed-files.outputs.any_changed == 'true' - run: npm run lint:ts + - run: SKIP_SUBMODULE_DEPS=1 npm ci + - run: npm run lint:ts lint-actions: name: Lint GitHub Actions runs-on: ubuntu-latest + needs: changes + if: needs.changes.outputs.ci == 'true' steps: - name: Checkout repo uses: actions/checkout@v4 @@ -156,42 +143,23 @@ jobs: name: Run unit tests runs-on: ubuntu-22.04 timeout-minutes: 5 + needs: changes + if: needs.changes.outputs.code == 'true' steps: - - name: Checkout repo - uses: actions/checkout@v4 - with: - fetch-depth: 2 - - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v45 - with: - files: | - **/*.ts - files_ignore: | - lib/vscode/** - - - name: Install Node.js - if: steps.changed-files.outputs.any_changed == 'true' - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - - if: steps.changed-files.outputs.any_changed == 'true' - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - if: steps.changed-files.outputs.any_changed == 'true' - run: npm run test:unit - - - name: Upload coverage report to Codecov - uses: codecov/codecov-action@v5 + - run: SKIP_SUBMODULE_DEPS=1 npm ci + - run: npm run test:unit + - uses: codecov/codecov-action@v5 + if: success() with: token: ${{ secrets.CODECOV_TOKEN }} - if: success() build: name: Build code-server @@ -201,44 +169,31 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} DISABLE_V8_COMPILE_CACHE: 1 steps: - - name: Checkout repo - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: submodules: true - - - name: Install system dependencies - run: sudo apt update && sudo apt install -y libkrb5-dev - - - name: Install quilt - uses: awalsh128/cache-apt-pkgs-action@latest + - run: sudo apt update && sudo apt install -y libkrb5-dev + - uses: awalsh128/cache-apt-pkgs-action@latest with: packages: quilt version: 1.0 - - - name: Patch Code - run: quilt push -a - - - name: Install Node.js - uses: actions/setup-node@v4 + - run: quilt push -a + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - env: + - run: npm run build + env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: npm run build - # Get Code's git hash. When this changes it means the content is # different and we need to rebuild. - name: Get latest lib/vscode rev id: vscode-rev run: echo "rev=$(git rev-parse HEAD:./lib/vscode)" >> $GITHUB_OUTPUT - # We need to rebuild when we have a new version of Code, when any of # the patches changed, or when the code-server version changes (since # it gets embedded into the code). Use VSCODE_CACHE_VERSION to @@ -249,7 +204,6 @@ jobs: with: path: lib/vscode-reh-web-* key: vscode-reh-package-${{ secrets.VSCODE_CACHE_VERSION }}-${{ steps.vscode-rev.outputs.rev }}-${{ hashFiles('patches/*.diff', 'ci/build/build-vscode.sh') }} - - name: Build vscode env: VERSION: "0.0.0" @@ -259,107 +213,77 @@ jobs: npm ci popd npm run build:vscode - # The release package does not contain any native modules # and is neutral to architecture/os/libc version. - run: npm run release if: success() - # https://github.com/actions/upload-artifact/issues/38 - run: tar -czf package.tar.gz release - - - name: Upload npm package artifact - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v4 with: name: npm-package path: ./package.tar.gz test-e2e: name: Run e2e tests - needs: build runs-on: ubuntu-22.04 timeout-minutes: 25 + needs: [changes, build] + if: needs.changes.outputs.code == 'true' || needs.changes.outputs.deps == 'true' steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Install system dependencies - run: sudo apt update && sudo apt install -y libkrb5-dev - - - name: Install Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - run: sudo apt update && sudo apt install -y libkrb5-dev + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - name: Download npm package - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v4 with: name: npm-package - - run: tar -xzf package.tar.gz - - run: cd release && npm install --unsafe-perm --omit=dev - - name: Install Playwright OS dependencies run: | ./test/node_modules/.bin/playwright install-deps ./test/node_modules/.bin/playwright install - - run: CODE_SERVER_TEST_ENTRY=./release npm run test:e2e - - - name: Upload test artifacts + - uses: actions/upload-artifact@v4 if: always() - uses: actions/upload-artifact@v4 with: name: failed-test-videos path: ./test/test-results - - - name: Remove release packages and test artifacts - run: rm -rf ./release ./test/test-results + - run: rm -rf ./release ./test/test-results test-e2e-proxy: name: Run e2e tests behind proxy - needs: build runs-on: ubuntu-22.04 timeout-minutes: 25 + needs: [changes, build] + if: needs.changes.outputs.code == 'true' || needs.changes.outputs.deps == 'true' steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Install system dependencies - run: sudo apt update && sudo apt install -y libkrb5-dev - - - name: Install Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - run: sudo apt update && sudo apt install -y libkrb5-dev + - uses: actions/setup-node@v4 with: node-version-file: .node-version cache: npm cache-dependency-path: | package-lock.json test/package-lock.json - - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - name: Download npm package - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v4 with: name: npm-package - - run: tar -xzf package.tar.gz - - run: cd release && npm install --unsafe-perm --omit=dev - - name: Install Playwright OS dependencies run: | ./test/node_modules/.bin/playwright install-deps ./test/node_modules/.bin/playwright install - - name: Cache Caddy uses: actions/cache@v4 id: caddy-cache @@ -367,7 +291,6 @@ jobs: path: | ~/.cache/caddy key: cache-caddy-2.5.2 - - name: Install Caddy env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -376,16 +299,13 @@ jobs: gh release download v2.5.2 --repo caddyserver/caddy --pattern "caddy_2.5.2_linux_amd64.tar.gz" mkdir -p ~/.cache/caddy tar -xzf caddy_2.5.2_linux_amd64.tar.gz --directory ~/.cache/caddy - - run: ~/.cache/caddy/caddy start --config ./ci/Caddyfile - - run: CODE_SERVER_TEST_ENTRY=./release npm run test:e2e:proxy + - run: ~/.cache/caddy/caddy stop --config ./ci/Caddyfile + if: always() - - if: always() - run: ~/.cache/caddy/caddy stop --config ./ci/Caddyfile - - - if: always() - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v4 + if: always() with: name: failed-test-videos-proxy path: ./test/test-results From cc3c22deee4392aac109a16cb57063c24dd5fa78 Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 7 Mar 2025 09:27:37 -0900 Subject: [PATCH 042/150] Build with newer version of Python We are getting an issue importing __future__ from annotations in one case and "invalid syntax" in another with `if CC :=`. There does not seem to be a reason to maintain a separate step for the amd64 build since the glibc version is the same. --- .github/workflows/release.yaml | 92 +++++----------------------------- 1 file changed, 12 insertions(+), 80 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 20e77e847aaf..a4433c810937 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -19,95 +19,27 @@ concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: - package-linux-amd64: - name: x86-64 Linux build - runs-on: ubuntu-latest - timeout-minutes: 15 - needs: npm-version - container: "centos:8" - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version-file: .node-version - cache: npm - cache-dependency-path: | - package-lock.json - test/package-lock.json - - - run: SKIP_SUBMODULE_DEPS=1 npm ci - - - name: Install development tools - run: | - cd /etc/yum.repos.d/ - sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* - sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* - yum install -y gcc-c++ make jq rsync python3 libsecret-devel krb5-devel - - - name: Install nfpm and envsubst - run: | - mkdir -p ~/.local/bin - curl -sSfL https://github.com/goreleaser/nfpm/releases/download/v2.22.2/nfpm_2.22.2_`uname -s`_`uname -m`.tar.gz | tar -C ~/.local/bin -zxv nfpm - curl -sSfL https://github.com/a8m/envsubst/releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst - chmod +x envsubst - mv envsubst ~/.local/bin - echo "$HOME/.local/bin" >> $GITHUB_PATH - - - name: Download npm package - uses: actions/download-artifact@v4 - with: - name: npm-release-package - - - run: tar -xzf package.tar.gz - - - run: npm run release:standalone - - - run: npm run test:integration - - - name: Upload coverage report to Codecov - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} - if: success() - continue-on-error: true - - # Strip out the v (v4.9.1 -> 4.9.1). - - name: Get and set VERSION - run: | - TAG="${{ inputs.version || github.ref_name }}" - echo "VERSION=${TAG#v}" >> $GITHUB_ENV - - - env: - VERSION: ${{ env.VERSION }} - run: npm run package - - - uses: softprops/action-gh-release@v1 - with: - draft: true - discussion_category_name: "📣 Announcements" - files: ./release-packages/* - package-linux-cross: - name: Linux cross-compile builds + name: ${{ matrix.prefix }} runs-on: ubuntu-latest timeout-minutes: 15 needs: npm-version - container: "debian:buster" + container: "python:3.8-slim-buster" strategy: matrix: include: + - prefix: x86_64-linux-gnu + npm_arch: x64 + apt_arch: amd64 + package_arch: amd64 - prefix: aarch64-linux-gnu npm_arch: arm64 apt_arch: arm64 + package_arch: arm64 - prefix: arm-linux-gnueabihf npm_arch: armv7l apt_arch: armhf + package_arch: armv7l env: AR: ${{ format('{0}-ar', matrix.prefix) }} @@ -121,6 +53,7 @@ jobs: PKG_CONFIG_PATH: ${{ format('/usr/lib/{0}/pkgconfig', matrix.prefix) }} TARGET_ARCH: ${{ matrix.apt_arch }} npm_config_arch: ${{ matrix.npm_arch }} + PKG_ARCH: ${{ matrix.package_arch }} # Not building from source results in an x86_64 argon2, as if # npm_config_arch is being ignored. npm_config_build_from_source: true @@ -141,7 +74,7 @@ jobs: - name: Install cross-compiler and system dependencies run: | dpkg --add-architecture $TARGET_ARCH - apt-get update && apt-get install -y --no-install-recommends \ + apt update && apt install -y --no-install-recommends \ crossbuild-essential-$TARGET_ARCH \ libx11-dev:$TARGET_ARCH \ libx11-xcb-dev:$TARGET_ARCH \ @@ -149,8 +82,7 @@ jobs: libsecret-1-dev:$TARGET_ARCH \ libkrb5-dev:$TARGET_ARCH \ ca-certificates \ - curl wget rsync gettext-base \ - python3 + curl wget rsync gettext-base - run: SKIP_SUBMODULE_DEPS=1 npm ci @@ -183,7 +115,7 @@ jobs: - env: VERSION: ${{ env.VERSION }} - run: npm run package ${npm_config_arch} + run: npm run package $PKG_ARCH - uses: softprops/action-gh-release@v1 with: From e1c84998d7dea647124fe1365b07e415832e2493 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Tue, 11 Mar 2025 06:31:13 +0100 Subject: [PATCH 043/150] Update Code to 1.98.1 --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 6609ac3d66f4..2fc07b811f76 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 6609ac3d66f4eade5cf376d1cb76f13985724bcb +Subproject commit 2fc07b811f760549dab9be9d2bedd06c51dfcb9a From e2c489dd00f163b1a8d959965b0c30c1a978a080 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 13 Mar 2025 19:46:36 +0100 Subject: [PATCH 044/150] Update Code to 1.98.2 --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 2fc07b811f76..ddc367ed5c89 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 2fc07b811f760549dab9be9d2bedd06c51dfcb9a +Subproject commit ddc367ed5c8936efe395cffeec279b04ffd7db78 From 53722c536197276005f68a7fb174d9ab15afc63b Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 4 Apr 2025 20:22:23 +0200 Subject: [PATCH 045/150] Update Code to 1.99.0 (#7300) --- .node-version | 2 +- lib/vscode | 2 +- patches/base-path.diff | 10 +++++----- patches/clipboard.diff | 6 +++--- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 14 +++++++------- patches/getting-started.diff | 4 ++-- patches/integration.diff | 4 ++-- patches/logout.diff | 2 +- patches/marketplace.diff | 8 ++++---- patches/proxy-uri.diff | 4 ++-- patches/service-worker.diff | 2 +- patches/sourcemaps.diff | 2 +- patches/store-socket.diff | 2 +- patches/telemetry.diff | 6 +++--- patches/unique-db.diff | 2 +- patches/update-check.diff | 2 +- patches/webview.diff | 4 ++-- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.node-version b/.node-version index 0254b1e633c7..87bc4c77fe13 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.18.2 +20.18.3 diff --git a/lib/vscode b/lib/vscode index ddc367ed5c89..4437686ffeba 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit ddc367ed5c8936efe395cffeec279b04ffd7db78 +Subproject commit 4437686ffebaf200fa4a6e6e67f735f3edf24ada diff --git a/patches/base-path.diff b/patches/base-path.diff index 3a8a0eb41f36..7d6bbc6999f0 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -241,7 +241,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -56,6 +56,7 @@ export type ExtensionVirtualWorkspaceSup +@@ -57,6 +57,7 @@ export type ExtensionVirtualWorkspaceSup export interface IProductConfiguration { readonly codeServerVersion?: string @@ -253,7 +253,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts -@@ -317,7 +317,8 @@ class LocalStorageURLCallbackProvider ex +@@ -332,7 +332,8 @@ class LocalStorageURLCallbackProvider ex this.startListening(); } @@ -263,7 +263,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts } private startListening(): void { -@@ -563,17 +564,6 @@ class WorkspaceProvider implements IWork +@@ -579,17 +580,6 @@ class WorkspaceProvider implements IWork } } @@ -281,7 +281,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts (function () { // Find config by checking for DOM -@@ -582,8 +572,8 @@ function readCookie(name: string): strin +@@ -598,8 +588,8 @@ function readCookie(name: string): strin if (!configElement || !configElementAttribute) { throw new Error('Missing web configuration element'); } @@ -296,7 +296,7 @@ Index: code-server/lib/vscode/src/vs/platform/extensionResourceLoader/common/ext =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts +++ code-server/lib/vscode/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts -@@ -98,7 +98,7 @@ export abstract class AbstractExtensionR +@@ -120,7 +120,7 @@ export abstract class AbstractExtensionR : version, path: 'extension' })); diff --git a/patches/clipboard.diff b/patches/clipboard.diff index 2c4063c0247c..ffcafe5dddb0 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -79,13 +79,13 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts --- code-server.orig/lib/vscode/src/vs/platform/environment/common/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/argv.ts @@ -122,6 +122,7 @@ export interface NativeParsedArgs { + 'disable-chromium-sandbox'?: boolean; sandbox?: boolean; - 'enable-coi'?: boolean; + 'stdin-to-clipboard'?: boolean; + 'unresponsive-sample-interval'?: string; + 'unresponsive-sample-period'?: string; - // chromium command line args: https://electronjs.org/docs/all#supported-chrome-command-line-switches - 'no-proxy-server'?: boolean; Index: code-server/lib/vscode/src/vs/platform/environment/node/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/node/argv.ts diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index 73a78c574b28..6b222147a92d 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -319,6 +319,10 @@ export class Extension implements IExten +@@ -326,6 +326,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index 96d996ea7bcc..b711a0cf414d 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; -@@ -246,6 +246,9 @@ export async function setupServerService +@@ -255,6 +255,9 @@ export async function setupServerService const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority)); socketServer.registerChannel('extensions', channel); @@ -272,7 +272,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -@@ -435,9 +435,6 @@ export class InstallAction extends Exten +@@ -445,9 +445,6 @@ export class InstallAction extends Exten if (this.extension.isBuiltin) { return; } @@ -282,7 +282,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens if (this.extension.state !== ExtensionState.Uninstalled) { return; } -@@ -742,7 +739,7 @@ export abstract class InstallInOtherServ +@@ -752,7 +749,7 @@ export abstract class InstallInOtherServ } if (isLanguagePackExtension(this.extension.local.manifest)) { @@ -291,7 +291,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } // Prefers to run on UI -@@ -2028,17 +2025,6 @@ export class SetLanguageAction extends E +@@ -2039,17 +2036,6 @@ export class SetLanguageAction extends E update(): void { this.enabled = false; this.class = SetLanguageAction.DisabledClass; @@ -309,7 +309,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } override async run(): Promise { -@@ -2055,7 +2041,6 @@ export class ClearLanguageAction extends +@@ -2066,7 +2052,6 @@ export class ClearLanguageAction extends private static readonly DisabledClass = `${this.EnabledClass} disabled`; constructor( @@ -317,7 +317,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens @ILocaleService private readonly localeService: ILocaleService, ) { super(ClearLanguageAction.ID, ClearLanguageAction.TITLE.value, ClearLanguageAction.DisabledClass, false); -@@ -2065,17 +2050,6 @@ export class ClearLanguageAction extends +@@ -2076,17 +2061,6 @@ export class ClearLanguageAction extends update(): void { this.enabled = false; this.class = ClearLanguageAction.DisabledClass; @@ -351,7 +351,7 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts +++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts -@@ -52,7 +52,7 @@ import './services/dialogs/browser/fileD +@@ -53,7 +53,7 @@ import './services/dialogs/browser/fileD import './services/host/browser/browserHostService.js'; import './services/lifecycle/browser/lifecycleService.js'; import './services/clipboard/browser/clipboardService.js'; diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 9bdbaa8aaa03..25e1ed316412 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -870,6 +870,72 @@ export class GettingStartedPage extends +@@ -872,6 +872,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -905,6 +971,9 @@ export class GettingStartedPage extends +@@ -907,6 +973,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } diff --git a/patches/integration.diff b/patches/integration.diff index 06a4ddb6a5e7..4bb397651b14 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -113,7 +113,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandl =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts +++ code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -@@ -79,8 +79,11 @@ export class BrowserDialogHandler extend +@@ -78,8 +78,11 @@ export class BrowserDialogHandler extend async about(): Promise { const detailString = (useAgo: boolean): string => { @@ -204,7 +204,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -55,6 +55,8 @@ export type ExtensionVirtualWorkspaceSup +@@ -56,6 +56,8 @@ export type ExtensionVirtualWorkspaceSup }; export interface IProductConfiguration { diff --git a/patches/logout.diff b/patches/logout.diff index b351b1947fc9..46591632a2a3 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -8,7 +8,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -58,6 +58,7 @@ export interface IProductConfiguration { +@@ -59,6 +59,7 @@ export interface IProductConfiguration { readonly codeServerVersion?: string readonly rootEndpoint?: string readonly updateEndpoint?: string diff --git a/patches/marketplace.diff b/patches/marketplace.diff index c5735bd6e61f..a64602dbda1a 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -19,7 +19,7 @@ Index: code-server/lib/vscode/src/vs/platform/product/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/product/common/product.ts +++ code-server/lib/vscode/src/vs/platform/product/common/product.ts -@@ -47,6 +47,16 @@ else if (globalThis._VSCODE_PRODUCT_JSON +@@ -49,6 +49,16 @@ else if (globalThis._VSCODE_PRODUCT_JSON version: pkg.version }); } @@ -74,9 +74,9 @@ Index: code-server/lib/vscode/src/vs/platform/extensionResourceLoader/common/ext import { getTelemetryLevel, supportsTelemetry } from '../../telemetry/common/telemetryUtils.js'; -import { RemoteAuthorities } from '../../../base/common/network.js'; import { TargetPlatform } from '../../extensions/common/extensions.js'; - - const WEB_EXTENSION_RESOURCE_END_POINT_SEGMENT = '/web-extension-resource/'; -@@ -140,9 +139,9 @@ export abstract class AbstractExtensionR + import { ExtensionGalleryResourceType, getExtensionGalleryManifestResourceUri, IExtensionGalleryManifest, IExtensionGalleryManifestService } from '../../extensionManagement/common/extensionGalleryManifest.js'; + import { ILogService } from '../../log/common/log.js'; +@@ -163,9 +162,9 @@ export abstract class AbstractExtensionR } protected _isWebExtensionResourceEndPoint(uri: URI): boolean { diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index 3adceb265a5c..2ccd9843820d 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -30,7 +30,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -59,6 +59,7 @@ export interface IProductConfiguration { +@@ -60,6 +60,7 @@ export interface IProductConfiguration { readonly rootEndpoint?: string readonly updateEndpoint?: string readonly logoutEndpoint?: string @@ -104,7 +104,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts import type { IURLCallbackProvider } from '../../../workbench/services/url/browser/urlService.js'; import { create } from '../../../workbench/workbench.web.main.internal.js'; -@@ -584,6 +585,39 @@ class WorkspaceProvider implements IWork +@@ -600,6 +601,39 @@ class WorkspaceProvider implements IWork settingsSyncOptions: config.settingsSyncOptions ? { enabled: config.settingsSyncOptions.enabled, } : undefined, workspaceProvider: WorkspaceProvider.create(config), urlCallbackProvider: new LocalStorageURLCallbackProvider(config.callbackRoute), diff --git a/patches/service-worker.diff b/patches/service-worker.diff index 96266ee50c6d..507a16b5e6bb 100644 --- a/patches/service-worker.diff +++ b/patches/service-worker.diff @@ -6,7 +6,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -60,6 +60,10 @@ export interface IProductConfiguration { +@@ -61,6 +61,10 @@ export interface IProductConfiguration { readonly updateEndpoint?: string readonly logoutEndpoint?: string readonly proxyEndpointTemplate?: string diff --git a/patches/sourcemaps.diff b/patches/sourcemaps.diff index ceef9dcb5404..dd6bc63a4640 100644 --- a/patches/sourcemaps.diff +++ b/patches/sourcemaps.diff @@ -32,7 +32,7 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js let version = packageJson.version; const quality = product.quality; -@@ -457,7 +456,7 @@ function tweakProductForServerWeb(produc +@@ -451,7 +450,7 @@ function tweakProductForServerWeb(produc const minifyTask = task.define(`minify-vscode-${type}`, task.series( bundleTask, util.rimraf(`out-vscode-${type}-min`), diff --git a/patches/store-socket.diff b/patches/store-socket.diff index ce173be3283e..d6bc187edca4 100644 --- a/patches/store-socket.diff +++ b/patches/store-socket.diff @@ -96,7 +96,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extensionHostProcess.ts import minimist from 'minimist'; import * as nativeWatchdog from 'native-watchdog'; import * as net from 'net'; -@@ -422,7 +423,28 @@ async function startExtensionHostProcess +@@ -423,7 +424,28 @@ async function startExtensionHostProcess ); // rewrite onTerminate-function to be a proper shutdown diff --git a/patches/telemetry.diff b/patches/telemetry.diff index f1919bd168a0..06e21ef627f9 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { NullPolicyService } from '../../platform/policy/common/policy.js'; import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; -@@ -153,11 +155,23 @@ export async function setupServerService +@@ -158,11 +160,23 @@ export async function setupServerService const requestService = new RequestService('remote', configurationService, environmentService, logService); services.set(IRequestService, requestService); @@ -147,7 +147,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -64,6 +64,7 @@ export interface IProductConfiguration { +@@ -65,6 +65,7 @@ export interface IProductConfiguration { readonly path: string; readonly scope: string; } @@ -159,7 +159,7 @@ Index: code-server/lib/vscode/src/vs/platform/product/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/product/common/product.ts +++ code-server/lib/vscode/src/vs/platform/product/common/product.ts -@@ -55,7 +55,8 @@ else if (globalThis._VSCODE_PRODUCT_JSON +@@ -57,7 +57,8 @@ else if (globalThis._VSCODE_PRODUCT_JSON resourceUrlTemplate: "https://open-vsx.org/vscode/asset/%7Bpublisher%7D/%7Bname%7D/%7Bversion%7D/Microsoft.VisualStudio.Code.WebResources/%7Bpath%7D", controlUrl: "", recommendationsUrl: "", diff --git a/patches/unique-db.diff b/patches/unique-db.diff index 8d46a0b7aea0..abe17ad75a95 100644 --- a/patches/unique-db.diff +++ b/patches/unique-db.diff @@ -21,7 +21,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/storage/browser/storageS export class BrowserStorageService extends AbstractStorageService { -@@ -298,7 +299,11 @@ export class IndexedDBStorageDatabase ex +@@ -300,7 +301,11 @@ export class IndexedDBStorageDatabase ex } static async createWorkspaceStorage(workspaceId: string, logService: ILogService): Promise { diff --git a/patches/update-check.diff b/patches/update-check.diff index 63617afdd41f..700d1cf40727 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -93,7 +93,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -57,6 +57,7 @@ export type ExtensionVirtualWorkspaceSup +@@ -58,6 +58,7 @@ export type ExtensionVirtualWorkspaceSup export interface IProductConfiguration { readonly codeServerVersion?: string readonly rootEndpoint?: string diff --git a/patches/webview.diff b/patches/webview.diff index b22eca84b577..a148c68aa991 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -70,8 +70,8 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index -+ content="default-src 'none'; script-src 'sha256-z5v/0xE4zQPgV1fazhHB/UlsTzdm39hRMk3V8Av0HI4=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> +- content="default-src 'none'; script-src 'sha256-nlLyDpnjtftJG2xvXh2vuy77l7xFTjfOz7Jnj1iXNmA=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> ++ content="default-src 'none'; script-src 'sha256-ap/AtocvSWp0rrxaO19DJy/nOpazT6M5Cv9utUWe7MA=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> From 400ac7b8d0e6b95b40ba9c39c7032e105a98fd7d Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 7 Apr 2025 16:51:29 -0800 Subject: [PATCH 046/150] Release v4.99.0 --- CHANGELOG.md | 16 ++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ba305f15d93..f7ce74352eb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,22 @@ Code v99.99.999 ## Unreleased +## [4.99.0](https://github.com/coder/code-server/releases/tag/v4.99.0) - 2025-04-07 + +Code v1.99.0 + +### Changed + +- Update to Code 1.99.0. + +## [4.98.0](https://github.com/coder/code-server/releases/tag/v4.98.0) - 2025-03-07 + +Code v1.98.0 + +### Changed + +- Update to Code 1.98.0. + ## [4.97.2](https://github.com/coder/code-server/releases/tag/v4.96.4) - 2025-02-18 Code v1.97.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 3eaa024172a5..4ecef552fccc 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.25.3 +version: 3.26.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.96.4 +appVersion: 4.99.0 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 120615925ab0..23268108366c 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.96.4' + tag: '4.99.0' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 0a92b7630413a9739541251a47ae6d509fa0e229 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Tue, 8 Apr 2025 20:51:30 +0200 Subject: [PATCH 047/150] Update Code to 1.99.1 (#7304) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 4437686ffeba..7c6fdfb0b8f2 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 4437686ffebaf200fa4a6e6e67f735f3edf24ada +Subproject commit 7c6fdfb0b8f2f675eb0b47f3d95eeca78962565b From 55b311a9547cca4afbe68e5af18aaa7050ae4335 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 8 Apr 2025 13:36:03 -0800 Subject: [PATCH 048/150] Release v4.99.1 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7ce74352eb1..4ace20b9ded5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.99.1](https://github.com/coder/code-server/releases/tag/v4.99.1) - 2025-04-08 + +Code v1.99.1 + +### Changed + +- Update to Code 1.99.1. + ## [4.99.0](https://github.com/coder/code-server/releases/tag/v4.99.0) - 2025-04-07 Code v1.99.0 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 4ecef552fccc..06eb0fa9f346 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.26.0 +version: 3.26.1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.99.0 +appVersion: 4.99.1 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 23268108366c..e5ac4226dd24 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.99.0' + tag: '4.99.1' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From e0c960b30e79653332950a285760c5baa1745652 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 10 Apr 2025 21:13:29 +0200 Subject: [PATCH 049/150] Update Code to 1.99.2 (#7306) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 7c6fdfb0b8f2..4949701c880d 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 7c6fdfb0b8f2f675eb0b47f3d95eeca78962565b +Subproject commit 4949701c880d4bdb949e3c0e6b400288da7f474b From e3c09efcbcdfd632cbeac6044692d7ea9f493386 Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 11 Apr 2025 11:42:17 -0800 Subject: [PATCH 050/150] Release v4.99.2 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ace20b9ded5..f89a3760aa50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.99.2](https://github.com/coder/code-server/releases/tag/v4.99.2) - 2025-04-10 + +Code v1.99.2 + +### Changed + +- Update to Code 1.99.2. + ## [4.99.1](https://github.com/coder/code-server/releases/tag/v4.99.1) - 2025-04-08 Code v1.99.1 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 06eb0fa9f346..305f33d616ec 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.26.1 +version: 3.26.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.99.1 +appVersion: 4.99.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index e5ac4226dd24..d2ded096cccf 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.99.1' + tag: '4.99.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From b07335a0f1fdf5df7144b134be4cf9e72caa9dcf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 10:57:40 -0800 Subject: [PATCH 051/150] chore: bump aquasecurity/trivy-action from 0.29.0 to 0.30.0 (#7288) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.29.0 to 0.30.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/18f2510ee396bbf400402947b394f2dd8c87dbb0...6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security.yaml | 2 +- .github/workflows/trivy-docker.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index d67018340754..69a08a5a4e09 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -51,7 +51,7 @@ jobs: fetch-depth: 0 - name: Run Trivy vulnerability scanner in repo mode - uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 + uses: aquasecurity/trivy-action@6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5 with: scan-type: "fs" scan-ref: "." diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index 133720a621e5..a1e90306c7f4 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -51,7 +51,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in image mode - uses: aquasecurity/trivy-action@18f2510ee396bbf400402947b394f2dd8c87dbb0 + uses: aquasecurity/trivy-action@6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5 with: image-ref: "docker.io/codercom/code-server:latest" ignore-unfixed: true From 5051c0f9e4ed3cd243299278d57ba852af57872b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 10:58:33 -0800 Subject: [PATCH 052/150] chore: bump typescript-eslint from 8.12.2 to 8.29.0 (#7290) Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.12.2 to 8.29.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.29.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 219 ++++++++++++++++++++++++++-------------------- 1 file changed, 125 insertions(+), 94 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae176eb012fc..82017eadc086 100644 --- a/package-lock.json +++ b/package-lock.json @@ -345,6 +345,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -358,6 +359,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -367,6 +369,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -705,20 +708,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", - "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", + "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/type-utils": "8.12.2", - "@typescript-eslint/utils": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/type-utils": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -729,24 +733,21 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", - "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4" }, "engines": { @@ -757,22 +758,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", - "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", + "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2" + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -783,15 +781,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", - "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", + "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/utils": "8.29.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -800,17 +799,17 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", - "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", + "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -820,19 +819,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", - "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", + "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -841,10 +841,8 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -852,6 +850,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -861,6 +860,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -872,15 +872,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", - "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", + "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2" + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -890,17 +891,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", - "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", + "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.29.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -910,6 +913,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1279,6 +1295,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2593,16 +2610,17 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -2613,6 +2631,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2634,10 +2653,11 @@ "dev": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -2673,6 +2693,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3045,7 +3066,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-bigints": { "version": "1.0.2", @@ -3547,6 +3569,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4059,6 +4082,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -4203,6 +4227,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -4710,6 +4735,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -4882,7 +4908,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/range-parser": { "version": "1.2.1", @@ -5063,10 +5090,11 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5131,6 +5159,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -5744,6 +5773,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5793,15 +5823,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-node": { @@ -5998,14 +6029,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.12.2.tgz", - "integrity": "sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", + "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.12.2", - "@typescript-eslint/parser": "8.12.2", - "@typescript-eslint/utils": "8.12.2" + "@typescript-eslint/eslint-plugin": "8.29.0", + "@typescript-eslint/parser": "8.29.0", + "@typescript-eslint/utils": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6014,10 +6046,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/unbox-primitive": { From cd4d1b614d0f9c478e9d70709346101593971a7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 10:58:42 -0800 Subject: [PATCH 053/150] chore: bump eslint from 9.13.0 to 9.23.0 (#7291) Bumps [eslint](https://github.com/eslint/eslint) from 9.13.0 to 9.23.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.13.0...v9.23.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 178 +++++++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 82 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82017eadc086..f27859c232c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,10 +113,11 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -140,13 +141,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -154,20 +155,35 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -200,18 +216,19 @@ } }, "node_modules/@eslint/js": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -232,23 +249,10 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@humanfs/core": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", - "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -256,19 +260,33 @@ } }, "node_modules/@humanfs/node": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", - "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.0", + "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -283,9 +301,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -945,10 +963,11 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2121,31 +2140,33 @@ } }, "node_modules/eslint": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", - "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.13.0", - "@eslint/plugin-kit": "^0.2.0", - "@humanfs/node": "^0.16.5", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.1", + "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2159,8 +2180,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -2367,9 +2387,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", - "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2396,9 +2416,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", - "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2409,15 +2429,15 @@ } }, "node_modules/espree": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", - "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.12.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.1.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2427,9 +2447,9 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", - "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5717,12 +5737,6 @@ "node": ">=10" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/tinyglobby": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", From 7eb8f4be8781b7a9e114c931fd0efa8227b1ca2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 10:58:54 -0800 Subject: [PATCH 054/150] chore: bump @eslint/eslintrc from 3.2.0 to 3.3.1 (#7292) Bumps [@eslint/eslintrc](https://github.com/eslint/eslintrc) from 3.2.0 to 3.3.1. - [Release notes](https://github.com/eslint/eslintrc/releases) - [Changelog](https://github.com/eslint/eslintrc/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslintrc/compare/v3.2.0...v3.3.1) --- updated-dependencies: - dependency-name: "@eslint/eslintrc" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> From cb29e6598244a571fbae22c9d6cdbf6933ab16b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 11:00:47 -0800 Subject: [PATCH 055/150] chore: bump proxy-agent from 6.4.0 to 6.5.0 (#7294) Bumps [proxy-agent](https://github.com/TooTallNate/proxy-agents/tree/HEAD/packages/proxy-agent) from 6.4.0 to 6.5.0. - [Release notes](https://github.com/TooTallNate/proxy-agents/releases) - [Changelog](https://github.com/TooTallNate/proxy-agents/blob/main/packages/proxy-agent/CHANGELOG.md) - [Commits](https://github.com/TooTallNate/proxy-agents/commits/proxy-agent@6.5.0/packages/proxy-agent) --- updated-dependencies: - dependency-name: proxy-agent dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 168 +++++++++++++++++++++------------------------- 1 file changed, 75 insertions(+), 93 deletions(-) diff --git a/package-lock.json b/package-lock.json index f27859c232c9..7eb351d5884a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -463,7 +463,8 @@ "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" }, "node_modules/@tsconfig/node10": { "version": "1.0.11", @@ -1218,6 +1219,7 @@ "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -1260,6 +1262,7 @@ "version": "5.0.5", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -1649,6 +1652,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -1765,6 +1769,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -2123,6 +2128,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -2463,6 +2469,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2829,19 +2836,6 @@ "node": ">= 0.8" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -2992,14 +2986,14 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" @@ -3080,7 +3074,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -3226,6 +3221,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -3235,12 +3231,10 @@ } }, "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -3368,6 +3362,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -3737,7 +3732,8 @@ "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" }, "node_modules/json-buffer": { "version": "3.0.1", @@ -3771,17 +3767,6 @@ "json5": "lib/cli.js" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/just-performance": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/just-performance/-/just-performance-4.3.0.tgz", @@ -4369,6 +4354,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -4603,40 +4589,40 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -4647,6 +4633,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -4841,40 +4828,40 @@ } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -5492,15 +5479,17 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -5511,11 +5500,12 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -5524,12 +5514,10 @@ } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -5538,6 +5526,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -5546,7 +5535,8 @@ "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" }, "node_modules/stable-hash": { "version": "0.0.4", @@ -6170,14 +6160,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", From 9045919d2b7bf1e577fe1180a6c99366b722a0da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 11:01:03 -0800 Subject: [PATCH 056/150] chore: bump robinraju/release-downloader from 1.11 to 1.12 (#7289) Bumps [robinraju/release-downloader](https://github.com/robinraju/release-downloader) from 1.11 to 1.12. - [Release notes](https://github.com/robinraju/release-downloader/releases) - [Commits](https://github.com/robinraju/release-downloader/compare/v1.11...v1.12) --- updated-dependencies: - dependency-name: robinraju/release-downloader dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/publish.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 7c22d7f9d154..04d0a7bc52a4 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -33,7 +33,7 @@ jobs: node-version-file: .node-version - name: Download npm package from release artifacts - uses: robinraju/release-downloader@v1.11 + uses: robinraju/release-downloader@v1.12 with: repository: "coder/code-server" tag: ${{ github.event.inputs.version || github.ref_name }} @@ -176,7 +176,7 @@ jobs: echo "VERSION=${TAG#v}" >> $GITHUB_ENV - name: Download deb artifacts - uses: robinraju/release-downloader@v1.11 + uses: robinraju/release-downloader@v1.12 with: repository: "coder/code-server" tag: v${{ env.VERSION }} @@ -184,7 +184,7 @@ jobs: out-file-path: "release-packages" - name: Download rpm artifacts - uses: robinraju/release-downloader@v1.11 + uses: robinraju/release-downloader@v1.12 with: repository: "coder/code-server" tag: v${{ env.VERSION }} From bbf2e24648c8d588f02e8dd213cbd6140858b1ab Mon Sep 17 00:00:00 2001 From: helgehatt Date: Mon, 14 Apr 2025 21:27:02 +0200 Subject: [PATCH 057/150] Add skip-auth-preflight flag to allow OPTIONS requests through proxy (#7284) --- src/node/cli.ts | 5 +++++ src/node/main.ts | 3 +++ src/node/routes/domainProxy.ts | 5 +++++ src/node/routes/pathProxy.ts | 4 +++- test/unit/node/cli.test.ts | 3 +++ test/unit/node/proxy.test.ts | 15 +++++++++++++++ 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/node/cli.ts b/src/node/cli.ts index 9eb6e5163e8a..a07a18b0a260 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -84,6 +84,7 @@ export interface UserProvidedArgs extends UserProvidedCodeArgs { "trusted-origins"?: string[] version?: boolean "proxy-domain"?: string[] + "skip-auth-preflight"?: boolean "reuse-window"?: boolean "new-window"?: boolean "ignore-last-opened"?: boolean @@ -252,6 +253,10 @@ export const options: Options> = { description: "GitHub authentication token (can only be passed in via $GITHUB_TOKEN or the config file).", }, "proxy-domain": { type: "string[]", description: "Domain used for proxying ports." }, + "skip-auth-preflight": { + type: "boolean", + description: "Allows preflight requests through proxy without authentication.", + }, "ignore-last-opened": { type: "boolean", short: "e", diff --git a/src/node/main.ts b/src/node/main.ts index 990a7af792b1..04e4470b9088 100644 --- a/src/node/main.ts +++ b/src/node/main.ts @@ -163,6 +163,9 @@ export const runCodeServer = async ( logger.info(` - ${plural(args["proxy-domain"].length, "Proxying the following domain")}:`) args["proxy-domain"].forEach((domain) => logger.info(` - ${domain}`)) } + if (args["skip-auth-preflight"]) { + logger.info(" - Skipping authentication for preflight requests") + } if (process.env.VSCODE_PROXY_URI) { logger.info(`Using proxy URI in PORTS tab: ${process.env.VSCODE_PROXY_URI}`) } diff --git a/src/node/routes/domainProxy.ts b/src/node/routes/domainProxy.ts index 0a9bb4a324f7..6ffee67fa002 100644 --- a/src/node/routes/domainProxy.ts +++ b/src/node/routes/domainProxy.ts @@ -61,6 +61,11 @@ router.all(/.*/, async (req, res, next) => { ensureProxyEnabled(req) + if (req.method === "OPTIONS" && req.args["skip-auth-preflight"]) { + // Allow preflight requests with `skip-auth-preflight` flag + return next() + } + // Must be authenticated to use the proxy. const isAuthenticated = await authenticated(req) if (!isAuthenticated) { diff --git a/src/node/routes/pathProxy.ts b/src/node/routes/pathProxy.ts index bb8efd40d832..254c5e623a79 100644 --- a/src/node/routes/pathProxy.ts +++ b/src/node/routes/pathProxy.ts @@ -26,7 +26,9 @@ export async function proxy( ): Promise { ensureProxyEnabled(req) - if (!(await authenticated(req))) { + if (req.method === "OPTIONS" && req.args["skip-auth-preflight"]) { + // Allow preflight requests with `skip-auth-preflight` flag + } else if (!(await authenticated(req))) { // If visiting the root (/:port only) redirect to the login page. if (!req.params.path || req.params.path === "/") { const to = self(req) diff --git a/test/unit/node/cli.test.ts b/test/unit/node/cli.test.ts index e596549da100..552576fac4c9 100644 --- a/test/unit/node/cli.test.ts +++ b/test/unit/node/cli.test.ts @@ -108,6 +108,8 @@ describe("parser", () => { ["--abs-proxy-base-path", "/codeserver/app1"], + "--skip-auth-preflight", + ["--session-socket", "/tmp/override-code-server-ipc-socket"], ["--host", "0.0.0.0"], @@ -146,6 +148,7 @@ describe("parser", () => { "bind-addr": "192.169.0.1:8080", "session-socket": "/tmp/override-code-server-ipc-socket", "abs-proxy-base-path": "/codeserver/app1", + "skip-auth-preflight": true, }) }) diff --git a/test/unit/node/proxy.test.ts b/test/unit/node/proxy.test.ts index 186cd475b3e2..b3509ed640df 100644 --- a/test/unit/node/proxy.test.ts +++ b/test/unit/node/proxy.test.ts @@ -268,6 +268,21 @@ describe("proxy", () => { const text = await resp.text() expect(text).toBe("app being served behind a prefixed path") }) + + it("should not allow OPTIONS without authentication by default", async () => { + process.env.PASSWORD = "test" + codeServer = await integration.setup(["--auth=password"]) + const resp = await codeServer.fetch(proxyPath, { method: "OPTIONS" }) + expect(resp.status).toBe(401) + }) + + it("should allow OPTIONS with `skip-auth-preflight` flag", async () => { + process.env.PASSWORD = "test" + codeServer = await integration.setup(["--auth=password", "--skip-auth-preflight"]) + e.post("/wsup", (req, res) => {}) + const resp = await codeServer.fetch(proxyPath, { method: "OPTIONS" }) + expect(resp.status).toBe(200) + }) }) // NOTE@jsjoeio From ec0899a81b3f7f613c9c85462f8adf3d122d45f1 Mon Sep 17 00:00:00 2001 From: partev Date: Mon, 14 Apr 2025 15:27:44 -0400 Subject: [PATCH 058/150] Remove extra closing parentheses from docs (#7309) --- docs/guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guide.md b/docs/guide.md index c2f230ee5eb7..de1b50b495cf 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -121,7 +121,7 @@ access code-server on an iPad or do not want to use SSH port forwarding. 1. You'll need a domain name (if you don't have one, you can purchase one from [Google Domains](https://domains.google.com) or the domain service of your - choice)). Once you have a domain name, add an A record to your domain that contains your + choice). Once you have a domain name, add an A record to your domain that contains your instance's IP address. 1. Install [Caddy](https://caddyserver.com/docs/download#debian-ubuntu-raspbian): @@ -168,7 +168,7 @@ At this point, you should be able to access code-server via 1. You'll need a domain name (if you don't have one, you can purchase one from [Google Domains](https://domains.google.com) or the domain service of your - choice)). Once you have a domain name, add an A record to your domain that contains your + choice). Once you have a domain name, add an A record to your domain that contains your instance's IP address. 1. Install NGINX: From 3b7634c578124ec707a5d78a2acb74dc6ede003c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:03:25 -0800 Subject: [PATCH 059/150] chore: bump @babel/runtime from 7.25.7 to 7.27.0 (#7312) Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.25.7 to 7.27.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.27.0/packages/babel-runtime) --- updated-dependencies: - dependency-name: "@babel/runtime" dependency-version: 7.27.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7eb351d5884a..6c7f81cea9c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,9 +70,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", - "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, From c36b2d3edd1cc8db7cfc49f5bc55711e7c5ac928 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 17 Apr 2025 00:18:00 +0200 Subject: [PATCH 060/150] Update Code to 1.99.3 (#7314) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 4949701c880d..17baf841131a 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 4949701c880d4bdb949e3c0e6b400288da7f474b +Subproject commit 17baf841131aa23349f217ca7c570c76ee87b957 From 5d5b7b194444a301f3866302dd9394211e56a6bb Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 17 Apr 2025 10:46:50 -0800 Subject: [PATCH 061/150] Use ubuntu-latest in Docker publish step Seems 20.04 has been removed. --- .github/workflows/publish.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 04d0a7bc52a4..f020ccde31ae 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -145,7 +145,7 @@ jobs: gh pr create --repo coder/code-server-aur --title "chore: bump version to ${{ env.VERSION }}" --body "PR opened by @$GITHUB_ACTOR" --assignee $GITHUB_ACTOR docker: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout code-server uses: actions/checkout@v4 From dded82bb4712a30e158ffbe2d3eb90ef00947b9b Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 17 Apr 2025 11:22:01 -0800 Subject: [PATCH 062/150] Release v4.99.3 --- CHANGELOG.md | 13 ++++++++ ci/helm-chart/Chart.yaml | 4 +-- ci/helm-chart/values.yaml | 2 +- docs/guide.md | 70 ++++++++++++++++++++++++--------------- 4 files changed, 59 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f89a3760aa50..417fb0dc9727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,19 @@ Code v99.99.999 ## Unreleased +## [4.99.3](https://github.com/coder/code-server/releases/tag/v4.99.3) - 2025-04-17 + +Code v1.99.3 + +### Added + +- Added `--skip-auth-preflight` flag to let preflight requests through the + proxy. + +### Changed + +- Update to Code 1.99.3. + ## [4.99.2](https://github.com/coder/code-server/releases/tag/v4.99.2) - 2025-04-10 Code v1.99.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 305f33d616ec..f2619cca2c6d 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.26.2 +version: 3.26.3 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.99.2 +appVersion: 4.99.3 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index d2ded096cccf..8453278710a3 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.99.2' + tag: '4.99.3' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a diff --git a/docs/guide.md b/docs/guide.md index de1b50b495cf..2835aac1567c 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -21,6 +21,7 @@ - [Proxying to an Angular app](#proxying-to-an-angular-app) - [Proxying to a Svelte app](#proxying-to-a-svelte-app) - [Prefixing `/absproxy/` with a path](#prefixing-absproxyport-with-a-path) + - [Preflight requests](#preflight-requests) @@ -119,22 +120,22 @@ access code-server on an iPad or do not want to use SSH port forwarding. 1. This option requires that the remote machine be exposed to the internet. Make sure that your instance allows HTTP/HTTPS traffic. -1. You'll need a domain name (if you don't have one, you can purchase one from +2. You'll need a domain name (if you don't have one, you can purchase one from [Google Domains](https://domains.google.com) or the domain service of your choice). Once you have a domain name, add an A record to your domain that contains your instance's IP address. -1. Install [Caddy](https://caddyserver.com/docs/download#debian-ubuntu-raspbian): +3. Install [Caddy](https://caddyserver.com/docs/download#debian-ubuntu-raspbian): -```console -sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https -curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg -curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list -sudo apt update -sudo apt install caddy -``` + ```console + sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list + sudo apt update + sudo apt install caddy + ``` -1. Replace `/etc/caddy/Caddyfile` using `sudo` so that the file looks like this: +4. Replace `/etc/caddy/Caddyfile` using `sudo` so that the file looks like this: ```text mydomain.com { @@ -153,7 +154,7 @@ sudo apt install caddy Remember to replace `mydomain.com` with your domain name! -1. Reload Caddy: +5. Reload Caddy: ```console sudo systemctl reload caddy @@ -164,21 +165,22 @@ At this point, you should be able to access code-server via ### Using Let's Encrypt with NGINX -1. This option requires that the remote machine be exposed to the internet. Make sure that your instance allows HTTP/HTTPS traffic. +1. This option requires that the remote machine be exposed to the internet. Make + sure that your instance allows HTTP/HTTPS traffic. -1. You'll need a domain name (if you don't have one, you can purchase one from +2. You'll need a domain name (if you don't have one, you can purchase one from [Google Domains](https://domains.google.com) or the domain service of your choice). Once you have a domain name, add an A record to your domain that contains your instance's IP address. -1. Install NGINX: +3. Install NGINX: ```bash sudo apt update sudo apt install -y nginx certbot python3-certbot-nginx ``` -1. Update `/etc/nginx/sites-available/code-server` using sudo with the following +4. Update `/etc/nginx/sites-available/code-server` using sudo with the following configuration: ```text @@ -199,13 +201,11 @@ At this point, you should be able to access code-server via Be sure to replace `mydomain.com` with your domain name! -1. Enable the config: - +5. Enable the config: ```console sudo ln -s ../sites-available/code-server /etc/nginx/sites-enabled/code-server sudo certbot --non-interactive --redirect --agree-tos --nginx -d mydomain.com -m me@example.com ``` - Be sure to replace `me@example.com` with your actual email. At this point, you should be able to access code-server via @@ -292,7 +292,9 @@ redirect all HTTP requests to HTTPS. > You can use [Let's Encrypt](https://letsencrypt.org/) to get a TLS certificate > for free. -Note: if you set `proxy_set_header Host $host;` in your reverse proxy config, it will change the address displayed in the green section of code-server in the bottom left to show the correct address. +Note: if you set `proxy_set_header Host $host;` in your reverse proxy config, it +will change the address displayed in the green section of code-server in the +bottom left to show the correct address. ## Accessing web services @@ -378,14 +380,16 @@ PUBLIC_URL=/absproxy/3000 \ BROWSER=none yarn start ``` -You should then be able to visit `https://my-code-server-address.io/absproxy/3000` to see your app exposed through -code-server! +You should then be able to visit +`https://my-code-server-address.io/absproxy/3000` to see your app exposed +through code-server. > We highly recommend using the subdomain approach instead to avoid this class of issue. ### Proxying to a Vue app -Similar to the situation with React apps, you have to make a few modifications to proxy a Vue app. +Similar to the situation with React apps, you have to make a few modifications +to proxy a Vue app. 1. add `vue.config.js` 2. update the values to match this (you can use any free port): @@ -406,7 +410,8 @@ Read more about `publicPath` in the [Vue.js docs](https://cli.vuejs.org/config/# ### Proxying to an Angular app -In order to use code-server's built-in proxy with Angular, you need to make the following changes in your app: +In order to use code-server's built-in proxy with Angular, you need to make the +following changes in your app: 1. use `` in `src/index.html` 2. add `--serve-path /absproxy/4200` to `ng serve` in your `package.json` @@ -415,7 +420,8 @@ For additional context, see [this GitHub Discussion](https://github.com/coder/co ### Proxying to a Svelte app -In order to use code-server's built-in proxy with Svelte, you need to make the following changes in your app: +In order to use code-server's built-in proxy with Svelte, you need to make the +following changes in your app: 1. Add `svelte.config.js` if you don't already have one 2. Update the values to match this (you can use any free port): @@ -436,9 +442,19 @@ For additional context, see [this Github Issue](https://github.com/sveltejs/kit/ ### Prefixing `/absproxy/` with a path -This is a case where you need to serve an application via `absproxy` as explained above while serving `codeserver` itself from a path other than the root in your domain. +This is a case where you need to serve an application via `absproxy` as +explained above while serving code-server itself from a path other than the root +in your domain. -For example: `http://my-code-server.com/user/123/workspace/my-app`. To achieve this result: +For example: `http://my-code-server.com/user/123/workspace/my-app`. To achieve +this result: -1. Start code server with the switch `--abs-proxy-base-path=/user/123/workspace` +1. Start code-server with the switch `--abs-proxy-base-path=/user/123/workspace` 2. Follow one of the instructions above for your framework. + +### Preflight requests + +By default, if you have auth enabled, code-server will authenticate all proxied +requests including preflight requests. This can cause issues because preflight +requests do not typically include credentials. To allow all preflight requests +through the proxy without authentication, use `--skip-auth-preflight`. From 47d6d3ada5aadef6d221f3d612401eb3dad9299e Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Fri, 2 May 2025 14:08:18 -0400 Subject: [PATCH 063/150] fix: parse part in path proxy (#7337) --- src/node/routes/pathProxy.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/node/routes/pathProxy.ts b/src/node/routes/pathProxy.ts index 254c5e623a79..815da5aea65b 100644 --- a/src/node/routes/pathProxy.ts +++ b/src/node/routes/pathProxy.ts @@ -13,7 +13,13 @@ const getProxyTarget = ( ): string => { // If there is a base path, strip it out. const base = (req as any).base || "" - return `http://0.0.0.0:${req.params.port}${opts?.proxyBasePath || ""}/${req.originalUrl.slice(base.length)}` + let port: number + try { + port = parseInt(req.params.port, 10) + } catch (err) { + throw new HttpError("Invalid port", HttpCode.BadRequest) + } + return `http://0.0.0.0:${port}${opts?.proxyBasePath || ""}/${req.originalUrl.slice(base.length)}` } export async function proxy( From 3f2e3340d859c25a28a8904be10bc65882ec691f Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 5 May 2025 11:56:00 -0800 Subject: [PATCH 064/150] Release v4.99.4 --- CHANGELOG.md | 9 +++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 417fb0dc9727..b81cca33116e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,15 @@ Code v99.99.999 ## Unreleased +## [4.99.4](https://github.com/coder/code-server/releases/tag/v4.99.4) - 2025-05-02 + +Code v1.99.3 + +### Security + +- Validate that ports in the path proxy are numbers, to prevent proxying to + arbitrary domains. + ## [4.99.3](https://github.com/coder/code-server/releases/tag/v4.99.3) - 2025-04-17 Code v1.99.3 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index f2619cca2c6d..63c9483a5026 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.26.3 +version: 3.26.4 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.99.3 +appVersion: 4.99.4 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 8453278710a3..3790acc7e006 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.99.3' + tag: '4.99.4' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From ea2caf00ac80ad7ddd8c1eff083cc0a8e675e4ab Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 5 May 2025 12:12:55 -0800 Subject: [PATCH 065/150] Allow setting trusted domains for links at run-time It can be set either: 1. In the product.json (normally the product.json is embedded during the build and not read at run-time). 2. With the --link-protection-trusted-domains flag. --- patches/series | 1 + patches/trusted-domains.diff | 49 ++++++++++++++++++++++++++++++++++++ src/node/cli.ts | 7 +++++- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 patches/trusted-domains.diff diff --git a/patches/series b/patches/series index 61c801ae9357..3f7c5adde53b 100644 --- a/patches/series +++ b/patches/series @@ -20,3 +20,4 @@ getting-started.diff keepalive.diff clipboard.diff display-language.diff +trusted-domains.diff diff --git a/patches/trusted-domains.diff b/patches/trusted-domains.diff new file mode 100644 index 000000000000..98c012e61203 --- /dev/null +++ b/patches/trusted-domains.diff @@ -0,0 +1,49 @@ +Allow configuring trusted domains via product.json or flag. + +Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts ++++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +@@ -20,6 +20,7 @@ export const serverOptions: OptionDescri + 'disable-file-uploads': { type: 'boolean' }, + 'disable-getting-started-override': { type: 'boolean' }, + 'locale': { type: 'string' }, ++ 'link-protection-trusted-domains': { type: 'string[]' }, + + /* ----- server setup ----- */ + +@@ -108,6 +109,7 @@ export interface ServerParsedArgs { + 'disable-file-uploads'?: boolean; + 'disable-getting-started-override'?: boolean, + 'locale'?: string ++ 'link-protection-trusted-domains'?: string[], + + /* ----- server setup ----- */ + +Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts ++++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts +@@ -339,6 +339,14 @@ export class WebClientServer { + scopes: [['user:email'], ['repo']] + } : undefined; + ++ const linkProtectionTrustedDomains: string[] = []; ++ if (this._environmentService.args['link-protection-trusted-domains']) { ++ linkProtectionTrustedDomains.push(...this._environmentService.args['link-protection-trusted-domains']); ++ } ++ if (this._productService.linkProtectionTrustedDomains) { ++ linkProtectionTrustedDomains.push(...this._productService.linkProtectionTrustedDomains); ++ } ++ + const productConfiguration = { + codeServerVersion: this._productService.codeServerVersion, + rootEndpoint: rootBase, +@@ -353,6 +361,7 @@ export class WebClientServer { + telemetryEndpoint: this._productService.telemetryEndpoint, + embedderIdentifier: 'server-distro', + extensionsGallery: this._productService.extensionsGallery, ++ linkProtectionTrustedDomains, + } satisfies Partial; + + if (!this._environmentService.isBuilt) { diff --git a/src/node/cli.ts b/src/node/cli.ts index a07a18b0a260..46b4791382ea 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -30,7 +30,7 @@ export enum LogLevel { export class OptionalString extends Optional {} /** - * Code flags provided by the user. + * (VS) Code flags provided by the user. */ export interface UserProvidedCodeArgs { "disable-telemetry"?: boolean @@ -54,6 +54,7 @@ export interface UserProvidedCodeArgs { "disable-proxy"?: boolean "session-socket"?: string "abs-proxy-base-path"?: string + "link-protection-trusted-domains"?: string[] } /** @@ -194,6 +195,10 @@ export const options: Options> = { enable: { type: "string[]" }, help: { type: "boolean", short: "h", description: "Show this output." }, json: { type: "boolean" }, + "link-protection-trusted-domains": { + type: "string[]", + description: "Links matching a trusted domain can be opened without link protection.", + }, locale: { // The preferred way to set the locale is via the UI. type: "string", From 0c72b20fa799fb033a0b1380e2e563e5ef791e0a Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 5 May 2025 12:22:40 -0800 Subject: [PATCH 066/150] Place locale and abs-proxy-base-path in correct interfaces --- src/node/cli.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node/cli.ts b/src/node/cli.ts index 46b4791382ea..2e24b32ce802 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -53,8 +53,9 @@ export interface UserProvidedCodeArgs { "disable-getting-started-override"?: boolean "disable-proxy"?: boolean "session-socket"?: string - "abs-proxy-base-path"?: string "link-protection-trusted-domains"?: string[] + // locale is used by both VS Code and code-server. + locale?: string } /** @@ -74,7 +75,6 @@ export interface UserProvidedArgs extends UserProvidedCodeArgs { enable?: string[] help?: boolean host?: string - locale?: string port?: number json?: boolean log?: LogLevel @@ -92,6 +92,7 @@ export interface UserProvidedArgs extends UserProvidedCodeArgs { verbose?: boolean "app-name"?: string "welcome-text"?: string + "abs-proxy-base-path"?: string /* Positional arguments. */ _?: string[] } From c8257a30743dbe16e6fd3a0e7b16e62eb083c5ea Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 5 May 2025 12:46:24 -0800 Subject: [PATCH 067/150] Fix repeatable flags in config Fixes #6149. --- src/node/cli.ts | 16 ++++++++++------ test/unit/node/cli.test.ts | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/node/cli.ts b/src/node/cli.ts index 2e24b32ce802..a29ec591e0a4 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -713,12 +713,16 @@ export function parseConfigFile(configFile: string, configPath: string): ConfigA // We convert the config file into a set of flags. // This is a temporary measure until we add a proper CLI library. - const configFileArgv = Object.entries(config).map(([optName, opt]) => { - if (opt === true) { - return `--${optName}` - } - return `--${optName}=${opt}` - }) + const configFileArgv = Object.entries(config) + .map(([optName, opt]) => { + if (opt === true) { + return `--${optName}` + } else if (Array.isArray(opt)) { + return opt.map((o) => `--${optName}=${o}`) + } + return `--${optName}=${opt}` + }) + .flat() const args = parse(configFileArgv, { configFile: configPath, }) diff --git a/test/unit/node/cli.test.ts b/test/unit/node/cli.test.ts index 552576fac4c9..d62edb840464 100644 --- a/test/unit/node/cli.test.ts +++ b/test/unit/node/cli.test.ts @@ -6,6 +6,7 @@ import { bindAddrFromArgs, defaultConfigFile, parse, + parseConfigFile, setDefaults, shouldOpenInExistingInstance, toCodeArgs, @@ -287,12 +288,17 @@ describe("parser", () => { }) it("should support repeatable flags", async () => { + expect(() => parse(["--proxy-domain", ""])).toThrowError(/--proxy-domain requires a value/) expect(parse(["--proxy-domain", "*.coder.com"])).toEqual({ "proxy-domain": ["*.coder.com"], }) expect(parse(["--proxy-domain", "*.coder.com", "--proxy-domain", "test.com"])).toEqual({ "proxy-domain": ["*.coder.com", "test.com"], }) + // Commas are literal, at the moment. + expect(parse(["--proxy-domain", "*.coder.com,test.com"])).toEqual({ + "proxy-domain": ["*.coder.com,test.com"], + }) }) it("should enforce cert-key with cert value or otherwise generate one", async () => { @@ -490,6 +496,20 @@ describe("parser", () => { }), ).toThrowError(expectedErrMsg) }) + it("should fail to parse invalid config", () => { + expect(() => parseConfigFile("test", "/fake-config-path")).toThrowError("invalid config: test") + }) + it("should parse repeatable options", () => { + const configContents = ` + install-extension: + - extension.number1 + - extension.number2 + ` + expect(parseConfigFile(configContents, "/fake-config-path")).toEqual({ + config: "/fake-config-path", + "install-extension": ["extension.number1", "extension.number2"], + }) + }) it("should ignore optional strings set to false", async () => { expect(parse(["--cert=false"])).toEqual({}) }) From e5b8d447e5a8b948650e0b9e7fd0496015b79b48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 11:34:09 -0800 Subject: [PATCH 068/150] chore: bump @types/semver from 7.5.8 to 7.7.0 --- package-lock.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c7f81cea9c6..848be44c33d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -680,10 +680,11 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", From 8b55b5003dc79dcefc679878d647606c8575cd84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 11:34:30 -0800 Subject: [PATCH 069/150] chore: bump eslint from 9.23.0 to 9.25.1 (#7332) Bumps [eslint](https://github.com/eslint/eslint) from 9.23.0 to 9.25.1. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.23.0...v9.25.1) --- updated-dependencies: - dependency-name: eslint dependency-version: 9.25.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 48 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 848be44c33d0..006764f2d12e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -142,9 +142,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -157,9 +157,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", - "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -167,9 +167,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -217,9 +217,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.23.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", - "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "version": "9.25.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", + "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", "dev": true, "license": "MIT", "engines": { @@ -237,13 +237,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", + "@eslint/core": "^0.13.0", "levn": "^0.4.1" }, "engines": { @@ -2148,20 +2148,20 @@ } }, "node_modules/eslint": { - "version": "9.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", - "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "version": "9.25.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", + "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/config-helpers": "^0.2.0", - "@eslint/core": "^0.12.0", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.23.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/js": "9.25.1", + "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", From 7af90ea6236fc680e713d360abefd8e4fb04b77a Mon Sep 17 00:00:00 2001 From: Bartek Gatz Date: Wed, 7 May 2025 00:49:38 +0200 Subject: [PATCH 070/150] Mention code-server devcontainer feature (#7342) --- docs/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index b56f267e4d3c..81ac7239d967 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,7 +24,7 @@ on how to set up a Google VM on which you can install code-server. ## Getting started -There are four ways to get started: +There are five ways to get started: 1. Using the [install script](https://github.com/coder/code-server/blob/main/install.sh), which @@ -35,6 +35,7 @@ There are four ways to get started: 3. Deploy code-server to your team with [coder/coder](https://cdr.co/coder-github) 4. Using our one-click buttons and guides to [deploy code-server to a cloud provider](https://github.com/coder/deploy-code-server) ⚡ +5. Using [code-server feature for devcontainers](https://github.com/coder/devcontainer-features/blob/main/README.md), in case you already use devcontainers in your project. If you use the install script, you can preview what occurs during the install process: From 2c9b4e7fd58972d38d6a0e754318d5871d465521 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 9 May 2025 00:19:03 +0200 Subject: [PATCH 071/150] Update Code to 1.100.0 (#7343) --- .node-version | 2 +- lib/vscode | 2 +- patches/base-path.diff | 8 +++--- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 16 ++++++------ patches/external-file-actions.diff | 8 +++--- patches/getting-started.diff | 12 ++++----- patches/integration.diff | 2 +- patches/local-storage.diff | 2 +- patches/logout.diff | 4 +-- patches/marketplace.diff | 4 +-- patches/proxy-uri.diff | 2 +- patches/series | 1 + patches/service-worker.diff | 2 +- patches/signature-verification.diff | 34 +++++++++++++++++++++++++ patches/store-socket.diff | 12 ++++----- patches/telemetry.diff | 2 +- patches/trusted-domains.diff | 8 +++--- patches/update-check.diff | 6 ++--- patches/webview.diff | 2 +- 20 files changed, 83 insertions(+), 48 deletions(-) create mode 100644 patches/signature-verification.diff diff --git a/.node-version b/.node-version index 87bc4c77fe13..5bd6811705e9 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.18.3 +20.19.0 diff --git a/lib/vscode b/lib/vscode index 17baf841131a..19e0f9e681ec 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 17baf841131aa23349f217ca7c570c76ee87b957 +Subproject commit 19e0f9e681ecb8e5c09d8784acaa601316ca4571 diff --git a/patches/base-path.diff b/patches/base-path.diff index 7d6bbc6999f0..842a27ef2293 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -140,13 +140,13 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts return serveError(req, res, 400, `Bad request.`); @@ -335,6 +341,7 @@ export class WebClientServer { - const productConfiguration = { + const productConfiguration: Partial> = { codeServerVersion: this._productService.codeServerVersion, + rootEndpoint: rootBase, embedderIdentifier: 'server-distro', extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? { ...this._productService.extensionsGallery, -@@ -382,7 +389,9 @@ export class WebClientServer { +@@ -388,7 +395,9 @@ export class WebClientServer { WORKBENCH_AUTH_SESSION: authSessionInfo ? asJSON(authSessionInfo) : '', WORKBENCH_WEB_BASE_URL: staticRoute, WORKBENCH_NLS_URL, @@ -157,7 +157,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts }; // DEV --------------------------------------------------------------------------------------- -@@ -419,7 +428,7 @@ export class WebClientServer { +@@ -425,7 +434,7 @@ export class WebClientServer { 'default-src \'self\';', 'img-src \'self\' https: data: blob:;', 'media-src \'self\';', @@ -166,7 +166,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts 'child-src \'self\';', `frame-src 'self' https://*.vscode-cdn.net data:;`, 'worker-src \'self\' data: blob:;', -@@ -492,3 +501,70 @@ export class WebClientServer { +@@ -498,3 +507,70 @@ export class WebClientServer { return void res.end(data); } } diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index 6b222147a92d..f1262e5b47ee 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -326,6 +326,10 @@ export class Extension implements IExten +@@ -332,6 +332,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index b711a0cf414d..3114704fa891 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -156,12 +156,12 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts @@ -26,6 +26,7 @@ import { URI } from '../../base/common/u import { streamToBuffer } from '../../base/common/buffer.js'; import { IProductConfiguration } from '../../base/common/product.js'; - import { isString } from '../../base/common/types.js'; + import { isString, Mutable } from '../../base/common/types.js'; +import { getLocaleFromConfig, getBrowserNLSConfiguration } from './remoteLanguagePacks.js'; import { CharCode } from '../../base/common/charCode.js'; import { IExtensionManifest } from '../../platform/extensions/common/extensions.js'; import { ICSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js'; -@@ -380,14 +381,22 @@ export class WebClientServer { +@@ -386,14 +387,22 @@ export class WebClientServer { }; const cookies = cookie.parse(req.headers.cookie || ''); @@ -198,7 +198,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -106,6 +107,7 @@ export interface ServerParsedArgs { +@@ -107,6 +108,7 @@ export interface ServerParsedArgs { 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, @@ -272,7 +272,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -@@ -445,9 +445,6 @@ export class InstallAction extends Exten +@@ -474,9 +474,6 @@ export class InstallAction extends Exten if (this.extension.isBuiltin) { return; } @@ -282,7 +282,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens if (this.extension.state !== ExtensionState.Uninstalled) { return; } -@@ -752,7 +749,7 @@ export abstract class InstallInOtherServ +@@ -781,7 +778,7 @@ export abstract class InstallInOtherServ } if (isLanguagePackExtension(this.extension.local.manifest)) { @@ -291,7 +291,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } // Prefers to run on UI -@@ -2039,17 +2036,6 @@ export class SetLanguageAction extends E +@@ -2071,17 +2068,6 @@ export class SetLanguageAction extends E update(): void { this.enabled = false; this.class = SetLanguageAction.DisabledClass; @@ -309,7 +309,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } override async run(): Promise { -@@ -2066,7 +2052,6 @@ export class ClearLanguageAction extends +@@ -2098,7 +2084,6 @@ export class ClearLanguageAction extends private static readonly DisabledClass = `${this.EnabledClass} disabled`; constructor( @@ -317,7 +317,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens @ILocaleService private readonly localeService: ILocaleService, ) { super(ClearLanguageAction.ID, ClearLanguageAction.TITLE.value, ClearLanguageAction.DisabledClass, false); -@@ -2076,17 +2061,6 @@ export class ClearLanguageAction extends +@@ -2108,17 +2093,6 @@ export class ClearLanguageAction extends update(): void { this.enabled = false; this.class = ClearLanguageAction.DisabledClass; diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index 912279e8a4f9..b64f89992c05 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -99,7 +99,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -100,6 +102,8 @@ export interface ServerParsedArgs { +@@ -101,6 +103,8 @@ export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; 'auth'?: string; @@ -112,7 +112,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -364,6 +364,8 @@ export class WebClientServer { +@@ -370,6 +370,8 @@ export class WebClientServer { serverBasePath: basePath, webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', userDataPath: this._environmentService.userDataPath, @@ -126,7 +126,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @@ -7,11 +7,11 @@ import { Event } from '../../base/common - import { Disposable } from '../../base/common/lifecycle.js'; + import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext } from '../common/contextkeys.js'; @@ -208,7 +208,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -39,6 +39,9 @@ export const HasWebFileSystemAccess = ne +@@ -40,6 +40,9 @@ export const HasWebFileSystemAccess = ne export const EmbedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined')); diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 25e1ed316412..98f8a82c60ab 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -872,6 +872,72 @@ export class GettingStartedPage extends +@@ -874,6 +874,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -907,6 +973,9 @@ export class GettingStartedPage extends +@@ -909,6 +975,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } @@ -189,7 +189,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -104,6 +105,7 @@ export interface ServerParsedArgs { +@@ -105,6 +106,7 @@ export interface ServerParsedArgs { 'auth'?: string; 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; @@ -201,7 +201,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -368,6 +368,7 @@ export class WebClientServer { +@@ -374,6 +374,7 @@ export class WebClientServer { userDataPath: this._environmentService.userDataPath, isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'], isEnabledFileUploads: !this._environmentService.args['disable-file-uploads'], @@ -214,7 +214,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @@ -7,7 +7,7 @@ import { Event } from '../../base/common - import { Disposable } from '../../base/common/lifecycle.js'; + import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; @@ -234,7 +234,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -41,6 +41,7 @@ export const EmbedderIdentifierContext = +@@ -42,6 +42,7 @@ export const EmbedderIdentifierContext = export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/integration.diff b/patches/integration.diff index 4bb397651b14..4c43b1b2a149 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -272,7 +272,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts @@ -334,6 +334,7 @@ export class WebClientServer { } : undefined; - const productConfiguration = { + const productConfiguration: Partial> = { + codeServerVersion: this._productService.codeServerVersion, embedderIdentifier: 'server-distro', extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? { diff --git a/patches/local-storage.diff b/patches/local-storage.diff index da73ef401148..de77fc36c67e 100644 --- a/patches/local-storage.diff +++ b/patches/local-storage.diff @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -359,6 +359,7 @@ export class WebClientServer { +@@ -365,6 +365,7 @@ export class WebClientServer { remoteAuthority, serverBasePath: basePath, webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', diff --git a/patches/logout.diff b/patches/logout.diff index 46591632a2a3..b54e8d9c62e8 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -98,6 +99,7 @@ export const serverOptions: OptionDescri +@@ -99,6 +100,7 @@ export const serverOptions: OptionDescri export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; @@ -47,7 +47,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? rootBase + '/logout' : undefined, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, - } satisfies Partial; + }; Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts diff --git a/patches/marketplace.diff b/patches/marketplace.diff index a64602dbda1a..dc6bdd5740d5 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -61,9 +61,9 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts - }).toString(true) - } : undefined + extensionsGallery: this._productService.extensionsGallery, - } satisfies Partial; + }; - if (!this._environmentService.isBuilt) { + const proposedApi = this._environmentService.args['enable-proposed-api']; Index: code-server/lib/vscode/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.ts diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index 2ccd9843820d..12c13d65205c 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? rootBase + '/proxy/{{port}}/', embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, - } satisfies Partial; + }; Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts diff --git a/patches/series b/patches/series index 3f7c5adde53b..ffc15fdd9d75 100644 --- a/patches/series +++ b/patches/series @@ -21,3 +21,4 @@ keepalive.diff clipboard.diff display-language.diff trusted-domains.diff +signature-verification.diff diff --git a/patches/service-worker.diff b/patches/service-worker.diff index 507a16b5e6bb..20091175b3e8 100644 --- a/patches/service-worker.diff +++ b/patches/service-worker.diff @@ -64,4 +64,4 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + }, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, - } satisfies Partial; + }; diff --git a/patches/signature-verification.diff b/patches/signature-verification.diff new file mode 100644 index 000000000000..6abd6629fe5b --- /dev/null +++ b/patches/signature-verification.diff @@ -0,0 +1,34 @@ +Disable signature verification. + +Extension signature verification is now mandatory for all platforms and needs to be disabled. + +Index: code-server/lib/vscode/src/vs/platform/extensionManagement/node/extensionManagementService.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/platform/extensionManagement/node/extensionManagementService.ts ++++ code-server/lib/vscode/src/vs/platform/extensionManagement/node/extensionManagementService.ts +@@ -34,6 +34,7 @@ import { + ExtensionSignatureVerificationCode, + computeSize, + IAllowedExtensionsService, ++ // @ts-expect-error no-unused-variable + VerifyExtensionSignatureConfigKey, + shouldRequireRepositorySignatureFor, + } from '../common/extensionManagement.js'; +@@ -87,6 +88,7 @@ export class ExtensionManagementService + @IDownloadService private downloadService: IDownloadService, + @IInstantiationService private readonly instantiationService: IInstantiationService, + @IFileService private readonly fileService: IFileService, ++ // @ts-expect-error no-unused-variable + @IConfigurationService private readonly configurationService: IConfigurationService, + @IExtensionGalleryManifestService protected readonly extensionGalleryManifestService: IExtensionGalleryManifestService, + @IProductService productService: IProductService, +@@ -331,8 +333,7 @@ export class ExtensionManagementService + + private async downloadExtension(extension: IGalleryExtension, operation: InstallOperation, verifySignature: boolean, clientTargetPlatform?: TargetPlatform): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionSignatureVerificationCode | undefined }> { + if (verifySignature) { +- const value = this.configurationService.getValue(VerifyExtensionSignatureConfigKey); +- verifySignature = isBoolean(value) ? value : true; ++ verifySignature = false; + } + const { location, verificationStatus } = await this.extensionsDownloader.download(extension, operation, verifySignature, clientTargetPlatform); + const shouldRequireSignature = shouldRequireRepositorySignatureFor(extension.private, await this.extensionGalleryManifestService.getExtensionGalleryManifest()); diff --git a/patches/store-socket.diff b/patches/store-socket.diff index d6bc187edca4..909937e30eca 100644 --- a/patches/store-socket.diff +++ b/patches/store-socket.diff @@ -21,18 +21,18 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostExtensionService. +import * as _http from 'http'; import * as performance from '../../../base/common/performance.js'; + import type * as vscode from 'vscode'; import { createApiFactoryAndRegisterActors } from '../common/extHost.api.impl.js'; - import { RequireInterceptor } from '../common/extHostRequireInterceptor.js'; -@@ -17,6 +18,7 @@ import { ExtensionRuntime } from '../com +@@ -18,6 +19,7 @@ import { ExtensionRuntime } from '../com import { CLIServer } from './extHostCLIServer.js'; import { realpathSync } from '../../../base/node/extpath.js'; import { ExtHostConsoleForwarder } from './extHostConsoleForwarder.js'; +import { IExtHostWorkspace } from '../common/extHostWorkspace.js'; import { ExtHostDiskFileSystemProvider } from './extHostDiskFileSystemProvider.js'; - import { createRequire } from 'node:module'; - const require = createRequire(import.meta.url); -@@ -97,6 +99,52 @@ export class ExtHostExtensionService ext - await interceptor.install(); + import nodeModule from 'node:module'; + import { assertType } from '../../../base/common/types.js'; +@@ -226,6 +228,52 @@ export class ExtHostExtensionService ext + performance.mark('code/extHost/didInitAPI'); + (async () => { diff --git a/patches/telemetry.diff b/patches/telemetry.diff index 06e21ef627f9..b4465f99db68 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -142,7 +142,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + telemetryEndpoint: this._productService.telemetryEndpoint, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, - } satisfies Partial; + }; Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts diff --git a/patches/trusted-domains.diff b/patches/trusted-domains.diff index 98c012e61203..a32360faf39f 100644 --- a/patches/trusted-domains.diff +++ b/patches/trusted-domains.diff @@ -12,7 +12,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -108,6 +109,7 @@ export interface ServerParsedArgs { +@@ -109,6 +110,7 @@ export interface ServerParsedArgs { 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, 'locale'?: string @@ -36,7 +36,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts + linkProtectionTrustedDomains.push(...this._productService.linkProtectionTrustedDomains); + } + - const productConfiguration = { + const productConfiguration: Partial> = { codeServerVersion: this._productService.codeServerVersion, rootEndpoint: rootBase, @@ -353,6 +361,7 @@ export class WebClientServer { @@ -44,6 +44,6 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, + linkProtectionTrustedDomains, - } satisfies Partial; + }; - if (!this._environmentService.isBuilt) { + const proposedApi = this._environmentService.args['enable-proposed-api']; diff --git a/patches/update-check.diff b/patches/update-check.diff index 700d1cf40727..908c69e17820 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -106,13 +106,13 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts @@ -341,6 +341,7 @@ export class WebClientServer { - const productConfiguration = { + const productConfiguration: Partial> = { codeServerVersion: this._productService.codeServerVersion, rootEndpoint: rootBase, + updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, - } satisfies Partial; + }; Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts @@ -126,7 +126,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -94,6 +96,8 @@ export const serverOptions: OptionDescri +@@ -95,6 +97,8 @@ export const serverOptions: OptionDescri }; export interface ServerParsedArgs { diff --git a/patches/webview.diff b/patches/webview.diff index a148c68aa991..fb35c4a32229 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -54,7 +54,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -355,6 +355,7 @@ export class WebClientServer { +@@ -361,6 +361,7 @@ export class WebClientServer { const workbenchWebConfiguration = { remoteAuthority, serverBasePath: basePath, From 9bd3b83ef56ca643f77ac95ef7c247c6c9015f19 Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 8 May 2025 14:20:45 -0800 Subject: [PATCH 072/150] Fix port parseInt error handling parseInt returns NaN rather than throwing. --- src/node/routes/pathProxy.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/node/routes/pathProxy.ts b/src/node/routes/pathProxy.ts index 815da5aea65b..7d4f286f6519 100644 --- a/src/node/routes/pathProxy.ts +++ b/src/node/routes/pathProxy.ts @@ -13,10 +13,8 @@ const getProxyTarget = ( ): string => { // If there is a base path, strip it out. const base = (req as any).base || "" - let port: number - try { - port = parseInt(req.params.port, 10) - } catch (err) { + const port = parseInt(req.params.port, 10) + if (isNaN(port)) { throw new HttpError("Invalid port", HttpCode.BadRequest) } return `http://0.0.0.0:${port}${opts?.proxyBasePath || ""}/${req.originalUrl.slice(base.length)}` From d0e20d514d247470f110d48573d15604b141b81b Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 8 May 2025 14:23:12 -0800 Subject: [PATCH 073/150] Update devcontainer feature link I think we meant to link to the feature readme rather than the general repo readme. --- docs/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 81ac7239d967..5724c804c087 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,7 +35,9 @@ There are five ways to get started: 3. Deploy code-server to your team with [coder/coder](https://cdr.co/coder-github) 4. Using our one-click buttons and guides to [deploy code-server to a cloud provider](https://github.com/coder/deploy-code-server) ⚡ -5. Using [code-server feature for devcontainers](https://github.com/coder/devcontainer-features/blob/main/README.md), in case you already use devcontainers in your project. +5. Using the [code-server feature for + devcontainers](https://github.com/coder/devcontainer-features/blob/main/src/code-server/README.md), + if you already use devcontainers in your project. If you use the install script, you can preview what occurs during the install process: From e05219d9c0b19e50d4ddf5b90978ad3908cfab58 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 12 May 2025 11:35:42 -0800 Subject: [PATCH 074/150] Release v4.100.0 --- CHANGELOG.md | 22 ++++++++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b81cca33116e..3776f0804ba8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,28 @@ Code v99.99.999 ## Unreleased +## [4.100.0](https://github.com/coder/code-server/releases/tag/v4.100.0) - 2025-05-12 + +Code v1.100.0 + +### Added + +- Trusted domains for links can now be set at run-time by configuring + `linkProtectionTrustedDomains` in the `lib/vscode/product.json` file or via + the `--link-protection-trusted-domains` flag. + +### Changed + +- Update to Code 1.100.0. +- Disable extension signature verification, which previously was skipped by + default (the package used for verification is not available to OSS builds of + VS Code) but now reportedly throws hard errors making it impossible to install + extensions. + +### Fixed + +- Flags with repeatable options now work via the config file. + ## [4.99.4](https://github.com/coder/code-server/releases/tag/v4.99.4) - 2025-05-02 Code v1.99.3 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 63c9483a5026..f72c0d82d50e 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.26.4 +version: 3.27.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.99.4 +appVersion: 4.100.0 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 3790acc7e006..6a78a7fc8610 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.99.4' + tag: '4.100.0' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 1aca01f8d8c80f66ee7d8679b1fff7dc2c9e16ef Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Wed, 14 May 2025 00:07:46 +0200 Subject: [PATCH 075/150] Update Code to 1.101 (#7347) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 19e0f9e681ec..91fa95bccb02 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 19e0f9e681ecb8e5c09d8784acaa601316ca4571 +Subproject commit 91fa95bccb027ece6a968589bb1d662fa9c8e170 From 9dd999ba78032163d606fadd531de5e1fcae5443 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 15 May 2025 21:00:20 +0200 Subject: [PATCH 076/150] Update Code to 1.100.2 (#7348) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 91fa95bccb02..848b80aeb520 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 91fa95bccb027ece6a968589bb1d662fa9c8e170 +Subproject commit 848b80aeb52026648a8ff9f7c45a9b0a80641e2e From cade03e3216cee03b5a1267a7e5234003c39a915 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 19 May 2025 10:34:54 -0800 Subject: [PATCH 077/150] Release v4.100.1 and v4.100.2 --- CHANGELOG.md | 16 ++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3776f0804ba8..c6a7e443ce31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,22 @@ Code v99.99.999 ## Unreleased +## [4.100.2](https://github.com/coder/code-server/releases/tag/v4.100.2) - 2025-05-15 + +Code v1.100.2 + +### Changed + +- Update to Code 1.100.2. + +## [4.100.1](https://github.com/coder/code-server/releases/tag/v4.100.1) - 2025-05-13 + +Code v1.100.1 + +### Changed + +- Update to Code 1.100.1. + ## [4.100.0](https://github.com/coder/code-server/releases/tag/v4.100.0) - 2025-05-12 Code v1.100.0 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index f72c0d82d50e..ea28df0efe42 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.27.0 +version: 3.27.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.100.0 +appVersion: 4.100.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 6a78a7fc8610..f57a724be762 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.100.0' + tag: '4.100.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 35e78fe35b61dc9965305ccf19566aed426521ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 12:09:04 -0800 Subject: [PATCH 078/150] chore: bump globals from 15.14.0 to 16.0.0 (#7333) Bumps [globals](https://github.com/sindresorhus/globals) from 15.14.0 to 16.0.0. - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](https://github.com/sindresorhus/globals/compare/v15.14.0...v16.0.0) --- updated-dependencies: - dependency-name: globals dependency-version: 16.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 006764f2d12e..7ff8b3822be8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "eslint-import-resolver-typescript": "^3.6.0", "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", - "globals": "^15.10.0", + "globals": "^16.1.0", "prettier": "3.4.2", "prettier-plugin-sh": "^0.14.0", "ts-node": "^10.9.1", @@ -3034,10 +3034,11 @@ } }, "node_modules/globals": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", - "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", + "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, diff --git a/package.json b/package.json index ffdfccafdede..9652b4e5ad5f 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "eslint-import-resolver-typescript": "^3.6.0", "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", - "globals": "^15.10.0", + "globals": "^16.1.0", "prettier": "3.4.2", "prettier-plugin-sh": "^0.14.0", "ts-node": "^10.9.1", From 409c64e0df4d53530e59c16acc2b5d5766f717b0 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Tue, 3 Jun 2025 21:06:54 +0200 Subject: [PATCH 079/150] Update Code to 1.100.3 (#7367) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 848b80aeb520..258e40fedc6c 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 848b80aeb52026648a8ff9f7c45a9b0a80641e2e +Subproject commit 258e40fedc6cb8edf399a463ce3a9d32e7e1f6f3 From 9ec786b62a5bd973f1af09779c3b9c27865305f5 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 3 Jun 2025 13:07:30 -0800 Subject: [PATCH 080/150] Ask not to put "latest" in bug report Maybe this will help... --- .github/ISSUE_TEMPLATE/bug-report.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 369040983858..b8f169a4b1fa 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -20,6 +20,8 @@ body: - **Remote OS**: Ubuntu - **Remote Architecture**: amd64 - **`code-server --version`**: 4.0.1 + + Please do not just put "latest" for the version. value: | - Web Browser: - Local OS: From 1face85ad9afca62c53a0e5a3017c7b1adf99dce Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 3 Jun 2025 13:09:38 -0800 Subject: [PATCH 081/150] Sort some imports --- src/node/main.ts | 2 +- src/node/routes/errors.ts | 2 +- src/node/routes/index.ts | 2 +- src/node/routes/vscode.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/node/main.ts b/src/node/main.ts index 04e4470b9088..470ddeb25cc7 100644 --- a/src/node/main.ts +++ b/src/node/main.ts @@ -1,5 +1,6 @@ import { field, logger } from "@coder/logger" import http from "http" +import * as os from "os" import * as path from "path" import { Disposable } from "../common/emitter" import { plural } from "../common/util" @@ -9,7 +10,6 @@ import { commit, version, vsRootPath } from "./constants" import { register } from "./routes" import { VSCodeModule } from "./routes/vscode" import { isDirectory, open } from "./util" -import * as os from "os" /** * Return true if the user passed an extension-related VS Code flag. diff --git a/src/node/routes/errors.ts b/src/node/routes/errors.ts index 1f1475e9beee..da0ee8d7c07f 100644 --- a/src/node/routes/errors.ts +++ b/src/node/routes/errors.ts @@ -3,10 +3,10 @@ import express from "express" import { promises as fs } from "fs" import path from "path" import { HttpCode } from "../../common/http" -import type { WebsocketRequest } from "../wsRouter" import { rootPath } from "../constants" import { replaceTemplates } from "../http" import { escapeHtml, getMediaMime } from "../util" +import type { WebsocketRequest } from "../wsRouter" interface ErrorWithStatusCode { statusCode: number diff --git a/src/node/routes/index.ts b/src/node/routes/index.ts index 36cf76b4a7ca..2841b5a01113 100644 --- a/src/node/routes/index.ts +++ b/src/node/routes/index.ts @@ -14,8 +14,8 @@ import { Heart } from "../heart" import { redirect } from "../http" import { CoderSettings, SettingsProvider } from "../settings" import { UpdateProvider } from "../update" -import type { WebsocketRequest } from "../wsRouter" import { getMediaMime, paths } from "../util" +import type { WebsocketRequest } from "../wsRouter" import * as domainProxy from "./domainProxy" import { errorHandler, wsErrorHandler } from "./errors" import * as health from "./health" diff --git a/src/node/routes/vscode.ts b/src/node/routes/vscode.ts index 4efb32993115..ed0bfa606ec3 100644 --- a/src/node/routes/vscode.ts +++ b/src/node/routes/vscode.ts @@ -4,8 +4,8 @@ import * as express from "express" import { promises as fs } from "fs" import * as http from "http" import * as net from "net" -import * as path from "path" import * as os from "os" +import * as path from "path" import { logError } from "../../common/util" import { CodeArgs, toCodeArgs } from "../cli" import { isDevMode, vsRootPath } from "../constants" From 1671bf1c184010e94316c51c59db8d03609b776c Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 3 Jun 2025 13:08:52 -0800 Subject: [PATCH 082/150] Release v4.100.3 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6a7e443ce31..ce4a310be1d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.100.3](https://github.com/coder/code-server/releases/tag/v4.100.3) - 2025-06-03 + +Code v1.100.3 + +### Changed + +- Update to Code 1.100.3. + ## [4.100.2](https://github.com/coder/code-server/releases/tag/v4.100.2) - 2025-05-15 Code v1.100.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index ea28df0efe42..e916ee26a2a6 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.27.2 +version: 3.27.3 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.100.2 +appVersion: 4.100.3 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index f57a724be762..429292634612 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.100.2' + tag: '4.100.3' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 6e26dad1b17d5f7c160281c6ca6cf6ee65c401ed Mon Sep 17 00:00:00 2001 From: Jakub Domeracki Date: Mon, 16 Jun 2025 22:04:57 +0200 Subject: [PATCH 083/150] fix: update GitHub Actions Runner images (#7379) --- .github/workflows/security.yaml | 4 ++-- .github/workflows/trivy-docker.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index 69a08a5a4e09..03dbcf508103 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -43,7 +43,7 @@ jobs: permissions: contents: read # for actions/checkout to fetch code security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout repo uses: actions/checkout@v4 @@ -72,7 +72,7 @@ jobs: contents: read # for actions/checkout to fetch code security-events: write # for github/codeql-action/autobuild to send a status report name: Analyze with CodeQL - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout repository diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index a1e90306c7f4..b60f0fcc9fff 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -44,7 +44,7 @@ concurrency: jobs: trivy-scan-image: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout code From 405eb0f511a66e31b5d03767487d57bb62f0c726 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Mon, 16 Jun 2025 23:03:47 +0200 Subject: [PATCH 084/150] Update Code to 1.101.0 (#7376) --- .node-version | 2 +- ci/build/npm-postinstall.sh | 4 ++-- docs/CONTRIBUTING.md | 2 +- docs/android.md | 2 +- docs/npm.md | 4 ++-- docs/termux.md | 2 +- flake.nix | 2 +- lib/vscode | 2 +- package-lock.json | 21 ++++++++++--------- package.json | 6 +++--- patches/base-path.diff | 12 +++++------ patches/clipboard.diff | 2 +- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 14 ++++++------- patches/external-file-actions.diff | 6 +++--- patches/getting-started.diff | 8 ++++---- patches/integration.diff | 2 +- patches/local-storage.diff | 2 +- patches/logout.diff | 2 +- patches/marketplace.diff | 6 +++--- patches/proxy-uri.diff | 2 +- patches/service-worker.diff | 2 +- patches/signature-verification.diff | 2 +- patches/store-socket.diff | 2 +- patches/telemetry.diff | 2 +- patches/trusted-domains.diff | 4 ++-- patches/update-check.diff | 2 +- patches/webview.diff | 27 +++++-------------------- 28 files changed, 65 insertions(+), 81 deletions(-) diff --git a/.node-version b/.node-version index 5bd6811705e9..8320a6d2994a 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.19.0 +22.15.1 diff --git a/ci/build/npm-postinstall.sh b/ci/build/npm-postinstall.sh index fc82b2ffbe47..ee4c92237023 100755 --- a/ci/build/npm-postinstall.sh +++ b/ci/build/npm-postinstall.sh @@ -76,8 +76,8 @@ main() { echo "USE AT YOUR OWN RISK!" fi - if [ "$major_node_version" -ne "${FORCE_NODE_VERSION:-20}" ]; then - echo "ERROR: code-server currently requires node v20." + if [ "$major_node_version" -ne "${FORCE_NODE_VERSION:-22}" ]; then + echo "ERROR: code-server currently requires node v22." if [ -n "$FORCE_NODE_VERSION" ]; then echo "However, you have overrided the version check to use v$FORCE_NODE_VERSION." fi diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 9d6c413c4ff4..3a89005e32f6 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -32,7 +32,7 @@ The prerequisites for contributing to code-server are almost the same as those for [VS Code](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#prerequisites). Here is what is needed: -- `node` v20.x +- `node` v22.x - `git` v2.x or greater - [`git-lfs`](https://git-lfs.github.com) - [`npm`](https://www.npmjs.com/) diff --git a/docs/android.md b/docs/android.md index 00909f975415..2659c44000b8 100644 --- a/docs/android.md +++ b/docs/android.md @@ -11,7 +11,7 @@ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash ``` 6. Exit the terminal using `exit` and then reopen the terminal -7. Install and use Node.js 20: +7. Install and use Node.js 22: ```shell nvm install 18 diff --git a/docs/npm.md b/docs/npm.md index d300cfa5bd55..8d3afd0be06a 100644 --- a/docs/npm.md +++ b/docs/npm.md @@ -30,7 +30,7 @@ includes installing instructions based on your operating system. ## Node.js version We use the same major version of Node.js shipped with Code's remote, which is -currently `20.x`. VS Code also [lists Node.js +currently `22.x`. VS Code also [lists Node.js requirements](https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites). Using other versions of Node.js [may lead to unexpected @@ -78,7 +78,7 @@ Proceed to [installing](#installing) ## FreeBSD ```sh -pkg install -y git python npm-node20 pkgconf +pkg install -y git python npm-node22 pkgconf pkg install -y libinotify ``` diff --git a/docs/termux.md b/docs/termux.md index 84dcec0765e4..db81cb57d1e1 100644 --- a/docs/termux.md +++ b/docs/termux.md @@ -57,7 +57,7 @@ npm config set python python3 node -v ``` -you will get Node version `v20` +you will get Node version `v22` 5. Now install code-server following our guide on [installing with npm](./npm.md) diff --git a/flake.nix b/flake.nix index 2fee8f28b6fd..ea28a93b7dac 100644 --- a/flake.nix +++ b/flake.nix @@ -10,7 +10,7 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; - nodejs = pkgs.nodejs_20; + nodejs = pkgs.nodejs_22; in { devShells.default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ diff --git a/lib/vscode b/lib/vscode index 258e40fedc6c..dfaf44141ea9 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 258e40fedc6cb8edf399a463ce3a9d32e7e1f6f3 +Subproject commit dfaf44141ea9deb3b4096f7cd6d24e00c147a4b1 diff --git a/package-lock.json b/package-lock.json index 7ff8b3822be8..3a5b59974dfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "@types/express": "^5.0.0", "@types/http-proxy": "1.17.7", "@types/js-yaml": "^4.0.6", - "@types/node": "20.x", + "@types/node": "22.x", "@types/pem": "^1.14.1", "@types/proxy-from-env": "^1.0.1", "@types/safe-compare": "^1.1.0", @@ -66,7 +66,7 @@ "typescript-eslint": "^8.8.0" }, "engines": { - "node": "20" + "node": "22" } }, "node_modules/@babel/runtime": { @@ -632,13 +632,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", - "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", + "version": "22.15.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.31.tgz", + "integrity": "sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/pem": { @@ -6080,10 +6080,11 @@ "dev": true }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/unified": { "version": "9.2.2", diff --git a/package.json b/package.json index 9652b4e5ad5f..98b5fa5c2833 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/express": "^5.0.0", "@types/http-proxy": "1.17.7", "@types/js-yaml": "^4.0.6", - "@types/node": "20.x", + "@types/node": "22.x", "@types/pem": "^1.14.1", "@types/proxy-from-env": "^1.0.1", "@types/safe-compare": "^1.1.0", @@ -90,7 +90,7 @@ "xdg-basedir": "^4.0.0" }, "resolutions": { - "@types/node": "20.x" + "@types/node": "22.x" }, "bin": { "code-server": "out/node/entry.js" @@ -105,7 +105,7 @@ "remote-development" ], "engines": { - "node": "20" + "node": "22" }, "jest": { "transform": { diff --git a/patches/base-path.diff b/patches/base-path.diff index 842a27ef2293..ed5d69e7f553 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -111,7 +111,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -246,7 +246,9 @@ export class WebClientServer { +@@ -245,7 +245,9 @@ export class WebClientServer { }; // Prefix routes with basePath for clients @@ -122,7 +122,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts const queryConnectionToken = parsedUrl.query[connectionTokenQueryName]; if (typeof queryConnectionToken === 'string') { -@@ -285,10 +287,14 @@ export class WebClientServer { +@@ -284,10 +286,14 @@ export class WebClientServer { }; const useTestResolver = (!this._environmentService.isBuilt && this._environmentService.args['use-test-resolver']); @@ -138,7 +138,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts ); if (!remoteAuthority) { return serveError(req, res, 400, `Bad request.`); -@@ -335,6 +341,7 @@ export class WebClientServer { +@@ -334,6 +340,7 @@ export class WebClientServer { const productConfiguration: Partial> = { codeServerVersion: this._productService.codeServerVersion, @@ -146,7 +146,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts embedderIdentifier: 'server-distro', extensionsGallery: this._webExtensionResourceUrlTemplate && this._productService.extensionsGallery ? { ...this._productService.extensionsGallery, -@@ -388,7 +395,9 @@ export class WebClientServer { +@@ -387,7 +394,9 @@ export class WebClientServer { WORKBENCH_AUTH_SESSION: authSessionInfo ? asJSON(authSessionInfo) : '', WORKBENCH_WEB_BASE_URL: staticRoute, WORKBENCH_NLS_URL, @@ -157,7 +157,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts }; // DEV --------------------------------------------------------------------------------------- -@@ -425,7 +434,7 @@ export class WebClientServer { +@@ -424,7 +433,7 @@ export class WebClientServer { 'default-src \'self\';', 'img-src \'self\' https: data: blob:;', 'media-src \'self\';', @@ -166,7 +166,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts 'child-src \'self\';', `frame-src 'self' https://*.vscode-cdn.net data:;`, 'worker-src \'self\' data: blob:;', -@@ -498,3 +507,70 @@ export class WebClientServer { +@@ -497,3 +506,70 @@ export class WebClientServer { return void res.end(data); } } diff --git a/patches/clipboard.diff b/patches/clipboard.diff index ffcafe5dddb0..7a38442c001d 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -85,7 +85,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts + 'stdin-to-clipboard'?: boolean; 'unresponsive-sample-interval'?: string; 'unresponsive-sample-period'?: string; - + 'enable-rdp-display-tracking'?: boolean; Index: code-server/lib/vscode/src/vs/platform/environment/node/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/node/argv.ts diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index f1262e5b47ee..a293cca5d71a 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -332,6 +332,10 @@ export class Extension implements IExten +@@ -340,6 +340,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index 3114704fa891..3e9a7652814e 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -153,7 +153,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -26,6 +26,7 @@ import { URI } from '../../base/common/u +@@ -25,6 +25,7 @@ import { URI } from '../../base/common/u import { streamToBuffer } from '../../base/common/buffer.js'; import { IProductConfiguration } from '../../base/common/product.js'; import { isString, Mutable } from '../../base/common/types.js'; @@ -161,7 +161,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts import { CharCode } from '../../base/common/charCode.js'; import { IExtensionManifest } from '../../platform/extensions/common/extensions.js'; import { ICSSDevelopmentService } from '../../platform/cssDev/node/cssDevService.js'; -@@ -386,14 +387,22 @@ export class WebClientServer { +@@ -385,14 +386,22 @@ export class WebClientServer { }; const cookies = cookie.parse(req.headers.cookie || ''); @@ -272,7 +272,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -@@ -474,9 +474,6 @@ export class InstallAction extends Exten +@@ -475,9 +475,6 @@ export class InstallAction extends Exten if (this.extension.isBuiltin) { return; } @@ -282,7 +282,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens if (this.extension.state !== ExtensionState.Uninstalled) { return; } -@@ -781,7 +778,7 @@ export abstract class InstallInOtherServ +@@ -782,7 +779,7 @@ export abstract class InstallInOtherServ } if (isLanguagePackExtension(this.extension.local.manifest)) { @@ -291,7 +291,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } // Prefers to run on UI -@@ -2071,17 +2068,6 @@ export class SetLanguageAction extends E +@@ -2073,17 +2070,6 @@ export class SetLanguageAction extends E update(): void { this.enabled = false; this.class = SetLanguageAction.DisabledClass; @@ -309,7 +309,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } override async run(): Promise { -@@ -2098,7 +2084,6 @@ export class ClearLanguageAction extends +@@ -2100,7 +2086,6 @@ export class ClearLanguageAction extends private static readonly DisabledClass = `${this.EnabledClass} disabled`; constructor( @@ -317,7 +317,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens @ILocaleService private readonly localeService: ILocaleService, ) { super(ClearLanguageAction.ID, ClearLanguageAction.TITLE.value, ClearLanguageAction.DisabledClass, false); -@@ -2108,17 +2093,6 @@ export class ClearLanguageAction extends +@@ -2110,17 +2095,6 @@ export class ClearLanguageAction extends update(): void { this.enabled = false; this.class = ClearLanguageAction.DisabledClass; diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index b64f89992c05..86547532f6c2 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -112,7 +112,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -370,6 +370,8 @@ export class WebClientServer { +@@ -369,6 +369,8 @@ export class WebClientServer { serverBasePath: basePath, webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', userDataPath: this._environmentService.userDataPath, @@ -208,7 +208,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -40,6 +40,9 @@ export const HasWebFileSystemAccess = ne +@@ -36,6 +36,9 @@ export const HasWebFileSystemAccess = ne export const EmbedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined')); @@ -217,7 +217,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts + //#endregion - + //#region < --- Window --- > Index: code-server/lib/vscode/src/vs/workbench/services/dialogs/browser/simpleFileDialog.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/dialogs/browser/simpleFileDialog.ts diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 98f8a82c60ab..4fd9efcc9225 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -874,6 +874,72 @@ export class GettingStartedPage extends +@@ -876,6 +876,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -909,6 +975,9 @@ export class GettingStartedPage extends +@@ -911,6 +977,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } @@ -201,7 +201,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -374,6 +374,7 @@ export class WebClientServer { +@@ -373,6 +373,7 @@ export class WebClientServer { userDataPath: this._environmentService.userDataPath, isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'], isEnabledFileUploads: !this._environmentService.args['disable-file-uploads'], @@ -234,7 +234,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -42,6 +42,7 @@ export const EmbedderIdentifierContext = +@@ -38,6 +38,7 @@ export const EmbedderIdentifierContext = export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/integration.diff b/patches/integration.diff index 4c43b1b2a149..70de17b788fd 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -269,7 +269,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -334,6 +334,7 @@ export class WebClientServer { +@@ -333,6 +333,7 @@ export class WebClientServer { } : undefined; const productConfiguration: Partial> = { diff --git a/patches/local-storage.diff b/patches/local-storage.diff index de77fc36c67e..081c9c503020 100644 --- a/patches/local-storage.diff +++ b/patches/local-storage.diff @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -365,6 +365,7 @@ export class WebClientServer { +@@ -364,6 +364,7 @@ export class WebClientServer { remoteAuthority, serverBasePath: basePath, webviewEndpoint: staticRoute + '/out/vs/workbench/contrib/webview/browser/pre', diff --git a/patches/logout.diff b/patches/logout.diff index b54e8d9c62e8..04a14be6203a 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -40,7 +40,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -342,6 +342,7 @@ export class WebClientServer { +@@ -341,6 +341,7 @@ export class WebClientServer { codeServerVersion: this._productService.codeServerVersion, rootEndpoint: rootBase, updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, diff --git a/patches/marketplace.diff b/patches/marketplace.diff index dc6bdd5740d5..25a22b093b1d 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -40,15 +40,15 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -327,7 +327,6 @@ export class WebClientServer { +@@ -326,7 +326,6 @@ export class WebClientServer { const staticRoute = posix.join(basePath, this._productPath, STATIC_PATH); const callbackRoute = posix.join(basePath, this._productPath, CALLBACK_PATH); - const webExtensionRoute = posix.join(basePath, this._productPath, WEB_EXTENSION_PATH); - const resolveWorkspaceURI = (defaultLocation?: string) => defaultLocation && URI.file(path.resolve(defaultLocation)).with({ scheme: Schemas.vscodeRemote, authority: remoteAuthority }); + const resolveWorkspaceURI = (defaultLocation?: string) => defaultLocation && URI.file(resolve(defaultLocation)).with({ scheme: Schemas.vscodeRemote, authority: remoteAuthority }); -@@ -343,14 +342,7 @@ export class WebClientServer { +@@ -342,14 +341,7 @@ export class WebClientServer { codeServerVersion: this._productService.codeServerVersion, rootEndpoint: rootBase, embedderIdentifier: 'server-distro', diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index 12c13d65205c..872733f8bdfb 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -71,7 +71,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -343,6 +343,7 @@ export class WebClientServer { +@@ -342,6 +342,7 @@ export class WebClientServer { rootEndpoint: rootBase, updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? rootBase + '/logout' : undefined, diff --git a/patches/service-worker.diff b/patches/service-worker.diff index 20091175b3e8..f2e1058fb4f7 100644 --- a/patches/service-worker.diff +++ b/patches/service-worker.diff @@ -54,7 +54,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -344,6 +344,10 @@ export class WebClientServer { +@@ -343,6 +343,10 @@ export class WebClientServer { updateEndpoint: !this._environmentService.args['disable-update-check'] ? rootBase + '/update/check' : undefined, logoutEndpoint: this._environmentService.args['auth'] && this._environmentService.args['auth'] !== "none" ? rootBase + '/logout' : undefined, proxyEndpointTemplate: process.env.VSCODE_PROXY_URI ?? rootBase + '/proxy/{{port}}/', diff --git a/patches/signature-verification.diff b/patches/signature-verification.diff index 6abd6629fe5b..8c05f4a3f760 100644 --- a/patches/signature-verification.diff +++ b/patches/signature-verification.diff @@ -22,7 +22,7 @@ Index: code-server/lib/vscode/src/vs/platform/extensionManagement/node/extension @IConfigurationService private readonly configurationService: IConfigurationService, @IExtensionGalleryManifestService protected readonly extensionGalleryManifestService: IExtensionGalleryManifestService, @IProductService productService: IProductService, -@@ -331,8 +333,7 @@ export class ExtensionManagementService +@@ -339,8 +341,7 @@ export class ExtensionManagementService private async downloadExtension(extension: IGalleryExtension, operation: InstallOperation, verifySignature: boolean, clientTargetPlatform?: TargetPlatform): Promise<{ readonly location: URI; readonly verificationStatus: ExtensionSignatureVerificationCode | undefined }> { if (verifySignature) { diff --git a/patches/store-socket.diff b/patches/store-socket.diff index 909937e30eca..60c65802c32e 100644 --- a/patches/store-socket.diff +++ b/patches/store-socket.diff @@ -96,7 +96,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extensionHostProcess.ts import minimist from 'minimist'; import * as nativeWatchdog from 'native-watchdog'; import * as net from 'net'; -@@ -423,7 +424,28 @@ async function startExtensionHostProcess +@@ -437,7 +438,28 @@ async function startExtensionHostProcess ); // rewrite onTerminate-function to be a proper shutdown diff --git a/patches/telemetry.diff b/patches/telemetry.diff index b4465f99db68..ce5ae188c9f2 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -134,7 +134,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -348,6 +348,8 @@ export class WebClientServer { +@@ -347,6 +347,8 @@ export class WebClientServer { scope: vscodeBase + '/', path: rootBase + '/_static/out/browser/serviceWorker.js', }, diff --git a/patches/trusted-domains.diff b/patches/trusted-domains.diff index a32360faf39f..d26343e9e4d4 100644 --- a/patches/trusted-domains.diff +++ b/patches/trusted-domains.diff @@ -24,7 +24,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -339,6 +339,14 @@ export class WebClientServer { +@@ -338,6 +338,14 @@ export class WebClientServer { scopes: [['user:email'], ['repo']] } : undefined; @@ -39,7 +39,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts const productConfiguration: Partial> = { codeServerVersion: this._productService.codeServerVersion, rootEndpoint: rootBase, -@@ -353,6 +361,7 @@ export class WebClientServer { +@@ -352,6 +360,7 @@ export class WebClientServer { telemetryEndpoint: this._productService.telemetryEndpoint, embedderIdentifier: 'server-distro', extensionsGallery: this._productService.extensionsGallery, diff --git a/patches/update-check.diff b/patches/update-check.diff index 908c69e17820..faa6b07b20ba 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -105,7 +105,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -341,6 +341,7 @@ export class WebClientServer { +@@ -340,6 +340,7 @@ export class WebClientServer { const productConfiguration: Partial> = { codeServerVersion: this._productService.codeServerVersion, rootEndpoint: rootBase, diff --git a/patches/webview.diff b/patches/webview.diff index fb35c4a32229..7ed4c32ff8f2 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -54,7 +54,7 @@ Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts +++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts -@@ -361,6 +361,7 @@ export class WebClientServer { +@@ -360,6 +360,7 @@ export class WebClientServer { const workbenchWebConfiguration = { remoteAuthority, serverBasePath: basePath, @@ -70,29 +70,12 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index -+ content="default-src 'none'; script-src 'sha256-ap/AtocvSWp0rrxaO19DJy/nOpazT6M5Cv9utUWe7MA=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> - +- content="default-src 'none'; script-src 'sha256-gEAyFzmkyqMoTTnN+3KReFUYoHsK4RAJEb+6eiul+UY=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> ++ content="default-src 'none'; script-src 'sha256-1qYtPnTQa4VwKNJO61EOhs2agF9TvuQSYIJ27OgzZqI=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> -@@ -349,6 +349,12 @@ - - const hostname = location.hostname; - -+ // It is safe to run if we are on the same host. -+ const parent = new URL(parentOrigin) -+ if (parent.hostname === hostname) { -+ return start(parentOrigin) -+ } -+ - if (!crypto.subtle) { - // cannot validate, not running in a secure context - throw new Error(`'crypto.subtle' is not available so webviews will not work. This is likely because the editor is not running in a secure context (https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts).`); -Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index-no-csp.html -=================================================================== ---- code-server.orig/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index-no-csp.html -+++ code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index-no-csp.html -@@ -343,6 +343,12 @@ + Date: Mon, 16 Jun 2025 13:04:33 -0800 Subject: [PATCH 085/150] chore: bump typescript-eslint from 8.29.0 to 8.33.0 (#7365) Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.29.0 to 8.33.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-version: 8.33.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 168 ++++++++++++++++++++++++++++++---------------- 1 file changed, 110 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a5b59974dfb..e75c9d17cf96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -99,16 +99,20 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } @@ -729,21 +733,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", - "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", + "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/type-utils": "8.29.0", - "@typescript-eslint/utils": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/type-utils": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -753,22 +757,32 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.33.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", + "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", "debug": "^4.3.4" }, "engines": { @@ -783,15 +797,34 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", + "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", - "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", + "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0" + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -801,17 +834,34 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", + "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", - "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", + "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/utils": "8.33.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -826,9 +876,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", - "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", + "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", "dev": true, "license": "MIT", "engines": { @@ -840,20 +890,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", - "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", + "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -893,16 +945,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -917,13 +969,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", - "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", + "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/types": "8.33.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -6036,15 +6088,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", - "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz", + "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.29.0", - "@typescript-eslint/parser": "8.29.0", - "@typescript-eslint/utils": "8.29.0" + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", + "@typescript-eslint/utils": "8.33.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" From 3669c96c9c00b51a1ad07fc62949e097d39dfa97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 13:05:03 -0800 Subject: [PATCH 086/150] chore: bump @types/compression from 1.7.5 to 1.8.0 (#7364) Bumps [@types/compression](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/compression) from 1.7.5 to 1.8.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/compression) --- updated-dependencies: - dependency-name: "@types/compression" dependency-version: 1.8.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index e75c9d17cf96..6c92be24f1e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -506,12 +506,14 @@ } }, "node_modules/@types/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-g4vmPIwbTii9dX1HVioHbOolubEaf4re4vDxuzpKrzz9uI7uarBExi9begX0cXyIB85jXZ5X2A/v8rsHZxSAPw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/express": "*" + "@types/express": "*", + "@types/node": "*" } }, "node_modules/@types/connect": { From 05d8904ec521dfdfd237ee8441dd2ae13f667f7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 13:06:23 -0800 Subject: [PATCH 087/150] chore: bump dawidd6/action-download-artifact from 9 to 10 (#7361) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 9 to 10. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v9...v10) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-version: '10' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a4433c810937..ee9039f926c8 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -268,7 +268,7 @@ jobs: timeout-minutes: 15 steps: - name: Download artifacts - uses: dawidd6/action-download-artifact@v9 + uses: dawidd6/action-download-artifact@v10 id: download with: branch: ${{ github.ref }} From a56769b2c3f8d8af5ba7cf4c83284b66951c22e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 13:07:03 -0800 Subject: [PATCH 088/150] chore: bump heyhusen/archlinux-package-action from 2.2.1 to 2.4.0 (#7362) Bumps [heyhusen/archlinux-package-action](https://github.com/heyhusen/archlinux-package-action) from 2.2.1 to 2.4.0. - [Release notes](https://github.com/heyhusen/archlinux-package-action/releases) - [Changelog](https://github.com/heyhusen/archlinux-package-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/heyhusen/archlinux-package-action/compare/v2.2.1...v2.4.0) --- updated-dependencies: - dependency-name: heyhusen/archlinux-package-action dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/publish.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index f020ccde31ae..91e320087175 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -124,7 +124,7 @@ jobs: echo "VERSION=${TAG#v}" >> $GITHUB_ENV - name: Validate package - uses: heyhusen/archlinux-package-action@v2.2.1 + uses: heyhusen/archlinux-package-action@v2.4.0 env: VERSION: ${{ env.VERSION }} with: From 85ee441006cb5557965be7d348d39d2a3a76bd54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:32:00 -0800 Subject: [PATCH 089/150] chore: bump typescript from 5.6.2 to 5.8.3 (#7335) * chore: bump typescript from 5.6.2 to 5.8.3 Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.2 to 5.8.3. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.2...v5.8.3) --- updated-dependencies: - dependency-name: typescript dependency-version: 5.8.3 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * as T * Update JSON error --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Asher --- package-lock.json | 6 +++--- src/node/settings.ts | 2 +- test/unit/node/settings.test.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c92be24f1e9..10e9ea84d30f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6076,9 +6076,9 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/src/node/settings.ts b/src/node/settings.ts index 709ce950cb89..29716af036f9 100644 --- a/src/node/settings.ts +++ b/src/node/settings.ts @@ -17,7 +17,7 @@ export class SettingsProvider { public async read(): Promise { try { const raw = (await fs.readFile(this.settingsPath, "utf8")).trim() - return raw ? JSON.parse(raw) : {} + return raw ? JSON.parse(raw) : ({} as T) } catch (error: any) { if (error.code !== "ENOENT") { logger.warn(error.message) diff --git a/test/unit/node/settings.test.ts b/test/unit/node/settings.test.ts index 59c6f46a50bc..ad04b15ff81b 100644 --- a/test/unit/node/settings.test.ts +++ b/test/unit/node/settings.test.ts @@ -29,7 +29,7 @@ describe("settings", () => { const settings = new SettingsProvider(pathToMockSettingsFile) await settings.read() // This happens when we can't parse a JSON (usually error in file) - expect(logger.warn).toHaveBeenCalledWith(expect.stringMatching(/Unexpected token/)) + expect(logger.warn).toHaveBeenCalledWith(expect.stringMatching(/Expected ':'/)) }) }) describe("with invalid settings file path", () => { From 74cc50d5e6b6a15d4a6037035f348c9ddb991d1b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:32:23 -0800 Subject: [PATCH 090/150] chore: bump qs from 6.13.0 to 6.14.0 (#7363) Bumps [qs](https://github.com/ljharb/qs) from 6.13.0 to 6.14.0. - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.13.0...v6.14.0) --- updated-dependencies: - dependency-name: qs dependency-version: 6.14.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 43 ++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10e9ea84d30f..9a043b0a94b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "limiter": "^2.1.0", "pem": "^1.14.8", "proxy-agent": "^6.3.1", - "qs": "6.13.0", + "qs": "6.14.0", "rotating-file-stream": "^3.1.1", "safe-buffer": "^5.2.1", "safe-compare": "^1.1.4", @@ -1335,7 +1335,7 @@ "http-errors": "^2.0.0", "iconv-lite": "^0.5.2", "on-finished": "^2.4.1", - "qs": "^6.14.0", + "qs": "6.14.0", "raw-body": "^3.0.0", "type-is": "^2.0.0" }, @@ -1343,21 +1343,6 @@ "node": ">=18" } }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2673,6 +2658,21 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4941,11 +4941,12 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" diff --git a/package.json b/package.json index 98b5fa5c2833..1a2fe6524020 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "limiter": "^2.1.0", "pem": "^1.14.8", "proxy-agent": "^6.3.1", - "qs": "6.13.0", + "qs": "6.14.0", "rotating-file-stream": "^3.1.1", "safe-buffer": "^5.2.1", "safe-compare": "^1.1.4", From 27a112c3a7f00e4cb77874145c95f03f9b586415 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 16 Jun 2025 17:00:51 -0800 Subject: [PATCH 091/150] Upgrade brace-expansion sub-dependency Courtesy of `npm audit fix`. --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a043b0a94b9..81e34569153c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -921,9 +921,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1344,9 +1344,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", From bd34cd510f44b25d40b3e30ec9a706a949428c16 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Sat, 21 Jun 2025 02:08:36 +0200 Subject: [PATCH 092/150] Update Code to 1.101.1 (#7383) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index dfaf44141ea9..18e3a1ec544e 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit dfaf44141ea9deb3b4096f7cd6d24e00c147a4b1 +Subproject commit 18e3a1ec544e6907be1e944a94c496e302073435 From 3a8fbeb4da594a798dfcb9b3fd7578d80a841d3b Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 24 Jun 2025 08:20:30 -0800 Subject: [PATCH 093/150] Release v4.101.0 and v4.101.1 --- CHANGELOG.md | 16 ++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce4a310be1d2..ca3dd3acd65b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,22 @@ Code v99.99.999 ## Unreleased +## [4.101.1](https://github.com/coder/code-server/releases/tag/v4.101.1) - 2025-06-20 + +Code v1.101.1 + +### Changed + +- Update to Code 1.101.1. + +## [4.101.0](https://github.com/coder/code-server/releases/tag/v4.101.0) - 2025-06-20 + +Code v1.101.0 + +### Changed + +- Update to Code 1.101.0. + ## [4.100.3](https://github.com/coder/code-server/releases/tag/v4.100.3) - 2025-06-03 Code v1.100.3 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index e916ee26a2a6..2d03e966d2a0 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.27.3 +version: 3.28.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.100.3 +appVersion: 4.101.1 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 429292634612..2785e1bbc4f2 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.100.3' + tag: '4.101.1' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From c5c764d78fd069afc2cc43cfa1bff805dd5a169f Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 24 Jun 2025 18:21:26 -0800 Subject: [PATCH 094/150] Do not use module type for service worker It seems that this causes browser to not send cookies, which can result in a 401. Fixes #7389. --- CHANGELOG.md | 6 ++++++ patches/webview.diff | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca3dd3acd65b..a16bb9380908 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,12 @@ Code v99.99.999 ## Unreleased +Code v1.101.1 + +### Fixed + +- Fix web views not loading due to 401 when requesting the service worker. + ## [4.101.1](https://github.com/coder/code-server/releases/tag/v4.101.1) - 2025-06-20 Code v1.101.1 diff --git a/patches/webview.diff b/patches/webview.diff index 7ed4c32ff8f2..d6002fa017ab 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -71,10 +71,19 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index -+ content="default-src 'none'; script-src 'sha256-1qYtPnTQa4VwKNJO61EOhs2agF9TvuQSYIJ27OgzZqI=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> ++ content="default-src 'none'; script-src 'sha256-Oi71Tq4Buohx0KDH3yEbVJUzABnqYv9iVLo420HZXqI=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> { + /** + * @param {MessageEvent} event @@ -351,6 +351,12 @@ const hostname = location.hostname; From 1b1440ffd259aaa7b90a157bf46058b30e01f105 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 24 Jun 2025 19:55:23 -0800 Subject: [PATCH 095/150] Update logo --- ci/dev/gen_icons.sh | 54 ++++++++++----------- flake.nix | 1 + src/browser/media/favicon-dark-support.svg | 11 ++--- src/browser/media/favicon.ico | Bin 4868 -> 4368 bytes src/browser/media/favicon.svg | 4 +- src/browser/media/pwa-icon-192.png | Bin 5486 -> 1804 bytes src/browser/media/pwa-icon-512.png | Bin 14689 -> 5265 bytes src/browser/media/pwa-icon.png | Bin 19318 -> 0 bytes src/node/routes/vscode.ts | 1 + 9 files changed, 34 insertions(+), 37 deletions(-) delete mode 100644 src/browser/media/pwa-icon.png diff --git a/ci/dev/gen_icons.sh b/ci/dev/gen_icons.sh index 9d27486dcc57..049e9eef0864 100755 --- a/ci/dev/gen_icons.sh +++ b/ci/dev/gen_icons.sh @@ -1,44 +1,40 @@ #!/bin/sh set -eu +# Generate icons from a single favicon.svg. favicon.svg should have no fill +# colors set. main() { cd src/browser/media - # We need .ico for backwards compatibility. - # The other two are the only icon sizes required by Chrome and - # we use them for stuff like apple-touch-icon as well. - # https://web.dev/add-manifest/ + # We need .ico for backwards compatibility. The other two are the only icon + # sizes required by Chrome and we use them for stuff like apple-touch-icon as + # well. https://web.dev/add-manifest/ # # This should be enough and we can always add more if there are problems. - + # + # -quiet to avoid https://github.com/ImageMagick/ImageMagick/issues/884 # -background defaults to white but we want it transparent. + # -density somehow makes the image both sharper and smaller in file size. + # # https://imagemagick.org/script/command-line-options.php#background - convert -quiet -background transparent -resize 256x256 favicon.svg favicon.ico - # We do not generate the pwa-icon from the favicon as they are slightly different - # designs and sizes. - # See favicon.afdesign and #2401 for details on the differences. - convert -quiet -background transparent -resize 192x192 pwa-icon.png pwa-icon-192.png - convert -quiet -background transparent -resize 512x512 pwa-icon.png pwa-icon-512.png + convert -quiet -background transparent \ + -resize 256x256 -density 256x256 \ + favicon.svg favicon.ico - # We use -quiet above to avoid https://github.com/ImageMagick/ImageMagick/issues/884 + # Generate PWA icons. There should be enough padding to support masking. + convert -quiet -border 60x60 -bordercolor white -background white \ + -resize 192x192 -density 192x192 \ + favicon.svg pwa-icon-192.png + convert -quiet -border 160x160 -bordercolor white -background white \ + -resize 512x512 -density 512x512 \ + favicon.svg pwa-icon-512.png - # The following adds dark mode support for the favicon as favicon-dark-support.svg - # There is no similar capability for pwas or .ico so we can only add support to the svg. - favicon_dark_style="" - # See https://stackoverflow.com/a/22901380/4283659 - # This escapes all newlines so that sed will accept them. - favicon_dark_style="$(printf "%s\n" "$favicon_dark_style" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g')" - sed "$( - cat -n << EOF -s% favicon-dark-support.svg + # The following adds dark mode support for the favicon as + # favicon-dark-support.svg There is no similar capability for pwas or .ico so + # we can only add support to the svg. + favicon_dark_style="" + cp favicon.svg favicon-dark-support.svg + sed "s% favicon-dark-support.svg } main "$@" diff --git a/flake.nix b/flake.nix index ea28a93b7dac..3a1f7efbc122 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,7 @@ in { devShells.default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ + imagemagick nodejs python3 pkg-config diff --git a/src/browser/media/favicon-dark-support.svg b/src/browser/media/favicon-dark-support.svg index 06f1fa00d62c..d64bf32ed96e 100644 --- a/src/browser/media/favicon-dark-support.svg +++ b/src/browser/media/favicon-dark-support.svg @@ -1,7 +1,4 @@ - \ No newline at end of file + + + + diff --git a/src/browser/media/favicon.ico b/src/browser/media/favicon.ico index e721447bd9d175c1e64eb6bf9a14846f8ed5f7e5..56078ead669706ff02e68c8a368b14fab3818e26 100644 GIT binary patch literal 4368 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 literal 4868 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 \ No newline at end of file + + + diff --git a/src/browser/media/pwa-icon-192.png b/src/browser/media/pwa-icon-192.png index a6ee503115d8d4824730e125836e90cad72c6f19..3f28593b3aee40b52970a062bbce4c0bfbe7fc8e 100644 GIT binary patch literal 1804 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

uJ!O>hz>hHOPZzxfwfEpH9 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 F{|{pp7ykeN literal 14689 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 { src: `{{BASE}}/_static/src/browser/media/pwa-icon-${size}.png`, type: "image/png", sizes: `${size}x${size}`, + purpose: "maskable", })), }, null, From 53dccbb5caf9459fc16827bcbafd465352525666 Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 25 Jun 2025 11:20:25 -0800 Subject: [PATCH 096/150] Report if using hashed-password from config --- src/node/main.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/node/main.ts b/src/node/main.ts index 470ddeb25cc7..0d5c40928dfd 100644 --- a/src/node/main.ts +++ b/src/node/main.ts @@ -144,6 +144,8 @@ export const runCodeServer = async ( logger.info(" - Using password from $PASSWORD") } else if (args.usingEnvHashedPassword) { logger.info(" - Using password from $HASHED_PASSWORD") + } else if (args["hashed-password"]) { + logger.info(` - Using hashed-password from ${args.config}`) } else { logger.info(` - Using password from ${args.config}`) } From aff005e19626ac6802223713fa569e743c125725 Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 25 Jun 2025 11:43:13 -0800 Subject: [PATCH 097/150] Update Code to 1.101.2 --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 18e3a1ec544e..2901c5ac6db8 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 18e3a1ec544e6907be1e944a94c496e302073435 +Subproject commit 2901c5ac6db8a986a5666c3af51ff804d05af0d4 From 729456b10d811ea7202f3c28c0c6ea1d3ad78807 Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 25 Jun 2025 11:47:15 -0800 Subject: [PATCH 098/150] Release v4.101.2 --- CHANGELOG.md | 8 +++++++- ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a16bb9380908..f166196192b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,13 @@ Code v99.99.999 ## Unreleased -Code v1.101.1 +## [4.101.2](https://github.com/coder/code-server/releases/tag/v4.101.2) - 2025-06-25 + +Code v1.101.2 + +### Changed + +- Update to Code 1.101.2. ### Fixed diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 2d03e966d2a0..65bb068fe427 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.28.0 +version: 3.28.1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.101.1 +appVersion: 4.101.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 2785e1bbc4f2..d05514135593 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.101.1' + tag: '4.101.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 70be9fe5413b21528cfb01e6b6cf98c9ff60904d Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 7 Jul 2025 14:20:07 -0800 Subject: [PATCH 099/150] Add non-maskable PWA icons It seems Chromium cannot use maskable icons. It complains that the "purpose" must contain "any", however maskable icons are not suitable for the "any" purpose. So, add pre-masked icons to be used for the "any" purpose. --- ci/dev/gen_icons.sh | 14 +++++++++++-- src/browser/media/pwa-icon-192.png | Bin 1804 -> 3276 bytes src/browser/media/pwa-icon-512.png | Bin 5265 -> 8489 bytes src/browser/media/pwa-icon-maskable-192.png | Bin 0 -> 1804 bytes src/browser/media/pwa-icon-maskable-512.png | Bin 0 -> 5265 bytes src/node/routes/vscode.ts | 22 ++++++++++++++------ 6 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 src/browser/media/pwa-icon-maskable-192.png create mode 100644 src/browser/media/pwa-icon-maskable-512.png diff --git a/ci/dev/gen_icons.sh b/ci/dev/gen_icons.sh index 049e9eef0864..39d509bc4f4b 100755 --- a/ci/dev/gen_icons.sh +++ b/ci/dev/gen_icons.sh @@ -24,10 +24,20 @@ main() { # Generate PWA icons. There should be enough padding to support masking. convert -quiet -border 60x60 -bordercolor white -background white \ -resize 192x192 -density 192x192 \ - favicon.svg pwa-icon-192.png + favicon.svg pwa-icon-maskable-192.png convert -quiet -border 160x160 -bordercolor white -background white \ -resize 512x512 -density 512x512 \ - favicon.svg pwa-icon-512.png + favicon.svg pwa-icon-maskable-512.png + + # Generate non-maskable PWA icons. + magick pwa-icon-maskable-192.png \ + \( +clone -threshold 101% -fill white -draw "roundRectangle 0,0 %[fx:int(w)],%[fx:int(h)] 50,50" \) \ + -channel-fx "| gray=>alpha" \ + pwa-icon-192.png + magick pwa-icon-maskable-512.png \ + \( +clone -threshold 101% -fill white -draw "roundRectangle 0,0 %[fx:int(w)],%[fx:int(h)] 100,100" \) \ + -channel-fx "| gray=>alpha" \ + pwa-icon-512.png # The following adds dark mode support for the favicon as # favicon-dark-support.svg There is no similar capability for pwas or .ico so diff --git a/src/browser/media/pwa-icon-192.png b/src/browser/media/pwa-icon-192.png index 3f28593b3aee40b52970a062bbce4c0bfbe7fc8e..9f46dd830361677e12f562b94e79375fde91be9b 100644 GIT binary patch delta 3160 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 diff --git a/src/browser/media/pwa-icon-512.png b/src/browser/media/pwa-icon-512.png index 7df85f7665acf9dfa09d1dfbaccd3c0e6a18c7f8..9b899e8d690edaa121b0fde39ddf61827748d9c8 100644 GIT binary patch literal 8489 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 literal 5265 zcmeHL={wW`*Zz%+LQ)K}l|p1<6iW7OFc^FGbu8J9C1W3{ED71ytXZ;-b+Q*R_OYpT%Eu+abjK!;FO(ggsD3rGQ6xv;

uJ!O>hz>hHOPZzxfwfEpH9 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 F{|{pp7ykeN diff --git a/src/browser/media/pwa-icon-maskable-192.png b/src/browser/media/pwa-icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..3f28593b3aee40b52970a062bbce4c0bfbe7fc8e GIT binary patch literal 1804 zcmcIl`#;nBAAe752x(m$xwLbLQf|2x9Xqw+4&pJJe1eZ)zk zp_~|vm7bO18c)!dO@2l3RCAC@NvF=$f2bVUNcp}Nhm)<+vpt-Ve!78vE=@HJ(g;6_ ztGG#bK610r=>1B3lbi1NDe6k8KgrE;SQ2<}xb(!DWHyf(8y0#fb#^AdMOhWJ!DMaDDNo_Vz;nQUzk(XoPK@`Shv(tcV+tXAJk z*Yfx3|2Z3Mn(FxQzqMs=9}S7rTdQl1yir7DNK$|Q!as=cXI&3^VS31vWuki6!Mtg< z*$o+KT-aie5zANgSVD)OrsnUuB+QRZ)cVpDKNi?-D)s%wHyqy_%;oO%O3N?l^};6!o%X)?rVtIO!`eO11)5F)~Z%sU_jP%kw&W z5P}-o<=*UlqHLxzw2ISgOj^IUhc=i;E+eY zSz>4({H!AceHG%THIqGRucI(D_=j!JLAR8uCa)A7-W~lB053$VGbT4&2JG!Vo$e%b zAfS;P%WWmuD&A_*HRNIAZa}FUNe{dz+4)o{eBwbn|Aq6@c zanG4t)IKA_N0c%>zoqauDl4I}UVmn#!DN!T#dF3H7bCQd z>d_+NtNm;YGG!hFms+!zW_(eE~kDnL_aBu5H*_kbJ`de>9 z{o`De5X+ugZAyPvsDs1t>O9QwoiT^`aTA@viR>Y)q%FQ7vix`<-069aQ+f*zO7JYs z!Rr}ppk@<7G#>6iJ(xK@8?k+&WR=3}?uxoS`tSiKet^@^zL-Sanx3`t!~3s5=wrrH ziRFXaQPEfbKie5n9lkRDr-dA8Q*Fv@ay`>Mx$)F5yP^V~O`C;%cVovw8%rl-E=;XQ z_szB*+m#5-z1E70FJyJDl_ew=w|nR#r>*J{nUkW~II-pz)?9&&qz-|j@~!!F?t>pX zsD5Rp!3!B@x-H5(k!dQzBMH=7Gd4M67UHb5$J*~cvh_4YrJ>n5pDAscc2ioSER1~+ zyx@ZG&s}UvGASvrI*$-%qN@ni_TSwzuS7HD`m{?1(9y31?wHXyx1h{ud=TYpT%Eu+abjK!;FO(ggsD3rGQ6xv;

uJ!O>hz>hHOPZzxfwfEpH9 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 F{|{pp7ykeN literal 0 HcmV?d00001 diff --git a/src/node/routes/vscode.ts b/src/node/routes/vscode.ts index 62d7c80c4ba0..33d1287a7892 100644 --- a/src/node/routes/vscode.ts +++ b/src/node/routes/vscode.ts @@ -186,12 +186,22 @@ router.get("/manifest.json", async (req, res) => { display: "fullscreen", display_override: ["window-controls-overlay"], description: "Run Code on a remote server.", - icons: [192, 512].map((size) => ({ - src: `{{BASE}}/_static/src/browser/media/pwa-icon-${size}.png`, - type: "image/png", - sizes: `${size}x${size}`, - purpose: "maskable", - })), + icons: [192, 512] + .map((size) => [ + { + src: `{{BASE}}/_static/src/browser/media/pwa-icon-${size}.png`, + type: "image/png", + sizes: `${size}x${size}`, + purpose: "any", + }, + { + src: `{{BASE}}/_static/src/browser/media/pwa-icon-maskable-${size}.png`, + type: "image/png", + sizes: `${size}x${size}`, + purpose: "maskable", + }, + ]) + .flat(), }, null, 2, From cdac5bff642607a8f7202695645184fa1de99ba5 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Tue, 15 Jul 2025 22:04:46 +0200 Subject: [PATCH 100/150] Update Code to 1.102.0 (#7418) * Update Code to 1.102.0 * Increase maximum memory for building --- ci/build/build-vscode.sh | 4 +++- lib/vscode | 2 +- patches/base-path.diff | 8 ++++---- patches/clipboard.diff | 4 ++-- patches/display-language.diff | 32 ++++++++++-------------------- patches/external-file-actions.diff | 22 ++++++++++---------- patches/getting-started.diff | 10 +++++----- patches/logout.diff | 4 ++-- patches/proxy-uri.diff | 4 ++-- patches/sourcemaps.diff | 10 +++++----- patches/store-socket.diff | 4 ++-- patches/telemetry.diff | 2 +- patches/trusted-domains.diff | 4 ++-- patches/update-check.diff | 6 +++--- 14 files changed, 53 insertions(+), 63 deletions(-) diff --git a/ci/build/build-vscode.sh b/ci/build/build-vscode.sh index e4a781a88b40..f037fac3a4c1 100755 --- a/ci/build/build-vscode.sh +++ b/ci/build/build-vscode.sh @@ -112,7 +112,9 @@ EOF # this because we have an NPM package that could be installed on any platform. # The correct platform dependencies and scripts will be installed as part of # the post-install during `npm install` or when building a standalone release. - npm run gulp "vscode-reh-web-linux-x64${MINIFY:+-min}" + node --max-old-space-size=16384 --optimize-for-size \ + ./node_modules/gulp/bin/gulp.js \ + "vscode-reh-web-linux-x64${MINIFY:+-min}" # Reset so if you develop after building you will not be stuck with the wrong # commit (the dev client will use `oss-dev` but the dev server will still use diff --git a/lib/vscode b/lib/vscode index 2901c5ac6db8..cb0c47c0cfaa 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 2901c5ac6db8a986a5666c3af51ff804d05af0d4 +Subproject commit cb0c47c0cfaad0757385834bd89d410c78a856c0 diff --git a/patches/base-path.diff b/patches/base-path.diff index ed5d69e7f553..4124026233b1 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/base/common/network.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/network.ts +++ code-server/lib/vscode/src/vs/base/common/network.ts -@@ -220,7 +220,9 @@ class RemoteAuthoritiesImpl { +@@ -223,7 +223,9 @@ class RemoteAuthoritiesImpl { return URI.from({ scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource, authority: `${host}:${port}`, @@ -253,7 +253,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts -@@ -332,7 +332,8 @@ class LocalStorageURLCallbackProvider ex +@@ -333,7 +333,8 @@ class LocalStorageURLCallbackProvider ex this.startListening(); } @@ -263,7 +263,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts } private startListening(): void { -@@ -579,17 +580,6 @@ class WorkspaceProvider implements IWork +@@ -578,17 +579,6 @@ class WorkspaceProvider implements IWork } } @@ -281,7 +281,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts (function () { // Find config by checking for DOM -@@ -598,8 +588,8 @@ function readCookie(name: string): strin +@@ -597,8 +587,8 @@ function readCookie(name: string): strin if (!configElement || !configElementAttribute) { throw new Error('Missing web configuration element'); } diff --git a/patches/clipboard.diff b/patches/clipboard.diff index 7a38442c001d..8bc1cfa43323 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/common/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/argv.ts -@@ -122,6 +122,7 @@ export interface NativeParsedArgs { +@@ -134,6 +134,7 @@ export interface NativeParsedArgs { 'disable-chromium-sandbox'?: boolean; sandbox?: boolean; 'enable-coi'?: boolean; @@ -90,7 +90,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/node/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/node/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/node/argv.ts -@@ -91,6 +91,7 @@ export const OPTIONS: OptionDescriptions +@@ -104,6 +104,7 @@ export const OPTIONS: OptionDescriptions 'user-data-dir': { type: 'string', cat: 'o', args: 'dir', description: localize('userDataDir', "Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code.") }, 'profile': { type: 'string', 'cat': 'o', args: 'profileName', description: localize('profileName', "Opens the provided folder or workspace with the given profile and associates the profile with the workspace. If the profile does not exist, a new empty one is created.") }, 'help': { type: 'boolean', cat: 'o', alias: 'h', description: localize('help', "Print usage.") }, diff --git a/patches/display-language.diff b/patches/display-language.diff index 3e9a7652814e..3b7cfaf55659 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -18,9 +18,9 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; -@@ -255,6 +255,9 @@ export async function setupServerService - const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority)); - socketServer.registerChannel('extensions', channel); +@@ -267,6 +267,9 @@ export async function setupServerService + + socketServer.registerChannel('mcpManagement', new McpManagementChannel(mcpManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority))); + const languagePackChannel = ProxyChannel.fromService(accessor.get(ILanguagePackService), disposables); + socketServer.registerChannel('languagePacks', languagePackChannel); @@ -32,7 +32,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/environmentServ =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/common/environmentService.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/environmentService.ts -@@ -101,7 +101,7 @@ export abstract class AbstractNativeEnvi +@@ -98,7 +98,7 @@ export abstract class AbstractNativeEnvi return URI.file(join(vscodePortable, 'argv.json')); } @@ -190,7 +190,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -19,6 +19,7 @@ export const serverOptions: OptionDescri +@@ -21,6 +21,7 @@ export const serverOptions: OptionDescri 'disable-file-downloads': { type: 'boolean' }, 'disable-file-uploads': { type: 'boolean' }, 'disable-getting-started-override': { type: 'boolean' }, @@ -198,7 +198,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -107,6 +108,7 @@ export interface ServerParsedArgs { +@@ -109,6 +110,7 @@ export interface ServerParsedArgs { 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, @@ -244,10 +244,10 @@ Index: code-server/lib/vscode/src/vs/platform/languagePacks/browser/languagePack + return this.languagePackService.getInstalledLanguages() } } -Index: code-server/lib/vscode/src/vs/workbench/services/localization/electron-sandbox/localeService.ts +Index: code-server/lib/vscode/src/vs/workbench/services/localization/electron-browser/localeService.ts =================================================================== ---- code-server.orig/lib/vscode/src/vs/workbench/services/localization/electron-sandbox/localeService.ts -+++ code-server/lib/vscode/src/vs/workbench/services/localization/electron-sandbox/localeService.ts +--- code-server.orig/lib/vscode/src/vs/workbench/services/localization/electron-browser/localeService.ts ++++ code-server/lib/vscode/src/vs/workbench/services/localization/electron-browser/localeService.ts @@ -51,7 +51,8 @@ class NativeLocaleService implements ILo @IProductService private readonly productService: IProductService ) { } @@ -335,18 +335,6 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens } override async run(): Promise { -Index: code-server/lib/vscode/build/gulpfile.reh.js -=================================================================== ---- code-server.orig/lib/vscode/build/gulpfile.reh.js -+++ code-server/lib/vscode/build/gulpfile.reh.js -@@ -58,6 +58,7 @@ const serverResourceIncludes = [ - - // NLS - 'out-build/nls.messages.json', -+ 'out-build/nls.keys.json', // Required to generate translations. - - // Process monitor - 'out-build/vs/base/node/cpuUsage.sh', Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts @@ -356,7 +344,7 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts import './services/lifecycle/browser/lifecycleService.js'; import './services/clipboard/browser/clipboardService.js'; -import './services/localization/browser/localeService.js'; -+import './services/localization/electron-sandbox/localeService.js'; ++import './services/localization/electron-browser/localeService.js'; import './services/path/browser/pathService.js'; import './services/themes/browser/browserHostColorSchemeService.js'; import './services/encryption/browser/encryptionService.js'; diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index 86547532f6c2..d87a6043f881 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -90,7 +90,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -16,6 +16,8 @@ export const serverOptions: OptionDescri +@@ -18,6 +18,8 @@ export const serverOptions: OptionDescri /* ----- code-server ----- */ 'disable-update-check': { type: 'boolean' }, 'auth': { type: 'string' }, @@ -99,7 +99,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -101,6 +103,8 @@ export interface ServerParsedArgs { +@@ -103,6 +105,8 @@ export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; 'auth'?: string; @@ -129,8 +129,8 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; --import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext } from '../common/contextkeys.js'; -+import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; +-import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext } from '../common/contextkeys.js'; ++import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; @@ -139,7 +139,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts import { WorkbenchState, IWorkspaceContextService, isTemporaryWorkspace } from '../../platform/workspace/common/workspace.js'; import { IWorkbenchLayoutService, Parts, positionToString } from '../services/layout/browser/layoutService.js'; import { getRemoteName } from '../../platform/remote/common/remoteHosts.js'; -@@ -70,7 +70,7 @@ export class WorkbenchContextKeysHandler +@@ -71,7 +71,7 @@ export class WorkbenchContextKeysHandler @IContextKeyService private readonly contextKeyService: IContextKeyService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IConfigurationService private readonly configurationService: IConfigurationService, @@ -148,9 +148,9 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @IProductService private readonly productService: IProductService, @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService, @IEditorService private readonly editorService: IEditorService, -@@ -197,6 +197,10 @@ export class WorkbenchContextKeysHandler - this.auxiliaryBarVisibleContext = AuxiliaryBarVisibleContext.bindTo(this.contextKeyService); - this.auxiliaryBarVisibleContext.set(this.layoutService.isVisible(Parts.AUXILIARYBAR_PART)); +@@ -200,6 +200,10 @@ export class WorkbenchContextKeysHandler + this.auxiliaryBarMaximizedContext = AuxiliaryBarMaximizedContext.bindTo(this.contextKeyService); + this.auxiliaryBarMaximizedContext.set(this.layoutService.isAuxiliaryBarMaximized()); + // code-server + IsEnabledFileDownloads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileDownloads ?? true) @@ -330,7 +330,7 @@ Index: code-server/lib/vscode/src/vs/platform/files/node/diskFileSystemProviderS =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/files/node/diskFileSystemProviderServer.ts +++ code-server/lib/vscode/src/vs/platform/files/node/diskFileSystemProviderServer.ts -@@ -92,6 +92,7 @@ export abstract class AbstractDiskFileSy +@@ -99,6 +99,7 @@ export abstract class AbstractDiskFileSy private async readFile(uriTransformer: IURITransformer, _resource: UriComponents, opts?: IFileAtomicReadOptions): Promise { const resource = this.transformIncoming(uriTransformer, _resource, true); @@ -338,7 +338,7 @@ Index: code-server/lib/vscode/src/vs/platform/files/node/diskFileSystemProviderS const buffer = await this.provider.readFile(resource, opts); return VSBuffer.wrap(buffer); -@@ -110,6 +111,7 @@ export abstract class AbstractDiskFileSy +@@ -117,6 +118,7 @@ export abstract class AbstractDiskFileSy } }); @@ -346,7 +346,7 @@ Index: code-server/lib/vscode/src/vs/platform/files/node/diskFileSystemProviderS const fileStream = this.provider.readFileStream(resource, opts, cts.token); listenStream(fileStream, { onData: chunk => emitter.fire(VSBuffer.wrap(chunk)), -@@ -130,7 +132,7 @@ export abstract class AbstractDiskFileSy +@@ -137,7 +139,7 @@ export abstract class AbstractDiskFileSy private writeFile(uriTransformer: IURITransformer, _resource: UriComponents, content: VSBuffer, opts: IFileWriteOptions): Promise { const resource = this.transformIncoming(uriTransformer, _resource); diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 4fd9efcc9225..09df5ddd9ece 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -181,7 +181,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -18,6 +18,7 @@ export const serverOptions: OptionDescri +@@ -20,6 +20,7 @@ export const serverOptions: OptionDescri 'auth': { type: 'string' }, 'disable-file-downloads': { type: 'boolean' }, 'disable-file-uploads': { type: 'boolean' }, @@ -189,7 +189,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -105,6 +106,7 @@ export interface ServerParsedArgs { +@@ -107,6 +108,7 @@ export interface ServerParsedArgs { 'auth'?: string; 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; @@ -217,12 +217,12 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; --import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; -+import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, IsEnabledFileDownloads, IsEnabledFileUploads, IsEnabledCoderGettingStarted, } from '../common/contextkeys.js'; +-import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; ++import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads, IsEnabledCoderGettingStarted, } from '../common/contextkeys.js'; import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; -@@ -200,6 +200,7 @@ export class WorkbenchContextKeysHandler +@@ -203,6 +203,7 @@ export class WorkbenchContextKeysHandler // code-server IsEnabledFileDownloads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileDownloads ?? true) IsEnabledFileUploads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileUploads ?? true) diff --git a/patches/logout.diff b/patches/logout.diff index 04a14be6203a..70be193dde84 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -20,7 +20,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -15,6 +15,7 @@ import { URI } from '../../base/common/u +@@ -17,6 +17,7 @@ import { join } from '../../base/common/ export const serverOptions: OptionDescriptions> = { /* ----- code-server ----- */ 'disable-update-check': { type: 'boolean' }, @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -99,6 +100,7 @@ export const serverOptions: OptionDescri +@@ -101,6 +102,7 @@ export const serverOptions: OptionDescri export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index 872733f8bdfb..c51a4daad126 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -96,7 +96,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts -@@ -19,6 +19,7 @@ import { ISecretStorageProvider } from ' +@@ -20,6 +20,7 @@ import { ISecretStorageProvider } from ' import { isFolderToOpen, isWorkspaceToOpen } from '../../../platform/window/common/window.js'; import type { IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from '../../../workbench/browser/web.api.js'; import { AuthenticationSessionInfo } from '../../../workbench/services/authentication/browser/authenticationService.js'; @@ -104,7 +104,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts import type { IURLCallbackProvider } from '../../../workbench/services/url/browser/urlService.js'; import { create } from '../../../workbench/workbench.web.main.internal.js'; -@@ -600,6 +601,39 @@ class WorkspaceProvider implements IWork +@@ -599,6 +600,39 @@ class WorkspaceProvider implements IWork settingsSyncOptions: config.settingsSyncOptions ? { enabled: config.settingsSyncOptions.enabled, } : undefined, workspaceProvider: WorkspaceProvider.create(config), urlCallbackProvider: new LocalStorageURLCallbackProvider(config.callbackRoute), diff --git a/patches/sourcemaps.diff b/patches/sourcemaps.diff index dd6bc63a4640..888bfa873220 100644 --- a/patches/sourcemaps.diff +++ b/patches/sourcemaps.diff @@ -10,29 +10,29 @@ Index: code-server/lib/vscode/build/gulpfile.reh.js =================================================================== --- code-server.orig/lib/vscode/build/gulpfile.reh.js +++ code-server/lib/vscode/build/gulpfile.reh.js -@@ -256,8 +256,7 @@ function packageTask(type, platform, arc +@@ -257,8 +257,7 @@ function packageTask(type, platform, arc const src = gulp.src(sourceFolderName + '/**', { base: '.' }) .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); })) - .pipe(util.setExecutableBit(['**/*.sh'])) -- .pipe(filter(['**', '!**/*.js.map'])); +- .pipe(filter(['**', '!**/*.{js,css}.map'])); + .pipe(util.setExecutableBit(['**/*.sh'])); const workspaceExtensionPoints = ['debuggers', 'jsonValidation']; const isUIExtension = (manifest) => { -@@ -296,9 +295,9 @@ function packageTask(type, platform, arc +@@ -297,9 +296,9 @@ function packageTask(type, platform, arc .map(name => `.build/extensions/${name}/**`); const extensions = gulp.src(extensionPaths, { base: '.build', dot: true }); - const extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true }); - const sources = es.merge(src, extensions, extensionsCommonDependencies) + const extensionsCommonDependencies = gulp.src('.build/extensions/node_modules/**', { base: '.build', dot: true }) - .pipe(filter(['**', '!**/*.js.map'], { dot: true })); + .pipe(filter(['**', '!**/*.{js,css}.map'], { dot: true })); + const sources = es.merge(src, extensions, extensionsCommonDependencies); let version = packageJson.version; const quality = product.quality; -@@ -451,7 +450,7 @@ function tweakProductForServerWeb(produc +@@ -452,7 +451,7 @@ function tweakProductForServerWeb(produc const minifyTask = task.define(`minify-vscode-${type}`, task.series( bundleTask, util.rimraf(`out-vscode-${type}-min`), diff --git a/patches/store-socket.diff b/patches/store-socket.diff index 60c65802c32e..31ae8ee7db35 100644 --- a/patches/store-socket.diff +++ b/patches/store-socket.diff @@ -25,7 +25,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extHostExtensionService. import { createApiFactoryAndRegisterActors } from '../common/extHost.api.impl.js'; @@ -18,6 +19,7 @@ import { ExtensionRuntime } from '../com import { CLIServer } from './extHostCLIServer.js'; - import { realpathSync } from '../../../base/node/extpath.js'; + import { realpathSync } from '../../../base/node/pfs.js'; import { ExtHostConsoleForwarder } from './extHostConsoleForwarder.js'; +import { IExtHostWorkspace } from '../common/extHostWorkspace.js'; import { ExtHostDiskFileSystemProvider } from './extHostDiskFileSystemProvider.js'; @@ -96,7 +96,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extensionHostProcess.ts import minimist from 'minimist'; import * as nativeWatchdog from 'native-watchdog'; import * as net from 'net'; -@@ -437,7 +438,28 @@ async function startExtensionHostProcess +@@ -436,7 +437,28 @@ async function startExtensionHostProcess ); // rewrite onTerminate-function to be a proper shutdown diff --git a/patches/telemetry.diff b/patches/telemetry.diff index ce5ae188c9f2..58eed73deb01 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { NullPolicyService } from '../../platform/policy/common/policy.js'; import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; -@@ -158,11 +160,23 @@ export async function setupServerService +@@ -163,11 +165,23 @@ export async function setupServerService const requestService = new RequestService('remote', configurationService, environmentService, logService); services.set(IRequestService, requestService); diff --git a/patches/trusted-domains.diff b/patches/trusted-domains.diff index d26343e9e4d4..d1ded15338dc 100644 --- a/patches/trusted-domains.diff +++ b/patches/trusted-domains.diff @@ -4,7 +4,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -20,6 +20,7 @@ export const serverOptions: OptionDescri +@@ -22,6 +22,7 @@ export const serverOptions: OptionDescri 'disable-file-uploads': { type: 'boolean' }, 'disable-getting-started-override': { type: 'boolean' }, 'locale': { type: 'string' }, @@ -12,7 +12,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -109,6 +110,7 @@ export interface ServerParsedArgs { +@@ -111,6 +112,7 @@ export interface ServerParsedArgs { 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, 'locale'?: string diff --git a/patches/update-check.diff b/patches/update-check.diff index faa6b07b20ba..4e968f8288aa 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -117,8 +117,8 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts +++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts -@@ -13,6 +13,8 @@ import { memoize } from '../../base/comm - import { URI } from '../../base/common/uri.js'; +@@ -15,6 +15,8 @@ import { joinPath } from '../../base/com + import { join } from '../../base/common/path.js'; export const serverOptions: OptionDescriptions> = { + /* ----- code-server ----- */ @@ -126,7 +126,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -95,6 +97,8 @@ export const serverOptions: OptionDescri +@@ -97,6 +99,8 @@ export const serverOptions: OptionDescri }; export interface ServerParsedArgs { From 8b3d9b9e0a2cec976df01b1e2e92611020bfcff4 Mon Sep 17 00:00:00 2001 From: Frank Lemanschik <117739566+lemanschik@users.noreply.github.com> Date: Tue, 15 Jul 2025 22:08:37 +0200 Subject: [PATCH 101/150] Use native node -p to get exec path (#7420) --- ci/build/build-standalone-release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/build/build-standalone-release.sh b/ci/build/build-standalone-release.sh index f4078557789b..b0833db810cb 100755 --- a/ci/build/build-standalone-release.sh +++ b/ci/build/build-standalone-release.sh @@ -16,7 +16,7 @@ main() { # Package managers may shim their own "node" wrapper into the PATH, so run # node and ask it for its true path. local node_path - node_path="$(node <<< 'console.info(process.execPath)')" + node_path="$(node -p process.execPath)" mkdir -p "$RELEASE_PATH/bin" mkdir -p "$RELEASE_PATH/lib" From 92fca0dcc372e1f21d48ada9e1ec0f9ee412151e Mon Sep 17 00:00:00 2001 From: Alex Strick van Linschoten Date: Tue, 15 Jul 2025 22:38:27 +0200 Subject: [PATCH 102/150] Add language customization flag (#7374) This allows you to customize any string (that has a translation) or add your own translations. --- docs/guide.md | 45 ++++++++++ src/node/cli.ts | 10 ++- src/node/i18n/index.ts | 60 +++++++++---- src/node/main.ts | 7 ++ src/node/routes/login.ts | 19 ++-- test/unit/node/cli.test.ts | 24 +++++ test/unit/node/i18n.test.ts | 154 +++++++++++++++++++++++++++++++ test/unit/node/main.test.ts | 175 ++++++++++++++++++++++++++++++++++++ 8 files changed, 471 insertions(+), 23 deletions(-) create mode 100644 test/unit/node/i18n.test.ts create mode 100644 test/unit/node/main.test.ts diff --git a/docs/guide.md b/docs/guide.md index 2835aac1567c..910e7e49b0ba 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -22,6 +22,9 @@ - [Proxying to a Svelte app](#proxying-to-a-svelte-app) - [Prefixing `/absproxy/` with a path](#prefixing-absproxyport-with-a-path) - [Preflight requests](#preflight-requests) +- [Internationalization and customization](#internationalization-and-customization) + - [Available keys and placeholders](#available-keys-and-placeholders) + - [Legacy flag](#legacy-flag) @@ -458,3 +461,45 @@ By default, if you have auth enabled, code-server will authenticate all proxied requests including preflight requests. This can cause issues because preflight requests do not typically include credentials. To allow all preflight requests through the proxy without authentication, use `--skip-auth-preflight`. + +## Internationalization and customization + +code-server allows you to provide a JSON file to configure certain strings. This can be used for both internationalization and customization. + +Create a JSON file with your custom strings: + +```json +{ + "WELCOME": "Welcome to {{app}}", + "LOGIN_TITLE": "{{app}} Access Portal", + "LOGIN_BELOW": "Please log in to continue", + "PASSWORD_PLACEHOLDER": "Enter Password" +} +``` + +Then reference the file: + +```shell +code-server --i18n /path/to/custom-strings.json +``` + +Or this can be done in the config file: + +```yaml +i18n: /path/to/custom-strings.json +``` + +You can combine this with the `--locale` flag to configure language support for both code-server and VS Code in cases where code-server has no support but VS Code does. If you are using this for internationalization, please consider sending us a pull request to contribute it to `src/node/i18n/locales`. + +### Available keys and placeholders + +Refer to [../src/node/i18n/locales/en.json](../src/node/i18n/locales/en.json) for a full list of the available keys for translations. Note that the only placeholders supported for each key are the ones used in the default string. + +The `--app-name` flag controls the `{{app}}` placeholder in templates. If you want to change the name, you can either: + +1. Set `--app-name` (potentially alongside `--i18n`) +2. Use `--i18n` and hardcode the name in your strings + +### Legacy flag + +The `--welcome-text` flag is now deprecated. Use the `WELCOME` key instead. diff --git a/src/node/cli.ts b/src/node/cli.ts index a29ec591e0a4..70ede42a0591 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -93,6 +93,7 @@ export interface UserProvidedArgs extends UserProvidedCodeArgs { "app-name"?: string "welcome-text"?: string "abs-proxy-base-path"?: string + i18n?: string /* Positional arguments. */ _?: string[] } @@ -284,17 +285,24 @@ export const options: Options> = { "app-name": { type: "string", short: "an", - description: "The name to use in branding. Will be shown in titlebar and welcome message", + description: + "Will replace the {{app}} placeholder in any strings, which by default includes the title bar and welcome message", }, "welcome-text": { type: "string", short: "w", description: "Text to show on login page", + deprecated: true, }, "abs-proxy-base-path": { type: "string", description: "The base path to prefix to all absproxy requests", }, + i18n: { + type: "string", + path: true, + description: "Path to JSON file with custom translations. Merges with default strings and supports all i18n keys.", + }, } export const optionDescriptions = (opts: Partial>> = options): string[] => { diff --git a/src/node/i18n/index.ts b/src/node/i18n/index.ts index 4ee718e13aa2..e8186067ba98 100644 --- a/src/node/i18n/index.ts +++ b/src/node/i18n/index.ts @@ -1,3 +1,4 @@ +import { promises as fs } from "fs" import i18next, { init } from "i18next" import * as en from "./locales/en.json" import * as ja from "./locales/ja.json" @@ -5,29 +6,54 @@ import * as th from "./locales/th.json" import * as ur from "./locales/ur.json" import * as zhCn from "./locales/zh-cn.json" +const defaultResources = { + en: { + translation: en, + }, + "zh-cn": { + translation: zhCn, + }, + th: { + translation: th, + }, + ja: { + translation: ja, + }, + ur: { + translation: ur, + }, +} + +export async function loadCustomStrings(filePath: string): Promise { + try { + // Read custom strings from file path only + const fileContent = await fs.readFile(filePath, "utf8") + const customStringsData = JSON.parse(fileContent) + + // User-provided strings override all languages. + Object.keys(defaultResources).forEach((locale) => { + i18next.addResourceBundle(locale, "translation", customStringsData) + }) + } catch (error) { + if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") { + throw new Error(`Custom strings file not found: ${filePath}\nPlease ensure the file exists and is readable.`) + } else if (error instanceof SyntaxError) { + throw new Error(`Invalid JSON in custom strings file: ${filePath}\n${error.message}`) + } else { + throw new Error( + `Failed to load custom strings from ${filePath}: ${error instanceof Error ? error.message : String(error)}`, + ) + } + } +} + init({ lng: "en", fallbackLng: "en", // language to use if translations in user language are not available. returnNull: false, lowerCaseLng: true, debug: process.env.NODE_ENV === "development", - resources: { - en: { - translation: en, - }, - "zh-cn": { - translation: zhCn, - }, - th: { - translation: th, - }, - ja: { - translation: ja, - }, - ur: { - translation: ur, - }, - }, + resources: defaultResources, }) export default i18next diff --git a/src/node/main.ts b/src/node/main.ts index 0d5c40928dfd..6f8e28dbdea7 100644 --- a/src/node/main.ts +++ b/src/node/main.ts @@ -7,6 +7,7 @@ import { plural } from "../common/util" import { createApp, ensureAddress } from "./app" import { AuthType, DefaultedArgs, Feature, toCodeArgs, UserProvidedArgs } from "./cli" import { commit, version, vsRootPath } from "./constants" +import { loadCustomStrings } from "./i18n" import { register } from "./routes" import { VSCodeModule } from "./routes/vscode" import { isDirectory, open } from "./util" @@ -122,6 +123,12 @@ export const runCodeServer = async ( ): Promise<{ dispose: Disposable["dispose"]; server: http.Server }> => { logger.info(`code-server ${version} ${commit}`) + // Load custom strings if provided + if (args.i18n) { + await loadCustomStrings(args.i18n) + logger.info("Loaded custom strings") + } + logger.info(`Using user-data-dir ${args["user-data-dir"]}`) logger.debug(`Using extensions-dir ${args["extensions-dir"]}`) diff --git a/src/node/routes/login.ts b/src/node/routes/login.ts index 29d51a59d13b..511d4817455e 100644 --- a/src/node/routes/login.ts +++ b/src/node/routes/login.ts @@ -31,23 +31,32 @@ const getRoot = async (req: Request, error?: Error): Promise => { const locale = req.args["locale"] || "en" i18n.changeLanguage(locale) const appName = req.args["app-name"] || "code-server" - const welcomeText = req.args["welcome-text"] || (i18n.t("WELCOME", { app: appName }) as string) + const welcomeText = escapeHtml(req.args["welcome-text"] || (i18n.t("WELCOME", { app: appName }) as string)) + + // Determine password message using i18n let passwordMsg = i18n.t("LOGIN_PASSWORD", { configFile: req.args.config }) if (req.args.usingEnvPassword) { passwordMsg = i18n.t("LOGIN_USING_ENV_PASSWORD") } else if (req.args.usingEnvHashedPassword) { passwordMsg = i18n.t("LOGIN_USING_HASHED_PASSWORD") } + passwordMsg = escapeHtml(passwordMsg) + + // Get messages from i18n (with HTML escaping for security) + const loginTitle = escapeHtml(i18n.t("LOGIN_TITLE", { app: appName })) + const loginBelow = escapeHtml(i18n.t("LOGIN_BELOW")) + const passwordPlaceholder = escapeHtml(i18n.t("PASSWORD_PLACEHOLDER")) + const submitText = escapeHtml(i18n.t("SUBMIT")) return replaceTemplates( req, content - .replace(/{{I18N_LOGIN_TITLE}}/g, i18n.t("LOGIN_TITLE", { app: appName })) + .replace(/{{I18N_LOGIN_TITLE}}/g, loginTitle) .replace(/{{WELCOME_TEXT}}/g, welcomeText) .replace(/{{PASSWORD_MSG}}/g, passwordMsg) - .replace(/{{I18N_LOGIN_BELOW}}/g, i18n.t("LOGIN_BELOW")) - .replace(/{{I18N_PASSWORD_PLACEHOLDER}}/g, i18n.t("PASSWORD_PLACEHOLDER")) - .replace(/{{I18N_SUBMIT}}/g, i18n.t("SUBMIT")) + .replace(/{{I18N_LOGIN_BELOW}}/g, loginBelow) + .replace(/{{I18N_PASSWORD_PLACEHOLDER}}/g, passwordPlaceholder) + .replace(/{{I18N_SUBMIT}}/g, submitText) .replace(/{{ERROR}}/, error ? `

${escapeHtml(error.message)}
` : ""), ) } diff --git a/test/unit/node/cli.test.ts b/test/unit/node/cli.test.ts index d62edb840464..668a3c55776c 100644 --- a/test/unit/node/cli.test.ts +++ b/test/unit/node/cli.test.ts @@ -75,6 +75,7 @@ describe("parser", () => { "--verbose", ["--app-name", "custom instance name"], ["--welcome-text", "welcome to code"], + ["--i18n", "path/to/custom-strings.json"], "2", ["--locale", "ja"], @@ -145,6 +146,7 @@ describe("parser", () => { verbose: true, "app-name": "custom instance name", "welcome-text": "welcome to code", + i18n: path.resolve("path/to/custom-strings.json"), version: true, "bind-addr": "192.169.0.1:8080", "session-socket": "/tmp/override-code-server-ipc-socket", @@ -347,6 +349,28 @@ describe("parser", () => { }) }) + it("should parse i18n flag with file path", async () => { + // Test with file path (no validation at CLI parsing level) + const args = parse(["--i18n", "/path/to/custom-strings.json"]) + expect(args).toEqual({ + i18n: "/path/to/custom-strings.json", + }) + }) + + it("should parse i18n flag with relative file path", async () => { + // Test with relative file path + expect(() => parse(["--i18n", "./custom-strings.json"])).not.toThrow() + expect(() => parse(["--i18n", "strings.json"])).not.toThrow() + }) + + it("should support app-name and deprecated welcome-text flags", async () => { + const args = parse(["--app-name", "My App", "--welcome-text", "Welcome!"]) + expect(args).toEqual({ + "app-name": "My App", + "welcome-text": "Welcome!", + }) + }) + it("should use env var github token", async () => { process.env.GITHUB_TOKEN = "ga-foo" const args = parse([]) diff --git a/test/unit/node/i18n.test.ts b/test/unit/node/i18n.test.ts new file mode 100644 index 000000000000..90b10d04822c --- /dev/null +++ b/test/unit/node/i18n.test.ts @@ -0,0 +1,154 @@ +import { promises as fs } from "fs" +import * as os from "os" +import * as path from "path" +import { loadCustomStrings } from "../../../src/node/i18n" + +describe("i18n", () => { + let tempDir: string + let validJsonFile: string + let invalidJsonFile: string + let nonExistentFile: string + + beforeEach(async () => { + // Create temporary directory for test files + tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "code-server-i18n-test-")) + + // Create test files + validJsonFile = path.join(tempDir, "valid.json") + invalidJsonFile = path.join(tempDir, "invalid.json") + nonExistentFile = path.join(tempDir, "does-not-exist.json") + + // Write valid JSON file + await fs.writeFile( + validJsonFile, + JSON.stringify({ + WELCOME: "Custom Welcome", + LOGIN_TITLE: "My Custom App", + LOGIN_BELOW: "Please log in to continue", + }), + ) + + // Write invalid JSON file + await fs.writeFile(invalidJsonFile, '{"WELCOME": "Missing closing quote}') + }) + + afterEach(async () => { + // Clean up temporary directory + await fs.rmdir(tempDir, { recursive: true }) + }) + + describe("loadCustomStrings", () => { + it("should load valid JSON file successfully", async () => { + // Should not throw an error + await expect(loadCustomStrings(validJsonFile)).resolves.toBeUndefined() + }) + + it("should throw clear error for non-existent file", async () => { + await expect(loadCustomStrings(nonExistentFile)).rejects.toThrow( + `Custom strings file not found: ${nonExistentFile}\nPlease ensure the file exists and is readable.`, + ) + }) + + it("should throw clear error for invalid JSON", async () => { + await expect(loadCustomStrings(invalidJsonFile)).rejects.toThrow( + `Invalid JSON in custom strings file: ${invalidJsonFile}`, + ) + }) + + it("should handle empty JSON object", async () => { + const emptyJsonFile = path.join(tempDir, "empty.json") + await fs.writeFile(emptyJsonFile, "{}") + + await expect(loadCustomStrings(emptyJsonFile)).resolves.toBeUndefined() + }) + + it("should handle nested JSON objects", async () => { + const nestedJsonFile = path.join(tempDir, "nested.json") + await fs.writeFile( + nestedJsonFile, + JSON.stringify({ + WELCOME: "Hello World", + NESTED: { + KEY: "Value", + }, + }), + ) + + await expect(loadCustomStrings(nestedJsonFile)).resolves.toBeUndefined() + }) + + it("should handle special characters and unicode", async () => { + const unicodeJsonFile = path.join(tempDir, "unicode.json") + await fs.writeFile( + unicodeJsonFile, + JSON.stringify({ + WELCOME: "欢迎来到 code-server", + LOGIN_TITLE: "Willkommen bei {{app}}", + SPECIAL: "Special chars: àáâãäåæçèéêë 🚀 ♠️ ∆", + }), + "utf8", + ) + + await expect(loadCustomStrings(unicodeJsonFile)).resolves.toBeUndefined() + }) + + it("should handle generic errors that are not ENOENT or SyntaxError", async () => { + const testFile = path.join(tempDir, "test.json") + await fs.writeFile(testFile, "{}") + + // Mock fs.readFile to throw a generic error + const originalReadFile = fs.readFile + const mockError = new Error("Permission denied") + fs.readFile = jest.fn().mockRejectedValue(mockError) + + await expect(loadCustomStrings(testFile)).rejects.toThrow( + `Failed to load custom strings from ${testFile}: Permission denied`, + ) + + // Restore original function + fs.readFile = originalReadFile + }) + + it("should handle errors that are not Error instances", async () => { + const testFile = path.join(tempDir, "test.json") + await fs.writeFile(testFile, "{}") + + // Mock fs.readFile to throw a non-Error object + const originalReadFile = fs.readFile + fs.readFile = jest.fn().mockRejectedValue("String error") + + await expect(loadCustomStrings(testFile)).rejects.toThrow( + `Failed to load custom strings from ${testFile}: String error`, + ) + + // Restore original function + fs.readFile = originalReadFile + }) + + it("should handle null/undefined errors", async () => { + const testFile = path.join(tempDir, "test.json") + await fs.writeFile(testFile, "{}") + + // Mock fs.readFile to throw null + const originalReadFile = fs.readFile + fs.readFile = jest.fn().mockRejectedValue(null) + + await expect(loadCustomStrings(testFile)).rejects.toThrow(`Failed to load custom strings from ${testFile}: null`) + + // Restore original function + fs.readFile = originalReadFile + }) + + it("should complete without errors for valid input", async () => { + const testFile = path.join(tempDir, "resource-test.json") + const customStrings = { + WELCOME: "Custom Welcome Message", + LOGIN_TITLE: "Custom Login Title", + } + await fs.writeFile(testFile, JSON.stringify(customStrings)) + + // Should not throw any errors + await expect(loadCustomStrings(testFile)).resolves.toBeUndefined() + }) + }) +}) diff --git a/test/unit/node/main.test.ts b/test/unit/node/main.test.ts new file mode 100644 index 000000000000..09ee6b512ef9 --- /dev/null +++ b/test/unit/node/main.test.ts @@ -0,0 +1,175 @@ +import { promises as fs } from "fs" +import * as path from "path" +import { setDefaults, parse } from "../../../src/node/cli" +import { loadCustomStrings } from "../../../src/node/i18n" +import { tmpdir } from "../../utils/helpers" + +// Mock the i18n module +jest.mock("../../../src/node/i18n", () => ({ + loadCustomStrings: jest.fn(), +})) + +// Mock logger to avoid console output during tests +jest.mock("@coder/logger", () => ({ + logger: { + info: jest.fn(), + debug: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + level: 0, + }, + field: jest.fn(), + Level: { + Trace: 0, + Debug: 1, + Info: 2, + Warn: 3, + Error: 4, + }, +})) + +const mockedLoadCustomStrings = loadCustomStrings as jest.MockedFunction + +describe("main", () => { + let tempDir: string + let mockServer: any + + beforeEach(async () => { + tempDir = await tmpdir("code-server-main-test") + + // Reset mocks + jest.clearAllMocks() + + // Mock the server creation to avoid actually starting a server + mockServer = { + server: { + listen: jest.fn(), + address: jest.fn(() => ({ address: "127.0.0.1", port: 8080 })), + close: jest.fn(), + }, + editorSessionManagerServer: { + address: jest.fn(() => null), + }, + dispose: jest.fn(), + } + }) + + afterEach(async () => { + // Clean up temp directory + try { + await fs.rmdir(tempDir, { recursive: true }) + } catch (error) { + // Ignore cleanup errors + } + }) + + describe("runCodeServer", () => { + it("should load custom strings when i18n flag is provided", async () => { + // Create a test custom strings file + const customStringsFile = path.join(tempDir, "custom-strings.json") + await fs.writeFile( + customStringsFile, + JSON.stringify({ + WELCOME: "Custom Welcome", + LOGIN_TITLE: "My App", + }), + ) + + // Create args with i18n flag + const cliArgs = parse([ + `--config=${path.join(tempDir, "config.yaml")}`, + `--user-data-dir=${tempDir}`, + "--bind-addr=localhost:0", + "--log=warn", + "--auth=none", + `--i18n=${customStringsFile}`, + ]) + const args = await setDefaults(cliArgs) + + // Mock the app module + jest.doMock("../../../src/node/app", () => ({ + createApp: jest.fn().mockResolvedValue(mockServer), + ensureAddress: jest.fn().mockReturnValue(new URL("http://localhost:8080/")), + })) + + // Mock routes module + jest.doMock("../../../src/node/routes", () => ({ + register: jest.fn().mockResolvedValue(jest.fn()), + })) + + // Mock loadCustomStrings to succeed + mockedLoadCustomStrings.mockResolvedValue(undefined) + + // Import runCodeServer after mocking + const mainModule = await import("../../../src/node/main") + const result = await mainModule.runCodeServer(args) + + // Verify that loadCustomStrings was called with the correct file path + expect(mockedLoadCustomStrings).toHaveBeenCalledWith(customStringsFile) + expect(mockedLoadCustomStrings).toHaveBeenCalledTimes(1) + + // Clean up + await result.dispose() + }) + + it("should not load custom strings when i18n flag is not provided", async () => { + // Create args without i18n flag + const cliArgs = parse([ + `--config=${path.join(tempDir, "config.yaml")}`, + `--user-data-dir=${tempDir}`, + "--bind-addr=localhost:0", + "--log=warn", + "--auth=none", + ]) + const args = await setDefaults(cliArgs) + + // Mock the app module + jest.doMock("../../../src/node/app", () => ({ + createApp: jest.fn().mockResolvedValue(mockServer), + ensureAddress: jest.fn().mockReturnValue(new URL("http://localhost:8080/")), + })) + + // Mock routes module + jest.doMock("../../../src/node/routes", () => ({ + register: jest.fn().mockResolvedValue(jest.fn()), + })) + + // Import runCodeServer after mocking + const mainModule = await import("../../../src/node/main") + const result = await mainModule.runCodeServer(args) + + // Verify that loadCustomStrings was NOT called + expect(mockedLoadCustomStrings).not.toHaveBeenCalled() + + // Clean up + await result.dispose() + }) + + it("should handle errors when loadCustomStrings fails", async () => { + // Create args with i18n flag pointing to non-existent file + const nonExistentFile = path.join(tempDir, "does-not-exist.json") + const cliArgs = parse([ + `--config=${path.join(tempDir, "config.yaml")}`, + `--user-data-dir=${tempDir}`, + "--bind-addr=localhost:0", + "--log=warn", + "--auth=none", + `--i18n=${nonExistentFile}`, + ]) + const args = await setDefaults(cliArgs) + + // Mock loadCustomStrings to throw an error + const mockError = new Error("Custom strings file not found") + mockedLoadCustomStrings.mockRejectedValue(mockError) + + // Import runCodeServer after mocking + const mainModule = await import("../../../src/node/main") + + // Verify that runCodeServer throws the error from loadCustomStrings + await expect(mainModule.runCodeServer(args)).rejects.toThrow("Custom strings file not found") + + // Verify that loadCustomStrings was called + expect(mockedLoadCustomStrings).toHaveBeenCalledWith(nonExistentFile) + }) + }) +}) From 740a2d3aa31e1434550b55dba160a28db02a93d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:39:08 -0800 Subject: [PATCH 103/150] chore: bump aquasecurity/trivy-action from 0.30.0 to 0.31.0 (#7408) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.30.0 to 0.31.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5...76071ef0d7ec797419534a183b498b4d6366cf37) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-version: 0.31.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security.yaml | 2 +- .github/workflows/trivy-docker.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index 03dbcf508103..8ba06765d467 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -51,7 +51,7 @@ jobs: fetch-depth: 0 - name: Run Trivy vulnerability scanner in repo mode - uses: aquasecurity/trivy-action@6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5 + uses: aquasecurity/trivy-action@76071ef0d7ec797419534a183b498b4d6366cf37 with: scan-type: "fs" scan-ref: "." diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index b60f0fcc9fff..b769346c3a4b 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -51,7 +51,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in image mode - uses: aquasecurity/trivy-action@6c175e9c4083a92bbca2f9724c8a5e33bc2d97a5 + uses: aquasecurity/trivy-action@76071ef0d7ec797419534a183b498b4d6366cf37 with: image-ref: "docker.io/codercom/code-server:latest" ignore-unfixed: true From bbe1b7fecbca6f3ed2401d3b10232f9c0cf340a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:40:04 -0800 Subject: [PATCH 104/150] chore: bump i18next from 23.16.4 to 25.3.0 (#7406) Bumps [i18next](https://github.com/i18next/i18next) from 23.16.4 to 25.3.0. - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v23.16.4...v25.3.0) --- updated-dependencies: - dependency-name: i18next dependency-version: 25.3.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 35 +++++++++++++++++------------------ package.json | 2 +- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 81e34569153c..6c4296f79729 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "express": "^5.0.1", "http-proxy": "^1.18.1", "httpolyglot": "^0.1.2", - "i18next": "^23.5.1", + "i18next": "^25.3.0", "js-yaml": "^4.1.0", "limiter": "^2.1.0", "pem": "^1.14.8", @@ -70,13 +70,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "engines": { "node": ">=6.9.0" } @@ -3317,9 +3313,9 @@ } }, "node_modules/i18next": { - "version": "23.16.4", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.4.tgz", - "integrity": "sha512-9NIYBVy9cs4wIqzurf7nLXPyf3R78xYbxExVqHLK9od3038rjpyOEzW+XB130kZ1N4PZ9inTtJ471CRJ4Ituyg==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.3.0.tgz", + "integrity": "sha512-ZSQIiNGfqSG6yoLHaCvrkPp16UejHI8PCDxFYaNG/1qxtmqNmqEg4JlWKlxkrUmrin2sEjsy+Mjy1TRozBhOgw==", "funding": [ { "type": "individual", @@ -3335,7 +3331,15 @@ } ], "dependencies": { - "@babel/runtime": "^7.23.2" + "@babel/runtime": "^7.27.6" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/iconv-lite": { @@ -5025,11 +5029,6 @@ "node": ">= 6" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", @@ -6080,7 +6079,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index 1a2fe6524020..1a22f866b681 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "express": "^5.0.1", "http-proxy": "^1.18.1", "httpolyglot": "^0.1.2", - "i18next": "^23.5.1", + "i18next": "^25.3.0", "js-yaml": "^4.1.0", "limiter": "^2.1.0", "pem": "^1.14.8", From 4029c1ec8f0c962277a5a988bf17556f6cc07060 Mon Sep 17 00:00:00 2001 From: Asher Date: Tue, 15 Jul 2025 15:03:43 -0800 Subject: [PATCH 105/150] Use Debian archives Looks like buster has reached the end of its life, but updating to bullseye would increase the glibc version. --- .github/workflows/release.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ee9039f926c8..d5223c0485cb 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -73,6 +73,7 @@ jobs: - name: Install cross-compiler and system dependencies run: | + sed -i 's/deb\.debian\.org/archive.debian.org/g' /etc/apt/sources.list dpkg --add-architecture $TARGET_ARCH apt update && apt install -y --no-install-recommends \ crossbuild-essential-$TARGET_ARCH \ From 0f9a0e8fb311f3a796b7590b935dae2e372dc1e8 Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 16 Jul 2025 18:07:27 -0800 Subject: [PATCH 106/150] Revert escaping for i18n strings Looks like the library already escapes, so we were getting double escaping. --- src/node/routes/login.ts | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/node/routes/login.ts b/src/node/routes/login.ts index 511d4817455e..7a8bb5134c68 100644 --- a/src/node/routes/login.ts +++ b/src/node/routes/login.ts @@ -31,7 +31,7 @@ const getRoot = async (req: Request, error?: Error): Promise => { const locale = req.args["locale"] || "en" i18n.changeLanguage(locale) const appName = req.args["app-name"] || "code-server" - const welcomeText = escapeHtml(req.args["welcome-text"] || (i18n.t("WELCOME", { app: appName }) as string)) + const welcomeText = req.args["welcome-text"] || (i18n.t("WELCOME", { app: appName }) as string) // Determine password message using i18n let passwordMsg = i18n.t("LOGIN_PASSWORD", { configFile: req.args.config }) @@ -40,23 +40,16 @@ const getRoot = async (req: Request, error?: Error): Promise => { } else if (req.args.usingEnvHashedPassword) { passwordMsg = i18n.t("LOGIN_USING_HASHED_PASSWORD") } - passwordMsg = escapeHtml(passwordMsg) - - // Get messages from i18n (with HTML escaping for security) - const loginTitle = escapeHtml(i18n.t("LOGIN_TITLE", { app: appName })) - const loginBelow = escapeHtml(i18n.t("LOGIN_BELOW")) - const passwordPlaceholder = escapeHtml(i18n.t("PASSWORD_PLACEHOLDER")) - const submitText = escapeHtml(i18n.t("SUBMIT")) return replaceTemplates( req, content - .replace(/{{I18N_LOGIN_TITLE}}/g, loginTitle) + .replace(/{{I18N_LOGIN_TITLE}}/g, i18n.t("LOGIN_TITLE", { app: appName })) .replace(/{{WELCOME_TEXT}}/g, welcomeText) .replace(/{{PASSWORD_MSG}}/g, passwordMsg) - .replace(/{{I18N_LOGIN_BELOW}}/g, loginBelow) - .replace(/{{I18N_PASSWORD_PLACEHOLDER}}/g, passwordPlaceholder) - .replace(/{{I18N_SUBMIT}}/g, submitText) + .replace(/{{I18N_LOGIN_BELOW}}/g, i18n.t("LOGIN_BELOW")) + .replace(/{{I18N_PASSWORD_PLACEHOLDER}}/g, i18n.t("PASSWORD_PLACEHOLDER")) + .replace(/{{I18N_SUBMIT}}/g, i18n.t("SUBMIT")) .replace(/{{ERROR}}/, error ? `
${escapeHtml(error.message)}
` : ""), ) } From f26309a23c7b09e52cb68ff95fc7f4d461dc7cac Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 16 Jul 2025 18:56:42 -0800 Subject: [PATCH 107/150] Release v4.102.0 --- CHANGELOG.md | 16 ++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- docs/guide.md | 15 +++++++++++---- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f166196192b5..736ce7e7743f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,22 @@ Code v99.99.999 ## Unreleased +## [4.102.0](https://github.com/coder/code-server/releases/tag/v4.102.0) - 2025-07-16 + +Code v1.102.0 + +### Changed + +- Update to Code 1.102.0. + +### Added + +- Custom strings can be configured using the `--i18n` flag set to a JSON + file. This can be used for either translation (and can be used alongside + `--locale`) or for customizing the strings. See + [./src/node/i18n/locales/en.json](./src/node/i18n/locales/en.json) for the + available keys. + ## [4.101.2](https://github.com/coder/code-server/releases/tag/v4.101.2) - 2025-06-25 Code v1.101.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 65bb068fe427..739ec7e86ff3 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.28.1 +version: 3.29.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.101.2 +appVersion: 4.102.0 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index d05514135593..48d219ac4929 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.101.2' + tag: '4.102.0' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a diff --git a/docs/guide.md b/docs/guide.md index 910e7e49b0ba..0aa8901c36a1 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -464,7 +464,8 @@ through the proxy without authentication, use `--skip-auth-preflight`. ## Internationalization and customization -code-server allows you to provide a JSON file to configure certain strings. This can be used for both internationalization and customization. +code-server allows you to provide a JSON file to configure certain strings. This +can be used for both internationalization and customization. Create a JSON file with your custom strings: @@ -489,13 +490,19 @@ Or this can be done in the config file: i18n: /path/to/custom-strings.json ``` -You can combine this with the `--locale` flag to configure language support for both code-server and VS Code in cases where code-server has no support but VS Code does. If you are using this for internationalization, please consider sending us a pull request to contribute it to `src/node/i18n/locales`. +You can combine this with the `--locale` flag to configure language support for +both code-server and VS Code in cases where code-server has no support but VS +Code does. If you are using this for internationalization, please consider +sending us a pull request to contribute it to `src/node/i18n/locales`. ### Available keys and placeholders -Refer to [../src/node/i18n/locales/en.json](../src/node/i18n/locales/en.json) for a full list of the available keys for translations. Note that the only placeholders supported for each key are the ones used in the default string. +Refer to [../src/node/i18n/locales/en.json](../src/node/i18n/locales/en.json) +for a full list of the available keys for translations. Note that the only +placeholders supported for each key are the ones used in the default string. -The `--app-name` flag controls the `{{app}}` placeholder in templates. If you want to change the name, you can either: +The `--app-name` flag controls the `{{app}}` placeholder in templates. If you +want to change the name, you can either: 1. Set `--app-name` (potentially alongside `--i18n`) 2. Use `--i18n` and hardcode the name in your strings From 47e9d43922b5764e3ead3bbf31d9ad23676604d6 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 17 Jul 2025 20:55:37 +0200 Subject: [PATCH 108/150] Update Code to 1.102.1 (#7424) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index cb0c47c0cfaa..7adae6a56e34 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit cb0c47c0cfaad0757385834bd89d410c78a856c0 +Subproject commit 7adae6a56e34cb64d08899664b814cf620465925 From aaf2d91a21dc3b2eec7898d50162423458d7f0dc Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 17 Jul 2025 13:24:33 -0800 Subject: [PATCH 109/150] Deleted unused and outdated afdesign file --- src/browser/favicon.afdesign | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 src/browser/favicon.afdesign diff --git a/src/browser/favicon.afdesign b/src/browser/favicon.afdesign deleted file mode 100644 index b654f32e82b1..000000000000 --- a/src/browser/favicon.afdesign +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:625d2049c38ae27df0613fa533020e889fa98affd603050f46d3748be7b90d0b -size 38675 From 84728f0b21c029c924a9edbf83fbbc8b75ea58fd Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 17 Jul 2025 13:23:36 -0800 Subject: [PATCH 110/150] Release v4.102.1 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 736ce7e7743f..b67af1c34155 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.102.1](https://github.com/coder/code-server/releases/tag/v4.102.1) - 2025-07-17 + +Code v1.102.1 + +### Changed + +- Update to Code 1.102.1. + ## [4.102.0](https://github.com/coder/code-server/releases/tag/v4.102.0) - 2025-07-16 Code v1.102.0 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 739ec7e86ff3..12645cd6f3be 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.29.0 +version: 3.29.1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.102.0 +appVersion: 4.102.1 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 48d219ac4929..0728508a2507 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.102.0' + tag: '4.102.1' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From fe7db4900a69b005de18f4aaad684af35599e95d Mon Sep 17 00:00:00 2001 From: Sheldon Tsen Date: Tue, 22 Jul 2025 18:17:44 +0100 Subject: [PATCH 111/150] Update values.yaml to better support dind (#7431) --- ci/helm-chart/values.yaml | 47 ++++++++++++++++++++++++++------------- docs/FAQ.md | 3 +++ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 0728508a2507..5c43740e7256 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -75,8 +75,9 @@ extraArgs: [] extraVars: [] # - name: DISABLE_TELEMETRY # value: "true" +# if dind is desired: # - name: DOCKER_HOST -# value: "tcp://localhost:2375" +# value: "tcp://localhost:2376" ## ## Init containers parameters: @@ -139,25 +140,39 @@ lifecycle: # - -c # - curl -s -L SOME_SCRIPT | bash + # for dind, the following may be helpful + # postStart: + # exec: + # command: + # - /bin/sh + # - -c + # - | + # sudo apt-get update \ + # && sudo apt-get install -y docker.io + ## Enable an Specify container in extraContainers. ## This is meant to allow adding code-server dependencies, like docker-dind. extraContainers: | # If docker-dind is used, DOCKER_HOST env is mandatory to set in "extraVars" -#- name: docker-dind -# image: docker:19.03-dind -# imagePullPolicy: IfNotPresent -# resources: -# requests: -# cpu: 250m -# memory: 256M -# securityContext: -# privileged: true -# procMount: Default -# env: -# - name: DOCKER_TLS_CERTDIR -# value: "" -# - name: DOCKER_DRIVER -# value: "overlay2" +# - name: docker-dind +# image: docker:28.3.2-dind +# imagePullPolicy: IfNotPresent +# resources: +# requests: +# cpu: 1 +# ephemeral-storage: "50Gi" +# memory: 10Gi +# securityContext: +# privileged: true +# procMount: Default +# env: +# - name: DOCKER_TLS_CERTDIR +# value: "" # disable TLS setup +# command: +# - dockerd +# - --host=unix:///var/run/docker.sock +# - --host=tcp://0.0.0.0:2376 + extraInitContainers: | # - name: customization diff --git a/docs/FAQ.md b/docs/FAQ.md index c46c003b8800..2e01306cb2f2 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -383,6 +383,9 @@ mount into `/home/coder/myproject` from inside the `code-server` container. You need to make sure the Docker daemon's `/home/coder/myproject` is the same as the one mounted inside the `code-server` container, and the mount will work. +If you want Docker enabled when deploying on Kubernetes, look at the `values.yaml` +file for the 3 fields: `extraVars`, `lifecycle.postStart`, and `extraContainers`. + ## How do I disable telemetry? Use the `--disable-telemetry` flag to disable telemetry. From 9f6d18ea2695805cfd7e90993b11b29f726fbed0 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Thu, 24 Jul 2025 22:07:27 +0200 Subject: [PATCH 112/150] Update Code to 1.102.2 (#7436) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 7adae6a56e34..c306e94f9812 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 7adae6a56e34cb64d08899664b814cf620465925 +Subproject commit c306e94f98122556ca081f527b466015e1bc37b0 From b1ad6ffcb90403872b6f09e169a8c4c2c55aae08 Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 24 Jul 2025 14:08:12 -0800 Subject: [PATCH 113/150] Release v4.102.2 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b67af1c34155..579c5653503d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.102.2](https://github.com/coder/code-server/releases/tag/v4.102.2) - 2025-07-24 + +Code v1.102.2 + +### Changed + +- Update to Code 1.102.2. + ## [4.102.1](https://github.com/coder/code-server/releases/tag/v4.102.1) - 2025-07-17 Code v1.102.1 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 12645cd6f3be..d7fddbc3a5bf 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.29.1 +version: 3.29.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.102.1 +appVersion: 4.102.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 5c43740e7256..cfd4da3c0776 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.102.1' + tag: '4.102.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 6f3d0a7e5ae5f6623e1963e96adabc3287386006 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Wed, 30 Jul 2025 21:28:34 +0200 Subject: [PATCH 114/150] Update Code to 1.102.3 (#7444) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index c306e94f9812..488a1f239235 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit c306e94f98122556ca081f527b466015e1bc37b0 +Subproject commit 488a1f239235055e34e673291fb8d8c810886f81 From 1805daed07fd66f87ba19582c7e588997a46a851 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 10:31:21 -0800 Subject: [PATCH 115/150] chore: bump aquasecurity/trivy-action from 0.31.0 to 0.32.0 (#7450) Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.31.0 to 0.32.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](https://github.com/aquasecurity/trivy-action/compare/76071ef0d7ec797419534a183b498b4d6366cf37...dc5a429b52fcf669ce959baa2c2dd26090d2a6c4) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-version: 0.32.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/security.yaml | 2 +- .github/workflows/trivy-docker.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index 8ba06765d467..a14094d92e82 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -51,7 +51,7 @@ jobs: fetch-depth: 0 - name: Run Trivy vulnerability scanner in repo mode - uses: aquasecurity/trivy-action@76071ef0d7ec797419534a183b498b4d6366cf37 + uses: aquasecurity/trivy-action@dc5a429b52fcf669ce959baa2c2dd26090d2a6c4 with: scan-type: "fs" scan-ref: "." diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index b769346c3a4b..06ca72ae6429 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -51,7 +51,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in image mode - uses: aquasecurity/trivy-action@76071ef0d7ec797419534a183b498b4d6366cf37 + uses: aquasecurity/trivy-action@dc5a429b52fcf669ce959baa2c2dd26090d2a6c4 with: image-ref: "docker.io/codercom/code-server:latest" ignore-unfixed: true From bc15fa461c549ba260dbf1752a4f7204e49a2493 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 10:31:50 -0800 Subject: [PATCH 116/150] chore: bump form-data in /test (#7430) --- updated-dependencies: - dependency-name: form-data dependency-version: 4.0.4 dependency-type: indirect - dependency-name: form-data dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/package-lock.json | 155 ++++++++++++++++++++++++++++++++--------- 1 file changed, 123 insertions(+), 32 deletions(-) diff --git a/test/package-lock.json b/test/package-lock.json index 70d29a4fdb30..5a76f5b32fe8 100644 --- a/test/package-lock.json +++ b/test/package-lock.json @@ -1709,6 +1709,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2130,6 +2144,21 @@ "node": ">=8" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.32", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz", @@ -2178,14 +2207,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -2200,6 +2226,35 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2421,14 +2476,16 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -2559,17 +2616,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2588,6 +2650,20 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -2637,13 +2713,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2679,10 +2755,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -2692,12 +2768,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -3764,15 +3843,17 @@ } }, "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -3918,6 +3999,16 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", From b5a2ce252214b4542744a1e92e468797eb9b8150 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 4 Aug 2025 11:05:48 -0800 Subject: [PATCH 117/150] Use error handler in session server (#7455) --- src/node/vscodeSocket.ts | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/node/vscodeSocket.ts b/src/node/vscodeSocket.ts index 4af30ae91a4f..e01d1a15012b 100644 --- a/src/node/vscodeSocket.ts +++ b/src/node/vscodeSocket.ts @@ -2,8 +2,9 @@ import { logger } from "@coder/logger" import express from "express" import * as http from "http" import * as path from "path" -import { HttpCode } from "../common/http" +import { HttpCode, HttpError } from "../common/http" import { listen } from "./app" +import { errorHandler } from "./routes/errors" import { canConnect } from "./util" export interface EditorSessionEntry { @@ -44,24 +45,18 @@ export async function makeEditorSessionManagerServer( async (req, res) => { const filePath = req.query.filePath if (!filePath) { - res.status(HttpCode.BadRequest).send("filePath is required") - return - } - try { - const socketPath = await editorSessionManager.getConnectedSocketPath(filePath) - const response: GetSessionResponse = { socketPath } - res.json(response) - } catch (error: unknown) { - res.status(HttpCode.ServerError).send(error) + throw new HttpError("filePath is required", HttpCode.BadRequest) } + const socketPath = await editorSessionManager.getConnectedSocketPath(filePath) + const response: GetSessionResponse = { socketPath } + res.json(response) }, ) router.post<{}, string, AddSessionRequest | undefined>("/add-session", async (req, res) => { const entry = req.body?.entry if (!entry) { - res.status(400).send("entry is required") - return + throw new HttpError("entry is required", HttpCode.BadRequest) } editorSessionManager.addSession(entry) res.status(200).send("session added") @@ -70,13 +65,14 @@ export async function makeEditorSessionManagerServer( router.post<{}, string, DeleteSessionRequest | undefined>("/delete-session", async (req, res) => { const socketPath = req.body?.socketPath if (!socketPath) { - res.status(400).send("socketPath is required") - return + throw new HttpError("socketPath is required", HttpCode.BadRequest) } editorSessionManager.deleteSession(socketPath) res.status(200).send("session deleted") }) + router.use(errorHandler) + const server = http.createServer(router) try { await listen(server, { socket: codeServerSocketPath }) From 794def9a77336f6a8859a5ed10cf0f4286ec9e9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 11:33:51 -0800 Subject: [PATCH 118/150] chore: bump on-headers and compression (#7427) Bumps [on-headers](https://github.com/jshttp/on-headers) to 1.1.0 and updates ancestor dependency [compression](https://github.com/expressjs/compression). These dependencies need to be updated together. Updates `on-headers` from 1.0.2 to 1.1.0 - [Release notes](https://github.com/jshttp/on-headers/releases) - [Changelog](https://github.com/jshttp/on-headers/blob/master/HISTORY.md) - [Commits](https://github.com/jshttp/on-headers/compare/v1.0.2...v1.1.0) Updates `compression` from 1.8.0 to 1.8.1 - [Release notes](https://github.com/expressjs/compression/releases) - [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/compression/compare/1.8.0...v1.8.1) --- updated-dependencies: - dependency-name: on-headers dependency-version: 1.1.0 dependency-type: indirect - dependency-name: compression dependency-version: 1.8.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c4296f79729..c13bd38fd909 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1558,16 +1558,16 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -4579,9 +4579,10 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", "engines": { "node": ">= 0.8" } From a7e77ce4af118cf93384af7174475cfbc54c8e0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 11:35:59 -0800 Subject: [PATCH 119/150] chore: bump dawidd6/action-download-artifact from 10 to 11 (#7409) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 10 to 11. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v10...v11) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-version: '11' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d5223c0485cb..a16fc6b90ac7 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -269,7 +269,7 @@ jobs: timeout-minutes: 15 steps: - name: Download artifacts - uses: dawidd6/action-download-artifact@v10 + uses: dawidd6/action-download-artifact@v11 id: download with: branch: ${{ github.ref }} From 8a378df6e5c3d9627924076a9906b196390da662 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 11:37:04 -0800 Subject: [PATCH 120/150] chore: bump eslint-import-resolver-typescript from 3.8.3 to 4.4.4 (#7404) --- package-lock.json | 520 +++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 446 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index c13bd38fd909..9db83a78da00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "doctoc": "^2.2.1", "eslint": "^9.12.0", "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.0", + "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "globals": "^16.1.0", @@ -94,6 +94,40 @@ "node": ">=12" } }, + "node_modules/@emnapi/core": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz", + "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", + "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz", + "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -359,6 +393,19 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -397,15 +444,6 @@ "node": ">= 8" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "engines": { - "node": ">=12.4.0" - } - }, "node_modules/@phc/format": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", @@ -491,6 +529,17 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz", + "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -997,6 +1046,275 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1746,9 +2064,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1973,19 +2291,6 @@ "node": ">= 0.8" } }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", @@ -2255,6 +2560,31 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -2276,25 +2606,25 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.8.3.tgz", - "integrity": "sha512-A0bu4Ks2QqDWNpeEgTQMPTngaMhuDu4yv6xpftBMAf+1ziXnpx+eSR1WRfoPTe2BAiAjHFZ7kSNx1fvr5g5pmQ==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", + "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==", "dev": true, "license": "ISC", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^1.0.2", - "stable-hash": "^0.0.4", - "tinyglobby": "^0.2.12" + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^16.17.0 || >=18.6.0" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://opencollective.com/eslint-import-resolver-typescript" }, "peerDependencies": { "eslint": "*", @@ -3025,9 +3355,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3124,12 +3454,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -3514,12 +3838,13 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-bun-module": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", - "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.6.3" + "semver": "^7.7.1" } }, "node_modules/is-callable": { @@ -4396,6 +4721,22 @@ "integrity": "sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==", "dev": true }, + "node_modules/napi-postinstall": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz", + "integrity": "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5596,12 +5937,15 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } }, "node_modules/statuses": { "version": "2.0.1", @@ -5760,15 +6104,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -5786,13 +6121,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -5803,9 +6138,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5818,9 +6153,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -6228,6 +6563,41 @@ "node": ">= 0.8" } }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, "node_modules/update-section": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", diff --git a/package.json b/package.json index 1a22f866b681..40c77408a00b 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "doctoc": "^2.2.1", "eslint": "^9.12.0", "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.0", + "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "globals": "^16.1.0", From 5c0ff5013f236ba41c02531ce2f1c5e7d3f41b1d Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 4 Aug 2025 11:51:49 -0800 Subject: [PATCH 121/150] Remove direct safe-buffer dependency We do not use it directly. --- package-lock.json | 1 - package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9db83a78da00..237318bc9104 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,6 @@ "proxy-agent": "^6.3.1", "qs": "6.14.0", "rotating-file-stream": "^3.1.1", - "safe-buffer": "^5.2.1", "safe-compare": "^1.1.4", "semver": "^7.5.4", "ws": "^8.14.2", diff --git a/package.json b/package.json index 40c77408a00b..dcea7fc9f886 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "proxy-agent": "^6.3.1", "qs": "6.14.0", "rotating-file-stream": "^3.1.1", - "safe-buffer": "^5.2.1", "safe-compare": "^1.1.4", "semver": "^7.5.4", "ws": "^8.14.2", From 8f738d29f27d4655fec5669a1487a42a19bade84 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 4 Aug 2025 11:52:08 -0800 Subject: [PATCH 122/150] Remove unused supertest dependency --- test/package-lock.json | 284 ----------------------------------------- test/package.json | 2 - 2 files changed, 286 deletions(-) diff --git a/test/package-lock.json b/test/package-lock.json index 5a76f5b32fe8..f7ee4863c278 100644 --- a/test/package-lock.json +++ b/test/package-lock.json @@ -11,7 +11,6 @@ "@types/jest": "^27.0.2", "@types/jsdom": "^16.2.13", "@types/node-fetch": "^2.5.8", - "@types/supertest": "^2.0.11", "@types/wtfnode": "^0.7.0", "argon2": "^0.28.0", "extract-zip": "^2.0.1", @@ -20,7 +19,6 @@ "jsdom": "^16.4.0", "node-fetch": "^2.6.7", "playwright": "^1.46.0", - "supertest": "^6.1.6", "ts-jest": "^27.0.7", "wtfnode": "^0.9.1" } @@ -1104,13 +1102,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -1171,13 +1162,6 @@ "@types/tough-cookie": "*" } }, - "node_modules/@types/methods": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { "version": "22.7.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", @@ -1220,29 +1204,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/superagent": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookiejar": "^2.1.5", - "@types/methods": "^1.1.4", - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/supertest": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz", - "integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/superagent": "*" - } - }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", @@ -1464,13 +1425,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1689,26 +1643,6 @@ "dev": true, "license": "MIT" }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -1897,16 +1831,6 @@ "node": ">= 0.8" } }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1928,13 +1852,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true, - "license": "MIT" - }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", @@ -2044,24 +1961,6 @@ "node": ">=0.10.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2099,17 +1998,6 @@ "node": ">=8" } }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, "node_modules/diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -2421,13 +2309,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true, - "license": "MIT" - }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -2492,22 +2373,6 @@ "node": ">= 6" } }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -2742,19 +2607,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -2804,16 +2656,6 @@ "node": ">= 0.4" } }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -4016,16 +3858,6 @@ "dev": true, "license": "MIT" }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -4040,19 +3872,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -4307,19 +4126,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4622,22 +4428,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -4813,24 +4603,6 @@ "dev": true, "license": "ISC" }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4854,25 +4626,6 @@ "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -5023,43 +4776,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", - "dev": true, - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.1.2" - }, - "engines": { - "node": ">=6.4.0" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", diff --git a/test/package.json b/test/package.json index 06d0e3fb3e74..6d2e92edd2ee 100644 --- a/test/package.json +++ b/test/package.json @@ -7,7 +7,6 @@ "@types/jest": "^27.0.2", "@types/jsdom": "^16.2.13", "@types/node-fetch": "^2.5.8", - "@types/supertest": "^2.0.11", "@types/wtfnode": "^0.7.0", "argon2": "^0.28.0", "extract-zip": "^2.0.1", @@ -16,7 +15,6 @@ "jsdom": "^16.4.0", "node-fetch": "^2.6.7", "playwright": "^1.46.0", - "supertest": "^6.1.6", "ts-jest": "^27.0.7", "wtfnode": "^0.9.1" }, From e54467fb85119666b5c85d8c110cdf05a882883f Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 4 Aug 2025 11:52:37 -0800 Subject: [PATCH 123/150] Run npm audit fix --- package-lock.json | 91 ++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index 237318bc9104..03a9d26f23e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -175,9 +175,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -190,9 +190,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", - "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -200,9 +200,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -250,13 +250,16 @@ } }, "node_modules/@eslint/js": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", - "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -270,13 +273,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.15.1", "levn": "^0.4.1" }, "engines": { @@ -1333,9 +1336,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -2487,20 +2490,20 @@ } }, "node_modules/eslint": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", - "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.25.1", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -2511,9 +2514,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2759,9 +2762,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2788,9 +2791,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2801,15 +2804,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2819,9 +2822,9 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { From 3f238407564b2e59cf181ebb29f979e6bf6feb80 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 4 Aug 2025 12:00:45 -0800 Subject: [PATCH 124/150] Remove import from express-serve-static-core Mostly because express-serve-static-core is an implicit dependency. We could make it explicit, but the type we imported from it is just an alias for qs.ParsedQs anyway. --- src/node/http.ts | 10 ++-------- src/node/settings.ts | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/node/http.ts b/src/node/http.ts index e0fb3a4caf6b..6500dc87fadc 100644 --- a/src/node/http.ts +++ b/src/node/http.ts @@ -1,9 +1,8 @@ import { field, logger } from "@coder/logger" import * as express from "express" -import * as expressCore from "express-serve-static-core" import * as http from "http" import * as net from "net" -import * as qs from "qs" +import qs from "qs" import { Disposable } from "../common/emitter" import { CookieKeys, HttpCode, HttpError } from "../common/http" import { normalize } from "../common/util" @@ -185,12 +184,7 @@ export const constructRedirectPath = (req: express.Request, query: qs.ParsedQs, * preserved. `to` should be a simple path without any query parameters * `override` will merge with the existing query (use `undefined` to unset). */ -export const redirect = ( - req: express.Request, - res: express.Response, - to: string, - override: expressCore.Query = {}, -): void => { +export const redirect = (req: express.Request, res: express.Response, to: string, override: qs.ParsedQs = {}): void => { const query = Object.assign({}, req.query, override) Object.keys(override).forEach((key) => { if (typeof override[key] === "undefined") { diff --git a/src/node/settings.ts b/src/node/settings.ts index 29716af036f9..cc55dd5f9508 100644 --- a/src/node/settings.ts +++ b/src/node/settings.ts @@ -1,5 +1,5 @@ import { logger } from "@coder/logger" -import { Query } from "express-serve-static-core" +import type { ParsedQs } from "qs" import { promises as fs } from "fs" export type Settings = { [key: string]: Settings | string | boolean | number } @@ -52,5 +52,5 @@ export interface UpdateSettings { * Global code-server settings. */ export interface CoderSettings extends UpdateSettings { - query?: Query + query?: ParsedQs } From b27d982c674e7efcc9728d14af29e7aad3705255 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:46:32 -0800 Subject: [PATCH 125/150] chore: bump prettier from 3.4.2 to 3.6.2 (#7407) --- CHANGELOG.md | 1 - docs/install.md | 2 -- package-lock.json | 8 ++++---- package.json | 2 +- src/browser/pages/global.css | 3 ++- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 579c5653503d..00004b06d442 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -810,7 +810,6 @@ Code v1.68.1 would be accessible at `my.domain/proxy/8000/` without any authentication. If all of the following apply to you please update as soon as possible: - - You run code-server with the built-in password authentication. - You run unprotected HTTP services on ports accessible by code-server. diff --git a/docs/install.md b/docs/install.md index e2dd905f9401..30da4d415e77 100644 --- a/docs/install.md +++ b/docs/install.md @@ -82,13 +82,11 @@ _exact_ same commands presented in the rest of this document. - For Arch Linux, code-server will install the AUR package. - For any unrecognized Linux operating system, code-server will install the latest standalone release into `~/.local`. - - Ensure that you add `~/.local/bin` to your `$PATH` to run code-server. - For macOS, code-server will install the Homebrew package (if you don't have Homebrew installed, code-server will install the latest standalone release into `~/.local`). - - Ensure that you add `~/.local/bin` to your `$PATH` to run code-server. - For FreeBSD, code-server will install the [npm package](#npm) with `npm` diff --git a/package-lock.json b/package-lock.json index 03a9d26f23e1..2c98099e0bb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "globals": "^16.1.0", - "prettier": "3.4.2", + "prettier": "3.6.2", "prettier-plugin-sh": "^0.14.0", "ts-node": "^10.9.1", "typescript": "^5.6.2", @@ -5174,9 +5174,9 @@ } }, "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index dcea7fc9f886..8bd1c71b7caa 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-plugin-import": "^2.28.1", "eslint-plugin-prettier": "^5.0.0", "globals": "^16.1.0", - "prettier": "3.4.2", + "prettier": "3.6.2", "prettier-plugin-sh": "^0.14.0", "ts-node": "^10.9.1", "typescript": "^5.6.2", diff --git a/src/browser/pages/global.css b/src/browser/pages/global.css index e6e42e65652d..ba79ea6134c6 100644 --- a/src/browser/pages/global.css +++ b/src/browser/pages/global.css @@ -15,7 +15,8 @@ body { color: #111; color: light-dark(#111, #ddd); margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; overflow: hidden; } From f1236d80b96dce4fc53bbf63b77d03d1fec8eb1d Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Sat, 9 Aug 2025 03:10:23 +0200 Subject: [PATCH 126/150] Update Code to 1.103.0 (#7458) --- .node-version | 2 +- lib/vscode | 2 +- patches/base-path.diff | 8 ++++---- patches/clipboard.diff | 2 +- patches/disable-builtin-ext-update.diff | 2 +- patches/display-language.diff | 6 +++--- patches/external-file-actions.diff | 6 +++--- patches/getting-started.diff | 6 +++--- patches/local-storage.diff | 4 ++-- patches/logout.diff | 2 +- patches/proposed-api.diff | 2 +- patches/proxy-uri.diff | 2 +- patches/telemetry.diff | 2 +- patches/trusted-domains.diff | 2 +- patches/update-check.diff | 2 +- patches/webview.diff | 4 ++-- 16 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.node-version b/.node-version index 8320a6d2994a..fc37597bccdb 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -22.15.1 +22.17.0 diff --git a/lib/vscode b/lib/vscode index 488a1f239235..e3550cfac4b6 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 488a1f239235055e34e673291fb8d8c810886f81 +Subproject commit e3550cfac4b63ca4eafca7b601f0d2885817fd1f diff --git a/patches/base-path.diff b/patches/base-path.diff index 4124026233b1..09a967cb9ed4 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/base/common/network.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/network.ts +++ code-server/lib/vscode/src/vs/base/common/network.ts -@@ -223,7 +223,9 @@ class RemoteAuthoritiesImpl { +@@ -226,7 +226,9 @@ class RemoteAuthoritiesImpl { return URI.from({ scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource, authority: `${host}:${port}`, @@ -253,7 +253,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/code/browser/workbench/workbench.ts +++ code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts -@@ -333,7 +333,8 @@ class LocalStorageURLCallbackProvider ex +@@ -338,7 +338,8 @@ class LocalStorageURLCallbackProvider ex this.startListening(); } @@ -263,7 +263,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts } private startListening(): void { -@@ -578,17 +579,6 @@ class WorkspaceProvider implements IWork +@@ -583,17 +584,6 @@ class WorkspaceProvider implements IWork } } @@ -281,7 +281,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts (function () { // Find config by checking for DOM -@@ -597,8 +587,8 @@ function readCookie(name: string): strin +@@ -602,8 +592,8 @@ function readCookie(name: string): strin if (!configElement || !configElementAttribute) { throw new Error('Missing web configuration element'); } diff --git a/patches/clipboard.diff b/patches/clipboard.diff index 8bc1cfa43323..02c7d54dfd93 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/common/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/argv.ts -@@ -134,6 +134,7 @@ export interface NativeParsedArgs { +@@ -135,6 +135,7 @@ export interface NativeParsedArgs { 'disable-chromium-sandbox'?: boolean; sandbox?: boolean; 'enable-coi'?: boolean; diff --git a/patches/disable-builtin-ext-update.diff b/patches/disable-builtin-ext-update.diff index a293cca5d71a..5e71ed6770e7 100644 --- a/patches/disable-builtin-ext-update.diff +++ b/patches/disable-builtin-ext-update.diff @@ -7,7 +7,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -340,6 +340,10 @@ export class Extension implements IExten +@@ -341,6 +341,10 @@ export class Extension implements IExten if (this.type === ExtensionType.System && this.productService.quality === 'stable') { return false; } diff --git a/patches/display-language.diff b/patches/display-language.diff index 3b7cfaf55659..d6ecffcb35c6 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -18,7 +18,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; -@@ -267,6 +267,9 @@ export async function setupServerService +@@ -269,6 +269,9 @@ export async function setupServerService socketServer.registerChannel('mcpManagement', new McpManagementChannel(mcpManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority))); @@ -198,7 +198,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -109,6 +110,7 @@ export interface ServerParsedArgs { +@@ -110,6 +111,7 @@ export interface ServerParsedArgs { 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, @@ -339,7 +339,7 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts +++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts -@@ -53,7 +53,7 @@ import './services/dialogs/browser/fileD +@@ -54,7 +54,7 @@ import './services/dialogs/browser/fileD import './services/host/browser/browserHostService.js'; import './services/lifecycle/browser/lifecycleService.js'; import './services/clipboard/browser/clipboardService.js'; diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index d87a6043f881..56f9b7c5af14 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -99,7 +99,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -103,6 +105,8 @@ export interface ServerParsedArgs { +@@ -104,6 +106,8 @@ export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; 'auth'?: string; @@ -126,7 +126,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @@ -7,11 +7,11 @@ import { Event } from '../../base/common - import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; + import { Disposable, DisposableStore, MutableDisposable } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext } from '../common/contextkeys.js'; @@ -208,7 +208,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -36,6 +36,9 @@ export const HasWebFileSystemAccess = ne +@@ -37,6 +37,9 @@ export const HasWebFileSystemAccess = ne export const EmbedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined')); diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 09df5ddd9ece..ee53750d4195 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -189,7 +189,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -107,6 +108,7 @@ export interface ServerParsedArgs { +@@ -108,6 +109,7 @@ export interface ServerParsedArgs { 'auth'?: string; 'disable-file-downloads'?: boolean; 'disable-file-uploads'?: boolean; @@ -214,7 +214,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @@ -7,7 +7,7 @@ import { Event } from '../../base/common - import { Disposable, DisposableStore } from '../../base/common/lifecycle.js'; + import { Disposable, DisposableStore, MutableDisposable } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; @@ -234,7 +234,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -38,6 +38,7 @@ export const EmbedderIdentifierContext = +@@ -39,6 +39,7 @@ export const EmbedderIdentifierContext = export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/local-storage.diff b/patches/local-storage.diff index 081c9c503020..a358148481ab 100644 --- a/patches/local-storage.diff +++ b/patches/local-storage.diff @@ -66,7 +66,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts +++ code-server/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts -@@ -147,8 +147,10 @@ export class WorkspaceService extends Di +@@ -148,8 +148,10 @@ export class WorkspaceService extends Di this.workspaceConfiguration = this._register(new WorkspaceConfiguration(configurationCache, fileService, uriIdentityService, logService)); this._register(this.workspaceConfiguration.onDidUpdateConfiguration(fromCache => { this.onWorkspaceConfigurationChanged(fromCache).then(() => { @@ -79,7 +79,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co }); })); -@@ -555,6 +557,12 @@ export class WorkspaceService extends Di +@@ -556,6 +558,12 @@ export class WorkspaceService extends Di previousFolders = this.workspace.folders; this.workspace.update(workspace); } else { diff --git a/patches/logout.diff b/patches/logout.diff index 70be193dde84..49fb8a996d72 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -101,6 +102,7 @@ export const serverOptions: OptionDescri +@@ -102,6 +103,7 @@ export const serverOptions: OptionDescri export interface ServerParsedArgs { /* ----- code-server ----- */ 'disable-update-check'?: boolean; diff --git a/patches/proposed-api.diff b/patches/proposed-api.diff index dd9f25badfc7..ccd274634617 100644 --- a/patches/proposed-api.diff +++ b/patches/proposed-api.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/extensions/common/extens =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts +++ code-server/lib/vscode/src/vs/workbench/services/extensions/common/extensions.ts -@@ -314,10 +314,7 @@ function extensionDescriptionArrayToMap( +@@ -321,10 +321,7 @@ function extensionDescriptionArrayToMap( } export function isProposedApiEnabled(extension: IExtensionDescription, proposal: ApiProposalName): boolean { diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index c51a4daad126..6380538128a7 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -104,7 +104,7 @@ Index: code-server/lib/vscode/src/vs/code/browser/workbench/workbench.ts import type { IURLCallbackProvider } from '../../../workbench/services/url/browser/urlService.js'; import { create } from '../../../workbench/workbench.web.main.internal.js'; -@@ -599,6 +600,39 @@ class WorkspaceProvider implements IWork +@@ -604,6 +605,39 @@ class WorkspaceProvider implements IWork settingsSyncOptions: config.settingsSyncOptions ? { enabled: config.settingsSyncOptions.enabled, } : undefined, workspaceProvider: WorkspaceProvider.create(config), urlCallbackProvider: new LocalStorageURLCallbackProvider(config.callbackRoute), diff --git a/patches/telemetry.diff b/patches/telemetry.diff index 58eed73deb01..d0896f9aff23 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { NullPolicyService } from '../../platform/policy/common/policy.js'; import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; -@@ -163,11 +165,23 @@ export async function setupServerService +@@ -164,11 +166,23 @@ export async function setupServerService const requestService = new RequestService('remote', configurationService, environmentService, logService); services.set(IRequestService, requestService); diff --git a/patches/trusted-domains.diff b/patches/trusted-domains.diff index d1ded15338dc..9d68bdfa6dc9 100644 --- a/patches/trusted-domains.diff +++ b/patches/trusted-domains.diff @@ -12,7 +12,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -111,6 +112,7 @@ export interface ServerParsedArgs { +@@ -112,6 +113,7 @@ export interface ServerParsedArgs { 'disable-file-uploads'?: boolean; 'disable-getting-started-override'?: boolean, 'locale'?: string diff --git a/patches/update-check.diff b/patches/update-check.diff index 4e968f8288aa..0f9eba9fe15f 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -126,7 +126,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts /* ----- server setup ----- */ -@@ -97,6 +99,8 @@ export const serverOptions: OptionDescri +@@ -98,6 +100,8 @@ export const serverOptions: OptionDescri }; export interface ServerParsedArgs { diff --git a/patches/webview.diff b/patches/webview.diff index d6002fa017ab..bb45f1bc176a 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -70,8 +70,8 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index -+ content="default-src 'none'; script-src 'sha256-Oi71Tq4Buohx0KDH3yEbVJUzABnqYv9iVLo420HZXqI=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> +- content="default-src 'none'; script-src 'sha256-qzQMf4WjRXHohkk4Hg1T0LJIElTDtjITLXbR/RuGA/Q=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> ++ content="default-src 'none'; script-src 'sha256-q8xbX8bFRtUAF+eVy0H2EWJWeyp3LsLyd7qwg1qndEg=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> Date: Tue, 12 Aug 2025 14:31:17 -0800 Subject: [PATCH 127/150] Release v4.103.0 --- CHANGELOG.md | 8 ++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00004b06d442..1b3be79caf63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,14 @@ Code v99.99.999 ## Unreleased +## [4.103.0](https://github.com/coder/code-server/releases/tag/v4.103.0) - 2025-08-12 + +Code v1.103.0 + +### Changed + +- Update to Code 1.103.0. + ## [4.102.2](https://github.com/coder/code-server/releases/tag/v4.102.2) - 2025-07-24 Code v1.102.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index d7fddbc3a5bf..7950bea8ec74 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.29.2 +version: 3.30.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.102.2 +appVersion: 4.103.0 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index cfd4da3c0776..53313b86a090 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.102.2' + tag: '4.103.0' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From fbaadbcfbc16401327e28bd5df3040261977a540 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 15 Aug 2025 22:31:17 +0200 Subject: [PATCH 128/150] Update Code to 1.103.1 (#7459) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index e3550cfac4b6..360a4e4fd251 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit e3550cfac4b63ca4eafca7b601f0d2885817fd1f +Subproject commit 360a4e4fd251bfce169a4ddf857c7d25d1ad40da From 3c5deac16d0b3620cce8abca637012904ea6520e Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Mon, 25 Aug 2025 19:32:20 +0200 Subject: [PATCH 129/150] Update Code to 1.103.2 (#7463) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 360a4e4fd251..6f1763612105 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 360a4e4fd251bfce169a4ddf857c7d25d1ad40da +Subproject commit 6f17636121051a53c88d3e605c491d22af2ba755 From 54b33a75e0b4593b77f9a217323c4b27a42f4073 Mon Sep 17 00:00:00 2001 From: Olexandr88 Date: Mon, 25 Aug 2025 21:32:11 +0300 Subject: [PATCH 130/150] Add Discord link to readme (#7465) --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 5724c804c087..470095071afd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ # code-server -[!["GitHub Discussions"](https://img.shields.io/badge/%20GitHub-%20Discussions-gray.svg?longCache=true&logo=github&colorB=purple)](https://github.com/coder/code-server/discussions) [!["Join us on Slack"](https://img.shields.io/badge/join-us%20on%20slack-gray.svg?longCache=true&logo=slack&colorB=brightgreen)](https://coder.com/community) [![Twitter Follow](https://img.shields.io/twitter/follow/CoderHQ?label=%40CoderHQ&style=social)](https://twitter.com/coderhq) [![codecov](https://codecov.io/gh/coder/code-server/branch/main/graph/badge.svg?token=5iM9farjnC)](https://codecov.io/gh/coder/code-server) [![See latest](https://img.shields.io/static/v1?label=Docs&message=see%20latest&color=blue)](https://coder.com/docs/code-server/latest) +[!["GitHub Discussions"](https://img.shields.io/badge/%20GitHub-%20Discussions-gray.svg?longCache=true&logo=github&colorB=purple)](https://github.com/coder/code-server/discussions) [!["Join us on Slack"](https://img.shields.io/badge/join-us%20on%20slack-gray.svg?longCache=true&logo=slack&colorB=brightgreen)](https://coder.com/community) [![Twitter Follow](https://img.shields.io/twitter/follow/CoderHQ?label=%40CoderHQ&style=social)](https://twitter.com/coderhq) [![Discord](https://img.shields.io/discord/747933592273027093)](https://discord.com/invite/coder) [![codecov](https://codecov.io/gh/coder/code-server/branch/main/graph/badge.svg?token=5iM9farjnC)](https://codecov.io/gh/coder/code-server) [![See latest](https://img.shields.io/static/v1?label=Docs&message=see%20latest&color=blue)](https://coder.com/docs/code-server/latest) Run [VS Code](https://github.com/Microsoft/vscode) on any machine anywhere and access it in the browser. From b59a4f736669d0148fc713147684cc7d24843182 Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 28 Aug 2025 11:55:58 -0800 Subject: [PATCH 131/150] Release v4.103.1 and v4.103.2 --- CHANGELOG.md | 16 ++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b3be79caf63..9a5d822543da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,22 @@ Code v99.99.999 ## Unreleased +## [4.103.2](https://github.com/coder/code-server/releases/tag/v4.103.2) - 2025-08-25 + +Code v1.103.2 + +### Changed + +- Update to Code 1.103.2. + +## [4.103.1](https://github.com/coder/code-server/releases/tag/v4.103.1) - 2025-08-15 + +Code v1.103.1 + +### Changed + +- Update to Code 1.103.1. + ## [4.103.0](https://github.com/coder/code-server/releases/tag/v4.103.0) - 2025-08-12 Code v1.103.0 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 7950bea8ec74..9add19d7048a 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.30.0 +version: 3.30.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.103.0 +appVersion: 4.103.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 53313b86a090..3428a2fbd52a 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.103.0' + tag: '4.103.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From 626145cf66d489fdf6104e17e072458b11254ba6 Mon Sep 17 00:00:00 2001 From: Anthony Date: Fri, 12 Sep 2025 00:24:57 +0200 Subject: [PATCH 132/150] Allow custom annotation to deployment (#7481) --- ci/helm-chart/templates/deployment.yaml | 3 +++ ci/helm-chart/values.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ci/helm-chart/templates/deployment.yaml b/ci/helm-chart/templates/deployment.yaml index b0bde8621840..8f6fd89a5800 100644 --- a/ci/helm-chart/templates/deployment.yaml +++ b/ci/helm-chart/templates/deployment.yaml @@ -7,6 +7,9 @@ metadata: helm.sh/chart: {{ include "code-server.chart" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} + {{- if .Values.annotations }} + annotations: {{- toYaml .Values.annotations | nindent 4 }} + {{- end }} spec: replicas: {{ .Values.replicaCount | default 1 }} strategy: diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 3428a2fbd52a..b6cbdaa162bf 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -31,6 +31,9 @@ serviceAccount: # If not set and create is true, a name is generated using the fullname template name: "" +# Specifies annotations for deployment +annotations: {} + podAnnotations: {} podSecurityContext: {} From 1a7b770f5b43e8770d805957291f2413d37c4b8e Mon Sep 17 00:00:00 2001 From: Jinvien <8666750+jinvien@users.noreply.github.com> Date: Fri, 12 Sep 2025 06:26:49 +0800 Subject: [PATCH 133/150] Fix installing extensions from the Open VSX marketplace (#7479) Open VSX uses a non-standard format for the `/latest` URL which must be added to the gallery config. --- patches/marketplace.diff | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/patches/marketplace.diff b/patches/marketplace.diff index 25a22b093b1d..479b47a557c1 100644 --- a/patches/marketplace.diff +++ b/patches/marketplace.diff @@ -19,7 +19,7 @@ Index: code-server/lib/vscode/src/vs/platform/product/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/product/common/product.ts +++ code-server/lib/vscode/src/vs/platform/product/common/product.ts -@@ -49,6 +49,16 @@ else if (globalThis._VSCODE_PRODUCT_JSON +@@ -49,6 +49,17 @@ else if (globalThis._VSCODE_PRODUCT_JSON version: pkg.version }); } @@ -28,6 +28,7 @@ Index: code-server/lib/vscode/src/vs/platform/product/common/product.ts + extensionsGallery: env.EXTENSIONS_GALLERY ? JSON.parse(env.EXTENSIONS_GALLERY) : (product.extensionsGallery || { + serviceUrl: "https://open-vsx.org/vscode/gallery", + itemUrl: "https://open-vsx.org/vscode/item", ++ extensionUrlTemplate: "https://open-vsx.org/vscode/gallery/%7Bpublisher%7D/%7Bname%7D/latest", + resourceUrlTemplate: "https://open-vsx.org/vscode/asset/%7Bpublisher%7D/%7Bname%7D/%7Bversion%7D/Microsoft.VisualStudio.Code.WebResources/%7Bpath%7D", + controlUrl: "", + recommendationsUrl: "", From ba774d989b4983b38a857220b17e5301e71dba5c Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 12 Sep 2025 22:41:54 +0200 Subject: [PATCH 134/150] Update Code to 1.104.0 (#7488) --- .node-version | 2 +- lib/vscode | 2 +- patches/base-path.diff | 4 +-- patches/display-language.diff | 6 ++-- patches/external-file-actions.diff | 14 ++++----- patches/getting-started.diff | 14 ++++----- patches/integration.diff | 46 +++++++++++++++--------------- patches/local-storage.diff | 4 +-- patches/logout.diff | 2 +- patches/proxy-uri.diff | 2 +- patches/service-worker.diff | 2 +- patches/store-socket.diff | 2 +- patches/telemetry.diff | 4 +-- patches/update-check.diff | 2 +- patches/webview.diff | 8 +++--- 15 files changed, 57 insertions(+), 57 deletions(-) diff --git a/.node-version b/.node-version index fc37597bccdb..91d5f6ff8e3f 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -22.17.0 +22.18.0 diff --git a/lib/vscode b/lib/vscode index 6f1763612105..f220831ea2d9 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 6f17636121051a53c88d3e605c491d22af2ba755 +Subproject commit f220831ea2d946c0dcb0f3eaa480eb435a2c1260 diff --git a/patches/base-path.diff b/patches/base-path.diff index 09a967cb9ed4..31db2231a939 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -10,7 +10,7 @@ Index: code-server/lib/vscode/src/vs/base/common/network.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/network.ts +++ code-server/lib/vscode/src/vs/base/common/network.ts -@@ -226,7 +226,9 @@ class RemoteAuthoritiesImpl { +@@ -232,7 +232,9 @@ class RemoteAuthoritiesImpl { return URI.from({ scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource, authority: `${host}:${port}`, @@ -241,7 +241,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -57,6 +57,7 @@ export type ExtensionVirtualWorkspaceSup +@@ -65,6 +65,7 @@ export type ExtensionVirtualWorkspaceSup export interface IProductConfiguration { readonly codeServerVersion?: string diff --git a/patches/display-language.diff b/patches/display-language.diff index d6ecffcb35c6..75afcc8445d2 100644 --- a/patches/display-language.diff +++ b/patches/display-language.diff @@ -11,14 +11,14 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts +++ code-server/lib/vscode/src/vs/server/node/serverServices.ts @@ -12,7 +12,7 @@ import * as path from '../../base/common import { IURITransformer } from '../../base/common/uriIpc.js'; - import { getMachineId, getSqmMachineId, getdevDeviceId } from '../../base/node/id.js'; + import { getMachineId, getSqmMachineId, getDevDeviceId } from '../../base/node/id.js'; import { Promises } from '../../base/node/pfs.js'; -import { ClientConnectionEvent, IMessagePassingProtocol, IPCServer, StaticRouter } from '../../base/parts/ipc/common/ipc.js'; +import { ClientConnectionEvent, IMessagePassingProtocol, IPCServer, ProxyChannel, StaticRouter } from '../../base/parts/ipc/common/ipc.js'; import { ProtocolConstants } from '../../base/parts/ipc/common/ipc.net.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; import { ConfigurationService } from '../../platform/configuration/common/configurationService.js'; -@@ -269,6 +269,9 @@ export async function setupServerService +@@ -272,6 +272,9 @@ export async function setupServerService socketServer.registerChannel('mcpManagement', new McpManagementChannel(mcpManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority))); @@ -339,7 +339,7 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts +++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.internal.ts -@@ -54,7 +54,7 @@ import './services/dialogs/browser/fileD +@@ -55,7 +55,7 @@ import './services/dialogs/browser/fileD import './services/host/browser/browserHostService.js'; import './services/lifecycle/browser/lifecycleService.js'; import './services/clipboard/browser/clipboardService.js'; diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index 56f9b7c5af14..8a6830d00eca 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -128,9 +128,9 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @@ -7,11 +7,11 @@ import { Event } from '../../base/common import { Disposable, DisposableStore, MutableDisposable } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; - import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; --import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext } from '../common/contextkeys.js'; -+import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; + import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext, IsSimulationContext } from '../../platform/contextkey/common/contextkeys.js'; +-import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext } from '../common/contextkeys.js'; ++import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; @@ -139,7 +139,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts import { WorkbenchState, IWorkspaceContextService, isTemporaryWorkspace } from '../../platform/workspace/common/workspace.js'; import { IWorkbenchLayoutService, Parts, positionToString } from '../services/layout/browser/layoutService.js'; import { getRemoteName } from '../../platform/remote/common/remoteHosts.js'; -@@ -71,7 +71,7 @@ export class WorkbenchContextKeysHandler +@@ -72,7 +72,7 @@ export class WorkbenchContextKeysHandler @IContextKeyService private readonly contextKeyService: IContextKeyService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IConfigurationService private readonly configurationService: IConfigurationService, @@ -148,7 +148,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @IProductService private readonly productService: IProductService, @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService, @IEditorService private readonly editorService: IEditorService, -@@ -200,6 +200,10 @@ export class WorkbenchContextKeysHandler +@@ -208,6 +208,10 @@ export class WorkbenchContextKeysHandler this.auxiliaryBarMaximizedContext = AuxiliaryBarMaximizedContext.bindTo(this.contextKeyService); this.auxiliaryBarMaximizedContext.set(this.layoutService.isAuxiliaryBarMaximized()); @@ -208,9 +208,9 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -37,6 +37,9 @@ export const HasWebFileSystemAccess = ne +@@ -39,6 +39,9 @@ export const EmbedderIdentifierContext = - export const EmbedderIdentifierContext = new RawContextKey('embedderIdentifier', undefined, localize('embedderIdentifier', 'The identifier of the embedder according to the product service, if one is defined')); + export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether VS Code is running under automation/smoke test")); +export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); +export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/getting-started.diff b/patches/getting-started.diff index ee53750d4195..14ab7f4d57e1 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro import { IEditorOpenContext, IEditorSerializer } from '../../../common/editor.js'; import { IWebviewElement, IWebviewService } from '../../webview/browser/webview.js'; import './gettingStartedColors.js'; -@@ -876,6 +876,72 @@ export class GettingStartedPage extends +@@ -872,6 +872,72 @@ export class GettingStartedPage extends $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) ); @@ -101,7 +101,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/bro const leftColumn = $('.categories-column.categories-column-left', {},); const rightColumn = $('.categories-column.categories-column-right', {},); -@@ -911,6 +977,9 @@ export class GettingStartedPage extends +@@ -907,6 +973,9 @@ export class GettingStartedPage extends recentList.setLimit(5); reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); } @@ -216,13 +216,13 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @@ -7,7 +7,7 @@ import { Event } from '../../base/common import { Disposable, DisposableStore, MutableDisposable } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; - import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; --import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; -+import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, IsEnabledFileDownloads, IsEnabledFileUploads, IsEnabledCoderGettingStarted, } from '../common/contextkeys.js'; + import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext, IsSimulationContext } from '../../platform/contextkey/common/contextkeys.js'; +-import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; ++import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext, IsEnabledFileDownloads, IsEnabledFileUploads, IsEnabledCoderGettingStarted, } from '../common/contextkeys.js'; import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; -@@ -203,6 +203,7 @@ export class WorkbenchContextKeysHandler +@@ -211,6 +211,7 @@ export class WorkbenchContextKeysHandler // code-server IsEnabledFileDownloads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileDownloads ?? true) IsEnabledFileUploads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileUploads ?? true) @@ -234,7 +234,7 @@ Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts -@@ -39,6 +39,7 @@ export const EmbedderIdentifierContext = +@@ -41,6 +41,7 @@ export const InAutomationContext = new R export const IsEnabledFileDownloads = new RawContextKey('isEnabledFileDownloads', true, true); export const IsEnabledFileUploads = new RawContextKey('isEnabledFileUploads', true, true); diff --git a/patches/integration.diff b/patches/integration.diff index 70de17b788fd..553fa4f4dd10 100644 --- a/patches/integration.diff +++ b/patches/integration.diff @@ -109,24 +109,6 @@ Index: code-server/lib/vscode/src/vs/base/common/processes.ts ]; const envKeys = Object.keys(env); envKeys -Index: code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -=================================================================== ---- code-server.orig/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -+++ code-server/lib/vscode/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts -@@ -78,8 +78,11 @@ export class BrowserDialogHandler extend - - async about(): Promise { - const detailString = (useAgo: boolean): string => { -- return localize('aboutDetail', -- "Version: {0}\nCommit: {1}\nDate: {2}\nBrowser: {3}", -+ return localize('aboutCodeServerDetail', -+ "code-server: {0}", -+ this.productService.codeServerVersion ? `v${this.productService.codeServerVersion}` : 'Unknown' -+ ) + '\n' + localize('aboutDetail', -+ "Code: {0}\nCommit: {1}\nDate: {2}\nBrowser: {3}", - this.productService.version || 'Unknown', - this.productService.commit || 'Unknown', - this.productService.date ? `${this.productService.date}${useAgo ? ' (' + fromNow(new Date(this.productService.date), true) + ')' : ''}` : 'Unknown', Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts =================================================================== --- /dev/null @@ -204,7 +186,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -56,6 +56,8 @@ export type ExtensionVirtualWorkspaceSup +@@ -64,6 +64,8 @@ export type ExtensionVirtualWorkspaceSup }; export interface IProductConfiguration { @@ -281,7 +263,7 @@ Index: code-server/lib/vscode/src/server-main.ts =================================================================== --- code-server.orig/lib/vscode/src/server-main.ts +++ code-server/lib/vscode/src/server-main.ts -@@ -25,6 +25,9 @@ const __dirname = path.dirname(fileURLTo +@@ -22,6 +22,9 @@ import { IServerAPI } from './vs/server/ perf.mark('code/server/start'); (globalThis as any).vscodeServerStartTime = performance.now(); @@ -291,7 +273,7 @@ Index: code-server/lib/vscode/src/server-main.ts // Do a quick parse to determine if a server or the cli needs to be started const parsedArgs = minimist(process.argv.slice(2), { boolean: ['start-server', 'list-extensions', 'print-ip-address', 'help', 'version', 'accept-server-license-terms', 'update-extensions'], -@@ -153,6 +156,7 @@ if (shouldSpawnCli) { +@@ -150,6 +153,7 @@ if (shouldSpawnCli) { } }); } @@ -299,7 +281,7 @@ Index: code-server/lib/vscode/src/server-main.ts function sanitizeStringArg(val: any): string | undefined { if (Array.isArray(val)) { // if an argument is passed multiple times, minimist creates an array -@@ -286,3 +290,22 @@ function prompt(question: string): Promi +@@ -283,3 +287,22 @@ function prompt(question: string): Promi }); }); } @@ -310,7 +292,7 @@ Index: code-server/lib/vscode/src/server-main.ts + osLocale: 'en', + commit: product.commit, + userDataPath: '', -+ nlsMetadataPath: __dirname, ++ nlsMetadataPath: import.meta.dirname, + }); + return loadCode(nlsConfiguration); +} @@ -322,3 +304,21 @@ Index: code-server/lib/vscode/src/server-main.ts +if (!process.env.CODE_SERVER_PARENT_PID) { + start(); +} +Index: code-server/lib/vscode/src/vs/platform/dialogs/browser/dialog.ts +=================================================================== +--- code-server.orig/lib/vscode/src/vs/platform/dialogs/browser/dialog.ts ++++ code-server/lib/vscode/src/vs/platform/dialogs/browser/dialog.ts +@@ -45,8 +45,11 @@ export function createWorkbenchDialogOpt + + export function createBrowserAboutDialogDetails(productService: IProductService): { title: string; details: string; detailsToCopy: string } { + const detailString = (useAgo: boolean): string => { +- return localize('aboutDetail', +- "Version: {0}\nCommit: {1}\nDate: {2}\nBrowser: {3}", ++ return localize('aboutCodeServerDetail', ++ "code-server: {0}", ++ productService.codeServerVersion ? `v${productService.codeServerVersion}` : 'Unknown' ++ ) + '\n' + localize('aboutDetail', ++ "Code: {0}\nCommit: {1}\nDate: {2}\nBrowser: {3}", + productService.version || 'Unknown', + productService.commit || 'Unknown', + productService.date ? `${productService.date}${useAgo ? ' (' + fromNow(new Date(productService.date), true) + ')' : ''}` : 'Unknown', diff --git a/patches/local-storage.diff b/patches/local-storage.diff index a358148481ab..081c9c503020 100644 --- a/patches/local-storage.diff +++ b/patches/local-storage.diff @@ -66,7 +66,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts +++ code-server/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts -@@ -148,8 +148,10 @@ export class WorkspaceService extends Di +@@ -147,8 +147,10 @@ export class WorkspaceService extends Di this.workspaceConfiguration = this._register(new WorkspaceConfiguration(configurationCache, fileService, uriIdentityService, logService)); this._register(this.workspaceConfiguration.onDidUpdateConfiguration(fromCache => { this.onWorkspaceConfigurationChanged(fromCache).then(() => { @@ -79,7 +79,7 @@ Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/co }); })); -@@ -556,6 +558,12 @@ export class WorkspaceService extends Di +@@ -555,6 +557,12 @@ export class WorkspaceService extends Di previousFolders = this.workspace.folders; this.workspace.update(workspace); } else { diff --git a/patches/logout.diff b/patches/logout.diff index 49fb8a996d72..db1d4b56f836 100644 --- a/patches/logout.diff +++ b/patches/logout.diff @@ -8,7 +8,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -59,6 +59,7 @@ export interface IProductConfiguration { +@@ -67,6 +67,7 @@ export interface IProductConfiguration { readonly codeServerVersion?: string readonly rootEndpoint?: string readonly updateEndpoint?: string diff --git a/patches/proxy-uri.diff b/patches/proxy-uri.diff index 6380538128a7..96ad99b9a104 100644 --- a/patches/proxy-uri.diff +++ b/patches/proxy-uri.diff @@ -30,7 +30,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -60,6 +60,7 @@ export interface IProductConfiguration { +@@ -68,6 +68,7 @@ export interface IProductConfiguration { readonly rootEndpoint?: string readonly updateEndpoint?: string readonly logoutEndpoint?: string diff --git a/patches/service-worker.diff b/patches/service-worker.diff index f2e1058fb4f7..37969993152c 100644 --- a/patches/service-worker.diff +++ b/patches/service-worker.diff @@ -6,7 +6,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -61,6 +61,10 @@ export interface IProductConfiguration { +@@ -69,6 +69,10 @@ export interface IProductConfiguration { readonly updateEndpoint?: string readonly logoutEndpoint?: string readonly proxyEndpointTemplate?: string diff --git a/patches/store-socket.diff b/patches/store-socket.diff index 31ae8ee7db35..ca12a0bdbfbf 100644 --- a/patches/store-socket.diff +++ b/patches/store-socket.diff @@ -96,7 +96,7 @@ Index: code-server/lib/vscode/src/vs/workbench/api/node/extensionHostProcess.ts import minimist from 'minimist'; import * as nativeWatchdog from 'native-watchdog'; import * as net from 'net'; -@@ -436,7 +437,28 @@ async function startExtensionHostProcess +@@ -449,7 +450,28 @@ async function startExtensionHostProcess ); // rewrite onTerminate-function to be a proper shutdown diff --git a/patches/telemetry.diff b/patches/telemetry.diff index d0896f9aff23..c18e1152fa11 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -28,7 +28,7 @@ Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts import { NullPolicyService } from '../../platform/policy/common/policy.js'; import { OneDataSystemAppender } from '../../platform/telemetry/node/1dsAppender.js'; import { LoggerService } from '../../platform/log/node/loggerService.js'; -@@ -164,11 +166,23 @@ export async function setupServerService +@@ -166,11 +168,23 @@ export async function setupServerService const requestService = new RequestService('remote', configurationService, environmentService, logService); services.set(IRequestService, requestService); @@ -147,7 +147,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -65,6 +65,7 @@ export interface IProductConfiguration { +@@ -73,6 +73,7 @@ export interface IProductConfiguration { readonly path: string; readonly scope: string; } diff --git a/patches/update-check.diff b/patches/update-check.diff index 0f9eba9fe15f..904910599d08 100644 --- a/patches/update-check.diff +++ b/patches/update-check.diff @@ -93,7 +93,7 @@ Index: code-server/lib/vscode/src/vs/base/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/base/common/product.ts +++ code-server/lib/vscode/src/vs/base/common/product.ts -@@ -58,6 +58,7 @@ export type ExtensionVirtualWorkspaceSup +@@ -66,6 +66,7 @@ export type ExtensionVirtualWorkspaceSup export interface IProductConfiguration { readonly codeServerVersion?: string readonly rootEndpoint?: string diff --git a/patches/webview.diff b/patches/webview.diff index bb45f1bc176a..0a30c009693b 100644 --- a/patches/webview.diff +++ b/patches/webview.diff @@ -70,12 +70,12 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/index -+ content="default-src 'none'; script-src 'sha256-q8xbX8bFRtUAF+eVy0H2EWJWeyp3LsLyd7qwg1qndEg=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> +- content="default-src 'none'; script-src 'sha256-ZcIhtIuU4M9PbKfs7w/CLqHimFJRK8L7mYTXOfiUv0I=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> ++ content="default-src 'none'; script-src 'sha256-dVbEBqfV68sWYG05nAX+55pv4dls0VnI6ZDMMV/0GYQ=' 'self'; frame-src 'self'; style-src 'unsafe-inline';"> { /** * @param {MessageEvent} event -@@ -351,6 +351,12 @@ +@@ -370,6 +370,12 @@ const hostname = location.hostname; From d1066af558befcf806a9e6f96329566b86c98b71 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 15 Sep 2025 14:36:47 -0800 Subject: [PATCH 135/150] Release v4.104.0 --- CHANGELOG.md | 13 +++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a5d822543da..4c177c17efda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,19 @@ Code v99.99.999 ## Unreleased +## [4.104.0](https://github.com/coder/code-server/releases/tag/v4.104.0) - 2025-09-15 + +Code v1.104.0 + +### Fixed + +- Fix "extension not found" errors from Open VSX when trying to install the + latest version of an extension. + +### Changed + +- Update to Code 1.104.0. + ## [4.103.2](https://github.com/coder/code-server/releases/tag/v4.103.2) - 2025-08-25 Code v1.103.2 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 9add19d7048a..7d62f273000c 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.30.2 +version: 3.31.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.103.2 +appVersion: 4.104.0 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index b6cbdaa162bf..7a9a2676144a 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.103.2' + tag: '4.104.0' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From af19dedfa93e36b57eb87a9a00b8d2fda75ab5e2 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 19 Sep 2025 20:01:30 +0200 Subject: [PATCH 136/150] Update Code to 1.104.1 (#7495) --- lib/vscode | 2 +- patches/telemetry.diff | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/vscode b/lib/vscode index f220831ea2d9..0f0d87fa9e96 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit f220831ea2d946c0dcb0f3eaa480eb435a2c1260 +Subproject commit 0f0d87fa9e96c856c5212fc86db137ac0d783365 diff --git a/patches/telemetry.diff b/patches/telemetry.diff index c18e1152fa11..0f9c0c6e1783 100644 --- a/patches/telemetry.diff +++ b/patches/telemetry.diff @@ -159,7 +159,7 @@ Index: code-server/lib/vscode/src/vs/platform/product/common/product.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/product/common/product.ts +++ code-server/lib/vscode/src/vs/platform/product/common/product.ts -@@ -57,7 +57,8 @@ else if (globalThis._VSCODE_PRODUCT_JSON +@@ -58,7 +58,8 @@ else if (globalThis._VSCODE_PRODUCT_JSON resourceUrlTemplate: "https://open-vsx.org/vscode/asset/%7Bpublisher%7D/%7Bname%7D/%7Bversion%7D/Microsoft.VisualStudio.Code.WebResources/%7Bpath%7D", controlUrl: "", recommendationsUrl: "", From b0992ddb3e3b398371da6bcfbe21a70b4d66eb8d Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 26 Sep 2025 20:36:08 +0200 Subject: [PATCH 137/150] Update Code to 1.104.2 (#7503) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 0f0d87fa9e96..e3a5acfb517a 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 0f0d87fa9e96c856c5212fc86db137ac0d783365 +Subproject commit e3a5acfb517a443235981655413d566533107e92 From 9fd98d58e7f7baa52cf1933938781913b39da474 Mon Sep 17 00:00:00 2001 From: Asher Date: Wed, 1 Oct 2025 14:15:07 -0800 Subject: [PATCH 138/150] Release v4.104.1 and v4.104.2 --- CHANGELOG.md | 16 ++++++++++++++++ ci/helm-chart/Chart.yaml | 4 ++-- ci/helm-chart/values.yaml | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c177c17efda..3ba0b42cb005 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,22 @@ Code v99.99.999 ## Unreleased +## [4.104.2](https://github.com/coder/code-server/releases/tag/v4.104.2) - 2025-09-26 + +Code v1.104.2 + +### Changed + +- Update to Code 1.104.2. + +## [4.104.1](https://github.com/coder/code-server/releases/tag/v4.104.1) - 2025-09-19 + +Code v1.104.1 + +### Changed + +- Update to Code 1.104.1. + ## [4.104.0](https://github.com/coder/code-server/releases/tag/v4.104.0) - 2025-09-15 Code v1.104.0 diff --git a/ci/helm-chart/Chart.yaml b/ci/helm-chart/Chart.yaml index 7d62f273000c..00e7221ee109 100644 --- a/ci/helm-chart/Chart.yaml +++ b/ci/helm-chart/Chart.yaml @@ -15,9 +15,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.31.0 +version: 3.31.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. -appVersion: 4.104.0 +appVersion: 4.104.2 diff --git a/ci/helm-chart/values.yaml b/ci/helm-chart/values.yaml index 7a9a2676144a..a414de0da0ec 100644 --- a/ci/helm-chart/values.yaml +++ b/ci/helm-chart/values.yaml @@ -6,7 +6,7 @@ replicaCount: 1 image: repository: codercom/code-server - tag: '4.104.0' + tag: '4.104.2' pullPolicy: Always # Specifies one or more secrets to be used when pulling images from a From cd40509fbbc684c5e9b566d9cb027f6ee9df36a6 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Fri, 3 Oct 2025 20:48:01 +0200 Subject: [PATCH 139/150] Update Code to 1.104.3 (#7515) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index e3a5acfb517a..385651c938df 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit e3a5acfb517a443235981655413d566533107e92 +Subproject commit 385651c938df8a906869babee516bffd0ddb9829 From 30321abfcda49228f410e5cd6412b5b637bc2b23 Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Tue, 14 Oct 2025 23:26:57 +0200 Subject: [PATCH 140/150] Update Code to 1.105.0 (#7523) --- .node-version | 2 +- lib/vscode | 2 +- patches/base-path.diff | 4 ++-- patches/cli-window-open.diff | 2 +- patches/clipboard.diff | 6 +++--- patches/external-file-actions.diff | 11 +++++------ patches/getting-started.diff | 10 +++++----- 7 files changed, 18 insertions(+), 19 deletions(-) diff --git a/.node-version b/.node-version index 91d5f6ff8e3f..e2228113dd09 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -22.18.0 +22.19.0 diff --git a/lib/vscode b/lib/vscode index 385651c938df..03c265b1adee 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 385651c938df8a906869babee516bffd0ddb9829 +Subproject commit 03c265b1adee71ac88f833e065f7bb956b60550a diff --git a/patches/base-path.diff b/patches/base-path.diff index 31db2231a939..5c6e5b8b1e31 100644 --- a/patches/base-path.diff +++ b/patches/base-path.diff @@ -105,8 +105,8 @@ Index: code-server/lib/vscode/src/vs/platform/remote/browser/browserSocketFactor const webSocketSchema = (/^https:/.test(mainWindow.location.href) ? 'wss' : 'ws'); + path = (mainWindow.location.pathname + "/" + path).replace(/\/\/+/g, "/") const socket = this._webSocketFactory.create(`${webSocketSchema}://${(/:/.test(host) && !/\[/.test(host)) ? `[${host}]` : host}:${port}${path}?${query}&skipWebSocketFrames=false`, debugLabel); - const errorListener = socket.onError(reject); - socket.onOpen(() => { + const disposables = new DisposableStore(); + disposables.add(socket.onError(reject)); Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts diff --git a/patches/cli-window-open.diff b/patches/cli-window-open.diff index 8da64b2a5d70..3bc21fa3b4bc 100644 --- a/patches/cli-window-open.diff +++ b/patches/cli-window-open.diff @@ -17,7 +17,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTe =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts -@@ -106,10 +106,14 @@ class RemoteTerminalBackend extends Base +@@ -107,10 +107,14 @@ class RemoteTerminalBackend extends Base } const reqId = e.reqId; const commandId = e.commandId; diff --git a/patches/clipboard.diff b/patches/clipboard.diff index 02c7d54dfd93..ecf6a09e30f3 100644 --- a/patches/clipboard.diff +++ b/patches/clipboard.diff @@ -65,7 +65,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTe =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts +++ code-server/lib/vscode/src/vs/workbench/contrib/terminal/browser/remoteTerminalBackend.ts -@@ -97,7 +97,7 @@ class RemoteTerminalBackend extends Base +@@ -98,7 +98,7 @@ class RemoteTerminalBackend extends Base } }); @@ -78,7 +78,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/common/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/common/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/common/argv.ts -@@ -135,6 +135,7 @@ export interface NativeParsedArgs { +@@ -136,6 +136,7 @@ export interface NativeParsedArgs { 'disable-chromium-sandbox'?: boolean; sandbox?: boolean; 'enable-coi'?: boolean; @@ -90,7 +90,7 @@ Index: code-server/lib/vscode/src/vs/platform/environment/node/argv.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/platform/environment/node/argv.ts +++ code-server/lib/vscode/src/vs/platform/environment/node/argv.ts -@@ -104,6 +104,7 @@ export const OPTIONS: OptionDescriptions +@@ -105,6 +105,7 @@ export const OPTIONS: OptionDescriptions 'user-data-dir': { type: 'string', cat: 'o', args: 'dir', description: localize('userDataDir', "Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code.") }, 'profile': { type: 'string', 'cat': 'o', args: 'profileName', description: localize('profileName', "Opens the provided folder or workspace with the given profile and associates the profile with the workspace. If the profile does not exist, a new empty one is created.") }, 'help': { type: 'boolean', cat: 'o', alias: 'h', description: localize('help', "Print usage.") }, diff --git a/patches/external-file-actions.diff b/patches/external-file-actions.diff index 8a6830d00eca..ef92e1c46361 100644 --- a/patches/external-file-actions.diff +++ b/patches/external-file-actions.diff @@ -125,13 +125,12 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts -@@ -7,11 +7,11 @@ import { Event } from '../../base/common - import { Disposable, DisposableStore, MutableDisposable } from '../../base/common/lifecycle.js'; +@@ -6,10 +6,10 @@ + import { Disposable } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; - import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext, IsSimulationContext } from '../../platform/contextkey/common/contextkeys.js'; + import { IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext } from '../common/contextkeys.js'; +import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; - import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; -import { IWorkbenchEnvironmentService } from '../services/environment/common/environmentService.js'; @@ -139,7 +138,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts import { WorkbenchState, IWorkspaceContextService, isTemporaryWorkspace } from '../../platform/workspace/common/workspace.js'; import { IWorkbenchLayoutService, Parts, positionToString } from '../services/layout/browser/layoutService.js'; import { getRemoteName } from '../../platform/remote/common/remoteHosts.js'; -@@ -72,7 +72,7 @@ export class WorkbenchContextKeysHandler +@@ -69,7 +69,7 @@ export class WorkbenchContextKeysHandler @IContextKeyService private readonly contextKeyService: IContextKeyService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IConfigurationService private readonly configurationService: IConfigurationService, @@ -148,7 +147,7 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts @IProductService private readonly productService: IProductService, @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService, @IEditorService private readonly editorService: IEditorService, -@@ -208,6 +208,10 @@ export class WorkbenchContextKeysHandler +@@ -199,6 +199,10 @@ export class WorkbenchContextKeysHandler this.auxiliaryBarMaximizedContext = AuxiliaryBarMaximizedContext.bindTo(this.contextKeyService); this.auxiliaryBarMaximizedContext.set(this.layoutService.isAuxiliaryBarMaximized()); diff --git a/patches/getting-started.diff b/patches/getting-started.diff index 14ab7f4d57e1..c5fd5d6ccbac 100644 --- a/patches/getting-started.diff +++ b/patches/getting-started.diff @@ -213,16 +213,16 @@ Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts +++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts -@@ -7,7 +7,7 @@ import { Event } from '../../base/common - import { Disposable, DisposableStore, MutableDisposable } from '../../base/common/lifecycle.js'; +@@ -6,7 +6,7 @@ + import { Disposable } from '../../base/common/lifecycle.js'; import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from '../../platform/contextkey/common/contextkey.js'; - import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext, IsSimulationContext } from '../../platform/contextkey/common/contextkeys.js'; + import { IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from '../../platform/contextkey/common/contextkeys.js'; -import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext, IsEnabledFileDownloads, IsEnabledFileUploads } from '../common/contextkeys.js'; +import { SplitEditorsVertically, InEditorZenModeContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsMainEditorCenteredLayoutContext, MainEditorAreaVisibleContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, TitleBarVisibleContext, TitleBarStyleContext, IsAuxiliaryWindowFocusedContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorGroupLockedContext, MultipleEditorGroupsContext, EditorsVisibleContext, AuxiliaryBarMaximizedContext, InAutomationContext, IsEnabledFileDownloads, IsEnabledFileUploads, IsEnabledCoderGettingStarted, } from '../common/contextkeys.js'; - import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow, isEditableElement } from '../../base/browser/dom.js'; import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from '../services/editor/common/editorGroupsService.js'; import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; -@@ -211,6 +211,7 @@ export class WorkbenchContextKeysHandler + import { IBrowserWorkbenchEnvironmentService } from '../services/environment/browser/environmentService.js'; +@@ -202,6 +202,7 @@ export class WorkbenchContextKeysHandler // code-server IsEnabledFileDownloads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileDownloads ?? true) IsEnabledFileUploads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileUploads ?? true) From 811ec6c1d60add2eb92446161ca812828fdbaa7f Mon Sep 17 00:00:00 2001 From: Olivier Benz Date: Sat, 18 Oct 2025 00:32:32 +0200 Subject: [PATCH 141/150] Update Code to 1.105.1 (#7531) --- lib/vscode | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vscode b/lib/vscode index 03c265b1adee..7d842fb85a02 160000 --- a/lib/vscode +++ b/lib/vscode @@ -1 +1 @@ -Subproject commit 03c265b1adee71ac88f833e065f7bb956b60550a +Subproject commit 7d842fb85a0275a4a8e4d7e040d2625abbf7f084 From db8a41bce14aec3eea7d9a7461c14f081c918947 Mon Sep 17 00:00:00 2001 From: Andrew Baldwin Date: Tue, 28 Oct 2025 20:10:56 -0400 Subject: [PATCH 142/150] Add idle timeout (#7539) --- docs/FAQ.md | 8 ++--- src/node/cli.ts | 19 ++++++++++ src/node/heart.ts | 46 ++++++++++++++---------- src/node/main.ts | 24 ++++++++++++- src/node/routes/index.ts | 14 +++++--- test/unit/node/heart.test.ts | 68 +++++++++++++++++++++++++++++++----- test/unit/node/main.test.ts | 5 +-- 7 files changed, 144 insertions(+), 40 deletions(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index 2e01306cb2f2..a695cc64ac6a 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -322,12 +322,8 @@ As long as there is an active browser connection, code-server touches `~/.local/share/code-server/heartbeat` once a minute. If you want to shutdown code-server if there hasn't been an active connection -after a predetermined amount of time, you can do so by checking continuously for -the last modified time on the heartbeat file. If it is older than X minutes (or -whatever amount of time you'd like), you can kill code-server. - -Eventually, [#1636](https://github.com/coder/code-server/issues/1636) will make -this process better. +after a predetermined amount of time, you can use the --idle-timeout-seconds flag +or set an `CODE_SERVER_IDLE_TIMEOUT_SECONDS` environment variable. ## How do I change the password? diff --git a/src/node/cli.ts b/src/node/cli.ts index 70ede42a0591..0fce9cfbf25f 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -94,6 +94,7 @@ export interface UserProvidedArgs extends UserProvidedCodeArgs { "welcome-text"?: string "abs-proxy-base-path"?: string i18n?: string + "idle-timeout-seconds"?: number /* Positional arguments. */ _?: string[] } @@ -303,6 +304,10 @@ export const options: Options> = { path: true, description: "Path to JSON file with custom translations. Merges with default strings and supports all i18n keys.", }, + "idle-timeout-seconds": { + type: "number", + description: "Timeout in seconds to wait before shutting down when idle.", + }, } export const optionDescriptions = (opts: Partial>> = options): string[] => { @@ -396,6 +401,10 @@ export const parse = ( throw new Error("--github-auth can only be set in the config file or passed in via $GITHUB_TOKEN") } + if (key === "idle-timeout-seconds" && Number(value) <= 60) { + throw new Error("--idle-timeout-seconds must be greater than 60 seconds.") + } + const option = options[key] if (option.type === "boolean") { ;(args[key] as boolean) = true @@ -611,6 +620,16 @@ export async function setDefaults(cliArgs: UserProvidedArgs, configArgs?: Config args["github-auth"] = process.env.GITHUB_TOKEN } + if (process.env.CODE_SERVER_IDLE_TIMEOUT_SECONDS) { + if (isNaN(Number(process.env.CODE_SERVER_IDLE_TIMEOUT_SECONDS))) { + logger.info("CODE_SERVER_IDLE_TIMEOUT_SECONDS must be a number") + } + if (Number(process.env.CODE_SERVER_IDLE_TIMEOUT_SECONDS) <= 60) { + throw new Error("--idle-timeout-seconds must be greater than 60 seconds.") + } + args["idle-timeout-seconds"] = Number(process.env.CODE_SERVER_IDLE_TIMEOUT_SECONDS) + } + // Ensure they're not readable by child processes. delete process.env.PASSWORD delete process.env.HASHED_PASSWORD diff --git a/src/node/heart.ts b/src/node/heart.ts index aac917257f23..b78f4edb80d2 100644 --- a/src/node/heart.ts +++ b/src/node/heart.ts @@ -1,5 +1,6 @@ import { logger } from "@coder/logger" import { promises as fs } from "fs" +import { Emitter } from "../common/emitter" /** * Provides a heartbeat using a local file to indicate activity. @@ -8,6 +9,9 @@ export class Heart { private heartbeatTimer?: NodeJS.Timeout private heartbeatInterval = 60000 public lastHeartbeat = 0 + private readonly _onChange = new Emitter<"alive" | "expired" | "unknown">() + readonly onChange = this._onChange.event + private state: "alive" | "expired" | "unknown" = "expired" public constructor( private readonly heartbeatPath: string, @@ -17,6 +21,13 @@ export class Heart { this.alive = this.alive.bind(this) } + private setState(state: typeof this.state) { + if (this.state !== state) { + this.state = state + this._onChange.emit(this.state) + } + } + public alive(): boolean { const now = Date.now() return now - this.lastHeartbeat < this.heartbeatInterval @@ -28,6 +39,7 @@ export class Heart { */ public async beat(): Promise { if (this.alive()) { + this.setState("alive") return } @@ -36,7 +48,22 @@ export class Heart { if (typeof this.heartbeatTimer !== "undefined") { clearTimeout(this.heartbeatTimer) } - this.heartbeatTimer = setTimeout(() => heartbeatTimer(this.isActive, this.beat), this.heartbeatInterval) + + this.heartbeatTimer = setTimeout(async () => { + try { + if (await this.isActive()) { + this.beat() + } else { + this.setState("expired") + } + } catch (error: unknown) { + logger.warn((error as Error).message) + this.setState("unknown") + } + }, this.heartbeatInterval) + + this.setState("alive") + try { return await fs.writeFile(this.heartbeatPath, "") } catch (error: any) { @@ -53,20 +80,3 @@ export class Heart { } } } - -/** - * Helper function for the heartbeatTimer. - * - * If heartbeat is active, call beat. Otherwise do nothing. - * - * Extracted to make it easier to test. - */ -export async function heartbeatTimer(isActive: Heart["isActive"], beat: Heart["beat"]) { - try { - if (await isActive()) { - beat() - } - } catch (error: unknown) { - logger.warn((error as Error).message) - } -} diff --git a/src/node/main.ts b/src/node/main.ts index 6f8e28dbdea7..c2d3bd57852b 100644 --- a/src/node/main.ts +++ b/src/node/main.ts @@ -11,6 +11,7 @@ import { loadCustomStrings } from "./i18n" import { register } from "./routes" import { VSCodeModule } from "./routes/vscode" import { isDirectory, open } from "./util" +import { wrapper } from "./wrapper" /** * Return true if the user passed an extension-related VS Code flag. @@ -141,7 +142,7 @@ export const runCodeServer = async ( const app = await createApp(args) const protocol = args.cert ? "https" : "http" const serverAddress = ensureAddress(app.server, protocol) - const disposeRoutes = await register(app, args) + const { disposeRoutes, heart } = await register(app, args) logger.info(`Using config file ${args.config}`) logger.info(`${protocol.toUpperCase()} server listening on ${serverAddress.toString()}`) @@ -166,6 +167,27 @@ export const runCodeServer = async ( logger.info(" - Not serving HTTPS") } + if (args["idle-timeout-seconds"]) { + logger.info(` - Idle timeout set to ${args["idle-timeout-seconds"]} seconds`) + + let idleShutdownTimer: NodeJS.Timeout | undefined + const startIdleShutdownTimer = () => { + idleShutdownTimer = setTimeout(() => { + logger.warn(`Idle timeout of ${args["idle-timeout-seconds"]} seconds exceeded`) + wrapper.exit(0) + }, args["idle-timeout-seconds"]! * 1000) + } + + startIdleShutdownTimer() + + heart.onChange((state) => { + clearTimeout(idleShutdownTimer) + if (state === "expired") { + startIdleShutdownTimer() + } + }) + } + if (args["disable-proxy"]) { logger.info(" - Proxy disabled") } else if (args["proxy-domain"].length > 0) { diff --git a/src/node/routes/index.ts b/src/node/routes/index.ts index 2841b5a01113..28bfc58d3ee7 100644 --- a/src/node/routes/index.ts +++ b/src/node/routes/index.ts @@ -28,7 +28,10 @@ import * as vscode from "./vscode" /** * Register all routes and middleware. */ -export const register = async (app: App, args: DefaultedArgs): Promise => { +export const register = async ( + app: App, + args: DefaultedArgs, +): Promise<{ disposeRoutes: Disposable["dispose"]; heart: Heart }> => { const heart = new Heart(path.join(paths.data, "heartbeat"), async () => { return new Promise((resolve, reject) => { // getConnections appears to not call the callback when there are no more @@ -173,8 +176,11 @@ export const register = async (app: App, args: DefaultedArgs): Promise { - heart.dispose() - vscode.dispose() + return { + disposeRoutes: () => { + heart.dispose() + vscode.dispose() + }, + heart, } } diff --git a/test/unit/node/heart.test.ts b/test/unit/node/heart.test.ts index 7aa6f08dc2bf..7ad0d21752f2 100644 --- a/test/unit/node/heart.test.ts +++ b/test/unit/node/heart.test.ts @@ -1,6 +1,6 @@ import { logger } from "@coder/logger" import { readFile, writeFile, stat, utimes } from "fs/promises" -import { Heart, heartbeatTimer } from "../../../src/node/heart" +import { Heart } from "../../../src/node/heart" import { clean, mockLogger, tmpdir } from "../../utils/helpers" const mockIsActive = (resolveTo: boolean) => jest.fn().mockResolvedValue(resolveTo) @@ -82,31 +82,81 @@ describe("Heart", () => { }) describe("heartbeatTimer", () => { - beforeAll(() => { + const testName = "heartbeatTimer" + let testDir = "" + beforeAll(async () => { + await clean(testName) + testDir = await tmpdir(testName) mockLogger() }) afterAll(() => { jest.restoreAllMocks() }) + beforeEach(() => { + jest.useFakeTimers() + }) afterEach(() => { jest.resetAllMocks() + jest.clearAllTimers() + jest.useRealTimers() }) - it("should call beat when isActive resolves to true", async () => { + it("should call isActive when timeout expires", async () => { const isActive = true const mockIsActive = jest.fn().mockResolvedValue(isActive) - const mockBeatFn = jest.fn() - await heartbeatTimer(mockIsActive, mockBeatFn) + const heart = new Heart(`${testDir}/shutdown.txt`, mockIsActive) + await heart.beat() + jest.advanceTimersByTime(60 * 1000) expect(mockIsActive).toHaveBeenCalled() - expect(mockBeatFn).toHaveBeenCalled() }) it("should log a warning when isActive rejects", async () => { const errorMsg = "oh no" const error = new Error(errorMsg) const mockIsActive = jest.fn().mockRejectedValue(error) - const mockBeatFn = jest.fn() - await heartbeatTimer(mockIsActive, mockBeatFn) + const heart = new Heart(`${testDir}/shutdown.txt`, mockIsActive) + await heart.beat() + jest.advanceTimersByTime(60 * 1000) + expect(mockIsActive).toHaveBeenCalled() - expect(mockBeatFn).not.toHaveBeenCalled() expect(logger.warn).toHaveBeenCalledWith(errorMsg) }) }) + +describe("stateChange", () => { + const testName = "stateChange" + let testDir = "" + let heart: Heart + beforeAll(async () => { + await clean(testName) + testDir = await tmpdir(testName) + mockLogger() + }) + afterAll(() => { + jest.restoreAllMocks() + }) + afterEach(() => { + jest.resetAllMocks() + if (heart) { + heart.dispose() + } + }) + it("should change to alive after a beat", async () => { + heart = new Heart(`${testDir}/shutdown.txt`, mockIsActive(true)) + const mockOnChange = jest.fn() + heart.onChange(mockOnChange) + await heart.beat() + + expect(mockOnChange.mock.calls[0][0]).toBe("alive") + }) + it.only("should change to expired when not active", async () => { + jest.useFakeTimers() + heart = new Heart(`${testDir}/shutdown.txt`, () => new Promise((resolve) => resolve(false))) + const mockOnChange = jest.fn() + heart.onChange(mockOnChange) + await heart.beat() + + await jest.advanceTimersByTime(60 * 1000) + expect(mockOnChange.mock.calls[1][0]).toBe("expired") + jest.clearAllTimers() + jest.useRealTimers() + }) +}) diff --git a/test/unit/node/main.test.ts b/test/unit/node/main.test.ts index 09ee6b512ef9..39ba2ca8bf9b 100644 --- a/test/unit/node/main.test.ts +++ b/test/unit/node/main.test.ts @@ -16,6 +16,7 @@ jest.mock("@coder/logger", () => ({ debug: jest.fn(), warn: jest.fn(), error: jest.fn(), + named: jest.fn(), level: 0, }, field: jest.fn(), @@ -94,7 +95,7 @@ describe("main", () => { // Mock routes module jest.doMock("../../../src/node/routes", () => ({ - register: jest.fn().mockResolvedValue(jest.fn()), + register: jest.fn().mockResolvedValue({ disposeRoutes: jest.fn() }), })) // Mock loadCustomStrings to succeed @@ -131,7 +132,7 @@ describe("main", () => { // Mock routes module jest.doMock("../../../src/node/routes", () => ({ - register: jest.fn().mockResolvedValue(jest.fn()), + register: jest.fn().mockResolvedValue({ disposeRoutes: jest.fn() }), })) // Import runCodeServer after mocking From add51d5c5b558f236d6c40240239edcf3976fc3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:11:23 -0800 Subject: [PATCH 143/150] chore: bump actions/download-artifact from 4 to 5 (#7506) --- .github/workflows/build.yaml | 4 ++-- .github/workflows/release.yaml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0a243e388740..7c93cb03bb67 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -241,7 +241,7 @@ jobs: package-lock.json test/package-lock.json - run: SKIP_SUBMODULE_DEPS=1 npm ci - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v5 with: name: npm-package - run: tar -xzf package.tar.gz @@ -275,7 +275,7 @@ jobs: package-lock.json test/package-lock.json - run: SKIP_SUBMODULE_DEPS=1 npm ci - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v5 with: name: npm-package - run: tar -xzf package.tar.gz diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a16fc6b90ac7..e7d2ee8dbef9 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -94,7 +94,7 @@ jobs: echo "$HOME/.local/bin" >> $GITHUB_PATH - name: Download npm package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: npm-release-package @@ -160,7 +160,7 @@ jobs: - run: brew install python-setuptools - name: Download npm package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: npm-release-package @@ -221,7 +221,7 @@ jobs: - run: brew install python-setuptools - name: Download npm package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: npm-release-package @@ -253,7 +253,7 @@ jobs: needs: npm-version steps: - name: Download npm package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: npm-release-package From 7beb05d04f5eec85b3a18a1b0dd5aba0820eeee3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:11:42 -0800 Subject: [PATCH 144/150] chore: bump aquasecurity/trivy-action from 0.32.0 to 0.33.1 (#7507) --- .github/workflows/security.yaml | 2 +- .github/workflows/trivy-docker.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index a14094d92e82..427cab174473 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -51,7 +51,7 @@ jobs: fetch-depth: 0 - name: Run Trivy vulnerability scanner in repo mode - uses: aquasecurity/trivy-action@dc5a429b52fcf669ce959baa2c2dd26090d2a6c4 + uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 with: scan-type: "fs" scan-ref: "." diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index 06ca72ae6429..8a35ca58c932 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -51,7 +51,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in image mode - uses: aquasecurity/trivy-action@dc5a429b52fcf669ce959baa2c2dd26090d2a6c4 + uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 with: image-ref: "docker.io/codercom/code-server:latest" ignore-unfixed: true From 35e7b09a858360a9df1f93f07847e7fdf88bb73b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:12:00 -0800 Subject: [PATCH 145/150] chore: bump actions/checkout from 4 to 5 (#7508) --- .github/workflows/build.yaml | 20 ++++++++++---------- .github/workflows/installer.yaml | 6 +++--- .github/workflows/publish.yaml | 10 +++++----- .github/workflows/release.yaml | 6 +++--- .github/workflows/scripts.yaml | 4 ++-- .github/workflows/security.yaml | 6 +++--- .github/workflows/trivy-docker.yaml | 2 +- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7c93cb03bb67..beb2a43a31c0 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -32,7 +32,7 @@ jobs: helm: ${{ steps.filter.outputs.helm }} steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Check changed files uses: dorny/paths-filter@v3 id: filter @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-22.04 timeout-minutes: 5 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version-file: .node-version @@ -82,7 +82,7 @@ jobs: needs: changes if: needs.changes.outputs.docs == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version-file: .node-version @@ -100,7 +100,7 @@ jobs: needs: changes if: needs.changes.outputs.helm == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: azure/setup-helm@v4 with: token: ${{ secrets.GITHUB_TOKEN }} @@ -114,7 +114,7 @@ jobs: needs: changes if: needs.changes.outputs.code == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version-file: .node-version @@ -132,7 +132,7 @@ jobs: if: needs.changes.outputs.ci == 'true' steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Check workflow files run: | bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) 1.7.1 @@ -146,7 +146,7 @@ jobs: needs: changes if: needs.changes.outputs.code == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version-file: .node-version @@ -169,7 +169,7 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} DISABLE_V8_COMPILE_CACHE: 1 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true - run: sudo apt update && sudo apt install -y libkrb5-dev @@ -231,7 +231,7 @@ jobs: needs: [changes, build] if: needs.changes.outputs.code == 'true' || needs.changes.outputs.deps == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: sudo apt update && sudo apt install -y libkrb5-dev - uses: actions/setup-node@v4 with: @@ -265,7 +265,7 @@ jobs: needs: [changes, build] if: needs.changes.outputs.code == 'true' || needs.changes.outputs.deps == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: sudo apt update && sudo apt install -y libkrb5-dev - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/installer.yaml b/.github/workflows/installer.yaml index e8b04453dcfc..c33ee0070763 100644 --- a/.github/workflows/installer.yaml +++ b/.github/workflows/installer.yaml @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install code-server run: ./install.sh @@ -44,7 +44,7 @@ jobs: container: "alpine:3.17" steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install curl run: apk add curl @@ -67,7 +67,7 @@ jobs: steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install code-server run: ./install.sh diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 91e320087175..374c35876d41 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code-server - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install Node.js uses: actions/setup-node@v4 @@ -65,7 +65,7 @@ jobs: uses: Homebrew/actions/setup-homebrew@master - name: Checkout code-server - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Configure git run: | @@ -94,13 +94,13 @@ jobs: steps: # We need to checkout code-server so we can get the version - name: Checkout code-server - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 path: "./code-server" - name: Checkout code-server-aur repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: "cdrci/code-server-aur" token: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }} @@ -148,7 +148,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code-server - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e7d2ee8dbef9..2536983d2b45 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -60,7 +60,7 @@ jobs: steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install Node.js uses: actions/setup-node@v4 @@ -134,7 +134,7 @@ jobs: steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install Node.js uses: actions/setup-node@v4 @@ -195,7 +195,7 @@ jobs: steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install Node.js uses: actions/setup-node@v4 diff --git a/.github/workflows/scripts.yaml b/.github/workflows/scripts.yaml index d3ca65cbc548..a39d90ad4c96 100644 --- a/.github/workflows/scripts.yaml +++ b/.github/workflows/scripts.yaml @@ -41,7 +41,7 @@ jobs: container: "alpine:3.17" steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install test utilities run: apk add bats checkbashisms @@ -58,7 +58,7 @@ jobs: timeout-minutes: 5 steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install lint utilities run: sudo apt install shellcheck diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index 427cab174473..d8afcfce34d7 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -25,7 +25,7 @@ jobs: timeout-minutes: 15 steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 @@ -46,7 +46,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 @@ -76,7 +76,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/trivy-docker.yaml b/.github/workflows/trivy-docker.yaml index 8a35ca58c932..97769603da9e 100644 --- a/.github/workflows/trivy-docker.yaml +++ b/.github/workflows/trivy-docker.yaml @@ -48,7 +48,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run Trivy vulnerability scanner in image mode uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 From 9d89b17fd71a7c2d6fe2569e538f6f3e4cac006d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:12:45 -0800 Subject: [PATCH 146/150] chore: bump express and @types/express (#7510) --- package-lock.json | 266 +++++++++++++++------------------------------- 1 file changed, 83 insertions(+), 183 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c98099e0bb5..c1ba76c91b98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -610,15 +610,14 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", - "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", + "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/qs": "*", "@types/serve-static": "*" } }, @@ -1640,18 +1639,18 @@ } }, "node_modules/body-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", - "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.0", "http-errors": "^2.0.0", - "iconv-lite": "^0.5.2", + "iconv-lite": "^0.6.3", "on-finished": "^2.4.1", - "qs": "6.14.0", + "qs": "^6.14.0", "raw-body": "^3.0.0", "type-is": "^2.0.0" }, @@ -2150,16 +2149,6 @@ "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -2903,55 +2892,45 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/express": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", - "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.0.1", + "body-parser": "^2.2.0", "content-disposition": "^1.0.0", - "content-type": "~1.0.4", - "cookie": "0.7.1", + "content-type": "^1.0.5", + "cookie": "^0.7.1", "cookie-signature": "^1.2.1", - "debug": "4.3.6", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "^2.0.0", - "fresh": "2.0.0", - "http-errors": "2.0.0", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", - "methods": "~1.1.2", "mime-types": "^3.0.0", - "on-finished": "2.4.1", - "once": "1.4.0", - "parseurl": "~1.3.3", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "router": "^2.0.0", - "safe-buffer": "5.2.1", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", "send": "^1.1.0", - "serve-static": "^2.1.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "^2.0.0", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { "node": ">= 18" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/cookie-signature": { @@ -2963,44 +2942,6 @@ "node": ">=6.6.0" } }, - "node_modules/express/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3669,12 +3610,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -4480,15 +4421,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -4630,20 +4562,21 @@ } }, "node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", - "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "mime-db": "^1.53.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" @@ -5120,12 +5053,13 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/pem": { @@ -5334,30 +5268,34 @@ } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.6.3", + "iconv-lite": "0.7.0", "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/readable-stream": { @@ -5535,11 +5473,13 @@ } }, "node_modules/router": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.1.0.tgz", - "integrity": "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" @@ -5653,19 +5593,18 @@ } }, "node_modules/send": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", - "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { "debug": "^4.3.5", - "destroy": "^1.2.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", - "fresh": "^0.5.2", + "fresh": "^2.0.0", "http-errors": "^2.0.0", - "mime-types": "^2.1.35", + "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", @@ -5675,46 +5614,16 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-static": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", - "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", - "send": "^1.0.0" + "send": "^1.2.0" }, "engines": { "node": ">= 18" @@ -6307,9 +6216,9 @@ } }, "node_modules/type-is": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", - "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -6621,15 +6530,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", From af397f71e27a863ba98d10d8ec25a0c79690710c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:13:15 -0800 Subject: [PATCH 147/150] chore: bump globals from 16.1.0 to 16.4.0 (#7511) --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1ba76c91b98..d28270f78106 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3357,9 +3357,9 @@ } }, "node_modules/globals": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", - "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", "dev": true, "license": "MIT", "engines": { From 7a2a5eb055f3d9fd4d1315933946350a53ac43b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:13:34 -0800 Subject: [PATCH 148/150] chore: bump eslint from 9.32.0 to 9.36.0 (#7513) --- package-lock.json | 48 +++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index d28270f78106..8bd50af3431d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,9 +128,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -190,9 +190,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -200,9 +200,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -250,9 +250,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", "dev": true, "license": "MIT", "engines": { @@ -273,13 +273,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -2479,20 +2479,20 @@ } }, "node_modules/eslint": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/js": "9.36.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", From 282f74d9f5c5a9e95d26e54f5ecda8fe4ed73b96 Mon Sep 17 00:00:00 2001 From: SuitDeer <114341346+SuitDeer@users.noreply.github.com> Date: Wed, 29 Oct 2025 01:14:17 +0100 Subject: [PATCH 149/150] Update Node.js version in Android docs from 18 to 22 (#7542) --- docs/android.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/android.md b/docs/android.md index 2659c44000b8..0b1dc24abf6e 100644 --- a/docs/android.md +++ b/docs/android.md @@ -14,8 +14,8 @@ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 7. Install and use Node.js 22: ```shell -nvm install 18 -nvm use 18 +nvm install 22 +nvm use 22 ``` 8. Install code-server globally on device with: `npm install --global code-server` From 897b5f13bc4ec22d0fba1fda07d5f06fc567e144 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:14:42 -0800 Subject: [PATCH 150/150] chore: bump playwright and @playwright/test in /test (#7534) --- test/package-lock.json | 26 +++++++++++++------------- test/package.json | 4 ++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/test/package-lock.json b/test/package-lock.json index f7ee4863c278..4e28618543cd 100644 --- a/test/package-lock.json +++ b/test/package-lock.json @@ -7,7 +7,7 @@ "license": "MIT", "devDependencies": { "@jest-mock/express": "^1.4.5", - "@playwright/test": "^1.46.0", + "@playwright/test": "^1.56.1", "@types/jest": "^27.0.2", "@types/jsdom": "^16.2.13", "@types/node-fetch": "^2.5.8", @@ -18,7 +18,7 @@ "jest-fetch-mock": "^3.0.3", "jsdom": "^16.4.0", "node-fetch": "^2.6.7", - "playwright": "^1.46.0", + "playwright": "^1.56.1", "ts-jest": "^27.0.7", "wtfnode": "^0.9.1" } @@ -1012,13 +1012,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.2.tgz", - "integrity": "sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.47.2" + "playwright": "1.56.1" }, "bin": { "playwright": "cli.js" @@ -4305,13 +4305,13 @@ } }, "node_modules/playwright": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.2.tgz", - "integrity": "sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.47.2" + "playwright-core": "1.56.1" }, "bin": { "playwright": "cli.js" @@ -4324,9 +4324,9 @@ } }, "node_modules/playwright-core": { - "version": "1.47.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz", - "integrity": "sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/test/package.json b/test/package.json index 6d2e92edd2ee..c8211337a79c 100644 --- a/test/package.json +++ b/test/package.json @@ -3,7 +3,7 @@ "#": "We must put jest in a sub-directory otherwise VS Code somehow picks up the types and generates conflicts with mocha.", "devDependencies": { "@jest-mock/express": "^1.4.5", - "@playwright/test": "^1.46.0", + "@playwright/test": "^1.56.1", "@types/jest": "^27.0.2", "@types/jsdom": "^16.2.13", "@types/node-fetch": "^2.5.8", @@ -14,7 +14,7 @@ "jest-fetch-mock": "^3.0.3", "jsdom": "^16.4.0", "node-fetch": "^2.6.7", - "playwright": "^1.46.0", + "playwright": "^1.56.1", "ts-jest": "^27.0.7", "wtfnode": "^0.9.1" },