ronds-metadata 1.3.26 → 1.3.28

Sign up to get free protection for your applications and to get access to all the features.
@@ -68,7 +68,7 @@ declare class DPGraph extends GraphCore<BaseNode, BaseEdge> {
68
68
  edges: DPEdge[];
69
69
  }): void;
70
70
  onContextMenu(data: ContextMenuInfo): any;
71
- onAddCopyCells(nodes: DPNode[], edges: DPEdge[]): void;
71
+ onAddCopyCells(nodes: any[], edges: any[]): void;
72
72
  onCopyNodes(args: any[]): void;
73
73
  updateNodeNameById(id: string, name: string): void;
74
74
  clearContextMenuInfo: () => void;
@@ -16,7 +16,7 @@ import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
16
16
  /*
17
17
  * @Author: wangxian
18
18
  * @Date: 2022-05-24 14:31:01
19
- * @LastEditTime: 2023-12-05 09:54:43
19
+ * @LastEditTime: 2024-01-16 09:05:26
20
20
  */
21
21
  import _regeneratorRuntime from "@babel/runtime/regenerator";
22
22
  import produce from 'immer';
@@ -30,7 +30,7 @@ import { GraphCore } from '../../framework/graph';
30
30
  import NodeElement from './comps/NodeElement';
31
31
  import { DPEdge } from './comps/shape/edge';
32
32
  import { DPNode } from './comps/shape/node';
33
- import { formatGraphData, copy, formatNodeInfoToNodeMeta, formattedEdgesToEdgeMeta, isClipboardEmpty, cleanClipboard } from './utils';
33
+ import { formatGraphData, copy, formatNodeInfoToNodeMeta, formattedEdgesToEdgeMeta, isClipboardEmpty, cleanClipboard, getCellsInClipboard } from './utils';
34
34
  import { deepClone, guid } from '../../utils';
35
35
  import { MetadataService } from '../../framework/metadata/MetadataService';
36
36
  import { tr } from '../../framework/locale';
