@codingame/monaco-vscode-view-common-service-override 32.0.1 → 32.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-view-common-service-override",
3
- "version": "32.0.1",
3
+ "version": "32.0.2",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - view-common service-override",
6
6
  "keywords": [],
@@ -15,8 +15,8 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "32.0.1",
19
- "@codingame/monaco-vscode-bulk-edit-service-override": "32.0.1"
18
+ "@codingame/monaco-vscode-api": "32.0.2",
19
+ "@codingame/monaco-vscode-bulk-edit-service-override": "32.0.2"
20
20
  },
21
21
  "main": "index.js",
22
22
  "module": "index.js",
@@ -5,7 +5,7 @@
5
5
  <meta charset="UTF-8">
6
6
 
7
7
  <meta http-equiv="Content-Security-Policy"
8
- content="default-src 'none'; script-src 'sha256-4iXnHx3puY8EO0djr5yXkmzShogiDoTzrjUeJjTZBmU=' 'self'; frame-src 'self'; style-src 'unsafe-inline';">
8
+ content="default-src 'none'; script-src 'sha256-2bgY7b4AY+EULl24tUGduYOHUHUBH5EuIHGYqk8TM+k=' 'self'; frame-src 'self'; style-src 'unsafe-inline';">
9
9
 
10
10
  <!-- Disable pinch zooming -->
11
11
  <meta name="viewport"
@@ -53,9 +53,6 @@
53
53
 
54
54
  perfMark('scriptStart');
55
55
 
56
- /** @type {MessageChannel | undefined} */
57
- let outerIframeMessageChannel;
58
-
59
56
  /**
60
57
  * Use polling to track focus of main webview and iframes within the webview
61
58
  *
@@ -201,7 +198,7 @@
201
198
  ::highlight(current-find-highlight) {
202
199
  background-color: var(--vscode-editor-findMatchBackground);
203
200
  }
204
- }`;
201
+ }`;
205
202
 
206
203
  /**
207
204
  * @param {boolean} allowMultipleAPIAcquire
@@ -258,65 +255,30 @@
258
255
  }
259
256
 
260
257
  const swPath = encodeURI(`${serviceWorkerUri}?v=${expectedWorkerVersion}&vscode-resource-base-authority=${searchParams.get('vscode-resource-base-authority')}&remoteAuthority=${searchParams.get('remoteAuthority') ?? ''}`);
261
- navigator.serviceWorker.register(swPath, { type: 'module' })
258
+ navigator.serviceWorker.register(swPath, { type: 'module', updateViaCache: 'none' })
262
259
  .then(async registration => {
263
- /**
264
- * @param {MessageEvent} event
265
- */
266
- const versionHandler = async (event) => {
267
- if (event.data.channel !== 'version') {
268
- return;
269
- }
270
-
271
- navigator.serviceWorker.removeEventListener('message', versionHandler);
272
- if (event.data.version === expectedWorkerVersion) {
273
- return resolve();
274
- } else {
275
- console.log(`Found unexpected service worker version. Found: ${event.data.version}. Expected: ${expectedWorkerVersion}`);
276
- console.log(`Attempting to reload service worker`);
277
-
278
- // If we have the wrong version, try once (and only once) to unregister and re-register
279
- // Note that `.update` doesn't seem to work desktop electron at the moment so we use
280
- // `unregister` and `register` here.
281
- return registration.unregister()
282
- .then(() => navigator.serviceWorker.register(swPath))
283
- .finally(() => { resolve(); });
284
- }
285
- };
286
- navigator.serviceWorker.addEventListener('message', versionHandler);
287
-
288
- const postVersionMessage = (/** @type {ServiceWorker} */ controller) => {
289
- outerIframeMessageChannel = new MessageChannel();
290
- controller.postMessage({ channel: 'version' }, [outerIframeMessageChannel.port2]);
291
- };
292
-
293
- // At this point, either the service worker is ready and
294
- // became our controller, or we need to wait for it.
295
- // Note that navigator.serviceWorker.controller could be a
296
- // controller from a previously loaded service worker.
297
- const currentController = navigator.serviceWorker.controller;
298
- if (currentController?.scriptURL.endsWith(swPath)) {
299
- // service worker already loaded & ready to receive messages
300
- postVersionMessage(currentController);
301
- } else {
302
- if (currentController) {
303
- console.log(`Found unexpected service worker controller. Found: ${currentController.scriptURL}. Expected: ${swPath}. Waiting for controllerchange.`);
304
- } else {
305
- console.log(`No service worker controller found. Waiting for controllerchange.`);
306
- }
260
+ if (navigator.serviceWorker.controller) {
261
+ // A previous SW is already controlling. Force an update
262
+ // check so we don't serve stale resources after a VS Code
263
+ // update. register() resolves before the update check
264
+ // completes, so we must call update() explicitly to wait
265
+ // for the download + byte-comparison to finish.
266
+ registration = await registration.update();
267
+ }
307
268
 
308
- // Either there's no controlling service worker, or it's an old one.
309
- // Wait for it to change before posting the message
310
- const onControllerChange = () => {
311
- navigator.serviceWorker.removeEventListener('controllerchange', onControllerChange);
312
- if (navigator.serviceWorker.controller) {
313
- postVersionMessage(navigator.serviceWorker.controller);
314
- } else {
315
- return reject(new Error('No controller found.'));
316
- }
317
- };
318
- navigator.serviceWorker.addEventListener('controllerchange', onControllerChange);
269
+ // If a new worker was found, wait for it to take control via skipWaiting() + clients.claim() in the SW.
270
+ if (
271
+ // New worker
272
+ registration.installing || registration.waiting
273
+ // First ever load
274
+ || !navigator.serviceWorker.controller
275
+ ) {
276
+ await new Promise(r => {
277
+ navigator.serviceWorker.addEventListener('controllerchange', r, { once: true });
278
+ });
319
279
  }
280
+
281
+ return resolve();
320
282
  }).catch(error => {
321
283
  if (!onElectron && error instanceof Error && error.message.includes('user denied permission')) {
322
284
  return reject(new Error(`Could not register service worker. Please make sure third party cookies are enabled: ${error}`));
@@ -460,11 +422,21 @@
460
422
 
461
423
  if (!disableServiceWorker) {
462
424
  hostMessaging.onMessage('did-load-resource', (_event, data) => {
463
- assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'did-load-resource', data }, data.data?.buffer ? [data.data.buffer] : []);
425
+ const transfer = data.stream ? [data.stream] : [];
426
+ assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'did-load-resource', data }, transfer);
464
427
  });
