@nocobase/database 0.9.1-alpha.1 → 0.9.2-alpha.1

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 (173) hide show
  1. package/lib/collection-group-manager.d.ts +13 -0
  2. package/lib/collection-group-manager.js +91 -0
  3. package/lib/collection-importer.js +0 -24
  4. package/lib/collection.d.ts +26 -4
  5. package/lib/collection.js +190 -234
  6. package/lib/database-utils/index.js +3 -15
  7. package/lib/database.d.ts +9 -0
  8. package/lib/database.js +171 -299
  9. package/lib/decorators/must-have-filter-decorator.js +0 -7
  10. package/lib/decorators/transaction-decorator.js +5 -18
  11. package/lib/errors/identifier-error.js +0 -3
  12. package/lib/features/ReferencesMap.js +1 -14
  13. package/lib/features/referential-integrity-check.js +7 -21
  14. package/lib/field-repository/array-field-repository.js +5 -45
  15. package/lib/fields/array-field.js +0 -13
  16. package/lib/fields/belongs-to-field.js +24 -50
  17. package/lib/fields/belongs-to-many-field.js +29 -47
  18. package/lib/fields/boolean-field.js +0 -7
  19. package/lib/fields/context-field.js +2 -23
  20. package/lib/fields/date-field.d.ts +4 -0
  21. package/lib/fields/date-field.js +15 -7
  22. package/lib/fields/field.js +32 -85
  23. package/lib/fields/has-many-field.js +16 -49
  24. package/lib/fields/has-one-field.js +18 -52
  25. package/lib/fields/index.js +0 -44
  26. package/lib/fields/json-field.js +0 -12
  27. package/lib/fields/number-field.js +0 -23
  28. package/lib/fields/password-field.js +8 -35
  29. package/lib/fields/radio-field.js +0 -18
  30. package/lib/fields/relation-field.js +4 -16
  31. package/lib/fields/set-field.js +0 -8
  32. package/lib/fields/sort-field.js +84 -73
  33. package/lib/fields/string-field.js +0 -7
  34. package/lib/fields/text-field.js +0 -7
  35. package/lib/fields/time-field.js +0 -7
  36. package/lib/fields/uid-field.js +4 -22
  37. package/lib/fields/uuid-field.js +3 -12
  38. package/lib/fields/virtual-field.js +0 -7
  39. package/lib/filter-match.js +7 -22
  40. package/lib/filter-parser.js +38 -102
  41. package/lib/index.d.ts +3 -0
  42. package/lib/index.js +36 -42
  43. package/lib/inherited-collection.js +15 -62
  44. package/lib/inherited-map.js +7 -48
  45. package/lib/listeners/adjacency-list.d.ts +3 -0
  46. package/lib/listeners/adjacency-list.js +91 -0
  47. package/lib/listeners/index.d.ts +2 -0
  48. package/lib/listeners/index.js +12 -0
  49. package/lib/magic-attribute-model.js +58 -114
  50. package/lib/migration.js +7 -28
  51. package/lib/mock-database.d.ts +4 -4
  52. package/lib/mock-database.js +15 -18
  53. package/lib/model-hook.js +4 -35
  54. package/lib/model.js +12 -54
  55. package/lib/operators/array.js +2 -32
  56. package/lib/operators/association.js +0 -6
  57. package/lib/operators/boolean.js +0 -6
  58. package/lib/operators/child-collection.d.ts +2 -0
  59. package/lib/operators/child-collection.js +32 -0
  60. package/lib/operators/date.js +123 -60
  61. package/lib/operators/empty.js +3 -32
  62. package/lib/operators/eq.d.ts +2 -0
  63. package/lib/operators/eq.js +26 -0
  64. package/lib/operators/index.js +4 -7
  65. package/lib/operators/ne.js +5 -5
  66. package/lib/operators/notIn.js +0 -5
  67. package/lib/operators/string.js +0 -11
  68. package/lib/operators/utils.js +0 -6
  69. package/lib/options-parser.d.ts +1 -1
  70. package/lib/options-parser.js +47 -107
  71. package/lib/playground.js +0 -4
  72. package/lib/query-interface/mysql-query-interface.d.ts +18 -0
  73. package/lib/query-interface/mysql-query-interface.js +88 -0
  74. package/lib/query-interface/postgres-query-interface.d.ts +14 -0
  75. package/lib/query-interface/postgres-query-interface.js +99 -0
  76. package/lib/query-interface/query-interface-builder.d.ts +2 -0
  77. package/lib/query-interface/query-interface-builder.js +18 -0
  78. package/lib/query-interface/query-interface.d.ts +21 -0
  79. package/lib/query-interface/query-interface.js +48 -0
  80. package/lib/query-interface/sqlite-query-interface.d.ts +17 -0
  81. package/lib/query-interface/sqlite-query-interface.js +89 -0
  82. package/lib/relation-repository/belongs-to-many-repository.js +21 -78
  83. package/lib/relation-repository/belongs-to-repository.js +0 -3
  84. package/lib/relation-repository/hasmany-repository.js +8 -44
  85. package/lib/relation-repository/hasone-repository.js +0 -3
  86. package/lib/relation-repository/multiple-relation-repository.js +16 -68
  87. package/lib/relation-repository/relation-repository.js +5 -42
  88. package/lib/relation-repository/single-relation-repository.js +6 -43
  89. package/lib/repository.d.ts +1 -0
  90. package/lib/repository.js +36 -182
  91. package/lib/sql-parser/index.js +10527 -0
  92. package/lib/sql-parser/sql.pegjs +1297 -0
  93. package/lib/sync-runner.d.ts +1 -1
  94. package/lib/sync-runner.js +26 -64
  95. package/lib/update-associations.js +58 -157
  96. package/lib/update-guard.js +10 -49
  97. package/lib/utils.js +16 -54
  98. package/lib/value-parsers/array-value-parser.js +3 -21
  99. package/lib/value-parsers/base-value-parser.js +0 -13
  100. package/lib/value-parsers/boolean-value-parser.js +4 -10
  101. package/lib/value-parsers/date-value-parser.js +0 -23
  102. package/lib/value-parsers/index.js +0 -10
  103. package/lib/value-parsers/json-value-parser.js +0 -7
  104. package/lib/value-parsers/number-value-parser.js +0 -9
  105. package/lib/value-parsers/string-value-parser.js +3 -20
  106. package/lib/value-parsers/to-many-value-parser.js +1 -42
  107. package/lib/value-parsers/to-one-value-parser.js +0 -14
  108. package/lib/view/field-type-map.d.ts +47 -0
  109. package/lib/view/field-type-map.js +56 -0
  110. package/lib/view/view-inference.d.ts +31 -0
  111. package/lib/view/view-inference.js +92 -0
  112. package/lib/view-collection.d.ts +6 -0
  113. package/lib/view-collection.js +24 -0
  114. package/package.json +4 -3
  115. package/src/__tests__/collection.test.ts +44 -0
  116. package/src/__tests__/fields/date.test.ts +75 -0
  117. package/src/__tests__/fields/sort-field.test.ts +100 -0
  118. package/src/__tests__/filter.test.ts +60 -0
  119. package/src/__tests__/group.test.ts +50 -0
  120. package/src/__tests__/inhertits/collection-inherits.test.ts +114 -0
  121. package/src/__tests__/operator/date-operator.test.ts +244 -98
  122. package/src/__tests__/operator/eq.test.ts +76 -0
  123. package/src/__tests__/operator/ne.test.ts +19 -1
  124. package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +82 -0
  125. package/src/__tests__/repository/find.test.ts +33 -0
  126. package/src/__tests__/repository.test.ts +88 -0
  127. package/src/__tests__/sql-parser.test.ts +13 -0
  128. package/src/__tests__/tree.test.ts +217 -0
  129. package/src/__tests__/view/list-view.test.ts +34 -0
  130. package/src/__tests__/view/view-collection.test.ts +199 -0
  131. package/src/__tests__/view/view-inference.test.ts +145 -0
  132. package/src/__tests__/view/view-repository.test.ts +67 -0
  133. package/src/collection-group-manager.ts +94 -0
  134. package/src/collection.ts +126 -16
  135. package/src/database-utils/index.ts +1 -0
  136. package/src/database.ts +98 -17
  137. package/src/features/ReferencesMap.ts +3 -2
  138. package/src/fields/belongs-to-many-field.ts +23 -4
  139. package/src/fields/date-field.ts +18 -0
  140. package/src/fields/field.ts +17 -7
  141. package/src/fields/json-field.ts +1 -0
  142. package/src/fields/sort-field.ts +90 -29
  143. package/src/filter-parser.ts +2 -1
  144. package/src/index.ts +3 -1
  145. package/src/listeners/adjacency-list.ts +60 -0
  146. package/src/listeners/index.ts +7 -0
  147. package/src/mock-database.ts +14 -2
  148. package/src/model.ts +4 -0
  149. package/src/operators/child-collection.ts +24 -0
  150. package/src/operators/date.ts +108 -24
  151. package/src/operators/eq.ts +14 -0
  152. package/src/operators/index.ts +2 -0
  153. package/src/operators/ne.ts +12 -7
  154. package/src/options-parser.ts +25 -11
  155. package/src/query-interface/mysql-query-interface.ts +72 -0
  156. package/src/query-interface/postgres-query-interface.ts +103 -0
  157. package/src/query-interface/query-interface-builder.ts +14 -0
  158. package/src/query-interface/query-interface.ts +43 -0
  159. package/src/query-interface/sqlite-query-interface.ts +79 -0
  160. package/src/relation-repository/belongs-to-many-repository.ts +20 -1
  161. package/src/relation-repository/hasmany-repository.ts +5 -3
  162. package/src/relation-repository/multiple-relation-repository.ts +13 -1
  163. package/src/relation-repository/single-relation-repository.ts +2 -0
  164. package/src/repository.ts +6 -13
  165. package/src/sql-parser/index.js +10698 -0
  166. package/src/sql-parser/readme.md +2 -0
  167. package/src/sql-parser/sql.pegjs +1297 -0
  168. package/src/sync-runner.ts +27 -32
  169. package/src/update-associations.ts +26 -22
  170. package/src/utils.ts +4 -3
  171. package/src/view/field-type-map.ts +56 -0
  172. package/src/view/view-inference.ts +106 -0
  173. package/src/view-collection.ts +21 -0
