firetruss-worker 3.0.0 → 3.1.1

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/Gruntfile.js CHANGED
@@ -1,4 +1,4 @@
1
- /* eslint-env node */
1
+ 'use strict';
2
2
 
3
3
  const nodeResolve = require('@rollup/plugin-node-resolve').nodeResolve;
4
4
  const commonjs = require('@rollup/plugin-commonjs');
@@ -3,7 +3,7 @@
3
3
  const fireworkers = [];
4
4
  const apps = {};
5
5
  // This version is filled in by the build, don't reformat the line.
6
- const VERSION = '3.0.0';
6
+ const VERSION = '3.1.1';
7
7
 
8
8
 
9
9
  class LocalStorage {
@@ -113,7 +113,7 @@ class Branch {
113
113
  let replace = true;
114
114
  const keysToReplace = [];
115
115
  for (const childKey in newValue) {
116
- if (!newValue.hasOwnProperty(childKey)) continue;
116
+ if (!Object.hasOwn(newValue, childKey)) continue;
117
117
  const replaceChild = this._diffRecursively(
118
118
  oldValue[childKey], newValue[childKey], segments.concat(childKey), updates);
119
119
  if (replaceChild) {
@@ -124,7 +124,7 @@ class Branch {
124
124
  }
125
125
  if (replace) return true;
126
126
  for (const childKey in oldValue) {
127
- if (!oldValue.hasOwnProperty(childKey) || newValue.hasOwnProperty(childKey)) continue;
127
+ if (!Object.hasOwn(oldValue, childKey) || Object.hasOwn(newValue, childKey)) continue;
128
128
  updates[segments.concat(childKey).join('/')] = null;
129
129
  delete oldValue[childKey];
130
130
  }
@@ -260,7 +260,19 @@ class Fireworker {
260
260
  }
261
261
 
262
262
  _flushMessageQueue() {
263
- this._port.postMessage(this._messages);
263
+ try {
264
+ this._port.postMessage(this._messages);
265
+ } catch {
266
+ for (const message of this._messages) {
267
+ try {
268
+ this._port.postMessage([message]);
269
+ } catch (e) {
270
+ const error = {name: e.name, message: e.message};
271
+ if (message.error) error.cause = `${message.error.name}: ${message.error.message}`;
272
+ this._port.postMessage([{msg: 'crash', error}]);
273
+ }
274
+ }
275
+ }
264
276
  this._messages = [];
265
277
  }
266
278
 
@@ -288,7 +300,7 @@ class Fireworker {
288
300
  // authCallbacks otherwise we end up in a bogus state!
289
301
  if (this._auth.currentUser === null) {
290
302
  for (const callbackId in this._callbacks) {
291
- if (!this._callbacks.hasOwnProperty(callbackId)) continue;
303
+ if (!Object.hasOwn(this._callbacks, callbackId)) continue;
292
304
  const callback = this._callbacks[callbackId];
293
305
  if (callback.auth) callback(null);
294
306
  }
@@ -345,7 +357,7 @@ class Fireworker {
345
357
  delete this._callbacks[callbackId];
346
358
  } else {
347
359
  for (const key of Object.keys(this._callbacks)) {
348
- if (!this._callbacks.hasOwnProperty(key)) continue;
360
+ if (!Object.hasOwn(this._callbacks, key)) continue;
349
361
  const callback = this._callbacks[key];
350
362
  if (callback.listenerKey === listenerKey &&
351
363
  (!eventType || callback.eventType === eventType)) {
@@ -370,7 +382,7 @@ class Fireworker {
370
382
  }
371
383
  const updates = options.branch.diff(value, path);
372
384
  for (const childPath in updates) {
373
- if (!updates.hasOwnProperty(childPath)) continue;
385
+ if (!Object.hasOwn(updates, childPath)) continue;
374
386
  this._send({
375
387
  msg: 'callback', id: callbackId,
376
388
  args: [null, {
@@ -409,7 +421,7 @@ class Fireworker {
409
421
  if (stale) value = oldValue;
410
422
  if (relativeUpdates) {
411
423
  for (const relativePath in relativeUpdates) {
412
- if (!relativeUpdates.hasOwnProperty(relativePath)) continue;
424
+ if (!Object.hasOwn(relativeUpdates, relativePath)) continue;
413
425
  if (relativePath) {
414
426
  const segments = relativePath.split('/');
415
427
  if (value === undefined || value === null) value = {};
@@ -435,7 +447,7 @@ class Fireworker {
435
447
  const snapshots = [];
436
448
  const updates = branch.diff(normalizeFirebaseValue(result.snapshot.val()), transactionPath);
437
449
  for (const path in updates) {
438
- if (!updates.hasOwnProperty(path)) continue;
450
+ if (!Object.hasOwn(updates, path)) continue;
439
451
  snapshots.push({
440
452
  path, value: updates[path], writeSerial: result.writeSerial || this._lastWriteSerial
441
453
  });
@@ -494,7 +506,7 @@ class Fireworker {
494
506
  Fireworker._signalStaticConfigError(
495
507
  new Error(`Cannot expose a function with no name: ${fn}`));
496
508
  }
497
- if (Fireworker._exposed.hasOwnProperty(name)) {
509
+ if (Object.hasOwn(Fireworker._exposed, name)) {
498
510
  Fireworker._signalStaticConfigError(new Error(`Function ${name}() already exposed`));
499
511
  }
500
512
  if (Fireworker._firstMessageReceived) {
@@ -532,7 +544,10 @@ function errorToJson(error) {
532
544
  const json = {name: error.name, message: error.message};
533
545
  const propertyNames = Object.getOwnPropertyNames(error);
534
546
  for (const propertyName of propertyNames) {
535
- json[propertyName] = error[propertyName];
547
+ const type = typeof error[propertyName];
548
+ if (type === 'string' || type === 'number' || type === 'boolean') {
549
+ json[propertyName] = error[propertyName];
550
+ }
536
551
  }
537
552
  return json;
538
553
  }
@@ -549,7 +564,7 @@ function normalizeFirebaseValue(value) {
549
564
  }
550
565
  if (value instanceof Object) {
551
566
  for (const key in value) {
552
- if (value.hasOwnProperty(key)) value[key] = normalizeFirebaseValue(value[key]);
567
+ if (Object.hasOwn(value, key)) value[key] = normalizeFirebaseValue(value[key]);
553
568
  }
554
569
  }
555
570
  return value;
@@ -574,11 +589,11 @@ function areEqualNormalFirebaseValues(a, b) {
574
589
  if (a === null || b === null) return false;
575
590
  if (!(typeof a === 'object' && typeof b === 'object')) return false;
576
591
  for (const key in a) {
577
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
592
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
578
593
  if (!areEqualNormalFirebaseValues(a[key], b[key])) return false;
579
594
  }
580
595
  for (const key in b) {
581
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
596
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
582
597
  }
583
598
  return true;
584
599
  }
@@ -589,11 +604,11 @@ function areEqualValues(a, b) {
589
604
  if (a === null || b === null || a === undefined || b === undefined) return false;
590
605
  if (!(typeof a === 'object' && typeof b === 'object')) return false;
591
606
  for (const key in a) {
592
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
607
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
593
608
  if (!areEqualValues(a[key], b[key])) return false;
594
609
  }
595
610
  for (const key in b) {
596
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
611
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
597
612
  }
598
613
  if (Array.isArray(a) || Array.isArray(b)) {
599
614
  if (!Array.isArray(a) || !Array.isArray(b)) return false;
@@ -606,12 +621,12 @@ function areEqualValues(a, b) {
606
621
  }
607
622
 
608
623
  function acceptConnections() {
609
- if (typeof onconnect !== 'undefined') {
624
+ if (typeof onconnect === 'undefined') {
625
+ fireworkers.push(new Fireworker(self));
626
+ } else {
610
627
  self.onconnect = function(event) {
611
628
  fireworkers.push(new Fireworker(event.ports[0]));
612
629
  };
613
- } else {
614
- fireworkers.push(new Fireworker(self));
615
630
  }
616
631
  self.localStorage.flushPending();
617
632
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker.es2015.js","sources":["../src/worker.js"],"sourcesContent":["/* globals firebase */\n\nconst fireworkers = [];\nconst apps = {};\n// This version is filled in by the build, don't reformat the line.\nconst VERSION = '3.0.0';\n\n\nclass LocalStorage {\n constructor() {\n this._items = [];\n this._pendingItems = [];\n this._initialized = false;\n this._flushPending = this.flushPending.bind(this);\n }\n\n init(items) {\n if (!this._initialized) {\n this._items = items;\n this._initialized = true;\n }\n }\n\n _update(item) {\n if (!this._pendingItems.length) Promise.resolve().then(this._flushPending);\n this._pendingItems.push(item);\n }\n\n flushPending() {\n if (!this._pendingItems.length) return;\n if (!fireworkers.length) {\n setTimeout(this._flushPending, 200);\n return;\n }\n fireworkers[0]._send({msg: 'updateLocalStorage', items: this._pendingItems});\n this._pendingItems = [];\n }\n\n get length() {return this._items.length;}\n\n key(n) {\n return this._items[n].key;\n }\n\n getItem(key) {\n for (const item of this._items) {\n if (item.key === key) return item.value;\n }\n return null;\n }\n\n setItem(key, value) {\n let targetItem;\n for (const item of this._items) {\n if (item.key === key) {\n targetItem = item;\n item.value = value;\n break;\n }\n }\n if (!targetItem) {\n targetItem = {key, value};\n this._items.push(targetItem);\n }\n this._update(targetItem);\n }\n\n removeItem(key) {\n for (let i = 0; i < this._items.length; i++) {\n if (this._items[i].key === key) {\n this._items.splice(i, 1);\n this._update({key, value: null});\n break;\n }\n }\n }\n\n clear() {\n for (const item in this._items) {\n this._update({key: item.key, value: null});\n }\n this._items = [];\n }\n}\n\nself.localStorage = new LocalStorage();\n\n\nclass Branch {\n constructor() {\n this._root = null;\n }\n\n set(value) {\n this._root = value;\n }\n\n diff(value, pathPrefix) {\n const updates = {};\n const segments = pathPrefix === '/' ? [''] : pathPrefix.split('/');\n if (this._diffRecursively(this._root, value, segments, updates)) {\n this._root = value;\n updates[pathPrefix] = value;\n }\n return updates;\n }\n\n _diffRecursively(oldValue, newValue, segments, updates) {\n if (oldValue === undefined) oldValue = null;\n if (newValue === undefined) newValue = null;\n if (oldValue === null) return newValue !== null;\n if (oldValue instanceof Object && newValue instanceof Object) {\n let replace = true;\n const keysToReplace = [];\n for (const childKey in newValue) {\n if (!newValue.hasOwnProperty(childKey)) continue;\n const replaceChild = this._diffRecursively(\n oldValue[childKey], newValue[childKey], segments.concat(childKey), updates);\n if (replaceChild) {\n keysToReplace.push(childKey);\n } else {\n replace = false;\n }\n }\n if (replace) return true;\n for (const childKey in oldValue) {\n if (!oldValue.hasOwnProperty(childKey) || newValue.hasOwnProperty(childKey)) continue;\n updates[segments.concat(childKey).join('/')] = null;\n delete oldValue[childKey];\n }\n for (const childKey of keysToReplace) {\n updates[segments.concat(childKey).join('/')] = newValue[childKey];\n oldValue[childKey] = newValue[childKey];\n }\n } else {\n return newValue !== oldValue;\n }\n }\n}\n\n\nexport default class Fireworker {\n constructor(port) {\n this._port = port;\n this._lastWriteSerial = 0;\n this._app = undefined;\n this._cachedAuth = undefined;\n this._cachedDatabase = undefined;\n this._lastJsonUser = undefined;\n this._configError = Fireworker._staticConfigError;\n this._callbacks = {};\n this._messages = [];\n this._flushMessageQueue = this._flushMessageQueue.bind(this);\n port.onmessage = this._receive.bind(this);\n }\n\n get _auth() {\n if (this._cachedAuth) return this._cachedAuth;\n if (!this._app) throw new Error('Must provide Firebase configuration data first');\n return this._cachedAuth = this._app.auth();\n }\n\n get _database() {\n if (this._cachedDatabase) return this._cachedDatabase;\n if (!this._app) throw new Error('Must provide Firebase configuration data first');\n if (Fireworker._databaseWrapperCallback) {\n this._cachedDatabase = Fireworker._databaseWrapperCallback(this._app.database());\n } else {\n this._cachedDatabase = this._app.database();\n }\n return this._cachedDatabase;\n }\n\n init({storage, config}) {\n if (storage) self.localStorage.init(storage);\n if (config) {\n try {\n this._app = apps[config.databaseURL];\n if (!this._app) {\n this._app = apps[config.databaseURL] = firebase.initializeApp(config, config.databaseURL);\n // If the API key looks invalid then assume that we're running against Cinderbase rather\n // than Firebase and override the configuration appropriately.\n if (config.apiKey && config.apiKey.length < 20) {\n this._app.database().INTERNAL.forceWebSockets();\n this._app.auth().useEmulator(config.databaseURL, {disableWarnings: true});\n }\n }\n this._app.database();\n this._app.auth();\n this._configError = Fireworker._staticConfigError;\n } catch (e) {\n this._configError = e;\n throw e;\n }\n } else if (this._configError) {\n throw this._configError;\n }\n return {\n exposedFunctionNames: Object.keys(Fireworker._exposed),\n version: VERSION,\n firebaseSdkVersion: firebase.SDK_VERSION\n };\n }\n\n destroy() {\n for (const key in this._callbacks) {\n const callback = this._callbacks[key];\n if (callback.cancel) callback.cancel();\n }\n this._callbacks = {};\n this._port.onmessage = null;\n this._messages = [];\n const k = fireworkers.indexOf(this);\n if (k >= 0) fireworkers[k] = null;\n }\n\n enableFirebaseLogging({value}) {\n firebase.database.enableLogging(value);\n }\n\n ping() {\n // Noop, placeholder for legacy Firetruss clients.\n }\n\n bounceConnection() {\n this._database.goOffline();\n this._database.goOnline();\n }\n\n _receive(event) {\n Fireworker._firstMessageReceived = true;\n for (const message of event.data) this._receiveMessage(message);\n }\n\n _receiveMessage(message) {\n let promise;\n try {\n const fn = this[message.msg];\n if (typeof fn !== 'function') throw new Error('Unknown message: ' + message.msg);\n if (message.writeSerial) {\n this._lastWriteSerial = Math.max(this._lastWriteSerial, message.writeSerial);\n }\n promise = Promise.resolve(fn.call(this, message));\n } catch (e) {\n e.immediateFailure = true;\n promise = Promise.reject(e);\n }\n if (!message.oneWay) {\n promise.then(result => {\n this._send({msg: 'resolve', id: message.id, result});\n }, error => {\n this._send({msg: 'reject', id: message.id, error: errorToJson(error)});\n });\n }\n }\n\n _send(message) {\n if (!this._messages.length) Promise.resolve().then(this._flushMessageQueue);\n this._messages.push(message);\n }\n\n _flushMessageQueue() {\n this._port.postMessage(this._messages);\n this._messages = [];\n }\n\n call({name, args}) {\n try {\n return Promise.resolve(Fireworker._exposed[name].apply(null, args));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n authWithCustomToken({url, authToken}) {\n return this._auth.signInWithCustomToken(authToken)\n .then(result => userToJson(result.user));\n }\n\n authAnonymously({url}) {\n return this._auth.signInAnonymously()\n .then(result => userToJson(result.user));\n }\n\n unauth({url}) {\n return this._auth.signOut().catch(e => {\n // We can ignore the error if the user is signed out anyway, but make sure to notify all\n // authCallbacks otherwise we end up in a bogus state!\n if (this._auth.currentUser === null) {\n for (const callbackId in this._callbacks) {\n if (!this._callbacks.hasOwnProperty(callbackId)) continue;\n const callback = this._callbacks[callbackId];\n if (callback.auth) callback(null);\n }\n } else {\n return Promise.reject(e);\n }\n });\n }\n\n onAuth({url, callbackId}) {\n const authCallback = this._callbacks[callbackId] = this._onAuthCallback.bind(this, callbackId);\n authCallback.auth = true;\n authCallback.cancel = this._auth.onIdTokenChanged(authCallback);\n }\n\n _onAuthCallback(callbackId, user) {\n userToJson(user).then(jsonUser => {\n if (areEqualValues(this._lastJsonUser, jsonUser)) return;\n this._lastJsonUser = jsonUser;\n this._send({msg: 'callback', id: callbackId, args: [jsonUser]});\n });\n }\n\n set({url, value}) {\n return this._createRef(url).set(value);\n }\n\n update({url, value}) {\n return this._createRef(url).update(value);\n }\n\n once({url}) {\n return this._createRef(url).once('value').then(snapshot => this._snapshotToJson(snapshot));\n }\n\n on({listenerKey, url, spec, eventType, callbackId, options}) {\n options = options || {};\n if (options.sync) options.branch = new Branch();\n options.cancel = this.off.bind(this, {listenerKey, url, spec, eventType, callbackId});\n const snapshotCallback = this._callbacks[callbackId] =\n this._onSnapshotCallback.bind(this, callbackId, options);\n snapshotCallback.listenerKey = listenerKey;\n snapshotCallback.eventType = eventType;\n snapshotCallback.cancel = options.cancel;\n const cancelCallback = this._onCancelCallback.bind(this, callbackId);\n this._createRef(url, spec).on(eventType, snapshotCallback, cancelCallback);\n }\n\n off({listenerKey, url, spec, eventType, callbackId}) {\n let snapshotCallback;\n if (callbackId) {\n // Callback IDs will not be reused across on() calls, so it's safe to just delete it.\n snapshotCallback = this._callbacks[callbackId];\n delete this._callbacks[callbackId];\n } else {\n for (const key of Object.keys(this._callbacks)) {\n if (!this._callbacks.hasOwnProperty(key)) continue;\n const callback = this._callbacks[key];\n if (callback.listenerKey === listenerKey &&\n (!eventType || callback.eventType === eventType)) {\n delete this._callbacks[key];\n }\n }\n }\n this._createRef(url, spec).off(eventType, snapshotCallback);\n }\n\n _onSnapshotCallback(callbackId, options, snapshot) {\n if (options.sync && options.rest) {\n const path = decodeURIComponent(\n snapshot.ref.toString().replace(/.*?:\\/\\/[^/]*/, '').replace(/\\/$/, ''));\n let value;\n try {\n value = normalizeFirebaseValue(snapshot.val());\n } catch (e) {\n options.cancel();\n this._onCancelCallback(callbackId, e);\n return;\n }\n const updates = options.branch.diff(value, path);\n for (const childPath in updates) {\n if (!updates.hasOwnProperty(childPath)) continue;\n this._send({\n msg: 'callback', id: callbackId,\n args: [null, {\n path: childPath, value: updates[childPath], writeSerial: this._lastWriteSerial\n }]\n });\n }\n } else {\n try {\n const snapshotJson = this._snapshotToJson(snapshot);\n if (options.sync) options.branch.set(snapshotJson.value);\n this._send({msg: 'callback', id: callbackId, args: [null, snapshotJson]});\n options.rest = true;\n } catch (e) {\n options.cancel();\n this._onCancelCallback(callbackId, e);\n }\n }\n }\n\n _onCancelCallback(callbackId, error) {\n delete this._callbacks[callbackId];\n this._send({msg: 'callback', id: callbackId, args: [errorToJson(error)]});\n }\n\n transaction({url, oldValue, relativeUpdates}) {\n const transactionPath = decodeURIComponent(url.replace(/.*?:\\/\\/[^/]*/, '').replace(/\\/$/, ''));\n const ref = this._createRef(url);\n const branch = new Branch();\n let stale, committedValue;\n\n return ref.transaction(value => {\n committedValue = undefined;\n value = normalizeFirebaseValue(value);\n stale = !areEqualNormalFirebaseValues(value, oldValue);\n if (stale) value = oldValue;\n if (relativeUpdates) {\n for (const relativePath in relativeUpdates) {\n if (!relativeUpdates.hasOwnProperty(relativePath)) continue;\n if (relativePath) {\n const segments = relativePath.split('/');\n if (value === undefined || value === null) value = {};\n let object = value;\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i];\n let child = object[key];\n if (child === undefined || child === null) child = object[key] = {};\n object = child;\n }\n object[segments[segments.length - 1]] = relativeUpdates[relativePath];\n } else {\n value = relativeUpdates[relativePath];\n }\n }\n }\n branch.set(value);\n if (!stale) {\n committedValue = value;\n return value;\n }\n }).then(result => {\n const snapshots = [];\n const updates = branch.diff(normalizeFirebaseValue(result.snapshot.val()), transactionPath);\n for (const path in updates) {\n if (!updates.hasOwnProperty(path)) continue;\n snapshots.push({\n path, value: updates[path], writeSerial: result.writeSerial || this._lastWriteSerial\n });\n }\n return {committed: !stale, snapshots};\n }, error => {\n if (error.message === 'set' || error.message === 'disconnect') {\n return ref.once('value').then(snapshot => {\n return {committed: false, snapshots: [snapshot], writeSerial: this._lastWriteSerial};\n });\n }\n error.committedValue = committedValue;\n return Promise.reject(error);\n });\n }\n\n _snapshotToJson(snapshot) {\n const path =\n decodeURIComponent(snapshot.ref.toString().replace(/.*?:\\/\\/[^/]*/, '').replace(/\\/$/, ''));\n return {\n path, value: normalizeFirebaseValue(snapshot.val()), writeSerial: this._lastWriteSerial\n };\n }\n\n onDisconnect({url, method, value}) {\n const onDisconnect = this._createRef(url).onDisconnect();\n return onDisconnect[method](value);\n }\n\n _createRef(url, spec) {\n if (!this._app) throw new Error('Must provide Firebase configuration data first');\n try {\n let ref = this._database.refFromURL(url);\n if (spec) {\n switch (spec.by) {\n case '$key': ref = ref.orderByKey(); break;\n case '$value': ref = ref.orderByValue(); break;\n default: ref = ref.orderByChild(spec.by); break;\n }\n if (spec.at !== undefined) ref = ref.equalTo(spec.at);\n else if (spec.from !== undefined) ref = ref.startAt(spec.from);\n else if (spec.to !== undefined) ref = ref.endAt(spec.to);\n if (spec.first !== undefined) ref = ref.limitToFirst(spec.first);\n else if (spec.last !== undefined) ref = ref.limitToLast(spec.last);\n }\n return ref;\n } catch (e) {\n e.extra = {url, spec};\n throw e;\n }\n }\n\n static expose(fn, name) {\n name = name || fn.name;\n if (!name) {\n Fireworker._signalStaticConfigError(\n new Error(`Cannot expose a function with no name: ${fn}`));\n }\n if (Fireworker._exposed.hasOwnProperty(name)) {\n Fireworker._signalStaticConfigError(new Error(`Function ${name}() already exposed`));\n }\n if (Fireworker._firstMessageReceived) {\n Fireworker._signalStaticConfigError(new Error('Too late to expose function, worker in use'));\n }\n Fireworker._exposed[name] = fn;\n }\n\n static setDatabaseWrapperCallback(fn) {\n if (Fireworker._databaseWrapperCallback) {\n Fireworker._signalStaticConfigError(new Error('Database wrapper callback already set'));\n }\n if (Fireworker._firstMessageReceived) {\n Fireworker._signalStaticConfigError(\n new Error('Too late to set database wrapper callback, worker in use'));\n }\n Fireworker._databaseWrapperCallback = fn;\n }\n\n static _signalStaticConfigError(error) {\n if (!Fireworker._staticConfigError) Fireworker._staticConfigError = error;\n for (const fireworker of fireworkers) {\n if (fireworker && !fireworker._configError) fireworker._configError = error;\n }\n throw error;\n }\n}\n\nFireworker._exposed = {};\nFireworker._firstMessageReceived = false;\nFireworker._databaseWrapperCallback = undefined;\nFireworker._staticConfigError = undefined;\n\nfunction errorToJson(error) {\n const json = {name: error.name, message: error.message};\n const propertyNames = Object.getOwnPropertyNames(error);\n for (const propertyName of propertyNames) {\n json[propertyName] = error[propertyName];\n }\n return json;\n}\n\nfunction normalizeFirebaseValue(value) {\n if (Array.isArray(value)) {\n const normalValue = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (item === undefined || item === null) continue;\n normalValue[i] = normalizeFirebaseValue(item);\n }\n return normalValue;\n }\n if (value instanceof Object) {\n for (const key in value) {\n if (value.hasOwnProperty(key)) value[key] = normalizeFirebaseValue(value[key]);\n }\n }\n return value;\n}\n\nfunction userToJson(user) {\n if (!user) return Promise.resolve(user);\n const json = user.toJSON();\n delete json.stsTokenManager;\n return user.getIdTokenResult().then(result => {\n delete result.claims.exp;\n delete result.claims.iat;\n json.claims = result.claims;\n return json;\n });\n}\n\n\nfunction areEqualNormalFirebaseValues(a, b) {\n if (a === b) return true;\n if ((a === null || a === undefined) && (b === null || b === undefined)) return true;\n if (a === null || b === null) return false;\n if (!(typeof a === 'object' && typeof b === 'object')) return false;\n for (const key in a) {\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;\n if (!areEqualNormalFirebaseValues(a[key], b[key])) return false;\n }\n for (const key in b) {\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;\n }\n return true;\n}\n\nfunction areEqualValues(a, b) {\n if (a === b) return true;\n if (a === null && b === null || a === undefined && b === undefined) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (!(typeof a === 'object' && typeof b === 'object')) return false;\n for (const key in a) {\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;\n if (!areEqualValues(a[key], b[key])) return false;\n }\n for (const key in b) {\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;\n }\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!areEqualValues(a[i], b[i])) return false;\n }\n }\n return true;\n}\n\nfunction acceptConnections() {\n if (typeof onconnect !== 'undefined') {\n self.onconnect = function(event) {\n fireworkers.push(new Fireworker(event.ports[0]));\n };\n } else {\n fireworkers.push(new Fireworker(self));\n }\n self.localStorage.flushPending();\n}\n\nself.window = self;\nacceptConnections();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.es2015.js","sources":["../src/worker.js"],"sourcesContent":["/* globals firebase */\n\nconst fireworkers = [];\nconst apps = {};\n// This version is filled in by the build, don't reformat the line.\nconst VERSION = '3.1.1';\n\n\nclass LocalStorage {\n constructor() {\n this._items = [];\n this._pendingItems = [];\n this._initialized = false;\n this._flushPending = this.flushPending.bind(this);\n }\n\n init(items) {\n if (!this._initialized) {\n this._items = items;\n this._initialized = true;\n }\n }\n\n _update(item) {\n if (!this._pendingItems.length) Promise.resolve().then(this._flushPending);\n this._pendingItems.push(item);\n }\n\n flushPending() {\n if (!this._pendingItems.length) return;\n if (!fireworkers.length) {\n setTimeout(this._flushPending, 200);\n return;\n }\n fireworkers[0]._send({msg: 'updateLocalStorage', items: this._pendingItems});\n this._pendingItems = [];\n }\n\n get length() {return this._items.length;}\n\n key(n) {\n return this._items[n].key;\n }\n\n getItem(key) {\n for (const item of this._items) {\n if (item.key === key) return item.value;\n }\n return null;\n }\n\n setItem(key, value) {\n let targetItem;\n for (const item of this._items) {\n if (item.key === key) {\n targetItem = item;\n item.value = value;\n break;\n }\n }\n if (!targetItem) {\n targetItem = {key, value};\n this._items.push(targetItem);\n }\n this._update(targetItem);\n }\n\n removeItem(key) {\n for (let i = 0; i < this._items.length; i++) {\n if (this._items[i].key === key) {\n this._items.splice(i, 1);\n this._update({key, value: null});\n break;\n }\n }\n }\n\n clear() {\n for (const item in this._items) {\n this._update({key: item.key, value: null});\n }\n this._items = [];\n }\n}\n\nself.localStorage = new LocalStorage();\n\n\nclass Branch {\n constructor() {\n this._root = null;\n }\n\n set(value) {\n this._root = value;\n }\n\n diff(value, pathPrefix) {\n const updates = {};\n const segments = pathPrefix === '/' ? [''] : pathPrefix.split('/');\n if (this._diffRecursively(this._root, value, segments, updates)) {\n this._root = value;\n updates[pathPrefix] = value;\n }\n return updates;\n }\n\n _diffRecursively(oldValue, newValue, segments, updates) {\n if (oldValue === undefined) oldValue = null;\n if (newValue === undefined) newValue = null;\n if (oldValue === null) return newValue !== null;\n if (oldValue instanceof Object && newValue instanceof Object) {\n let replace = true;\n const keysToReplace = [];\n for (const childKey in newValue) {\n if (!Object.hasOwn(newValue, childKey)) continue;\n const replaceChild = this._diffRecursively(\n oldValue[childKey], newValue[childKey], segments.concat(childKey), updates);\n if (replaceChild) {\n keysToReplace.push(childKey);\n } else {\n replace = false;\n }\n }\n if (replace) return true;\n for (const childKey in oldValue) {\n if (!Object.hasOwn(oldValue, childKey) || Object.hasOwn(newValue, childKey)) continue;\n updates[segments.concat(childKey).join('/')] = null;\n delete oldValue[childKey];\n }\n for (const childKey of keysToReplace) {\n updates[segments.concat(childKey).join('/')] = newValue[childKey];\n oldValue[childKey] = newValue[childKey];\n }\n } else {\n return newValue !== oldValue;\n }\n }\n}\n\n\nexport default class Fireworker {\n constructor(port) {\n this._port = port;\n this._lastWriteSerial = 0;\n this._app = undefined;\n this._cachedAuth = undefined;\n this._cachedDatabase = undefined;\n this._lastJsonUser = undefined;\n this._configError = Fireworker._staticConfigError;\n this._callbacks = {};\n this._messages = [];\n this._flushMessageQueue = this._flushMessageQueue.bind(this);\n port.onmessage = this._receive.bind(this);\n }\n\n get _auth() {\n if (this._cachedAuth) return this._cachedAuth;\n if (!this._app) throw new Error('Must provide Firebase configuration data first');\n return this._cachedAuth = this._app.auth();\n }\n\n get _database() {\n if (this._cachedDatabase) return this._cachedDatabase;\n if (!this._app) throw new Error('Must provide Firebase configuration data first');\n if (Fireworker._databaseWrapperCallback) {\n this._cachedDatabase = Fireworker._databaseWrapperCallback(this._app.database());\n } else {\n this._cachedDatabase = this._app.database();\n }\n return this._cachedDatabase;\n }\n\n init({storage, config}) {\n if (storage) self.localStorage.init(storage);\n if (config) {\n try {\n this._app = apps[config.databaseURL];\n if (!this._app) {\n this._app = apps[config.databaseURL] = firebase.initializeApp(config, config.databaseURL);\n // If the API key looks invalid then assume that we're running against Cinderbase rather\n // than Firebase and override the configuration appropriately.\n if (config.apiKey && config.apiKey.length < 20) {\n this._app.database().INTERNAL.forceWebSockets();\n this._app.auth().useEmulator(config.databaseURL, {disableWarnings: true});\n }\n }\n this._app.database();\n this._app.auth();\n this._configError = Fireworker._staticConfigError;\n } catch (e) {\n this._configError = e;\n throw e;\n }\n } else if (this._configError) {\n throw this._configError;\n }\n return {\n exposedFunctionNames: Object.keys(Fireworker._exposed),\n version: VERSION,\n firebaseSdkVersion: firebase.SDK_VERSION\n };\n }\n\n destroy() {\n for (const key in this._callbacks) {\n const callback = this._callbacks[key];\n if (callback.cancel) callback.cancel();\n }\n this._callbacks = {};\n this._port.onmessage = null;\n this._messages = [];\n const k = fireworkers.indexOf(this);\n if (k >= 0) fireworkers[k] = null;\n }\n\n enableFirebaseLogging({value}) {\n firebase.database.enableLogging(value);\n }\n\n ping() {\n // Noop, placeholder for legacy Firetruss clients.\n }\n\n bounceConnection() {\n this._database.goOffline();\n this._database.goOnline();\n }\n\n _receive(event) {\n Fireworker._firstMessageReceived = true;\n for (const message of event.data) this._receiveMessage(message);\n }\n\n _receiveMessage(message) {\n let promise;\n try {\n const fn = this[message.msg];\n if (typeof fn !== 'function') throw new Error('Unknown message: ' + message.msg);\n if (message.writeSerial) {\n this._lastWriteSerial = Math.max(this._lastWriteSerial, message.writeSerial);\n }\n promise = Promise.resolve(fn.call(this, message));\n } catch (e) {\n e.immediateFailure = true;\n promise = Promise.reject(e);\n }\n if (!message.oneWay) {\n promise.then(result => {\n this._send({msg: 'resolve', id: message.id, result});\n }, error => {\n this._send({msg: 'reject', id: message.id, error: errorToJson(error)});\n });\n }\n }\n\n _send(message) {\n if (!this._messages.length) Promise.resolve().then(this._flushMessageQueue);\n this._messages.push(message);\n }\n\n _flushMessageQueue() {\n try {\n this._port.postMessage(this._messages);\n } catch {\n for (const message of this._messages) {\n try {\n this._port.postMessage([message]);\n } catch (e) {\n const error = {name: e.name, message: e.message};\n if (message.error) error.cause = `${message.error.name}: ${message.error.message}`;\n this._port.postMessage([{msg: 'crash', error}]);\n }\n }\n }\n this._messages = [];\n }\n\n call({name, args}) {\n try {\n return Promise.resolve(Fireworker._exposed[name].apply(null, args));\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n authWithCustomToken({url, authToken}) {\n return this._auth.signInWithCustomToken(authToken)\n .then(result => userToJson(result.user));\n }\n\n authAnonymously({url}) {\n return this._auth.signInAnonymously()\n .then(result => userToJson(result.user));\n }\n\n unauth({url}) {\n return this._auth.signOut().catch(e => {\n // We can ignore the error if the user is signed out anyway, but make sure to notify all\n // authCallbacks otherwise we end up in a bogus state!\n if (this._auth.currentUser === null) {\n for (const callbackId in this._callbacks) {\n if (!Object.hasOwn(this._callbacks, callbackId)) continue;\n const callback = this._callbacks[callbackId];\n if (callback.auth) callback(null);\n }\n } else {\n return Promise.reject(e);\n }\n });\n }\n\n onAuth({url, callbackId}) {\n const authCallback = this._callbacks[callbackId] = this._onAuthCallback.bind(this, callbackId);\n authCallback.auth = true;\n authCallback.cancel = this._auth.onIdTokenChanged(authCallback);\n }\n\n _onAuthCallback(callbackId, user) {\n userToJson(user).then(jsonUser => {\n if (areEqualValues(this._lastJsonUser, jsonUser)) return;\n this._lastJsonUser = jsonUser;\n this._send({msg: 'callback', id: callbackId, args: [jsonUser]});\n });\n }\n\n set({url, value}) {\n return this._createRef(url).set(value);\n }\n\n update({url, value}) {\n return this._createRef(url).update(value);\n }\n\n once({url}) {\n return this._createRef(url).once('value').then(snapshot => this._snapshotToJson(snapshot));\n }\n\n on({listenerKey, url, spec, eventType, callbackId, options}) {\n options = options || {};\n if (options.sync) options.branch = new Branch();\n options.cancel = this.off.bind(this, {listenerKey, url, spec, eventType, callbackId});\n const snapshotCallback = this._callbacks[callbackId] =\n this._onSnapshotCallback.bind(this, callbackId, options);\n snapshotCallback.listenerKey = listenerKey;\n snapshotCallback.eventType = eventType;\n snapshotCallback.cancel = options.cancel;\n const cancelCallback = this._onCancelCallback.bind(this, callbackId);\n this._createRef(url, spec).on(eventType, snapshotCallback, cancelCallback);\n }\n\n off({listenerKey, url, spec, eventType, callbackId}) {\n let snapshotCallback;\n if (callbackId) {\n // Callback IDs will not be reused across on() calls, so it's safe to just delete it.\n snapshotCallback = this._callbacks[callbackId];\n delete this._callbacks[callbackId];\n } else {\n for (const key of Object.keys(this._callbacks)) {\n if (!Object.hasOwn(this._callbacks, key)) continue;\n const callback = this._callbacks[key];\n if (callback.listenerKey === listenerKey &&\n (!eventType || callback.eventType === eventType)) {\n delete this._callbacks[key];\n }\n }\n }\n this._createRef(url, spec).off(eventType, snapshotCallback);\n }\n\n _onSnapshotCallback(callbackId, options, snapshot) {\n if (options.sync && options.rest) {\n const path = decodeURIComponent(\n snapshot.ref.toString().replace(/.*?:\\/\\/[^/]*/, '').replace(/\\/$/, ''));\n let value;\n try {\n value = normalizeFirebaseValue(snapshot.val());\n } catch (e) {\n options.cancel();\n this._onCancelCallback(callbackId, e);\n return;\n }\n const updates = options.branch.diff(value, path);\n for (const childPath in updates) {\n if (!Object.hasOwn(updates, childPath)) continue;\n this._send({\n msg: 'callback', id: callbackId,\n args: [null, {\n path: childPath, value: updates[childPath], writeSerial: this._lastWriteSerial\n }]\n });\n }\n } else {\n try {\n const snapshotJson = this._snapshotToJson(snapshot);\n if (options.sync) options.branch.set(snapshotJson.value);\n this._send({msg: 'callback', id: callbackId, args: [null, snapshotJson]});\n options.rest = true;\n } catch (e) {\n options.cancel();\n this._onCancelCallback(callbackId, e);\n }\n }\n }\n\n _onCancelCallback(callbackId, error) {\n delete this._callbacks[callbackId];\n this._send({msg: 'callback', id: callbackId, args: [errorToJson(error)]});\n }\n\n transaction({url, oldValue, relativeUpdates}) {\n const transactionPath = decodeURIComponent(url.replace(/.*?:\\/\\/[^/]*/, '').replace(/\\/$/, ''));\n const ref = this._createRef(url);\n const branch = new Branch();\n let stale, committedValue;\n\n return ref.transaction(value => {\n committedValue = undefined;\n value = normalizeFirebaseValue(value);\n stale = !areEqualNormalFirebaseValues(value, oldValue);\n if (stale) value = oldValue;\n if (relativeUpdates) {\n for (const relativePath in relativeUpdates) {\n if (!Object.hasOwn(relativeUpdates, relativePath)) continue;\n if (relativePath) {\n const segments = relativePath.split('/');\n if (value === undefined || value === null) value = {};\n let object = value;\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i];\n let child = object[key];\n if (child === undefined || child === null) child = object[key] = {};\n object = child;\n }\n object[segments[segments.length - 1]] = relativeUpdates[relativePath];\n } else {\n value = relativeUpdates[relativePath];\n }\n }\n }\n branch.set(value);\n if (!stale) {\n committedValue = value;\n return value;\n }\n }).then(result => {\n const snapshots = [];\n const updates = branch.diff(normalizeFirebaseValue(result.snapshot.val()), transactionPath);\n for (const path in updates) {\n if (!Object.hasOwn(updates, path)) continue;\n snapshots.push({\n path, value: updates[path], writeSerial: result.writeSerial || this._lastWriteSerial\n });\n }\n return {committed: !stale, snapshots};\n }, error => {\n if (error.message === 'set' || error.message === 'disconnect') {\n return ref.once('value').then(snapshot => {\n return {committed: false, snapshots: [snapshot], writeSerial: this._lastWriteSerial};\n });\n }\n error.committedValue = committedValue;\n return Promise.reject(error);\n });\n }\n\n _snapshotToJson(snapshot) {\n const path =\n decodeURIComponent(snapshot.ref.toString().replace(/.*?:\\/\\/[^/]*/, '').replace(/\\/$/, ''));\n return {\n path, value: normalizeFirebaseValue(snapshot.val()), writeSerial: this._lastWriteSerial\n };\n }\n\n onDisconnect({url, method, value}) {\n const onDisconnect = this._createRef(url).onDisconnect();\n return onDisconnect[method](value);\n }\n\n _createRef(url, spec) {\n if (!this._app) throw new Error('Must provide Firebase configuration data first');\n try {\n let ref = this._database.refFromURL(url);\n if (spec) {\n switch (spec.by) {\n case '$key': ref = ref.orderByKey(); break;\n case '$value': ref = ref.orderByValue(); break;\n default: ref = ref.orderByChild(spec.by); break;\n }\n if (spec.at !== undefined) ref = ref.equalTo(spec.at);\n else if (spec.from !== undefined) ref = ref.startAt(spec.from);\n else if (spec.to !== undefined) ref = ref.endAt(spec.to);\n if (spec.first !== undefined) ref = ref.limitToFirst(spec.first);\n else if (spec.last !== undefined) ref = ref.limitToLast(spec.last);\n }\n return ref;\n } catch (e) {\n e.extra = {url, spec};\n throw e;\n }\n }\n\n static expose(fn, name) {\n name = name || fn.name;\n if (!name) {\n Fireworker._signalStaticConfigError(\n new Error(`Cannot expose a function with no name: ${fn}`));\n }\n if (Object.hasOwn(Fireworker._exposed, name)) {\n Fireworker._signalStaticConfigError(new Error(`Function ${name}() already exposed`));\n }\n if (Fireworker._firstMessageReceived) {\n Fireworker._signalStaticConfigError(new Error('Too late to expose function, worker in use'));\n }\n Fireworker._exposed[name] = fn;\n }\n\n static setDatabaseWrapperCallback(fn) {\n if (Fireworker._databaseWrapperCallback) {\n Fireworker._signalStaticConfigError(new Error('Database wrapper callback already set'));\n }\n if (Fireworker._firstMessageReceived) {\n Fireworker._signalStaticConfigError(\n new Error('Too late to set database wrapper callback, worker in use'));\n }\n Fireworker._databaseWrapperCallback = fn;\n }\n\n static _signalStaticConfigError(error) {\n if (!Fireworker._staticConfigError) Fireworker._staticConfigError = error;\n for (const fireworker of fireworkers) {\n if (fireworker && !fireworker._configError) fireworker._configError = error;\n }\n throw error;\n }\n}\n\nFireworker._exposed = {};\nFireworker._firstMessageReceived = false;\nFireworker._databaseWrapperCallback = undefined;\nFireworker._staticConfigError = undefined;\n\nfunction errorToJson(error) {\n const json = {name: error.name, message: error.message};\n const propertyNames = Object.getOwnPropertyNames(error);\n for (const propertyName of propertyNames) {\n const type = typeof error[propertyName];\n if (type === 'string' || type === 'number' || type === 'boolean') {\n json[propertyName] = error[propertyName];\n }\n }\n return json;\n}\n\nfunction normalizeFirebaseValue(value) {\n if (Array.isArray(value)) {\n const normalValue = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (item === undefined || item === null) continue;\n normalValue[i] = normalizeFirebaseValue(item);\n }\n return normalValue;\n }\n if (value instanceof Object) {\n for (const key in value) {\n if (Object.hasOwn(value, key)) value[key] = normalizeFirebaseValue(value[key]);\n }\n }\n return value;\n}\n\nfunction userToJson(user) {\n if (!user) return Promise.resolve(user);\n const json = user.toJSON();\n delete json.stsTokenManager;\n return user.getIdTokenResult().then(result => {\n delete result.claims.exp;\n delete result.claims.iat;\n json.claims = result.claims;\n return json;\n });\n}\n\n\nfunction areEqualNormalFirebaseValues(a, b) {\n if (a === b) return true;\n if ((a === null || a === undefined) && (b === null || b === undefined)) return true;\n if (a === null || b === null) return false;\n if (!(typeof a === 'object' && typeof b === 'object')) return false;\n for (const key in a) {\n if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;\n if (!areEqualNormalFirebaseValues(a[key], b[key])) return false;\n }\n for (const key in b) {\n if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;\n }\n return true;\n}\n\nfunction areEqualValues(a, b) {\n if (a === b) return true;\n if (a === null && b === null || a === undefined && b === undefined) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (!(typeof a === 'object' && typeof b === 'object')) return false;\n for (const key in a) {\n if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;\n if (!areEqualValues(a[key], b[key])) return false;\n }\n for (const key in b) {\n if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;\n }\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!areEqualValues(a[i], b[i])) return false;\n }\n }\n return true;\n}\n\nfunction acceptConnections() {\n if (typeof onconnect === 'undefined') {\n fireworkers.push(new Fireworker(self));\n } else {\n self.onconnect = function(event) {\n fireworkers.push(new Fireworker(event.ports[0]));\n };\n }\n self.localStorage.flushPending();\n}\n\nself.window = self;\nacceptConnections();\n"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  const fireworkers = [];
10
10
  const apps = {};
11
11
  // This version is filled in by the build, don't reformat the line.
12
- const VERSION = '3.0.0';
12
+ const VERSION = '3.1.1';
13
13
 
14
14
 
15
15
  class LocalStorage {
@@ -119,7 +119,7 @@
119
119
  let replace = true;
120
120
  const keysToReplace = [];
121
121
  for (const childKey in newValue) {
122
- if (!newValue.hasOwnProperty(childKey)) continue;
122
+ if (!Object.hasOwn(newValue, childKey)) continue;
123
123
  const replaceChild = this._diffRecursively(
124
124
  oldValue[childKey], newValue[childKey], segments.concat(childKey), updates);
125
125
  if (replaceChild) {
@@ -130,7 +130,7 @@
130
130
  }
131
131
  if (replace) return true;
132
132
  for (const childKey in oldValue) {
133
- if (!oldValue.hasOwnProperty(childKey) || newValue.hasOwnProperty(childKey)) continue;
133
+ if (!Object.hasOwn(oldValue, childKey) || Object.hasOwn(newValue, childKey)) continue;
134
134
  updates[segments.concat(childKey).join('/')] = null;
135
135
  delete oldValue[childKey];
136
136
  }
@@ -266,7 +266,19 @@
266
266
  }
267
267
 
268
268
  _flushMessageQueue() {
269
- this._port.postMessage(this._messages);
269
+ try {
270
+ this._port.postMessage(this._messages);
271
+ } catch {
272
+ for (const message of this._messages) {
273
+ try {
274
+ this._port.postMessage([message]);
275
+ } catch (e) {
276
+ const error = {name: e.name, message: e.message};
277
+ if (message.error) error.cause = `${message.error.name}: ${message.error.message}`;
278
+ this._port.postMessage([{msg: 'crash', error}]);
279
+ }
280
+ }
281
+ }
270
282
  this._messages = [];
271
283
  }
272
284
 
@@ -294,7 +306,7 @@
294
306
  // authCallbacks otherwise we end up in a bogus state!
295
307
  if (this._auth.currentUser === null) {
296
308
  for (const callbackId in this._callbacks) {
297
- if (!this._callbacks.hasOwnProperty(callbackId)) continue;
309
+ if (!Object.hasOwn(this._callbacks, callbackId)) continue;
298
310
  const callback = this._callbacks[callbackId];
299
311
  if (callback.auth) callback(null);
300
312
  }
@@ -351,7 +363,7 @@
351
363
  delete this._callbacks[callbackId];
352
364
  } else {
353
365
  for (const key of Object.keys(this._callbacks)) {
354
- if (!this._callbacks.hasOwnProperty(key)) continue;
366
+ if (!Object.hasOwn(this._callbacks, key)) continue;
355
367
  const callback = this._callbacks[key];
356
368
  if (callback.listenerKey === listenerKey &&
357
369
  (!eventType || callback.eventType === eventType)) {
@@ -376,7 +388,7 @@
376
388
  }
377
389
  const updates = options.branch.diff(value, path);
378
390
  for (const childPath in updates) {
379
- if (!updates.hasOwnProperty(childPath)) continue;
391
+ if (!Object.hasOwn(updates, childPath)) continue;
380
392
  this._send({
381
393
  msg: 'callback', id: callbackId,
382
394
  args: [null, {
@@ -415,7 +427,7 @@
415
427
  if (stale) value = oldValue;
416
428
  if (relativeUpdates) {
417
429
  for (const relativePath in relativeUpdates) {
418
- if (!relativeUpdates.hasOwnProperty(relativePath)) continue;
430
+ if (!Object.hasOwn(relativeUpdates, relativePath)) continue;
419
431
  if (relativePath) {
420
432
  const segments = relativePath.split('/');
421
433
  if (value === undefined || value === null) value = {};
@@ -441,7 +453,7 @@
441
453
  const snapshots = [];
442
454
  const updates = branch.diff(normalizeFirebaseValue(result.snapshot.val()), transactionPath);
443
455
  for (const path in updates) {
444
- if (!updates.hasOwnProperty(path)) continue;
456
+ if (!Object.hasOwn(updates, path)) continue;
445
457
  snapshots.push({
446
458
  path, value: updates[path], writeSerial: result.writeSerial || this._lastWriteSerial
447
459
  });
@@ -500,7 +512,7 @@
500
512
  Fireworker._signalStaticConfigError(
501
513
  new Error(`Cannot expose a function with no name: ${fn}`));
502
514
  }
503
- if (Fireworker._exposed.hasOwnProperty(name)) {
515
+ if (Object.hasOwn(Fireworker._exposed, name)) {
504
516
  Fireworker._signalStaticConfigError(new Error(`Function ${name}() already exposed`));
505
517
  }
506
518
  if (Fireworker._firstMessageReceived) {
@@ -538,7 +550,10 @@
538
550
  const json = {name: error.name, message: error.message};
539
551
  const propertyNames = Object.getOwnPropertyNames(error);
540
552
  for (const propertyName of propertyNames) {
541
- json[propertyName] = error[propertyName];
553
+ const type = typeof error[propertyName];
554
+ if (type === 'string' || type === 'number' || type === 'boolean') {
555
+ json[propertyName] = error[propertyName];
556
+ }
542
557
  }
543
558
  return json;
544
559
  }
@@ -555,7 +570,7 @@
555
570
  }
556
571
  if (value instanceof Object) {
557
572
  for (const key in value) {
558
- if (value.hasOwnProperty(key)) value[key] = normalizeFirebaseValue(value[key]);
573
+ if (Object.hasOwn(value, key)) value[key] = normalizeFirebaseValue(value[key]);
559
574
  }
560
575
  }
561
576
  return value;
@@ -580,11 +595,11 @@
580
595
  if (a === null || b === null) return false;
581
596
  if (!(typeof a === 'object' && typeof b === 'object')) return false;
582
597
  for (const key in a) {
583
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
598
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
584
599
  if (!areEqualNormalFirebaseValues(a[key], b[key])) return false;
585
600
  }
586
601
  for (const key in b) {
587
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
602
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
588
603
  }
589
604
  return true;
590
605
  }
@@ -595,11 +610,11 @@
595
610
  if (a === null || b === null || a === undefined || b === undefined) return false;
596
611
  if (!(typeof a === 'object' && typeof b === 'object')) return false;
597
612
  for (const key in a) {
598
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
613
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
599
614
  if (!areEqualValues(a[key], b[key])) return false;
600
615
  }
601
616
  for (const key in b) {
602
- if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) return false;
617
+ if (!Object.hasOwn(a, key) || !Object.hasOwn(b, key)) return false;
603
618
  }
604
619
  if (Array.isArray(a) || Array.isArray(b)) {
605
620
  if (!Array.isArray(a) || !Array.isArray(b)) return false;
@@ -612,12 +627,12 @@
612
627
  }
613
628
 
614
629
  function acceptConnections() {
615
- if (typeof onconnect !== 'undefined') {
630
+ if (typeof onconnect === 'undefined') {
631
+ fireworkers.push(new Fireworker(self));
632
+ } else {
616
633
  self.onconnect = function(event) {
617
634
  fireworkers.push(new Fireworker(event.ports[0]));
618
635
  };
619
- } else {
620
- fireworkers.push(new Fireworker(self));
621
636
  }
622
637
  self.localStorage.flushPending();
623
638
  }