465
428
 
466
- hostMessaging.onMessage('did-load-localhost', (_event, data) => {
467
- assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'did-load-localhost', data });
429
+ for (const channel of [
430
+ 'did-load-resource-end',
431
+ 'did-load-localhost',
432
+ ]) {
433
+ hostMessaging.onMessage(channel, (_event, data) => {
434
+ assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel, data });
435
+ });
436
+ }
437
+
438
+ hostMessaging.onMessage('did-load-resource-chunk', (_event, data) => {
439
+ assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'did-load-resource-chunk', data }, data.data?.buffer ? [data.data.buffer] : []);
468
440
  });
469
441
 
470
442
  navigator.serviceWorker.addEventListener('message', event => {
@@ -711,7 +683,7 @@
711
683
  * @param {KeyboardEvent} e
712
684
  * @return {boolean}
713
685
  */
714
- function isHelp(e) {
686
+ function isHelp(e) {
715
687
  // 112: keyCode of "F1"
716
688
  return e.keyCode === 112;
717
689
  }
@@ -1220,16 +1192,6 @@
1220
1192
  unloadMonitor.onIframeLoaded(newFrame);
1221
1193
  }
1222
1194
 
1223
- if (!disableServiceWorker && outerIframeMessageChannel) {
1224
- outerIframeMessageChannel.port1.onmessage = event => {
1225
- switch (event.data.channel) {
1226
- case 'load-resource':
1227
- case 'load-localhost':
1228
- hostMessaging.postMessage(event.data.channel, event.data);
1229
- return;
1230
- }
1231
- };
1232
- }
1233
1195
  });
1234
1196
 
1235
1197
  // propagate vscode-context-menu-visible class