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

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 (2) hide show
  1. package/package.json +1 -1
  2. package/server.js +100 -203
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuda.io/xuda-dbs-plugin-xuda",
3
- "version": "1.0.311",
3
+ "version": "1.0.312",
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
@@ -1,33 +1,29 @@
1
- const _ = require("lodash");
2
- const crypto = require("node:crypto");
1
+ const _ = require('lodash');
2
+ const crypto = require('node:crypto');
3
3
 
4
4
  const check_unique = async function (e, docP, table_obj, db, app_id_reference) {
5
5
  var len = docP.udfIndex.length;
6
6
  if (!len) {
7
- return { code: -11, data: "table must have primary index" };
7
+ return { code: -11, data: 'table must have primary index' };
8
8
  }
9
9
  var found_unique = undefined;
10
- var ret = { code: 1, data: "ok" };
10
+ var ret = { code: 1, data: 'ok' };
11
11
 
12
12
  for await (var val of docP.udfIndex) {
13
13
  if (!table_obj.tableIndexes) {
14
14
  ret = {
15
15
  code: -14,
16
- data: "table definition missing for: " + val.fileId,
16
+ data: 'table definition missing for: ' + val.fileId,
17
17
  };
18
18
  break;
19
19
  }
20
20
 
21
- const table_index = find_item_by_key_root(
22
- table_obj.tableIndexes,
23
- "id",
24
- val.indexId
25
- );
21
+ const table_index = find_item_by_key_root(table_obj.tableIndexes, 'id', val.indexId);
26
22
 
27
23
  if (!table_index) {
28
24
  ret = {
29
25
  code: -13,
30
- data: "keys definition missing for Table: " + val.fileId,
26
+ data: 'keys definition missing for Table: ' + val.fileId,
31
27
  };
32
28
  break;
33
29
  }
@@ -38,7 +34,7 @@ const check_unique = async function (e, docP, table_obj, db, app_id_reference) {
38
34
  if (!table_index?.data?.keys || _.isEmpty(table_index.data.keys)) {
39
35
  ret = {
40
36
  code: -14,
41
- data: "keys definition missing for index: " + val.indexId,
37
+ data: 'keys definition missing for index: ' + val.indexId,
42
38
  };
43
39
  break;
44
40
  }
@@ -48,30 +44,14 @@ const check_unique = async function (e, docP, table_obj, db, app_id_reference) {
48
44
 
49
45
  for await (const [keySegment, valSegment] of Object.entries(keysArr)) {
50
46
  // run on key segment
51
- let _fieldType = find_item_by_key(
52
- table_obj.tableFields,
53
- "field_id",
54
- valSegment
55
- ).props.fieldType;
56
- let _val = await get_cast_val(
57
- "check_unique",
58
- valSegment,
59
- _fieldType,
60
- val.keyValue[Number(keySegment)]
61
- );
47
+ let _fieldType = find_item_by_key(table_obj.tableFields, 'field_id', valSegment).props.fieldType;
48
+ let _val = await get_cast_val('check_unique', valSegment, _fieldType, val.keyValue[Number(keySegment)]);
62
49
  keyValue.push(_val);
63
50
  }
64
51
 
65
- var key =
66
- '["' +
67
- val.fileId +
68
- '","' +
69
- val.indexId +
70
- '",[' +
71
- keyValue.join(",") +
72
- "]]";
52
+ var key = '["' + val.fileId + '","' + val.indexId + '",[' + keyValue.join(',') + ']]';
73
53
  try {
74
- e.view = "db_index";
54
+ e.view = 'db_index';
75
55
  const ret = await query_db(e, db, app_id_reference, table_obj);
76
56
  const json = ret.data;
77
57
 
@@ -86,12 +66,12 @@ const check_unique = async function (e, docP, table_obj, db, app_id_reference) {
86
66
  }
87
67
  }
88
68
  if (found_unique) {
89
- throw "error checking unique:" + key;
69
+ throw 'error checking unique:' + key;
90
70
  }
91
71
  }
92
72
  }
93
73
  // throw json.data;
94
- return { code: 1, data: "ok" };
74
+ return { code: 1, data: 'ok' };
95
75
  } catch (msg) {
96
76
  console.error(msg);
97
77
  ret = { code: -22, data: msg };
@@ -125,21 +105,12 @@ const get_index_json = async function (docInP, table_obj) {
125
105
  }
126
106
  // put the value
127
107
  // debugger;
128
- const field_obj = find_item_by_key(
129
- table_obj.tableFields,
130
- "field_id",
131
- valSegment
132
- );
108
+ const field_obj = find_item_by_key(table_obj.tableFields, 'field_id', valSegment);
133
109
  if (!field_obj) {
134
- throw "field not found in key: " + valSegment;
110
+ throw 'field not found in key: ' + valSegment;
135
111
  }
136
112
 
137
- let _val = await get_cast_val(
138
- "get_index_json",
139
- field_obj.id,
140
- field_obj.props.fieldType,
141
- null
142
- );
113
+ let _val = await get_cast_val('get_index_json', field_obj.id, field_obj.props.fieldType, null);
143
114
  key_val.push(_val);
144
115
  }
145
116
 
@@ -172,7 +143,7 @@ const find_item_by_key = function (arr, key, val) {
172
143
  };
173
144
 
174
145
  const get_cast_val = async function (source, attributeP, typeP, valP) {
175
- const module = require("@xuda.io/xu_cast");
146
+ const module = require('@xuda.io/xu_cast');
176
147
 
177
148
  return module.cast(
178
149
  typeP,
@@ -184,7 +155,7 @@ const get_cast_val = async function (source, attributeP, typeP, valP) {
184
155
  function (res) {
185
156
  var msg = `type mismatch auto conversion made to ${attributeP} from value ${valP} to ${typeP}`;
186
157
  console.warn(source, msg);
187
- }
158
+ },
188
159
  );
189
160
  };
190
161
 
@@ -202,9 +173,7 @@ const get_opt = function (e, table_obj) {
202
173
 
203
174
  var fields = [];
204
175
  if (e.fields) {
205
- for (const [key, val] of Object.entries(
206
- typeof e.fields === "string" ? e.fields.split(",") : e.fields
207
- )) {
176
+ for (const [key, val] of Object.entries(typeof e.fields === 'string' ? e.fields.split(',') : e.fields)) {
208
177
  fields.push(val);
209
178
  }
210
179
  } else {
@@ -233,7 +202,7 @@ const get_opt = function (e, table_obj) {
233
202
  var field_name = key;
234
203
 
235
204
  if (val !== from[key]) {
236
- data[field_name]["$lte"] = val;
205
+ data[field_name]['$lte'] = val;
237
206
  }
238
207
  }
239
208
 
@@ -255,7 +224,7 @@ const get_opt = function (e, table_obj) {
255
224
  }
256
225
 
257
226
  let _sortModel = e?.sortModel || [];
258
- if (typeof _sortModel === "string") {
227
+ if (typeof _sortModel === 'string') {
259
228
  _sortModel = JSON.parse(e.sortModel);
260
229
  }
261
230
 
@@ -265,7 +234,7 @@ const get_opt = function (e, table_obj) {
265
234
  for (const [key, val] of Object.entries(opt.sort)) {
266
235
  var field_name = val.field_id || val.colId;
267
236
  opt.sort[key] = {
268
- ["udfData.data." + field_name]: val.sort_dir || val.sort,
237
+ ['udfData.data.' + field_name]: val.sort_dir || val.sort,
269
238
  };
270
239
  }
271
240
  }
@@ -283,11 +252,10 @@ const get_opt = function (e, table_obj) {
283
252
  // fix names
284
253
 
285
254
  for (const [key, val] of Object.entries(opt.fields)) {
286
- opt.fields[key] = "udfData.data." + val;
255
+ opt.fields[key] = 'udfData.data.' + val;
287
256
  }
288
257
 
289
- const _sort_model =
290
- typeof e.sortModel === "string" ? JSON.parse(e.sortModel) : e.sortModel;
258
+ const _sort_model = typeof e.sortModel === 'string' ? JSON.parse(e.sortModel) : e.sortModel;
291
259
 
292
260
  // if (!e?.sortModel || !JSON.parse(e.sortModel).length) {
293
261
  if (!e?.sortModel || !_sort_model.length) {
@@ -295,7 +263,7 @@ const get_opt = function (e, table_obj) {
295
263
  if (opt.sort) {
296
264
  for (const [key, val] of Object.entries(opt.sort)) {
297
265
  opt.sort[key] = {
298
- ["udfData.data." + val]: e.sortOrder === "des" ? "desc" : "asc",
266
+ ['udfData.data.' + val]: e.sortOrder === 'des' ? 'desc' : 'asc',
299
267
  };
300
268
  }
301
269
  }
@@ -310,7 +278,7 @@ const get_opt = function (e, table_obj) {
310
278
 
311
279
  // Helper function to recursively process the query object
312
280
  function recursiveReplace(obj) {
313
- if (typeof obj === "object" && obj !== null) {
281
+ if (typeof obj === 'object' && obj !== null) {
314
282
  // Create a new object to store the modified query
315
283
  let newObj = Array.isArray(obj) ? [] : {};
316
284
 
@@ -318,9 +286,7 @@ const get_opt = function (e, table_obj) {
318
286
  for (let key in obj) {
319
287
  if (obj.hasOwnProperty(key)) {
320
288
  // If the key is in the keys_to_replace array, replace it
321
- let newKey = keys_to_replace.includes(key)
322
- ? `udfData.data.${key}`
323
- : key;
289
+ let newKey = keys_to_replace.includes(key) ? `udfData.data.${key}` : key;
324
290
 
325
291
  // Recursively process nested objects
326
292
  newObj[newKey] = recursiveReplace(obj[key]);
@@ -341,17 +307,15 @@ const get_opt = function (e, table_obj) {
341
307
  function replaceRegexOptions(query) {
342
308
  // Helper function to recursively process the query object
343
309
  function recursiveReplace(obj) {
344
- if (typeof obj === "object" && obj !== null) {
310
+ if (typeof obj === 'object' && obj !== null) {
345
311
  // Create a new object to store the modified query
346
312
  let newObj = Array.isArray(obj) ? [] : {};
347
313
 
348
314
  // Traverse through the object
349
315
  for (let key in obj) {
350
316
  if (obj.hasOwnProperty(key)) {
351
- if (key === "$regex") {
352
- newObj[key] = obj.$options
353
- ? `(?${obj.$options})${obj[key]}`
354
- : obj[key];
317
+ if (key === '$regex') {
318
+ newObj[key] = obj.$options ? `(?${obj.$options})${obj[key]}` : obj[key];
355
319
  return newObj;
356
320
  }
357
321
 
@@ -372,39 +336,32 @@ const get_opt = function (e, table_obj) {
372
336
  return recursiveReplace(query);
373
337
  }
374
338
 
375
- if (e.dataSourceFilterModelType === "query" && e.filterModelMongo) {
376
- selector_new["$and"] = [
377
- replaceRegexOptions(replaceKeysInQuery(JSON.parse(e.filterModelMongo))),
378
- ];
339
+ if (e.dataSourceFilterModelType === 'query' && e.filterModelMongo) {
340
+ selector_new['$and'] = [replaceRegexOptions(replaceKeysInQuery(JSON.parse(e.filterModelMongo)))];
379
341
  }
380
342
 
381
- const _filterModelUserMongo =
382
- typeof e.filterModelUserMongo === "string"
383
- ? JSON.parse(e.filterModelUserMongo)
384
- : e.filterModelUserMongo;
343
+ const _filterModelUserMongo = typeof e.filterModelUserMongo === 'string' ? JSON.parse(e.filterModelUserMongo) : e.filterModelUserMongo;
385
344
 
386
345
  if (!_.isEmpty(_filterModelUserMongo)) {
387
- if (!selector_new["$and"]) {
388
- selector_new["$and"] = [];
346
+ if (!selector_new['$and']) {
347
+ selector_new['$and'] = [];
389
348
  }
390
- selector_new["$and"].push(
391
- replaceRegexOptions(replaceKeysInQuery(_filterModelUserMongo))
392
- );
349
+ selector_new['$and'].push(replaceRegexOptions(replaceKeysInQuery(_filterModelUserMongo)));
393
350
  }
394
351
 
395
- if (e.dataSourceFilterModelType === "index") {
352
+ if (e.dataSourceFilterModelType === 'index') {
396
353
  for (const [key, val] of Object.entries(opt.selector)) {
397
- selector_new["udfData.data." + key] = val;
354
+ selector_new['udfData.data.' + key] = val;
398
355
  }
399
356
  }
400
357
 
401
358
  opt.selector = selector_new;
402
- opt.selector["udfData.udffileid"] = e.table_id;
403
- opt.selector["docType"] = "database";
359
+ opt.selector['udfData.udffileid'] = e.table_id;
360
+ opt.selector['docType'] = 'database';
404
361
  opt.selector.stat = e.archived ? 4 : 3;
405
362
 
406
- opt.fields.push("_id");
407
- opt.fields.push("_rev");
363
+ opt.fields.push('_id');
364
+ opt.fields.push('_rev');
408
365
 
409
366
  if (e.selector) {
410
367
  opt.selector = { ...e.selector, ...opt.selector };
@@ -424,11 +381,9 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
424
381
  for (var val of body.docs) {
425
382
  var data = {};
426
383
  if (e.fields) {
427
- for (const [key2, val2] of Object.entries(
428
- typeof e.fields === "string" ? e.fields.split(",") : e.fields
429
- )) {
384
+ for (const [key2, val2] of Object.entries(typeof e.fields === 'string' ? e.fields.split(',') : e.fields)) {
430
385
  if (val.udfData) {
431
- data[val2] = val["udfData"]["data"][val2];
386
+ data[val2] = val['udfData']['data'][val2];
432
387
  } else {
433
388
  data[val2] = null;
434
389
  }
@@ -436,8 +391,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
436
391
  } else {
437
392
  for (const [key2, val2] of Object.entries(table_obj.tableFields)) {
438
393
  if (val.udfData) {
439
- data[val2.data.field_id] =
440
- val["udfData"]["data"][val2.data.field_id];
394
+ data[val2.data.field_id] = val['udfData']['data'][val2.data.field_id];
441
395
  } else {
442
396
  data[val2.data.field_id] = null;
443
397
  }
@@ -455,26 +409,17 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
455
409
  const count_data = async function () {
456
410
  var rows = [];
457
411
  var keys_obj = {};
458
- const table_index = find_item_by_key_root(
459
- table_obj.tableIndexes,
460
- "id",
461
- e.indexId
462
- );
412
+ const table_index = find_item_by_key_root(table_obj.tableIndexes, 'id', e.indexId);
463
413
  if (e.indexId && table_index) {
464
414
  var index_keys = table_index.data.keys;
465
415
  var index_id = e.indexId;
466
416
 
467
417
  for (var val of body.docs) {
468
418
  var data = {};
469
- const _tableFieldsObj = find_item_by_key(
470
- table_obj.tableFields,
471
- "field_id",
472
- e.field_id
473
- );
419
+ const _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', e.field_id);
474
420
 
475
421
  for (const [key2, val2] of Object.entries(table_obj.tableFields)) {
476
- data[val2.data.field_id] =
477
- val["udfData"]["data"][val2.data.field_id];
422
+ data[val2.data.field_id] = val['udfData']['data'][val2.data.field_id];
478
423
  }
479
424
 
480
425
  var key_arr = [];
@@ -493,7 +438,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
493
438
  }
494
439
  } else {
495
440
  // no index
496
- rows.push({ key: "", value: body.docs.length });
441
+ rows.push({ key: '', value: body.docs.length });
497
442
  }
498
443
  return { code: 1, data: { rows: rows, total_rows: rows.length, opt } };
499
444
  };
@@ -502,9 +447,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
502
447
  const median = (arr) => {
503
448
  const mid = Math.floor(arr.length / 2),
504
449
  nums = [...arr].sort((a, b) => a - b);
505
- return arr.length % 2 !== 0
506
- ? nums[mid]
507
- : (nums[mid - 1] + nums[mid]) / 2;
450
+ return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;
508
451
  };
509
452
 
510
453
  var total_fields_info = JSON.parse(e.total_fields_info);
@@ -530,62 +473,55 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
530
473
  totals_counts[field_id]++;
531
474
 
532
475
  switch (totals_prop[field_id].sum_type) {
533
- case "sum":
534
- if (typeof totals_obj[field_id] === "undefined") {
476
+ case 'sum':
477
+ if (typeof totals_obj[field_id] === 'undefined') {
535
478
  totals_obj[field_id] = value;
536
479
  } else {
537
480
  totals_obj[field_id] += value;
538
481
  }
539
482
  break;
540
483
 
541
- case "average":
484
+ case 'average':
542
485
  totals_sums[field_id] += value;
543
- totals_obj[field_id] =
544
- totals_sums[field_id] / totals_counts[field_id];
486
+ totals_obj[field_id] = totals_sums[field_id] / totals_counts[field_id];
545
487
  break;
546
488
 
547
- case "median":
489
+ case 'median':
548
490
  if (!totals_arr[field_id].includes(value)) {
549
491
  totals_arr[field_id].push(value);
550
492
  }
551
493
  totals_obj[field_id] = median(totals_arr[field_id]);
552
494
  break;
553
- case "min":
554
- if (
555
- typeof totals_obj[field_id] === "undefined" ||
556
- value < totals_obj[field_id]
557
- ) {
495
+ case 'min':
496
+ if (typeof totals_obj[field_id] === 'undefined' || value < totals_obj[field_id]) {
558
497
  totals_obj[field_id] = value;
559
498
  }
560
499
  break;
561
- case "max":
562
- if (
563
- typeof totals_obj[field_id] === "undefined" ||
564
- value > totals_obj[field_id]
565
- ) {
500
+ case 'max':
501
+ if (typeof totals_obj[field_id] === 'undefined' || value > totals_obj[field_id]) {
566
502
  totals_obj[field_id] = value;
567
503
  }
568
504
  break;
569
- case "count":
570
- if (typeof totals_obj[field_id] === "undefined") {
505
+ case 'count':
506
+ if (typeof totals_obj[field_id] === 'undefined') {
571
507
  totals_obj[field_id] = 1;
572
508
  } else {
573
509
  totals_obj[field_id]++;
574
510
  }
575
511
  break;
576
- case "distinct":
512
+ case 'distinct':
577
513
  if (!totals_arr[field_id].includes(value)) {
578
514
  totals_arr[field_id].push(value);
579
515
  }
580
516
  totals_obj[field_id] = totals_arr[field_id].length;
581
517
  break;
582
518
 
583
- case "group":
519
+ case 'group':
584
520
  if (!totals_obj[field_id]) {
585
521
  totals_obj[field_id] = {};
586
522
  }
587
523
 
588
- if (typeof totals_obj[field_id][value] === "undefined") {
524
+ if (typeof totals_obj[field_id][value] === 'undefined') {
589
525
  totals_obj[field_id][value] = 1; //value;
590
526
  } else {
591
527
  totals_obj[field_id][value]++; //+= value;
@@ -615,10 +551,8 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
615
551
  // console.log("opt", opt);
616
552
  const doc = await db.find(opt);
617
553
  var mango_index_obj;
618
- if (doc?.warning?.includes("No matching index found")) {
619
- const index_name = `index_${e.table_id}_${new Date()
620
- .valueOf()
621
- .toString()}`;
554
+ if (doc?.warning?.includes('No matching index found')) {
555
+ const index_name = `index_${e.table_id}_${new Date().valueOf().toString()}`;
622
556
  var index = [];
623
557
 
624
558
  for (const [key, val] of Object.entries(opt.selector)) {
@@ -637,11 +571,10 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
637
571
  }
638
572
  return await done(doc);
639
573
  } catch (err) {
640
- if (err.error === "no_usable_index") {
641
- const index_name = `index_${e.table_id}_${new Date()
642
- .valueOf()
643
- .toString()}`;
574
+ if (err.error === 'no_usable_index') {
575
+ const index_name = `index_${e.table_id}_${new Date().valueOf().toString()}`;
644
576
  const _selector = _.cloneDeep(opt.selector);
577
+ delete _selector['$and'];
645
578
  const _sort = _.cloneDeep(opt.sort);
646
579
  mango_index_obj = {
647
580
  index: {
@@ -652,8 +585,8 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
652
585
  ret[Object.keys(val)[0]] = val;
653
586
  return ret;
654
587
  },
655
- _selector
656
- )
588
+ _selector,
589
+ ),
657
590
  ),
658
591
  },
659
592
  name: index_name,
@@ -693,15 +626,15 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
693
626
  if (key) {
694
627
  view_opt = {
695
628
  key,
696
- include_docs: !e.ids && view !== "db_index_reduce",
629
+ include_docs: !e.ids && view !== 'db_index_reduce',
697
630
  limit,
698
631
  skip,
699
632
  };
700
633
  } else {
701
634
  if (e.reduce) {
702
635
  view_opt = {
703
- startkey: e.startkey ? JSON.parse(e.startkey) : "",
704
- endkey: e.endkey ? JSON.parse(e.endkey) : "",
636
+ startkey: e.startkey ? JSON.parse(e.startkey) : '',
637
+ endkey: e.endkey ? JSON.parse(e.endkey) : '',
705
638
  include_docs: false,
706
639
  reduce: true,
707
640
  group_level: 3,
@@ -710,8 +643,8 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
710
643
  };
711
644
  } else {
712
645
  view_opt = {
713
- startkey: e.startkey ? JSON.parse(e.startkey) : "",
714
- endkey: e.endkey ? JSON.parse(e.endkey) : "",
646
+ startkey: e.startkey ? JSON.parse(e.startkey) : '',
647
+ endkey: e.endkey ? JSON.parse(e.endkey) : '',
715
648
  include_docs: !e.ids,
716
649
  limit,
717
650
  skip,
@@ -725,11 +658,7 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
725
658
  if (e.reduce) {
726
659
  let rows = [];
727
660
 
728
- const table_index = find_item_by_key_root(
729
- table_obj.tableIndexes,
730
- "id",
731
- e.indexId
732
- );
661
+ const table_index = find_item_by_key_root(table_obj.tableIndexes, 'id', e.indexId);
733
662
 
734
663
  for await (var val of body.rows) {
735
664
  const arr = val.key[2];
@@ -738,22 +667,13 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
738
667
  for await (const [arr_key, arr_val] of Object.entries(arr)) {
739
668
  let field_id = table_index.data.keys[Number(arr_key)];
740
669
 
741
- const _tableFieldsObj = find_item_by_key(
742
- table_obj.tableFields,
743
- "field_id",
744
- field_id
745
- );
670
+ const _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', field_id);
746
671
 
747
- let field_value = await get_cast_val(
748
- "dbs_update",
749
- e.field_id,
750
- _tableFieldsObj.props.fieldType,
751
- arr_val
752
- );
672
+ let field_value = await get_cast_val('dbs_update', e.field_id, _tableFieldsObj.props.fieldType, arr_val);
753
673
 
754
674
  obj[field_id] = field_value;
755
675
  }
756
- obj["REDUCE_VALUE"] = val.value;
676
+ obj['REDUCE_VALUE'] = val.value;
757
677
 
758
678
  rows.push({ id: crypto.randomUUID(), value: obj });
759
679
  }
@@ -814,16 +734,16 @@ const query_db = async function (e, db, app_id_reference, table_obj) {
814
734
  opt.key = e.table_id;
815
735
  }
816
736
 
817
- const body = await db.view(`xuda`, "db_table_counts", opt);
737
+ const body = await db.view(`xuda`, 'db_table_counts', opt);
818
738
 
819
739
  return { code: 1, data: body };
820
740
  };
821
741
  var view;
822
742
  if (e.reduce && JSON.parse(e.reduce)) {
823
- view = "db_index_reduce";
743
+ view = 'db_index_reduce';
824
744
  return await runtime_get_query_data();
825
745
  }
826
- if (e.view === "db_index") {
746
+ if (e.view === 'db_index') {
827
747
  key = e.key;
828
748
  view = e.view;
829
749
  return await runtime_get_query_data();
@@ -846,19 +766,14 @@ exports.create = async (params, setup_doc, resolve, reject) => {
846
766
  const create_data_obj = async function (table_data) {
847
767
  var doc = {};
848
768
  for await (const val of table_obj.tableFields) {
849
- doc[val.data.field_id] = await get_cast_val(
850
- "dbs_create",
851
- val.data.field_id,
852
- val.props.fieldType,
853
- table_data[val.data.field_id]
854
- );
769
+ doc[val.data.field_id] = await get_cast_val('dbs_create', val.data.field_id, val.props.fieldType, table_data[val.data.field_id]);
855
770
  }
856
771
 
857
772
  return doc;
858
773
  };
859
774
 
860
775
  const get_uuid = function (table_id) {
861
- return "dbs-" + table_id + "_" + crypto.randomUUID();
776
+ return 'dbs-' + table_id + '_' + crypto.randomUUID();
862
777
  };
863
778
  const batch = async function () {
864
779
  var docs = [];
@@ -866,7 +781,7 @@ exports.create = async (params, setup_doc, resolve, reject) => {
866
781
  for await (var val of e.table_data) {
867
782
  var doc = {
868
783
  _id: get_uuid(e.table_id),
869
- docType: "database",
784
+ docType: 'database',
870
785
  user: e.uid,
871
786
  app_id: e.app_id,
872
787
  stat: 3,
@@ -902,7 +817,7 @@ exports.create = async (params, setup_doc, resolve, reject) => {
902
817
  const single = async function () {
903
818
  var doc = {
904
819
  _id: get_uuid(e.table_id),
905
- docType: "database",
820
+ docType: 'database',
906
821
  user: e.uid,
907
822
  app_id: e.app_id,
908
823
  stat: 3,
@@ -955,55 +870,37 @@ exports.update = async (params, setup_doc, resolve, reject) => {
955
870
  const app_id_reference = params.app_id_reference;
956
871
  const table_obj = params.table_obj;
957
872
  try {
958
- if (e.row_id === "newRecord") {
873
+ if (e.row_id === 'newRecord') {
959
874
  return this.create(params, setup_doc, resolve, reject);
960
875
  }
961
876
  var doc = await db.get(e.row_id, {});
962
877
  // let data = doc.udfData.data;
963
878
  var error = undefined;
964
879
  if (!e.field_id && !e.table_data) {
965
- error = "Invalid field_id or table_data object to save";
880
+ error = 'Invalid field_id or table_data object to save';
966
881
  return reject(error);
967
882
  }
968
883
  // single value save
969
884
  if (e.field_id) {
970
- let _tableFieldsObj = find_item_by_key(
971
- table_obj.tableFields,
972
- "field_id",
973
- e.field_id
974
- );
885
+ let _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', e.field_id);
975
886
  if (!_tableFieldsObj || _.isEmpty(_tableFieldsObj)) {
976
- return reject("Error: " + e.field_id + " - field not found");
887
+ return reject('Error: ' + e.field_id + ' - field not found');
977
888
  }
978
889
 
979
- doc.udfData.data[e.field_id] = await get_cast_val(
980
- "dbs_update",
981
- e.field_id,
982
- _tableFieldsObj.props.fieldType,
983
- e.field_value
984
- );
890
+ doc.udfData.data[e.field_id] = await get_cast_val('dbs_update', e.field_id, _tableFieldsObj.props.fieldType, e.field_value);
985
891
  }
986
892
 
987
893
  // object value save
988
894
  if (e.table_data) {
989
895
  // data = {};
990
896
  for await (const [key, val] of Object.entries(e.table_data)) {
991
- let _tableFieldsObj = find_item_by_key(
992
- table_obj.tableFields,
993
- "field_id",
994
- key
995
- );
897
+ let _tableFieldsObj = find_item_by_key(table_obj.tableFields, 'field_id', key);
996
898
  if (!_tableFieldsObj || _.isEmpty(_tableFieldsObj)) {
997
- reject("Error: " + key + " - field not found");
899
+ reject('Error: ' + key + ' - field not found');
998
900
  break;
999
901
  }
1000
902
 
1001
- doc.udfData.data[key] = await get_cast_val(
1002
- "dbs_update",
1003
- key,
1004
- _tableFieldsObj.props.fieldType,
1005
- val
1006
- );
903
+ doc.udfData.data[key] = await get_cast_val('dbs_update', key, _tableFieldsObj.props.fieldType, val);
1007
904
  }
1008
905
  }
1009
906
 
@@ -1107,13 +1004,13 @@ exports.check_unique = async (params, setup_doc, resolve, reject) => {
1107
1004
  };
1108
1005
  exports.get_connection = async (params, setup_doc, resolve, reject) => {
1109
1006
  try {
1110
- if (!setup_doc.db_connection_string) throw "db_connection_string missing";
1111
- const nano = require("nano")(setup_doc.db_connection_string);
1007
+ if (!setup_doc.db_connection_string) throw 'db_connection_string missing';
1008
+ const nano = require('nano')(setup_doc.db_connection_string);
1112
1009
 
1113
1010
  if (!nano) {
1114
- return reject("connection error");
1011
+ return reject('connection error');
1115
1012
  }
1116
- await nano.get("_design/xuda");
1013
+ await nano.get('_design/xuda');
1117
1014
  resolve(nano);
1118
1015
  } catch (err) {
1119
1016
  return reject(err.message || err);