@ygracs/xobj-lib-js 0.0.13 → 0.0.14-rc2
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/CHANGELOG.md +24 -0
- package/LICENSE +9 -9
- package/doc/xObj.md +84 -49
- package/index.js +1 -4
- package/lib/xObj-lib.js +763 -227
- package/package.json +4 -3
package/lib/xObj-lib.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
// [v0.1.
|
|
1
|
+
// [v0.1.051-20230227]
|
|
2
2
|
|
|
3
3
|
// === module init block ===
|
|
4
4
|
|
|
5
5
|
const {
|
|
6
|
-
valueToIndex,
|
|
7
|
-
readAsBoolEx, readAsNumberEx,
|
|
6
|
+
valueToIndex,
|
|
7
|
+
readAsString, readAsBoolEx, readAsNumberEx,
|
|
8
|
+
isNullOrUndef,
|
|
8
9
|
isArray, isObject, isPlainObject, readAsListS,
|
|
9
10
|
} = require('@ygracs/bsfoc-lib-js');
|
|
10
11
|
|
|
@@ -12,12 +13,18 @@ const XOBJ_DEF_PARAM_TNAME = '__text';
|
|
|
12
13
|
const XOBJ_DEF_ATTR_TNAME = '__attr';
|
|
13
14
|
|
|
14
15
|
const XOBJ_TE_INVARG_EMSG = 'invalid argument';
|
|
15
|
-
const XOBJ_TE_NOBJ_EMSG = XOBJ_TE_INVARG_EMSG
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
16
|
+
const XOBJ_TE_NOBJ_EMSG = `${XOBJ_TE_INVARG_EMSG} (an object expected)`;
|
|
17
|
+
const XOBJ_TE_NOBJ_ECODE = 'ERR_XOBJ_NOBJ';
|
|
18
|
+
const XOBJ_TE_NARR_EMSG = `${XOBJ_TE_INVARG_EMSG} (an array expected)`;
|
|
19
|
+
const XOBJ_TE_NARR_ECODE = 'ERR_XOBJ_NARR';
|
|
20
|
+
const XOBJ_TE_NSTR_EMSG = `${XOBJ_TE_INVARG_EMSG} (a string expected)`;
|
|
21
|
+
const XOBJ_TE_NSTR_ECODE = 'ERR_XOBJ_NSTR';
|
|
22
|
+
const XOBJ_TE_NPOBJ_EMSG = `${XOBJ_TE_INVARG_EMSG} (a plain object expected)`;
|
|
23
|
+
const XOBJ_TE_NPOBJ_ECODE = 'ERR_XOBJ_NPOBJ';
|
|
19
24
|
const XOBJ_TE_ANES_EMSG = '<attr_name> must be a non-empty string';
|
|
25
|
+
const XOBJ_TE_ANES_ECODE = 'ERR_XOBJ_INVARG_ATTR';
|
|
20
26
|
const XOBJ_TE_KNES_EMSG = '<key_name> must be a non-empty string';
|
|
27
|
+
const XOBJ_TE_KNES_ECODE = 'ERR_XOBJ_INVARG_KEY';
|
|
21
28
|
|
|
22
29
|
const DEF_XML_PARSE_OPTIONS = {
|
|
23
30
|
compact: true,
|
|
@@ -46,74 +53,174 @@ const DEF_XML_PARSE_OPTIONS = {
|
|
|
46
53
|
|
|
47
54
|
// === module main block (function definitions) ===
|
|
48
55
|
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
function evalXObjEName(value){
|
|
57
|
+
let name = value;
|
|
58
|
+
if (!isNullOrUndef(name)) {
|
|
59
|
+
switch (typeof name) {
|
|
60
|
+
case 'number' : {
|
|
61
|
+
if (Number.isNaN(name) || name < 0) name = null;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case 'string' : {
|
|
65
|
+
name = name.trim();
|
|
66
|
+
if (name !== '') {
|
|
67
|
+
let value = Number(name);
|
|
68
|
+
if (!Number.isNaN(value)) {
|
|
69
|
+
name = value < 0 ? null : value;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
default: {
|
|
75
|
+
name = null;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
return name;
|
|
55
81
|
};
|
|
56
82
|
|
|
57
|
-
function
|
|
58
|
-
|
|
83
|
+
function getXObjElement(obj, name){
|
|
84
|
+
let err = null;
|
|
85
|
+
if (!isPlainObject(obj)) {
|
|
86
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
87
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
88
|
+
throw err;
|
|
89
|
+
};
|
|
90
|
+
if (typeof name !== 'string') {
|
|
91
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
92
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
93
|
+
throw err;
|
|
94
|
+
};
|
|
95
|
+
const key = name.trim();
|
|
96
|
+
if (key === '') {
|
|
97
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
98
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
99
|
+
throw err;
|
|
100
|
+
};
|
|
101
|
+
// TODO: [?] check type of obj[key_name]
|
|
102
|
+
return obj[key] !== undefined ? obj[key] : null;
|
|
59
103
|
};
|
|
60
104
|
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
isACCEPTED = true;
|
|
77
|
-
} else if (force_act) {
|
|
78
|
-
if (rip_oldies || !isPlainObject(obj[key])) obj[key] = {};
|
|
79
|
-
isACCEPTED = true;
|
|
80
|
-
} else {
|
|
81
|
-
isACCEPTED = isPlainObject(obj[key]);
|
|
105
|
+
function getXObjAttributes(obj, key = XOBJ_DEF_ATTR_TNAME){
|
|
106
|
+
let result = null;
|
|
107
|
+
try {
|
|
108
|
+
result = getXObjElement(obj, key);
|
|
109
|
+
} catch (err) {
|
|
110
|
+
switch (err.code) {
|
|
111
|
+
case XOBJ_TE_NSTR_ECODE :
|
|
112
|
+
case XOBJ_TE_KNES_ECODE : {
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
default: {
|
|
116
|
+
throw err;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
82
120
|
};
|
|
83
|
-
return
|
|
121
|
+
return isPlainObject(result) ? result : null;
|
|
84
122
|
};
|
|
85
123
|
|
|
86
124
|
function addXObjElement(obj, name){
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
125
|
+
let err = null;
|
|
126
|
+
if (!isPlainObject(obj)) {
|
|
127
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
128
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
129
|
+
throw err;
|
|
130
|
+
};
|
|
131
|
+
if (typeof name !== 'string') {
|
|
132
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
133
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
134
|
+
throw err;
|
|
135
|
+
};
|
|
136
|
+
const key = name.trim();
|
|
137
|
+
if (key === '') {
|
|
138
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
139
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
140
|
+
throw err;
|
|
141
|
+
};
|
|
142
|
+
const item = {};
|
|
90
143
|
let prop = obj[key];
|
|
91
|
-
let
|
|
92
|
-
|
|
93
|
-
// // TODO: consider wheter or not do ops if new_key exists
|
|
144
|
+
let isSUCCEED = false;
|
|
145
|
+
// // TODO: [?] consider wheter or not do ops if new_key exists
|
|
94
146
|
if (isNullOrUndef(prop)) {
|
|
95
|
-
obj[key] =
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
147
|
+
obj[key] = prop = item;
|
|
148
|
+
isSUCCEED = true;
|
|
149
|
+
} else if (isObject(prop)) {
|
|
150
|
+
isSUCCEED = true;
|
|
151
|
+
if (isArray(prop)) {
|
|
152
|
+
prop.push(item);
|
|
153
|
+
prop = item;
|
|
154
|
+
} else {
|
|
155
|
+
obj[key] = [ prop, item ];
|
|
156
|
+
prop = item;
|
|
157
|
+
};
|
|
106
158
|
};
|
|
107
159
|
return {
|
|
108
|
-
isSucceed:
|
|
109
|
-
item:
|
|
160
|
+
isSucceed: isSUCCEED,
|
|
161
|
+
item: isSUCCEED ? prop : null,
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
function insertXObjElement(obj, name, opt){
|
|
166
|
+
let err = null;
|
|
167
|
+
if (!isPlainObject(obj)) {
|
|
168
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
169
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
170
|
+
throw err;
|
|
171
|
+
};
|
|
172
|
+
if (typeof name !== 'string') {
|
|
173
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
174
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
175
|
+
throw err;
|
|
176
|
+
};
|
|
177
|
+
const key = name.trim();
|
|
178
|
+
if (key === '') {
|
|
179
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
180
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
181
|
+
throw err;
|
|
110
182
|
};
|
|
183
|
+
let _options = opt;
|
|
184
|
+
if (typeof opt === 'boolean') {
|
|
185
|
+
_options = { force: _options };
|
|
186
|
+
} else if (!isPlainObject(_options)) {
|
|
187
|
+
_options = {};
|
|
188
|
+
};
|
|
189
|
+
let { force, rip_oldies, ripOldies } = _options;
|
|
190
|
+
if (typeof force !== 'boolean') force = false;
|
|
191
|
+
if (ripOldies === undefined) ripOldies = rip_oldies;
|
|
192
|
+
if (typeof ripOldies !== 'boolean') ripOldies = false;
|
|
193
|
+
let prop = obj[key];
|
|
194
|
+
let isACCEPTED = (
|
|
195
|
+
isNullOrUndef(prop)
|
|
196
|
+
|| (force && (ripOldies || !isPlainObject(prop)))
|
|
197
|
+
);
|
|
198
|
+
if (isACCEPTED) {
|
|
199
|
+
obj[key] = prop = {};
|
|
200
|
+
} else {
|
|
201
|
+
isACCEPTED = isPlainObject(prop);
|
|
202
|
+
};
|
|
203
|
+
return isACCEPTED ? prop : null;
|
|
111
204
|
};
|
|
112
205
|
|
|
113
206
|
function deleteXObjElement(obj, name){
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
207
|
+
let err = null;
|
|
208
|
+
if (!isPlainObject(obj)) {
|
|
209
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
210
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
211
|
+
throw err;
|
|
212
|
+
};
|
|
213
|
+
if (typeof name !== 'string') {
|
|
214
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
215
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
216
|
+
throw err;
|
|
217
|
+
};
|
|
218
|
+
const key = name.trim();
|
|
219
|
+
if (key === '') {
|
|
220
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
221
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
222
|
+
throw err;
|
|
223
|
+
};
|
|
117
224
|
let result = false;
|
|
118
225
|
// // TODO: catch errors in strict mode
|
|
119
226
|
result = delete obj[key];
|
|
@@ -121,9 +228,23 @@ function deleteXObjElement(obj, name){
|
|
|
121
228
|
};
|
|
122
229
|
|
|
123
230
|
function deleteXObjElementEx(obj, name){
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
231
|
+
let err = null;
|
|
232
|
+
if (!isPlainObject(obj)) {
|
|
233
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
234
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
235
|
+
throw err;
|
|
236
|
+
};
|
|
237
|
+
if (typeof name !== 'string') {
|
|
238
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
239
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
240
|
+
throw err;
|
|
241
|
+
};
|
|
242
|
+
const key = name.trim();
|
|
243
|
+
if (key === '') {
|
|
244
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
245
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
246
|
+
throw err;
|
|
247
|
+
};
|
|
127
248
|
let prop = obj[key];
|
|
128
249
|
let result = false;
|
|
129
250
|
// // TODO: catch errors in strict mode
|
|
@@ -135,16 +256,29 @@ function deleteXObjElementEx(obj, name){
|
|
|
135
256
|
};
|
|
136
257
|
|
|
137
258
|
function renameXObjElement(obj, name, newName){
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
259
|
+
let err = null;
|
|
260
|
+
if (!isPlainObject(obj)) {
|
|
261
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
262
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
263
|
+
throw err;
|
|
264
|
+
};
|
|
265
|
+
if (typeof name !== 'string' || typeof newName !== 'string') {
|
|
266
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
267
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
268
|
+
throw err;
|
|
269
|
+
};
|
|
270
|
+
const key = name.trim();
|
|
271
|
+
const newKey = newName.trim();
|
|
272
|
+
if (key === '' || newKey === '') {
|
|
273
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
274
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
275
|
+
throw err;
|
|
276
|
+
};
|
|
277
|
+
const prop = obj[key];
|
|
144
278
|
let result = false;
|
|
145
|
-
// // TODO: consider wheter or not do ops if new_key exists
|
|
146
279
|
if (prop !== undefined) {
|
|
147
|
-
if (key === newKey) return isObject(prop)
|
|
280
|
+
if (key === newKey) return isObject(prop);
|
|
281
|
+
// // TODO: consider wheter or not do ops if new_key exists
|
|
148
282
|
// // TODO: catch errors in strict mode
|
|
149
283
|
result = delete obj[key];
|
|
150
284
|
if (result) {
|
|
@@ -154,252 +288,650 @@ function renameXObjElement(obj, name, newName){
|
|
|
154
288
|
return result;
|
|
155
289
|
};
|
|
156
290
|
|
|
157
|
-
function
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
|
|
291
|
+
function checkXObjAttribute(obj, attr = '', key){
|
|
292
|
+
if (typeof attr !== 'string') {
|
|
293
|
+
let err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
294
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
295
|
+
throw err;
|
|
296
|
+
};
|
|
297
|
+
let objAttr = null;
|
|
298
|
+
try {
|
|
299
|
+
objAttr = getXObjAttributes(obj, key);
|
|
300
|
+
} catch (err) {
|
|
301
|
+
throw err;
|
|
302
|
+
};
|
|
303
|
+
const attrName = attr.trim();
|
|
304
|
+
let result = false;
|
|
305
|
+
if (
|
|
306
|
+
objAttr !== null
|
|
307
|
+
&& attrName !== ''
|
|
308
|
+
&& objAttr[attrName] !== undefined
|
|
309
|
+
) {
|
|
310
|
+
result = true;
|
|
311
|
+
};
|
|
312
|
+
return result;
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
function deleteXObjAttribute(obj, attr = '', key){
|
|
316
|
+
if (typeof attr !== 'string') {
|
|
317
|
+
let err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
318
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
319
|
+
throw err;
|
|
320
|
+
};
|
|
321
|
+
let objAttr = null;
|
|
322
|
+
try {
|
|
323
|
+
objAttr = getXObjAttributes(obj, key);
|
|
324
|
+
} catch (err) {
|
|
325
|
+
throw err;
|
|
326
|
+
};
|
|
327
|
+
const attrName = attr.trim();
|
|
328
|
+
let result = false;
|
|
329
|
+
if (objAttr !== null && attrName !== '') {
|
|
330
|
+
// // TODO: catch errors in strict mode
|
|
331
|
+
result = delete objAttr[attrName];
|
|
332
|
+
};
|
|
333
|
+
return result;
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
function readXObjParamRaw(obj, key = XOBJ_DEF_PARAM_TNAME){
|
|
337
|
+
let err = null;
|
|
338
|
+
if (!isPlainObject(obj)) {
|
|
339
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
340
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
341
|
+
throw err;
|
|
342
|
+
};
|
|
343
|
+
if (typeof key !== 'string') {
|
|
344
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
345
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
346
|
+
throw err;
|
|
347
|
+
};
|
|
348
|
+
const _key = key.trim();
|
|
349
|
+
return _key !== '' ? obj[_key] : undefined;
|
|
161
350
|
};
|
|
162
351
|
|
|
163
|
-
function writeXObjParamRaw(obj, value,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
352
|
+
function writeXObjParamRaw(obj, value, key = XOBJ_DEF_PARAM_TNAME){
|
|
353
|
+
let err = null;
|
|
354
|
+
if (!isPlainObject(obj)) {
|
|
355
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
356
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
357
|
+
throw err;
|
|
358
|
+
};
|
|
359
|
+
if (typeof key !== 'string') {
|
|
360
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
361
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
362
|
+
throw err;
|
|
363
|
+
};
|
|
364
|
+
const _key = key.trim();
|
|
365
|
+
let isSUCCEED = false;
|
|
366
|
+
if (_key !== '' && value !== undefined){
|
|
367
|
+
obj[_key] = value;
|
|
368
|
+
isSUCCEED = true;
|
|
369
|
+
};
|
|
370
|
+
return isSUCCEED;
|
|
169
371
|
};
|
|
170
372
|
|
|
171
|
-
function readXObjAttrRaw(obj, attr
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
373
|
+
function readXObjAttrRaw(obj, attr = '', key){
|
|
374
|
+
if (typeof attr !== 'string') {
|
|
375
|
+
let err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
376
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
377
|
+
throw err;
|
|
378
|
+
};
|
|
379
|
+
let objAttr = null;
|
|
380
|
+
try {
|
|
381
|
+
objAttr = getXObjAttributes(obj, key);
|
|
382
|
+
} catch (err) {
|
|
383
|
+
throw err;
|
|
384
|
+
};
|
|
385
|
+
const attrName = attr.trim();
|
|
386
|
+
if (objAttr !== null && attrName !== '') return objAttr[attrName];
|
|
176
387
|
};
|
|
177
388
|
|
|
178
|
-
function writeXObjAttrRaw(obj, attr, value,
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
389
|
+
function writeXObjAttrRaw(obj, attr = '', value, key = XOBJ_DEF_ATTR_TNAME){
|
|
390
|
+
if (typeof attr !== 'string') {
|
|
391
|
+
let err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
392
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
393
|
+
throw err;
|
|
394
|
+
};
|
|
395
|
+
const attrName = attr.trim();
|
|
396
|
+
let objAttr = null;
|
|
397
|
+
let isSUCCEED = false;
|
|
398
|
+
if (attrName !== '' && value !== undefined) {
|
|
399
|
+
try {
|
|
400
|
+
objAttr = insertXObjElement(obj, key, { force: true });
|
|
401
|
+
} catch (err) {
|
|
402
|
+
switch (err.code) {
|
|
403
|
+
case XOBJ_TE_NSTR_ECODE :
|
|
404
|
+
case XOBJ_TE_KNES_ECODE : {
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
default: {
|
|
408
|
+
throw err;
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
};
|
|
413
|
+
if (objAttr !== null) {
|
|
414
|
+
objAttr[attrName] = value;
|
|
415
|
+
isSUCCEED = true;
|
|
416
|
+
};
|
|
187
417
|
};
|
|
188
|
-
return
|
|
418
|
+
return isSUCCEED;
|
|
189
419
|
};
|
|
190
420
|
|
|
191
|
-
function readXObjParam(obj,
|
|
192
|
-
|
|
193
|
-
|
|
421
|
+
function readXObjParam(obj, key){
|
|
422
|
+
let result = undefined;
|
|
423
|
+
try {
|
|
424
|
+
result = readXObjParamRaw(obj, key);
|
|
425
|
+
} catch (err) {
|
|
426
|
+
switch (err.code) {
|
|
427
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
default: {
|
|
431
|
+
throw err;
|
|
432
|
+
break;
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
};
|
|
436
|
+
return readAsString(result, {
|
|
194
437
|
useTrim: false,
|
|
195
438
|
numberToString: true,
|
|
196
439
|
boolToString: true,
|
|
197
440
|
});
|
|
198
441
|
};
|
|
199
442
|
|
|
200
|
-
function readXObjParamAsBool(obj, defValue
|
|
201
|
-
|
|
202
|
-
|
|
443
|
+
function readXObjParamAsBool(obj, defValue, key){
|
|
444
|
+
let result = undefined;
|
|
445
|
+
try {
|
|
446
|
+
result = readXObjParamRaw(obj, key);
|
|
447
|
+
} catch (err) {
|
|
448
|
+
switch (err.code) {
|
|
449
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
450
|
+
break;
|
|
451
|
+
}
|
|
452
|
+
default: {
|
|
453
|
+
throw err;
|
|
454
|
+
break;
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
};
|
|
458
|
+
return readAsBoolEx(result, defValue);
|
|
203
459
|
};
|
|
204
460
|
|
|
205
|
-
function readXObjParamAsNum(obj, defValue
|
|
206
|
-
|
|
207
|
-
|
|
461
|
+
function readXObjParamAsNum(obj, defValue, key){
|
|
462
|
+
let result = undefined;
|
|
463
|
+
try {
|
|
464
|
+
result = readXObjParamRaw(obj, key);
|
|
465
|
+
} catch (err) {
|
|
466
|
+
switch (err.code) {
|
|
467
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
default: {
|
|
471
|
+
throw err;
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
};
|
|
475
|
+
};
|
|
476
|
+
return readAsNumberEx(result, defValue);
|
|
208
477
|
};
|
|
209
478
|
|
|
210
|
-
function readXObjParamAsStr(obj, defValue
|
|
211
|
-
|
|
212
|
-
|
|
479
|
+
function readXObjParamAsStr(obj, defValue, key){
|
|
480
|
+
let result = undefined;
|
|
481
|
+
try {
|
|
482
|
+
result = readXObjParamRaw(obj, key);
|
|
483
|
+
} catch (err) {
|
|
484
|
+
switch (err.code) {
|
|
485
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
default: {
|
|
489
|
+
throw err;
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
};
|
|
494
|
+
return readAsString(result, defValue, {
|
|
213
495
|
useTrim: false,
|
|
214
496
|
numberToString: true,
|
|
215
497
|
boolToString: true,
|
|
216
498
|
});
|
|
217
499
|
};
|
|
218
500
|
|
|
219
|
-
function readXObjParamAsIndex(obj,
|
|
220
|
-
|
|
501
|
+
function readXObjParamAsIndex(obj, key){
|
|
502
|
+
let result = undefined;
|
|
503
|
+
try {
|
|
504
|
+
result = readXObjParamRaw(obj, key);
|
|
505
|
+
} catch (err) {
|
|
506
|
+
switch (err.code) {
|
|
507
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
508
|
+
break;
|
|
509
|
+
}
|
|
510
|
+
default: {
|
|
511
|
+
throw err;
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
};
|
|
515
|
+
};
|
|
516
|
+
return valueToIndex(result);
|
|
221
517
|
};
|
|
222
518
|
|
|
223
|
-
function writeXObjParam(obj, value,
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
519
|
+
function writeXObjParam(obj, value, key){
|
|
520
|
+
let isSUCCEED = false;
|
|
521
|
+
if (value !== undefined) {
|
|
522
|
+
const _value = readAsString(value, {
|
|
523
|
+
useTrim: false,
|
|
524
|
+
numberToString: true,
|
|
525
|
+
boolToString: true,
|
|
526
|
+
});
|
|
527
|
+
try {
|
|
528
|
+
isSUCCEED = writeXObjParamRaw(obj, _value, key);
|
|
529
|
+
} catch (err) {
|
|
530
|
+
switch (err.code) {
|
|
531
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
532
|
+
break;
|
|
533
|
+
}
|
|
534
|
+
default: {
|
|
535
|
+
throw err;
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
};
|
|
540
|
+
};
|
|
541
|
+
return isSUCCEED;
|
|
230
542
|
};
|
|
231
543
|
|
|
232
|
-
function writeXObjParamAsBool(obj, value, defValue
|
|
233
|
-
|
|
234
|
-
|
|
544
|
+
function writeXObjParamAsBool(obj, value, defValue, key){
|
|
545
|
+
let isSUCCEED = false;
|
|
546
|
+
if (value !== undefined) {
|
|
547
|
+
const _value = readAsBoolEx(value, defValue).toString();
|
|
548
|
+
try {
|
|
549
|
+
isSUCCEED = writeXObjParamRaw(obj, _value, key);
|
|
550
|
+
} catch (err) {
|
|
551
|
+
switch (err.code) {
|
|
552
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
553
|
+
break;
|
|
554
|
+
}
|
|
555
|
+
default: {
|
|
556
|
+
throw err;
|
|
557
|
+
break;
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
};
|
|
561
|
+
};
|
|
562
|
+
return isSUCCEED;
|
|
235
563
|
};
|
|
236
564
|
|
|
237
|
-
function writeXObjParamAsNum(obj, value, defValue
|
|
238
|
-
|
|
239
|
-
|
|
565
|
+
function writeXObjParamAsNum(obj, value, defValue, key){
|
|
566
|
+
let isSUCCEED = false;
|
|
567
|
+
if (value !== undefined) {
|
|
568
|
+
const _value = readAsNumberEx(value, defValue).toString();
|
|
569
|
+
try {
|
|
570
|
+
isSUCCEED = writeXObjParamRaw(obj, _value, key);
|
|
571
|
+
} catch (err) {
|
|
572
|
+
switch (err.code) {
|
|
573
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
574
|
+
break;
|
|
575
|
+
}
|
|
576
|
+
default: {
|
|
577
|
+
throw err;
|
|
578
|
+
break;
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
};
|
|
582
|
+
};
|
|
583
|
+
return isSUCCEED;
|
|
240
584
|
};
|
|
241
585
|
|
|
242
|
-
function writeXObjParamAsIndex(obj, value,
|
|
243
|
-
|
|
244
|
-
|
|
586
|
+
function writeXObjParamAsIndex(obj, value, key){
|
|
587
|
+
let isSUCCEED = false;
|
|
588
|
+
if (value !== undefined) {
|
|
589
|
+
const _value = valueToIndex(value).toString();
|
|
590
|
+
try {
|
|
591
|
+
isSUCCEED = writeXObjParamRaw(obj, _value, key);
|
|
592
|
+
} catch (err) {
|
|
593
|
+
switch (err.code) {
|
|
594
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
595
|
+
break;
|
|
596
|
+
}
|
|
597
|
+
default: {
|
|
598
|
+
throw err;
|
|
599
|
+
break;
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
};
|
|
603
|
+
};
|
|
604
|
+
return isSUCCEED;
|
|
245
605
|
};
|
|
246
606
|
|
|
247
|
-
function writeXObjParamEx(obj, value, defValue,
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
607
|
+
function writeXObjParamEx(obj, value, defValue, key){
|
|
608
|
+
let isSUCCEED = false;
|
|
609
|
+
if (value !== undefined) {
|
|
610
|
+
const _defValue = readAsString(defValue, {
|
|
611
|
+
useTrim: false,
|
|
612
|
+
numberToString: true,
|
|
613
|
+
boolToString: true,
|
|
614
|
+
});
|
|
615
|
+
const _value = readAsString(value, _defValue, {
|
|
616
|
+
useTrim: false,
|
|
617
|
+
numberToString: true,
|
|
618
|
+
boolToString: true,
|
|
619
|
+
});
|
|
620
|
+
try {
|
|
621
|
+
isSUCCEED = writeXObjParamRaw(obj, _value, key);
|
|
622
|
+
} catch (err) {
|
|
623
|
+
switch (err.code) {
|
|
624
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
625
|
+
break;
|
|
626
|
+
}
|
|
627
|
+
default: {
|
|
628
|
+
throw err;
|
|
629
|
+
break;
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
};
|
|
633
|
+
};
|
|
634
|
+
return isSUCCEED;
|
|
259
635
|
};
|
|
260
636
|
|
|
261
|
-
function readXObjAttr(obj,
|
|
262
|
-
|
|
263
|
-
|
|
637
|
+
function readXObjAttr(obj, attr, key){
|
|
638
|
+
let result = undefined;
|
|
639
|
+
try {
|
|
640
|
+
result = readXObjAttrRaw(obj, attr, key);
|
|
641
|
+
} catch (err) {
|
|
642
|
+
switch (err.code) {
|
|
643
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
644
|
+
break;
|
|
645
|
+
}
|
|
646
|
+
default: {
|
|
647
|
+
throw err;
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
650
|
+
};
|
|
651
|
+
};
|
|
652
|
+
return readAsString(result, {
|
|
264
653
|
useTrim: true,
|
|
265
654
|
numberToString: true,
|
|
266
655
|
boolToString: true,
|
|
267
656
|
});
|
|
268
657
|
};
|
|
269
658
|
|
|
270
|
-
function readXObjAttrAsBool(obj,
|
|
271
|
-
|
|
272
|
-
|
|
659
|
+
function readXObjAttrAsBool(obj, attr, defValue, key){
|
|
660
|
+
let result = undefined;
|
|
661
|
+
try {
|
|
662
|
+
result = readXObjAttrRaw(obj, attr, key);
|
|
663
|
+
} catch (err) {
|
|
664
|
+
switch (err.code) {
|
|
665
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
666
|
+
break;
|
|
667
|
+
}
|
|
668
|
+
default: {
|
|
669
|
+
throw err;
|
|
670
|
+
break;
|
|
671
|
+
}
|
|
672
|
+
};
|
|
673
|
+
};
|
|
674
|
+
return readAsBoolEx(result, defValue);
|
|
273
675
|
};
|
|
274
676
|
|
|
275
|
-
function readXObjAttrAsNum(obj,
|
|
276
|
-
|
|
277
|
-
|
|
677
|
+
function readXObjAttrAsNum(obj, attr, defValue, key){
|
|
678
|
+
let result = undefined;
|
|
679
|
+
try {
|
|
680
|
+
result = readXObjAttrRaw(obj, attr, key);
|
|
681
|
+
} catch (err) {
|
|
682
|
+
switch (err.code) {
|
|
683
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
684
|
+
break;
|
|
685
|
+
}
|
|
686
|
+
default: {
|
|
687
|
+
throw err;
|
|
688
|
+
break;
|
|
689
|
+
}
|
|
690
|
+
};
|
|
691
|
+
};
|
|
692
|
+
return readAsNumberEx(result, defValue);
|
|
278
693
|
};
|
|
279
694
|
|
|
280
|
-
function readXObjAttrAsStr(obj,
|
|
281
|
-
|
|
282
|
-
|
|
695
|
+
function readXObjAttrAsStr(obj, attr, defValue, key){
|
|
696
|
+
let result = undefined;
|
|
697
|
+
try {
|
|
698
|
+
result = readXObjAttrRaw(obj, attr, key);
|
|
699
|
+
} catch (err) {
|
|
700
|
+
switch (err.code) {
|
|
701
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
702
|
+
break;
|
|
703
|
+
}
|
|
704
|
+
default: {
|
|
705
|
+
throw err;
|
|
706
|
+
break;
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
};
|
|
710
|
+
return readAsString(result, defValue, {
|
|
283
711
|
useTrim: true,
|
|
284
712
|
numberToString: true,
|
|
285
713
|
boolToString: true,
|
|
286
714
|
});
|
|
287
715
|
};
|
|
288
716
|
|
|
289
|
-
function readXObjAttrAsIndex(obj,
|
|
290
|
-
|
|
717
|
+
function readXObjAttrAsIndex(obj, attr, key){
|
|
718
|
+
let result = undefined;
|
|
719
|
+
try {
|
|
720
|
+
result = readXObjAttrRaw(obj, attr, key);
|
|
721
|
+
} catch (err) {
|
|
722
|
+
switch (err.code) {
|
|
723
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
724
|
+
break;
|
|
725
|
+
}
|
|
726
|
+
default: {
|
|
727
|
+
throw err;
|
|
728
|
+
break;
|
|
729
|
+
}
|
|
730
|
+
};
|
|
731
|
+
};
|
|
732
|
+
return valueToIndex(result);
|
|
291
733
|
};
|
|
292
734
|
|
|
293
|
-
function writeXObjAttr(obj,
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
735
|
+
function writeXObjAttr(obj, attr, value, key){
|
|
736
|
+
let isSUCCEED = false;
|
|
737
|
+
if (value !== undefined) {
|
|
738
|
+
const _value = readAsString(value, {
|
|
739
|
+
useTrim: true,
|
|
740
|
+
numberToString: true,
|
|
741
|
+
boolToString: true,
|
|
742
|
+
});
|
|
743
|
+
try {
|
|
744
|
+
isSUCCEED = writeXObjAttrRaw(obj, attr, _value, key);
|
|
745
|
+
} catch (err) {
|
|
746
|
+
switch (err.code) {
|
|
747
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
748
|
+
break;
|
|
749
|
+
}
|
|
750
|
+
default: {
|
|
751
|
+
throw err;
|
|
752
|
+
break;
|
|
753
|
+
}
|
|
754
|
+
};
|
|
755
|
+
};
|
|
756
|
+
};
|
|
757
|
+
return isSUCCEED;
|
|
300
758
|
};
|
|
301
759
|
|
|
302
|
-
function writeXObjAttrAsBool(obj,
|
|
303
|
-
|
|
304
|
-
|
|
760
|
+
function writeXObjAttrAsBool(obj, attr, value, defValue, key){
|
|
761
|
+
let isSUCCEED = false;
|
|
762
|
+
if (value !== undefined) {
|
|
763
|
+
const _value = readAsBoolEx(value, defValue).toString();
|
|
764
|
+
try {
|
|
765
|
+
isSUCCEED = writeXObjAttrRaw(obj, attr, _value, key);
|
|
766
|
+
} catch (err) {
|
|
767
|
+
switch (err.code) {
|
|
768
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
769
|
+
break;
|
|
770
|
+
}
|
|
771
|
+
default: {
|
|
772
|
+
throw err;
|
|
773
|
+
break;
|
|
774
|
+
}
|
|
775
|
+
};
|
|
776
|
+
};
|
|
777
|
+
};
|
|
778
|
+
return isSUCCEED;
|
|
305
779
|
};
|
|
306
780
|
|
|
307
|
-
function writeXObjAttrAsNum(obj,
|
|
308
|
-
|
|
309
|
-
|
|
781
|
+
function writeXObjAttrAsNum(obj, attr, value, defValue, key){
|
|
782
|
+
let isSUCCEED = false;
|
|
783
|
+
if (value !== undefined) {
|
|
784
|
+
const _value = readAsNumberEx(value, defValue).toString();
|
|
785
|
+
try {
|
|
786
|
+
isSUCCEED = writeXObjAttrRaw(obj, attr, _value, key);
|
|
787
|
+
} catch (err) {
|
|
788
|
+
switch (err.code) {
|
|
789
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
790
|
+
break;
|
|
791
|
+
}
|
|
792
|
+
default: {
|
|
793
|
+
throw err;
|
|
794
|
+
break;
|
|
795
|
+
}
|
|
796
|
+
};
|
|
797
|
+
};
|
|
798
|
+
};
|
|
799
|
+
return isSUCCEED;
|
|
310
800
|
};
|
|
311
801
|
|
|
312
|
-
function writeXObjAttrAsIndex(obj,
|
|
313
|
-
|
|
314
|
-
|
|
802
|
+
function writeXObjAttrAsIndex(obj, attr, value, key){
|
|
803
|
+
let isSUCCEED = false;
|
|
804
|
+
if (value !== undefined) {
|
|
805
|
+
const _value = valueToIndex(value).toString();
|
|
806
|
+
try {
|
|
807
|
+
isSUCCEED = writeXObjAttrRaw(obj, attr, _value, key);
|
|
808
|
+
} catch (err) {
|
|
809
|
+
switch (err.code) {
|
|
810
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
811
|
+
break;
|
|
812
|
+
}
|
|
813
|
+
default: {
|
|
814
|
+
throw err;
|
|
815
|
+
break;
|
|
816
|
+
}
|
|
817
|
+
};
|
|
818
|
+
};
|
|
819
|
+
};
|
|
820
|
+
return isSUCCEED;
|
|
315
821
|
};
|
|
316
822
|
|
|
317
|
-
function writeXObjAttrEx(obj,
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
823
|
+
function writeXObjAttrEx(obj, attr, value, defValue, key){
|
|
824
|
+
let isSUCCEED = false;
|
|
825
|
+
if (value !== undefined) {
|
|
826
|
+
const _defValue = readAsString(defValue, {
|
|
827
|
+
useTrim: true,
|
|
828
|
+
numberToString: true,
|
|
829
|
+
boolToString: true,
|
|
830
|
+
});
|
|
831
|
+
const _value = readAsString(value, _defValue, {
|
|
832
|
+
useTrim: true,
|
|
833
|
+
numberToString: true,
|
|
834
|
+
boolToString: true,
|
|
835
|
+
});
|
|
836
|
+
try {
|
|
837
|
+
isSUCCEED = writeXObjAttrRaw(obj, attr, _value, key);
|
|
838
|
+
} catch (err) {
|
|
839
|
+
switch (err.code) {
|
|
840
|
+
case XOBJ_TE_NSTR_ECODE : {
|
|
841
|
+
break;
|
|
842
|
+
}
|
|
843
|
+
default: {
|
|
844
|
+
throw err;
|
|
845
|
+
break;
|
|
846
|
+
}
|
|
847
|
+
};
|
|
848
|
+
};
|
|
849
|
+
};
|
|
850
|
+
return isSUCCEED;
|
|
329
851
|
};
|
|
330
852
|
|
|
331
853
|
function insertXObjElements(obj, ...args){
|
|
332
|
-
if (!isPlainObject(obj))
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
if (args_len > 0) {
|
|
337
|
-
let pos = args_len-1;
|
|
338
|
-
if (typeof args[pos] === 'boolean') {
|
|
339
|
-
opt.force = args.pop();
|
|
340
|
-
} else if (isPlainObject(args[pos])) {
|
|
341
|
-
opt = args.pop();
|
|
342
|
-
};
|
|
854
|
+
if (!isPlainObject(obj)) {
|
|
855
|
+
let err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
856
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
857
|
+
throw err;
|
|
343
858
|
};
|
|
344
|
-
const
|
|
859
|
+
const len = args.length;
|
|
860
|
+
const hasOpt = len > 0 && isPlainObject(args[len - 1]);
|
|
861
|
+
const opt = hasOpt ? args.pop() : {};
|
|
862
|
+
const names = readAsListS({
|
|
345
863
|
trim: true,
|
|
346
864
|
keep_empty: false,
|
|
347
865
|
}, ...args);
|
|
348
|
-
|
|
349
|
-
|
|
866
|
+
let count = 0;
|
|
867
|
+
for (let key of names) {
|
|
868
|
+
if (insertXObjElement(obj, key, opt) !== null) count++;
|
|
350
869
|
};
|
|
351
870
|
return count;
|
|
352
871
|
};
|
|
353
872
|
|
|
354
873
|
function insertXObjEList(obj, name, opt){
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
874
|
+
let err = null;
|
|
875
|
+
if (!isPlainObject(obj)) {
|
|
876
|
+
err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
877
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
878
|
+
throw err;
|
|
879
|
+
};
|
|
880
|
+
if (typeof name !== 'string') {
|
|
881
|
+
err = new TypeError(XOBJ_TE_NSTR_EMSG);
|
|
882
|
+
err.code = XOBJ_TE_NSTR_ECODE;
|
|
883
|
+
throw err;
|
|
884
|
+
};
|
|
885
|
+
const key = name.trim();
|
|
886
|
+
if (key === '') {
|
|
887
|
+
err = new TypeError(XOBJ_TE_KNES_EMSG);
|
|
888
|
+
err.code = XOBJ_TE_KNES_ECODE;
|
|
889
|
+
throw err;
|
|
890
|
+
};
|
|
891
|
+
let _options = opt;
|
|
360
892
|
if (typeof opt === 'boolean') {
|
|
361
|
-
|
|
362
|
-
} else if (isPlainObject(
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
if (
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
893
|
+
_options = { force: _options };
|
|
894
|
+
} else if (!isPlainObject(_options)) {
|
|
895
|
+
_options = {};
|
|
896
|
+
};
|
|
897
|
+
let { force, rip_oldies, ripOldies } = _options;
|
|
898
|
+
if (typeof force !== 'boolean') force = false;
|
|
899
|
+
if (ripOldies === undefined) ripOldies = rip_oldies;
|
|
900
|
+
if (typeof ripOldies !== 'boolean') ripOldies = false;
|
|
901
|
+
let item = obj[key];
|
|
902
|
+
let isACCEPTED = (
|
|
903
|
+
isNullOrUndef(item)
|
|
904
|
+
|| (force && (ripOldies || !isArray(item)))
|
|
905
|
+
);
|
|
906
|
+
if (isACCEPTED) {
|
|
907
|
+
obj[key] = item = [];
|
|
373
908
|
} else {
|
|
374
|
-
isACCEPTED = isArray(
|
|
375
|
-
if (!isACCEPTED && isPlainObject(
|
|
376
|
-
obj[key] =
|
|
909
|
+
isACCEPTED = isArray(item);
|
|
910
|
+
if (!isACCEPTED && isPlainObject(item)) {
|
|
911
|
+
obj[key] = item = [ item ];
|
|
377
912
|
isACCEPTED = true;
|
|
378
913
|
};
|
|
379
914
|
};
|
|
380
|
-
return isACCEPTED ?
|
|
915
|
+
return isACCEPTED ? item : null;
|
|
381
916
|
};
|
|
382
917
|
|
|
383
918
|
function insertXObjEChain(obj, ...args){
|
|
384
|
-
if (!isPlainObject(obj))
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
let pos = args_len-1;
|
|
389
|
-
if (typeof args[pos] === 'boolean') {
|
|
390
|
-
opt.force = args.pop();
|
|
391
|
-
} else if (isPlainObject(args[pos])) {
|
|
392
|
-
opt = args.pop();
|
|
393
|
-
};
|
|
919
|
+
if (!isPlainObject(obj)) {
|
|
920
|
+
let err = new TypeError(XOBJ_TE_NPOBJ_EMSG);
|
|
921
|
+
err.code = XOBJ_TE_NPOBJ_ECODE;
|
|
922
|
+
throw err;
|
|
394
923
|
};
|
|
395
|
-
|
|
924
|
+
const len = args.length;
|
|
925
|
+
const hasOpt = len > 0 && isPlainObject(args[len - 1]);
|
|
926
|
+
const opt = hasOpt ? args.pop() : {};
|
|
927
|
+
const names = readAsListS({
|
|
396
928
|
trim: true,
|
|
397
929
|
keep_empty: false,
|
|
398
930
|
}, ...args);
|
|
399
931
|
let curObj = obj;
|
|
400
932
|
let isSUCCEED = false;
|
|
401
|
-
for (let
|
|
402
|
-
obj = insertXObjElement(obj,
|
|
933
|
+
for (let key of names) {
|
|
934
|
+
obj = insertXObjElement(obj, key, opt);
|
|
403
935
|
isSUCCEED = isPlainObject(obj);
|
|
404
936
|
if (!isSUCCEED) break;
|
|
405
937
|
curObj = obj;
|
|
@@ -508,6 +1040,8 @@ exports.DEF_XML_PARSE_OPTIONS = DEF_XML_PARSE_OPTIONS;
|
|
|
508
1040
|
|
|
509
1041
|
exports.TXmlContentParseOptions = TXmlContentParseOptions;
|
|
510
1042
|
|
|
1043
|
+
exports.evalXObjEName = evalXObjEName;
|
|
1044
|
+
|
|
511
1045
|
exports.readXObjParamRaw = readXObjParamRaw;
|
|
512
1046
|
exports.readXObjParam = readXObjParam;
|
|
513
1047
|
exports.readXObjParamAsBool = readXObjParamAsBool;
|
|
@@ -535,6 +1069,8 @@ exports.writeXObjAttrAsIndex = writeXObjAttrAsIndex;
|
|
|
535
1069
|
exports.writeXObjAttrEx = writeXObjAttrEx;
|
|
536
1070
|
|
|
537
1071
|
exports.getXObjAttributes = getXObjAttributes;
|
|
1072
|
+
exports.checkXObjAttribute = checkXObjAttribute;
|
|
1073
|
+
exports.deleteXObjAttribute = deleteXObjAttribute;
|
|
538
1074
|
|
|
539
1075
|
exports.getXObjElement = getXObjElement;
|
|
540
1076
|
exports.insertXObjElement = insertXObjElement;
|