@nocobase/database 0.9.0-alpha.2 → 0.9.1-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 (103) hide show
  1. package/lib/collection-importer.js +1 -1
  2. package/lib/collection.d.ts +7 -1
  3. package/lib/collection.js +135 -61
  4. package/lib/database-utils/index.d.ts +8 -0
  5. package/lib/database-utils/index.js +59 -0
  6. package/lib/database.d.ts +26 -3
  7. package/lib/database.js +224 -61
  8. package/lib/fields/array-field.d.ts +1 -1
  9. package/lib/fields/array-field.js +2 -2
  10. package/lib/fields/belongs-to-many-field.js +1 -2
  11. package/lib/fields/field.d.ts +1 -0
  12. package/lib/fields/field.js +37 -15
  13. package/lib/fields/has-one-field.d.ts +1 -1
  14. package/lib/fields/has-one-field.js +9 -5
  15. package/lib/fields/number-field.d.ts +9 -6
  16. package/lib/fields/number-field.js +8 -6
  17. package/lib/fields/sort-field.js +15 -1
  18. package/lib/index.d.ts +6 -4
  19. package/lib/index.js +59 -36
  20. package/lib/mock-database.d.ts +2 -0
  21. package/lib/mock-database.js +3 -1
  22. package/lib/model.js +10 -1
  23. package/lib/options-parser.js +3 -0
  24. package/lib/relation-repository/belongs-to-many-repository.js +4 -2
  25. package/lib/repository.js +5 -2
  26. package/lib/sync-runner.d.ts +1 -1
  27. package/lib/sync-runner.js +28 -18
  28. package/lib/types.d.ts +7 -1
  29. package/lib/update-associations.js +17 -3
  30. package/lib/update-guard.d.ts +1 -0
  31. package/lib/update-guard.js +6 -0
  32. package/lib/utils.d.ts +5 -0
  33. package/lib/utils.js +68 -0
  34. package/lib/value-parsers/array-value-parser.d.ts +8 -0
  35. package/lib/value-parsers/array-value-parser.js +76 -0
  36. package/lib/value-parsers/base-value-parser.d.ts +12 -0
  37. package/lib/value-parsers/base-value-parser.js +59 -0
  38. package/lib/value-parsers/boolean-value-parser.d.ts +4 -0
  39. package/lib/value-parsers/boolean-value-parser.js +46 -0
  40. package/lib/value-parsers/date-value-parser.d.ts +5 -0
  41. package/lib/value-parsers/date-value-parser.js +91 -0
  42. package/lib/value-parsers/index.d.ts +12 -0
  43. package/lib/value-parsers/index.js +102 -0
  44. package/lib/value-parsers/json-value-parser.d.ts +4 -0
  45. package/lib/value-parsers/json-value-parser.js +37 -0
  46. package/lib/value-parsers/number-value-parser.d.ts +4 -0
  47. package/lib/value-parsers/number-value-parser.js +49 -0
  48. package/lib/value-parsers/string-value-parser.d.ts +8 -0
  49. package/lib/value-parsers/string-value-parser.js +76 -0
  50. package/lib/value-parsers/to-many-value-parser.d.ts +13 -0
  51. package/lib/value-parsers/to-many-value-parser.js +169 -0
  52. package/lib/value-parsers/to-one-value-parser.d.ts +4 -0
  53. package/lib/value-parsers/to-one-value-parser.js +49 -0
  54. package/package.json +4 -3
  55. package/src/__tests__/bigint.test.ts +1 -1
  56. package/src/__tests__/collection-importer.test.ts +13 -1
  57. package/src/__tests__/collection.test.ts +19 -9
  58. package/src/__tests__/database.test.ts +32 -0
  59. package/src/__tests__/fields/sort-field.test.ts +23 -0
  60. package/src/__tests__/inhertits/collection-inherits.test.ts +7 -5
  61. package/src/__tests__/percent2float.test.ts +14 -0
  62. package/src/__tests__/postgres/schema.test.ts +120 -0
  63. package/src/__tests__/underscored-options.test.ts +207 -0
  64. package/src/__tests__/update-associations-through.test.ts +73 -0
  65. package/src/__tests__/value-parsers/base.test.ts +20 -0
  66. package/src/__tests__/value-parsers/date.test.ts +67 -0
  67. package/src/__tests__/value-parsers/number.test.ts +46 -0
  68. package/src/__tests__/value-parsers/to-many.test.ts +206 -0
  69. package/src/__tests__/value-parsers/to-one.test.ts +60 -0
  70. package/src/collection-importer.ts +2 -2
  71. package/src/collection.ts +97 -15
  72. package/src/database-utils/index.ts +38 -0
  73. package/src/database.ts +171 -33
  74. package/src/fields/array-field.ts +1 -1
  75. package/src/fields/belongs-to-field.ts +1 -1
  76. package/src/fields/belongs-to-many-field.ts +0 -1
  77. package/src/fields/field.ts +45 -16
  78. package/src/fields/has-many-field.ts +1 -1
  79. package/src/fields/has-one-field.ts +11 -7
  80. package/src/fields/number-field.ts +10 -6
  81. package/src/fields/sort-field.ts +13 -1
  82. package/src/index.ts +7 -4
  83. package/src/inherited-collection.ts +1 -0
  84. package/src/mock-database.ts +3 -1
  85. package/src/model.ts +11 -2
  86. package/src/options-parser.ts +5 -0
  87. package/src/relation-repository/belongs-to-many-repository.ts +4 -2
  88. package/src/repository.ts +8 -3
  89. package/src/sync-runner.ts +33 -19
  90. package/src/types.ts +12 -1
  91. package/src/update-associations.ts +12 -5
  92. package/src/update-guard.ts +6 -0
  93. package/src/utils.ts +94 -0
  94. package/src/value-parsers/array-value-parser.ts +30 -0
  95. package/src/value-parsers/base-value-parser.ts +40 -0
  96. package/src/value-parsers/boolean-value-parser.ts +29 -0
  97. package/src/value-parsers/date-value-parser.ts +38 -0
  98. package/src/value-parsers/index.ts +46 -0
  99. package/src/value-parsers/json-value-parser.ts +19 -0
  100. package/src/value-parsers/number-value-parser.ts +29 -0
  101. package/src/value-parsers/string-value-parser.ts +31 -0
  102. package/src/value-parsers/to-many-value-parser.ts +85 -0
  103. package/src/value-parsers/to-one-value-parser.ts +20 -0
