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 +1 -1
- package/dist/worker.es2015.js +34 -19
- package/dist/worker.es2015.js.map +1 -1
- package/dist/worker.umd.js +34 -19
- package/dist/worker.umd.js.map +1 -1
- package/dist/worker.umd.min.js +1 -1
- package/dist/worker.umd.min.js.map +1 -1
- package/eslint.config.mjs +22 -0
- package/package.json +7 -4
- package/src/worker.js +34 -19
- package/.eslintrc.js +0 -123
package/Gruntfile.js
CHANGED
package/dist/worker.es2015.js
CHANGED
|
@@ -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.
|
|
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 (!
|
|
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 (!
|
|
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
|
-
|
|
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
|
|
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
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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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"}
|
package/dist/worker.umd.js
CHANGED
|
@@ -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.
|
|
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 (!
|
|
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 (!
|
|
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
|
-
|
|
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
|
|
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
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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
|
|
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
|
}
|