@tanstack/query-broadcast-client-experimental 4.0.8 → 4.2.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.
Files changed (33) hide show
  1. package/build/cjs/{packages/query-broadcast-client-experimental/src/index.js → index.js} +1 -1
  2. package/build/cjs/index.js.map +1 -0
  3. package/build/esm/index.js +2 -1011
  4. package/build/esm/index.js.map +1 -1
  5. package/build/stats-html.html +1 -1
  6. package/build/stats.json +13 -380
  7. package/build/types/query-core/src/mutationCache.d.ts +6 -1
  8. package/build/types/query-core/src/queryCache.d.ts +6 -1
  9. package/build/types/query-core/src/types.d.ts +10 -8
  10. package/build/umd/index.development.js +6 -1017
  11. package/build/umd/index.development.js.map +1 -1
  12. package/build/umd/index.production.js +1 -1
  13. package/build/umd/index.production.js.map +1 -1
  14. package/package.json +3 -3
  15. package/build/cjs/node_modules/broadcast-channel/dist/es/broadcast-channel.js +0 -260
  16. package/build/cjs/node_modules/broadcast-channel/dist/es/broadcast-channel.js.map +0 -1
  17. package/build/cjs/node_modules/broadcast-channel/dist/es/method-chooser.js +0 -83
  18. package/build/cjs/node_modules/broadcast-channel/dist/es/method-chooser.js.map +0 -1
  19. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/indexed-db.js +0 -325
  20. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/indexed-db.js.map +0 -1
  21. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/localstorage.js +0 -193
  22. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/localstorage.js.map +0 -1
  23. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/native.js +0 -88
  24. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/native.js.map +0 -1
  25. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/simulate.js +0 -77
  26. package/build/cjs/node_modules/broadcast-channel/dist/es/methods/simulate.js.map +0 -1
  27. package/build/cjs/node_modules/broadcast-channel/dist/es/options.js +0 -41
  28. package/build/cjs/node_modules/broadcast-channel/dist/es/options.js.map +0 -1
  29. package/build/cjs/node_modules/broadcast-channel/dist/es/util.js +0 -77
  30. package/build/cjs/node_modules/broadcast-channel/dist/es/util.js.map +0 -1
  31. package/build/cjs/node_modules/oblivious-set/dist/es/index.js +0 -83
  32. package/build/cjs/node_modules/oblivious-set/dist/es/index.js.map +0 -1
  33. package/build/cjs/packages/query-broadcast-client-experimental/src/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"broadcast-channel.js","sources":["../../../../../../../../node_modules/broadcast-channel/dist/es/broadcast-channel.js"],"sourcesContent":["import { isPromise } from './util.js';\nimport { chooseMethod } from './method-chooser.js';\nimport { fillOptionsWithDefaults } from './options.js';\nexport var BroadcastChannel = function BroadcastChannel(name, options) {\n this.name = name;\n\n if (ENFORCED_OPTIONS) {\n options = ENFORCED_OPTIONS;\n }\n\n this.options = fillOptionsWithDefaults(options);\n this.method = chooseMethod(this.options); // isListening\n\n this._iL = false;\n /**\n * _onMessageListener\n * setting onmessage twice,\n * will overwrite the first listener\n */\n\n this._onML = null;\n /**\n * _addEventListeners\n */\n\n this._addEL = {\n message: [],\n internal: []\n };\n /**\n * Unsend message promises\n * where the sending is still in progress\n * @type {Set<Promise>}\n */\n\n this._uMP = new Set();\n /**\n * _beforeClose\n * array of promises that will be awaited\n * before the channel is closed\n */\n\n this._befC = [];\n /**\n * _preparePromise\n */\n\n this._prepP = null;\n\n _prepareChannel(this);\n}; // STATICS\n\n/**\n * used to identify if someone overwrites\n * window.BroadcastChannel with this\n * See methods/native.js\n */\n\nBroadcastChannel._pubkey = true;\n/**\n * clears the tmp-folder if is node\n * @return {Promise<boolean>} true if has run, false if not node\n */\n\nexport function clearNodeFolder(options) {\n options = fillOptionsWithDefaults(options);\n var method = chooseMethod(options);\n\n if (method.type === 'node') {\n return method.clearNodeFolder().then(function () {\n return true;\n });\n } else {\n return Promise.resolve(false);\n }\n}\n/**\n * if set, this method is enforced,\n * no mather what the options are\n */\n\nvar ENFORCED_OPTIONS;\nexport function enforceOptions(options) {\n ENFORCED_OPTIONS = options;\n} // PROTOTYPE\n\nBroadcastChannel.prototype = {\n postMessage: function postMessage(msg) {\n if (this.closed) {\n throw new Error('BroadcastChannel.postMessage(): ' + 'Cannot post message after channel has closed');\n }\n\n return _post(this, 'message', msg);\n },\n postInternal: function postInternal(msg) {\n return _post(this, 'internal', msg);\n },\n\n set onmessage(fn) {\n var time = this.method.microSeconds();\n var listenObj = {\n time: time,\n fn: fn\n };\n\n _removeListenerObject(this, 'message', this._onML);\n\n if (fn && typeof fn === 'function') {\n this._onML = listenObj;\n\n _addListenerObject(this, 'message', listenObj);\n } else {\n this._onML = null;\n }\n },\n\n addEventListener: function addEventListener(type, fn) {\n var time = this.method.microSeconds();\n var listenObj = {\n time: time,\n fn: fn\n };\n\n _addListenerObject(this, type, listenObj);\n },\n removeEventListener: function removeEventListener(type, fn) {\n var obj = this._addEL[type].find(function (obj) {\n return obj.fn === fn;\n });\n\n _removeListenerObject(this, type, obj);\n },\n close: function close() {\n var _this = this;\n\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n var awaitPrepare = this._prepP ? this._prepP : Promise.resolve();\n this._onML = null;\n this._addEL.message = [];\n return awaitPrepare // wait until all current sending are processed\n .then(function () {\n return Promise.all(Array.from(_this._uMP));\n }) // run before-close hooks\n .then(function () {\n return Promise.all(_this._befC.map(function (fn) {\n return fn();\n }));\n }) // close the channel\n .then(function () {\n return _this.method.close(_this._state);\n });\n },\n\n get type() {\n return this.method.type;\n },\n\n get isClosed() {\n return this.closed;\n }\n\n};\n/**\n * Post a message over the channel\n * @returns {Promise} that resolved when the message sending is done\n */\n\nfunction _post(broadcastChannel, type, msg) {\n var time = broadcastChannel.method.microSeconds();\n var msgObj = {\n time: time,\n type: type,\n data: msg\n };\n var awaitPrepare = broadcastChannel._prepP ? broadcastChannel._prepP : Promise.resolve();\n return awaitPrepare.then(function () {\n var sendPromise = broadcastChannel.method.postMessage(broadcastChannel._state, msgObj); // add/remove to unsend messages list\n\n broadcastChannel._uMP.add(sendPromise);\n\n sendPromise[\"catch\"]().then(function () {\n return broadcastChannel._uMP[\"delete\"](sendPromise);\n });\n return sendPromise;\n });\n}\n\nfunction _prepareChannel(channel) {\n var maybePromise = channel.method.create(channel.name, channel.options);\n\n if (isPromise(maybePromise)) {\n channel._prepP = maybePromise;\n maybePromise.then(function (s) {\n // used in tests to simulate slow runtime\n\n /*if (channel.options.prepareDelay) {\n await new Promise(res => setTimeout(res, this.options.prepareDelay));\n }*/\n channel._state = s;\n });\n } else {\n channel._state = maybePromise;\n }\n}\n\nfunction _hasMessageListeners(channel) {\n if (channel._addEL.message.length > 0) return true;\n if (channel._addEL.internal.length > 0) return true;\n return false;\n}\n\nfunction _addListenerObject(channel, type, obj) {\n channel._addEL[type].push(obj);\n\n _startListening(channel);\n}\n\nfunction _removeListenerObject(channel, type, obj) {\n channel._addEL[type] = channel._addEL[type].filter(function (o) {\n return o !== obj;\n });\n\n _stopListening(channel);\n}\n\nfunction _startListening(channel) {\n if (!channel._iL && _hasMessageListeners(channel)) {\n // someone is listening, start subscribing\n var listenerFn = function listenerFn(msgObj) {\n channel._addEL[msgObj.type].forEach(function (obj) {\n if (msgObj.time >= obj.time) {\n obj.fn(msgObj.data);\n }\n });\n };\n\n var time = channel.method.microSeconds();\n\n if (channel._prepP) {\n channel._prepP.then(function () {\n channel._iL = true;\n channel.method.onMessage(channel._state, listenerFn, time);\n });\n } else {\n channel._iL = true;\n channel.method.onMessage(channel._state, listenerFn, time);\n }\n }\n}\n\nfunction _stopListening(channel) {\n if (channel._iL && !_hasMessageListeners(channel)) {\n // noone is listening, stop subscribing\n channel._iL = false;\n var time = channel.method.microSeconds();\n channel.method.onMessage(channel._state, null, time);\n }\n}"],"names":["options","fillOptionsWithDefaults","chooseMethod","isPromise"],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- /**
2
- * query-broadcast-client-experimental
3
- *
4
- * Copyright (c) TanStack
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var native = require('./methods/native.js');
16
- var indexedDb = require('./methods/indexed-db.js');
17
- var localstorage = require('./methods/localstorage.js');
18
- var simulate = require('./methods/simulate.js');
19
- var util = require('./util.js');
20
-
21
- var METHODS = [native["default"], // fastest
22
- indexedDb["default"], localstorage["default"]];
23
- /**
24
- * The NodeMethod is loaded lazy
25
- * so it will not get bundled in browser-builds
26
- */
27
-
28
- if (util.isNode) {
29
- /**
30
- * we use the non-transpiled code for nodejs
31
- * because it runs faster
32
- */
33
- var NodeMethod = require('../../src/methods/' + // use this hack so that browserify and others
34
- // do not import the node-method by default
35
- // when bundling.
36
- 'node.js');
37
- /**
38
- * this will be false for webpackbuilds
39
- * which will shim the node-method with an empty object {}
40
- */
41
-
42
-
43
- if (typeof NodeMethod.canBeUsed === 'function') {
44
- METHODS.push(NodeMethod);
45
- }
46
- }
47
-
48
- function chooseMethod(options) {
49
- var chooseMethods = [].concat(options.methods, METHODS).filter(Boolean); // directly chosen
50
-
51
- if (options.type) {
52
- if (options.type === 'simulate') {
53
- // only use simulate-method if directly chosen
54
- return simulate["default"];
55
- }
56
-
57
- var ret = chooseMethods.find(function (m) {
58
- return m.type === options.type;
59
- });
60
- if (!ret) throw new Error('method-type ' + options.type + ' not found');else return ret;
61
- }
62
- /**
63
- * if no webworker support is needed,
64
- * remove idb from the list so that localstorage is been chosen
65
- */
66
-
67
-
68
- if (!options.webWorkerSupport && !util.isNode) {
69
- chooseMethods = chooseMethods.filter(function (m) {
70
- return m.type !== 'idb';
71
- });
72
- }
73
-
74
- var useMethod = chooseMethods.find(function (method) {
75
- return method.canBeUsed();
76
- });
77
- if (!useMethod) throw new Error('No useable methode found:' + JSON.stringify(METHODS.map(function (m) {
78
- return m.type;
79
- })));else return useMethod;
80
- }
81
-
82
- exports.chooseMethod = chooseMethod;
83
- //# sourceMappingURL=method-chooser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"method-chooser.js","sources":["../../../../../../../../node_modules/broadcast-channel/dist/es/method-chooser.js"],"sourcesContent":["import NativeMethod from './methods/native.js';\nimport IndexeDbMethod from './methods/indexed-db.js';\nimport LocalstorageMethod from './methods/localstorage.js';\nimport SimulateMethod from './methods/simulate.js';\nimport { isNode } from './util'; // order is important\n\nvar METHODS = [NativeMethod, // fastest\nIndexeDbMethod, LocalstorageMethod];\n/**\n * The NodeMethod is loaded lazy\n * so it will not get bundled in browser-builds\n */\n\nif (isNode) {\n /**\n * we use the non-transpiled code for nodejs\n * because it runs faster\n */\n var NodeMethod = require('../../src/methods/' + // use this hack so that browserify and others\n // do not import the node-method by default\n // when bundling.\n 'node.js');\n /**\n * this will be false for webpackbuilds\n * which will shim the node-method with an empty object {}\n */\n\n\n if (typeof NodeMethod.canBeUsed === 'function') {\n METHODS.push(NodeMethod);\n }\n}\n\nexport function chooseMethod(options) {\n var chooseMethods = [].concat(options.methods, METHODS).filter(Boolean); // directly chosen\n\n if (options.type) {\n if (options.type === 'simulate') {\n // only use simulate-method if directly chosen\n return SimulateMethod;\n }\n\n var ret = chooseMethods.find(function (m) {\n return m.type === options.type;\n });\n if (!ret) throw new Error('method-type ' + options.type + ' not found');else return ret;\n }\n /**\n * if no webworker support is needed,\n * remove idb from the list so that localstorage is been chosen\n */\n\n\n if (!options.webWorkerSupport && !isNode) {\n chooseMethods = chooseMethods.filter(function (m) {\n return m.type !== 'idb';\n });\n }\n\n var useMethod = chooseMethods.find(function (method) {\n return method.canBeUsed();\n });\n if (!useMethod) throw new Error('No useable methode found:' + JSON.stringify(METHODS.map(function (m) {\n return m.type;\n })));else return useMethod;\n}"],"names":["NativeMethod","IndexeDbMethod","LocalstorageMethod","isNode","SimulateMethod"],"mappings":";;;;;;;;;;;;;;;;;;;;AAMA,IAAI,OAAO,GAAG,CAACA,iBAAY;AAC3BC,oBAAc,EAAEC,uBAAkB,CAAC,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA,IAAIC,WAAM,EAAE;AACZ;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,oBAAoB;AAC/C;AACA;AACA,EAAE,SAAS,CAAC,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE;AAClD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7B,GAAG;AACH,CAAC;AACD;AACO,SAAS,YAAY,CAAC,OAAO,EAAE;AACtC,EAAE,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1E;AACA,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;AACrC;AACA,MAAM,OAAOC,mBAAc,CAAC;AAC5B,KAAK;AACL;AACA,IAAI,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9C,MAAM,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;AACrC,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC;AAC5F,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAACD,WAAM,EAAE;AAC5C,IAAI,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACtD,MAAM,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AAC9B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,IAAI,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE;AACvD,IAAI,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;AAC9B,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxG,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC;AAClB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,CAAC;AAC7B;;;;"}
@@ -1,325 +0,0 @@
1
- /**
2
- * query-broadcast-client-experimental
3
- *
4
- * Copyright (c) TanStack
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var util = require('../util.js');
16
- var index = require('../../../../oblivious-set/dist/es/index.js');
17
- var options = require('../options.js');
18
-
19
- /**
20
- * this method uses indexeddb to store the messages
21
- * There is currently no observerAPI for idb
22
- * @link https://github.com/w3c/IndexedDB/issues/51
23
- */
24
- var microSeconds = util.microSeconds;
25
- var DB_PREFIX = 'pubkey.broadcast-channel-0-';
26
- var OBJECT_STORE_ID = 'messages';
27
- var type = 'idb';
28
- function getIdb() {
29
- if (typeof indexedDB !== 'undefined') return indexedDB;
30
-
31
- if (typeof window !== 'undefined') {
32
- if (typeof window.mozIndexedDB !== 'undefined') return window.mozIndexedDB;
33
- if (typeof window.webkitIndexedDB !== 'undefined') return window.webkitIndexedDB;
34
- if (typeof window.msIndexedDB !== 'undefined') return window.msIndexedDB;
35
- }
36
-
37
- return false;
38
- }
39
- function createDatabase(channelName) {
40
- var IndexedDB = getIdb(); // create table
41
-
42
- var dbName = DB_PREFIX + channelName;
43
- var openRequest = IndexedDB.open(dbName, 1);
44
-
45
- openRequest.onupgradeneeded = function (ev) {
46
- var db = ev.target.result;
47
- db.createObjectStore(OBJECT_STORE_ID, {
48
- keyPath: 'id',
49
- autoIncrement: true
50
- });
51
- };
52
-
53
- var dbPromise = new Promise(function (res, rej) {
54
- openRequest.onerror = function (ev) {
55
- return rej(ev);
56
- };
57
-
58
- openRequest.onsuccess = function () {
59
- res(openRequest.result);
60
- };
61
- });
62
- return dbPromise;
63
- }
64
- /**
65
- * writes the new message to the database
66
- * so other readers can find it
67
- */
68
-
69
- function writeMessage(db, readerUuid, messageJson) {
70
- var time = new Date().getTime();
71
- var writeObject = {
72
- uuid: readerUuid,
73
- time: time,
74
- data: messageJson
75
- };
76
- var transaction = db.transaction([OBJECT_STORE_ID], 'readwrite');
77
- return new Promise(function (res, rej) {
78
- transaction.oncomplete = function () {
79
- return res();
80
- };
81
-
82
- transaction.onerror = function (ev) {
83
- return rej(ev);
84
- };
85
-
86
- var objectStore = transaction.objectStore(OBJECT_STORE_ID);
87
- objectStore.add(writeObject);
88
- });
89
- }
90
- function getMessagesHigherThan(db, lastCursorId) {
91
- var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);
92
- var ret = [];
93
-
94
- function openCursor() {
95
- // Occasionally Safari will fail on IDBKeyRange.bound, this
96
- // catches that error, having it open the cursor to the first
97
- // item. When it gets data it will advance to the desired key.
98
- try {
99
- var keyRangeValue = IDBKeyRange.bound(lastCursorId + 1, Infinity);
100
- return objectStore.openCursor(keyRangeValue);
101
- } catch (e) {
102
- return objectStore.openCursor();
103
- }
104
- }
105
-
106
- return new Promise(function (res) {
107
- openCursor().onsuccess = function (ev) {
108
- var cursor = ev.target.result;
109
-
110
- if (cursor) {
111
- if (cursor.value.id < lastCursorId + 1) {
112
- cursor["continue"](lastCursorId + 1);
113
- } else {
114
- ret.push(cursor.value);
115
- cursor["continue"]();
116
- }
117
- } else {
118
- res(ret);
119
- }
120
- };
121
- });
122
- }
123
- function removeMessageById(db, id) {
124
- var request = db.transaction([OBJECT_STORE_ID], 'readwrite').objectStore(OBJECT_STORE_ID)["delete"](id);
125
- return new Promise(function (res) {
126
- request.onsuccess = function () {
127
- return res();
128
- };
129
- });
130
- }
131
- function getOldMessages(db, ttl) {
132
- var olderThen = new Date().getTime() - ttl;
133
- var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);
134
- var ret = [];
135
- return new Promise(function (res) {
136
- objectStore.openCursor().onsuccess = function (ev) {
137
- var cursor = ev.target.result;
138
-
139
- if (cursor) {
140
- var msgObk = cursor.value;
141
-
142
- if (msgObk.time < olderThen) {
143
- ret.push(msgObk); //alert("Name for SSN " + cursor.key + " is " + cursor.value.name);
144
-
145
- cursor["continue"]();
146
- } else {
147
- // no more old messages,
148
- res(ret);
149
- return;
150
- }
151
- } else {
152
- res(ret);
153
- }
154
- };
155
- });
156
- }
157
- function cleanOldMessages(db, ttl) {
158
- return getOldMessages(db, ttl).then(function (tooOld) {
159
- return Promise.all(tooOld.map(function (msgObj) {
160
- return removeMessageById(db, msgObj.id);
161
- }));
162
- });
163
- }
164
- function create(channelName, options$1) {
165
- options$1 = options.fillOptionsWithDefaults(options$1);
166
- return createDatabase(channelName).then(function (db) {
167
- var state = {
168
- closed: false,
169
- lastCursorId: 0,
170
- channelName: channelName,
171
- options: options$1,
172
- uuid: util.randomToken(),
173
-
174
- /**
175
- * emittedMessagesIds
176
- * contains all messages that have been emitted before
177
- * @type {ObliviousSet}
178
- */
179
- eMIs: new index.ObliviousSet(options$1.idb.ttl * 2),
180
- // ensures we do not read messages in parrallel
181
- writeBlockPromise: Promise.resolve(),
182
- messagesCallback: null,
183
- readQueuePromises: [],
184
- db: db
185
- };
186
- /**
187
- * Handle abrupt closes that do not originate from db.close().
188
- * This could happen, for example, if the underlying storage is
189
- * removed or if the user clears the database in the browser's
190
- * history preferences.
191
- */
192
-
193
- db.onclose = function () {
194
- state.closed = true;
195
- if (options$1.idb.onclose) options$1.idb.onclose();
196
- };
197
- /**
198
- * if service-workers are used,
199
- * we have no 'storage'-event if they post a message,
200
- * therefore we also have to set an interval
201
- */
202
-
203
-
204
- _readLoop(state);
205
-
206
- return state;
207
- });
208
- }
209
-
210
- function _readLoop(state) {
211
- if (state.closed) return;
212
- readNewMessages(state).then(function () {
213
- return util.sleep(state.options.idb.fallbackInterval);
214
- }).then(function () {
215
- return _readLoop(state);
216
- });
217
- }
218
-
219
- function _filterMessage(msgObj, state) {
220
- if (msgObj.uuid === state.uuid) return false; // send by own
221
-
222
- if (state.eMIs.has(msgObj.id)) return false; // already emitted
223
-
224
- if (msgObj.data.time < state.messagesCallbackTime) return false; // older then onMessageCallback
225
-
226
- return true;
227
- }
228
- /**
229
- * reads all new messages from the database and emits them
230
- */
231
-
232
-
233
- function readNewMessages(state) {
234
- // channel already closed
235
- if (state.closed) return Promise.resolve(); // if no one is listening, we do not need to scan for new messages
236
-
237
- if (!state.messagesCallback) return Promise.resolve();
238
- return getMessagesHigherThan(state.db, state.lastCursorId).then(function (newerMessages) {
239
- var useMessages = newerMessages
240
- /**
241
- * there is a bug in iOS where the msgObj can be undefined some times
242
- * so we filter them out
243
- * @link https://github.com/pubkey/broadcast-channel/issues/19
244
- */
245
- .filter(function (msgObj) {
246
- return !!msgObj;
247
- }).map(function (msgObj) {
248
- if (msgObj.id > state.lastCursorId) {
249
- state.lastCursorId = msgObj.id;
250
- }
251
-
252
- return msgObj;
253
- }).filter(function (msgObj) {
254
- return _filterMessage(msgObj, state);
255
- }).sort(function (msgObjA, msgObjB) {
256
- return msgObjA.time - msgObjB.time;
257
- }); // sort by time
258
-
259
- useMessages.forEach(function (msgObj) {
260
- if (state.messagesCallback) {
261
- state.eMIs.add(msgObj.id);
262
- state.messagesCallback(msgObj.data);
263
- }
264
- });
265
- return Promise.resolve();
266
- });
267
- }
268
-
269
- function close(channelState) {
270
- channelState.closed = true;
271
- channelState.db.close();
272
- }
273
- function postMessage(channelState, messageJson) {
274
- channelState.writeBlockPromise = channelState.writeBlockPromise.then(function () {
275
- return writeMessage(channelState.db, channelState.uuid, messageJson);
276
- }).then(function () {
277
- if (util.randomInt(0, 10) === 0) {
278
- /* await (do not await) */
279
- cleanOldMessages(channelState.db, channelState.options.idb.ttl);
280
- }
281
- });
282
- return channelState.writeBlockPromise;
283
- }
284
- function onMessage(channelState, fn, time) {
285
- channelState.messagesCallbackTime = time;
286
- channelState.messagesCallback = fn;
287
- readNewMessages(channelState);
288
- }
289
- function canBeUsed() {
290
- if (util.isNode) return false;
291
- var idb = getIdb();
292
- if (!idb) return false;
293
- return true;
294
- }
295
- function averageResponseTime(options) {
296
- return options.idb.fallbackInterval * 2;
297
- }
298
- var IndexeDbMethod = {
299
- create: create,
300
- close: close,
301
- onMessage: onMessage,
302
- postMessage: postMessage,
303
- canBeUsed: canBeUsed,
304
- type: type,
305
- averageResponseTime: averageResponseTime,
306
- microSeconds: microSeconds
307
- };
308
-
309
- exports.averageResponseTime = averageResponseTime;
310
- exports.canBeUsed = canBeUsed;
311
- exports.cleanOldMessages = cleanOldMessages;
312
- exports.close = close;
313
- exports.create = create;
314
- exports.createDatabase = createDatabase;
315
- exports["default"] = IndexeDbMethod;
316
- exports.getIdb = getIdb;
317
- exports.getMessagesHigherThan = getMessagesHigherThan;
318
- exports.getOldMessages = getOldMessages;
319
- exports.microSeconds = microSeconds;
320
- exports.onMessage = onMessage;
321
- exports.postMessage = postMessage;
322
- exports.removeMessageById = removeMessageById;
323
- exports.type = type;
324
- exports.writeMessage = writeMessage;
325
- //# sourceMappingURL=indexed-db.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexed-db.js","sources":["../../../../../../../../../node_modules/broadcast-channel/dist/es/methods/indexed-db.js"],"sourcesContent":["/**\n * this method uses indexeddb to store the messages\n * There is currently no observerAPI for idb\n * @link https://github.com/w3c/IndexedDB/issues/51\n */\nimport { sleep, randomInt, randomToken, microSeconds as micro, isNode } from '../util.js';\nexport var microSeconds = micro;\nimport { ObliviousSet } from 'oblivious-set';\nimport { fillOptionsWithDefaults } from '../options';\nvar DB_PREFIX = 'pubkey.broadcast-channel-0-';\nvar OBJECT_STORE_ID = 'messages';\nexport var type = 'idb';\nexport function getIdb() {\n if (typeof indexedDB !== 'undefined') return indexedDB;\n\n if (typeof window !== 'undefined') {\n if (typeof window.mozIndexedDB !== 'undefined') return window.mozIndexedDB;\n if (typeof window.webkitIndexedDB !== 'undefined') return window.webkitIndexedDB;\n if (typeof window.msIndexedDB !== 'undefined') return window.msIndexedDB;\n }\n\n return false;\n}\nexport function createDatabase(channelName) {\n var IndexedDB = getIdb(); // create table\n\n var dbName = DB_PREFIX + channelName;\n var openRequest = IndexedDB.open(dbName, 1);\n\n openRequest.onupgradeneeded = function (ev) {\n var db = ev.target.result;\n db.createObjectStore(OBJECT_STORE_ID, {\n keyPath: 'id',\n autoIncrement: true\n });\n };\n\n var dbPromise = new Promise(function (res, rej) {\n openRequest.onerror = function (ev) {\n return rej(ev);\n };\n\n openRequest.onsuccess = function () {\n res(openRequest.result);\n };\n });\n return dbPromise;\n}\n/**\n * writes the new message to the database\n * so other readers can find it\n */\n\nexport function writeMessage(db, readerUuid, messageJson) {\n var time = new Date().getTime();\n var writeObject = {\n uuid: readerUuid,\n time: time,\n data: messageJson\n };\n var transaction = db.transaction([OBJECT_STORE_ID], 'readwrite');\n return new Promise(function (res, rej) {\n transaction.oncomplete = function () {\n return res();\n };\n\n transaction.onerror = function (ev) {\n return rej(ev);\n };\n\n var objectStore = transaction.objectStore(OBJECT_STORE_ID);\n objectStore.add(writeObject);\n });\n}\nexport function getAllMessages(db) {\n var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);\n var ret = [];\n return new Promise(function (res) {\n objectStore.openCursor().onsuccess = function (ev) {\n var cursor = ev.target.result;\n\n if (cursor) {\n ret.push(cursor.value); //alert(\"Name for SSN \" + cursor.key + \" is \" + cursor.value.name);\n\n cursor[\"continue\"]();\n } else {\n res(ret);\n }\n };\n });\n}\nexport function getMessagesHigherThan(db, lastCursorId) {\n var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);\n var ret = [];\n\n function openCursor() {\n // Occasionally Safari will fail on IDBKeyRange.bound, this\n // catches that error, having it open the cursor to the first\n // item. When it gets data it will advance to the desired key.\n try {\n var keyRangeValue = IDBKeyRange.bound(lastCursorId + 1, Infinity);\n return objectStore.openCursor(keyRangeValue);\n } catch (e) {\n return objectStore.openCursor();\n }\n }\n\n return new Promise(function (res) {\n openCursor().onsuccess = function (ev) {\n var cursor = ev.target.result;\n\n if (cursor) {\n if (cursor.value.id < lastCursorId + 1) {\n cursor[\"continue\"](lastCursorId + 1);\n } else {\n ret.push(cursor.value);\n cursor[\"continue\"]();\n }\n } else {\n res(ret);\n }\n };\n });\n}\nexport function removeMessageById(db, id) {\n var request = db.transaction([OBJECT_STORE_ID], 'readwrite').objectStore(OBJECT_STORE_ID)[\"delete\"](id);\n return new Promise(function (res) {\n request.onsuccess = function () {\n return res();\n };\n });\n}\nexport function getOldMessages(db, ttl) {\n var olderThen = new Date().getTime() - ttl;\n var objectStore = db.transaction(OBJECT_STORE_ID).objectStore(OBJECT_STORE_ID);\n var ret = [];\n return new Promise(function (res) {\n objectStore.openCursor().onsuccess = function (ev) {\n var cursor = ev.target.result;\n\n if (cursor) {\n var msgObk = cursor.value;\n\n if (msgObk.time < olderThen) {\n ret.push(msgObk); //alert(\"Name for SSN \" + cursor.key + \" is \" + cursor.value.name);\n\n cursor[\"continue\"]();\n } else {\n // no more old messages,\n res(ret);\n return;\n }\n } else {\n res(ret);\n }\n };\n });\n}\nexport function cleanOldMessages(db, ttl) {\n return getOldMessages(db, ttl).then(function (tooOld) {\n return Promise.all(tooOld.map(function (msgObj) {\n return removeMessageById(db, msgObj.id);\n }));\n });\n}\nexport function create(channelName, options) {\n options = fillOptionsWithDefaults(options);\n return createDatabase(channelName).then(function (db) {\n var state = {\n closed: false,\n lastCursorId: 0,\n channelName: channelName,\n options: options,\n uuid: randomToken(),\n\n /**\n * emittedMessagesIds\n * contains all messages that have been emitted before\n * @type {ObliviousSet}\n */\n eMIs: new ObliviousSet(options.idb.ttl * 2),\n // ensures we do not read messages in parrallel\n writeBlockPromise: Promise.resolve(),\n messagesCallback: null,\n readQueuePromises: [],\n db: db\n };\n /**\n * Handle abrupt closes that do not originate from db.close().\n * This could happen, for example, if the underlying storage is\n * removed or if the user clears the database in the browser's\n * history preferences.\n */\n\n db.onclose = function () {\n state.closed = true;\n if (options.idb.onclose) options.idb.onclose();\n };\n /**\n * if service-workers are used,\n * we have no 'storage'-event if they post a message,\n * therefore we also have to set an interval\n */\n\n\n _readLoop(state);\n\n return state;\n });\n}\n\nfunction _readLoop(state) {\n if (state.closed) return;\n readNewMessages(state).then(function () {\n return sleep(state.options.idb.fallbackInterval);\n }).then(function () {\n return _readLoop(state);\n });\n}\n\nfunction _filterMessage(msgObj, state) {\n if (msgObj.uuid === state.uuid) return false; // send by own\n\n if (state.eMIs.has(msgObj.id)) return false; // already emitted\n\n if (msgObj.data.time < state.messagesCallbackTime) return false; // older then onMessageCallback\n\n return true;\n}\n/**\n * reads all new messages from the database and emits them\n */\n\n\nfunction readNewMessages(state) {\n // channel already closed\n if (state.closed) return Promise.resolve(); // if no one is listening, we do not need to scan for new messages\n\n if (!state.messagesCallback) return Promise.resolve();\n return getMessagesHigherThan(state.db, state.lastCursorId).then(function (newerMessages) {\n var useMessages = newerMessages\n /**\n * there is a bug in iOS where the msgObj can be undefined some times\n * so we filter them out\n * @link https://github.com/pubkey/broadcast-channel/issues/19\n */\n .filter(function (msgObj) {\n return !!msgObj;\n }).map(function (msgObj) {\n if (msgObj.id > state.lastCursorId) {\n state.lastCursorId = msgObj.id;\n }\n\n return msgObj;\n }).filter(function (msgObj) {\n return _filterMessage(msgObj, state);\n }).sort(function (msgObjA, msgObjB) {\n return msgObjA.time - msgObjB.time;\n }); // sort by time\n\n useMessages.forEach(function (msgObj) {\n if (state.messagesCallback) {\n state.eMIs.add(msgObj.id);\n state.messagesCallback(msgObj.data);\n }\n });\n return Promise.resolve();\n });\n}\n\nexport function close(channelState) {\n channelState.closed = true;\n channelState.db.close();\n}\nexport function postMessage(channelState, messageJson) {\n channelState.writeBlockPromise = channelState.writeBlockPromise.then(function () {\n return writeMessage(channelState.db, channelState.uuid, messageJson);\n }).then(function () {\n if (randomInt(0, 10) === 0) {\n /* await (do not await) */\n cleanOldMessages(channelState.db, channelState.options.idb.ttl);\n }\n });\n return channelState.writeBlockPromise;\n}\nexport function onMessage(channelState, fn, time) {\n channelState.messagesCallbackTime = time;\n channelState.messagesCallback = fn;\n readNewMessages(channelState);\n}\nexport function canBeUsed() {\n if (isNode) return false;\n var idb = getIdb();\n if (!idb) return false;\n return true;\n}\nexport function averageResponseTime(options) {\n return options.idb.fallbackInterval * 2;\n}\nexport default {\n create: create,\n close: close,\n onMessage: onMessage,\n postMessage: postMessage,\n canBeUsed: canBeUsed,\n type: type,\n averageResponseTime: averageResponseTime,\n microSeconds: microSeconds\n};"],"names":["micro","options","fillOptionsWithDefaults","randomToken","ObliviousSet","sleep","randomInt","isNode"],"mappings":"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"}
@@ -1,193 +0,0 @@
1
- /**
2
- * query-broadcast-client-experimental
3
- *
4
- * Copyright (c) TanStack
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- var index = require('../../../../oblivious-set/dist/es/index.js');
16
- var options = require('../options.js');
17
- var util = require('../util.js');
18
-
19
- /**
20
- * A localStorage-only method which uses localstorage and its 'storage'-event
21
- * This does not work inside of webworkers because they have no access to locastorage
22
- * This is basically implemented to support IE9 or your grandmothers toaster.
23
- * @link https://caniuse.com/#feat=namevalue-storage
24
- * @link https://caniuse.com/#feat=indexeddb
25
- */
26
- var microSeconds = util.microSeconds;
27
- var KEY_PREFIX = 'pubkey.broadcastChannel-';
28
- var type = 'localstorage';
29
- /**
30
- * copied from crosstab
31
- * @link https://github.com/tejacques/crosstab/blob/master/src/crosstab.js#L32
32
- */
33
-
34
- function getLocalStorage() {
35
- var localStorage;
36
- if (typeof window === 'undefined') return null;
37
-
38
- try {
39
- localStorage = window.localStorage;
40
- localStorage = window['ie8-eventlistener/storage'] || window.localStorage;
41
- } catch (e) {// New versions of Firefox throw a Security exception
42
- // if cookies are disabled. See
43
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1028153
44
- }
45
-
46
- return localStorage;
47
- }
48
- function storageKey(channelName) {
49
- return KEY_PREFIX + channelName;
50
- }
51
- /**
52
- * writes the new message to the storage
53
- * and fires the storage-event so other readers can find it
54
- */
55
-
56
- function postMessage(channelState, messageJson) {
57
- return new Promise(function (res) {
58
- util.sleep().then(function () {
59
- var key = storageKey(channelState.channelName);
60
- var writeObj = {
61
- token: util.randomToken(),
62
- time: new Date().getTime(),
63
- data: messageJson,
64
- uuid: channelState.uuid
65
- };
66
- var value = JSON.stringify(writeObj);
67
- getLocalStorage().setItem(key, value);
68
- /**
69
- * StorageEvent does not fire the 'storage' event
70
- * in the window that changes the state of the local storage.
71
- * So we fire it manually
72
- */
73
-
74
- var ev = document.createEvent('Event');
75
- ev.initEvent('storage', true, true);
76
- ev.key = key;
77
- ev.newValue = value;
78
- window.dispatchEvent(ev);
79
- res();
80
- });
81
- });
82
- }
83
- function addStorageEventListener(channelName, fn) {
84
- var key = storageKey(channelName);
85
-
86
- var listener = function listener(ev) {
87
- if (ev.key === key) {
88
- fn(JSON.parse(ev.newValue));
89
- }
90
- };
91
-
92
- window.addEventListener('storage', listener);
93
- return listener;
94
- }
95
- function removeStorageEventListener(listener) {
96
- window.removeEventListener('storage', listener);
97
- }
98
- function create(channelName, options$1) {
99
- options$1 = options.fillOptionsWithDefaults(options$1);
100
-
101
- if (!canBeUsed()) {
102
- throw new Error('BroadcastChannel: localstorage cannot be used');
103
- }
104
-
105
- var uuid = util.randomToken();
106
- /**
107
- * eMIs
108
- * contains all messages that have been emitted before
109
- * @type {ObliviousSet}
110
- */
111
-
112
- var eMIs = new index.ObliviousSet(options$1.localstorage.removeTimeout);
113
- var state = {
114
- channelName: channelName,
115
- uuid: uuid,
116
- eMIs: eMIs // emittedMessagesIds
117
-
118
- };
119
- state.listener = addStorageEventListener(channelName, function (msgObj) {
120
- if (!state.messagesCallback) return; // no listener
121
-
122
- if (msgObj.uuid === uuid) return; // own message
123
-
124
- if (!msgObj.token || eMIs.has(msgObj.token)) return; // already emitted
125
-
126
- if (msgObj.data.time && msgObj.data.time < state.messagesCallbackTime) return; // too old
127
-
128
- eMIs.add(msgObj.token);
129
- state.messagesCallback(msgObj.data);
130
- });
131
- return state;
132
- }
133
- function close(channelState) {
134
- removeStorageEventListener(channelState.listener);
135
- }
136
- function onMessage(channelState, fn, time) {
137
- channelState.messagesCallbackTime = time;
138
- channelState.messagesCallback = fn;
139
- }
140
- function canBeUsed() {
141
- if (util.isNode) return false;
142
- var ls = getLocalStorage();
143
- if (!ls) return false;
144
-
145
- try {
146
- var key = '__broadcastchannel_check';
147
- ls.setItem(key, 'works');
148
- ls.removeItem(key);
149
- } catch (e) {
150
- // Safari 10 in private mode will not allow write access to local
151
- // storage and fail with a QuotaExceededError. See
152
- // https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API#Private_Browsing_Incognito_modes
153
- return false;
154
- }
155
-
156
- return true;
157
- }
158
- function averageResponseTime() {
159
- var defaultTime = 120;
160
- var userAgent = navigator.userAgent.toLowerCase();
161
-
162
- if (userAgent.includes('safari') && !userAgent.includes('chrome')) {
163
- // safari is much slower so this time is higher
164
- return defaultTime * 2;
165
- }
166
-
167
- return defaultTime;
168
- }
169
- var LocalstorageMethod = {
170
- create: create,
171
- close: close,
172
- onMessage: onMessage,
173
- postMessage: postMessage,
174
- canBeUsed: canBeUsed,
175
- type: type,
176
- averageResponseTime: averageResponseTime,
177
- microSeconds: microSeconds
178
- };
179
-
180
- exports.addStorageEventListener = addStorageEventListener;
181
- exports.averageResponseTime = averageResponseTime;
182
- exports.canBeUsed = canBeUsed;
183
- exports.close = close;
184
- exports.create = create;
185
- exports["default"] = LocalstorageMethod;
186
- exports.getLocalStorage = getLocalStorage;
187
- exports.microSeconds = microSeconds;
188
- exports.onMessage = onMessage;
189
- exports.postMessage = postMessage;
190
- exports.removeStorageEventListener = removeStorageEventListener;
191
- exports.storageKey = storageKey;
192
- exports.type = type;
193
- //# sourceMappingURL=localstorage.js.map