onesignal-web-sdk
Version:
Web push notifications from OneSignal.
79 lines (72 loc) • 2.7 kB
text/typescript
import CacheStorage from './models/CacheStorage';
import Clients from './models/Clients';
import ServiceWorkerRegistration from './models/ServiceWorkerRegistration';
import { handleEvents } from './utils/events';
import { EventHandler } from "../../../../src/libraries/Emitter";
import WorkerNavigator from './models/WorkerNavigator';
export default class ServiceWorkerGlobalScope implements EventTarget {
/* Define methods ES5-style otherwise Object.assign(global, serviceWorkerGlobalScope) won't copy
ES6 style methods */
public clients: Clients;
public registration: ServiceWorkerRegistration;
public caches: CacheStorage;
private listeners: Map<string, EventHandler[]>;
public something: any;
public skipWaiting;
public addEventListener;
public removeEventListener;
public dispatchEvent;
public navigator: WorkerNavigator;
constructor() {
this.clients = new Clients();
this.registration = new ServiceWorkerRegistration();
this.caches = new CacheStorage();
this.listeners = new Map();
this.navigator = new WorkerNavigator(
"Mozilla",
"Netscape",
"5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36",
"MacIntel",
"Gecko",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36"
);
this.skipWaiting = async function() { };
this.addEventListener = function(eventName: string, callback: EventHandler) {
if (this.listeners.has(eventName)) {
const handlers = this.listeners.get(eventName);
handlers.push(callback);
this.listeners.set(eventName, handlers);
}
else
this.listeners.set(eventName, [callback]);
};
this.removeEventListener = function(eventName: string, callback: EventHandler) {
if (this.listeners.has(eventName)) {
const handlers = this.listeners.get(eventName);
const index = handlers.indexOf(callback);
if (index > -1) {
handlers.splice(index, 1);
this.listeners.set(eventName, handlers);
}
}
};
this.dispatchEvent = function(event: Event): boolean {
const handlers = this.listeners.get(event.type);
if (handlers) {
for (const handler of handlers) {
handler(event);
}
return true;
} else {
return false;
}
};
}
snapshot() {
return {
caches: this.caches.snapshot(),
clients: this.clients.snapshot(),
notifications: this.registration.snapshot()
};
}
};