PermanentUserData fixes

This commit is contained in:
Kevin Jahns 2020-01-23 04:57:54 +01:00
parent bd6be3d23b
commit ef5c71bd8b
2 changed files with 28 additions and 59 deletions

67
package-lock.json generated
View File

@ -1017,12 +1017,6 @@
"requires": { "requires": {
"ms": "^2.1.1" "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", "entities": "^1.1.1",
"inherits": "^2.0.1", "inherits": "^2.0.1",
"readable-stream": "^3.1.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": { "http-proxy": {
@ -1350,12 +1331,6 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true "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": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -1888,14 +1863,6 @@
"requires": { "requires": {
"minimist": "~0.0.1", "minimist": "~0.0.1",
"wordwrap": "~0.0.2" "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": { "optionator": {
@ -2113,12 +2080,6 @@
"requires": { "requires": {
"ms": "^2.1.1" "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": { "regexpp": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
@ -2779,6 +2751,12 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true "dev": true
}, },
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
"dev": true
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@ -2813,17 +2791,6 @@
"dev": true, "dev": true,
"requires": { "requires": {
"lib0": "^0.2.3" "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"
}
}
} }
} }
} }

View File

@ -5,6 +5,7 @@ import {
readDeleteSet, readDeleteSet,
writeDeleteSet, writeDeleteSet,
createDeleteSet, createDeleteSet,
applyUpdate,
ID, DeleteSet, YArrayEvent, Transaction, Doc // eslint-disable-line ID, DeleteSet, YArrayEvent, Transaction, Doc // eslint-disable-line
} from '../internals.js' } from '../internals.js'
@ -15,15 +16,14 @@ import { mergeDeleteSets, isDeleted } from './DeleteSet.js'
export class PermanentUserData { export class PermanentUserData {
/** /**
* @param {Doc} doc * @param {Doc} doc
* @param {string} key * @param {YMap<any>} [storeType]
*/ */
constructor (doc, key = 'users') { constructor (doc, storeType = doc.getMap('users')) {
const users = doc.getMap(key)
/** /**
* @type {Map<string,DeleteSet>} * @type {Map<string,DeleteSet>}
*/ */
const dss = new Map() const dss = new Map()
this.yusers = users this.yusers = storeType
this.doc = doc this.doc = doc
/** /**
* Maps from clientid to userDescription * Maps from clientid to userDescription
@ -59,21 +59,23 @@ export class PermanentUserData {
ids.forEach(addClientId) ids.forEach(addClientId)
} }
// observe users // observe users
users.observe(event => { storeType.observe(event => {
event.keysChanged.forEach(userDescription => event.keysChanged.forEach(userDescription =>
initUser(users.get(userDescription), userDescription) initUser(storeType.get(userDescription), userDescription)
) )
}) })
// add intial data // add intial data
users.forEach(initUser) storeType.forEach(initUser)
} }
/** /**
* @param {Doc} doc * @param {Doc} doc
* @param {number} clientid * @param {number} clientid
* @param {string} userDescription * @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 const users = this.yusers
let user = users.get(userDescription) let user = users.get(userDescription)
if (!user) { if (!user) {
@ -109,7 +111,7 @@ export class PermanentUserData {
setTimeout(() => { setTimeout(() => {
const yds = user.get('ds') const yds = user.get('ds')
const ds = transaction.deleteSet 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() const encoder = encoding.createEncoder()
writeDeleteSet(encoder, ds) writeDeleteSet(encoder, ds)
yds.push([encoding.toUint8Array(encoder)]) yds.push([encoding.toUint8Array(encoder)])