leoric 2.6.2 → 2.7.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.
- package/History.md +783 -0
- package/index.js +4 -1
- package/package.json +2 -1
- package/src/adapters/sequelize.js +6 -6
- package/src/bone.js +9 -7
- package/src/collection.js +0 -8
- package/src/constants.js +3 -0
- package/src/data_types.js +438 -428
- package/src/data_types.js.map +1 -0
- package/src/data_types.ts +600 -0
- package/src/decorators.js +29 -5
- package/src/decorators.js.map +1 -1
- package/src/decorators.ts +20 -9
- package/src/drivers/abstract/index.js +8 -8
- package/src/drivers/abstract/spellbook.js +10 -8
- package/src/drivers/mysql/data_types.js +1 -1
- package/src/drivers/mysql/index.js +4 -2
- package/src/drivers/postgres/data_types.js +2 -2
- package/src/drivers/postgres/index.js +6 -2
- package/src/drivers/postgres/type_parser.js +7 -0
- package/src/drivers/sqlite/data_types.js +2 -2
- package/src/realm.js +11 -7
- package/src/spell.js +2 -2
- package/src/utils/index.js +8 -0
- package/types/index.d.ts +16 -16
- package/types/data_types.d.ts +0 -105
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data_types.js","sourceRoot":"","sources":["data_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const util = require('util');
|
|
4
|
+
const invokableFunc = require('./utils/invokable');
|
|
5
|
+
const Raw = require('./raw');
|
|
6
|
+
|
|
7
|
+
export enum LENGTH_VARIANTS {
|
|
8
|
+
tiny = 'tiny',
|
|
9
|
+
empty = '',
|
|
10
|
+
medium = 'medium',
|
|
11
|
+
long = 'long',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export interface AbstractDataType<T> {
|
|
15
|
+
new (dataLength?: LENGTH_VARIANTS | number): DataType & T;
|
|
16
|
+
(dataLength?: LENGTH_VARIANTS | number): DataType & T;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @example
|
|
21
|
+
* const { STRING, INTEGER, BIGINT, DATE, BOOLEAN } = app.model;
|
|
22
|
+
* class User = app.model.define('User', {
|
|
23
|
+
* login: STRING,
|
|
24
|
+
* });
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
export abstract class DataType {
|
|
28
|
+
dataType: string = '';
|
|
29
|
+
dataLength?: string | number;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* cast raw data returned from data packet into js type
|
|
33
|
+
*/
|
|
34
|
+
cast(value: any): any {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* uncast js value into database type with precision
|
|
40
|
+
*/
|
|
41
|
+
uncast(value: any, _strict?: boolean): any {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
abstract toSqlString(): string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @example
|
|
50
|
+
* STRING
|
|
51
|
+
* STRING(127)
|
|
52
|
+
* STRING.BINARY
|
|
53
|
+
* @param {number} dataLength
|
|
54
|
+
*/
|
|
55
|
+
class STRING extends DataType {
|
|
56
|
+
constructor(dataLength: number = 255) {
|
|
57
|
+
super();
|
|
58
|
+
this.dataType = 'varchar';
|
|
59
|
+
this.dataLength = dataLength;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
toSqlString(): string {
|
|
63
|
+
const { dataLength } = this;
|
|
64
|
+
const dataType = this.dataType.toUpperCase();
|
|
65
|
+
const chunks: string[] = [];
|
|
66
|
+
chunks.push(dataLength && dataLength > 0 ? `${dataType}(${dataLength})` : dataType);
|
|
67
|
+
return chunks.join(' ');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
uncast(value: string | typeof Raw | null): string {
|
|
71
|
+
if (value == null || value instanceof Raw) return value;
|
|
72
|
+
return '' + value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
class BINARY extends DataType {
|
|
77
|
+
constructor(dataLength = 255) {
|
|
78
|
+
super();
|
|
79
|
+
this.dataLength = dataLength;
|
|
80
|
+
this.dataType = 'binary';
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
toSqlString(): string {
|
|
84
|
+
const { dataLength } = this;
|
|
85
|
+
const dataType = this.dataType.toUpperCase();
|
|
86
|
+
const chunks: string[] = [];
|
|
87
|
+
chunks.push(dataLength && dataLength > 0 ? `${dataType}(${dataLength})` : dataType);
|
|
88
|
+
return chunks.join(' ');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
cast(value: string | Buffer): Buffer | string {
|
|
92
|
+
if (value == null) return value;
|
|
93
|
+
if (Buffer.isBuffer(value)) return value;
|
|
94
|
+
return Buffer.from(value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
class VARBINARY extends BINARY {
|
|
99
|
+
constructor(dataLength?: number) {
|
|
100
|
+
super(dataLength);
|
|
101
|
+
this.dataType = 'varbinary';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* ZEROFILL is deprecated
|
|
107
|
+
* - https://dev.mysql.com/doc/refman/8.0/en/integer-types.html
|
|
108
|
+
* @example
|
|
109
|
+
* INTEGER
|
|
110
|
+
* INTEGER.UNSIGNED
|
|
111
|
+
* INTEGER.UNSIGNED.ZEROFILL
|
|
112
|
+
* INTEGER(10)
|
|
113
|
+
* @param {number} dataLength
|
|
114
|
+
*/
|
|
115
|
+
class INTEGER extends DataType {
|
|
116
|
+
unsigned?: boolean;
|
|
117
|
+
zerofill?: boolean;
|
|
118
|
+
|
|
119
|
+
constructor(dataLength?: number) {
|
|
120
|
+
super();
|
|
121
|
+
this.dataLength = dataLength;
|
|
122
|
+
this.dataType = 'integer';
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
get UNSIGNED() {
|
|
126
|
+
this.unsigned = true;
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
get ZEROFILL() {
|
|
131
|
+
this.zerofill = true;
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
toSqlString(): string {
|
|
136
|
+
const { dataLength, unsigned, zerofill } = this;
|
|
137
|
+
const dataType = this.dataType.toUpperCase();
|
|
138
|
+
const chunks: string[] = [];
|
|
139
|
+
chunks.push(dataLength && dataLength > 0 ? `${dataType}(${dataLength})` : dataType);
|
|
140
|
+
if (unsigned) chunks.push('UNSIGNED');
|
|
141
|
+
if (zerofill) chunks.push('ZEROFILL');
|
|
142
|
+
return chunks.join(' ');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
cast(value: number): number {
|
|
146
|
+
if (value == null || isNaN(value)) return value;
|
|
147
|
+
return Number(value);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
uncast(value: any, strict = true): string | number {
|
|
151
|
+
const originValue = value;
|
|
152
|
+
if (value == null || value instanceof Raw) return value;
|
|
153
|
+
if (typeof value === 'string') value = parseInt(value, 10);
|
|
154
|
+
if (isNaN(value)) {
|
|
155
|
+
if (strict) throw new Error(util.format('invalid integer: %s', originValue));
|
|
156
|
+
return originValue;
|
|
157
|
+
}
|
|
158
|
+
return value;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* 8 bit integer
|
|
164
|
+
* @example
|
|
165
|
+
* TINYINT
|
|
166
|
+
* TINYINT.UNSIGNED
|
|
167
|
+
* TINYINT(1)
|
|
168
|
+
* @param {number} dataLength
|
|
169
|
+
*/
|
|
170
|
+
class TINYINT extends INTEGER {
|
|
171
|
+
constructor(dataLength?: number) {
|
|
172
|
+
super(dataLength);
|
|
173
|
+
this.dataType = 'tinyint';
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* 16 bit integer
|
|
179
|
+
* @example
|
|
180
|
+
* SMALLINT
|
|
181
|
+
* SMALLINT.UNSIGNED
|
|
182
|
+
* SMALLINT(2)
|
|
183
|
+
* @param {number} dataLength
|
|
184
|
+
*/
|
|
185
|
+
class SMALLINT extends INTEGER {
|
|
186
|
+
constructor(dataLength?: number) {
|
|
187
|
+
super(dataLength);
|
|
188
|
+
this.dataType = 'smallint';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 24 bit integer
|
|
194
|
+
* @example
|
|
195
|
+
* MEDIUMINT
|
|
196
|
+
* MEDIUMINT.UNSIGNED
|
|
197
|
+
* MEDIUMINT(3)
|
|
198
|
+
* @param {number} dataLength
|
|
199
|
+
*/
|
|
200
|
+
class MEDIUMINT extends INTEGER {
|
|
201
|
+
constructor(dataLength?: number) {
|
|
202
|
+
super(dataLength);
|
|
203
|
+
this.dataType = 'mediumint';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* 64 bit integer
|
|
210
|
+
* @example
|
|
211
|
+
* BIGINT
|
|
212
|
+
* BIGINT.UNSIGNED
|
|
213
|
+
* BIGINT(8)
|
|
214
|
+
* @param {number} dataLength
|
|
215
|
+
*/
|
|
216
|
+
class BIGINT extends INTEGER {
|
|
217
|
+
constructor(dataLength?: number) {
|
|
218
|
+
super(dataLength);
|
|
219
|
+
this.dataType = 'bigint';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* fixed-point decimal types
|
|
225
|
+
* @example
|
|
226
|
+
* DECIMAL
|
|
227
|
+
* DECIMAL.UNSIGNED
|
|
228
|
+
* DECIMAL(5, 2)
|
|
229
|
+
* @param {number} precision
|
|
230
|
+
* @param {number} scale
|
|
231
|
+
* - https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html
|
|
232
|
+
*/
|
|
233
|
+
class DECIMAL extends INTEGER {
|
|
234
|
+
precision?: number;
|
|
235
|
+
scale?: number;
|
|
236
|
+
|
|
237
|
+
constructor(precision?: number, scale?: number) {
|
|
238
|
+
super();
|
|
239
|
+
this.dataType = 'decimal';
|
|
240
|
+
this.precision = precision;
|
|
241
|
+
this.scale = scale;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
toSqlString() {
|
|
245
|
+
const { precision, scale, unsigned, zerofill } = this;
|
|
246
|
+
const dataType = this.dataType.toUpperCase();
|
|
247
|
+
const chunks: string[] = [];
|
|
248
|
+
if (precision && precision > 0 && scale != null && scale >= 0) {
|
|
249
|
+
chunks.push(`${dataType}(${precision},${scale})`);
|
|
250
|
+
} else if (precision && precision > 0) {
|
|
251
|
+
chunks.push(`${dataType}(${precision})`);
|
|
252
|
+
} else {
|
|
253
|
+
chunks.push(dataType);
|
|
254
|
+
}
|
|
255
|
+
if (unsigned) chunks.push('UNSIGNED');
|
|
256
|
+
if (zerofill) chunks.push('ZEROFILL');
|
|
257
|
+
return chunks.join(' ');
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const rDateFormat = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:[,.]\d{3,6}){0,1}$/;
|
|
262
|
+
class DATE extends DataType {
|
|
263
|
+
precision?: number | null;
|
|
264
|
+
timezone?: boolean = true;
|
|
265
|
+
|
|
266
|
+
constructor(precision?: number | null, timezone: boolean = true) {
|
|
267
|
+
super();
|
|
268
|
+
this.dataType = 'datetime';
|
|
269
|
+
this.precision = precision;
|
|
270
|
+
// PostgreSQL enables timestamp with or without time zone
|
|
271
|
+
// - https://www.postgresql.org/docs/9.5/datatype-datetime.html
|
|
272
|
+
this.timezone = timezone;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
toSqlString() {
|
|
276
|
+
const { precision } = this;
|
|
277
|
+
const dataType = this.dataType.toUpperCase();
|
|
278
|
+
if (precision != null && precision >= 0) return `${dataType}(${precision})`;
|
|
279
|
+
return dataType;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
_round(value) {
|
|
283
|
+
const { precision } = this;
|
|
284
|
+
if (precision != null && precision < 3 && value instanceof Date) {
|
|
285
|
+
const divider = 10 ** (3 - precision);
|
|
286
|
+
return new Date(Math.round(value.getTime() / divider) * divider);
|
|
287
|
+
}
|
|
288
|
+
return value;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
cast(value: Date | string | number): Date | number | string {
|
|
292
|
+
const original = value;
|
|
293
|
+
if (value == null) return value;
|
|
294
|
+
if (!(value instanceof Date)) value = new Date(value);
|
|
295
|
+
if (isNaN(value.getTime())) return original;
|
|
296
|
+
return this._round(value);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
uncast(value: null | typeof Raw | string | Date, _strict?: boolean): string | Date {
|
|
300
|
+
const originValue = value;
|
|
301
|
+
|
|
302
|
+
if (value == null || value instanceof Raw) return value;
|
|
303
|
+
if (typeof value.toDate === 'function') {
|
|
304
|
+
value = value.toDate();
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// @deprecated
|
|
308
|
+
// vaguely standard date formats such as 2021-10-15 15:50:02,548
|
|
309
|
+
if (typeof value === 'string' && rDateFormat.test(value)) {
|
|
310
|
+
// 2021-10-15 15:50:02,548 => 2021-10-15T15:50:02,548,
|
|
311
|
+
// 2021-10-15 15:50:02 => 2021-10-15T15:50:02.000
|
|
312
|
+
value = new Date(`${value.replace(' ', 'T').replace(',', '.')}`);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// 1634611135776
|
|
316
|
+
// '2021-10-15T08:38:43.877Z'
|
|
317
|
+
if (!(value instanceof Date)) value = new Date(value);
|
|
318
|
+
if (isNaN(value)) throw new Error(util.format('invalid date: %s', originValue));
|
|
319
|
+
|
|
320
|
+
return this._round(value);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
class DATEONLY extends DATE {
|
|
325
|
+
constructor() {
|
|
326
|
+
super();
|
|
327
|
+
this.dataType = 'date';
|
|
328
|
+
this.precision = null;
|
|
329
|
+
this.timezone = false;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
toSqlString(): string {
|
|
333
|
+
return this.dataType.toUpperCase();
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
_round(value) {
|
|
337
|
+
if (value instanceof Date) {
|
|
338
|
+
return new Date(value.getFullYear(), value.getMonth(), value.getDate());
|
|
339
|
+
}
|
|
340
|
+
return value;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
class BOOLEAN extends DataType {
|
|
345
|
+
constructor() {
|
|
346
|
+
super();
|
|
347
|
+
this.dataType = 'boolean';
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
toSqlString(): string {
|
|
351
|
+
return this.dataType.toUpperCase();
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
cast(value) {
|
|
355
|
+
if (value == null) return value;
|
|
356
|
+
return Boolean(value);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
class TEXT extends DataType {
|
|
361
|
+
constructor(length: LENGTH_VARIANTS = LENGTH_VARIANTS.empty) {
|
|
362
|
+
if (!Object.values(LENGTH_VARIANTS).includes(length)) {
|
|
363
|
+
throw new Error(`invalid text length: ${length}`);
|
|
364
|
+
}
|
|
365
|
+
super();
|
|
366
|
+
this.dataType = 'text';
|
|
367
|
+
this.dataLength = length;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
toSqlString(): string {
|
|
371
|
+
return [ this.dataLength, this.dataType ].join('').toUpperCase();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
class BLOB extends DataType {
|
|
376
|
+
constructor(length: LENGTH_VARIANTS = LENGTH_VARIANTS.empty) {
|
|
377
|
+
if (!Object.values(LENGTH_VARIANTS).includes(length)) {
|
|
378
|
+
throw new Error(`invalid blob length: ${length}`);
|
|
379
|
+
}
|
|
380
|
+
super();
|
|
381
|
+
this.dataType = 'blob';
|
|
382
|
+
this.dataLength = length;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
toSqlString(): string {
|
|
386
|
+
return [ this.dataLength, this.dataType ].join('').toUpperCase();
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
cast(value) {
|
|
390
|
+
if (value == null) return value;
|
|
391
|
+
if (Buffer.isBuffer(value)) return value;
|
|
392
|
+
return Buffer.from(value);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// JSON text type
|
|
397
|
+
class MYJSON extends DataType {
|
|
398
|
+
constructor() {
|
|
399
|
+
super();
|
|
400
|
+
this.dataType = 'text';
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
toSqlString() {
|
|
404
|
+
return 'TEXT';
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
static toSqlString() {
|
|
408
|
+
return 'TEXT';
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
cast(value) {
|
|
412
|
+
if (!value) return value;
|
|
413
|
+
// type === JSONB
|
|
414
|
+
if (typeof value === 'object') return value;
|
|
415
|
+
try {
|
|
416
|
+
return global.JSON.parse(value);
|
|
417
|
+
} catch (err) {
|
|
418
|
+
console.error(new Error(`unable to cast ${value} to JSON`));
|
|
419
|
+
return value;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
uncast(value) {
|
|
424
|
+
if (value == null || value instanceof Raw) return value;
|
|
425
|
+
return global.JSON.stringify(value);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// JSON binary type, available in postgreSQL or mySQL 5.7 +
|
|
430
|
+
// - https://dev.mysql.com/doc/refman/8.0/en/json.html
|
|
431
|
+
// - https://www.postgresql.org/docs/9.4/datatype-json.html
|
|
432
|
+
class JSONB extends MYJSON {
|
|
433
|
+
constructor() {
|
|
434
|
+
super();
|
|
435
|
+
this.dataType = 'json';
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
toSqlString(): string {
|
|
439
|
+
return 'JSON';
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
static toSqlString(): string {
|
|
443
|
+
return 'JSON';
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
class VIRTUAL extends DataType {
|
|
448
|
+
virtual: boolean = true;
|
|
449
|
+
constructor() {
|
|
450
|
+
super();
|
|
451
|
+
this.dataType = 'virtual';
|
|
452
|
+
this.virtual = true;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
toSqlString(): string {
|
|
456
|
+
return 'VIRTUAL';
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
static toSqlString(): string {
|
|
460
|
+
return 'VIRTUAL';
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const AllDataTypes = {
|
|
466
|
+
STRING,
|
|
467
|
+
TINYINT,
|
|
468
|
+
SMALLINT,
|
|
469
|
+
MEDIUMINT,
|
|
470
|
+
INTEGER,
|
|
471
|
+
BIGINT,
|
|
472
|
+
DECIMAL,
|
|
473
|
+
DATE,
|
|
474
|
+
DATEONLY,
|
|
475
|
+
BOOLEAN,
|
|
476
|
+
TEXT,
|
|
477
|
+
BLOB,
|
|
478
|
+
JSON: MYJSON,
|
|
479
|
+
JSONB,
|
|
480
|
+
BINARY,
|
|
481
|
+
VARBINARY,
|
|
482
|
+
VIRTUAL,
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
type DATA_TYPE<T> = AbstractDataType<T> & T;
|
|
486
|
+
|
|
487
|
+
class DataTypes {
|
|
488
|
+
static STRING: DATA_TYPE<STRING> = STRING as any;
|
|
489
|
+
static TINYINT: DATA_TYPE<TINYINT> = TINYINT as any;
|
|
490
|
+
static SMALLINT: DATA_TYPE<SMALLINT> = SMALLINT as any;
|
|
491
|
+
static MEDIUMINT: DATA_TYPE<MEDIUMINT> = MEDIUMINT as any;
|
|
492
|
+
static INTEGER: DATA_TYPE<INTEGER> = INTEGER as any;
|
|
493
|
+
static BIGINT: DATA_TYPE<BIGINT> = BIGINT as any;
|
|
494
|
+
static DECIMAL: DATA_TYPE<DECIMAL> = DECIMAL as any;
|
|
495
|
+
static DATE: DATA_TYPE<DATE> = DATE as any;
|
|
496
|
+
static TEXT: DATA_TYPE<TEXT> = TEXT as any;
|
|
497
|
+
static BLOB: DATA_TYPE<BLOB> = BLOB as any;
|
|
498
|
+
static JSON: DATA_TYPE<MYJSON> = MYJSON as any;
|
|
499
|
+
static JSONB: DATA_TYPE<JSONB> = JSONB as any;
|
|
500
|
+
static BINARY: DATA_TYPE<BINARY> = BINARY as any;
|
|
501
|
+
static VARBINARY: DATA_TYPE<VARBINARY> = VARBINARY as any;
|
|
502
|
+
static VIRTUAL: DATA_TYPE<VIRTUAL> = VIRTUAL as any;
|
|
503
|
+
static DATEONLY: DATA_TYPE<DATEONLY> = DATEONLY as any;
|
|
504
|
+
static BOOLEAN: DATA_TYPE<BOOLEAN> = BOOLEAN as any;
|
|
505
|
+
|
|
506
|
+
static findType(columnType: string): DataTypes {
|
|
507
|
+
const {
|
|
508
|
+
STRING, TEXT, DATE, DATEONLY,
|
|
509
|
+
TINYINT, SMALLINT, MEDIUMINT, INTEGER,
|
|
510
|
+
BIGINT, DECIMAL, BOOLEAN,
|
|
511
|
+
BINARY, VARBINARY, BLOB,
|
|
512
|
+
} = this;
|
|
513
|
+
|
|
514
|
+
const res = columnType?.match(/(\w+)(?:\((\d+)(?:,(\d+))?\))?/);
|
|
515
|
+
if(!res) {
|
|
516
|
+
throw new Error(`Unknown columnType ${columnType}`);
|
|
517
|
+
}
|
|
518
|
+
const [ , dataType, ...matches ] = res;
|
|
519
|
+
const params: any[] = [];
|
|
520
|
+
for (let i = 0; i < matches.length; i++) {
|
|
521
|
+
if (matches[i] != null) params[i] = parseInt(matches[i], 10);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
switch (dataType) {
|
|
525
|
+
case 'varchar':
|
|
526
|
+
case 'char':
|
|
527
|
+
return new STRING(...params);
|
|
528
|
+
// longtext is only for MySQL
|
|
529
|
+
case 'longtext':
|
|
530
|
+
return new TEXT(LENGTH_VARIANTS.long);
|
|
531
|
+
case 'mediumtext':
|
|
532
|
+
return new TEXT(LENGTH_VARIANTS.medium);
|
|
533
|
+
case 'text':
|
|
534
|
+
return new TEXT();
|
|
535
|
+
case 'date':
|
|
536
|
+
return new DATEONLY();
|
|
537
|
+
case 'datetime':
|
|
538
|
+
case 'timestamp':
|
|
539
|
+
// new DATE(precision)
|
|
540
|
+
return new DATE(...params);
|
|
541
|
+
case 'decimal':
|
|
542
|
+
return new DECIMAL(...params);
|
|
543
|
+
case 'int':
|
|
544
|
+
case 'integer':
|
|
545
|
+
case 'numeric':
|
|
546
|
+
return new INTEGER(...params);
|
|
547
|
+
case 'mediumint':
|
|
548
|
+
return new MEDIUMINT(...params);
|
|
549
|
+
case 'smallint':
|
|
550
|
+
return new SMALLINT(...params);
|
|
551
|
+
case 'tinyint':
|
|
552
|
+
return new TINYINT(...params);
|
|
553
|
+
case 'bigint':
|
|
554
|
+
return new BIGINT(...params);
|
|
555
|
+
case 'boolean':
|
|
556
|
+
return new BOOLEAN();
|
|
557
|
+
// mysql only
|
|
558
|
+
case 'binary':
|
|
559
|
+
// postgres only
|
|
560
|
+
case 'bytea':
|
|
561
|
+
return new BINARY(...params);
|
|
562
|
+
// mysql only
|
|
563
|
+
case 'varbinary':
|
|
564
|
+
return new VARBINARY(...params);
|
|
565
|
+
case 'longblob':
|
|
566
|
+
return new BLOB(LENGTH_VARIANTS.long);
|
|
567
|
+
case 'mediumblob':
|
|
568
|
+
return new BLOB(LENGTH_VARIANTS.medium);
|
|
569
|
+
case 'blob':
|
|
570
|
+
return new BLOB();
|
|
571
|
+
case 'tinyblob':
|
|
572
|
+
return new BLOB(LENGTH_VARIANTS.tiny);
|
|
573
|
+
default:
|
|
574
|
+
throw new Error(`Unexpected data type ${dataType}`);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
static get invokable() {
|
|
579
|
+
return new Proxy(this, {
|
|
580
|
+
get(target, p) {
|
|
581
|
+
const value = target[p];
|
|
582
|
+
if (AllDataTypes.hasOwnProperty(p)) return invokableFunc(value);
|
|
583
|
+
return value;
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Check if params is instance of DataType or not
|
|
590
|
+
* @param {*} params
|
|
591
|
+
* @returns {boolean}
|
|
592
|
+
*/
|
|
593
|
+
static is(params: any): boolean {
|
|
594
|
+
return params instanceof DataType;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
export const invokable = DataTypes.invokable;
|
|
599
|
+
|
|
600
|
+
export default DataTypes;
|
package/src/decorators.js
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
4
24
|
};
|
|
5
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
26
|
exports.BelongsTo = exports.HasOne = exports.HasMany = exports.Column = void 0;
|
|
7
|
-
const data_types_1 =
|
|
27
|
+
const data_types_1 = __importStar(require("./data_types"));
|
|
8
28
|
const constants_1 = require("./constants");
|
|
9
29
|
require("reflect-metadata");
|
|
10
30
|
function findType(tsType) {
|
|
@@ -24,9 +44,13 @@ function findType(tsType) {
|
|
|
24
44
|
throw new Error(`unknown typescript type ${tsType}`);
|
|
25
45
|
}
|
|
26
46
|
}
|
|
27
|
-
function Column(options
|
|
47
|
+
function Column(options) {
|
|
28
48
|
return function (target, propertyKey) {
|
|
29
|
-
if (options
|
|
49
|
+
if (options == null) {
|
|
50
|
+
options = {};
|
|
51
|
+
}
|
|
52
|
+
// target refers to model prototype, an internal instance of `Bone {}`
|
|
53
|
+
if (options['prototype'] instanceof data_types_1.DataType)
|
|
30
54
|
options = { type: options };
|
|
31
55
|
if (!('type' in options)) {
|
|
32
56
|
const tsType = Reflect.getMetadata('design:type', target, propertyKey);
|
package/src/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["decorators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["decorators.ts"],"names":[],"mappings":"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"}
|