statebus 7.0.21 → 7.0.23
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/extras/tests.js +12 -2
- package/package.json +1 -1
- package/statebus.js +61 -70
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.
|
|
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.
|
|
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
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[
|
|
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,
|
|
1350
|
-
o[
|
|
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(
|
|
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[
|
|
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,
|
|
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({
|
|
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(
|
|
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
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
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,
|
|
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],
|
|
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] =
|
|
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] =
|
|
1685
|
+
obj[k][i] = translate(obj[k][i])
|
|
1681
1686
|
}
|
|
1682
|
-
translate_keys(obj[k],
|
|
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,
|
|
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],
|
|
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]
|
|
1706
|
-
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] =
|
|
1709
|
+
obj[k][i] = translate(obj[k][i])
|
|
1711
1710
|
}
|
|
1712
|
-
translate_links(obj[k],
|
|
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
|
-
//
|
|
1725
|
-
// for `object`.
|
|
1726
|
-
function translate_fields (
|
|
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(
|
|
1731
|
-
var new_array =
|
|
1732
|
-
for (var i=0; i <
|
|
1733
|
-
new_array[i] = translate_fields(
|
|
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
|
|
1737
|
+
else if (typeof json === 'object' && json !== null) {
|
|
1739
1738
|
var new_obj = {}
|
|
1740
|
-
for (var k in
|
|
1741
|
-
new_obj[
|
|
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 =
|
|
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
|
-
//
|
|
1766
|
-
// -
|
|
1767
|
-
// -
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
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
|
-
'
|
|
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
|
-
'
|
|
2228
|
-
'
|
|
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(' ')
|
|
@@ -2251,13 +2239,16 @@
|
|
|
2251
2239
|
bus.libs = {}
|
|
2252
2240
|
|
|
2253
2241
|
if (nodejs)
|
|
2254
|
-
require(
|
|
2242
|
+
// Use require.call() instead of require() to fool jsdelivr.net into ignoring the require
|
|
2243
|
+
require.call(null, './server-library').import_server(bus, make_bus, options)
|
|
2255
2244
|
|
|
2256
2245
|
bus.render_when_loading = true
|
|
2257
2246
|
return bus
|
|
2258
2247
|
}
|
|
2259
2248
|
|
|
2260
|
-
if (nodejs)
|
|
2249
|
+
if (nodejs)
|
|
2250
|
+
// Use require.call() instead of require() to fool jsdelivr.net into ignoring the require
|
|
2251
|
+
require.call(null, './server-library').import_module(make_bus)
|
|
2261
2252
|
|
|
2262
2253
|
return make_bus
|
|
2263
2254
|
}))
|