code-server/patches/service-worker.diff
Joe Previte 690e0aff45
fix: add handle for resolveExternalUri (#5624)
* fix: add handle for resolveExternalUri

This adds a fix to properly handle `resolveExternalUri` which is used by
extensions like Tabnine.

* fixup!: update patch

* fixup!: force update proxy patch

* fixup!: use proxyEndpointTemplate else manually add

* fixup!: throw error if productConfiguration missing

* feat(testing): add asExternalUri

This modifies the test extension used in e2e test by registering a new
command for testing `asExternalUri`.

* feat: add e2e test for asExternalUri

* docs: update playwright setup comments

* feat: add support for VSCODE_PROXY_URI

* chore: refresh patches

* feat: add test for VSCODE_PROXY_URI

* chore: add metadata to lang extension

* fixup!: fix part of service-worker patch

* fixup!: remove e2e test, update patch notes

* fixup!: refresh disable-downloads

* fixup!: formatting
2022-10-14 16:08:58 +00:00

68 lines
2.6 KiB
Diff

Add a service worker
To test try installing code-server as a PWA.
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
@@ -36,6 +36,10 @@ export interface IProductConfiguration {
readonly updateEndpoint?: string
readonly logoutEndpoint?: string
readonly proxyEndpointTemplate?: string
+ readonly serviceWorker?: {
+ readonly path: string;
+ readonly scope: string;
+ }
readonly version: string;
readonly date?: string;
Index: code-server/lib/vscode/src/vs/workbench/browser/client.ts
===================================================================
--- code-server.orig/lib/vscode/src/vs/workbench/browser/client.ts
+++ code-server/lib/vscode/src/vs/workbench/browser/client.ts
@@ -89,6 +89,10 @@ export class CodeServerClient extends Di
if (this.productService.logoutEndpoint) {
this.addLogoutCommand(this.productService.logoutEndpoint);
}
+
+ if (this.productService.serviceWorker) {
+ await this.registerServiceWorker(this.productService.serviceWorker);
+ }
}
private checkUpdates(updateEndpoint: string) {
@@ -161,4 +165,17 @@ export class CodeServerClient extends Di
});
}
}
+
+ private async registerServiceWorker(serviceWorker: { path: string; scope: string }) {
+ if (typeof navigator !== 'undefined' && 'serviceWorker' in navigator) {
+ try {
+ await navigator.serviceWorker.register(serviceWorker.path, {
+ scope: serviceWorker.scope,
+ });
+ this.logService.info('[Service Worker] registered');
+ } catch (error: any) {
+ this.logService.error('[Service Worker] registration', error as Error);
+ }
+ }
+ }
}
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,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}}',
+ serviceWorker: {
+ scope: vscodeBase + '/',
+ path: base + '/_static/out/browser/serviceWorker.js',
+ },
embedderIdentifier: 'server-distro',
extensionsGallery: this._productService.extensionsGallery,
},