@@ -123,7 +123,7 @@ var DPGraph = /*#__PURE__*/function (_GraphCore) {
123
123
  var targetPort = targetNode.getPort(targetPortId);
124
124
  // 如果设置输出port类型,则需要校验类型是否相等
125
125
  // 只有类型相等才可以联线
126
- if ((sourcePort === null || sourcePort === void 0 ? void 0 : sourcePort.type) !== '-1' && (sourcePort === null || sourcePort === void 0 ? void 0 : sourcePort.type) && (targetPort === null || targetPort === void 0 ? void 0 : targetPort.type) && sourcePort.type !== targetPort.type) {
126
+ if ((sourcePort === null || sourcePort === void 0 ? void 0 : sourcePort.type) !== '-1' && (sourcePort === null || sourcePort === void 0 ? void 0 : sourcePort.type) && (targetPort === null || targetPort === void 0 ? void 0 : targetPort.type) && targetPort.type.indexOf(sourcePort.type) === -1) {
127
127
  return false;
128
128
  }
129
129
  // 判断目标链接桩是否可连接
@@ -738,7 +738,7 @@ var DPGraph = /*#__PURE__*/function (_GraphCore) {
738
738
  var cells = [];
739
739
  var randomId = guid().substring(0, 4);
740
740
  nodes.map(function (cell) {
741
- var _node = cell.getData();
741
+ var _node = cell.data;
742
742
  _node = _objectSpread(_objectSpread({}, _node), {}, {
743
743
  id: "".concat(_node.id, "_copy_").concat(randomId),
744
744
  x: _node.x + 30,
@@ -749,7 +749,7 @@ var DPGraph = /*#__PURE__*/function (_GraphCore) {
749
749
  _this2.addNode(newNode);
750
750
  });
751
751
  edges.map(function (cell) {
752
- var _edge = cell.getData();
752
+ var _edge = cell.data;
753
753
  _edge = _objectSpread(_objectSpread({}, _edge), {}, {
754
754
  source: "".concat(_edge.source, "_copy_").concat(randomId),
755
755
  target: "".concat(_edge.target, "_copy_").concat(randomId)
@@ -762,7 +762,7 @@ var DPGraph = /*#__PURE__*/function (_GraphCore) {
762
762
  // 回显选中复制的之后的节点
763
763
  nodes.map(function (cell) {
764
764
  var _this2$graph;
765
- var _node = cell.getData();
765
+ var _node = cell.data;
766
766
  var _cell = (_this2$graph = _this2.graph) === null || _this2$graph === void 0 ? void 0 : _this2$graph.getCellById("".concat(_node.id, "_copy_").concat(randomId));
767
767
  cells.push(_cell);
768
768
  });
@@ -787,12 +787,12 @@ var DPGraph = /*#__PURE__*/function (_GraphCore) {
787
787
  if (isClipboardEmpty()) {
788
788
  _message.info(tr('剪切板为空,不可粘贴'));
789
789
  } else {
790
- var clipboardCells = this.graph.getCellsInClipboard();
791
- var selectedNodes = clipboardCells.filter(function (cell) {
792
- return cell.isNode();
790
+ var clipboardCells = getCellsInClipboard();
791
+ var selectedNodes = clipboardCells === null || clipboardCells === void 0 ? void 0 : clipboardCells.filter(function (cell) {
792
+ return (cell === null || cell === void 0 ? void 0 : cell.type) === 'node';
793
793
  });
794
- var selectedEdges = clipboardCells.filter(function (cell) {
795
- return cell.isEdge();
794
+ var selectedEdges = clipboardCells === null || clipboardCells === void 0 ? void 0 : clipboardCells.filter(function (cell) {
795
+ return (cell === null || cell === void 0 ? void 0 : cell.shape) === 'DPEdge';
796
796
  });
797
797
  this.onAddCopyCells(selectedNodes, selectedEdges);
798
798
  _message.success(tr('粘贴成功'));
@@ -0,0 +1,881 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
3
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
4
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
5
+ var JsonQL = /*#__PURE__*/function () {
6
+ function JsonQL(schema) {
7
+ _classCallCheck(this, JsonQL);
8
+ this.schema = schema;
9
+ this.errors = [];
10
+ this.fatalError = false;
11
+ this.joinTables = [];
12
+ this.all = false;
13
+ this.select = [];
14
+ this.from = {
15
+ db: '',
16
+ table: ''
17
+ };
18
+ this.join = [];
19
+ this.having = [];
20
+ this.where = [];
21
+ this.limit = [];
22
+ this.columns = [];
23
+ this.values = [];
24
+ this.orderBy = '';
25
+ this.ascOrDesc = '';
26
+ }
27
+
28
+ // █▀▀ █▀▀█ █░░█ █▀▀▄ █▀▄▀█ █▀▀ ▀▀█▀▀ █░░█ █▀▀█ █▀▀▄ █▀▀
29
+ // █░░ █▄▄▀ █░░█ █░░█ █░▀░█ █▀▀ ░░█░░ █▀▀█ █░░█ █░░█ ▀▀█
30
+ // ▀▀▀ ▀░▀▀ ░▀▀▀ ▀▀▀░ ▀░░░▀ ▀▀▀ ░░▀░░ ▀░░▀ ▀▀▀▀ ▀▀▀░ ▀▀▀
31
+ _createClass(JsonQL, [{
32
+ key: "selectQL",
33
+ value: function selectQL(_ref) {
34
+ var db = _ref.db,
35
+ table = _ref.table,
36
+ columns = _ref.columns,
37
+ where = _ref.where,
38
+ having = _ref.having,
39
+ limit = _ref.limit,
40
+ orderBy = _ref.orderBy;
41
+ this.initJsonQL({
42
+ db: db,
43
+ table: table,
44
+ columns: columns,
45
+ where: where,
46
+ having: having,
47
+ limit: limit,
48
+ orderBy: orderBy
49
+ });
50
+ var selectString = this.buildSelect();
51
+ if (this.fatalError) {
52
+ return {
53
+ status: 'error',
54
+ query: selectString,
55
+ errors: this.errors
56
+ };
57
+ }
58
+ return {
59
+ status: 'success',
60
+ query: selectString,
61
+ errors: this.errors
62
+ };
63
+ }
64
+ }, {
65
+ key: "createQL",
66
+ value: function createQL(_ref2, data) {
67
+ var db = _ref2.db,
68
+ table = _ref2.table,
69
+ columns = _ref2.columns,
70
+ where = _ref2.where,
71
+ having = _ref2.having,
72
+ limit = _ref2.limit;
73
+ if (!data) {
74
+ this.errors.push('Data must be provided in a createQL');
75
+ this.fatalError = true;
76
+ }
77
+ this.initJsonQL({
78
+ db: db,
79
+ table: table,
80
+ columns: columns,
81
+ where: where,
82
+ having: having,
83
+ limit: limit
84
+ }, data);
85
+ this.pushPrimaryKey(db, table);
86
+ var selectString = this.buildCreate();
87
+ if (this.fatalError) {
88
+ return {
89
+ status: 'error',
90
+ query: selectString,
91
+ errors: this.errors
92
+ };
93
+ }
94
+ return {
95
+ status: 'success',
96
+ query: selectString,
97
+ errors: this.errors
98
+ };
99
+ }
100
+ }, {
101
+ key: "updateQL",
102
+ value: function updateQL(_ref3, data) {
103
+ var db = _ref3.db,
104
+ table = _ref3.table,
105
+ columns = _ref3.columns,
106
+ where = _ref3.where,
107
+ having = _ref3.having,
108
+ limit = _ref3.limit,
109
+ affectAll = _ref3.affectAll;
110
+ if (!data) {
111
+ this.errors.push('Data must be provided in a updateQL');
112
+ this.fatalError = true;
113
+ }
114
+ this.initJsonQL({
115
+ db: db,
116
+ table: table,
117
+ columns: columns,
118
+ where: where,
119
+ having: having,
120
+ limit: limit,
121
+ affectAll: affectAll
122
+ }, data);
123
+ var selectString = this.buildUpdate();
124
+ if (this.fatalError) {
125
+ return {
126
+ status: 'error',
127
+ query: selectString,
128
+ errors: this.errors
129
+ };
130
+ }
131
+ return {
132
+ status: 'success',
133
+ query: selectString,
134
+ errors: this.errors
135
+ };
136
+ }
137
+ }, {
138
+ key: "deleteQL",
139
+ value: function deleteQL(_ref4) {
140
+ var db = _ref4.db,
141
+ table = _ref4.table,
142
+ columns = _ref4.columns,
143
+ where = _ref4.where,
144
+ having = _ref4.having,
145
+ limit = _ref4.limit,
146
+ affectAll = _ref4.affectAll;
147
+ this.initJsonQL({
148
+ db: db,
149
+ table: table,
150
+ columns: columns,
151
+ where: where,
152
+ having: having,
153
+ limit: limit,
154
+ affectAll: affectAll
155
+ });
156
+ var selectString = this.buildDelete();
157
+ if (this.fatalError) {
158
+ return {
159
+ status: 'error',
160
+ query: selectString,
161
+ errors: this.errors
162
+ };
163
+ }
164
+ return {
165
+ status: 'success',
166
+ query: selectString,
167
+ errors: this.errors
168
+ };
169
+ }
170
+
171
+ // █▀▀ █▀▀▄ ▀▀█▀▀ █▀▀█ █░░█ █▀▀█ █▀▀█ ░▀░ █▀▀▄ ▀▀█▀▀
172
+ // █▀▀ █░░█ ░░█░░ █▄▄▀ █▄▄█ █░░█ █░░█ ▀█▀ █░░█ ░░█░░
173
+ // ▀▀▀ ▀░░▀ ░░▀░░ ▀░▀▀ ▄▄▄█ █▀▀▀ ▀▀▀▀ ▀▀▀ ▀░░▀ ░░▀░░
174
+ }, {
175
+ key: "initJsonQL",
176
+ value: function initJsonQL(_ref5, data) {
177
+ var db = _ref5.db,
178
+ table = _ref5.table,
179
+ columns = _ref5.columns,
180
+ where = _ref5.where,
181
+ having = _ref5.having,
182
+ limit = _ref5.limit,
183
+ orderBy = _ref5.orderBy,
184
+ affectAll = _ref5.affectAll;
185
+ if (this.validBySchema(db, table)) {
186
+ this.from = {
187
+ db: db,
188
+ table: table
189
+ };
190
+ } else {
191
+ this.fatalError = true;
192
+ return;
193
+ }
194
+ if (affectAll) {
195
+ this.affectAll = affectAll;
196
+ }
197
+ if (data) {
198
+ this.parseData(db, table, data);
199
+ }
200
+ if (columns && (columns || []).length > 0) {
201
+ this.pushCols({
202
+ dbName: db,
203
+ dbAlias: db
204
+ }, {
205
+ tableName: table,
206
+ tableAlias: table
207
+ }, columns);
208
+ }
209
+
210
+ // If there's no selections then get all non-hidden columns from the schema
211
+ if (this.select.length === 0) {
212
+ this.pushSelFromSchema(db, table);
213
+ }
214
+ if (where && (where || []).length > 0) {
215
+ this.pushWhere({
216
+ dbName: db,
217
+ dbAlias: db
218
+ }, {
219
+ tableName: table,
220
+ tableAlias: table
221
+ }, where);
222
+ }
223
+ if (having && (having || []).length > 0) {
224
+ this.pushHaving(having);
225
+ }
226
+ if (orderBy) {
227
+ this.pushOrderBy(db, table, orderBy);
228
+ }
229
+ if (limit) {
230
+ this.limit = limit;
231
+ }
232
+ }
233
+
234
+ // █▀▀▄ █▀▀█ ▀▀█▀▀ █▀▀█
235
+ // █░░█ █▄▄█ ░░█░░ █▄▄█
236
+ // ▀▀▀░ ▀░░▀ ░░▀░░ ▀░░▀
237
+ }, {
238
+ key: "parseData",
239
+ value: function parseData(db, table, data) {
240
+ var _this = this;
241
+ Object.keys(data).forEach(function (key) {
242
+ if (_this.validJQString(db, table, key)) {
243
+ _this.pushJQString(db, table, key, data[key]);
244
+ return;
245
+ }
246
+ if (!_this.validBySchema(db, table, key)) return;
247
+ if (typeof data[key] === 'number') {
248
+ _this.values.push(data[key]);
249
+ } else if (typeof data[key] === 'string') {
250
+ _this.values.push("'".concat(data[key], "'"));
251
+ } else {
252
+ return;
253
+ }
254
+ _this.columns.push(key);
255
+ });
256
+ }
257
+
258
+ // █▀▀█ █░░█ █▀▀ █░░█ █▀▀ █░░█ █▀▀▄ █▀▀ ▀▀█▀▀ ░▀░ █▀▀█ █▀▀▄ █▀▀
259
+ // █░░█ █░░█ ▀▀█ █▀▀█ █▀▀ █░░█ █░░█ █░░ ░░█░░ ▀█▀ █░░█ █░░█ ▀▀█
260
+ // █▀▀▀ ░▀▀▀ ▀▀▀ ▀░░▀ ▀░░ ░▀▀▀ ▀░░▀ ▀▀▀ ░░▀░░ ▀▀▀ ▀▀▀▀ ▀░░▀ ▀▀▀
261
+ }, {
262
+ key: "pushPrimaryKey",
263
+ value: function pushPrimaryKey(db, table) {
264
+ var _this2 = this;
265
+ var tableSchema = this.schema[db][table];
266
+ Object.keys(tableSchema).forEach(function (key) {
267
+ if (_this2.columns.includes(key)) return;
268
+ if (tableSchema[key].primaryKey && typeof tableSchema[key].primaryKey === 'function') {
269
+ if (tableSchema[key].type === 'json') {
270
+ _this2.errors.push('primaryKey must be either number or string type, check your schema for ' + db + '.' + table);
271
+ return;
272
+ }
273
+ _this2.columns.push("".concat(key));
274
+ var primaryKey = tableSchema[key].primaryKey();
275
+ if (tableSchema[key].type === 'string') _this2.values.push("'".concat(primaryKey, "'"));else if (tableSchema[key].type === 'number') _this2.values.push("".concat(primaryKey));else if (!tableSchema[key].type) _this2.values.push("'".concat(primaryKey, "'"));
276
+ }
277
+ });
278
+ }
279
+ }, {
280
+ key: "pushQuery",
281
+ value: function pushQuery(db, table, key, value) {
282
+ // let key = '$jsonForm[?Booking Month].value';
283
+
284
+ var column = this.extractColFromJQString(db, table, key);
285
+ column = "".concat(db, ".").concat(table, ".").concat(column);
286
+ value = "IF(\n ".concat(this.jQSet(db, table, key, value), " IS NOT NULL,\n ").concat(this.jQSet(db, table, key, value), ",\n ").concat(column, "\n )");
287
+ this.columns.push("".concat(column));
288
+ this.values.push(value);
289
+ }
290
+ }, {
291
+ key: "pushOrderBy",
292
+ value: function pushOrderBy(db, table, orderBy) {
293
+ if (this.validJQString(db, table, orderBy.name)) {
294
+ this.orderBy = this.jQExtract(db, table, orderBy.name);
295
+ } else if (this.validBySchema(db, table, orderBy.name)) {
296
+ this.orderBy = orderBy.name;
297
+ }
298
+ if (this.orderBy.length === 0) {
299
+ return;
300
+ }
301
+ if (orderBy.desc && typeof orderBy.desc !== 'boolean') {
302
+ this.errors.push('orderBy.desc must be a Boolean type value.');
303
+ return;
304
+ }
305
+ this.ascOrDesc = orderBy.desc ? 'DESC' : 'ASC';
306
+ }
307
+ }, {
308
+ key: "pushCols",
309
+ value: function pushCols(dbObj, tableObj, columns) {
310
+ if (!this.validBySchema(dbObj.dbName, tableObj.tableName)) {
311
+ return;
312
+ }
313
+ var nameCols = columns.filter(function (col) {
314
+ return col.name || col.number || col.string || col.count;
315
+ });
316
+ var joinCols = columns.filter(function (col) {
317
+ return col.join;
318
+ });
319
+ var fnCols = columns.filter(function (col) {
320
+ return col.fn;
321
+ });
322
+ if (nameCols.length > 0) {
323
+ this.pushNameCols(dbObj, tableObj, nameCols);
324
+ }
325
+ if (joinCols.length > 0) {
326
+ this.pushJoinCols(dbObj, tableObj, joinCols);
327
+ }
328
+ if (fnCols.length > 0) {
329
+ this.pushFnCols(dbObj, tableObj, fnCols);
330
+ }
331
+ }
332
+ }, {
333
+ key: "pushSelFromSchema",
334
+ value: function pushSelFromSchema(db, table) {
335
+ var _this3 = this;
336
+ var fromTable = this.schema[db][table];
337
+ return "".concat(Object.keys(fromTable).filter(function (key) {
338
+ return fromTable[key].hidden !== true;
339
+ }).forEach(function (key) {
340
+ _this3.select.push("".concat(db, ".").concat(table, ".").concat(key));
341
+ }));
342
+ }
343
+ }, {
344
+ key: "pushNameCols",
345
+ value: function pushNameCols(dbObj, tableObj, nameCols) {
346
+ var _this4 = this;
347
+ nameCols.forEach(function (col) {
348
+ var selectStr = '';
349
+ if (col.name && _this4.validJQString(dbObj.dbName, tableObj.tableName, col.name)) {
350
+ selectStr = _this4.jQExtract(dbObj.dbName, tableObj.tableName, col.name);
351
+ } else if (col.name && _this4.validBySchema(dbObj.dbName, tableObj.tableName, col.name)) {
352
+ selectStr = "".concat(dbObj.dbAlias, ".").concat(tableObj.tableAlias, ".").concat(col.name);
353
+ } else if (col.number && typeof col.number === 'number') {
354
+ selectStr = "".concat(col.number);
355
+ } else if (col.number) {
356
+ _this4.errors.push(col.number + ' is not a number');
357
+ } else if (col.string && _this4.validString(col.string)) {
358
+ selectStr = "'".concat(col.string, "'");
359
+ } else if (col.jsonExtract && _this4.validString(col.jsonExtract.search) && _this4.validString(col.jsonExtract.target)) {
360
+ selectStr = "JSON_EXTRACT(JSON_EXTRACT(".concat(selectStr, ", CONCAT('$[', SUBSTR(JSON_SEARCH(").concat(selectStr, ", 'one', '").concat(col.jsonExtract.search, "'), 4, 1), ']')), '$.").concat(col.jsonExtract.target, "')");
361
+ }
362
+ if (col.count) {
363
+ selectStr += _this4.countString(dbObj.dbName, tableObj.tableName, col.count);
364
+ }
365
+ // We can't have an `as` without something before it so also check the selectStr length
366
+ if (col.as && _this4.validString(col.as) && selectStr.length > 0) {
367
+ selectStr += " AS ".concat(col.as);
368
+ }
369
+ if (selectStr.length > 0) {
370
+ _this4.select.push(selectStr);
371
+ }
372
+ });
373
+ }
374
+ }, {
375
+ key: "pushJoinCols",
376
+ value: function pushJoinCols(dbObj, tableObj, joinCols) {
377
+ var _this5 = this;
378
+ joinCols.forEach(function (col) {
379
+ if (!_this5.validBySchema(dbObj.dbName, tableObj.tableName, col.join.where[0].name)) {
380
+ return;
381
+ }
382
+ if (col.join.where[0].isnot) {
383
+ if (!_this5.validBySchema(col.join.db, col.join.table, col.join.where[0].isnot)) return;
384
+ }
385
+ if (col.join.where[0].is) {
386
+ if (!_this5.validBySchema(col.join.db, col.join.table, col.join.where[0].is)) return;
387
+ }
388
+ var joinStr = '';
389
+ var aliasTableName = _this5.aliasReplicaTableNames(col.join.table);
390
+ var aliasString = '';
391
+ if (col.join.table !== aliasTableName) {
392
+ aliasString = " AS ".concat(aliasTableName);
393
+ }
394
+ if (col.join.where[0].isnot) {
395
+ joinStr = "".concat(col.join.db, ".").concat(col.join.table).concat(aliasString, " ON ").concat(dbObj.dbName, ".").concat(tableObj.tableName, ".").concat(col.join.where[0].name, " != ").concat(col.join.db, ".").concat(aliasTableName, ".").concat(col.join.where[0].isnot);
396
+ }
397
+ if (col.join.where[0].is) {
398
+ joinStr = "".concat(col.join.db, ".").concat(col.join.table).concat(aliasString, " ON ").concat(dbObj.dbName, ".").concat(tableObj.tableName, ".").concat(col.join.where[0].name, " = ").concat(col.join.db, ".").concat(aliasTableName, ".").concat(col.join.where[0].is);
399
+ }
400
+ if (joinStr.length > 0) {
401
+ _this5.join.push(joinStr);
402
+ }
403
+ _this5.pushCols({
404
+ dbName: col.join.db,
405
+ dbAlias: col.join.db
406
+ }, {
407
+ tableName: col.join.table,
408
+ tableAlias: aliasTableName
409
+ }, col.join.columns);
410
+ });
411
+ }
412
+ }, {
413
+ key: "pushFnCols",
414
+ value: function pushFnCols(dbObj, tableObj, fnCols) {
415
+ var _this6 = this;
416
+ fnCols.forEach(function (col) {
417
+ var selectStr = '';
418
+ if (!_this6.validBySchema(dbObj.dbName, tableObj.tableName)) {
419
+ return;
420
+ }
421
+ selectStr = _this6.fnString(dbObj.dbAlias, tableObj.tableAlias, col.fn, col.args);
422
+ if (col.as && _this6.validString(col.as)) {
423
+ selectStr += " AS ".concat(col.as);
424
+ }
425
+ if (selectStr.length > 0) {
426
+ _this6.select.push(selectStr);
427
+ }
428
+ });
429
+ }
430
+ }, {
431
+ key: "pushOrArrWhere",
432
+ value: function pushOrArrWhere(dbObj, tableObj, or) {
433
+ var _this7 = this;
434
+ var whereStr = '';
435
+ or.forEach(function (wh, i) {
436
+ if (_this7.validJQString(dbObj.dbName, tableObj.tableName, wh.name)) {
437
+ if (i !== 0) {
438
+ whereStr += ' OR ';
439
+ }
440
+ whereStr += "".concat(_this7.whString(dbObj.dbName, tableObj.tableName, wh));
441
+ return;
442
+ }
443
+ if (_this7.validBySchema(dbObj.dbName, tableObj.tableName, wh.name)) {
444
+ if (i !== 0) {
445
+ whereStr += ' OR ';
446
+ }
447
+ whereStr += "".concat(_this7.whString(dbObj.dbName, tableObj.tableName, wh));
448
+ return;
449
+ }
450
+ });
451
+ if (whereStr.length > 0) {
452
+ this.where.push(whereStr);
453
+ }
454
+ }
455
+ }, {
456
+ key: "pushOrArrHaving",
457
+ value: function pushOrArrHaving(or) {
458
+ var _this8 = this;
459
+ var havingStr = "(".concat(or.filter(function (ha) {
460
+ return _this8.validString(ha.name) && (_this8.validString(ha.is) || _this8.validString(ha.isnot));
461
+ }).map(function (ha) {
462
+ var value = ha.is && typeof ha.is === 'number' ? "= ".concat(ha.is) : ha.is && typeof ha.is === 'string' ? "= '".concat(ha.is, "'") : ha.isnot && typeof ha.isnot === 'number' ? "!= ".concat(ha.isnot) : ha.isnot && typeof ha.isnot === 'string' ? "!= '".concat(ha.isnot, "'") : '';
463
+ return "".concat(ha.name, " ").concat(value);
464
+ }).join(' OR '), ")");
465
+ if (havingStr.length > 0) {
466
+ this.having.push(havingStr);
467
+ }
468
+ }
469
+ }, {
470
+ key: "pushWhere",
471
+ value: function pushWhere(dbObj, tableObj, where) {
472
+ var _this9 = this;
473
+ where.forEach(function (wh) {
474
+ var whereStr = '';
475
+ if ((wh || []).length > 0) {
476
+ _this9.pushOrArrWhere(dbObj, tableObj, wh);
477
+ return;
478
+ }
479
+ if (_this9.validJQString(dbObj.dbName, tableObj.tableName, wh.name)) {
480
+ whereStr = "".concat(_this9.whString(dbObj.dbName, tableObj.tableName, wh));
481
+ if (whereStr.length > 0) {
482
+ _this9.where.push(whereStr);
483
+ return;
484
+ }
485
+ }
486
+ if (_this9.validBySchema(dbObj.dbName, tableObj.tableName, wh.name)) {
487
+ whereStr = "".concat(_this9.whString(dbObj.dbName, tableObj.tableName, wh));
488
+ if (whereStr.length > 0) {
489
+ _this9.where.push(whereStr);
490
+ return;
491
+ }
492
+ }
493
+ });
494
+ }
495
+ }, {
496
+ key: "pushHaving",
497
+ value: function pushHaving(having) {
498
+ var _this10 = this;
499
+ having.forEach(function (ha) {
500
+ // This check here is a bit out of place but we want to keep
501
+ // the old nested OR syntax so there it is.
502
+ if (!ha.name && ha.or && (ha.or || []).length > 0) {
503
+ _this10.pushOrArrHaving(ha.or);
504
+ return;
505
+ }
506
+ var havingStr = "".concat(_this10.haString(ha));
507
+ if (havingStr.length > 0) {
508
+ _this10.having.push(havingStr);
509
+ }
510
+ });
511
+ }
512
+
513
+ // █▀▀ ▀▀█▀▀ █▀▀█ ░▀░ █▀▀▄ █▀▀▀ █▀▀ █░░█ █▀▀▄ █▀▀ ▀▀█▀▀ ░▀░ █▀▀█ █▀▀▄ █▀▀
514
+ // ▀▀█ ░░█░░ █▄▄▀ ▀█▀ █░░█ █░▀█ █▀▀ █░░█ █░░█ █░░ ░░█░░ ▀█▀ █░░█ █░░█ ▀▀█
515
+ // ▀▀▀ ░░▀░░ ▀░▀▀ ▀▀▀ ▀░░▀ ▀▀▀▀ ▀░░ ░▀▀▀ ▀░░▀ ▀▀▀ ░░▀░░ ▀▀▀ ▀▀▀▀ ▀░░▀ ▀▀▀
516
+ }, {
517
+ key: "countString",
518
+ value: function countString(db, table, count) {
519
+ var _this11 = this;
520
+ var whereStr = count.where.map(function (wh) {
521
+ return _this11.whString(count.db, count.table, wh);
522
+ }).join();
523
+ return "(SELECT COUNT(*) FROM ".concat(count.db, ".").concat(count.table, " WHERE ").concat(whereStr, ")");
524
+ }
525
+ }, {
526
+ key: "orWhString",
527
+ value: function orWhString(db, table, orArr) {
528
+ var _this12 = this;
529
+ return "".concat(orArr.filter(function (or) {
530
+ return or.name && (_this12.validBySchema(db, table, or.name) || _this12.validJQString(db, table, or.name));
531
+ }).map(function (or) {
532
+ return _this12.whString(db, table, or);
533
+ }).join(' OR '));
534
+ }
535
+ }, {
536
+ key: "orHaString",
537
+ value: function orHaString(orArr) {
538
+ var _this13 = this;
539
+ return "".concat(orArr.filter(function (or) {
540
+ return or.name && _this13.validString(or.name);
541
+ }).map(function (or) {
542
+ return _this13.haString(or);
543
+ }).join(' OR '));
544
+ }
545
+ }, {
546
+ key: "whString",
547
+ value: function whString(db, table, wh) {
548
+ if (wh.is && !this.validString(wh.is)) return '';
549
+ if (wh.isnot && !this.validString(wh.isnot)) return '';
550
+ if (wh.isbetween && !this.validString(wh.isbetween[0])) return '';
551
+ if (wh.isbetween && !this.validString(wh.isbetween[1])) return '';
552
+ var value = typeof wh.is === 'number' ? "= ".concat(wh.is) : typeof wh.is === 'string' ? "= '".concat(wh.is, "'") : typeof wh.isnot === 'number' ? "!= ".concat(wh.isnot) : typeof wh.isnot === 'string' ? "!= '".concat(wh.isnot, "'") : wh.isbetween ? "BETWEEN ".concat(wh.isbetween.map(function (val) {
553
+ return typeof val === 'string' ? "'".concat(val, "'") : val;
554
+ }).join(' AND ')) : '';
555
+ var name = this.validJQString(db, table, wh.name) ? this.jQExtract(db, table, wh.name) : "".concat(db, ".").concat(table, ".").concat(wh.name);
556
+ return "".concat(name, " ").concat(value);
557
+ }
558
+ }, {
559
+ key: "haString",
560
+ value: function haString(ha) {
561
+ if (ha.name && !this.validString(ha.name)) {
562
+ return '';
563
+ }
564
+ if (ha.isnot && !this.validString(ha.isnot)) {
565
+ return '';
566
+ }
567
+ if (ha.is && !this.validString(ha.is)) {
568
+ return '';
569
+ }
570
+ if ((ha || []).length > 0 && _typeof(ha) === 'object') {
571
+ return this.orHaString(ha);
572
+ }
573
+ var value = typeof ha.is === 'number' ? "= ".concat(ha.is) : typeof ha.is === 'string' ? "= '".concat(ha.is, "'") : typeof ha.isnot === 'number' ? "!= ".concat(ha.isnot) : typeof ha.isnot === 'string' ? "!= '".concat(ha.isnot, "'") : ha.isbetween ? "BETWEEN ".concat(ha.isbetween.map(function (val) {
574
+ return typeof val === 'string' ? "'".concat(val, "'") : val;
575
+ }).join(' AND ')) : '';
576
+ var name = this.validPlainJQString(ha.name) ? this.plainjQExtract(ha.name) : "".concat(ha.name);
577
+ return "".concat(name, " ").concat(value);
578
+ }
579
+ }, {
580
+ key: "fnString",
581
+ value: function fnString(db, table, fn, args) {
582
+ var _this14 = this;
583
+ if (!this.validString(fn)) return '';
584
+ return "".concat(fn, "(").concat(args.map(function (arg) {
585
+ if (_this14.validJQString(db, table, arg.name)) {
586
+ return _this14.jQExtract(db, table, arg.name);
587
+ } else if (arg.name) {
588
+ return "".concat(db, ".").concat(table, ".").concat(arg.name);
589
+ }
590
+ if (arg.number && typeof arg.number === 'number') {
591
+ return "".concat(arg.number);
592
+ } else if (arg.number) {
593
+ _this14.errors(arg.number + ' in fn object is not a number type');
594
+ }
595
+ if (arg.string && _this14.validString(arg.string)) {
596
+ return "'".concat(arg.string, "'");
597
+ }
598
+ if (arg.fn) {
599
+ return _this14.fnString(db, table, arg.fn, arg.args);
600
+ }
601
+ }).join(), ")");
602
+ }
603
+
604
+ // █▀▀▄ █░░█ ░▀░ █░░ █▀▀▄ █▀▀ █▀▀█ █▀▀
605
+ // █▀▀▄ █░░█ ▀█▀ █░░ █░░█ █▀▀ █▄▄▀ ▀▀█
606
+ // ▀▀▀░ ░▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀░ ▀▀▀ ▀░▀▀ ▀▀▀
607
+ }, {
608
+ key: "buildSelect",
609
+ value: function buildSelect() {
610
+ var select = '';
611
+ if (this.select.length > 0) {
612
+ select = "SELECT ".concat(this.select.map(function (selStr) {
613
+ return selStr;
614
+ }).join());
615
+ }
616
+ var from = "FROM ".concat(this.from.db, ".").concat(this.from.table);
617
+ var join = '';
618
+ if (this.join.length > 0) {
619
+ join = "".concat(this.join.map(function (jStr) {
620
+ return "LEFT JOIN ".concat(jStr);
621
+ }).join(' '));
622
+ }
623
+ var where = '';
624
+ if (this.where.length > 0) {
625
+ where = "WHERE ".concat(this.where.map(function (whStr) {
626
+ return "(".concat(whStr, ")");
627
+ }).join(' AND '));
628
+ }
629
+ var having = '';
630
+ if (this.having.length > 0) {
631
+ having = "HAVING ".concat(this.having.map(function (haStr) {
632
+ return "(".concat(haStr, ")");
633
+ }).join(' AND '));
634
+ }
635
+ var orderBy = '';
636
+ if (this.orderBy.length > 0) {
637
+ orderBy = "ORDER BY ".concat(this.orderBy);
638
+ }
639
+ var ascOrDesc = '';
640
+ if (this.ascOrDesc.length > 0) {
641
+ ascOrDesc = this.ascOrDesc;
642
+ }
643
+ var limit = '';
644
+ if (this.limit.length > 0) {
645
+ limit = "LIMIT ".concat(this.limit.map(function (num) {
646
+ return num;
647
+ }).join());
648
+ }
649
+ return "".concat(select, " ").concat(from, " ").concat(join, " ").concat(where, " ").concat(having, " ").concat(orderBy, " ").concat(ascOrDesc, " ").concat(limit);
650
+ }
651
+ }, {
652
+ key: "buildCreate",
653
+ value: function buildCreate() {
654
+ var from = "INSERT INTO ".concat(this.from.db, ".").concat(this.from.table);
655
+ var columns = '';
656
+ if (this.columns.length > 0) {
657
+ columns = "(".concat(this.columns.join(), ")");
658
+ }
659
+ var values = '';
660
+ if (this.values.length > 0) {
661
+ values = "VALUES (".concat(this.values.join(), ")");
662
+ }
663
+ return "".concat(from, " ").concat(columns, " ").concat(values);
664
+ }
665
+ }, {
666
+ key: "buildUpdate",
667
+ value: function buildUpdate() {
668
+ var _this15 = this;
669
+ var from = "UPDATE ".concat(this.from.db, ".").concat(this.from.table);
670
+ var set = '';
671
+ if (this.columns.length === this.values.length && this.columns.length > 0 && this.values.length > 0) {
672
+ set = "SET ".concat(this.columns.map(function (col, i) {
673
+ return "".concat(col, " = ").concat(_this15.values[i]);
674
+ }).join());
675
+ }
676
+ var where = '';
677
+ if (this.where.length > 0) {
678
+ where = "WHERE ".concat(this.where.map(function (whStr) {
679
+ return "(".concat(whStr, ")");
680
+ }).join(' AND '));
681
+ } else if (!this.affectAll) {
682
+ this.fatalError = true;
683
+ this.errors.push('No where clause provided. If you want to update all records then add `affectAll: true` to your queryObject');
684
+ }
685
+ var having = '';
686
+ if (this.having.length > 0) {
687
+ having = "HAVING ".concat(this.having.map(function (haStr) {
688
+ return "(".concat(haStr, ")");
689
+ }).join(' AND '));
690
+ }
691
+ return "".concat(from, " ").concat(set, " ").concat(where, " ").concat(having);
692
+ }
693
+ }, {
694
+ key: "buildDelete",
695
+ value: function buildDelete() {
696
+ var from = "DELETE FROM ".concat(this.from.db, ".").concat(this.from.table);
697
+ var where = '';
698
+ if (this.where.length > 0) {
699
+ where = "WHERE ".concat(this.where.map(function (whStr) {
700
+ return "(".concat(whStr, ")");
701
+ }).join(' AND '));
702
+ } else if (!this.affectAll) {
703
+ this.fatalError = true;
704
+ this.errors.push('No where clause provided. If you want to delete all records then add `affectAll: true` to your queryObject');
705
+ }
706
+ return "".concat(from, " ").concat(where);
707
+ }
708
+
709
+ // █░░█ ▀▀█▀▀ ░▀░ █░░ ░▀░ ▀▀█▀▀ ░▀░ █▀▀ █▀▀
710
+ // █░░█ ░░█░░ ▀█▀ █░░ ▀█▀ ░░█░░ ▀█▀ █▀▀ ▀▀█
711
+ // ░▀▀▀ ░░▀░░ ▀▀▀ ▀▀▀ ▀▀▀ ░░▀░░ ▀▀▀ ▀▀▀ ▀▀▀
712
+ }, {
713
+ key: "aliasReplicaTableNames",
714
+ value: function aliasReplicaTableNames(table) {
715
+ var aliasTableName;
716
+ var numOfReplicas = this.joinTables.filter(function (tableName) {
717
+ return tableName === table;
718
+ }).length;
719
+ if (numOfReplicas > 0) {
720
+ aliasTableName = this.aliasReplicaTableNames(table + Math.floor(Math.random() * Math.floor(1000)));
721
+ return aliasTableName;
722
+ } else {
723
+ this.joinTables.push(table);
724
+ return table;
725
+ }
726
+ }
727
+
728
+ // ▀█░█▀ █▀▀█ █░░ ░▀░ █▀▀▄ █▀▀█ ▀▀█▀▀ ░▀░ █▀▀█ █▀▀▄
729
+ // ░█▄█░ █▄▄█ █░░ ▀█▀ █░░█ █▄▄█ ░░█░░ ▀█▀ █░░█ █░░█
730
+ // ░░▀░░ ▀░░▀ ▀▀▀ ▀▀▀ ▀▀▀░ ▀░░▀ ░░▀░░ ▀▀▀ ▀▀▀▀ ▀░░▀
731
+ }, {
732
+ key: "validIndex",
733
+ value: function validIndex(index) {
734
+ if (Number(index) === NaN) {
735
+ this.errors.push("The index given to the json selector is not a number, if you're trying to search add a ? to the start of your string");
736
+ this.fatalError = true;
737
+ return false;
738
+ }
739
+ return true;
740
+ }
741
+ }, {
742
+ key: "validBySchema",
743
+ value: function validBySchema(db, table, name) {
744
+ if (!this.schema) {
745
+ this.errors.push('A schema must be provided in order to use JsonQL');
746
+ this.fatalError = true;
747
+ return;
748
+ }
749
+ if (!db || (db || '').length === 0) {
750
+ this.errors.push('No db name provided');
751
+ this.fatalError = true;
752
+ return false;
753
+ }
754
+ if (!this.schema[db]) {
755
+ this.errors.push(db + ' db not found in schema');
756
+ this.fatalError = true;
757
+ return false;
758
+ }
759
+ if (table && !(this.schema[db] || {})[table]) {
760
+ this.errors.push(db + '.' + table + ' not found in schema');
761
+ this.fatalError = true;
762
+ return false;
763
+ }
764
+ if (name && !((this.schema[db] || {})[table] || {})[name]) {
765
+ this.errors.push(db + '.' + table + '.' + name + ' not found in schema');
766
+ return false;
767
+ }
768
+ return true;
769
+ }
770
+ }, {
771
+ key: "validString",
772
+ value: function validString(string) {
773
+ var regex = /(drop )|;|(update )( truncate)/gi;
774
+ if (regex.test(string)) {
775
+ this.errors.push("The string '" + string + "' is not allowed");
776
+ this.fatalError = true;
777
+ return false;
778
+ } else {
779
+ return true;
780
+ }
781
+ }
782
+
783
+ // ░░▀ █▀▀█ █▀▀ ▀▀█▀▀ █▀▀█ ░▀░ █▀▀▄ █▀▀▀ █▀▀
784
+ // ░░█ █░░█ ▀▀█ ░░█░░ █▄▄▀ ▀█▀ █░░█ █░▀█ ▀▀█
785
+ // █▄█ ▀▀▀█ ▀▀▀ ░░▀░░ ▀░▀▀ ▀▀▀ ▀░░▀ ▀▀▀▀ ▀▀▀
786
+ }, {
787
+ key: "extractColFromJQString",
788
+ value: function extractColFromJQString(db, table, jQString) {
789
+ var column = jQString.slice(1, jQString.search(/[\.\[]/));
790
+ if (!this.validBySchema(db, table, column)) return;
791
+ return column;
792
+ }
793
+ }, {
794
+ key: "validJQString",
795
+ value: function validJQString(db, table, jQString) {
796
+ if (/^\$/.test(jQString)) {
797
+ // Add a match here and check any string inside that begins with a $, that way we can target more than one column in a jqstring.
798
+ var column = jQString.slice(1, jQString.search(/[\.\[]/));
799
+ if (!this.validBySchema(db, table, column)) return false;
800
+ return true;
801
+ }
802
+ return false;
803
+ }
804
+ }, {
805
+ key: "validPlainJQString",
806
+ value: function validPlainJQString(jQString) {
807
+ if (/^\$/.test(jQString)) {
808
+ // Add a match here and check any string inside that begins with a $, that way we can target more than one column in a jqstring.
809
+ var column = jQString.slice(1, jQString.search(/[\.\[]/));
810
+ if (!this.validString(column)) return false;
811
+ return true;
812
+ }
813
+ return false;
814
+ }
815
+ }, {
816
+ key: "jQString",
817
+ value: function jQString(name, string, prevString) {
818
+ var nameReg = /\$\w+/;
819
+ var index = /\[\d\]/;
820
+ var target = /\.\w+/;
821
+ var search = /\[\?[\w\s@#:;{},.!"£$%^&*()/?|`¬\-=+~]*\]/;
822
+ if (nameReg.test(string)) {
823
+ return "CONCAT(\"$\")";
824
+ }
825
+ if (index.test(string)) {
826
+ // 'index';
827
+ if (!this.validString(string)) return;
828
+ return "CONCAT(".concat(prevString, ", \"").concat(string, "\")");
829
+ }
830
+ if (target.test(string)) {
831
+ // 'target';
832
+ if (!this.validString(string)) return;
833
+ return "CONCAT(".concat(prevString, ", \"").concat(string, "\")");
834
+ }
835
+ if (search.test(string)) {
836
+ // 'search';
837
+ string = string.slice(2, -1);
838
+ if (!this.validString(string)) return;
839
+ return "CONCAT(".concat(prevString, ", CONCAT('[',SUBSTR(JSON_SEARCH(JSON_EXTRACT(").concat(name, ", \"$\"),'one','").concat(string, "'), 4,LOCATE(']',JSON_SEARCH(JSON_EXTRACT(").concat(name, ", \"$\"), 'one', '").concat(string, "'))-4),']'))");
840
+ }
841
+ }
842
+ }, {
843
+ key: "jQStringMaker",
844
+ value: function jQStringMaker(name, matches) {
845
+ var _this16 = this;
846
+ var result = matches.reduce(function (arr, match, i) {
847
+ return [].concat(_toConsumableArray(arr), [_this16.jQString(name, match, arr[i - 1])]);
848
+ }, []);
849
+ return result[result.length - 1];
850
+ }
851
+ }, {
852
+ key: "plainjQExtract",
853
+ value: function plainjQExtract(jQStr) {
854
+ var regx = /(\$\w+)|(\[\d\])|(\.\w+)|(\[\?[\w\s@#:;{},.!"£$%^&*()/?|`¬\-=+~]*\])/g;
855
+ var matches = jQStr.match(regx);
856
+ var name = "".concat(matches[0].slice(1));
857
+ return "JSON_UNQUOTE(JSON_EXTRACT(".concat(name, ", ").concat(this.jQStringMaker(name, matches), "))");
858
+ }
859
+ }, {
860
+ key: "jQExtract",
861
+ value: function jQExtract(db, table, jQStr) {
862
+ var regx = /(\$\w+)|(\[\d\])|(\.\w+)|(\[\?[\w\s@#:;{},.!"£$%^&*()/?|`¬\-=+~]*\])/g;
863
+ var matches = jQStr.match(regx);
864
+ var name = "".concat(db, ".").concat(table, ".").concat(matches[0].slice(1));
865
+ return "JSON_UNQUOTE(JSON_EXTRACT(".concat(name, ", ").concat(this.jQStringMaker(name, matches), "))");
866
+ }
867
+ }, {
868
+ key: "jQSet",
869
+ value: function jQSet(db, table, jQStr, value) {
870
+ if (typeof value === 'string') {
871
+ value = "'".concat(value, "'");
872
+ }
873
+ var regx = /(\$\w+)|(\[\d\])|(\.\w+)|(\[\?[\w\s@#:;{},.!"£$%^&*()/?|`¬\-=+~]*\])/g;
874
+ var matches = jQStr.match(regx);
875
+ var name = "".concat(db, ".").concat(table, ".").concat(matches[0].slice(1));
876
+ return "JSON_SET(".concat(name, ", ").concat(this.jQStringMaker(name, matches), ", ").concat(value, ")");
877
+ }
878
+ }]);
879
+ return JsonQL;
880
+ }();
881
+ export default JsonQL;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "public": true,
3
3
  "name": "ronds-metadata",
4
- "version": "1.3.26",
4
+ "version": "1.3.28",
5
5
  "scripts": {
6
6
  "start": "dumi dev",
7
7
  "docs:build": "dumi build",