{"version":3,"sources":["../yjs/node_modules/browser-pack/_prelude.js","src/ServiceWorker.js"],"names":[],"mappings":";;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"y-serviceworker.es6","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","/* global Y, MessageChannel */\n'use strict'\n\nfunction extend (Y) {\n  class YServiceWorker extends Y.AbstractConnector {\n    constructor (y, options) {\n      if (options === undefined) {\n        throw new Error('Options must not be undefined!')\n      }\n      if (options.room == null) {\n        throw new Error('You must define a room name!')\n      }\n\n      options.role = 'slave'\n      options.preferUntransformed = true\n      super(y, options)\n      this.debug = Y.debug('y:service-worker')\n\n      this.y.db.stopGarbageCollector()\n      this.options = options\n      this.guid = Y.utils.generateGuid() // we send this unique id with every postMessage. Later it becomes the userId\n      var self = this\n      var setNewServiceWorker = function (sw) {\n        self.serviceworker = sw\n        var messageChannel = new MessageChannel()\n        messageChannel.port1.onmessage = self.messageEventListener\n        self.serviceworker.postMessage({\n          type: 'join',\n          room: options.room,\n          auth: options.auth,\n          guid: self.guid\n        }, [messageChannel.port2])\n        self.userJoined('serviceworker', 'master')\n      }\n      navigator.serviceWorker.ready.then(function (registration) {\n        setNewServiceWorker(registration.controller || registration.active)\n        self.whenSynced(function () {\n          self.setUserId(self.guid)\n        })\n        navigator.serviceWorker.addEventListener('controllerchange', function () {\n          self.debug('controllerchanged')\n          var sw = navigator.serviceWorker.controller\n          if (self.serviceworker !== sw && sw !== null) {\n            self.debug('replace old sw')\n            self.userLeft('serviceworker')\n            setNewServiceWorker(sw)\n          }\n        })\n      })\n\n      this.messageEventListener = function (event) {\n        if (event.data.room === options.room && (event.data.guid == null || event.data.guid === self.guid)) {\n          if (event.data.type === 'message') {\n            self.receiveMessage('serviceworker', event.data.message)\n          }\n        }\n      }\n      navigator.serviceWorker.addEventListener('message', this.messageEventListener)\n    }\n    destroy () {\n      navigator.serviceWorker.removeEventListener('message', this.messageEventListener)\n      this.userLeft('serviceworker')\n      this.serviceworker.postMessage({\n        type: 'leave',\n        room: this.options.room,\n        guid: this.guid\n      })\n    }\n    disconnect () {\n      // do nothing\n    }\n    reconnect () {\n      // do nothing\n    }\n    send (uid, message) {\n      this.broadcast(message)\n      super.send(uid, message)\n    }\n    broadcast (message) {\n      this.serviceworker.postMessage({\n        type: 'message',\n        room: this.options.room,\n        message: message,\n        guid: this.guid\n      })\n      super.broadcast(message)\n    }\n    isDisconnected () {\n      return false\n    }\n  }\n  Y.extend('serviceworker', YServiceWorker)\n}\n\nmodule.exports = extend\nif (typeof Y !== 'undefined') {\n  extend(Y)\n}\n"]}