@ygracs/xobj-lib-js 0.2.4 → 0.2.6-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.105-20250719]
1
+ // [v0.3.111-20251229]
2
2
 
3
3
  // === module init block ===
4
4
 
@@ -10,6 +10,15 @@ const {
10
10
  isArray, isObject, isPlainObject,
11
11
  } = require('@ygracs/bsfoc-lib-js');
12
12
 
13
+ const {
14
+ EvalKeyNameError,
15
+ XOBJ_ECODE_TABLE,
16
+ } = require('./xObj-errors');
17
+
18
+ const {
19
+ XOBJ_DEF_TNAMES,
20
+ } = require('./xObj-defs');
21
+
13
22
  const {
14
23
  XOBJ_TE_NSTR_EMSG,
15
24
  XOBJ_TE_NSTR_ECODE,
@@ -17,9 +26,14 @@ const {
17
26
  XOBJ_TE_NPOBJ_ECODE,
18
27
  XOBJ_TE_KNES_EMSG,
19
28
  XOBJ_TE_KNES_ECODE,
20
- } = require('#lib/xObj-defs.js').XOBJ_ECODE_TABLE;
29
+ } = XOBJ_ECODE_TABLE;
30
+
31
+ const {
32
+ XOBJ_DEF_PARAM_TNAME,
33
+ XOBJ_DEF_ATTR_TNAME,
34
+ } = XOBJ_DEF_TNAMES;
21
35
 
22
- // === module extra block (helper functions) ===
36
+ // === module inner block ===
23
37
 
24
38
  /**
25
39
  * A result of a value check ops.
@@ -75,9 +89,6 @@ function evalKeyName(value, opt = true) {
75
89
  * (* constant definitions *)
76
90
  */
77
91
 
78
- const XOBJ_DEF_PARAM_TNAME = '__text';
79
- const XOBJ_DEF_ATTR_TNAME = '__attr';
80
-
81
92
  /***
82
93
  * (* function definitions *)
83
94
  */
@@ -119,11 +130,19 @@ function evalXObjEName(value) {
119
130
  return name;
120
131
  };
121
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
+
122
141
  /**
123
142
  * Tries to convert a value into an element name description.
124
143
  * @function genXObjENameDescr
125
- * @param {any} value
126
- * @returns {object}
144
+ * @param {any} value - element name pattern
145
+ * @returns {XObjENameDescr}
127
146
  */
