@ygracs/xobj-lib-js 0.2.5-b → 0.2.7-b

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/lib/xObj-lib.js CHANGED
@@ -1,4 +1,4 @@
1
- // [v0.2.106-20251213]
1
+ // [v0.3.111-20251229]
2
2
 
3
3
  // === module init block ===
4
4
 
@@ -11,7 +11,11 @@ const {
11
11
  } = require('@ygracs/bsfoc-lib-js');
12
12
 
13
13
  const {
14
+ EvalKeyNameError,
14
15
  XOBJ_ECODE_TABLE,
16
+ } = require('./xObj-errors');
17
+
18
+ const {
15
19
  XOBJ_DEF_TNAMES,
16
20
  } = require('./xObj-defs');
17
21
 
@@ -126,11 +130,19 @@ function evalXObjEName(value) {
126
130
  return name;
127
131
  };
128
132
 
133
+ /**
134
+ * A result of an element name pattern evaluation ops.
135
+ * @typedef {Object} XObjENameDescr
136
+ * @property {boolean} isERR - ops flag
137
+ * @property {(null|number|string)} name - element name
138
+ * @property {?object} conditions - some conditions applied to an element
139
+ */
140
+
129
141
  /**
130
142
  * Tries to convert a value into an element name description.
131
143
  * @function genXObjENameDescr
132
- * @param {any} value
133
- * @returns {object}
144
+ * @param {any} value - element name pattern
145
+ * @returns {XObjENameDescr}
134
146
  */
