holosphere 1.1.19 → 1.1.20
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/README.md +2 -173
- package/content.js +3 -45
- package/holosphere-bundle.esm.js +12 -1305
- package/holosphere-bundle.js +12 -1305
- package/holosphere-bundle.min.js +20 -30
- package/holosphere.d.ts +16 -19
- package/holosphere.js +16 -36
- package/package.json +3 -3
package/holosphere-bundle.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HoloSphere Bundle v1.1.
|
|
2
|
+
* HoloSphere Bundle v1.1.20
|
|
3
3
|
* Holonic Geospatial Communication Infrastructure
|
|
4
4
|
*
|
|
5
5
|
* Includes:
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - Ajv (JSON schema validation)
|
|
10
10
|
*
|
|
11
11
|
* Usage:
|
|
12
|
-
* <script src="https://unpkg.com/holosphere@1.1.
|
|
12
|
+
* <script src="https://unpkg.com/holosphere@1.1.20/holosphere-bundle.js"></script>
|
|
13
13
|
* <script>
|
|
14
14
|
* const hs = new HoloSphere('myapp');
|
|
15
15
|
* </script>
|
|
@@ -3149,1254 +3149,6 @@ var HoloSphere = (() => {
|
|
|
3149
3149
|
}
|
|
3150
3150
|
});
|
|
3151
3151
|
|
|
3152
|
-
// node_modules/gun/lib/yson.js
|
|
3153
|
-
var require_yson = __commonJS({
|
|
3154
|
-
"node_modules/gun/lib/yson.js"(exports, module) {
|
|
3155
|
-
(function() {
|
|
3156
|
-
var yson = {}, u, sI = setTimeout.turn || typeof setImmediate != "" + u && setImmediate || setTimeout;
|
|
3157
|
-
yson.parseAsync = function(text, done, revive, M) {
|
|
3158
|
-
if ("string" != typeof text) {
|
|
3159
|
-
try {
|
|
3160
|
-
done(u, JSON.parse(text));
|
|
3161
|
-
} catch (e) {
|
|
3162
|
-
done(e);
|
|
3163
|
-
}
|
|
3164
|
-
return;
|
|
3165
|
-
}
|
|
3166
|
-
var ctx = { i: 0, text, done, l: text.length, up: [] };
|
|
3167
|
-
M = M || 1024 * 32;
|
|
3168
|
-
parse2();
|
|
3169
|
-
function parse2() {
|
|
3170
|
-
var s = ctx.text;
|
|
3171
|
-
var i = ctx.i, l = ctx.l, j = 0;
|
|
3172
|
-
var w = ctx.w, b, tmp;
|
|
3173
|
-
while (j++ < M) {
|
|
3174
|
-
var c = s[i++];
|
|
3175
|
-
if (i > l) {
|
|
3176
|
-
ctx.end = true;
|
|
3177
|
-
break;
|
|
3178
|
-
}
|
|
3179
|
-
if (w) {
|
|
3180
|
-
i = s.indexOf('"', i - 1);
|
|
3181
|
-
c = s[i];
|
|
3182
|
-
tmp = 0;
|
|
3183
|
-
while ("\\" == s[i - ++tmp]) {
|
|
3184
|
-
}
|
|
3185
|
-
;
|
|
3186
|
-
tmp = !(tmp % 2);
|
|
3187
|
-
b = b || tmp;
|
|
3188
|
-
if ('"' == c && !tmp) {
|
|
3189
|
-
w = u;
|
|
3190
|
-
tmp = ctx.s;
|
|
3191
|
-
if (ctx.a) {
|
|
3192
|
-
tmp = s.slice(ctx.sl, i);
|
|
3193
|
-
if (b || 1 + tmp.indexOf("\\")) {
|
|
3194
|
-
tmp = JSON.parse('"' + tmp + '"');
|
|
3195
|
-
}
|
|
3196
|
-
if (ctx.at instanceof Array) {
|
|
3197
|
-
ctx.at.push(ctx.s = tmp);
|
|
3198
|
-
} else {
|
|
3199
|
-
if (!ctx.at) {
|
|
3200
|
-
ctx.end = j = M;
|
|
3201
|
-
tmp = u;
|
|
3202
|
-
}
|
|
3203
|
-
(ctx.at || {})[ctx.s] = ctx.s = tmp;
|
|
3204
|
-
}
|
|
3205
|
-
ctx.s = u;
|
|
3206
|
-
} else {
|
|
3207
|
-
ctx.s = s.slice(ctx.sl, i);
|
|
3208
|
-
if (b || 1 + ctx.s.indexOf("\\")) {
|
|
3209
|
-
ctx.s = JSON.parse('"' + ctx.s + '"');
|
|
3210
|
-
}
|
|
3211
|
-
}
|
|
3212
|
-
ctx.a = b = u;
|
|
3213
|
-
}
|
|
3214
|
-
++i;
|
|
3215
|
-
} else {
|
|
3216
|
-
switch (c) {
|
|
3217
|
-
case '"':
|
|
3218
|
-
ctx.sl = i;
|
|
3219
|
-
w = true;
|
|
3220
|
-
break;
|
|
3221
|
-
case ":":
|
|
3222
|
-
ctx.ai = i;
|
|
3223
|
-
ctx.a = true;
|
|
3224
|
-
break;
|
|
3225
|
-
case ",":
|
|
3226
|
-
if (ctx.a || ctx.at instanceof Array) {
|
|
3227
|
-
if (tmp = s.slice(ctx.ai, i - 1)) {
|
|
3228
|
-
if (u !== (tmp = value(tmp))) {
|
|
3229
|
-
if (ctx.at instanceof Array) {
|
|
3230
|
-
ctx.at.push(tmp);
|
|
3231
|
-
} else {
|
|
3232
|
-
ctx.at[ctx.s] = tmp;
|
|
3233
|
-
}
|
|
3234
|
-
}
|
|
3235
|
-
}
|
|
3236
|
-
}
|
|
3237
|
-
ctx.a = u;
|
|
3238
|
-
if (ctx.at instanceof Array) {
|
|
3239
|
-
ctx.a = true;
|
|
3240
|
-
ctx.ai = i;
|
|
3241
|
-
}
|
|
3242
|
-
break;
|
|
3243
|
-
case "{":
|
|
3244
|
-
ctx.up.push(ctx.at || (ctx.at = {}));
|
|
3245
|
-
if (ctx.at instanceof Array) {
|
|
3246
|
-
ctx.at.push(ctx.at = {});
|
|
3247
|
-
} else if (u !== (tmp = ctx.s)) {
|
|
3248
|
-
ctx.at[tmp] = ctx.at = {};
|
|
3249
|
-
}
|
|
3250
|
-
ctx.a = u;
|
|
3251
|
-
break;
|
|
3252
|
-
case "}":
|
|
3253
|
-
if (ctx.a) {
|
|
3254
|
-
if (tmp = s.slice(ctx.ai, i - 1)) {
|
|
3255
|
-
if (u !== (tmp = value(tmp))) {
|
|
3256
|
-
if (ctx.at instanceof Array) {
|
|
3257
|
-
ctx.at.push(tmp);
|
|
3258
|
-
} else {
|
|
3259
|
-
if (!ctx.at) {
|
|
3260
|
-
ctx.end = j = M;
|
|
3261
|
-
tmp = u;
|
|
3262
|
-
}
|
|
3263
|
-
(ctx.at || {})[ctx.s] = tmp;
|
|
3264
|
-
}
|
|
3265
|
-
}
|
|
3266
|
-
}
|
|
3267
|
-
}
|
|
3268
|
-
ctx.a = u;
|
|
3269
|
-
ctx.at = ctx.up.pop();
|
|
3270
|
-
break;
|
|
3271
|
-
case "[":
|
|
3272
|
-
if (u !== (tmp = ctx.s)) {
|
|
3273
|
-
ctx.up.push(ctx.at);
|
|
3274
|
-
ctx.at[tmp] = ctx.at = [];
|
|
3275
|
-
} else if (!ctx.at) {
|
|
3276
|
-
ctx.up.push(ctx.at = []);
|
|
3277
|
-
}
|
|
3278
|
-
ctx.a = true;
|
|
3279
|
-
ctx.ai = i;
|
|
3280
|
-
break;
|
|
3281
|
-
case "]":
|
|
3282
|
-
if (ctx.a) {
|
|
3283
|
-
if (tmp = s.slice(ctx.ai, i - 1)) {
|
|
3284
|
-
if (u !== (tmp = value(tmp))) {
|
|
3285
|
-
if (ctx.at instanceof Array) {
|
|
3286
|
-
ctx.at.push(tmp);
|
|
3287
|
-
} else {
|
|
3288
|
-
ctx.at[ctx.s] = tmp;
|
|
3289
|
-
}
|
|
3290
|
-
}
|
|
3291
|
-
}
|
|
3292
|
-
}
|
|
3293
|
-
ctx.a = u;
|
|
3294
|
-
ctx.at = ctx.up.pop();
|
|
3295
|
-
break;
|
|
3296
|
-
}
|
|
3297
|
-
}
|
|
3298
|
-
}
|
|
3299
|
-
ctx.s = u;
|
|
3300
|
-
ctx.i = i;
|
|
3301
|
-
ctx.w = w;
|
|
3302
|
-
if (ctx.end) {
|
|
3303
|
-
tmp = ctx.at;
|
|
3304
|
-
if (u === tmp) {
|
|
3305
|
-
try {
|
|
3306
|
-
tmp = JSON.parse(text);
|
|
3307
|
-
} catch (e) {
|
|
3308
|
-
return ctx.done(e);
|
|
3309
|
-
}
|
|
3310
|
-
}
|
|
3311
|
-
ctx.done(u, tmp);
|
|
3312
|
-
} else {
|
|
3313
|
-
sI(parse2);
|
|
3314
|
-
}
|
|
3315
|
-
}
|
|
3316
|
-
};
|
|
3317
|
-
function value(s) {
|
|
3318
|
-
var n = parseFloat(s);
|
|
3319
|
-
if (!isNaN(n)) {
|
|
3320
|
-
return n;
|
|
3321
|
-
}
|
|
3322
|
-
s = s.trim();
|
|
3323
|
-
if ("true" == s) {
|
|
3324
|
-
return true;
|
|
3325
|
-
}
|
|
3326
|
-
if ("false" == s) {
|
|
3327
|
-
return false;
|
|
3328
|
-
}
|
|
3329
|
-
if ("null" == s) {
|
|
3330
|
-
return null;
|
|
3331
|
-
}
|
|
3332
|
-
}
|
|
3333
|
-
yson.stringifyAsync = function(data, done, replacer, space, ctx) {
|
|
3334
|
-
ctx = ctx || {};
|
|
3335
|
-
ctx.text = ctx.text || "";
|
|
3336
|
-
ctx.up = [ctx.at = { d: data }];
|
|
3337
|
-
ctx.done = done;
|
|
3338
|
-
ctx.i = 0;
|
|
3339
|
-
var j = 0;
|
|
3340
|
-
ify();
|
|
3341
|
-
function ify() {
|
|
3342
|
-
var at = ctx.at, data2 = at.d, add = "", tmp;
|
|
3343
|
-
if (at.i && at.i - at.j > 0) {
|
|
3344
|
-
add += ",";
|
|
3345
|
-
}
|
|
3346
|
-
if (u !== (tmp = at.k)) {
|
|
3347
|
-
add += JSON.stringify(tmp) + ":";
|
|
3348
|
-
}
|
|
3349
|
-
switch (typeof data2) {
|
|
3350
|
-
case "boolean":
|
|
3351
|
-
add += "" + data2;
|
|
3352
|
-
break;
|
|
3353
|
-
case "string":
|
|
3354
|
-
add += JSON.stringify(data2);
|
|
3355
|
-
break;
|
|
3356
|
-
case "number":
|
|
3357
|
-
add += isNaN(data2) ? "null" : data2;
|
|
3358
|
-
break;
|
|
3359
|
-
case "object":
|
|
3360
|
-
if (!data2) {
|
|
3361
|
-
add += "null";
|
|
3362
|
-
break;
|
|
3363
|
-
}
|
|
3364
|
-
if (data2 instanceof Array) {
|
|
3365
|
-
add += "[";
|
|
3366
|
-
at = { i: -1, as: data2, up: at, j: 0 };
|
|
3367
|
-
at.l = data2.length;
|
|
3368
|
-
ctx.up.push(ctx.at = at);
|
|
3369
|
-
break;
|
|
3370
|
-
}
|
|
3371
|
-
if ("function" != typeof (data2 || "").toJSON) {
|
|
3372
|
-
add += "{";
|
|
3373
|
-
at = { i: -1, ok: Object.keys(data2).sort(), as: data2, up: at, j: 0 };
|
|
3374
|
-
at.l = at.ok.length;
|
|
3375
|
-
ctx.up.push(ctx.at = at);
|
|
3376
|
-
break;
|
|
3377
|
-
}
|
|
3378
|
-
if (tmp = data2.toJSON()) {
|
|
3379
|
-
add += tmp;
|
|
3380
|
-
break;
|
|
3381
|
-
}
|
|
3382
|
-
// let this & below pass into default case...
|
|
3383
|
-
case "function":
|
|
3384
|
-
if (at.as instanceof Array) {
|
|
3385
|
-
add += "null";
|
|
3386
|
-
break;
|
|
3387
|
-
}
|
|
3388
|
-
default:
|
|
3389
|
-
add = "";
|
|
3390
|
-
at.j++;
|
|
3391
|
-
}
|
|
3392
|
-
ctx.text += add;
|
|
3393
|
-
while (1 + at.i >= at.l) {
|
|
3394
|
-
ctx.text += at.ok ? "}" : "]";
|
|
3395
|
-
at = ctx.at = at.up;
|
|
3396
|
-
}
|
|
3397
|
-
if (++at.i < at.l) {
|
|
3398
|
-
if (tmp = at.ok) {
|
|
3399
|
-
at.d = at.as[at.k = tmp[at.i]];
|
|
3400
|
-
} else {
|
|
3401
|
-
at.d = at.as[at.i];
|
|
3402
|
-
}
|
|
3403
|
-
if (++j < 9) {
|
|
3404
|
-
return ify();
|
|
3405
|
-
} else {
|
|
3406
|
-
j = 0;
|
|
3407
|
-
}
|
|
3408
|
-
sI(ify);
|
|
3409
|
-
return;
|
|
3410
|
-
}
|
|
3411
|
-
ctx.done(u, ctx.text);
|
|
3412
|
-
}
|
|
3413
|
-
};
|
|
3414
|
-
if (typeof window != "" + u) {
|
|
3415
|
-
window.YSON = yson;
|
|
3416
|
-
}
|
|
3417
|
-
try {
|
|
3418
|
-
if (typeof module != "" + u) {
|
|
3419
|
-
module.exports = yson;
|
|
3420
|
-
}
|
|
3421
|
-
} catch (e) {
|
|
3422
|
-
}
|
|
3423
|
-
if (typeof JSON != "" + u) {
|
|
3424
|
-
JSON.parseAsync = yson.parseAsync;
|
|
3425
|
-
JSON.stringifyAsync = yson.stringifyAsync;
|
|
3426
|
-
}
|
|
3427
|
-
})();
|
|
3428
|
-
}
|
|
3429
|
-
});
|
|
3430
|
-
|
|
3431
|
-
// node_modules/gun/lib/radix.js
|
|
3432
|
-
var require_radix = __commonJS({
|
|
3433
|
-
"node_modules/gun/lib/radix.js"(exports, module) {
|
|
3434
|
-
(function() {
|
|
3435
|
-
function Radix() {
|
|
3436
|
-
var radix = function(key, val, t) {
|
|
3437
|
-
radix.unit = 0;
|
|
3438
|
-
if (!t && u !== val) {
|
|
3439
|
-
radix.last = "" + key < radix.last ? radix.last : "" + key;
|
|
3440
|
-
delete (radix.$ || {})[_];
|
|
3441
|
-
}
|
|
3442
|
-
t = t || radix.$ || (radix.$ = {});
|
|
3443
|
-
if (!key && Object.keys(t).length) {
|
|
3444
|
-
return t;
|
|
3445
|
-
}
|
|
3446
|
-
key = "" + key;
|
|
3447
|
-
var i = 0, l = key.length - 1, k = key[i], at, tmp;
|
|
3448
|
-
while (!(at = t[k]) && i < l) {
|
|
3449
|
-
k += key[++i];
|
|
3450
|
-
}
|
|
3451
|
-
if (!at) {
|
|
3452
|
-
if (!each(t, function(r, s) {
|
|
3453
|
-
var ii = 0, kk = "";
|
|
3454
|
-
if ((s || "").length) {
|
|
3455
|
-
while (s[ii] == key[ii]) {
|
|
3456
|
-
kk += s[ii++];
|
|
3457
|
-
}
|
|
3458
|
-
}
|
|
3459
|
-
if (kk) {
|
|
3460
|
-
if (u === val) {
|
|
3461
|
-
if (ii <= l) {
|
|
3462
|
-
return;
|
|
3463
|
-
}
|
|
3464
|
-
(tmp || (tmp = {}))[s.slice(ii)] = r;
|
|
3465
|
-
return r;
|
|
3466
|
-
}
|
|
3467
|
-
var __ = {};
|
|
3468
|
-
__[s.slice(ii)] = r;
|
|
3469
|
-
ii = key.slice(ii);
|
|
3470
|
-
"" === ii ? __[""] = val : (__[ii] = {})[""] = val;
|
|
3471
|
-
t[kk] = __;
|
|
3472
|
-
if (Radix.debug && "undefined" === "" + kk) {
|
|
3473
|
-
console.log(0, kk);
|
|
3474
|
-
debugger;
|
|
3475
|
-
}
|
|
3476
|
-
delete t[s];
|
|
3477
|
-
return true;
|
|
3478
|
-
}
|
|
3479
|
-
})) {
|
|
3480
|
-
if (u === val) {
|
|
3481
|
-
return;
|
|
3482
|
-
}
|
|
3483
|
-
(t[k] || (t[k] = {}))[""] = val;
|
|
3484
|
-
if (Radix.debug && "undefined" === "" + k) {
|
|
3485
|
-
console.log(1, k);
|
|
3486
|
-
debugger;
|
|
3487
|
-
}
|
|
3488
|
-
}
|
|
3489
|
-
if (u === val) {
|
|
3490
|
-
return tmp;
|
|
3491
|
-
}
|
|
3492
|
-
} else if (i == l) {
|
|
3493
|
-
if (u === val) {
|
|
3494
|
-
return u === (tmp = at[""]) ? at : (radix.unit = 1) && tmp;
|
|
3495
|
-
}
|
|
3496
|
-
at[""] = val;
|
|
3497
|
-
} else {
|
|
3498
|
-
if (u !== val) {
|
|
3499
|
-
delete at[_];
|
|
3500
|
-
}
|
|
3501
|
-
return radix(key.slice(++i), val, at || (at = {}));
|
|
3502
|
-
}
|
|
3503
|
-
};
|
|
3504
|
-
return radix;
|
|
3505
|
-
}
|
|
3506
|
-
;
|
|
3507
|
-
Radix.map = function rap(radix, cb, opt, pre) {
|
|
3508
|
-
try {
|
|
3509
|
-
pre = pre || [];
|
|
3510
|
-
var t = "function" == typeof radix ? radix.$ || {} : radix;
|
|
3511
|
-
if (!t) {
|
|
3512
|
-
return;
|
|
3513
|
-
}
|
|
3514
|
-
if ("string" == typeof t) {
|
|
3515
|
-
if (Radix.debug) {
|
|
3516
|
-
throw ["BUG:", radix, cb, opt, pre];
|
|
3517
|
-
}
|
|
3518
|
-
return;
|
|
3519
|
-
}
|
|
3520
|
-
var keys = (t[_] || no).sort || (t[_] = function $() {
|
|
3521
|
-
$.sort = Object.keys(t).sort();
|
|
3522
|
-
return $;
|
|
3523
|
-
}()).sort, rev;
|
|
3524
|
-
opt = true === opt ? { branch: true } : opt || {};
|
|
3525
|
-
if (rev = opt.reverse) {
|
|
3526
|
-
keys = keys.slice(0).reverse();
|
|
3527
|
-
}
|
|
3528
|
-
var start = opt.start, end = opt.end, END = "\uFFFF";
|
|
3529
|
-
var i = 0, l = keys.length;
|
|
3530
|
-
for (; i < l; i++) {
|
|
3531
|
-
var key = keys[i], tree = t[key], tmp, p, pt;
|
|
3532
|
-
if (!tree || "" === key || _ === key || "undefined" === key) {
|
|
3533
|
-
continue;
|
|
3534
|
-
}
|
|
3535
|
-
p = pre.slice(0);
|
|
3536
|
-
p.push(key);
|
|
3537
|
-
pt = p.join("");
|
|
3538
|
-
if (u !== start && pt < (start || "").slice(0, pt.length)) {
|
|
3539
|
-
continue;
|
|
3540
|
-
}
|
|
3541
|
-
if (u !== end && (end || END) < pt) {
|
|
3542
|
-
continue;
|
|
3543
|
-
}
|
|
3544
|
-
if (rev) {
|
|
3545
|
-
tmp = rap(tree, cb, opt, p);
|
|
3546
|
-
if (u !== tmp) {
|
|
3547
|
-
return tmp;
|
|
3548
|
-
}
|
|
3549
|
-
}
|
|
3550
|
-
if (u !== (tmp = tree[""])) {
|
|
3551
|
-
var yes = 1;
|
|
3552
|
-
if (u !== start && pt < (start || "")) {
|
|
3553
|
-
yes = 0;
|
|
3554
|
-
}
|
|
3555
|
-
if (u !== end && pt > (end || END)) {
|
|
3556
|
-
yes = 0;
|
|
3557
|
-
}
|
|
3558
|
-
if (yes) {
|
|
3559
|
-
tmp = cb(tmp, pt, key, pre);
|
|
3560
|
-
if (u !== tmp) {
|
|
3561
|
-
return tmp;
|
|
3562
|
-
}
|
|
3563
|
-
}
|
|
3564
|
-
} else if (opt.branch) {
|
|
3565
|
-
tmp = cb(u, pt, key, pre);
|
|
3566
|
-
if (u !== tmp) {
|
|
3567
|
-
return tmp;
|
|
3568
|
-
}
|
|
3569
|
-
}
|
|
3570
|
-
pre = p;
|
|
3571
|
-
if (!rev) {
|
|
3572
|
-
tmp = rap(tree, cb, opt, pre);
|
|
3573
|
-
if (u !== tmp) {
|
|
3574
|
-
return tmp;
|
|
3575
|
-
}
|
|
3576
|
-
}
|
|
3577
|
-
pre.pop();
|
|
3578
|
-
}
|
|
3579
|
-
} catch (e) {
|
|
3580
|
-
console.error(e);
|
|
3581
|
-
}
|
|
3582
|
-
};
|
|
3583
|
-
if (typeof window !== "undefined") {
|
|
3584
|
-
window.Radix = Radix;
|
|
3585
|
-
} else {
|
|
3586
|
-
try {
|
|
3587
|
-
module.exports = Radix;
|
|
3588
|
-
} catch (e) {
|
|
3589
|
-
}
|
|
3590
|
-
}
|
|
3591
|
-
var each = Radix.object = function(o, f, r) {
|
|
3592
|
-
for (var k in o) {
|
|
3593
|
-
if (!o.hasOwnProperty(k)) {
|
|
3594
|
-
continue;
|
|
3595
|
-
}
|
|
3596
|
-
if ((r = f(o[k], k)) !== u) {
|
|
3597
|
-
return r;
|
|
3598
|
-
}
|
|
3599
|
-
}
|
|
3600
|
-
}, no = {}, u;
|
|
3601
|
-
var _ = String.fromCharCode(24);
|
|
3602
|
-
})();
|
|
3603
|
-
}
|
|
3604
|
-
});
|
|
3605
|
-
|
|
3606
|
-
// node_modules/gun/lib/radmigtmp.js
|
|
3607
|
-
var require_radmigtmp = __commonJS({
|
|
3608
|
-
"node_modules/gun/lib/radmigtmp.js"(exports, module) {
|
|
3609
|
-
module.exports = function(r) {
|
|
3610
|
-
var Radix = require_radix();
|
|
3611
|
-
r.find("a", function() {
|
|
3612
|
-
var l = [];
|
|
3613
|
-
Radix.map(r.list, function(v2, f2) {
|
|
3614
|
-
if (!(f2.indexOf("%1B") + 1)) {
|
|
3615
|
-
return;
|
|
3616
|
-
}
|
|
3617
|
-
if (!v2) {
|
|
3618
|
-
return;
|
|
3619
|
-
}
|
|
3620
|
-
l.push([f2, v2]);
|
|
3621
|
-
});
|
|
3622
|
-
if (l.length) {
|
|
3623
|
-
console.log("\n! ! ! WARNING ! ! !\nRAD v0.2020.x has detected OLD v0.2019.x data & automatically migrating. Automatic migration will be turned OFF in future versions! If you are just developing/testing, we recommend you reset your data. Please contact us if you have any concerns.\nThis message should only log once.");
|
|
3624
|
-
}
|
|
3625
|
-
var f, v;
|
|
3626
|
-
l.forEach(function(a) {
|
|
3627
|
-
f = a[0];
|
|
3628
|
-
v = a[1];
|
|
3629
|
-
r.list(decodeURIComponent(f), v);
|
|
3630
|
-
r.list(f, 0);
|
|
3631
|
-
});
|
|
3632
|
-
if (!f) {
|
|
3633
|
-
return;
|
|
3634
|
-
}
|
|
3635
|
-
r.find.bad(f);
|
|
3636
|
-
});
|
|
3637
|
-
};
|
|
3638
|
-
}
|
|
3639
|
-
});
|
|
3640
|
-
|
|
3641
|
-
// node_modules/gun/lib/radisk.js
|
|
3642
|
-
var require_radisk = __commonJS({
|
|
3643
|
-
"node_modules/gun/lib/radisk.js"(exports, module) {
|
|
3644
|
-
(function() {
|
|
3645
|
-
function Radisk(opt) {
|
|
3646
|
-
opt = opt || {};
|
|
3647
|
-
opt.log = opt.log || console.log;
|
|
3648
|
-
opt.file = String(opt.file || "radata");
|
|
3649
|
-
var has2 = (Radisk.has || (Radisk.has = {}))[opt.file];
|
|
3650
|
-
if (has2) {
|
|
3651
|
-
return has2;
|
|
3652
|
-
}
|
|
3653
|
-
opt.max = opt.max || (opt.memory ? opt.memory * 999 * 999 : 3e8) * 0.3;
|
|
3654
|
-
opt.until = opt.until || opt.wait || 250;
|
|
3655
|
-
opt.batch = opt.batch || 10 * 1e3;
|
|
3656
|
-
opt.chunk = opt.chunk || 1024 * 1024 * 1;
|
|
3657
|
-
opt.code = opt.code || {};
|
|
3658
|
-
opt.code.from = opt.code.from || "!";
|
|
3659
|
-
opt.jsonify = true;
|
|
3660
|
-
function ename(t) {
|
|
3661
|
-
return encodeURIComponent(t).replace(/\*/g, "%2A");
|
|
3662
|
-
}
|
|
3663
|
-
function atomic(v) {
|
|
3664
|
-
return u !== v && (!v || "object" != typeof v);
|
|
3665
|
-
}
|
|
3666
|
-
var timediate = "" + u === typeof setImmediate ? setTimeout : setImmediate;
|
|
3667
|
-
var puff = setTimeout.turn || timediate, u;
|
|
3668
|
-
var map = Radix.object;
|
|
3669
|
-
var ST = 0;
|
|
3670
|
-
if (!opt.store) {
|
|
3671
|
-
return opt.log("ERROR: Radisk needs `opt.store` interface with `{get: fn, put: fn (, list: fn)}`!");
|
|
3672
|
-
}
|
|
3673
|
-
if (!opt.store.put) {
|
|
3674
|
-
return opt.log("ERROR: Radisk needs `store.put` interface with `(file, data, cb)`!");
|
|
3675
|
-
}
|
|
3676
|
-
if (!opt.store.get) {
|
|
3677
|
-
return opt.log("ERROR: Radisk needs `store.get` interface with `(file, cb)`!");
|
|
3678
|
-
}
|
|
3679
|
-
if (!opt.store.list) {
|
|
3680
|
-
}
|
|
3681
|
-
if ("" + u != typeof __require) {
|
|
3682
|
-
require_yson();
|
|
3683
|
-
}
|
|
3684
|
-
var parse2 = JSON.parseAsync || function(t, cb, r2) {
|
|
3685
|
-
var u2;
|
|
3686
|
-
try {
|
|
3687
|
-
cb(u2, JSON.parse(t, r2));
|
|
3688
|
-
} catch (e) {
|
|
3689
|
-
cb(e);
|
|
3690
|
-
}
|
|
3691
|
-
};
|
|
3692
|
-
var json = JSON.stringifyAsync || function(v, cb, r2, s) {
|
|
3693
|
-
var u2;
|
|
3694
|
-
try {
|
|
3695
|
-
cb(u2, JSON.stringify(v, r2, s));
|
|
3696
|
-
} catch (e) {
|
|
3697
|
-
cb(e);
|
|
3698
|
-
}
|
|
3699
|
-
};
|
|
3700
|
-
var r = function(key, data, cb, tag, DBG) {
|
|
3701
|
-
if ("function" === typeof data) {
|
|
3702
|
-
var o = cb || {};
|
|
3703
|
-
cb = data;
|
|
3704
|
-
r.read(key, cb, o, DBG || tag);
|
|
3705
|
-
return;
|
|
3706
|
-
}
|
|
3707
|
-
r.save(key, data, cb, tag, DBG);
|
|
3708
|
-
};
|
|
3709
|
-
r.save = function(key, data, cb, tag, DBG) {
|
|
3710
|
-
var s = { key }, tags, f, d, q;
|
|
3711
|
-
s.find = function(file) {
|
|
3712
|
-
var tmp;
|
|
3713
|
-
s.file = file || (file = opt.code.from);
|
|
3714
|
-
DBG && (DBG = DBG[file] = DBG[file] || {});
|
|
3715
|
-
DBG && (DBG.sf = DBG.sf || +/* @__PURE__ */ new Date());
|
|
3716
|
-
if (tmp = r.disk[file]) {
|
|
3717
|
-
s.mix(u, tmp);
|
|
3718
|
-
return;
|
|
3719
|
-
}
|
|
3720
|
-
r.parse(file, s.mix, u, DBG);
|
|
3721
|
-
};
|
|
3722
|
-
s.mix = function(err, disk) {
|
|
3723
|
-
DBG && (DBG.sml = +/* @__PURE__ */ new Date());
|
|
3724
|
-
DBG && (DBG.sm = DBG.sm || +/* @__PURE__ */ new Date());
|
|
3725
|
-
if (s.err = err || s.err) {
|
|
3726
|
-
cb(err);
|
|
3727
|
-
return;
|
|
3728
|
-
}
|
|
3729
|
-
var file = s.file = (disk || "").file || s.file, tmp;
|
|
3730
|
-
if (!disk && file !== opt.code.from) {
|
|
3731
|
-
r.find.bad(file);
|
|
3732
|
-
r.save(key, data, cb, tag);
|
|
3733
|
-
return;
|
|
3734
|
-
}
|
|
3735
|
-
(disk = r.disk[file] || (r.disk[file] = disk || Radix())).file || (disk.file = file);
|
|
3736
|
-
if (opt.compare) {
|
|
3737
|
-
data = opt.compare(disk(key), data, key, file);
|
|
3738
|
-
if (u === data) {
|
|
3739
|
-
cb(err, -1);
|
|
3740
|
-
return;
|
|
3741
|
-
}
|
|
3742
|
-
}
|
|
3743
|
-
(s.disk = disk)(key, data);
|
|
3744
|
-
if (tag) {
|
|
3745
|
-
(tmp = (tmp = disk.tags || (disk.tags = {}))[tag] || (tmp[tag] = r.tags[tag] || (r.tags[tag] = {})))[file] || (tmp[file] = r.one[tag] || (r.one[tag] = cb));
|
|
3746
|
-
cb = null;
|
|
3747
|
-
}
|
|
3748
|
-
DBG && (DBG.st = DBG.st || +/* @__PURE__ */ new Date());
|
|
3749
|
-
if (disk.Q) {
|
|
3750
|
-
cb && disk.Q.push(cb);
|
|
3751
|
-
return;
|
|
3752
|
-
}
|
|
3753
|
-
disk.Q = cb ? [cb] : [];
|
|
3754
|
-
disk.to = setTimeout(s.write, opt.until);
|
|
3755
|
-
};
|
|
3756
|
-
s.write = function() {
|
|
3757
|
-
DBG && (DBG.sto = DBG.sto || +/* @__PURE__ */ new Date());
|
|
3758
|
-
var file = f = s.file, disk = d = s.disk;
|
|
3759
|
-
q = s.q = disk.Q;
|
|
3760
|
-
tags = s.tags = disk.tags;
|
|
3761
|
-
delete disk.Q;
|
|
3762
|
-
delete r.disk[file];
|
|
3763
|
-
delete disk.tags;
|
|
3764
|
-
r.write(file, disk, s.ack, u, DBG);
|
|
3765
|
-
};
|
|
3766
|
-
s.ack = function(err, ok) {
|
|
3767
|
-
DBG && (DBG.sa = DBG.sa || +/* @__PURE__ */ new Date());
|
|
3768
|
-
DBG && (DBG.sal = q.length);
|
|
3769
|
-
var ack, tmp;
|
|
3770
|
-
for (var id in r.tags) {
|
|
3771
|
-
if (!r.tags.hasOwnProperty(id)) {
|
|
3772
|
-
continue;
|
|
3773
|
-
}
|
|
3774
|
-
var tag2 = r.tags[id];
|
|
3775
|
-
if ((tmp = r.disk[f]) && (tmp = tmp.tags) && tmp[tag2]) {
|
|
3776
|
-
continue;
|
|
3777
|
-
}
|
|
3778
|
-
ack = tag2[f];
|
|
3779
|
-
delete tag2[f];
|
|
3780
|
-
var ne;
|
|
3781
|
-
for (var k in tag2) {
|
|
3782
|
-
if (tag2.hasOwnProperty(k)) {
|
|
3783
|
-
ne = true;
|
|
3784
|
-
break;
|
|
3785
|
-
}
|
|
3786
|
-
}
|
|
3787
|
-
if (ne) {
|
|
3788
|
-
continue;
|
|
3789
|
-
}
|
|
3790
|
-
delete r.tags[tag2];
|
|
3791
|
-
ack && ack(err, ok);
|
|
3792
|
-
}
|
|
3793
|
-
!q && (q = "");
|
|
3794
|
-
var l = q.length, i = 0;
|
|
3795
|
-
var S = +/* @__PURE__ */ new Date();
|
|
3796
|
-
for (; i < l; i++) {
|
|
3797
|
-
(ack = q[i]) && ack(err, ok);
|
|
3798
|
-
}
|
|
3799
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "rad acks", ename(s.file));
|
|
3800
|
-
console.STAT && console.STAT(S, q.length, "rad acks #", ename(s.file));
|
|
3801
|
-
};
|
|
3802
|
-
cb || (cb = function(err, ok) {
|
|
3803
|
-
if (!err) {
|
|
3804
|
-
return;
|
|
3805
|
-
}
|
|
3806
|
-
});
|
|
3807
|
-
r.find(key, s.find);
|
|
3808
|
-
};
|
|
3809
|
-
r.disk = {};
|
|
3810
|
-
r.one = {};
|
|
3811
|
-
r.tags = {};
|
|
3812
|
-
var RWC = 0;
|
|
3813
|
-
r.write = function(file, rad, cb, o, DBG) {
|
|
3814
|
-
if (!rad) {
|
|
3815
|
-
cb("No radix!");
|
|
3816
|
-
return;
|
|
3817
|
-
}
|
|
3818
|
-
o = "object" == typeof o ? o : { force: o };
|
|
3819
|
-
var f = function Fractal() {
|
|
3820
|
-
}, a, b;
|
|
3821
|
-
f.text = "";
|
|
3822
|
-
f.file = file = rad.file || (rad.file = file);
|
|
3823
|
-
if (!file) {
|
|
3824
|
-
cb("What file?");
|
|
3825
|
-
return;
|
|
3826
|
-
}
|
|
3827
|
-
f.write = function() {
|
|
3828
|
-
var text = rad.raw = f.text;
|
|
3829
|
-
r.disk[file = rad.file || f.file || file] = rad;
|
|
3830
|
-
var S = +/* @__PURE__ */ new Date();
|
|
3831
|
-
DBG && (DBG.wd = S);
|
|
3832
|
-
r.find.add(file, function add(err) {
|
|
3833
|
-
DBG && (DBG.wa = +/* @__PURE__ */ new Date());
|
|
3834
|
-
if (err) {
|
|
3835
|
-
cb(err);
|
|
3836
|
-
return;
|
|
3837
|
-
}
|
|
3838
|
-
opt.store.put(ename(file), text, function safe(err2, ok) {
|
|
3839
|
-
DBG && (DBG.wp = +/* @__PURE__ */ new Date());
|
|
3840
|
-
console.STAT && console.STAT(S, ST = +/* @__PURE__ */ new Date() - S, "wrote disk", JSON.stringify(file), ++RWC, "total all writes.");
|
|
3841
|
-
cb(err2, ok || 1);
|
|
3842
|
-
if (!rad.Q) {
|
|
3843
|
-
delete r.disk[file];
|
|
3844
|
-
}
|
|
3845
|
-
});
|
|
3846
|
-
});
|
|
3847
|
-
};
|
|
3848
|
-
f.split = function() {
|
|
3849
|
-
var S = +/* @__PURE__ */ new Date();
|
|
3850
|
-
DBG && (DBG.wf = S);
|
|
3851
|
-
f.text = "";
|
|
3852
|
-
if (!f.count) {
|
|
3853
|
-
f.count = 0;
|
|
3854
|
-
Radix.map(rad, function count() {
|
|
3855
|
-
f.count++;
|
|
3856
|
-
});
|
|
3857
|
-
}
|
|
3858
|
-
DBG && (DBG.wfc = f.count);
|
|
3859
|
-
f.limit = Math.ceil(f.count / 2);
|
|
3860
|
-
var SC = f.count;
|
|
3861
|
-
f.count = 0;
|
|
3862
|
-
DBG && (DBG.wf1 = +/* @__PURE__ */ new Date());
|
|
3863
|
-
f.sub = Radix();
|
|
3864
|
-
Radix.map(rad, f.slice, { reverse: 1 });
|
|
3865
|
-
DBG && (DBG.wf2 = +/* @__PURE__ */ new Date());
|
|
3866
|
-
r.write(f.end, f.sub, f.both, o);
|
|
3867
|
-
DBG && (DBG.wf3 = +/* @__PURE__ */ new Date());
|
|
3868
|
-
f.hub = Radix();
|
|
3869
|
-
Radix.map(rad, f.stop);
|
|
3870
|
-
DBG && (DBG.wf4 = +/* @__PURE__ */ new Date());
|
|
3871
|
-
r.write(rad.file, f.hub, f.both, o);
|
|
3872
|
-
DBG && (DBG.wf5 = +/* @__PURE__ */ new Date());
|
|
3873
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "rad split", ename(rad.file), SC);
|
|
3874
|
-
return true;
|
|
3875
|
-
};
|
|
3876
|
-
f.slice = function(val, key) {
|
|
3877
|
-
f.sub(f.end = key, val);
|
|
3878
|
-
if (f.limit <= ++f.count) {
|
|
3879
|
-
return true;
|
|
3880
|
-
}
|
|
3881
|
-
};
|
|
3882
|
-
f.stop = function(val, key) {
|
|
3883
|
-
if (key >= f.end) {
|
|
3884
|
-
return true;
|
|
3885
|
-
}
|
|
3886
|
-
f.hub(key, val);
|
|
3887
|
-
};
|
|
3888
|
-
f.both = function(err, ok) {
|
|
3889
|
-
DBG && (DBG.wfd = +/* @__PURE__ */ new Date());
|
|
3890
|
-
if (b) {
|
|
3891
|
-
cb(err || b);
|
|
3892
|
-
return;
|
|
3893
|
-
}
|
|
3894
|
-
if (a) {
|
|
3895
|
-
cb(err, ok);
|
|
3896
|
-
return;
|
|
3897
|
-
}
|
|
3898
|
-
a = true;
|
|
3899
|
-
b = err;
|
|
3900
|
-
};
|
|
3901
|
-
f.each = function(val, key, k, pre) {
|
|
3902
|
-
if (u !== val) {
|
|
3903
|
-
f.count++;
|
|
3904
|
-
}
|
|
3905
|
-
if (opt.max <= (val || "").length) {
|
|
3906
|
-
return cb("Data too big!"), true;
|
|
3907
|
-
}
|
|
3908
|
-
var enc = Radisk.encode(pre.length) + "#" + Radisk.encode(k) + (u === val ? "" : ":" + Radisk.encode(val)) + "\n";
|
|
3909
|
-
if (opt.chunk < f.text.length + enc.length && 1 < f.count && !o.force) {
|
|
3910
|
-
return f.split();
|
|
3911
|
-
}
|
|
3912
|
-
f.text += enc;
|
|
3913
|
-
};
|
|
3914
|
-
if (opt.jsonify) {
|
|
3915
|
-
r.write.jsonify(f, rad, cb, o, DBG);
|
|
3916
|
-
return;
|
|
3917
|
-
}
|
|
3918
|
-
if (!Radix.map(rad, f.each, true)) {
|
|
3919
|
-
f.write();
|
|
3920
|
-
}
|
|
3921
|
-
};
|
|
3922
|
-
r.write.jsonify = function(f, rad, cb, o, DBG) {
|
|
3923
|
-
var raw;
|
|
3924
|
-
var S = +/* @__PURE__ */ new Date();
|
|
3925
|
-
DBG && (DBG.w = S);
|
|
3926
|
-
try {
|
|
3927
|
-
raw = JSON.stringify(rad.$);
|
|
3928
|
-
} catch (e) {
|
|
3929
|
-
cb("Cannot radisk!");
|
|
3930
|
-
return;
|
|
3931
|
-
}
|
|
3932
|
-
DBG && (DBG.ws = +/* @__PURE__ */ new Date());
|
|
3933
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "rad stringified JSON");
|
|
3934
|
-
if (opt.chunk < raw.length && !o.force) {
|
|
3935
|
-
var c = 0;
|
|
3936
|
-
Radix.map(rad, function() {
|
|
3937
|
-
if (c++) {
|
|
3938
|
-
return true;
|
|
3939
|
-
}
|
|
3940
|
-
});
|
|
3941
|
-
if (c > 1) {
|
|
3942
|
-
return f.split();
|
|
3943
|
-
}
|
|
3944
|
-
}
|
|
3945
|
-
f.text = raw;
|
|
3946
|
-
f.write();
|
|
3947
|
-
};
|
|
3948
|
-
r.range = function(tree, o) {
|
|
3949
|
-
if (!tree || !o) {
|
|
3950
|
-
return;
|
|
3951
|
-
}
|
|
3952
|
-
if (u === o.start && u === o.end) {
|
|
3953
|
-
return tree;
|
|
3954
|
-
}
|
|
3955
|
-
if (atomic(tree)) {
|
|
3956
|
-
return tree;
|
|
3957
|
-
}
|
|
3958
|
-
var sub = Radix();
|
|
3959
|
-
Radix.map(tree, function(v, k) {
|
|
3960
|
-
sub(k, v);
|
|
3961
|
-
}, o);
|
|
3962
|
-
return sub("");
|
|
3963
|
-
};
|
|
3964
|
-
(function() {
|
|
3965
|
-
r.read = function(key, cb, o, DBG) {
|
|
3966
|
-
o = o || {};
|
|
3967
|
-
var g = { key };
|
|
3968
|
-
g.find = function(file) {
|
|
3969
|
-
var tmp;
|
|
3970
|
-
g.file = file || (file = opt.code.from);
|
|
3971
|
-
DBG && (DBG = DBG[file] = DBG[file] || {});
|
|
3972
|
-
DBG && (DBG.rf = DBG.rf || +/* @__PURE__ */ new Date());
|
|
3973
|
-
if (tmp = r.disk[g.file = file]) {
|
|
3974
|
-
g.check(u, tmp);
|
|
3975
|
-
return;
|
|
3976
|
-
}
|
|
3977
|
-
r.parse(file, g.check, u, DBG);
|
|
3978
|
-
};
|
|
3979
|
-
g.get = function(err, disk, info) {
|
|
3980
|
-
DBG && (DBG.rgl = +/* @__PURE__ */ new Date());
|
|
3981
|
-
DBG && (DBG.rg = DBG.rg || +/* @__PURE__ */ new Date());
|
|
3982
|
-
if (g.err = err || g.err) {
|
|
3983
|
-
cb(err);
|
|
3984
|
-
return;
|
|
3985
|
-
}
|
|
3986
|
-
var file = g.file = (disk || "").file || g.file;
|
|
3987
|
-
if (!disk && file !== opt.code.from) {
|
|
3988
|
-
r.find.bad(file);
|
|
3989
|
-
r.read(key, cb, o);
|
|
3990
|
-
return;
|
|
3991
|
-
}
|
|
3992
|
-
disk = r.disk[file] || (r.disk[file] = disk);
|
|
3993
|
-
if (!disk) {
|
|
3994
|
-
cb(file === opt.code.from ? u : "No file!");
|
|
3995
|
-
return;
|
|
3996
|
-
}
|
|
3997
|
-
disk.file || (disk.file = file);
|
|
3998
|
-
var data = r.range(disk(key), o);
|
|
3999
|
-
DBG && (DBG.rr = +/* @__PURE__ */ new Date());
|
|
4000
|
-
o.unit = disk.unit;
|
|
4001
|
-
o.chunks = (o.chunks || 0) + 1;
|
|
4002
|
-
o.parsed = (o.parsed || 0) + ((info || "").parsed || o.chunks * opt.chunk);
|
|
4003
|
-
o.more = 1;
|
|
4004
|
-
o.next = u;
|
|
4005
|
-
Radix.map(r.list, function next2(v, f) {
|
|
4006
|
-
if (!v || file === f) {
|
|
4007
|
-
return;
|
|
4008
|
-
}
|
|
4009
|
-
o.next = f;
|
|
4010
|
-
return 1;
|
|
4011
|
-
}, o.reverse ? { reverse: 1, end: file } : { start: file });
|
|
4012
|
-
DBG && (DBG.rl = +/* @__PURE__ */ new Date());
|
|
4013
|
-
if (!o.next) {
|
|
4014
|
-
o.more = 0;
|
|
4015
|
-
}
|
|
4016
|
-
if (o.next) {
|
|
4017
|
-
if (!o.reverse && (key < o.next && 0 != o.next.indexOf(key) || u !== o.end && (o.end || "\uFFFF") < o.next)) {
|
|
4018
|
-
o.more = 0;
|
|
4019
|
-
}
|
|
4020
|
-
if (o.reverse && (key > o.next && 0 != key.indexOf(o.next) || u !== o.start && (o.start || "") > o.next && file <= o.start)) {
|
|
4021
|
-
o.more = 0;
|
|
4022
|
-
}
|
|
4023
|
-
}
|
|
4024
|
-
if (!o.more) {
|
|
4025
|
-
cb(g.err, data, o);
|
|
4026
|
-
return;
|
|
4027
|
-
}
|
|
4028
|
-
if (data) {
|
|
4029
|
-
cb(g.err, data, o);
|
|
4030
|
-
}
|
|
4031
|
-
if (o.parsed >= o.limit) {
|
|
4032
|
-
return;
|
|
4033
|
-
}
|
|
4034
|
-
var S = +/* @__PURE__ */ new Date();
|
|
4035
|
-
DBG && (DBG.rm = S);
|
|
4036
|
-
var next = o.next;
|
|
4037
|
-
timediate(function() {
|
|
4038
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "rad more");
|
|
4039
|
-
r.parse(next, g.check);
|
|
4040
|
-
}, 0);
|
|
4041
|
-
};
|
|
4042
|
-
g.check = function(err, disk, info) {
|
|
4043
|
-
g.get(err, disk, info);
|
|
4044
|
-
if (!disk || disk.check) {
|
|
4045
|
-
return;
|
|
4046
|
-
}
|
|
4047
|
-
disk.check = 1;
|
|
4048
|
-
var S = +/* @__PURE__ */ new Date();
|
|
4049
|
-
(info || (info = {})).file || (info.file = g.file);
|
|
4050
|
-
Radix.map(disk, function(val, key2) {
|
|
4051
|
-
r.find(key2, function(file) {
|
|
4052
|
-
if ((file || (file = opt.code.from)) === info.file) {
|
|
4053
|
-
return;
|
|
4054
|
-
}
|
|
4055
|
-
var id = ("" + Math.random()).slice(-3);
|
|
4056
|
-
puff(function() {
|
|
4057
|
-
r.save(key2, val, function ack(err2, ok) {
|
|
4058
|
-
if (err2) {
|
|
4059
|
-
r.save(key2, val, ack);
|
|
4060
|
-
return;
|
|
4061
|
-
}
|
|
4062
|
-
console.STAT && console.STAT("MISLOCATED DATA CORRECTED", id, ename(key2), ename(info.file), ename(file));
|
|
4063
|
-
});
|
|
4064
|
-
}, 0);
|
|
4065
|
-
});
|
|
4066
|
-
});
|
|
4067
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "rad check");
|
|
4068
|
-
};
|
|
4069
|
-
r.find(key || (o.reverse ? o.end || "" : o.start || ""), g.find);
|
|
4070
|
-
};
|
|
4071
|
-
function rev(a, b) {
|
|
4072
|
-
return b;
|
|
4073
|
-
}
|
|
4074
|
-
var revo = { reverse: true };
|
|
4075
|
-
})();
|
|
4076
|
-
;
|
|
4077
|
-
(function() {
|
|
4078
|
-
var RPC = 0;
|
|
4079
|
-
var Q = {}, s = String.fromCharCode(31);
|
|
4080
|
-
r.parse = function(file, cb, raw, DBG) {
|
|
4081
|
-
var q;
|
|
4082
|
-
if (!file) {
|
|
4083
|
-
return cb();
|
|
4084
|
-
}
|
|
4085
|
-
if (q = Q[file]) {
|
|
4086
|
-
q.push(cb);
|
|
4087
|
-
return;
|
|
4088
|
-
}
|
|
4089
|
-
q = Q[file] = [cb];
|
|
4090
|
-
var p = function Parse() {
|
|
4091
|
-
}, info = { file };
|
|
4092
|
-
(p.disk = Radix()).file = file;
|
|
4093
|
-
p.read = function(err, data) {
|
|
4094
|
-
var tmp;
|
|
4095
|
-
DBG && (DBG.rpg = +/* @__PURE__ */ new Date());
|
|
4096
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "read disk", JSON.stringify(file), ++RPC, "total all parses.");
|
|
4097
|
-
if ((p.err = err) || (p.not = !data)) {
|
|
4098
|
-
delete Q[file];
|
|
4099
|
-
p.map(q, p.ack);
|
|
4100
|
-
return;
|
|
4101
|
-
}
|
|
4102
|
-
if ("string" !== typeof data) {
|
|
4103
|
-
try {
|
|
4104
|
-
if (opt.max <= data.length) {
|
|
4105
|
-
p.err = "Chunk too big!";
|
|
4106
|
-
} else {
|
|
4107
|
-
data = data.toString();
|
|
4108
|
-
}
|
|
4109
|
-
} catch (e) {
|
|
4110
|
-
p.err = e;
|
|
4111
|
-
}
|
|
4112
|
-
if (p.err) {
|
|
4113
|
-
delete Q[file];
|
|
4114
|
-
p.map(q, p.ack);
|
|
4115
|
-
return;
|
|
4116
|
-
}
|
|
4117
|
-
}
|
|
4118
|
-
info.parsed = data.length;
|
|
4119
|
-
DBG && (DBG.rpl = info.parsed);
|
|
4120
|
-
DBG && (DBG.rpa = q.length);
|
|
4121
|
-
S = +/* @__PURE__ */ new Date();
|
|
4122
|
-
if (!(opt.jsonify || "{" === data[0])) {
|
|
4123
|
-
p.radec(err, data);
|
|
4124
|
-
return;
|
|
4125
|
-
}
|
|
4126
|
-
parse2(data, function(err2, tree) {
|
|
4127
|
-
if (!err2) {
|
|
4128
|
-
delete Q[file];
|
|
4129
|
-
p.disk.$ = tree;
|
|
4130
|
-
console.STAT && (ST = +/* @__PURE__ */ new Date() - S) > 9 && console.STAT(S, ST, "rad parsed JSON");
|
|
4131
|
-
DBG && (DBG.rpd = +/* @__PURE__ */ new Date());
|
|
4132
|
-
p.map(q, p.ack);
|
|
4133
|
-
return;
|
|
4134
|
-
}
|
|
4135
|
-
if ("{" === data[0]) {
|
|
4136
|
-
delete Q[file];
|
|
4137
|
-
p.err = tmp || "JSON error!";
|
|
4138
|
-
p.map(q, p.ack);
|
|
4139
|
-
return;
|
|
4140
|
-
}
|
|
4141
|
-
p.radec(err2, data);
|
|
4142
|
-
});
|
|
4143
|
-
};
|
|
4144
|
-
p.map = function() {
|
|
4145
|
-
if (!q || !q.length) {
|
|
4146
|
-
return;
|
|
4147
|
-
}
|
|
4148
|
-
var S2 = +/* @__PURE__ */ new Date();
|
|
4149
|
-
var err = p.err, data = p.not ? u : p.disk;
|
|
4150
|
-
var i = 0, ack;
|
|
4151
|
-
while (i < 9 && (ack = q[i++])) {
|
|
4152
|
-
ack(err, data, info);
|
|
4153
|
-
}
|
|
4154
|
-
console.STAT && console.STAT(S2, +/* @__PURE__ */ new Date() - S2, "rad packs", ename(file));
|
|
4155
|
-
console.STAT && console.STAT(S2, i, "rad packs #", ename(file));
|
|
4156
|
-
if (!(q = q.slice(i)).length) {
|
|
4157
|
-
return;
|
|
4158
|
-
}
|
|
4159
|
-
puff(p.map, 0);
|
|
4160
|
-
};
|
|
4161
|
-
p.ack = function(cb2) {
|
|
4162
|
-
if (!cb2) {
|
|
4163
|
-
return;
|
|
4164
|
-
}
|
|
4165
|
-
if (p.err || p.not) {
|
|
4166
|
-
cb2(p.err, u, info);
|
|
4167
|
-
return;
|
|
4168
|
-
}
|
|
4169
|
-
cb2(u, p.disk, info);
|
|
4170
|
-
};
|
|
4171
|
-
p.radec = function(err, data) {
|
|
4172
|
-
delete Q[file];
|
|
4173
|
-
S = +/* @__PURE__ */ new Date();
|
|
4174
|
-
var tmp = p.split(data), pre = [], i, k, v;
|
|
4175
|
-
if (!tmp || 0 !== tmp[1]) {
|
|
4176
|
-
p.err = "File '" + file + "' does not have root radix! ";
|
|
4177
|
-
p.map(q, p.ack);
|
|
4178
|
-
return;
|
|
4179
|
-
}
|
|
4180
|
-
while (tmp) {
|
|
4181
|
-
k = v = u;
|
|
4182
|
-
i = tmp[1];
|
|
4183
|
-
tmp = p.split(tmp[2]) || "";
|
|
4184
|
-
if ("#" == tmp[0]) {
|
|
4185
|
-
k = tmp[1];
|
|
4186
|
-
pre = pre.slice(0, i);
|
|
4187
|
-
if (i <= pre.length) {
|
|
4188
|
-
pre.push(k);
|
|
4189
|
-
}
|
|
4190
|
-
}
|
|
4191
|
-
tmp = p.split(tmp[2]) || "";
|
|
4192
|
-
if ("\n" == tmp[0]) {
|
|
4193
|
-
continue;
|
|
4194
|
-
}
|
|
4195
|
-
if ("=" == tmp[0] || ":" == tmp[0]) {
|
|
4196
|
-
v = tmp[1];
|
|
4197
|
-
}
|
|
4198
|
-
if (u !== k && u !== v) {
|
|
4199
|
-
p.disk(pre.join(""), v);
|
|
4200
|
-
}
|
|
4201
|
-
tmp = p.split(tmp[2]);
|
|
4202
|
-
}
|
|
4203
|
-
console.STAT && console.STAT(S, +/* @__PURE__ */ new Date() - S, "parsed RAD");
|
|
4204
|
-
p.map(q, p.ack);
|
|
4205
|
-
};
|
|
4206
|
-
p.split = function(t) {
|
|
4207
|
-
if (!t) {
|
|
4208
|
-
return;
|
|
4209
|
-
}
|
|
4210
|
-
var l = [], o = {}, i = -1, a = "", b, c;
|
|
4211
|
-
i = t.indexOf(s);
|
|
4212
|
-
if (!t[i]) {
|
|
4213
|
-
return;
|
|
4214
|
-
}
|
|
4215
|
-
a = t.slice(0, i);
|
|
4216
|
-
l[0] = a;
|
|
4217
|
-
l[1] = b = Radisk.decode(t.slice(i), o);
|
|
4218
|
-
l[2] = t.slice(i + o.i);
|
|
4219
|
-
return l;
|
|
4220
|
-
};
|
|
4221
|
-
if (r.disk) {
|
|
4222
|
-
raw || (raw = (r.disk[file] || "").raw);
|
|
4223
|
-
}
|
|
4224
|
-
var S = +/* @__PURE__ */ new Date(), SM, SL;
|
|
4225
|
-
DBG && (DBG.rp = S);
|
|
4226
|
-
if (raw) {
|
|
4227
|
-
return puff(function() {
|
|
4228
|
-
p.read(u, raw);
|
|
4229
|
-
}, 0);
|
|
4230
|
-
}
|
|
4231
|
-
opt.store.get(ename(file), p.read);
|
|
4232
|
-
};
|
|
4233
|
-
})();
|
|
4234
|
-
;
|
|
4235
|
-
(function() {
|
|
4236
|
-
var dir, f = String.fromCharCode(28), Q;
|
|
4237
|
-
r.find = function(key, cb) {
|
|
4238
|
-
if (!dir) {
|
|
4239
|
-
if (Q) {
|
|
4240
|
-
Q.push([key, cb]);
|
|
4241
|
-
return;
|
|
4242
|
-
}
|
|
4243
|
-
Q = [[key, cb]];
|
|
4244
|
-
r.parse(f, init2);
|
|
4245
|
-
return;
|
|
4246
|
-
}
|
|
4247
|
-
Radix.map(r.list = dir, function(val, key2) {
|
|
4248
|
-
if (!val) {
|
|
4249
|
-
return;
|
|
4250
|
-
}
|
|
4251
|
-
return cb(key2) || true;
|
|
4252
|
-
}, { reverse: 1, end: key }) || cb(opt.code.from);
|
|
4253
|
-
};
|
|
4254
|
-
r.find.add = function(file, cb) {
|
|
4255
|
-
var has3 = dir(file);
|
|
4256
|
-
if (has3 || file === f) {
|
|
4257
|
-
cb(u, 1);
|
|
4258
|
-
return;
|
|
4259
|
-
}
|
|
4260
|
-
dir(file, 1);
|
|
4261
|
-
cb.found = (cb.found || 0) + 1;
|
|
4262
|
-
r.write(f, dir, function(err, ok) {
|
|
4263
|
-
if (err) {
|
|
4264
|
-
cb(err);
|
|
4265
|
-
return;
|
|
4266
|
-
}
|
|
4267
|
-
cb.found = (cb.found || 0) - 1;
|
|
4268
|
-
if (0 !== cb.found) {
|
|
4269
|
-
return;
|
|
4270
|
-
}
|
|
4271
|
-
cb(u, 1);
|
|
4272
|
-
}, true);
|
|
4273
|
-
};
|
|
4274
|
-
r.find.bad = function(file, cb) {
|
|
4275
|
-
dir(file, 0);
|
|
4276
|
-
r.write(f, dir, cb || noop);
|
|
4277
|
-
};
|
|
4278
|
-
function init2(err, disk) {
|
|
4279
|
-
if (err) {
|
|
4280
|
-
opt.log("list", err);
|
|
4281
|
-
setTimeout(function() {
|
|
4282
|
-
r.parse(f, init2);
|
|
4283
|
-
}, 1e3);
|
|
4284
|
-
return;
|
|
4285
|
-
}
|
|
4286
|
-
if (disk) {
|
|
4287
|
-
drain(disk);
|
|
4288
|
-
return;
|
|
4289
|
-
}
|
|
4290
|
-
dir = dir || disk || Radix();
|
|
4291
|
-
if (!opt.store.list) {
|
|
4292
|
-
drain(dir);
|
|
4293
|
-
return;
|
|
4294
|
-
}
|
|
4295
|
-
opt.store.list(function(file) {
|
|
4296
|
-
if (!file) {
|
|
4297
|
-
drain(dir);
|
|
4298
|
-
return;
|
|
4299
|
-
}
|
|
4300
|
-
r.find.add(file, noop);
|
|
4301
|
-
});
|
|
4302
|
-
}
|
|
4303
|
-
function drain(rad, tmp) {
|
|
4304
|
-
dir = dir || rad;
|
|
4305
|
-
dir.file = f;
|
|
4306
|
-
tmp = Q;
|
|
4307
|
-
Q = null;
|
|
4308
|
-
map(tmp, function(arg) {
|
|
4309
|
-
r.find(arg[0], arg[1]);
|
|
4310
|
-
});
|
|
4311
|
-
}
|
|
4312
|
-
})();
|
|
4313
|
-
try {
|
|
4314
|
-
!Gun3.window && require_radmigtmp()(r);
|
|
4315
|
-
} catch (e) {
|
|
4316
|
-
}
|
|
4317
|
-
var noop = function() {
|
|
4318
|
-
}, RAD, u;
|
|
4319
|
-
Radisk.has[opt.file] = r;
|
|
4320
|
-
return r;
|
|
4321
|
-
}
|
|
4322
|
-
;
|
|
4323
|
-
(function() {
|
|
4324
|
-
var _ = String.fromCharCode(31), u;
|
|
4325
|
-
Radisk.encode = function(d, o, s) {
|
|
4326
|
-
s = s || _;
|
|
4327
|
-
var t = s, tmp;
|
|
4328
|
-
if (typeof d == "string") {
|
|
4329
|
-
var i = d.indexOf(s);
|
|
4330
|
-
while (i != -1) {
|
|
4331
|
-
t += s;
|
|
4332
|
-
i = d.indexOf(s, i + 1);
|
|
4333
|
-
}
|
|
4334
|
-
return t + '"' + d + s;
|
|
4335
|
-
} else if (d && d["#"] && 1 == Object.keys(d).length) {
|
|
4336
|
-
return t + "#" + tmp + t;
|
|
4337
|
-
} else if ("number" == typeof d) {
|
|
4338
|
-
return t + "+" + (d || 0) + t;
|
|
4339
|
-
} else if (null === d) {
|
|
4340
|
-
return t + " " + t;
|
|
4341
|
-
} else if (true === d) {
|
|
4342
|
-
return t + "+" + t;
|
|
4343
|
-
} else if (false === d) {
|
|
4344
|
-
return t + "-" + t;
|
|
4345
|
-
}
|
|
4346
|
-
};
|
|
4347
|
-
Radisk.decode = function(t, o, s) {
|
|
4348
|
-
s = s || _;
|
|
4349
|
-
var d = "", i = -1, n = 0, c, p;
|
|
4350
|
-
if (s !== t[0]) {
|
|
4351
|
-
return;
|
|
4352
|
-
}
|
|
4353
|
-
while (s === t[++i]) {
|
|
4354
|
-
++n;
|
|
4355
|
-
}
|
|
4356
|
-
p = t[c = n] || true;
|
|
4357
|
-
while (--n >= 0) {
|
|
4358
|
-
i = t.indexOf(s, i + 1);
|
|
4359
|
-
}
|
|
4360
|
-
if (i == -1) {
|
|
4361
|
-
i = t.length;
|
|
4362
|
-
}
|
|
4363
|
-
d = t.slice(c + 1, i);
|
|
4364
|
-
if (o) {
|
|
4365
|
-
o.i = i + 1;
|
|
4366
|
-
}
|
|
4367
|
-
if ('"' === p) {
|
|
4368
|
-
return d;
|
|
4369
|
-
} else if ("#" === p) {
|
|
4370
|
-
return { "#": d };
|
|
4371
|
-
} else if ("+" === p) {
|
|
4372
|
-
if (0 === d.length) {
|
|
4373
|
-
return true;
|
|
4374
|
-
}
|
|
4375
|
-
return parseFloat(d);
|
|
4376
|
-
} else if (" " === p) {
|
|
4377
|
-
return null;
|
|
4378
|
-
} else if ("-" === p) {
|
|
4379
|
-
return false;
|
|
4380
|
-
}
|
|
4381
|
-
};
|
|
4382
|
-
})();
|
|
4383
|
-
if (typeof window !== "undefined") {
|
|
4384
|
-
var Gun3 = window.Gun;
|
|
4385
|
-
var Radix = window.Radix;
|
|
4386
|
-
window.Radisk = Radisk;
|
|
4387
|
-
} else {
|
|
4388
|
-
var Gun3 = require_gun();
|
|
4389
|
-
var Radix = require_radix();
|
|
4390
|
-
try {
|
|
4391
|
-
module.exports = Radisk;
|
|
4392
|
-
} catch (e) {
|
|
4393
|
-
}
|
|
4394
|
-
}
|
|
4395
|
-
Radisk.Radix = Radix;
|
|
4396
|
-
})();
|
|
4397
|
-
}
|
|
4398
|
-
});
|
|
4399
|
-
|
|
4400
3152
|
// node_modules/ajv/dist/compile/codegen/code.js
|
|
4401
3153
|
var require_code = __commonJS({
|
|
4402
3154
|
"node_modules/ajv/dist/compile/codegen/code.js"(exports) {
|
|
@@ -17220,7 +15972,6 @@ ${str(snapshot)}`);
|
|
|
17220
15972
|
|
|
17221
15973
|
// holosphere.js
|
|
17222
15974
|
var import_gun = __toESM(require_browser(), 1);
|
|
17223
|
-
var import_radisk = __toESM(require_radisk(), 1);
|
|
17224
15975
|
var import__2 = __toESM(require__(), 1);
|
|
17225
15976
|
|
|
17226
15977
|
// node_modules/h3-js/dist/browser/h3-js.es.js
|
|
@@ -32108,8 +30859,7 @@ ${str(snapshot)}`);
|
|
|
32108
30859
|
const payload = JSON.stringify(dataToStore);
|
|
32109
30860
|
const putCallback = async (ack) => {
|
|
32110
30861
|
if (ack.err) {
|
|
32111
|
-
|
|
32112
|
-
reject(new Error(errorMessage));
|
|
30862
|
+
reject(new Error(ack.err));
|
|
32113
30863
|
} else {
|
|
32114
30864
|
if (isHologram2) {
|
|
32115
30865
|
try {
|
|
@@ -32490,38 +31240,16 @@ ${str(snapshot)}`);
|
|
|
32490
31240
|
console.warn("Parsing raw Gun object with metadata (_) - attempting cleanup:", rawData);
|
|
32491
31241
|
const potentialData = Object.keys(rawData).reduce((acc, k) => {
|
|
32492
31242
|
if (k !== "_") {
|
|
32493
|
-
|
|
32494
|
-
const parsedNested = parse(holoInstance, rawData[k]);
|
|
32495
|
-
if (parsedNested !== null) {
|
|
32496
|
-
acc[k] = parsedNested;
|
|
32497
|
-
}
|
|
32498
|
-
} else if (rawData[k] !== null) {
|
|
32499
|
-
acc[k] = rawData[k];
|
|
32500
|
-
}
|
|
31243
|
+
acc[k] = rawData[k];
|
|
32501
31244
|
}
|
|
32502
31245
|
return acc;
|
|
32503
31246
|
}, {});
|
|
32504
31247
|
if (Object.keys(potentialData).length === 0) {
|
|
32505
|
-
console.warn("Raw Gun object had only metadata (_)
|
|
32506
|
-
return null;
|
|
32507
|
-
}
|
|
32508
|
-
const hasValidData = Object.values(potentialData).some(
|
|
32509
|
-
(value) => value !== null && value !== void 0 && (typeof value !== "object" || Object.keys(value).length > 0)
|
|
32510
|
-
);
|
|
32511
|
-
if (!hasValidData) {
|
|
32512
|
-
console.warn("Cleaned Gun object has no valid data, returning null.");
|
|
31248
|
+
console.warn("Raw Gun object had only metadata (_), returning null.");
|
|
32513
31249
|
return null;
|
|
32514
31250
|
}
|
|
32515
31251
|
return potentialData;
|
|
32516
31252
|
} else {
|
|
32517
|
-
if (Array.isArray(rawData)) {
|
|
32518
|
-
const cleanedArray = rawData.map((item) => parse(holoInstance, item)).filter((item) => item !== null);
|
|
32519
|
-
if (cleanedArray.length === 0) {
|
|
32520
|
-
console.warn("Array contained only invalid/raw GunDB nodes, returning null.");
|
|
32521
|
-
return null;
|
|
32522
|
-
}
|
|
32523
|
-
return cleanedArray;
|
|
32524
|
-
}
|
|
32525
31253
|
return rawData;
|
|
32526
31254
|
}
|
|
32527
31255
|
}
|
|
@@ -33951,7 +32679,7 @@ ${str(snapshot)}`);
|
|
|
33951
32679
|
}
|
|
33952
32680
|
|
|
33953
32681
|
// holosphere.js
|
|
33954
|
-
var HOLOSPHERE_VERSION = "1.1.
|
|
32682
|
+
var HOLOSPHERE_VERSION = "1.1.20";
|
|
33955
32683
|
var HoloSphere = class {
|
|
33956
32684
|
/**
|
|
33957
32685
|
* Initializes a new instance of the HoloSphere class.
|
|
@@ -33974,12 +32702,14 @@ ${str(snapshot)}`);
|
|
|
33974
32702
|
const defaultGunOptions = {
|
|
33975
32703
|
peers: ["https://gun.holons.io/gun"],
|
|
33976
32704
|
axe: false,
|
|
33977
|
-
localStorage: false,
|
|
33978
32705
|
radisk: true,
|
|
33979
|
-
|
|
32706
|
+
// Enable radisk storage by default
|
|
32707
|
+
file: "./holosphere"
|
|
33980
32708
|
// Default directory for radisk storage
|
|
33981
|
-
// Add other potential defaults here if needed
|
|
33982
32709
|
};
|
|
32710
|
+
if (typeof window !== "undefined" && gunOptions.radisk !== false) {
|
|
32711
|
+
defaultGunOptions.localStorage = false;
|
|
32712
|
+
}
|
|
33983
32713
|
const finalGunOptions = { ...defaultGunOptions, ...gunOptions };
|
|
33984
32714
|
console.log("Initializing Gun with options:", finalGunOptions);
|
|
33985
32715
|
this.gun = (0, import_gun.default)(finalGunOptions);
|
|
@@ -34070,24 +32800,6 @@ ${str(snapshot)}`);
|
|
|
34070
32800
|
async parse(rawData) {
|
|
34071
32801
|
return parse(this, rawData);
|
|
34072
32802
|
}
|
|
34073
|
-
/**
|
|
34074
|
-
* Filters an array of data, removing raw GunDB nodes and invalid entries.
|
|
34075
|
-
* @param {Array} dataArray - Array of data that might contain raw GunDB nodes
|
|
34076
|
-
* @returns {Promise<Array>} - Filtered array with only valid data
|
|
34077
|
-
*/
|
|
34078
|
-
async filterValidData(dataArray) {
|
|
34079
|
-
if (!Array.isArray(dataArray)) {
|
|
34080
|
-
return [];
|
|
34081
|
-
}
|
|
34082
|
-
const validData = [];
|
|
34083
|
-
for (const item of dataArray) {
|
|
34084
|
-
const parsed = await this.parse(item);
|
|
34085
|
-
if (parsed !== null) {
|
|
34086
|
-
validData.push(parsed);
|
|
34087
|
-
}
|
|
34088
|
-
}
|
|
34089
|
-
return validData;
|
|
34090
|
-
}
|
|
34091
32803
|
/**
|
|
34092
32804
|
* Deletes a specific key from a given holon and lens.
|
|
34093
32805
|
* @param {string} holon - The holon identifier.
|
|
@@ -34559,16 +33271,11 @@ ${str(snapshot)}`);
|
|
|
34559
33271
|
})();
|
|
34560
33272
|
/**
|
|
34561
33273
|
* @module holosphere
|
|
34562
|
-
* @version 1.1.
|
|
33274
|
+
* @version 1.1.17
|
|
34563
33275
|
* @description Holonic Geospatial Communication Infrastructure
|
|
34564
33276
|
* @author Roberto Valenti
|
|
34565
33277
|
* @license GPL-3.0-or-later
|
|
34566
33278
|
*/
|
|
34567
|
-
/*! Bundled license information:
|
|
34568
|
-
|
|
34569
|
-
gun/lib/radix.js:
|
|
34570
|
-
(*!opt && console.log("WHAT IS T?", JSON.stringify(t).length); *)
|
|
34571
|
-
*/
|
|
34572
33279
|
|
|
34573
33280
|
// Ensure HoloSphere is properly exposed as global constructor
|
|
34574
33281
|
if (typeof window !== 'undefined') {
|