128
147
  function genXObjENameDescr(value) {
129
148
  let result = null;
@@ -187,19 +206,18 @@ function genXObjENameDescr(value) {
187
206
  */
188
207
  function getXObjElement(obj, name) {
189
208
  if (!isPlainObject(obj)) {
190
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
191
- err.code = XOBJ_TE_NPOBJ_ECODE;
192
- throw err;
209
+ throw new EvalKeyNameError(
210
+ XOBJ_TE_NPOBJ_EMSG,
211
+ { code: XOBJ_TE_NPOBJ_ECODE },
212
+ );
193
213
  };
194
214
  let { isSucceed, value: key } = evalKeyName(name);
195
- if (!isSucceed) {
196
- const { code, msg } = key;
197
- const err = new TypeError(msg);
198
- err.code = code;
199
- throw err;
215
+ if (isSucceed) {
216
+ // TODO: [?] check type of obj[key_name]
217
+ return obj[key] !== undefined ? obj[key] : null;
200
218
  };
201
- // TODO: [?] check type of obj[key_name]
202
- return obj[key] !== undefined ? obj[key] : null;
219
+ const { code, msg } = key;
220
+ throw new EvalKeyNameError(msg, { code });
203
221
  };
204
222
 
205
223
  /**
@@ -246,16 +264,15 @@ function getXObjAttributes(obj, key = XOBJ_DEF_ATTR_TNAME) {
246
264
  */
247
265
  function addXObjElement(obj, name) {
248
266
  if (!isPlainObject(obj)) {
249
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
250
- err.code = XOBJ_TE_NPOBJ_ECODE;
251
- throw err;
267
+ throw new EvalKeyNameError(
268
+ XOBJ_TE_NPOBJ_EMSG,
269
+ { code: XOBJ_TE_NPOBJ_ECODE },
270
+ );
252
271
  };
253
272
  let { isSucceed, value: key } = evalKeyName(name);
254
273
  if (!isSucceed) {
255
274
  const { code, msg } = key;
256
- const err = new TypeError(msg);
257
- err.code = code;
258
- throw err;
275
+ throw new EvalKeyNameError(msg, { code });
259
276
  };
260
277
  const item = {};
261
278
  let prop = obj[key];
@@ -328,16 +345,15 @@ function insertXObjElement(...args) {
328
345
  */
329
346
  function insertXObjElementEx(obj, name, opt) {
330
347
  if (!isPlainObject(obj)) {
331
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
332
- err.code = XOBJ_TE_NPOBJ_ECODE;
333
- throw err;
348
+ throw new EvalKeyNameError(
349
+ XOBJ_TE_NPOBJ_EMSG,
350
+ { code: XOBJ_TE_NPOBJ_ECODE },
351
+ );
334
352
  };
335
353
  let { isSucceed, value: key } = evalKeyName(name);
336
354
  if (!isSucceed) {
337
355
  const { code, msg } = key;
338
- const err = new TypeError(msg);
339
- err.code = code;
340
- throw err;
356
+ throw new EvalKeyNameError(msg, { code });
341
357
  };
342
358
  const item = {};
343
359
  let prop = obj[key];
@@ -406,16 +422,15 @@ function deleteXObjElement(...args) {
406
422
  */
407
423
  function deleteXObjElementEx(obj, name) {
408
424
  if (!isPlainObject(obj)) {
409
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
410
- err.code = XOBJ_TE_NPOBJ_ECODE;
411
- throw err;
425
+ throw new EvalKeyNameError(
426
+ XOBJ_TE_NPOBJ_EMSG,
427
+ { code: XOBJ_TE_NPOBJ_ECODE },
428
+ );
412
429
  };
413
430
  let { isSucceed, value: key } = evalKeyName(name);
414
431
  if (!isSucceed) {
415
432
  const { code, msg } = key;
416
- const err = new TypeError(msg);
417
- err.code = code;
418
- throw err;
433
+ throw new EvalKeyNameError(msg, { code });
419
434
  };
420
435
  let prop = obj[key];
421
436
  isSucceed = false;
@@ -440,24 +455,21 @@ function deleteXObjElementEx(obj, name) {
440
455
  */
441
456
  function renameXObjElement(obj, name = '', value = '') {
442
457
  if (!isPlainObject(obj)) {
443
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
444
- err.code = XOBJ_TE_NPOBJ_ECODE;
445
- throw err;
458
+ throw new EvalKeyNameError(
459
+ XOBJ_TE_NPOBJ_EMSG,
460
+ { code: XOBJ_TE_NPOBJ_ECODE },
461
+ );
446
462
  };
447
463
  const opt = false;
448
464
  let { isSucceed: isAcceptON, value: oname } = evalKeyName(name, opt);
449
465
  if (!isAcceptON) {
450
466
  const { code, msg } = oname;
451
- const err = new TypeError(msg);
452
- err.code = code;
453
- throw err;
467
+ throw new EvalKeyNameError(msg, { code });
454
468
  };
455
469
  let { isSucceed: isAcceptNN, value: nname } = evalKeyName(value, opt);
456
470
  if (!isAcceptNN) {
457
471
  const { code, msg } = nname;
458
- const err = new TypeError(msg);
459
- err.code = code;
460
- throw err;
472
+ throw new EvalKeyNameError(msg, { code });
461
473
  };
462
474
  let isSucceed = false;
463
475
  if (oname !== '' && oname in obj && nname !== '') {
@@ -497,9 +509,7 @@ function checkXObjAttribute(obj, attr = '', key) {
497
509
  if (name === '') return false;
498
510
  } else {
499
511
  const { code, msg } = name;
500
- const err = new TypeError(msg);
501
- err.code = code;
502
- throw err;
512
+ throw new EvalKeyNameError(msg, { code });
503
513
  };
504
514
  return _obj[name] !== undefined;
505
515
  };
@@ -524,9 +534,7 @@ function deleteXObjAttribute(obj, attr = '', key) {
524
534
  let { isSucceed, value: name } = evalKeyName(attr, false);
525
535
  if (!isSucceed) {
526
536
  const { code, msg } = name;
527
- const err = new TypeError(msg);
528
- err.code = code;
529
- throw err;
537
+ throw new EvalKeyNameError(msg, { code });
530
538
  };
531
539
  isSucceed = false;
532
540
  if (name !== '') {
@@ -551,17 +559,16 @@ function deleteXObjAttribute(obj, attr = '', key) {
551
559
  */
552
560
  function renameXObjAttribute(obj, attr = '', value = '', key = XOBJ_DEF_ATTR_TNAME) {
553
561
  if (!isPlainObject(obj)) {
554
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
555
- err.code = XOBJ_TE_NPOBJ_ECODE;
556
- throw err;
562
+ throw new EvalKeyNameError(
563
+ XOBJ_TE_NPOBJ_EMSG,
564
+ { code: XOBJ_TE_NPOBJ_ECODE },
565
+ );
557
566
  };
558
567
  const opt = false;
559
568
  let { isSucceed, value: _key } = evalKeyName(key, opt);
560
569
  if (!isSucceed) {
561
570
  const { code, msg } = _key;
562
- const err = new TypeError(msg);
563
- err.code = code;
564
- throw err;
571
+ throw new EvalKeyNameError(msg, { code });
565
572
  };
566
573
  isSucceed = false;
567
574
  if (_key !== '') {
@@ -570,16 +577,12 @@ function renameXObjAttribute(obj, attr = '', value = '', key = XOBJ_DEF_ATTR_TNA
570
577
  let { isSucceed: isAcceptON, value: oname } = evalKeyName(attr, opt);
571
578
  if (!isAcceptON) {
572
579
  const { code, msg } = oname;
573
- const err = new TypeError(msg);
574
- err.code = code;
575
- throw err;
580
+ throw new EvalKeyNameError(msg, { code });
576
581
  };
577
582
  let { isSucceed: isAcceptNN, value: nname } = evalKeyName(value, opt);
578
583
  if (!isAcceptNN) {
579
584
  const { code, msg } = nname;
580
- const err = new TypeError(msg);
581
- err.code = code;
582
- throw err;
585
+ throw new EvalKeyNameError(msg, { code });
583
586
  };
584
587
  if (oname !== '' && oname in _obj && nname !== '') {
585
588
  if (oname !== nname) {
@@ -606,16 +609,15 @@ function renameXObjAttribute(obj, attr = '', value = '', key = XOBJ_DEF_ATTR_TNA
606
609
  */
607
610
  function readXObjParamRaw(obj, key = XOBJ_DEF_PARAM_TNAME) {
608
611
  if (!isPlainObject(obj)) {
609
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
610
- err.code = XOBJ_TE_NPOBJ_ECODE;
611
- throw err;
612
+ throw new EvalKeyNameError(
613
+ XOBJ_TE_NPOBJ_EMSG,
614
+ { code: XOBJ_TE_NPOBJ_ECODE },
615
+ );
612
616
  };
613
617
  let { isSucceed, value: _key } = evalKeyName(key, false);
614
618
  if (!isSucceed) {
615
619
  const { code, msg } = _key;
616
- const err = new TypeError(msg);
617
- err.code = code;
618
- throw err;
620
+ throw new EvalKeyNameError(msg, { code });
619
621
  };
620
622
  return _key !== '' ? obj[_key] : undefined;
621
623
  };
@@ -632,16 +634,15 @@ function readXObjParamRaw(obj, key = XOBJ_DEF_PARAM_TNAME) {
632
634
  */
633
635
  function writeXObjParamRaw(obj, value, key = XOBJ_DEF_PARAM_TNAME) {
634
636
  if (!isPlainObject(obj)) {
635
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
636
- err.code = XOBJ_TE_NPOBJ_ECODE;
637
- throw err;
637
+ throw new EvalKeyNameError(
638
+ XOBJ_TE_NPOBJ_EMSG,
639
+ { code: XOBJ_TE_NPOBJ_ECODE },
640
+ );
638
641
  };
639
642
  let { isSucceed, value: _key } = evalKeyName(key, false);
640
643
  if (!isSucceed) {
641
644
  const { code, msg } = _key;
642
- const err = new TypeError(msg);
643
- err.code = code;
644
- throw err;
645
+ throw new EvalKeyNameError(msg, { code });
645
646
  };
646
647
  if (_key === '' || value === undefined) {
647
648
  isSucceed = false;
@@ -672,9 +673,7 @@ function readXObjAttrRaw(obj, attr = '', key) {
672
673
  let { isSucceed, value: name } = evalKeyName(attr, false);
673
674
  if (!isSucceed) {
674
675
  const { code, msg } = name;
675
- const err = new TypeError(msg);
676
- err.code = code;
677
- throw err;
676
+ throw new EvalKeyNameError(msg, { code });
678
677
  };
679
678
  if (name !== '') return _obj[name];
680
679
  };
@@ -695,9 +694,7 @@ function writeXObjAttrRaw(obj, attr = '', value, key = XOBJ_DEF_ATTR_TNAME) {
695
694
  let { isSucceed, value: name } = evalKeyName(attr, false);
696
695
  if (!isSucceed) {
697
696
  const { code, msg } = name;
698
- const err = new TypeError(msg);
699
- err.code = code;
700
- throw err;
697
+ throw new EvalKeyNameError(msg, { code });
701
698
  };
702
699
  isSucceed = false;
703
700
  if (name !== '' && value !== undefined) {
@@ -776,13 +773,13 @@ function readXObjParamAsBool(obj, defValue, key) {
776
773
  };
777
774
 
778
775
  /**
776
+ * Extracts a parameter from a given object and returns it as a number.
779
777
  * @function readXObjParamAsNum
780
778
  * @param {object} obj - some object
781
779
  * @param {number} [defValue] - default value
782
780
  * @param {string} [key] - some key
783
781
  * @returns {number}
784
782
  * @throws {TypeError} if first param is not an object
785
- * Extracts a parameter from a given object and returns it as a number.
786
783
  */
787
784
  function readXObjParamAsNum(obj, defValue, key) {
788
785
  let result = undefined;
@@ -1348,9 +1345,10 @@ function writeXObjAttrEx(obj, attr, value, opt, key) {
1348
1345
  */
1349
1346
  function insertXObjElements(obj, ...args) {
1350
1347
  if (!isPlainObject(obj)) {
1351
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
1352
- err.code = XOBJ_TE_NPOBJ_ECODE;
1353
- throw err;
1348
+ throw new EvalKeyNameError(
1349
+ XOBJ_TE_NPOBJ_EMSG,
1350
+ { code: XOBJ_TE_NPOBJ_ECODE },
1351
+ );
1354
1352
  };
1355
1353
  let count = 0;
1356
1354
  let len = args.length;
@@ -1412,16 +1410,15 @@ function insertXObjEList(...args) {
1412
1410
  */
1413
1411
  function insertXObjEListEx(obj, name, opt) {
1414
1412
  if (!isPlainObject(obj)) {
1415
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
1416
- err.code = XOBJ_TE_NPOBJ_ECODE;
1417
- throw err;
1413
+ throw new EvalKeyNameError(
1414
+ XOBJ_TE_NPOBJ_EMSG,
1415
+ { code: XOBJ_TE_NPOBJ_ECODE },
1416
+ );
1418
1417
  };
1419
1418
  let { isSucceed, value: key } = evalKeyName(name);
1420
1419
  if (!isSucceed) {
1421
1420
  const { code, msg } = key;
1422
- const err = new TypeError(msg);
1423
- err.code = code;
1424
- throw err;
1421
+ throw new EvalKeyNameError(msg, { code });
1425
1422
  };
1426
1423
  /** @type {OPT_inselops_S} */
1427
1424
  let {
@@ -1462,9 +1459,10 @@ function insertXObjEListEx(obj, name, opt) {
1462
1459
  */
1463
1460
  function insertXObjEChain(obj, ...args) {
1464
1461
  if (!isPlainObject(obj)) {
1465
- const err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
1466
- err.code = XOBJ_TE_NPOBJ_ECODE;
1467
- throw err;
1462
+ throw new EvalKeyNameError(
1463
+ XOBJ_TE_NPOBJ_EMSG,
1464
+ { code: XOBJ_TE_NPOBJ_ECODE },
1465
+ );
1468
1466
  };
1469
1467
  let result = null;
1470
1468
  let len = args.length;
@@ -1494,9 +1492,6 @@ function insertXObjEChain(obj, ...args) {
1494
1492
 
1495
1493
  // === module exports block ===
1496
1494
 
1497
- module.exports.XOBJ_DEF_PARAM_TNAME = XOBJ_DEF_PARAM_TNAME;
1498
- module.exports.XOBJ_DEF_ATTR_TNAME = XOBJ_DEF_ATTR_TNAME;
1499
-
1500
1495
  module.exports.readXObjParamRaw = readXObjParamRaw;
1501
1496
  module.exports.readXObjParam = readXObjParam;
1502
1497
  module.exports.readXObjParamAsBool = readXObjParamAsBool;
@@ -1540,12 +1535,10 @@ module.exports.evalXObjEName = evalXObjEName;
1540
1535
  module.exports.insertXObjEList = insertXObjEList;
1541
1536
  module.exports.insertXObjEListEx = insertXObjEListEx;
1542
1537
 
1543
- /* inner */
1538
+ // * inner *
1544
1539
  module.exports.evalKeyName = evalKeyName;
1545
1540
 
1546
- /* experimental */
1541
+ // * experimental *
1547
1542
  module.exports.genXObjENameDescr = genXObjENameDescr;
1548
- /* experimental */
1549
1543
  module.exports.insertXObjElements = insertXObjElements;
1550
- /* experimental */
1551
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.4",
3
+ "version": "0.2.6-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",
@@ -9,28 +9,35 @@
9
9
  "url": "git+https://gitlab.com/ygracs/xobj-lib-js.git"
10
10
  },
11
11
  "main": "./index.js",
12
+ "types": "./index.d.ts",
12
13
  "files": [
13
14
  "doc/xObj.md",
14
15
  "lib/xObj-lib.js",
15
16
  "lib/xObj-defs.js",
17
+ "lib/xObj-errors.js",
18
+ "lib/*.d.ts",
16
19
  "index.js",
20
+ "index.d.ts",
17
21
  "CHANGELOG.md"
18
22
  ],
19
23
  "scripts": {
20
24
  "test": "jest",
21
25
  "build-doc-md": "jsdoc2md",
22
- "build-doc-html": "jsdoc"
26
+ "build-doc-html": "jsdoc",
27
+ "gen-dts": "npx -p typescript tsc"
23
28
  },
24
29
  "imports": {
25
30
  "#lib/*": "./lib/*",
26
31
  "#test-dir/*": "./__test__/*"
27
32
  },
28
33
  "dependencies": {
29
- "@ygracs/bsfoc-lib-js": "^0.3.0"
34
+ "@ygracs/bsfoc-lib-js": "^0.3.1-b"
30
35
  },
31
36
  "devDependencies": {
32
- "jest": "^30.0.5",
33
- "jsdoc-to-markdown": "^9.1.2",
34
- "minimist": "^1.2.8"
37
+ "@ygracs/test-helper": "~0.0.1-b",
38
+ "jest": "^30.2.0",
39
+ "jsdoc-to-markdown": "^9.1.3",
40
+ "minimist": "^1.2.8",
41
+ "typescript": "~5.9.3"
35
42
  }
36
43
  }