
This service worker is a conceptual derivative of the existing @angular/service-worker maintained at github.com/angular/mobile-toolkit, but has been rewritten to support use across a much wider variety of applications. Entrypoints include: @angular/service-worker: a library for use within Angular client apps to communicate with the service worker. @angular/service-worker/gen: a library for generating ngsw.json files from glob-based SW config files. @angular/service-worker/ngsw-worker.js: the bundled service worker script itself. @angular/service-worker/ngsw-cli.js: a CLI tool for generating ngsw.json files from glob-based SW config files.
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {Injectable} from '@angular/core';
|
|
import {Observable} from 'rxjs/Observable';
|
|
import {defer as obs_defer} from 'rxjs/observable/defer';
|
|
import {map as op_map} from 'rxjs/operator/map';
|
|
|
|
import {NgswCommChannel, UpdateActivatedEvent, UpdateAvailableEvent} from './low_level';
|
|
|
|
|
|
/**
|
|
* Subscribe to update notifications from the Service Worker, trigger update
|
|
* checks, and forcibly activate updates.
|
|
*
|
|
* @experimental
|
|
*/
|
|
@Injectable()
|
|
export class SwUpdate {
|
|
readonly available: Observable<UpdateAvailableEvent>;
|
|
readonly activated: Observable<UpdateActivatedEvent>;
|
|
|
|
constructor(private sw: NgswCommChannel) {
|
|
this.available = this.sw.eventsOfType('UPDATE_AVAILABLE');
|
|
this.activated = this.sw.eventsOfType('UPDATE_ACTIVATED');
|
|
}
|
|
|
|
checkForUpdate(): Promise<void> {
|
|
const statusNonce = this.sw.generateNonce();
|
|
return this.sw.postMessageWithStatus('CHECK_FOR_UPDATES', {statusNonce}, statusNonce);
|
|
}
|
|
|
|
activateUpdate(): Promise<void> {
|
|
const statusNonce = this.sw.generateNonce();
|
|
return this.sw.postMessageWithStatus('ACTIVATE_UPDATE', {statusNonce}, statusNonce);
|
|
}
|
|
}
|