package/lib/utils.js CHANGED
@@ -4,8 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.checkIdentifier = checkIdentifier;
7
+ exports.getTableName = getTableName;
7
8
  exports.handleAppendsQuery = handleAppendsQuery;
8
9
  exports.md5 = md5;
10
+ exports.patchSequelizeQueryInterface = patchSequelizeQueryInterface;
11
+ exports.percent2float = percent2float;
12
+ exports.snakeCase = snakeCase;
9
13
 
10
14
  function _crypto() {
11
15
  const data = _interopRequireDefault(require("crypto"));
@@ -128,4 +132,68 @@ function checkIdentifier(value) {
128
132
  if (value.length > MAX_IDENTIFIER_LENGTH) {
129
133
  throw new _identifierError.IdentifierError(`Identifier ${value} is too long`);
130
134
  }
135
+ }
136
+
137
+ function getTableName(collectionName, options) {
138
+ return options.underscored ? snakeCase(collectionName) : collectionName;
139
+ }
140
+
141
+ function snakeCase(name) {
142
+ return require('sequelize').Utils.underscore(name);
143
+ }
144
+
145
+ function patchShowConstraintsQuery(queryGenerator, db) {
146
+ 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
+
149
+ if (!constraintName) {
150
+ lines.push(`AND constraint_name='${constraintName}'`);
151
+ }
152
+
153
+ if (db.options.schema && db.options.schema !== 'public') {
154
+ lines.push(`AND table_schema='${db.options.schema}'`);
155
+ }
156
+
157
+ return lines.join(' ');
158
+ };
159
+ }
160
+
161
+ function patchDescribeTableQuery(queryGenerator) {
162
+ const describeTableQuery = function describeTableQuery(tableName, schema) {
163
+ schema = schema || this.options.schema || 'public';
164
+ 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
+ };
166
+
167
+ queryGenerator.describeTableQuery = describeTableQuery.bind(queryGenerator);
168
+ }
169
+
170
+ function patchSequelizeQueryInterface(db) {
171
+ if (db.inDialect('postgres')) {
172
+ //@ts-ignore
173
+ const queryGenerator = db.sequelize.dialect.queryGenerator;
174
+ patchShowConstraintsQuery(queryGenerator, db);
175
+ patchDescribeTableQuery(queryGenerator);
176
+ }
177
+ }
178
+
179
+ function percent2float(value) {
180
+ if (!value.endsWith('%')) {
181
+ return NaN;
182
+ }
183
+
184
+ let val = value.substring(0, value.length - 1);
185
+
186
+ if (isNaN(+val)) {
187
+ return NaN;
188
+ }
189
+
190
+ const index = value.indexOf('.');
191
+
192
+ if (index === -1) {
193
+ return parseFloat(value) / 100;
194
+ }
195
+
196
+ const repeat = value.length - index - 2;
197
+ const v = parseInt('1' + '0'.repeat(repeat));
198
+ return parseFloat(value) * v / (100 * v);
131
199
  }
