@xuda.io/xuda-dbs-plugin-xuda 1.0.312 → 1.0.314

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.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/server.js +1 -1
  3. package/studio.mjs +102 -209
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuda.io/xuda-dbs-plugin-xuda",
3
- "version": "1.0.312",
3
+ "version": "1.0.314",
4
4
  "description": "Xuda Database Socket for Xuda's proprietary structure powered by CouchDB",
5
5
  "scripts": {
6
6
  "pub": "npm version patch --force && npm publish --access public"
package/server.js CHANGED
@@ -337,7 +337,7 @@ const get_opt = function (e, table_obj) {
337
337
  }
338
338
 
339
339
  if (e.dataSourceFilterModelType === 'query' && e.filterModelMongo) {
340
- selector_new['$and'] = [replaceRegexOptions(replaceKeysInQuery(JSON.parse(e.filterModelMongo)))];
340
+ selector_new['$and'] = [replaceRegexOptions(replaceKeysInQuery(e.filterModelMongo === 'string' ? JSON.parse(e.filterModelMongo) : e.filterModelMongo))];
341
341
  }
342
342
 
343
343
  const _filterModelUserMongo = typeof e.filterModelUserMongo === 'string' ? JSON.parse(e.filterModelUserMongo) : e.filterModelUserMongo;
package/studio.mjs CHANGED
@@ -12,46 +12,37 @@ const check_unique = async function (e, docP, table_obj, db) {
12
12
 
13
13
  if (
14
14
  validate_unique_index_exist() &&
15
- (typeof func === "undefined" || // call from studio
15
+ (typeof func === 'undefined' || // call from studio
16
16
  !e.full_table_downloaded)
17
17
  ) {
18
18
  const SESSION_ID = Object.keys(SESSION_OBJ)[0];
19
- const ret = await func.common.perform_rpi_request(
20
- SESSION_ID,
21
- "dbs_check_unique",
22
- {},
23
- { ...e, doc: docP }
24
- );
19
+ const ret = await func.common.perform_rpi_request(SESSION_ID, 'dbs_check_unique', {}, { ...e, doc: docP });
25
20
  return ret || { code: -1, data: {} };
26
21
  }
27
22
 
28
23
  const local = async function () {
29
24
  var len = docP.udfIndex.length;
30
25
  if (!len) {
31
- return { code: -11, data: "table must have primary index" };
26
+ return { code: -11, data: 'table must have primary index' };
32
27
  }
33
28
  var found_unique = undefined;
34
- var ret = { code: 1, data: "ok" };
29
+ var ret = { code: 1, data: 'ok' };
35
30
 
36
31
  for await (var val of docP.udfIndex) {
37
32
  if (!table_obj.tableIndexes) {
38
33
  ret = {
39
34
  code: -14,
40
- data: "table definition missing for: " + val.fileId,
35
+ data: 'table definition missing for: ' + val.fileId,
41
36
  };
42
37
  break;
43
38
  }
44
39
 
45
- const table_index = find_item_by_key_root(
46
- table_obj.tableIndexes,
47
- "id",
48
- val.indexId
49
- );
40
+ const table_index = find_item_by_key_root(table_obj.tableIndexes, 'id', val.indexId);
50
41
 
51
42
  if (!table_index) {
52
43
  ret = {
53
44
  code: -13,
54
- data: "keys definition missing for Table: " + val.fileId,
45
+ data: 'keys definition missing for Table: ' + val.fileId,
55
46
  };
56
47
  break;
57
48
  }
@@ -62,7 +53,7 @@ const check_unique = async function (e, docP, table_obj, db) {
62
53
  if (!table_index?.data?.keys || _.isEmpty(table_index.data.keys)) {
63
54
  ret = {
64
55
  code: -14,
65
- data: "keys definition missing for index: " + val.indexId,
56
+ data: 'keys definition missing for index: ' + val.indexId,
66
57
  };
67
58
  break;
68
59
  }
@@ -72,30 +63,14 @@ const check_unique = async function (e, docP, table_obj, db) {
72
63
 
73
64
  for await (const [keySegment, valSegment] of Object.entries(keysArr)) {
74
65
  // run on key segment
75
- let _fieldType = find_item_by_key(
76
- table_obj.tableFields,
77
- "field_id",
78
- valSegment
79
- ).props.fieldType;
80
- let _val = await get_cast_val(
81
- "check_unique",
82
- valSegment,
83
- _fieldType,
84
- val.keyValue[Number(keySegment)]
85
- );
66
+ let _fieldType = find_item_by_key(table_obj.tableFields, 'field_id', valSegment).props.fieldType;
67
+ let _val = await get_cast_val('check_unique', valSegment, _fieldType, val.keyValue[Number(keySegment)]);
86
68
  keyValue.push(_val);
87
69
  }
88
70
 
89
- var key =
90
- '["' +
91
- val.fileId +
92
- '","' +
93
- val.indexId +
94
- '",[' +
95
- keyValue.join(",") +
96
- "]]";
71
+ var key = '["' + val.fileId + '","' + val.indexId + '",[' + keyValue.join(',') + ']]';
97
72
  try {
98
- e.view = "db_index";
73
+ e.view = 'db_index';
99
74
  const ret = await query_db(e, db, table_obj);
100
75
  const json = ret.data;
101
76
 
@@ -110,12 +85,12 @@ const check_unique = async function (e, docP, table_obj, db) {
110
85
  }
111
86
  }
112
87
  if (found_unique) {
113
- throw "error checking unique:" + key;
88
+ throw 'error checking unique:' + key;
114
89
  }
115
90
  }
116
91
  }
117
92
  // throw json.data;
118
- return { code: 1, data: "ok" };
93
+ return { code: 1, data: 'ok' };
119
94
  } catch (msg) {
120
95
  console.error(msg);
121
96
  ret = { code: -22, data: msg };
@@ -151,21 +126,12 @@ const get_index_json = async function (docInP, table_obj) {
151
126
  }
152
127
  // put the value
153
128
  // debugger;
154
- const field_obj = find_item_by_key(
155
- table_obj.tableFields,
156
- "field_id",
157
- valSegment
158
- );
129
+ const field_obj = find_item_by_key(table_obj.tableFields, 'field_id', valSegment);
159
130
  if (!field_obj) {
160
- throw "field not found in key: " + valSegment;
131
+ throw 'field not found in key: ' + valSegment;
161
132
  }
162
133
 
163
- let _val = await get_cast_val(
164
- "get_index_json",
165
- field_obj.id,
166
- field_obj.props.fieldType,
167
- null
168
- );
134
+ let _val = await get_cast_val('get_index_json', field_obj.id, field_obj.props.fieldType, null);
169
135
  key_val.push(_val);
170
136
  }
171
137
 
@@ -207,11 +173,8 @@ const get_cast_val = async function (source, attributeP, typeP, valP) {
207
173
  console.warn(source, msg);
208
174
  };
209
175
 
210
- if (typeof xu_cast === "undefined") {
211
- const xu_cast = await func.common.get_module(
212
- Object.keys(SESSION_OBJ)[0],
213
- `xuda-get-cast-util-module.mjs`
214
- );
176
+ if (typeof xu_cast === 'undefined') {
177
+ const xu_cast = await func.common.get_module(Object.keys(SESSION_OBJ)[0], `xuda-get-cast-util-module.mjs`);
215
178
  return xu_cast.cast(typeP, valP, success, fail);
216
179
  }
217
180
  return xu_cast(typeP, valP, success, fail);
@@ -231,9 +194,7 @@ const get_opt = function (e, table_obj) {
231
194
 
232
195
  var fields = [];
233
196
  if (e.fields) {
234
- for (const [key, val] of Object.entries(
235
- typeof e.fields === "string" ? e.fields.split(",") : e.fields
236
- )) {
197
+ for (const [key, val] of Object.entries(typeof e.fields === 'string' ? e.fields.split(',') : e.fields)) {
237
198
  fields.push(val);
238
199
  }
239
200
  } else {
@@ -262,7 +223,7 @@ const get_opt = function (e, table_obj) {
262
223
  var field_name = key;
263
224
 
264
225
  if (val !== from[key]) {
265
- data[field_name]["$lte"] = val;
226
+ data[field_name]['$lte'] = val;
266
227
  }
267
228
  }
268
229
 
@@ -284,7 +245,7 @@ const get_opt = function (e, table_obj) {
284
245
  }
285
246
 
286
247
  let _sortModel = e?.sortModel || [];
287
- if (typeof _sortModel === "string") {
248
+ if (typeof _sortModel === 'string') {
288
249
  _sortModel = JSON.parse(e.sortModel);
289
250
  }
290
251
 
@@ -294,7 +255,7 @@ const get_opt = function (e, table_obj) {
294
255
  for (const [key, val] of Object.entries(opt.sort)) {
295
256
  var field_name = val.field_id;
296
257
  opt.sort[key] = {
297
- ["udfData.data." + field_name]: val.sort_dir,
258
+ ['udfData.data.' + field_name]: val.sort_dir,
298
259
  };
299
260
  }
300
261
  }
@@ -324,7 +285,7 @@ const get_opt = function (e, table_obj) {
324
285
  // fix names
325
286
 
326
287
  for (const [key, val] of Object.entries(opt.fields)) {
327
- opt.fields[key] = "udfData.data." + val;
288
+ opt.fields[key] = 'udfData.data.' + val;
328
289
  }
329
290
 
330
291
  if (!e?.sortModel || !JSON.parse(e.sortModel).length) {
@@ -332,7 +293,7 @@ const get_opt = function (e, table_obj) {
332
293
  if (opt.sort) {
333
294
  for (const [key, val] of Object.entries(opt.sort)) {
334
295
  opt.sort[key] = {
335
- ["udfData.data." + val]: e.sortOrder === "des" ? "desc" : "asc",
296
+ ['udfData.data.' + val]: e.sortOrder === 'des' ? 'desc' : 'asc',
336
297
  };
337
298
  }
338
299
  }
@@ -347,7 +308,7 @@ const get_opt = function (e, table_obj) {
347
308
 
348
309
  // Helper function to recursively process the query object
349
310
  function recursiveReplace(obj) {
350
- if (typeof obj === "object" && obj !== null) {
311
+ if (typeof obj === 'object' && obj !== null) {
351
312
  // Create a new object to store the modified query
352
313
  let newObj = Array.isArray(obj) ? [] : {};
353
314
 
@@ -355,9 +316,7 @@ const get_opt = function (e, table_obj) {
355
316
  for (let key in obj) {
356
317
  if (obj.hasOwnProperty(key)) {
357
318
  // If the key is in the keys_to_replace array, replace it
358
- let newKey = keys_to_replace.includes(key)
359
- ? `udfData.data.${key}`
360
- : key;
319
+ let newKey = keys_to_replace.includes(key) ? `udfData.data.${key}` : key;
361
320
 
362
321
  // Recursively process nested objects
363
322
  newObj[newKey] = recursiveReplace(obj[key]);
@@ -378,7 +337,7 @@ const get_opt = function (e, table_obj) {
378
337
  function replaceRegexOptions(query) {
379
338
  // Helper function to recursively process the query object
380
339
  function recursiveReplace(obj) {
381
- if (typeof obj === "object" && obj !== null) {
340
+ if (typeof obj === 'object' && obj !== null) {
382
341
  // Create a new object to store the modified query
383
342
  let newObj = Array.isArray(obj) ? [] : {};
384
343
 
@@ -390,7 +349,7 @@ const get_opt = function (e, table_obj) {
390
349
  // ? `udfData.data.${key}`
391
350
  // : key;
392
351
 
393
- if (key === "$regex") {
352
+ if (key === '$regex') {
394
353
  newObj[key] = obj[key]; // RegExp(obj[key], obj.$options);
395
354
  return newObj;
396
355
  }
@@ -413,31 +372,25 @@ const get_opt = function (e, table_obj) {
413
372
  return recursiveReplace(query);
414
373
  }
415
374
 
416
- if (e.dataSourceFilterModelType === "query" && e.filterModelMongo) {
417
- selector_new["$and"] = [
418
- replaceRegexOptions(replaceKeysInQuery(JSON.parse(e.filterModelMongo))),
419
- ];
375
+ if (e.dataSourceFilterModelType === 'query' && e.filterModelMongo) {
376
+ selector_new['$and'] = [replaceRegexOptions(replaceKeysInQuery(JSON.parse(e.filterModelMongo)))];
420
377
  }
421
378
  if (e.filterModelUserMongo) {
422
- if (!selector_new["$and"]) {
423
- selector_new["$and"] = [];
379
+ if (!selector_new['$and']) {
380
+ selector_new['$and'] = [];
424
381
  }
425
- selector_new["$and"].push(
426
- replaceRegexOptions(
427
- replaceKeysInQuery(JSON.parse(e.filterModelUserMongo))
428
- )
429
- );
382
+ selector_new['$and'].push(replaceRegexOptions(replaceKeysInQuery(JSON.parse(e.filterModelUserMongo))));
430
383
  }
431
384
 
432
- if (e.dataSourceFilterModelType === "index") {
385
+ if (e.dataSourceFilterModelType === 'index') {
433
386
  for (const [key, val] of Object.entries(opt.selector)) {
434
- selector_new["udfData.data." + key] = val;
387
+ selector_new['udfData.data.' + key] = val;
435
388
  }
436
389
  }
437
390
 
438
391
  opt.selector = selector_new;
439
- opt.selector["udfData.udffileid"] = e.table_id;
440
- opt.selector["docType"] = "database";
392
+ opt.selector['udfData.udffileid'] = e.table_id;
393
+ opt.selector['docType'] = 'database';
441
394
  opt.selector.stat = e.archived ? 4 : 3;
442
395
 
443
396
  // fill selector with sort field if not exist
@@ -449,8 +402,8 @@ const get_opt = function (e, table_obj) {
449
402
  }
450
403
  }
451
404
  }
452
- opt.fields.push("_id");
453
- opt.fields.push("_rev");
405
+ opt.fields.push('_id');
406
+ opt.fields.push('_rev');
454
407
 
455
408
  if (e.selector) {
456
409
  opt.selector = { ...e.selector, ...opt.selector };
@@ -470,11 +423,9 @@ const query_db = async function (e, db, table_obj) {
470
423
  for (var val of body.docs) {
471
424
  var data = {};
472
425
  if (e.fields) {
473
- for (const [key2, val2] of Object.entries(
474
- typeof e.fields === "string" ? e.fields.split(",") : e.fields
475
- )) {
426
+ for (const [key2, val2] of Object.entries(typeof e.fields === 'string' ? e.fields.split(',') : e.fields)) {
476
427
  if (val.udfData) {
477
- data[val2] = val["udfData"]["data"][val2];
428
+ data[val2] = val['udfData']['data'][val2];
478
429
  } else {
479
430
  data[val2] = null;
480
431
  }
@@ -482,8 +433,7 @@ const query_db = async function (e, db, table_obj) {
482
433
  } else {
483
434
  for (const [key2, val2] of Object.entries(table_obj.tableFields)) {
484
435
  if (val.udfData) {
485
- data[val2.data.field_id] =
486
- val["udfData"]["data"][val2.data.field_id];
436
+ data[val2.data.field_id] = val['udfData']['data'][val2.data.field_id];
487
437
  } else {
488
438
  data[val2.data.field_id] = null;
489
439
  }
@@ -501,26 +451,17 @@ const query_db = async function (e, db, table_obj) {
501
451
  const count_data = async function () {
502
452
  var rows = [];
503
453
  var keys_obj = {};
504
- const table_index = find_item_by_key_root(
505
- table_obj.tableIndexes,
506
- "id",
507
- e.indexId
508
- );
454
+ const table_index = find_item_by_key_root(table_obj.tableIndexes, 'id', e.indexId);
509
455
  if (e.indexId && table_index) {
510
456
  var index_keys = table_index.data.keys;
511
457
  var index_id = e.indexId;
512
458
 
513
459
  for (var val of body.docs) {
514
460
  var data = {};
515
- const _tableFieldsObj = find_item_by_key(
516
- table_obj.tableFields,
517
- "field_id",
518
- e.field_id
519
- );
461
+ const _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', e.field_id);
520
462
 
521
463
  for (const [key2, val2] of Object.entries(table_obj.tableFields)) {
522
- data[val2.data.field_id] =
523
- val["udfData"]["data"][val2.data.field_id];
464
+ data[val2.data.field_id] = val['udfData']['data'][val2.data.field_id];
524
465
  }
525
466
 
526
467
  var key_arr = [];
@@ -539,7 +480,7 @@ const query_db = async function (e, db, table_obj) {
539
480
  }
540
481
  } else {
541
482
  // no index
542
- rows.push({ key: "", value: body.docs.length });
483
+ rows.push({ key: '', value: body.docs.length });
543
484
  }
544
485
  return { code: 1, data: { rows: rows, total_rows: rows.length, opt } };
545
486
  };
@@ -548,9 +489,7 @@ const query_db = async function (e, db, table_obj) {
548
489
  const median = (arr) => {
549
490
  const mid = Math.floor(arr.length / 2),
550
491
  nums = [...arr].sort((a, b) => a - b);
551
- return arr.length % 2 !== 0
552
- ? nums[mid]
553
- : (nums[mid - 1] + nums[mid]) / 2;
492
+ return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;
554
493
  };
555
494
 
556
495
  var total_fields_info = JSON.parse(e.total_fields_info);
@@ -576,62 +515,55 @@ const query_db = async function (e, db, table_obj) {
576
515
  totals_counts[field_id]++;
577
516
 
578
517
  switch (totals_prop[field_id].sum_type) {
579
- case "sum":
580
- if (typeof totals_obj[field_id] === "undefined") {
518
+ case 'sum':
519
+ if (typeof totals_obj[field_id] === 'undefined') {
581
520
  totals_obj[field_id] = value;
582
521
  } else {
583
522
  totals_obj[field_id] += value;
584
523
  }
585
524
  break;
586
525
 
587
- case "average":
526
+ case 'average':
588
527
  totals_sums[field_id] += value;
589
- totals_obj[field_id] =
590
- totals_sums[field_id] / totals_counts[field_id];
528
+ totals_obj[field_id] = totals_sums[field_id] / totals_counts[field_id];
591
529
  break;
592
530
 
593
- case "median":
531
+ case 'median':
594
532
  if (!totals_arr[field_id].includes(value)) {
595
533
  totals_arr[field_id].push(value);
596
534
  }
597
535
  totals_obj[field_id] = median(totals_arr[field_id]);
598
536
  break;
599
- case "min":
600
- if (
601
- typeof totals_obj[field_id] === "undefined" ||
602
- value < totals_obj[field_id]
603
- ) {
537
+ case 'min':
538
+ if (typeof totals_obj[field_id] === 'undefined' || value < totals_obj[field_id]) {
604
539
  totals_obj[field_id] = value;
605
540
  }
606
541
  break;
607
- case "max":
608
- if (
609
- typeof totals_obj[field_id] === "undefined" ||
610
- value > totals_obj[field_id]
611
- ) {
542
+ case 'max':
543
+ if (typeof totals_obj[field_id] === 'undefined' || value > totals_obj[field_id]) {
612
544
  totals_obj[field_id] = value;
613
545
  }
614
546
  break;
615
- case "count":
616
- if (typeof totals_obj[field_id] === "undefined") {
547
+ case 'count':
548
+ if (typeof totals_obj[field_id] === 'undefined') {
617
549
  totals_obj[field_id] = 1;
618
550
  } else {
619
551
  totals_obj[field_id]++;
620
552
  }
621
553
  break;
622
- case "distinct":
554
+ case 'distinct':
623
555
  if (!totals_arr[field_id].includes(value)) {
624
556
  totals_arr[field_id].push(value);
625
557
  }
626
558
  totals_obj[field_id] = totals_arr[field_id].length;
627
559
  break;
628
560
 
629
- case "group":
561
+ case 'group':
630
562
  if (!totals_obj[field_id]) {
631
563
  totals_obj[field_id] = {};
632
564
  }
633
565
 
634
- if (typeof totals_obj[field_id][value] === "undefined") {
566
+ if (typeof totals_obj[field_id][value] === 'undefined') {
635
567
  totals_obj[field_id][value] = 1; //value;
636
568
  } else {
637
569
  totals_obj[field_id][value]++; //+= value;
@@ -662,11 +594,9 @@ const query_db = async function (e, db, table_obj) {
662
594
 
663
595
  const doc = await db.find(opt);
664
596
  var mango_index_obj;
665
- if (doc?.warning?.includes("No matching index found")) {
597
+ if (doc?.warning?.includes('No matching index found')) {
666
598
  try {
667
- const index_name = `index_${e.table_id}_${new Date()
668
- .valueOf()
669
- .toString()}`;
599
+ const index_name = `index_${e.table_id}_${new Date().valueOf().toString()}`;
670
600
  var index = [];
671
601
 
672
602
  for (const [key, val] of Object.entries(opt.selector)) {
@@ -681,20 +611,19 @@ const query_db = async function (e, db, table_obj) {
681
611
  };
682
612
  const result = await db.createIndex(mango_index_obj);
683
613
  // console.log("createIndex", result);
684
- throw new Error("creating index in progress");
614
+ throw new Error('creating index in progress');
685
615
  } catch (err) {
686
616
  return { code: -1, data: err.message };
687
617
  }
688
618
  }
689
619
  return await done(doc);
690
620
  } catch (err) {
691
- if (err.message.includes("Cannot sort on field")) {
692
- const index_name = `index_${e.table_id}_${new Date()
693
- .valueOf()
694
- .toString()}`;
621
+ if (err.message.includes('Cannot sort on field')) {
622
+ const index_name = `index_${e.table_id}_${new Date().valueOf().toString()}`;
695
623
 
696
624
  // const _selector = _.cloneDeep(opt.selector);
697
- const _sort = _.cloneDeep(opt.sort);
625
+ let _sort = _.cloneDeep(opt.sort);
626
+
698
627
  mango_index_obj = {
699
628
  index: {
700
629
  fields: [],
@@ -702,7 +631,7 @@ const query_db = async function (e, db, table_obj) {
702
631
  name: index_name,
703
632
  ddoc: `mango_index_table_${e.table_id}`,
704
633
  };
705
-
634
+ delete _sort['$and'];
706
635
  for (let val of _sort) {
707
636
  let field_id = Object.keys(val)[0];
708
637
  mango_index_obj.index.fields.push(field_id);
@@ -740,7 +669,7 @@ const query_db = async function (e, db, table_obj) {
740
669
  // };
741
670
  // await monitor_indexing();
742
671
  // throw new Error({ code: -88, data: "creating index" });
743
- throw new Error("creating index in progress");
672
+ throw new Error('creating index in progress');
744
673
  // const doc = await db.find(opt);
745
674
  // return await done(doc);
746
675
  } catch (err) {
@@ -771,15 +700,15 @@ const query_db = async function (e, db, table_obj) {
771
700
  if (key) {
772
701
  view_opt = {
773
702
  key,
774
- include_docs: !e.ids && view !== "db_index_reduce",
703
+ include_docs: !e.ids && view !== 'db_index_reduce',
775
704
  limit,
776
705
  skip,
777
706
  };
778
707
  } else {
779
708
  if (e.reduce) {
780
709
  view_opt = {
781
- startkey: e.startkey ? JSON.parse(e.startkey) : "",
782
- endkey: e.endkey ? JSON.parse(e.endkey) : "",
710
+ startkey: e.startkey ? JSON.parse(e.startkey) : '',
711
+ endkey: e.endkey ? JSON.parse(e.endkey) : '',
783
712
  include_docs: false,
784
713
  reduce: true,
785
714
  group_level: 3,
@@ -788,8 +717,8 @@ const query_db = async function (e, db, table_obj) {
788
717
  };
789
718
  } else {
790
719
  view_opt = {
791
- startkey: e.startkey ? JSON.parse(e.startkey) : "",
792
- endkey: e.endkey ? JSON.parse(e.endkey) : "",
720
+ startkey: e.startkey ? JSON.parse(e.startkey) : '',
721
+ endkey: e.endkey ? JSON.parse(e.endkey) : '',
793
722
  include_docs: !e.ids,
794
723
  limit,
795
724
  skip,
@@ -803,11 +732,7 @@ const query_db = async function (e, db, table_obj) {
803
732
  if (e.reduce) {
804
733
  let rows = [];
805
734
 
806
- const table_index = find_item_by_key_root(
807
- table_obj.tableIndexes,
808
- "id",
809
- e.indexId
810
- );
735
+ const table_index = find_item_by_key_root(table_obj.tableIndexes, 'id', e.indexId);
811
736
 
812
737
  for await (var val of body.rows) {
813
738
  const arr = val.key[2];
@@ -816,22 +741,13 @@ const query_db = async function (e, db, table_obj) {
816
741
  for await (const [arr_key, arr_val] of Object.entries(arr)) {
817
742
  let field_id = table_index.data.keys[Number(arr_key)];
818
743
 
819
- const _tableFieldsObj = find_item_by_key(
820
- table_obj.tableFields,
821
- "field_id",
822
- field_id
823
- );
744
+ const _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', field_id);
824
745
 
825
- let field_value = await get_cast_val(
826
- "dbs_update",
827
- e.field_id,
828
- _tableFieldsObj.props.fieldType,
829
- arr_val
830
- );
746
+ let field_value = await get_cast_val('dbs_update', e.field_id, _tableFieldsObj.props.fieldType, arr_val);
831
747
 
832
748
  obj[field_id] = field_value;
833
749
  }
834
- obj["REDUCE_VALUE"] = val.value;
750
+ obj['REDUCE_VALUE'] = val.value;
835
751
 
836
752
  rows.push({ id: crypto.randomUUID(), value: obj });
837
753
  }
@@ -892,16 +808,16 @@ const query_db = async function (e, db, table_obj) {
892
808
  opt.key = e.table_id;
893
809
  }
894
810
 
895
- const body = await db.query("xuda/db_table_counts", opt);
811
+ const body = await db.query('xuda/db_table_counts', opt);
896
812
 
897
813
  return { code: 1, data: body };
898
814
  };
899
815
  var view;
900
816
  if (e.reduce && JSON.parse(e.reduce)) {
901
- view = "db_index_reduce";
817
+ view = 'db_index_reduce';
902
818
  return await runtime_get_query_data();
903
819
  }
904
- if (e.view === "db_index") {
820
+ if (e.view === 'db_index') {
905
821
  key = e.key;
906
822
  view = e.view;
907
823
  return await runtime_get_query_data();
@@ -924,18 +840,13 @@ export const create = async (params, resolve, reject) => {
924
840
  const create_data_obj = async function (table_data) {
925
841
  var doc = {};
926
842
  for await (const val of table_obj.tableFields) {
927
- doc[val.data.field_id] = await get_cast_val(
928
- "dbs_create",
929
- val.data.field_id,
930
- val.props.fieldType,
931
- table_data[val.data.field_id]
932
- );
843
+ doc[val.data.field_id] = await get_cast_val('dbs_create', val.data.field_id, val.props.fieldType, table_data[val.data.field_id]);
933
844
  }
934
845
 
935
846
  return doc;
936
847
  };
937
848
  const get_uuid = function (table_id) {
938
- return "dbs-" + table_id + "_" + crypto.randomUUID();
849
+ return 'dbs-' + table_id + '_' + crypto.randomUUID();
939
850
  };
940
851
  const batch = async function () {
941
852
  var docs = [];
@@ -943,11 +854,11 @@ export const create = async (params, resolve, reject) => {
943
854
  for await (var val of e.table_data) {
944
855
  var doc = {
945
856
  _id: get_uuid(e.table_id),
946
- docType: "database",
857
+ docType: 'database',
947
858
  user: e.uid,
948
859
  app_id: e.app_id,
949
860
  stat: 3,
950
- source: "dbs",
861
+ source: 'dbs',
951
862
  udfData: {
952
863
  udffileid: e.table_id,
953
864
  data: await create_data_obj(val),
@@ -980,11 +891,11 @@ export const create = async (params, resolve, reject) => {
980
891
  const single = async function () {
981
892
  var doc = {
982
893
  _id: get_uuid(e.table_id),
983
- docType: "database",
894
+ docType: 'database',
984
895
  user: e.uid,
985
896
  app_id: e.app_id,
986
897
  stat: 3,
987
- source: "dbs",
898
+ source: 'dbs',
988
899
  udfData: {
989
900
  udffileid: e.table_id,
990
901
  data: await create_data_obj(e.table_data),
@@ -1034,55 +945,37 @@ export const update = async (params, resolve, reject) => {
1034
945
 
1035
946
  const table_obj = params.table_obj;
1036
947
  try {
1037
- if (e.row_id === "newRecord") {
948
+ if (e.row_id === 'newRecord') {
1038
949
  return this.create(params, resolve, reject);
1039
950
  }
1040
951
  var doc = await db.get(e.row_id, {});
1041
952
  // let data = doc.udfData.data;
1042
953
  var error = undefined;
1043
954
  if (!e.field_id && !e.table_data) {
1044
- error = "Invalid field_id or table_data object to save";
955
+ error = 'Invalid field_id or table_data object to save';
1045
956
  return reject(error);
1046
957
  }
1047
958
  // single value save
1048
959
  if (e.field_id) {
1049
- let _tableFieldsObj = find_item_by_key(
1050
- table_obj.tableFields,
1051
- "field_id",
1052
- e.field_id
1053
- );
960
+ let _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', e.field_id);
1054
961
  if (!_tableFieldsObj || _.isEmpty(_tableFieldsObj)) {
1055
- return reject("Error: " + e.field_id + " - field not found");
962
+ return reject('Error: ' + e.field_id + ' - field not found');
1056
963
  }
1057
964
 
1058
- doc.udfData.data[e.field_id] = await get_cast_val(
1059
- "dbs_update",
1060
- e.field_id,
1061
- _tableFieldsObj.props.fieldType,
1062
- e.field_value
1063
- );
965
+ doc.udfData.data[e.field_id] = await get_cast_val('dbs_update', e.field_id, _tableFieldsObj.props.fieldType, e.field_value);
1064
966
  }
1065
967
 
1066
968
  // object value save
1067
969
  if (e.table_data) {
1068
970
  // data = {};
1069
971
  for await (const [key, val] of Object.entries(e.table_data)) {
1070
- let _tableFieldsObj = find_item_by_key(
1071
- table_obj.tableFields,
1072
- "field_id",
1073
- key
1074
- );
972
+ let _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', key);
1075
973
  if (!_tableFieldsObj || _.isEmpty(_tableFieldsObj)) {
1076
- reject("Error: " + key + " - field not found");
974
+ reject('Error: ' + key + ' - field not found');
1077
975
  break;
1078
976
  }
1079
977
 
1080
- doc.udfData.data[key] = await get_cast_val(
1081
- "dbs_update",
1082
- key,
1083
- _tableFieldsObj.props.fieldType,
1084
- val
1085
- );
978
+ doc.udfData.data[key] = await get_cast_val('dbs_update', key, _tableFieldsObj.props.fieldType, val);
1086
979
  }
1087
980
  }
1088
981
 
@@ -1162,11 +1055,11 @@ export const create_design = async (params, resolve, reject) => {
1162
1055
  const db = params.db;
1163
1056
 
1164
1057
  const ddoc = {
1165
- _id: "_design/xuda",
1058
+ _id: '_design/xuda',
1166
1059
  views: {
1167
1060
  db_index_reduce: {
1168
1061
  map: 'function(doc) {\r\n if (doc.docType=="database" && doc.stat===3) {\r\n if (doc.udfIndex) {\r\n for (var i = 0; i < doc.udfIndex.length; i++)\r\n {\r\n var val = doc.udfIndex[i]; \r\n emit([val.fileId, val.indexId, val.keyValue],1);\r\n }\r\n }\r\n }\r\n \r\n}',
1169
- reduce: "function(keys, values) {\n return sum(values);\n}",
1062
+ reduce: 'function(keys, values) {\n return sum(values);\n}',
1170
1063
  },
1171
1064
  db_index: {
1172
1065
  map: 'function(doc) {\r\n if (doc.docType=="database" && doc.stat===3) {\r\n if (doc.udfIndex) {\r\n for (var i = 0; i < doc.udfIndex.length; i++)\r\n {\r\n var val = doc.udfIndex[i]; \r\n emit([val.fileId, val.indexId, val.keyValue],{_id: doc._id});\r\n }\r\n }\r\n }\r\n \r\n}',
@@ -1174,11 +1067,11 @@ export const create_design = async (params, resolve, reject) => {
1174
1067
 
1175
1068
  db_table_counts: {
1176
1069
  map: 'function(doc) {\r\n\r\nif (doc.docType=="database" && doc.stat===3) {\r\n if(doc.udfData && doc.udfData.udffileid) \r\n emit(doc.udfData.udffileid, 1); \r\n }\r\n}',
1177
- reduce: "_count",
1070
+ reduce: '_count',
1178
1071
  },
1179
1072
  stat_3_doc_counts: {
1180
- reduce: "_count",
1181
- map: "function (doc) {\n if(doc.stat===3){\n emit(doc.docType, 1);\n }\n}",
1073
+ reduce: '_count',
1074
+ map: 'function (doc) {\n if(doc.stat===3){\n emit(doc.docType, 1);\n }\n}',
1182
1075
  },
1183
1076
  },
1184
1077
  };