@jackens/nnn 2026.2.11 → 2026.2.13
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/nnn.js +20 -28
- package/package.json +1 -1
- package/readme.md +24 -97
package/nnn.js
CHANGED
|
@@ -7,35 +7,27 @@ var is_string = (arg) => typeof arg === "string";
|
|
|
7
7
|
|
|
8
8
|
// src/nnn/vivify.ts
|
|
9
9
|
var ARRAY_INDEX_REGEXP = /^(0|[1-9]\d*)$/;
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
10
|
+
var _is_object = (ref) => typeof ref === "object";
|
|
11
|
+
var _get_target = (parent, parent_key, key) => parent[parent_key] ??= is_string(key) && ARRAY_INDEX_REGEXP.test(key) ? [] : {};
|
|
12
|
+
var _vivify = (parent, parent_key) => {
|
|
13
|
+
return parent != null && _is_object(parent) ? new Proxy(parent, {
|
|
14
|
+
get(_, key) {
|
|
15
|
+
const target = _get_target(parent, parent_key, key);
|
|
16
|
+
const value = target[key];
|
|
17
|
+
return is_string(key) && _is_object(target) && (value == null || _is_object(value)) ? _vivify(target, key) : value;
|
|
18
|
+
},
|
|
19
|
+
set(_, key, value) {
|
|
20
|
+
const target = _get_target(parent, parent_key, key);
|
|
21
|
+
target[key] = value;
|
|
22
|
+
return true;
|
|
23
|
+
},
|
|
24
|
+
deleteProperty(_, key) {
|
|
25
|
+
const target = _get_target(parent, parent_key, key);
|
|
26
|
+
return delete target[key];
|
|
24
27
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const target = get_target(parent, parent_key, key);
|
|
29
|
-
target[key] = value;
|
|
30
|
-
return true;
|
|
31
|
-
},
|
|
32
|
-
deleteProperty(_, key) {
|
|
33
|
-
const target = get_target(parent, parent_key, key);
|
|
34
|
-
delete target[key];
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
var vivify = (ref) => _vivify(ref);
|
|
28
|
+
}) : parent?.[parent_key];
|
|
29
|
+
};
|
|
30
|
+
var vivify = (ref) => _vivify({ _: ref }, "_");
|
|
39
31
|
|
|
40
32
|
// src/nnn/c.ts
|
|
41
33
|
var _c = (node, prefix, result, splitter) => {
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1282,138 +1282,65 @@ const ref: any = {}
|
|
|
1282
1282
|
|
|
1283
1283
|
vivify(ref).one.two[1][2] = 42
|
|
1284
1284
|
|
|
1285
|
-
expect(ref).to.deep.equal({
|
|
1286
|
-
one: {
|
|
1287
|
-
two: [
|
|
1288
|
-
undefined,
|
|
1289
|
-
[undefined, undefined, 42]
|
|
1290
|
-
]
|
|
1291
|
-
}
|
|
1292
|
-
})
|
|
1285
|
+
expect(ref).to.deep.equal({ one: { two: [undefined, [undefined, undefined, 42]] } })
|
|
1293
1286
|
|
|
1294
1287
|
vivify(ref).one.two[1][3] = 42
|
|
1295
1288
|
|
|
1296
|
-
expect(ref).to.deep.equal({
|
|
1297
|
-
one: {
|
|
1298
|
-
two: [
|
|
1299
|
-
undefined,
|
|
1300
|
-
[undefined, undefined, 42, 42]
|
|
1301
|
-
]
|
|
1302
|
-
}
|
|
1303
|
-
})
|
|
1289
|
+
expect(ref).to.deep.equal({ one: { two: [undefined, [undefined, undefined, 42, 42]] } })
|
|
1304
1290
|
|
|
1305
1291
|
vivify(ref).one.two[1] = 42
|
|
1306
1292
|
|
|
1307
|
-
expect(ref).to.deep.equal({
|
|
1308
|
-
one: {
|
|
1309
|
-
two: [
|
|
1310
|
-
undefined,
|
|
1311
|
-
42
|
|
1312
|
-
]
|
|
1313
|
-
}
|
|
1314
|
-
})
|
|
1293
|
+
expect(ref).to.deep.equal({ one: { two: [undefined, 42] } })
|
|
1315
1294
|
|
|
1316
1295
|
vivify(ref).one.two[3][0] = 42
|
|
1317
1296
|
|
|
1318
|
-
expect(ref).to.deep.equal({
|
|
1319
|
-
one: {
|
|
1320
|
-
two: [
|
|
1321
|
-
undefined,
|
|
1322
|
-
42,
|
|
1323
|
-
undefined,
|
|
1324
|
-
[42]
|
|
1325
|
-
]
|
|
1326
|
-
}
|
|
1327
|
-
})
|
|
1297
|
+
expect(ref).to.deep.equal({ one: { two: [undefined, 42, undefined, [42]] } })
|
|
1328
1298
|
|
|
1329
1299
|
vivify(ref).one.two[3].length = 2
|
|
1330
1300
|
|
|
1331
|
-
expect(ref).to.deep.equal({
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
undefined,
|
|
1337
|
-
[42, undefined]
|
|
1338
|
-
]
|
|
1339
|
-
}
|
|
1340
|
-
})
|
|
1301
|
+
expect(ref).to.deep.equal({ one: { two: [undefined, 42, undefined, [42, undefined]] } })
|
|
1302
|
+
|
|
1303
|
+
expect(vivify(ref).one.two.length).to.deep.equal(4)
|
|
1304
|
+
|
|
1305
|
+
expect(ref).to.deep.equal({ one: { two: [undefined, 42, undefined, [42, undefined]] } })
|
|
1341
1306
|
|
|
1342
1307
|
vivify(ref).one.two = 12
|
|
1343
1308
|
|
|
1344
|
-
expect(ref).to.deep.equal({
|
|
1345
|
-
one: {
|
|
1346
|
-
two: 12
|
|
1347
|
-
}
|
|
1348
|
-
})
|
|
1309
|
+
expect(ref).to.deep.equal({ one: { two: 12 } })
|
|
1349
1310
|
|
|
1350
1311
|
vivify(ref).one.two = undefined
|
|
1351
1312
|
|
|
1352
|
-
expect(ref).to.deep.equal({
|
|
1353
|
-
one: {
|
|
1354
|
-
two: undefined
|
|
1355
|
-
}
|
|
1356
|
-
})
|
|
1313
|
+
expect(ref).to.deep.equal({ one: { two: undefined } })
|
|
1357
1314
|
|
|
1358
1315
|
delete vivify(ref).one.two
|
|
1359
1316
|
|
|
1360
|
-
expect(ref).to.deep.equal({
|
|
1361
|
-
|
|
1362
|
-
|
|
1317
|
+
expect(ref).to.deep.equal({ one: {} })
|
|
1318
|
+
|
|
1319
|
+
expect(vivify(ref).one.toString instanceof Function).to.be.true
|
|
1320
|
+
|
|
1321
|
+
expect(vivify(ref).one.toString.name).to.equal('toString')
|
|
1322
|
+
|
|
1323
|
+
expect(ref).to.deep.equal({ one: {} })
|
|
1363
1324
|
|
|
1364
1325
|
delete vivify(ref).one.two.three
|
|
1365
1326
|
|
|
1366
|
-
expect(ref).to.deep.equal({
|
|
1367
|
-
one: {
|
|
1368
|
-
two: {}
|
|
1369
|
-
}
|
|
1370
|
-
})
|
|
1327
|
+
expect(ref).to.deep.equal({ one: { two: {} } })
|
|
1371
1328
|
|
|
1372
1329
|
vivify(ref).one.two.three.four
|
|
1373
1330
|
|
|
1374
|
-
expect(ref).to.deep.equal({
|
|
1375
|
-
one: {
|
|
1376
|
-
two: {
|
|
1377
|
-
three: {}
|
|
1378
|
-
}
|
|
1379
|
-
}
|
|
1380
|
-
})
|
|
1331
|
+
expect(ref).to.deep.equal({ one: { two: { three: {} } } })
|
|
1381
1332
|
|
|
1382
1333
|
vivify(ref).one.two[3]
|
|
1383
1334
|
|
|
1384
|
-
expect(ref).to.deep.equal({
|
|
1385
|
-
one: {
|
|
1386
|
-
two: {
|
|
1387
|
-
three: {}
|
|
1388
|
-
}
|
|
1389
|
-
}
|
|
1390
|
-
})
|
|
1335
|
+
expect(ref).to.deep.equal({ one: { two: { three: {} } } })
|
|
1391
1336
|
|
|
1392
1337
|
vivify(ref).one.two.three.four = 42
|
|
1393
1338
|
|
|
1394
|
-
expect(ref).to.deep.equal({
|
|
1395
|
-
one: {
|
|
1396
|
-
two: {
|
|
1397
|
-
three: {
|
|
1398
|
-
four: 42
|
|
1399
|
-
}
|
|
1400
|
-
}
|
|
1401
|
-
}
|
|
1402
|
-
})
|
|
1403
|
-
|
|
1404
|
-
const name = vivify(ref).one.two.three.four.toString.name
|
|
1339
|
+
expect(ref).to.deep.equal({ one: { two: { three: { four: 42 } } } })
|
|
1405
1340
|
|
|
1406
|
-
expect(name).to.deep.equal('toString')
|
|
1341
|
+
expect(vivify(ref).one.two.three.four.toString.name).to.deep.equal('toString')
|
|
1407
1342
|
|
|
1408
|
-
expect(ref).to.deep.equal({
|
|
1409
|
-
one: {
|
|
1410
|
-
two: {
|
|
1411
|
-
three: {
|
|
1412
|
-
four: 42
|
|
1413
|
-
}
|
|
1414
|
-
}
|
|
1415
|
-
}
|
|
1416
|
-
})
|
|
1343
|
+
expect(ref).to.deep.equal({ one: { two: { three: { four: 42 } } } })
|
|
1417
1344
|
```
|
|
1418
1345
|
|
|
1419
1346
|
## License
|