diff --git a/package-lock.json b/package-lock.json index 4df99b75..72fd20c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1017,12 +1017,6 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -1136,19 +1130,6 @@ "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "http-proxy": { @@ -1350,12 +1331,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isomorphic.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.1.0.tgz", - "integrity": "sha512-qoOHpuSbJ56TlPR+vi0xRxdhNBbh/xFbgjB2d+ysekcM5iSh9jzxHURnACQxy0Sb9SnZhxxo9EyN+XbGcQhkAg==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1888,14 +1863,6 @@ "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } } }, "optionator": { @@ -2113,12 +2080,6 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -2265,6 +2226,17 @@ } } }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -2779,6 +2751,12 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2813,17 +2791,6 @@ "dev": true, "requires": { "lib0": "^0.2.3" - }, - "dependencies": { - "lib0": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.3.tgz", - "integrity": "sha512-J1Gw9PT78tO3QODgvzk9NVTXTXTsru9LKq+iPOdWw5s1/QiapUKmCJMCWBrNSGkJ0f3WQkZJtGzn3azJwMDdeg==", - "dev": true, - "requires": { - "isomorphic.js": "^0.1.0" - } - } } } } diff --git a/src/utils/PermanentUserData.js b/src/utils/PermanentUserData.js index 0040c4a6..c753a8ce 100644 --- a/src/utils/PermanentUserData.js +++ b/src/utils/PermanentUserData.js @@ -5,6 +5,7 @@ import { readDeleteSet, writeDeleteSet, createDeleteSet, + applyUpdate, ID, DeleteSet, YArrayEvent, Transaction, Doc // eslint-disable-line } from '../internals.js' @@ -15,15 +16,14 @@ import { mergeDeleteSets, isDeleted } from './DeleteSet.js' export class PermanentUserData { /** * @param {Doc} doc - * @param {string} key + * @param {YMap} [storeType] */ - constructor (doc, key = 'users') { - const users = doc.getMap(key) + constructor (doc, storeType = doc.getMap('users')) { /** * @type {Map} */ const dss = new Map() - this.yusers = users + this.yusers = storeType this.doc = doc /** * Maps from clientid to userDescription @@ -59,21 +59,23 @@ export class PermanentUserData { ids.forEach(addClientId) } // observe users - users.observe(event => { + storeType.observe(event => { event.keysChanged.forEach(userDescription => - initUser(users.get(userDescription), userDescription) + initUser(storeType.get(userDescription), userDescription) ) }) // add intial data - users.forEach(initUser) + storeType.forEach(initUser) } /** * @param {Doc} doc * @param {number} clientid * @param {string} userDescription + * @param {Object} conf + * @param {function(Transaction, DeleteSet):boolean} [conf.filter] */ - setUserMapping (doc, clientid, userDescription) { + setUserMapping (doc, clientid, userDescription, { filter = () => true }) { const users = this.yusers let user = users.get(userDescription) if (!user) { @@ -109,7 +111,7 @@ export class PermanentUserData { setTimeout(() => { const yds = user.get('ds') const ds = transaction.deleteSet - if (transaction.local && ds.clients.size > 0) { + if (transaction.local && ds.clients.size > 0 && filter(transaction, ds)) { const encoder = encoding.createEncoder() writeDeleteSet(encoder, ds) yds.push([encoding.toUint8Array(encoder)])