@@ -0,0 +1,8 @@
1
+ import { BaseValueParser } from './base-value-parser';
2
+ export declare class ArrayValueParser extends BaseValueParser {
3
+ setValue(value: any): Promise<void>;
4
+ getOptions(): {
5
+ map: Map<any, any>;
6
+ set: Set<unknown>;
7
+ };
8
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ArrayValueParser = void 0;
7
+
8
+ var _baseValueParser = require("./base-value-parser");
9
+
10
+ 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
+ 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
+ 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
+ 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
+ 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
+ class ArrayValueParser extends _baseValueParser.BaseValueParser {
21
+ setValue(value) {
22
+ var _this = this;
23
+
24
+ return _asyncToGenerator(function* () {
25
+ const _this$getOptions = _this.getOptions(),
26
+ map = _this$getOptions.map,
27
+ set = _this$getOptions.set;
28
+
29
+ const values = _this.toArr(value);
30
+
31
+ if (set.size > 0) {
32
+ const filtered = values.map(v => map.has(v) ? map.get(v) : v).filter(v => set.has(v));
33
+
34
+ if (values.length === filtered.length) {
35
+ _this.value = filtered;
36
+ } else {
37
+ _this.errors.push(`No matching option found - ${JSON.stringify(value)}`);
38
+ }
39
+ } else {
40
+ _this.value = values;
41
+ }
42
+ })();
43
+ }
44
+
45
+ getOptions() {
46
+ var _this$field$options, _this$field$options$u;
47
+
48
+ 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
+ const map = new Map();
50
+ const set = new Set();
51
+
52
+ var _iterator = _createForOfIteratorHelper(options),
53
+ _step;
54
+
55
+ try {
56
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
57
+ const option = _step.value;
58
+ set.add(option.value);
59
+ set.add(option.label);
60
+ map.set(option.label, option.value);
61
+ }
62
+ } catch (err) {
63
+ _iterator.e(err);
64
+ } finally {
65
+ _iterator.f();
66
+ }
67
+
68
+ return {
69
+ map,
70
+ set
71
+ };
72
+ }
73
+
74
+ }
75
+
76
+ exports.ArrayValueParser = ArrayValueParser;
@@ -0,0 +1,12 @@
1
+ export declare class BaseValueParser {
2
+ ctx: any;
3
+ field: any;
4
+ value: any;
5
+ errors: string[];
6
+ constructor(field: any, ctx: any);
7
+ trim(value: any): any;
8
+ toArr(value: any, splitter?: string): any[];
9
+ toString(): any;
10
+ getValue(): any;
11
+ setValue(value: any): Promise<void>;
12
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BaseValueParser = void 0;
7
+
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); } }
9
+
10
+ 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
+ class BaseValueParser {
13
+ constructor(field, ctx) {
14
+ this.ctx = void 0;
15
+ this.field = void 0;
16
+ this.value = void 0;
17
+ this.errors = [];
18
+ this.field = field;
19
+ this.ctx = ctx;
20
+ this.value = null;
21
+ }
22
+
23
+ trim(value) {
24
+ return typeof value === 'string' ? value.trim() : value;
25
+ }
26
+
27
+ toArr(value, splitter) {
28
+ let values = [];
29
+
30
+ if (!value) {
31
+ values = [];
32
+ } else if (typeof value === 'string') {
33
+ values = value.split(splitter || /,|,|、/);
34
+ } else if (Array.isArray(value)) {
35
+ values = value;
36
+ }
37
+
38
+ return values.map(v => this.trim(v)).filter(Boolean);
39
+ }
40
+
41
+ toString() {
42
+ return this.value;
43
+ }
44
+
45
+ getValue() {
46
+ return this.value;
47
+ }
48
+
49
+ setValue(value) {
50
+ var _this = this;
51
+
52
+ return _asyncToGenerator(function* () {
53
+ _this.value = value;
54
+ })();
55
+ }
56
+
57
+ }
58
+
59
+ exports.BaseValueParser = BaseValueParser;
@@ -0,0 +1,4 @@
1
+ import { BaseValueParser } from './base-value-parser';
2
+ export declare class BooleanValueParser extends BaseValueParser {
3
+ setValue(value: any): Promise<void>;
4
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BooleanValueParser = void 0;
7
+
8
+ var _baseValueParser = require("./base-value-parser");
9
+
10
+ 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
+ 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
+ class BooleanValueParser extends _baseValueParser.BaseValueParser {
15
+ setValue(value) {
16
+ var _this = this;
17
+
18
+ return _asyncToGenerator(function* () {
19
+ // Boolean
20
+ if (typeof value === 'boolean') {
21
+ _this.value = value;
22
+ } // Number
23
+ else if (typeof value === 'number' && [0, 1].includes(value)) {
24
+ _this.value = value === 1;
25
+ } // String
26
+ else if (typeof value === 'string') {
27
+ if (!value) {
28
+ _this.value = null;
29
+ }
30
+
31
+ if (['1', 'y', 'yes', 'true', '是'].includes(value.toLowerCase())) {
32
+ _this.value = true;
33
+ } else if (['0', 'n', 'no', 'false', '否'].includes(value.toLowerCase())) {
34
+ _this.value = false;
35
+ } else {
36
+ _this.errors.push(`Invalid value - ${JSON.stringify(_this.value)}`);
37
+ }
38
+ } else {
39
+ _this.errors.push(`Invalid value - ${JSON.stringify(_this.value)}`);
40
+ }
41
+ })();
42
+ }
43
+
44
+ }
45
+
46
+ exports.BooleanValueParser = BooleanValueParser;
@@ -0,0 +1,5 @@
1
+ import { BaseValueParser } from './base-value-parser';
2
+ export declare class DateValueParser extends BaseValueParser {
3
+ setValue(value: any): Promise<void>;
4
+ getProps(): any;
5
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DateValueParser = void 0;
7
+
8
+ function _utils() {
9
+ const data = require("@nocobase/utils");
10
+
11
+ _utils = function _utils() {
12
+ return data;
13
+ };
14
+
15
+ return data;
16
+ }
17
+
18
+ function _excelDateToJs() {
19
+ const data = require("excel-date-to-js");
20
+
21
+ _excelDateToJs = function _excelDateToJs() {
22
+ return data;
23
+ };
24
+
25
+ return data;
26
+ }
27
+
28
+ function _moment() {
29
+ const data = _interopRequireWildcard(require("moment"));
30
+
31
+ _moment = function _moment() {
32
+ return data;
33
+ };
34
+
35
+ return data;
36
+ }
37
+
38
+ var _baseValueParser = require("./base-value-parser");
39
+
40
+ 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
+ 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
+ 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
+ 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
+ function isNumeric(str) {
49
+ if (typeof str === 'number') return true;
50
+ if (typeof str != 'string') return false;
51
+ return !isNaN(str) && !isNaN(parseFloat(str));
52
+ }
53
+
54
+ class DateValueParser extends _baseValueParser.BaseValueParser {
55
+ setValue(value) {
56
+ var _this = this;
57
+
58
+ return _asyncToGenerator(function* () {
59
+ if ((0, _moment().isMoment)(value)) {
60
+ _this.value = value;
61
+ } else if ((0, _moment().isDate)(value)) {
62
+ _this.value = value;
63
+ } else if (isNumeric(value)) {
64
+ try {
65
+ _this.value = (0, _excelDateToJs().getJsDateFromExcel)(value).toISOString();
66
+ } catch (error) {
67
+ _this.errors.push(`Invalid date - ${error.message}`);
68
+ }
69
+ } else if (typeof value === 'string') {
70
+ const props = _this.getProps();
71
+
72
+ const m = (0, _moment().default)(value);
73
+
74
+ if (m.isValid()) {
75
+ _this.value = (0, _utils().moment2str)(m, props);
76
+ } else {
77
+ _this.errors.push('Invalid date');
78
+ }
79
+ }
80
+ })();
81
+ }
82
+
83
+ getProps() {
84
+ var _this$field$options, _this$field$options$u;
85
+
86
+ 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
+ }
88
+
89
+ }
90
+
91
+ exports.DateValueParser = DateValueParser;
@@ -0,0 +1,12 @@
1
+ import { Database } from '../database';
2
+ import { ArrayValueParser } from './array-value-parser';
3
+ import { BaseValueParser } from './base-value-parser';
4
+ import { BooleanValueParser } from './boolean-value-parser';
5
+ import { DateValueParser } from './date-value-parser';
6
+ import { JsonValueParser } from './json-value-parser';
7
+ import { NumberValueParser } from './number-value-parser';
8
+ import { StringValueParser } from './string-value-parser';
9
+ import { ToManyValueParser } from './to-many-value-parser';
10
+ import { ToOneValueParser } from './to-one-value-parser';
11
+ export declare function registerFieldValueParsers(db: Database): void;
12
+ export { ArrayValueParser, BaseValueParser, BooleanValueParser, DateValueParser, JsonValueParser, NumberValueParser, StringValueParser, ToManyValueParser, ToOneValueParser, };
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ArrayValueParser", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _arrayValueParser.ArrayValueParser;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "BaseValueParser", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _baseValueParser.BaseValueParser;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "BooleanValueParser", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _booleanValueParser.BooleanValueParser;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "DateValueParser", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _dateValueParser.DateValueParser;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "JsonValueParser", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _jsonValueParser.JsonValueParser;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "NumberValueParser", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _numberValueParser.NumberValueParser;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "StringValueParser", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _stringValueParser.StringValueParser;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "ToManyValueParser", {
49
+ enumerable: true,
50
+ get: function get() {
51
+ return _toManyValueParser.ToManyValueParser;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "ToOneValueParser", {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _toOneValueParser.ToOneValueParser;
58
+ }
59
+ });
60
+ exports.registerFieldValueParsers = registerFieldValueParsers;
61
+
62
+ var _arrayValueParser = require("./array-value-parser");
63
+
64
+ var _baseValueParser = require("./base-value-parser");
65
+
66
+ var _booleanValueParser = require("./boolean-value-parser");
67
+
68
+ var _dateValueParser = require("./date-value-parser");
69
+
70
+ var _jsonValueParser = require("./json-value-parser");
71
+
72
+ var _numberValueParser = require("./number-value-parser");
73
+
74
+ var _stringValueParser = require("./string-value-parser");
75
+
76
+ var _toManyValueParser = require("./to-many-value-parser");
77
+
78
+ var _toOneValueParser = require("./to-one-value-parser");
79
+
80
+ function registerFieldValueParsers(db) {
81
+ db.registerFieldValueParsers({
82
+ default: _baseValueParser.BaseValueParser,
83
+ array: _arrayValueParser.ArrayValueParser,
84
+ set: _arrayValueParser.ArrayValueParser,
85
+ boolean: _booleanValueParser.BooleanValueParser,
86
+ date: _dateValueParser.DateValueParser,
87
+ json: _jsonValueParser.JsonValueParser,
88
+ jsonb: _jsonValueParser.JsonValueParser,
89
+ number: _numberValueParser.NumberValueParser,
90
+ integer: _numberValueParser.NumberValueParser,
91
+ bigInt: _numberValueParser.NumberValueParser,
92
+ float: _numberValueParser.NumberValueParser,
93
+ double: _numberValueParser.NumberValueParser,
94
+ real: _numberValueParser.NumberValueParser,
95
+ decimal: _numberValueParser.NumberValueParser,
96
+ string: _stringValueParser.StringValueParser,
97
+ hasOne: _toOneValueParser.ToOneValueParser,
98
+ hasMany: _toManyValueParser.ToManyValueParser,
99
+ belongsTo: _toOneValueParser.ToOneValueParser,
100
+ belongsToMany: _toManyValueParser.ToManyValueParser
101
+ });
102
+ }
@@ -0,0 +1,4 @@
1
+ import { BaseValueParser } from './base-value-parser';
2
+ export declare class JsonValueParser extends BaseValueParser {
3
+ setValue(value: any): Promise<void>;
4
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.JsonValueParser = void 0;
7
+
8
+ var _baseValueParser = require("./base-value-parser");
9
+
10
+ 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
+ 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
+ class JsonValueParser extends _baseValueParser.BaseValueParser {
15
+ setValue(value) {
16
+ var _this = this;
17
+
18
+ return _asyncToGenerator(function* () {
19
+ if (typeof value === 'string') {
20
+ if (value.trim() === '') {
21
+ _this.value = null;
22
+ } else {
23
+ try {
24
+ _this.value = JSON.parse(value);
25
+ } catch (error) {
26
+ _this.errors.push(error.message);
27
+ }
28
+ }
29
+ } else {
30
+ _this.value = value;
31
+ }
32
+ })();
33
+ }
34
+
35
+ }
36
+
37
+ exports.JsonValueParser = JsonValueParser;
@@ -0,0 +1,4 @@
1
+ import { BaseValueParser } from './base-value-parser';
2
+ export declare class NumberValueParser extends BaseValueParser {
3
+ setValue(value: any): Promise<void>;
4
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NumberValueParser = void 0;
7
+
8
+ var _utils = require("../utils");
9
+
10
+ var _baseValueParser = require("./base-value-parser");
11
+
12
+ 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); } }
13
+
14
+ 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); }); }; }
15
+
16
+ class NumberValueParser extends _baseValueParser.BaseValueParser {
17
+ setValue(value) {
18
+ var _this = this;
19
+
20
+ return _asyncToGenerator(function* () {
21
+ if (value === null || value === undefined || typeof value === 'number') {
22
+ _this.value = value;
23
+ } else if (typeof value === 'string') {
24
+ if (!value) {
25
+ _this.value = null;
26
+ } else if (['n/a', '-'].includes(value.toLowerCase())) {
27
+ _this.value = null;
28
+ } else {
29
+ if (value.endsWith('%')) {
30
+ value = (0, _utils.percent2float)(value);
31
+ } else {
32
+ value = +value;
33
+ }
34
+
35
+ if (isNaN(value)) {
36
+ _this.errors.push(`Invalid value - "${value}"`);
37
+ } else {
38
+ _this.value = value;
39
+ }
40
+ }
41
+ } else {
42
+ _this.errors.push(`Invalid value - ${JSON.stringify(value)}`);
43
+ }
44
+ })();
45
+ }
46
+
47
+ }
48
+
49
+ exports.NumberValueParser = NumberValueParser;
@@ -0,0 +1,8 @@
1
+ import { BaseValueParser } from './base-value-parser';
2
+ export declare class StringValueParser extends BaseValueParser {
3
+ setValue(value: any): Promise<void>;
4
+ getOptions(): {
5
+ map: Map<any, any>;
6
+ set: Set<unknown>;
7
+ };
8
+ }