135
147
  function genXObjENameDescr(value) {
136
148
  let result = null;
@@ -194,19 +206,18 @@ function genXObjENameDescr(value) {
194
206
  */
195
207
  function getXObjElement(obj, name) {
196
208
  if (!isPlainObject(obj)) {
197
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
198
- err.code = XOBJ_TE_NPOBJ_ECODE;
199
- throw err;
209
+ throw new EvalKeyNameError(
210
+ XOBJ_TE_NPOBJ_EMSG,
211
+ { code: XOBJ_TE_NPOBJ_ECODE },
212
+ );
200
213
  };
201
214
  let { isSucceed, value: key } = evalKeyName(name);
202
- if (!isSucceed) {
203
- const { code, msg } = key;
204
- const err = new TypeError(msg);
205
- err.code = code;
206
- throw err;
215
+ if (isSucceed) {
216
+ // TODO: [?] check type of obj[key_name]
217
+ return obj[key] !== undefined ? obj[key] : null;
207
218
  };
208
- // TODO: [?] check type of obj[key_name]
209
- return obj[key] !== undefined ? obj[key] : null;
219
+ const { code, msg } = key;
220
+ throw new EvalKeyNameError(msg, { code });
210
221
  };
211
222
 
212
223
  /**
@@ -253,16 +264,15 @@ function getXObjAttributes(obj, key = XOBJ_DEF_ATTR_TNAME) {
253
264
  */
254
265
  function addXObjElement(obj, name) {
255
266
  if (!isPlainObject(obj)) {
256
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
257
- err.code = XOBJ_TE_NPOBJ_ECODE;
258
- throw err;
267
+ throw new EvalKeyNameError(
268
+ XOBJ_TE_NPOBJ_EMSG,
269
+ { code: XOBJ_TE_NPOBJ_ECODE },
270
+ );
259
271
  };
260
272
  let { isSucceed, value: key } = evalKeyName(name);
261
273
  if (!isSucceed) {
262
274
  const { code, msg } = key;
263
- const err = new TypeError(msg);
264
- err.code = code;
265
- throw err;
275
+ throw new EvalKeyNameError(msg, { code });
266
276
  };
267
277
  const item = {};
268
278
  let prop = obj[key];
@@ -335,16 +345,15 @@ function insertXObjElement(...args) {
335
345
  */
336
346
  function insertXObjElementEx(obj, name, opt) {
337
347
  if (!isPlainObject(obj)) {
338
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
339
- err.code = XOBJ_TE_NPOBJ_ECODE;
340
- throw err;
348
+ throw new EvalKeyNameError(
349
+ XOBJ_TE_NPOBJ_EMSG,
350
+ { code: XOBJ_TE_NPOBJ_ECODE },
351
+ );
341
352
  };
342
353
  let { isSucceed, value: key } = evalKeyName(name);
343
354
  if (!isSucceed) {
344
355
  const { code, msg } = key;
345
- const err = new TypeError(msg);
346
- err.code = code;
347
- throw err;
356
+ throw new EvalKeyNameError(msg, { code });
348
357
  };
349
358
  const item = {};
350
359
  let prop = obj[key];
@@ -413,16 +422,15 @@ function deleteXObjElement(...args) {
413
422
  */
414
423
  function deleteXObjElementEx(obj, name) {
415
424
  if (!isPlainObject(obj)) {
416
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
417
- err.code = XOBJ_TE_NPOBJ_ECODE;
418
- throw err;
425
+ throw new EvalKeyNameError(
426
+ XOBJ_TE_NPOBJ_EMSG,
427
+ { code: XOBJ_TE_NPOBJ_ECODE },
428
+ );
419
429
  };
420
430
  let { isSucceed, value: key } = evalKeyName(name);
421
431
  if (!isSucceed) {
422
432
  const { code, msg } = key;
423
- const err = new TypeError(msg);
424
- err.code = code;
425
- throw err;
433
+ throw new EvalKeyNameError(msg, { code });
426
434
  };
427
435
  let prop = obj[key];
428
436
  isSucceed = false;
@@ -447,24 +455,21 @@ function deleteXObjElementEx(obj, name) {
447
455
  */
448
456
  function renameXObjElement(obj, name = '', value = '') {
449
457
  if (!isPlainObject(obj)) {
450
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
451
- err.code = XOBJ_TE_NPOBJ_ECODE;
452
- throw err;
458
+ throw new EvalKeyNameError(
459
+ XOBJ_TE_NPOBJ_EMSG,
460
+ { code: XOBJ_TE_NPOBJ_ECODE },
461
+ );
453
462
  };
454
463
  const opt = false;
455
464
  let { isSucceed: isAcceptON, value: oname } = evalKeyName(name, opt);
456
465
  if (!isAcceptON) {
457
466
  const { code, msg } = oname;
458
- const err = new TypeError(msg);
459
- err.code = code;
460
- throw err;
467
+ throw new EvalKeyNameError(msg, { code });
461
468
  };
462
469
  let { isSucceed: isAcceptNN, value: nname } = evalKeyName(value, opt);
463
470
  if (!isAcceptNN) {
464
471
  const { code, msg } = nname;
465
- const err = new TypeError(msg);
466
- err.code = code;
467
- throw err;
472
+ throw new EvalKeyNameError(msg, { code });
468
473
  };
469
474
  let isSucceed = false;
470
475
  if (oname !== '' && oname in obj && nname !== '') {
@@ -504,9 +509,7 @@ function checkXObjAttribute(obj, attr = '', key) {
504
509
  if (name === '') return false;
505
510
  } else {
506
511
  const { code, msg } = name;
507
- const err = new TypeError(msg);
508
- err.code = code;
509
- throw err;
512
+ throw new EvalKeyNameError(msg, { code });
510
513
  };
511
514
  return _obj[name] !== undefined;
512
515
  };
@@ -531,9 +534,7 @@ function deleteXObjAttribute(obj, attr = '', key) {
531
534
  let { isSucceed, value: name } = evalKeyName(attr, false);
532
535
  if (!isSucceed) {
533
536
  const { code, msg } = name;
534
- const err = new TypeError(msg);
535
- err.code = code;
536
- throw err;
537
+ throw new EvalKeyNameError(msg, { code });
537
538
  };
538
539
  isSucceed = false;
539
540
  if (name !== '') {
@@ -558,17 +559,16 @@ function deleteXObjAttribute(obj, attr = '', key) {
558
559
  */
559
560
  function renameXObjAttribute(obj, attr = '', value = '', key = XOBJ_DEF_ATTR_TNAME) {
560
561
  if (!isPlainObject(obj)) {
561
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
562
- err.code = XOBJ_TE_NPOBJ_ECODE;
563
- throw err;
562
+ throw new EvalKeyNameError(
563
+ XOBJ_TE_NPOBJ_EMSG,
564
+ { code: XOBJ_TE_NPOBJ_ECODE },
565
+ );
564
566
  };
565
567
  const opt = false;
566
568
  let { isSucceed, value: _key } = evalKeyName(key, opt);
567
569
  if (!isSucceed) {
568
570
  const { code, msg } = _key;
569
- const err = new TypeError(msg);
570
- err.code = code;
571
- throw err;
571
+ throw new EvalKeyNameError(msg, { code });
572
572
  };
573
573
  isSucceed = false;
574
574
  if (_key !== '') {
@@ -577,16 +577,12 @@ function renameXObjAttribute(obj, attr = '', value = '', key = XOBJ_DEF_ATTR_TNA
577
577
  let { isSucceed: isAcceptON, value: oname } = evalKeyName(attr, opt);
578
578
  if (!isAcceptON) {
579
579
  const { code, msg } = oname;
580
- const err = new TypeError(msg);
581
- err.code = code;
582
- throw err;
580
+ throw new EvalKeyNameError(msg, { code });
583
581
  };
584
582
  let { isSucceed: isAcceptNN, value: nname } = evalKeyName(value, opt);
585
583
  if (!isAcceptNN) {
586
584
  const { code, msg } = nname;
587
- const err = new TypeError(msg);
588
- err.code = code;
589
- throw err;
585
+ throw new EvalKeyNameError(msg, { code });
590
586
  };
591
587
  if (oname !== '' && oname in _obj && nname !== '') {
592
588
  if (oname !== nname) {
@@ -613,16 +609,15 @@ function renameXObjAttribute(obj, attr = '', value = '', key = XOBJ_DEF_ATTR_TNA
613
609
  */
614
610
  function readXObjParamRaw(obj, key = XOBJ_DEF_PARAM_TNAME) {
615
611
  if (!isPlainObject(obj)) {
616
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
617
- err.code = XOBJ_TE_NPOBJ_ECODE;
618
- throw err;
612
+ throw new EvalKeyNameError(
613
+ XOBJ_TE_NPOBJ_EMSG,
614
+ { code: XOBJ_TE_NPOBJ_ECODE },
615
+ );
619
616
  };
620
617
  let { isSucceed, value: _key } = evalKeyName(key, false);
621
618
  if (!isSucceed) {
622
619
  const { code, msg } = _key;
623
- const err = new TypeError(msg);
624
- err.code = code;
625
- throw err;
620
+ throw new EvalKeyNameError(msg, { code });
626
621
  };
627
622
  return _key !== '' ? obj[_key] : undefined;
628
623
  };
@@ -639,16 +634,15 @@ function readXObjParamRaw(obj, key = XOBJ_DEF_PARAM_TNAME) {
639
634
  */
640
635
  function writeXObjParamRaw(obj, value, key = XOBJ_DEF_PARAM_TNAME) {
641
636
  if (!isPlainObject(obj)) {
642
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
643
- err.code = XOBJ_TE_NPOBJ_ECODE;
644
- throw err;
637
+ throw new EvalKeyNameError(
638
+ XOBJ_TE_NPOBJ_EMSG,
639
+ { code: XOBJ_TE_NPOBJ_ECODE },
640
+ );
645
641
  };
646
642
  let { isSucceed, value: _key } = evalKeyName(key, false);
647
643
  if (!isSucceed) {
648
644
  const { code, msg } = _key;
649
- const err = new TypeError(msg);
650
- err.code = code;
651
- throw err;
645
+ throw new EvalKeyNameError(msg, { code });
652
646
  };
653
647
  if (_key === '' || value === undefined) {
654
648
  isSucceed = false;
@@ -679,9 +673,7 @@ function readXObjAttrRaw(obj, attr = '', key) {
679
673
  let { isSucceed, value: name } = evalKeyName(attr, false);
680
674
  if (!isSucceed) {
681
675
  const { code, msg } = name;
682
- const err = new TypeError(msg);
683
- err.code = code;
684
- throw err;
676
+ throw new EvalKeyNameError(msg, { code });
685
677
  };
686
678
  if (name !== '') return _obj[name];
687
679
  };
@@ -702,9 +694,7 @@ function writeXObjAttrRaw(obj, attr = '', value, key = XOBJ_DEF_ATTR_TNAME) {
702
694
  let { isSucceed, value: name } = evalKeyName(attr, false);
703
695
  if (!isSucceed) {
704
696
  const { code, msg } = name;
705
- const err = new TypeError(msg);
706
- err.code = code;
707
- throw err;
697
+ throw new EvalKeyNameError(msg, { code });
708
698
  };
709
699
  isSucceed = false;
710
700
  if (name !== '' && value !== undefined) {
@@ -783,13 +773,13 @@ function readXObjParamAsBool(obj, defValue, key) {
783
773
  };
784
774
 
785
775
  /**
776
+ * Extracts a parameter from a given object and returns it as a number.
786
777
  * @function readXObjParamAsNum
787
778
  * @param {object} obj - some object
788
779
  * @param {number} [defValue] - default value
789
780
  * @param {string} [key] - some key
790
781
  * @returns {number}
791
782
  * @throws {TypeError} if first param is not an object
792
- * Extracts a parameter from a given object and returns it as a number.
793
783
  */
794
784
  function readXObjParamAsNum(obj, defValue, key) {
795
785
  let result = undefined;
@@ -1355,9 +1345,10 @@ function writeXObjAttrEx(obj, attr, value, opt, key) {
1355
1345
  */
1356
1346
  function insertXObjElements(obj, ...args) {
1357
1347
  if (!isPlainObject(obj)) {
1358
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
1359
- err.code = XOBJ_TE_NPOBJ_ECODE;
1360
- throw err;
1348
+ throw new EvalKeyNameError(
1349
+ XOBJ_TE_NPOBJ_EMSG,
1350
+ { code: XOBJ_TE_NPOBJ_ECODE },
1351
+ );
1361
1352
  };
1362
1353
  let count = 0;
1363
1354
  let len = args.length;
@@ -1419,16 +1410,15 @@ function insertXObjEList(...args) {
1419
1410
  */
1420
1411
  function insertXObjEListEx(obj, name, opt) {
1421
1412
  if (!isPlainObject(obj)) {
1422
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
1423
- err.code = XOBJ_TE_NPOBJ_ECODE;
1424
- throw err;
1413
+ throw new EvalKeyNameError(
1414
+ XOBJ_TE_NPOBJ_EMSG,
1415
+ { code: XOBJ_TE_NPOBJ_ECODE },
1416
+ );
1425
1417
  };
1426
1418
  let { isSucceed, value: key } = evalKeyName(name);
1427
1419
  if (!isSucceed) {
1428
1420
  const { code, msg } = key;
1429
- const err = new TypeError(msg);
1430
- err.code = code;
1431
- throw err;
1421
+ throw new EvalKeyNameError(msg, { code });
1432
1422
  };
1433
1423
  /** @type {OPT_inselops_S} */
1434
1424
  let {
@@ -1469,9 +1459,10 @@ function insertXObjEListEx(obj, name, opt) {
1469
1459
  */
1470
1460
  function insertXObjEChain(obj, ...args) {
1471
1461
  if (!isPlainObject(obj)) {
1472
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
1473
- err.code = XOBJ_TE_NPOBJ_ECODE;
1474
- throw err;
1462
+ throw new EvalKeyNameError(
1463
+ XOBJ_TE_NPOBJ_EMSG,
1464
+ { code: XOBJ_TE_NPOBJ_ECODE },
1465
+ );
1475
1466
  };
1476
1467
  let result = null;
1477
1468
  let len = args.length;
@@ -1501,9 +1492,6 @@ function insertXObjEChain(obj, ...args) {
1501
1492
 
1502
1493
  // === module exports block ===
1503
1494
 
1504
- module.exports.XOBJ_DEF_PARAM_TNAME = XOBJ_DEF_PARAM_TNAME;
1505
- module.exports.XOBJ_DEF_ATTR_TNAME = XOBJ_DEF_ATTR_TNAME;
1506
-
1507
1495
  module.exports.readXObjParamRaw = readXObjParamRaw;
1508
1496
  module.exports.readXObjParam = readXObjParam;
1509
1497
  module.exports.readXObjParamAsBool = readXObjParamAsBool;
@@ -1547,12 +1535,10 @@ module.exports.evalXObjEName = evalXObjEName;
1547
1535
  module.exports.insertXObjEList = insertXObjEList;
1548
1536
  module.exports.insertXObjEListEx = insertXObjEListEx;
1549
1537
 
1550
- /* inner */
1538
+ // * inner *
1551
1539
  module.exports.evalKeyName = evalKeyName;
1552
1540
 
1553
- /* experimental */
1541
+ // * experimental *
1554
1542
  module.exports.genXObjENameDescr = genXObjENameDescr;
1555
- /* experimental */
1556
1543
  module.exports.insertXObjElements = insertXObjElements;
1557
- /* experimental */
1558
1544
  module.exports.insertXObjEChain = insertXObjEChain;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ygracs/xobj-lib-js",
3
- "version": "0.2.5-b",
3
+ "version": "0.2.7-b",
4
4
  "description": "A helper library to work with xml-js module",
5
5
  "author": "ygracs <cs70th-om@rambler.ru>",
6
6
  "license": "MIT",
@@ -14,6 +14,7 @@
14
14
  "doc/xObj.md",
15
15
  "lib/xObj-lib.js",
16
16
  "lib/xObj-defs.js",
17
+ "lib/xObj-errors.js",
17
18
  "lib/*.d.ts",
18
19
  "index.js",
19
20
  "index.d.ts",
@@ -30,7 +31,7 @@
30
31
  "#test-dir/*": "./__test__/*"
31
32
  },
32
33
  "dependencies": {
33
- "@ygracs/bsfoc-lib-js": "^0.3.1-b"
34
+ "@ygracs/bsfoc-lib-js": "^0.3.2-b"
34
35
  },
35
36
  "devDependencies": {
36
37
  "@ygracs/test-helper": "~0.0.1-b",