@live-change/framework 0.5.13 → 0.5.14

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.
@@ -14,6 +14,31 @@ class ReaderModel {
14
14
  return ['database', 'tableObject', this.service.databaseName, this.tableName, id]
15
15
  }
16
16
 
17
+ limitedPath(id, fields) { // takes object or list of fields
18
+ if(Array.isArray(fields)) {
19
+ fields = utils.fieldListToFieldsObject(fields)
20
+ }
21
+ fields.id = true // id is required
22
+ return ['database', 'queryObject', this.service.databaseName, `(${
23
+ async (input, output, { tableName, id, fields }) => {
24
+ function mapper(obj, fields) {
25
+ if(!obj) return obj
26
+ const out = {}
27
+ for(const key in fields) {
28
+ if(typeof fields[key] == 'object') {
29
+ out[key] = mapper(obj[key], fields[key])
30
+ } else {
31
+ out[key] = obj[key]
32
+ }
33
+ }
34
+ return out
35
+ }
36
+ await input.table(tableName).object(id).onChange((obj, oldObj) =>
37
+ output.change(mapper(obj, fields), mapper(oldObj, fields)))
38
+ }
39
+ })`, { tableName: this.tableName, id, fields }]
40
+ }
41
+
17
42
  rangePath(range = {}) {
18
43
  if(typeof range != 'object') {
19
44
  const str = range.toString()
@@ -218,39 +243,30 @@ class ReaderModel {
218
243
  observable(id) {
219
244
  return this.service.dao.observable(this.path(id), ReactiveDao.ObservableValue)
220
245
  }
221
-
222
246
  async get(id) {
223
247
  return this.service.dao.get(this.path(id), ReactiveDao.ObservableValue)
224
248
  }
225
-
226
249
  rangeObservable(range) {
227
250
  return this.service.dao.observable(this.rangePath(range), ReactiveDao.ObservableList)
228
251
  }
229
-
230
252
  async rangeGet(range) {
231
253
  return this.service.dao.get(this.rangePath(range), ReactiveDao.ObservableList)
232
254
  }
233
-
234
255
  indexRangeObservable(index, range, pathRange = null) {
235
256
  return this.service.dao.observable(this.indexRangePath(index, range, pathRange), ReactiveDao.ObservableList)
236
257
  }
237
-
238
258
  async indexRangeGet(index, range, pathRange = null) {
239
259
  return this.service.dao.get(this.indexRangePath(index, range, pathRange), ReactiveDao.ObservableList)
240
260
  }
241
-
242
261
  indexObjectObservable(index, range, pathRange = null) {
243
262
  return this.service.dao.observable(this.indexObjectPath(index, range, pathRange))
244
263
  }
245
-
246
264
  async indexObjectGet(index, range, pathRange) {
247
265
  return this.service.dao.get(this.indexObjectPath(index, range, pathRange))
248
266
  }
249
-
250
267
  sortedIndexRangeObservable(index, range, pathRange = null) {
251
268
  return this.service.dao.observable(this.sortedIndexRangePath(index, range, pathRange), ReactiveDao.ObservableList)
252
269
  }
253
-
254
270
  async sortedIndexRangeGet(index, range, pathRange = null) {
255
271
  return this.service.dao.get(this.sortedIndexRangePath(index, range, pathRange), ReactiveDao.ObservableList)
256
272
  }
package/lib/utils.js CHANGED
@@ -231,8 +231,23 @@ const rangeProperties = {
231
231
  }
232
232
  }
233
233
 
234
+ function fieldListToFieldsObject(fieldList) {
235
+ const fields = {}
236
+ for(const fieldName of fieldList) {
237
+ const parts = fieldName.split('.')
238
+ let at = fields
239
+ let i = 0
240
+ for(; i < parts.length - 1; i ++) {
241
+ if(!at[parts[i]]) at[parts[i]] = {}
242
+ at = at[parts[i]]
243
+ }
244
+ at[parts[i]] = true
245
+ }
246
+ return fields
247
+ }
248
+
234
249
  module.exports = {
235
250
  typeName, toJSON, setDifference, mapDifference, crudChanges,
236
251
  getProperty, setProperty, getField, setField, isObject, mergeDeep, generateDefault,
237
- prefixRange, rangeProperties
252
+ prefixRange, rangeProperties, fieldListToFieldsObject
238
253
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/framework",
3
- "version": "0.5.13",
3
+ "version": "0.5.14",
4
4
  "description": "Live Change Framework - ultimate solution for real time mobile/web apps",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -26,7 +26,7 @@
26
26
  "@live-change/db": "^0.3.64",
27
27
  "@live-change/db-store-level": "^0.1.15",
28
28
  "@live-change/db-store-lmdb": "^0.1.22",
29
- "@live-change/uid": "^0.1.3",
29
+ "@live-change/uid": "^0.1.4",
30
30
  "cookie": "^0.4.1",
31
31
  "encoding-down": "^7.1.0",
32
32
  "express": "^4.17.1",