@@ -4,21 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.UpdateGuard = void 0;
7
-
8
7
  function _lodash() {
9
8
  const data = _interopRequireDefault(require("lodash"));
10
-
11
9
  _lodash = function _lodash() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  var _model = require("./model");
19
-
20
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
16
  class UpdateGuard {
23
17
  constructor() {
24
18
  this.model = void 0;
@@ -28,15 +22,12 @@ class UpdateGuard {
28
22
  this.blackList = void 0;
29
23
  this.whiteList = void 0;
30
24
  }
31
-
32
25
  setAction(action) {
33
26
  this.action = action;
34
27
  }
35
-
36
28
  setModel(model) {
37
29
  this.model = model;
38
30
  }
39
-
40
31
  setAssociationKeysToBeUpdate(associationKeysToBeUpdate) {
41
32
  if (this.action == 'create') {
42
33
  this.associationKeysToBeUpdate = Object.keys(this.model.associations);
@@ -44,11 +35,9 @@ class UpdateGuard {
44
35
  this.associationKeysToBeUpdate = associationKeysToBeUpdate;
45
36
  }
46
37
  }
47
-
48
38
  setWhiteList(whiteList) {
49
39
  this.whiteList = whiteList;
50
40
  }
51
-
52
41
  setBlackList(blackList) {
53
42
  this.blackList = blackList;
54
43
  }
@@ -56,55 +45,39 @@ class UpdateGuard {
56
45
  * Sanitize values by whitelist blacklist
57
46
  * @param values
58
47
  */
59
-
60
-
61
48
  sanitize(values) {
62
49
  values = _lodash().default.clone(values);
63
-
64
50
  if (!this.model) {
65
51
  throw new Error('please set model first');
66
52
  }
67
-
68
53
  const associations = this.model.associations;
69
-
70
- const associationsValues = _lodash().default.pick(values, Object.keys(associations)); // build params of association update guard
71
-
72
-
54
+ const associationsValues = _lodash().default.pick(values, Object.keys(associations));
55
+ // build params of association update guard
73
56
  const listOfAssociation = (list, association) => {
74
57
  if (list) {
75
58
  list = list.filter(whiteListKey => whiteListKey.startsWith(`${association}.`)).map(whiteListKey => whiteListKey.replace(`${association}.`, ''));
76
-
77
59
  if (list.length == 0) {
78
60
  return undefined;
79
61
  }
80
-
81
62
  return list;
82
63
  }
83
-
84
64
  return undefined;
85
- }; // sanitize association values
86
-
87
-
65
+ };
66
+ // sanitize association values
88
67
  Object.keys(associationsValues).forEach(association => {
89
68
  let associationValues = associationsValues[association];
90
-
91
69
  const filterAssociationToBeUpdate = value => {
92
70
  const associationKeysToBeUpdate = this.associationKeysToBeUpdate || [];
93
-
94
71
  if (associationKeysToBeUpdate.includes(association)) {
95
72
  return value;
96
73
  }
97
-
98
74
  const associationObj = associations[association];
99
75
  const associationKeyName = associationObj.associationType == 'BelongsTo' || associationObj.associationType == 'HasOne' ? associationObj.targetKey : associationObj.target.primaryKeyAttribute;
100
-
101
76
  if (value[associationKeyName]) {
102
77
  return _lodash().default.pick(value, [associationKeyName, ...Object.keys(associationObj.target.associations)]);
103
78
  }
104
-
105
79
  return value;
106
80
  };
107
-
108
81
  const sanitizeValue = value => {
109
82
  const associationUpdateGuard = new UpdateGuard();
110
83
  associationUpdateGuard.setModel(associations[association].target);
@@ -113,7 +86,6 @@ class UpdateGuard {
113
86
  });
114
87
  return associationUpdateGuard.sanitize(filterAssociationToBeUpdate(value));
115
88
  };
116
-
117
89
  if (Array.isArray(associationValues)) {
118
90
  associationValues = associationValues.map(value => {
119
91
  if (typeof value == 'string' || typeof value == 'number') {
@@ -124,18 +96,15 @@ class UpdateGuard {
124
96
  });
125
97
  } else if (typeof associationValues === 'object' && associationValues !== null) {
126
98
  associationValues = sanitizeValue(associationValues);
127
- } // set association values to sanitized value
128
-
129
-
99
+ }
100
+ // set association values to sanitized value
130
101
  values[association] = associationValues;
131
102
  });
132
-
133
103
  if (values instanceof _model.Model) {
134
104
  return values;
135
105
  }
136
-
137
- let valuesKeys = Object.keys(values || {}); // handle whitelist
138
-
106
+ let valuesKeys = Object.keys(values || {});
107
+ // handle whitelist
139
108
  if (this.whiteList) {
140
109
  valuesKeys = valuesKeys.filter(valueKey => {
141
110
  return this.whiteList.findIndex(whiteKey => {
@@ -143,21 +112,17 @@ class UpdateGuard {
143
112
  return keyPaths[0] === valueKey;
144
113
  }) !== -1;
145
114
  });
146
- } // handle blacklist
147
-
148
-
115
+ }
116
+ // handle blacklist
149
117
  if (this.blackList) {
150
118
  valuesKeys = valuesKeys.filter(valueKey => !this.blackList.includes(valueKey));
151
119
  }
152
-
153
120
  const result = valuesKeys.reduce((obj, key) => {
154
121
  _lodash().default.set(obj, key, values[key]);
155
-
156
122
  return obj;
157
123
  }, {});
158
124
  return result;
159
125
  }
160
-
161
126
  static fromOptions(model, options) {
162
127
  const guard = new UpdateGuard();
163
128
  guard.setModel(model);
@@ -165,14 +130,10 @@ class UpdateGuard {
165
130
  guard.setBlackList(options.blacklist);
166
131
  guard.setAction(_lodash().default.get(options, 'action', 'update'));
167
132
  guard.setAssociationKeysToBeUpdate(options.updateAssociationValues);
168
-
169
133
  if (options.underscored) {
170
134
  guard.underscored = options.underscored;
171
135
  }
172
-
173
136
  return guard;
174
137
  }
175
-
176
138
  }
177
-
178
139
  exports.UpdateGuard = UpdateGuard;
package/lib/utils.js CHANGED
@@ -10,73 +10,58 @@ exports.md5 = md5;
10
10
  exports.patchSequelizeQueryInterface = patchSequelizeQueryInterface;
11
11
  exports.percent2float = percent2float;
12
12
  exports.snakeCase = snakeCase;
13
-
14
13
  function _crypto() {
15
14
  const data = _interopRequireDefault(require("crypto"));
16
-
17
15
  _crypto = function _crypto() {
18
16
  return data;
19
17
  };
20
-
21
18
  return data;
22
19
  }
23
-
24
20
  var _identifierError = require("./errors/identifier-error");
25
-
21
+ function _lodash() {
22
+ const data = _interopRequireDefault(require("lodash"));
23
+ _lodash = function _lodash() {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
-
28
29
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
-
30
30
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
-
32
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
-
31
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
32
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
33
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
34
34
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
35
-
36
35
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
37
-
38
36
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
39
-
40
37
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
41
-
42
38
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
43
-
44
39
  function handleAppendsQuery(_x) {
45
40
  return _handleAppendsQuery.apply(this, arguments);
46
41
  }
47
-
48
42
  function _handleAppendsQuery() {
49
43
  _handleAppendsQuery = _asyncToGenerator(function* (options) {
50
44
  const templateModel = options.templateModel,
51
- queryPromises = options.queryPromises;
52
-
45
+ queryPromises = options.queryPromises;
53
46
  if (!templateModel) {
54
47
  return [];
55
48
  }
56
-
57
49
  const primaryKey = templateModel.constructor.primaryKeyAttribute;
58
50
  const results = yield Promise.all(queryPromises);
59
51
  let rows;
60
-
61
52
  var _iterator = _createForOfIteratorHelper(results),
62
- _step;
63
-
53
+ _step;
64
54
  try {
65
55
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
66
56
  const appendedResult = _step.value;
67
-
68
57
  if (!rows) {
69
58
  rows = appendedResult.rows;
70
-
71
59
  if (rows.length == 0) {
72
60
  return [];
73
61
  }
74
-
75
62
  const modelOptions = templateModel['_options'];
76
-
77
63
  var _iterator2 = _createForOfIteratorHelper(rows),
78
- _step2;
79
-
64
+ _step2;
80
65
  try {
81
66
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
82
67
  const row = _step2.value;
@@ -91,21 +76,17 @@ function _handleAppendsQuery() {
91
76
  } finally {
92
77
  _iterator2.f();
93
78
  }
94
-
95
79
  continue;
96
80
  }
97
-
98
81
  for (let i = 0; i < appendedResult.rows.length; i++) {
99
82
  const appendingRow = appendedResult.rows[i];
100
83
  const key = appendedResult.include.association;
101
84
  const val = appendingRow.get(key);
102
85
  const rowKey = appendingRow.get(primaryKey);
103
86
  const targetIndex = rows.findIndex(row => row.get(primaryKey) === rowKey);
104
-
105
87
  if (targetIndex === -1) {
106
88
  throw new Error('target row not found');
107
89
  }
108
-
109
90
  rows[targetIndex].set(key, val, {
110
91
  raw: true
111
92
  });
@@ -116,57 +97,44 @@ function _handleAppendsQuery() {
116
97
  } finally {
117
98
  _iterator.f();
118
99
  }
119
-
120
100
  return rows;
121
101
  });
122
102
  return _handleAppendsQuery.apply(this, arguments);
123
103
  }
124
-
125
104
  function md5(value) {
126
105
  return _crypto().default.createHash('md5').update(value).digest('hex');
127
106
  }
128
-
129
107
  const MAX_IDENTIFIER_LENGTH = 63;
130
-
131
108
  function checkIdentifier(value) {
132
109
  if (value.length > MAX_IDENTIFIER_LENGTH) {
133
110
  throw new _identifierError.IdentifierError(`Identifier ${value} is too long`);
134
111
  }
135
112
  }
136
-
137
113
  function getTableName(collectionName, options) {
138
114
  return options.underscored ? snakeCase(collectionName) : collectionName;
139
115
  }
140
-
141
116
  function snakeCase(name) {
142
117
  return require('sequelize').Utils.underscore(name);
143
118
  }
144
-
145
119
  function patchShowConstraintsQuery(queryGenerator, db) {
146
120
  queryGenerator.showConstraintsQuery = (tableName, constraintName) => {
147
- const lines = ['SELECT constraint_catalog AS "constraintCatalog",', 'constraint_schema AS "constraintSchema",', 'constraint_name AS "constraintName",', 'table_catalog AS "tableCatalog",', 'table_schema AS "tableSchema",', 'table_name AS "tableName",', 'constraint_type AS "constraintType",', 'is_deferrable AS "isDeferrable",', 'initially_deferred AS "initiallyDeferred"', 'from INFORMATION_SCHEMA.table_constraints', `WHERE table_name='${tableName}'`];
148
-
121
+ const lines = ['SELECT constraint_catalog AS "constraintCatalog",', 'constraint_schema AS "constraintSchema",', 'constraint_name AS "constraintName",', 'table_catalog AS "tableCatalog",', 'table_schema AS "tableSchema",', 'table_name AS "tableName",', 'constraint_type AS "constraintType",', 'is_deferrable AS "isDeferrable",', 'initially_deferred AS "initiallyDeferred"', 'from INFORMATION_SCHEMA.table_constraints', `WHERE table_name='${_lodash().default.isPlainObject(tableName) ? tableName.tableName : tableName}'`];
149
122
  if (!constraintName) {
150
123
  lines.push(`AND constraint_name='${constraintName}'`);
151
124
  }
152
-
153
- if (db.options.schema && db.options.schema !== 'public') {
154
- lines.push(`AND table_schema='${db.options.schema}'`);
125
+ if (_lodash().default.isPlainObject(tableName) && tableName.schema) {
126
+ lines.push(`AND table_schema='${tableName.schema}'`);
155
127
  }
156
-
157
128
  return lines.join(' ');
158
129
  };
159
130
  }
160
-
161
131
  function patchDescribeTableQuery(queryGenerator) {
162
132
  const describeTableQuery = function describeTableQuery(tableName, schema) {
163
133
  schema = schema || this.options.schema || 'public';
164
134
  return 'SELECT ' + 'pk.constraint_type as "Constraint",' + 'c.column_name as "Field", ' + 'c.column_default as "Default",' + 'c.is_nullable as "Null", ' + "(CASE WHEN c.udt_name = 'hstore' THEN c.udt_name ELSE c.data_type END) || (CASE WHEN c.character_maximum_length IS NOT NULL THEN '(' || c.character_maximum_length || ')' ELSE '' END) as \"Type\", " + '(SELECT array_agg(e.enumlabel) FROM pg_catalog.pg_type t JOIN pg_catalog.pg_enum e ON t.oid=e.enumtypid WHERE t.typname=c.udt_name) AS "special", ' + '(SELECT pgd.description FROM pg_catalog.pg_statio_all_tables AS st INNER JOIN pg_catalog.pg_description pgd on (pgd.objoid=st.relid) WHERE c.ordinal_position=pgd.objsubid AND c.table_name=st.relname AND st.schemaname = c.table_schema) AS "Comment" ' + 'FROM information_schema.columns c ' + 'LEFT JOIN (SELECT tc.table_schema, tc.table_name, ' + 'cu.column_name, tc.constraint_type ' + 'FROM information_schema.TABLE_CONSTRAINTS tc ' + 'JOIN information_schema.KEY_COLUMN_USAGE cu ' + 'ON tc.table_schema=cu.table_schema and tc.table_name=cu.table_name ' + 'and tc.constraint_name=cu.constraint_name ' + "and tc.constraint_type='PRIMARY KEY') pk " + 'ON pk.table_schema=c.table_schema ' + 'AND pk.table_name=c.table_name ' + 'AND pk.column_name=c.column_name ' + `WHERE c.table_name = ${this.escape(tableName)} AND c.table_schema = ${this.escape(schema)}`;
165
135
  };
166
-
167
136
  queryGenerator.describeTableQuery = describeTableQuery.bind(queryGenerator);
168
137
  }
169
-
170
138
  function patchSequelizeQueryInterface(db) {
171
139
  if (db.inDialect('postgres')) {
172
140
  //@ts-ignore
@@ -175,24 +143,18 @@ function patchSequelizeQueryInterface(db) {
175
143
  patchDescribeTableQuery(queryGenerator);
176
144
  }
177
145
  }
178
-
179
146
  function percent2float(value) {
180
147
  if (!value.endsWith('%')) {
181
148
  return NaN;
182
149
  }
183
-
184
150
  let val = value.substring(0, value.length - 1);
185
-
186
151
  if (isNaN(+val)) {
187
152
  return NaN;
188
153
  }
189
-
190
154
  const index = value.indexOf('.');
191
-
192
155
  if (index === -1) {
193
156
  return parseFloat(value) / 100;
194
157
  }
195
-
196
158
  const repeat = value.length - index - 2;
197
159
  const v = parseInt('1' + '0'.repeat(repeat));
198
160
  return parseFloat(value) * v / (100 * v);
@@ -4,33 +4,22 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ArrayValueParser = void 0;
7
-
8
7
  var _baseValueParser = require("./base-value-parser");
9
-
10
8
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
11
-
12
9
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
-
14
10
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
15
-
16
11
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
17
-
18
12
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
19
-
20
13
  class ArrayValueParser extends _baseValueParser.BaseValueParser {
21
14
  setValue(value) {
22
15
  var _this = this;
23
-
24
16
  return _asyncToGenerator(function* () {
25
17
  const _this$getOptions = _this.getOptions(),
26
- map = _this$getOptions.map,
27
- set = _this$getOptions.set;
28
-
18
+ map = _this$getOptions.map,
19
+ set = _this$getOptions.set;
29
20
  const values = _this.toArr(value);
30
-
31
21
  if (set.size > 0) {
32
22
  const filtered = values.map(v => map.has(v) ? map.get(v) : v).filter(v => set.has(v));
33
-
34
23
  if (values.length === filtered.length) {
35
24
  _this.value = filtered;
36
25
  } else {
@@ -41,17 +30,13 @@ class ArrayValueParser extends _baseValueParser.BaseValueParser {
41
30
  }
42
31
  })();
43
32
  }
44
-
45
33
  getOptions() {
46
34
  var _this$field$options, _this$field$options$u;
47
-
48
35
  const options = ((_this$field$options = this.field.options) === null || _this$field$options === void 0 ? void 0 : (_this$field$options$u = _this$field$options['uiSchema']) === null || _this$field$options$u === void 0 ? void 0 : _this$field$options$u.enum) || [];
49
36
  const map = new Map();
50
37
  const set = new Set();
51
-
52
38
  var _iterator = _createForOfIteratorHelper(options),
53
- _step;
54
-
39
+ _step;
55
40
  try {
56
41
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
57
42
  const option = _step.value;
@@ -64,13 +49,10 @@ class ArrayValueParser extends _baseValueParser.BaseValueParser {
64
49
  } finally {
65
50
  _iterator.f();
66
51
  }
67
-
68
52
  return {
69
53
  map,
70
54
  set
71
55
  };
72
56
  }
73
-
74
57
  }
75
-
76
58
  exports.ArrayValueParser = ArrayValueParser;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BaseValueParser = void 0;
7
-
8
7
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
9
-
10
8
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
11
-
12
9
  class BaseValueParser {
13
10
  constructor(field, ctx) {
14
11
  this.ctx = void 0;
@@ -19,14 +16,11 @@ class BaseValueParser {
19
16
  this.ctx = ctx;
20
17
  this.value = null;
21
18
  }
22
-
23
19
  trim(value) {
24
20
  return typeof value === 'string' ? value.trim() : value;
25
21
  }
26
-
27
22
  toArr(value, splitter) {
28
23
  let values = [];
29
-
30
24
  if (!value) {
31
25
  values = [];
32
26
  } else if (typeof value === 'string') {
@@ -34,26 +28,19 @@ class BaseValueParser {
34
28
  } else if (Array.isArray(value)) {
35
29
  values = value;
36
30
  }
37
-
38
31
  return values.map(v => this.trim(v)).filter(Boolean);
39
32
  }
40
-
41
33
  toString() {
42
34
  return this.value;
43
35
  }
44
-
45
36
  getValue() {
46
37
  return this.value;
47
38
  }
48
-
49
39
  setValue(value) {
50
40
  var _this = this;
51
-
52
41
  return _asyncToGenerator(function* () {
53
42
  _this.value = value;
54
43
  })();
55
44
  }
56
-
57
45
  }
58
-
59
46
  exports.BaseValueParser = BaseValueParser;
@@ -4,30 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BooleanValueParser = void 0;
7
-
8
7
  var _baseValueParser = require("./base-value-parser");
9
-
10
8
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
11
-
12
9
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
13
-
14
10
  class BooleanValueParser extends _baseValueParser.BaseValueParser {
15
11
  setValue(value) {
16
12
  var _this = this;
17
-
18
13
  return _asyncToGenerator(function* () {
19
14
  // Boolean
20
15
  if (typeof value === 'boolean') {
21
16
  _this.value = value;
22
- } // Number
17
+ }
18
+ // Number
23
19
  else if (typeof value === 'number' && [0, 1].includes(value)) {
24
20
  _this.value = value === 1;
25
- } // String
21
+ }
22
+ // String
26
23
  else if (typeof value === 'string') {
27
24
  if (!value) {
28
25
  _this.value = null;
29
26
  }
30
-
31
27
  if (['1', 'y', 'yes', 'true', '是'].includes(value.toLowerCase())) {
32
28
  _this.value = true;
33
29
  } else if (['0', 'n', 'no', 'false', '否'].includes(value.toLowerCase())) {
@@ -40,7 +36,5 @@ class BooleanValueParser extends _baseValueParser.BaseValueParser {
40
36
  }
41
37
  })();
42
38
  }
43
-
44
39
  }
45
-
46
40
  exports.BooleanValueParser = BooleanValueParser;
@@ -4,57 +4,40 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DateValueParser = void 0;
7
-
8
7
  function _utils() {
9
8
  const data = require("@nocobase/utils");
10
-
11
9
  _utils = function _utils() {
12
10
  return data;
13
11
  };
14
-
15
12
  return data;
16
13
  }
17
-
18
14
  function _excelDateToJs() {
19
15
  const data = require("excel-date-to-js");
20
-
21
16
  _excelDateToJs = function _excelDateToJs() {
22
17
  return data;
23
18
  };
24
-
25
19
  return data;
26
20
  }
27
-
28
21
  function _moment() {
29
22
  const data = _interopRequireWildcard(require("moment"));
30
-
31
23
  _moment = function _moment() {
32
24
  return data;
33
25
  };
34
-
35
26
  return data;
36
27
  }
37
-
38
28
  var _baseValueParser = require("./base-value-parser");
39
-
40
29
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
41
-
42
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
43
-
44
31
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
45
-
46
32
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
47
-
48
33
  function isNumeric(str) {
49
34
  if (typeof str === 'number') return true;
50
35
  if (typeof str != 'string') return false;
51
36
  return !isNaN(str) && !isNaN(parseFloat(str));
52
37
  }
53
-
54
38
  class DateValueParser extends _baseValueParser.BaseValueParser {
55
39
  setValue(value) {
56
40
  var _this = this;
57
-
58
41
  return _asyncToGenerator(function* () {
59
42
  if ((0, _moment().isMoment)(value)) {
60
43
  _this.value = value;
@@ -68,9 +51,7 @@ class DateValueParser extends _baseValueParser.BaseValueParser {
68
51
  }
69
52
  } else if (typeof value === 'string') {
70
53
  const props = _this.getProps();
71
-
72
54
  const m = (0, _moment().default)(value);
73
-
74
55
  if (m.isValid()) {
75
56
  _this.value = (0, _utils().moment2str)(m, props);
76
57
  } else {
@@ -79,13 +60,9 @@ class DateValueParser extends _baseValueParser.BaseValueParser {
79
60
  }
80
61
  })();
81
62
  }
82
-
83
63
  getProps() {
84
64
  var _this$field$options, _this$field$options$u;
85
-
86
65
  return ((_this$field$options = this.field.options) === null || _this$field$options === void 0 ? void 0 : (_this$field$options$u = _this$field$options.uiSchema) === null || _this$field$options$u === void 0 ? void 0 : _this$field$options$u['x-component-props']) || {};
87
66
  }
88
-
89
67
  }
90
-
91
68
  exports.DateValueParser = DateValueParser;
@@ -58,25 +58,15 @@ Object.defineProperty(exports, "ToOneValueParser", {
58
58
  }
59
59
  });
60
60
  exports.registerFieldValueParsers = registerFieldValueParsers;
61
-
62
61
  var _arrayValueParser = require("./array-value-parser");
63
-
64
62
  var _baseValueParser = require("./base-value-parser");
65
-
66
63
  var _booleanValueParser = require("./boolean-value-parser");
67
-
68
64
  var _dateValueParser = require("./date-value-parser");
69
-
70
65
  var _jsonValueParser = require("./json-value-parser");
71
-
72
66
  var _numberValueParser = require("./number-value-parser");
73
-
74
67
  var _stringValueParser = require("./string-value-parser");
75
-
76
68
  var _toManyValueParser = require("./to-many-value-parser");
77
-
78
69
  var _toOneValueParser = require("./to-one-value-parser");
79
-
80
70
  function registerFieldValueParsers(db) {
81
71
  db.registerFieldValueParsers({
82
72
  default: _baseValueParser.BaseValueParser,
@@ -4,17 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.JsonValueParser = void 0;
7
-
8
7
  var _baseValueParser = require("./base-value-parser");
9
-
10
8
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
11
-
12
9
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
13
-
14
10
  class JsonValueParser extends _baseValueParser.BaseValueParser {
15
11
  setValue(value) {
16
12
  var _this = this;
17
-
18
13
  return _asyncToGenerator(function* () {
19
14
  if (typeof value === 'string') {
20
15
  if (value.trim() === '') {
@@ -31,7 +26,5 @@ class JsonValueParser extends _baseValueParser.BaseValueParser {
31
26
  }
32
27
  })();
33
28
  }
34
-
35
29
  }
36
-
37
30
  exports.JsonValueParser = JsonValueParser;