statebus 7.0.20 → 7.0.22

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/client-library.js CHANGED
@@ -88,10 +88,10 @@
88
88
  function send_put (id) {
89
89
  var the_put = puts.get(id)
90
90
  try {
91
- console.log('Sending a put!', {
92
- patches: the_put.patches,
93
- body: the_put.body
94
- })
91
+ // console.log('Sending a put!', {
92
+ // patches: the_put.patches,
93
+ // body: the_put.body
94
+ // })
95
95
 
96
96
  the_put.status = 'sending'
97
97
  braid_fetch(
@@ -108,7 +108,7 @@
108
108
  }
109
109
  ).then(function (res) {
110
110
  if (res.status === 200) {
111
- console.log('PUT succeeded!')
111
+ // console.log('PUT succeeded!')
112
112
  puts.delete(id)
113
113
  }
114
114
  else
package/extras/tests.js CHANGED
@@ -295,6 +295,16 @@ test(function url_translation (done) {
295
295
  done()
296
296
  })
297
297
 
298
+ test(function proxy_link (done) {
299
+ console.log('lets test')
300
+
301
+ bus.state.link_from = [{link: 'link_to'}]
302
+ bus.state.link_to = 3
303
+ assert(bus.state.link_from[0] !== 3, 'Link got linkified')
304
+
305
+ done()
306
+ })
307
+
298
308
  test(function translate_fields (done) {
299
309
  // Translate Statebus -> Proxy format
300
310
  var tests1 = [
@@ -315,7 +325,7 @@ test(function translate_fields (done) {
315
325
  // Test 1
316
326
  var tests = tests1
317
327
  for (var i=0; i<tests.length; i++) {
318
- var trans = bus.translate_fields(tests[i][0], bus.keyed_2_proxied)
328
+ var trans = bus.translate_fields(tests[i][0], bus.unescape_from_bus)
319
329
  assert(bus.deep_equals(trans, tests[i][1]),
320
330
  'Bad translation1: ' + i + ' ' + JSON.stringify(trans))
321
331
  }
@@ -323,7 +333,7 @@ test(function translate_fields (done) {
323
333
  // Test 2
324
334
  tests = tests2
325
335
  for (var i=0; i<tests2.length; i++) {
326
- var trans = bus.translate_fields(tests[i][0], bus.proxied_2_keyed)
336
+ var trans = bus.translate_fields(tests[i][0], bus.escape_to_bus)
327
337
  assert(bus.deep_equals(trans, tests[i][1]),
328
338
  'Bad translation2: ' + i + ' ' + JSON.stringify(trans))
329
339
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "statebus",
3
- "version": "7.0.20",
3
+ "version": "7.0.22",
4
4
  "description": "Synchronize state.",
5
5
  "main": "statebus.js",
6
6
  "scripts": {
package/statebus.js CHANGED
@@ -1300,9 +1300,9 @@
1300
1300
 
1301
1301
  var symbols = {
1302
1302
  is_proxy: Symbol('is_proxy'),
1303
- is_link: Symbol('is_link'),
1304
- get_json: Symbol('get_json'),
1305
- get_base: Symbol('get_base')
1303
+ // is_link: Symbol('is_link'),
1304
+ // get_json: Symbol('get_json'),
1305
+ // get_base: Symbol('get_base')
1306
1306
  }
1307
1307
  function make_proxy () {
1308
1308
  function item_proxy (base, path, o) {
@@ -1343,11 +1343,11 @@
1343
1343
 
1344
1344
  // Compute the new path
1345
1345
  var new_path = path + '[' + JSON.stringify(k) + ']'
1346
- return item_proxy(base, new_path, o[proxied_2_keyed(k)])
1346
+ return item_proxy(base, new_path, o[escape_to_bus(k)])
1347
1347
  },
1348
1348
  set: function set(o, k, v) {
1349
- var value = translate_fields(v, proxied_2_keyed)
1350
- o[proxied_2_keyed(k)] = value
1349
+ var value = translate_fields(v, field => escape_to_bus(escape_to_nelson(field)))
1350
+ o[escape_to_bus(k)] = value
1351
1351
  var new_path = path + '[' + JSON.stringify(k) + ']'
1352
1352
  bus.set(
1353
1353
  base,
@@ -1357,11 +1357,11 @@
1357
1357
  return true
1358
1358
  },
1359
1359
  has: function has(o, k) {
1360
- return o.hasOwnProperty(proxied_2_keyed(k))
1360
+ return o.hasOwnProperty(escape_to_bus(k))
1361
1361
  },
1362
1362
  deleteProperty: function del (o, k) {
1363
1363
  var new_path = path + '[' + JSON.stringify(k) + ']'
1364
- delete o[proxied_2_keyed(k)]
1364
+ delete o[escape_to_bus(k)]
1365
1365
  bus.set(
1366
1366
  base,
1367
1367
  // Forward the patch too
@@ -1372,7 +1372,7 @@
1372
1372
  // For function proxies:
1373
1373
  //
1374
1374
  // apply: function apply (o, This, args) {
1375
- // return translate_fields(o, keyed_2_proxied)
1375
+ // return translate_fields(o, unescape_from_bus)
1376
1376
  // }
1377
1377
  })}
1378
1378
 
@@ -1383,6 +1383,8 @@
1383
1383
  // The top-level Proxy object holds HTTP resources
1384
1384
  return new Proxy(cache, {
1385
1385
  get: function get(o, k) {
1386
+ if (k === symbols.is_proxy)
1387
+ return true
1386
1388
  if (k === 'inspect' || k === 'valueOf' || typeof k === 'symbol')
1387
1389
  return undefined
1388
1390
  bogus_check(k)
@@ -1390,11 +1392,14 @@
1390
1392
  return item_proxy(base, '', base.val)
1391
1393
  },
1392
1394
  set: function set(o, key, val) {
1393
- bus.set({key: key, val: translate_fields(val, proxied_2_keyed)})
1395
+ bus.set({
1396
+ key: key,
1397
+ val: translate_fields(val, field => escape_to_bus(escape_to_nelson(field)))
1398
+ })
1394
1399
  return true
1395
1400
  },
1396
1401
  deleteProperty: function del (o, k) {
1397
- bus.delete(proxied_2_keyed(k))
1402
+ bus.delete(escape_to_bus(k))
1398
1403
  return true // Report success to Proxy
1399
1404
  },
1400
1405
  // For function proxies:
@@ -1405,11 +1410,11 @@
1405
1410
  }
1406
1411
  bus.state = make_proxy()
1407
1412
 
1408
- function link (url) {
1409
- var result = bus.get(url)
1410
- result[symbols.is_link] = true
1411
- return result
1412
- }
1413
+ // function link (url) {
1414
+ // var result = bus.get(url)
1415
+ // result[symbols.is_link] = true
1416
+ // return result
1417
+ // }
1413
1418
 
1414
1419
 
1415
1420
  // So chrome can print out proxy objects decently
@@ -1662,54 +1667,48 @@
1662
1667
 
1663
1668
  // ************************************************
1664
1669
  // Translating the URLs under keys of state
1665
- function translate_keys (obj, f) {
1670
+ function translate_keys (obj, translate) {
1666
1671
  // Recurse through each element in arrays
1667
1672
  if (Array.isArray(obj))
1668
1673
  for (var i=0; i < obj.length; i++)
1669
- translate_keys(obj[i], f)
1674
+ translate_keys(obj[i], translate)
1670
1675
 
1671
1676
  // Recurse through each property on objects
1672
1677
  else if (typeof obj === 'object')
1673
1678
  for (var k in obj) {
1674
1679
  if (k === 'key' || /.*_key$/.test(k))
1675
1680
  if (typeof obj[k] == 'string')
1676
- obj[k] = f(obj[k])
1681
+ obj[k] = translate(obj[k])
1677
1682
  else if (Array.isArray(obj[k]))
1678
1683
  for (var i=0; i < obj[k].length; i++) {
1679
1684
  if (typeof obj[k][i] === 'string')
1680
- obj[k][i] = f(obj[k][i])
1685
+ obj[k][i] = translate(obj[k][i])
1681
1686
  }
1682
- translate_keys(obj[k], f)
1687
+ translate_keys(obj[k], translate)
1683
1688
  }
1684
1689
  return obj
1685
1690
  }
1686
- function escape_keys(k) {
1687
- return k.replace(/(_(keys?|time)?$|^key$)/, '$1_')
1688
- }
1689
- function unescape_keys (k) {
1690
- return k.replace(/(_$)/, '')
1691
- }
1692
1691
 
1693
1692
  // ************************************************
1694
1693
  // Translating the URLs under links of state
1695
- function translate_links (obj, f) {
1694
+ function translate_links (obj, translate) {
1696
1695
  // Recurse through each element in arrays
1697
1696
  if (Array.isArray(obj))
1698
1697
  for (var i=0; i < obj.length; i++)
1699
- translate_links(obj[i], f)
1698
+ translate_links(obj[i], translate)
1700
1699
 
1701
1700
  // Recurse through each property on objects
1702
1701
  else if (typeof obj === 'object')
1703
1702
  for (var k in obj) {
1704
1703
  if (k === 'link')
1705
- if (typeof obj[k] == 'string')
1706
- obj[k] = f(obj[k])
1704
+ if (typeof obj[k] === 'string')
1705
+ obj[k] = translate(obj[k])
1707
1706
  else if (Array.isArray(obj[k]))
1708
1707
  for (var i=0; i < obj[k].length; i++) {
1709
1708
  if (typeof obj[k][i] === 'string')
1710
- obj[k][i] = f(obj[k][i])
1709
+ obj[k][i] = translate(obj[k][i])
1711
1710
  }
1712
- translate_links(obj[k], f)
1711
+ translate_links(obj[k], translate)
1713
1712
  }
1714
1713
  return obj
1715
1714
  }
@@ -1721,56 +1720,45 @@
1721
1720
  // Recurse through JSON and swap all object fields with other field names,
1722
1721
  // according to the function f(field, object). Returns a copy.
1723
1722
  //
1724
- // f(field, object) takes a string `field` and returns the new field name
1725
- // for `object`.
1726
- function translate_fields (input, f) {
1723
+ // translate(field, object) takes a string `field` and returns the new
1724
+ // field name for `object`.
1725
+ function translate_fields (json, translate) {
1727
1726
  var result
1728
1727
 
1729
1728
  // Recurse through each element in arrays
1730
- if (Array.isArray(input)) {
1731
- var new_array = input.slice()
1732
- for (var i=0; i < input.length; i++)
1733
- new_array[i] = translate_fields(input[i], f)
1729
+ if (Array.isArray(json)) {
1730
+ var new_array = json.slice()
1731
+ for (var i=0; i < json.length; i++)
1732
+ new_array[i] = translate_fields(json[i], translate)
1734
1733
  result = new_array
1735
1734
  }
1736
1735
 
1737
1736
  // Recurse through each property on objects
1738
- else if (typeof input === 'object' && input !== null) {
1737
+ else if (typeof json === 'object' && json !== null) {
1739
1738
  var new_obj = {}
1740
- for (var k in input)
1741
- new_obj[f(k, input)] = translate_fields(input[k], f)
1739
+ for (var k in json)
1740
+ new_obj[translate(k, json)] = translate_fields(json[k], translate)
1742
1741
  result = new_obj
1743
1742
  }
1744
1743
 
1745
1744
  // Everything else passes through unscathed
1746
1745
  else
1747
- result = input
1746
+ result = json
1748
1747
 
1749
1748
  return result
1750
1749
  }
1751
- // Remove underscore from _key
1752
- function keyed_2_proxied (k, object) {
1753
- if (object[symbols.is_link])
1754
- return k
1755
- else
1756
- return k.replace(/^(_*)_key$/, '$1key')
1757
- }
1758
- // Add underscore to key
1759
- function proxied_2_keyed (k) {
1760
- return k.replace(/^(_*)key$/, '$1_key')
1761
- }
1762
1750
 
1763
1751
 
1764
- // ******************
1765
- // JSON encoding
1766
- // - Does both escape/unescape keys, and wraps/unwraps pointers
1767
- // - Will use in both network communication and file_store
1768
- function json_encode (highlevel_obj) {
1769
- // Encodes fields, and converts {_key: 's'} to pointer to {key: 's'...}
1770
- }
1771
- function json_decode (lowlevel_obj) {
1772
- // Decodes fields, and converts pointer to {key: 's'...} to {_key: 's'}
1773
- }
1752
+ // Three levels of escaping through state:
1753
+ //
1754
+ // - statebus-internal escapes key -> _key
1755
+ // - nelSON escapes link -> _link
1756
+ // - JSON
1757
+ //
1758
+ var escape_to_bus = (field) => field.replace(/^(_*)key$/, '$1_key'),
1759
+ unescape_from_bus = (field) => field.replace(/^(_*)_key$/, '$1key'),
1760
+ escape_to_nelson = (field) => field.replace(/^(_*)link$/, '$1_key'),
1761
+ unescape_from_nelson = (field) => field.replace(/^(_*)link$/, '$1_key')
1774
1762
 
1775
1763
 
1776
1764
  function key_id(string) { return string.match(/\/?[^\/]+\/(\d+)/)[1] }
@@ -2220,12 +2208,12 @@
2220
2208
  var api = ['cache backup_cache get set forget del fire dirty get_once',
2221
2209
  'subspace bindings run_handler bind unbind reactive uncallback',
2222
2210
  'versions new_version',
2223
- 'link aget',
2211
+ 'aget',
2224
2212
  'funk_key funk_name funks key_id key_name id',
2225
2213
  'pending_gets gets_in gets_out loading_keys loading once',
2226
2214
  'global_funk busses rerunnable_funks',
2227
- 'escape_keys unescape_keys translate_keys translate_links apply_patch',
2228
- 'keyed_2_proxied proxied_2_keyed translate_fields',
2215
+ 'translate_keys translate_links apply_patch',
2216
+ 'translate_fields escape_to_bus unescape_from_bus escape_to_nelson unescape_from_nelson',
2229
2217
  'ws_mount net_automount message_method',
2230
2218
  'parse Set One_To_Many clone extend deep_map deep_equals prune validate sorta_diff log deps symbols'
2231
2219
  ].join(' ').split(' ')