@forestadmin/datasource-sql 1.0.0-beta.4 → 1.0.0-beta.42

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/CHANGELOG.md CHANGED
@@ -1,3 +1,412 @@
1
+ # @forestadmin/datasource-sql [1.0.0-beta.42](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.41...@forestadmin/datasource-sql@1.0.0-beta.42) (2022-08-23)
2
+
3
+
4
+
5
+
6
+
7
+ ### Dependencies
8
+
9
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.36
10
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.27
11
+
12
+ # @forestadmin/datasource-sql [1.0.0-beta.41](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.40...@forestadmin/datasource-sql@1.0.0-beta.41) (2022-08-23)
13
+
14
+
15
+
16
+
17
+
18
+ ### Dependencies
19
+
20
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.35
21
+
22
+ # @forestadmin/datasource-sql [1.0.0-beta.40](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.39...@forestadmin/datasource-sql@1.0.0-beta.40) (2022-07-25)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * update code and sequelize version to avoid crash ([#374](https://github.com/ForestAdmin/agent-nodejs/issues/374)) ([e003416](https://github.com/ForestAdmin/agent-nodejs/commit/e0034166b86e48781ea099086fd93aa7c68dba03))
28
+
29
+
30
+
31
+
32
+
33
+ ### Dependencies
34
+
35
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.34
36
+
37
+ # @forestadmin/datasource-sql [1.0.0-beta.39](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.38...@forestadmin/datasource-sql@1.0.0-beta.39) (2022-06-27)
38
+
39
+
40
+
41
+
42
+
43
+ ### Dependencies
44
+
45
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.33
46
+
47
+ # @forestadmin/datasource-sql [1.0.0-beta.38](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.37...@forestadmin/datasource-sql@1.0.0-beta.38) (2022-06-16)
48
+
49
+
50
+
51
+
52
+
53
+ ### Dependencies
54
+
55
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.32
56
+
57
+ # @forestadmin/datasource-sql [1.0.0-beta.37](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.36...@forestadmin/datasource-sql@1.0.0-beta.37) (2022-06-16)
58
+
59
+
60
+ ### Bug Fixes
61
+
62
+ * **patch-package:** remove feature change on sequelize patch ([#356](https://github.com/ForestAdmin/agent-nodejs/issues/356)) ([ac3d7d5](https://github.com/ForestAdmin/agent-nodejs/commit/ac3d7d583c65b392fe668225ebcd9b63729f9f23))
63
+
64
+ # @forestadmin/datasource-sql [1.0.0-beta.36](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.35...@forestadmin/datasource-sql@1.0.0-beta.36) (2022-06-15)
65
+
66
+
67
+
68
+
69
+
70
+ ### Dependencies
71
+
72
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.31
73
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.26
74
+
75
+ # @forestadmin/datasource-sql [1.0.0-beta.35](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.34...@forestadmin/datasource-sql@1.0.0-beta.35) (2022-06-15)
76
+
77
+
78
+
79
+
80
+
81
+ ### Dependencies
82
+
83
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.30
84
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.25
85
+
86
+ # @forestadmin/datasource-sql [1.0.0-beta.34](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.33...@forestadmin/datasource-sql@1.0.0-beta.34) (2022-06-14)
87
+
88
+
89
+
90
+
91
+
92
+ ### Dependencies
93
+
94
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.29
95
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.24
96
+
97
+ # @forestadmin/datasource-sql [1.0.0-beta.33](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.32...@forestadmin/datasource-sql@1.0.0-beta.33) (2022-06-14)
98
+
99
+
100
+
101
+
102
+
103
+ ### Dependencies
104
+
105
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.28
106
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.23
107
+
108
+ # @forestadmin/datasource-sql [1.0.0-beta.32](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.31...@forestadmin/datasource-sql@1.0.0-beta.32) (2022-06-09)
109
+
110
+
111
+
112
+
113
+
114
+ ### Dependencies
115
+
116
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.27
117
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.22
118
+
119
+ # @forestadmin/datasource-sql [1.0.0-beta.31](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.30...@forestadmin/datasource-sql@1.0.0-beta.31) (2022-06-01)
120
+
121
+
122
+
123
+
124
+
125
+ ### Dependencies
126
+
127
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.26
128
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.21
129
+
130
+ # @forestadmin/datasource-sql [1.0.0-beta.30](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.29...@forestadmin/datasource-sql@1.0.0-beta.30) (2022-05-31)
131
+
132
+
133
+
134
+
135
+
136
+ ### Dependencies
137
+
138
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.25
139
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.20
140
+
141
+ # @forestadmin/datasource-sql [1.0.0-beta.29](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.28...@forestadmin/datasource-sql@1.0.0-beta.29) (2022-05-25)
142
+
143
+
144
+
145
+
146
+
147
+ ### Dependencies
148
+
149
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.24
150
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.19
151
+
152
+ # @forestadmin/datasource-sql [1.0.0-beta.28](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.27...@forestadmin/datasource-sql@1.0.0-beta.28) (2022-05-24)
153
+
154
+
155
+
156
+
157
+
158
+ ### Dependencies
159
+
160
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.23
161
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.18
162
+
163
+ # @forestadmin/datasource-sql [1.0.0-beta.27](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.26...@forestadmin/datasource-sql@1.0.0-beta.27) (2022-05-24)
164
+
165
+
166
+
167
+
168
+
169
+ ### Dependencies
170
+
171
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.22
172
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.17
173
+
174
+ # @forestadmin/datasource-sql [1.0.0-beta.26](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.25...@forestadmin/datasource-sql@1.0.0-beta.26) (2022-05-16)
175
+
176
+
177
+
178
+
179
+
180
+ ### Dependencies
181
+
182
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.21
183
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.16
184
+
185
+ # @forestadmin/datasource-sql [1.0.0-beta.25](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.24...@forestadmin/datasource-sql@1.0.0-beta.25) (2022-05-12)
186
+
187
+
188
+
189
+
190
+
191
+ ### Dependencies
192
+
193
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.20
194
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.15
195
+
196
+ # @forestadmin/datasource-sql [1.0.0-beta.24](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.23...@forestadmin/datasource-sql@1.0.0-beta.24) (2022-05-09)
197
+
198
+
199
+ ### Bug Fixes
200
+
201
+ * **datasource sql:** throw an user friendly error when the provided connection uri is invalid ([#297](https://github.com/ForestAdmin/agent-nodejs/issues/297)) ([db1ac83](https://github.com/ForestAdmin/agent-nodejs/commit/db1ac83d3ef023c7875e4affbaecdc52de1e5fc3))
202
+
203
+ # @forestadmin/datasource-sql [1.0.0-beta.23](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.22...@forestadmin/datasource-sql@1.0.0-beta.23) (2022-05-09)
204
+
205
+
206
+
207
+
208
+
209
+ ### Dependencies
210
+
211
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.19
212
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.14
213
+
214
+ # @forestadmin/datasource-sql [1.0.0-beta.22](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.21...@forestadmin/datasource-sql@1.0.0-beta.22) (2022-05-09)
215
+
216
+
217
+
218
+
219
+
220
+ ### Dependencies
221
+
222
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.18
223
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.13
224
+
225
+ # @forestadmin/datasource-sql [1.0.0-beta.21](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.20...@forestadmin/datasource-sql@1.0.0-beta.21) (2022-05-09)
226
+
227
+
228
+ ### Bug Fixes
229
+
230
+ * datasource naming consistency ([#292](https://github.com/ForestAdmin/agent-nodejs/issues/292)) ([ff50a1f](https://github.com/ForestAdmin/agent-nodejs/commit/ff50a1f02aa65b3d99824c2bc9fb19d729a4e465))
231
+
232
+
233
+
234
+
235
+
236
+ ### Dependencies
237
+
238
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.17
239
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.12
240
+
241
+ # @forestadmin/datasource-sql [1.0.0-beta.20](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.19...@forestadmin/datasource-sql@1.0.0-beta.20) (2022-05-04)
242
+
243
+
244
+
245
+
246
+
247
+ ### Dependencies
248
+
249
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.16
250
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.11
251
+
252
+ # @forestadmin/datasource-sql [1.0.0-beta.19](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.18...@forestadmin/datasource-sql@1.0.0-beta.19) (2022-04-29)
253
+
254
+
255
+
256
+
257
+
258
+ ### Dependencies
259
+
260
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.15
261
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.10
262
+
263
+ # @forestadmin/datasource-sql [1.0.0-beta.18](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.17...@forestadmin/datasource-sql@1.0.0-beta.18) (2022-04-29)
264
+
265
+
266
+
267
+
268
+
269
+ ### Dependencies
270
+
271
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.14
272
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.9
273
+
274
+ # @forestadmin/datasource-sql [1.0.0-beta.17](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.16...@forestadmin/datasource-sql@1.0.0-beta.17) (2022-04-28)
275
+
276
+
277
+
278
+
279
+
280
+ ### Dependencies
281
+
282
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.13
283
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.8
284
+
285
+ # @forestadmin/datasource-sql [1.0.0-beta.16](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.15...@forestadmin/datasource-sql@1.0.0-beta.16) (2022-04-26)
286
+
287
+
288
+
289
+
290
+
291
+ ### Dependencies
292
+
293
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.12
294
+
295
+ # @forestadmin/datasource-sql [1.0.0-beta.15](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.14...@forestadmin/datasource-sql@1.0.0-beta.15) (2022-04-26)
296
+
297
+
298
+
299
+
300
+
301
+ ### Dependencies
302
+
303
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.11
304
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.7
305
+
306
+ # @forestadmin/datasource-sql [1.0.0-beta.14](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.13...@forestadmin/datasource-sql@1.0.0-beta.14) (2022-04-25)
307
+
308
+
309
+
310
+
311
+
312
+ ### Dependencies
313
+
314
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.10
315
+
316
+ # @forestadmin/datasource-sql [1.0.0-beta.13](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.12...@forestadmin/datasource-sql@1.0.0-beta.13) (2022-04-25)
317
+
318
+
319
+ ### Bug Fixes
320
+
321
+ * import packages from js ([#260](https://github.com/ForestAdmin/agent-nodejs/issues/260)) ([de00886](https://github.com/ForestAdmin/agent-nodejs/commit/de008862971ea5d3559e5a4c3136b0dd2161d760))
322
+
323
+
324
+
325
+
326
+
327
+ ### Dependencies
328
+
329
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.9
330
+
331
+ # @forestadmin/datasource-sql [1.0.0-beta.12](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.11...@forestadmin/datasource-sql@1.0.0-beta.12) (2022-04-21)
332
+
333
+
334
+ ### Features
335
+
336
+ * harmonize datasource creation and pass logger to it ([#257](https://github.com/ForestAdmin/agent-nodejs/issues/257)) ([82cb4ea](https://github.com/ForestAdmin/agent-nodejs/commit/82cb4ea37ac0a9fe83423d917226dfd8fad7d0a6))
337
+
338
+
339
+
340
+
341
+
342
+ ### Dependencies
343
+
344
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.8
345
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.6
346
+
347
+ # @forestadmin/datasource-sql [1.0.0-beta.11](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.10...@forestadmin/datasource-sql@1.0.0-beta.11) (2022-04-21)
348
+
349
+
350
+ ### Bug Fixes
351
+
352
+ * **datasource sql:** has one detection ([#254](https://github.com/ForestAdmin/agent-nodejs/issues/254)) ([68e68b3](https://github.com/ForestAdmin/agent-nodejs/commit/68e68b33063ba7bbfb9cfc747572f59953b64050))
353
+
354
+ # @forestadmin/datasource-sql [1.0.0-beta.10](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.9...@forestadmin/datasource-sql@1.0.0-beta.10) (2022-04-20)
355
+
356
+
357
+ ### Features
358
+
359
+ * **datasource sql:** handle relations ([#224](https://github.com/ForestAdmin/agent-nodejs/issues/224)) ([275cf7e](https://github.com/ForestAdmin/agent-nodejs/commit/275cf7ed6835933fce418f92a6a4e2521a9721fe))
360
+
361
+ # @forestadmin/datasource-sql [1.0.0-beta.9](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.8...@forestadmin/datasource-sql@1.0.0-beta.9) (2022-04-20)
362
+
363
+
364
+
365
+
366
+
367
+ ### Dependencies
368
+
369
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.7
370
+
371
+ # @forestadmin/datasource-sql [1.0.0-beta.8](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.7...@forestadmin/datasource-sql@1.0.0-beta.8) (2022-04-19)
372
+
373
+
374
+
375
+
376
+
377
+ ### Dependencies
378
+
379
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.6
380
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.5
381
+
382
+ # @forestadmin/datasource-sql [1.0.0-beta.7](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.6...@forestadmin/datasource-sql@1.0.0-beta.7) (2022-04-19)
383
+
384
+
385
+
386
+
387
+
388
+ ### Dependencies
389
+
390
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.5
391
+
392
+ # @forestadmin/datasource-sql [1.0.0-beta.6](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.5...@forestadmin/datasource-sql@1.0.0-beta.6) (2022-04-15)
393
+
394
+
395
+ ### Features
396
+
397
+ * **datasource sql:** handle primitive fields and default values ([#215](https://github.com/ForestAdmin/agent-nodejs/issues/215)) ([59a56da](https://github.com/ForestAdmin/agent-nodejs/commit/59a56da2721f39d0487b14d72b11d71b38b83a1f))
398
+
399
+ # @forestadmin/datasource-sql [1.0.0-beta.5](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.4...@forestadmin/datasource-sql@1.0.0-beta.5) (2022-04-15)
400
+
401
+
402
+
403
+
404
+
405
+ ### Dependencies
406
+
407
+ * **@forestadmin/datasource-sequelize:** upgraded to 1.0.0-beta.4
408
+ * **@forestadmin/datasource-toolkit:** upgraded to 1.0.0-beta.4
409
+
1
410
  # @forestadmin/datasource-sql [1.0.0-beta.4](https://github.com/ForestAdmin/agent-nodejs/compare/@forestadmin/datasource-sql@1.0.0-beta.3...@forestadmin/datasource-sql@1.0.0-beta.4) (2022-04-15)
2
411
 
3
412
 
@@ -1,5 +1,26 @@
1
+ import { Logger } from '@forestadmin/datasource-toolkit';
1
2
  import { SequelizeDataSource } from '@forestadmin/datasource-sequelize';
2
3
  export default class SqlDataSource extends SequelizeDataSource {
3
- constructor(connectionUri: string);
4
+ private readonly queryInterface;
5
+ private readonly defaultValueParser;
6
+ private readonly sqlTypeConverter;
7
+ protected logger: Logger;
8
+ constructor(connectionUri: string, logger?: Logger);
9
+ /**
10
+ * Fixes Sequelize behavior incorrectly implemented.
11
+ * Types indicate that showAllTables() should return a list of string, but it
12
+ * returns a list of object for both mariadb & mssql
13
+ * @see https://github.com/sequelize/sequelize/blob/main/src/dialects/mariadb/query.js#L295
14
+ */
15
+ getRealTableNames(): Promise<string[]>;
16
+ build(): Promise<void>;
17
+ private defineModels;
18
+ private defineRelations;
19
+ private hasTimestamps;
20
+ private removeTimeStampColumns;
21
+ private isParanoid;
22
+ private removeParanoidColumn;
23
+ private isJunctionTable;
24
+ private getUniqueFields;
4
25
  }
5
26
  //# sourceMappingURL=datasource.d.ts.map
@@ -1,11 +1,154 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  const sequelize_1 = require("sequelize");
4
7
  const datasource_sequelize_1 = require("@forestadmin/datasource-sequelize");
8
+ const default_value_parser_1 = __importDefault(require("./utils/default-value-parser"));
9
+ const sql_type_converter_1 = __importDefault(require("./utils/sql-type-converter"));
5
10
  class SqlDataSource extends datasource_sequelize_1.SequelizeDataSource {
6
- constructor(connectionUri) {
7
- super(new sequelize_1.Sequelize(connectionUri, { logging: false }));
11
+ constructor(connectionUri, logger) {
12
+ const logging = (sql) => logger?.('Debug', sql.substring(sql.indexOf(':') + 2));
13
+ super(new sequelize_1.Sequelize(connectionUri, { logging }));
14
+ this.logger = logger;
15
+ this.queryInterface = this.sequelize.getQueryInterface();
16
+ this.defaultValueParser = new default_value_parser_1.default(this.sequelize.getDialect());
17
+ this.sqlTypeConverter = new sql_type_converter_1.default(this.sequelize);
18
+ }
19
+ /**
20
+ * Fixes Sequelize behavior incorrectly implemented.
21
+ * Types indicate that showAllTables() should return a list of string, but it
22
+ * returns a list of object for both mariadb & mssql
23
+ * @see https://github.com/sequelize/sequelize/blob/main/src/dialects/mariadb/query.js#L295
24
+ */
25
+ async getRealTableNames() {
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ const tableNames = (await this.queryInterface.showAllTables());
28
+ return tableNames.map(tableName => tableName?.tableName || tableName);
29
+ }
30
+ async build() {
31
+ const tableNames = await this.getRealTableNames();
32
+ await this.defineModels(tableNames);
33
+ await this.defineRelations(tableNames);
34
+ this.createCollections(this.sequelize.models, this.logger);
35
+ }
36
+ async defineModels(tableNames) {
37
+ return Promise.all(tableNames.map(async (tableName) => {
38
+ const colmumnDescriptions = await this.queryInterface.describeTable(tableName);
39
+ const fieldDescriptions = await Promise.all(Object.entries(colmumnDescriptions).map(async ([columnName, colmumnDescription]) => {
40
+ try {
41
+ const type = await this.sqlTypeConverter.convert(tableName, columnName, colmumnDescription);
42
+ let defaultValue = this.defaultValueParser.parse(colmumnDescription.defaultValue, type);
43
+ if (colmumnDescription.primaryKey && defaultValue) {
44
+ defaultValue = null;
45
+ colmumnDescription.autoIncrement = true;
46
+ }
47
+ return [columnName, { ...colmumnDescription, type, defaultValue }];
48
+ }
49
+ catch (e) {
50
+ this.logger?.('Warn', `Skipping column ${tableName}.${columnName} (${e.message})`);
51
+ }
52
+ }));
53
+ let modelDefinition = Object.fromEntries(fieldDescriptions.filter(Boolean));
54
+ const columnNames = Object.keys(modelDefinition);
55
+ const hasTimestamps = this.hasTimestamps(columnNames);
56
+ const isParanoid = this.isParanoid(columnNames);
57
+ if (hasTimestamps) {
58
+ modelDefinition = this.removeTimeStampColumns(modelDefinition);
59
+ }
60
+ if (isParanoid) {
61
+ modelDefinition = this.removeParanoidColumn(modelDefinition);
62
+ }
63
+ this.sequelize.define(tableName, modelDefinition, {
64
+ tableName,
65
+ timestamps: hasTimestamps,
66
+ paranoid: isParanoid,
67
+ });
68
+ }));
69
+ }
70
+ async defineRelations(tableNames) {
71
+ return Promise.all(tableNames.map(async (tableName) => {
72
+ const foreignReferences = await this.queryInterface.getForeignKeyReferencesForTable(tableName);
73
+ const currentModel = this.sequelize.model(tableName);
74
+ if (this.isJunctionTable(currentModel.getAttributes())) {
75
+ const { referencedTableName: tableA, columnName: columnA, referencedColumnName: referencedColumnA, } = foreignReferences[0];
76
+ const { referencedTableName: tableB, columnName: columnB, referencedColumnName: referencedColumnB, } = foreignReferences[1];
77
+ const modelA = this.sequelize.model(tableA);
78
+ const modelB = this.sequelize.model(tableB);
79
+ modelA.belongsToMany(modelB, {
80
+ through: currentModel.name,
81
+ foreignKey: columnA,
82
+ otherKey: columnB,
83
+ });
84
+ modelB.belongsToMany(modelA, {
85
+ through: currentModel.name,
86
+ foreignKey: columnB,
87
+ otherKey: columnA,
88
+ });
89
+ currentModel.belongsTo(modelA, { foreignKey: columnA, targetKey: referencedColumnA });
90
+ currentModel.belongsTo(modelB, { foreignKey: columnB, targetKey: referencedColumnB });
91
+ }
92
+ else {
93
+ const uniqueFields = await this.getUniqueFields(tableName);
94
+ foreignReferences.forEach(foreignReference => {
95
+ const { columnName, referencedTableName, referencedColumnName } = foreignReference;
96
+ const referencedModel = this.sequelize.model(referencedTableName);
97
+ currentModel.belongsTo(referencedModel, {
98
+ foreignKey: columnName,
99
+ targetKey: referencedColumnName,
100
+ });
101
+ if (uniqueFields.includes(columnName)) {
102
+ referencedModel.hasOne(currentModel, {
103
+ foreignKey: columnName,
104
+ sourceKey: referencedColumnName,
105
+ });
106
+ }
107
+ else {
108
+ referencedModel.hasMany(currentModel, {
109
+ foreignKey: columnName,
110
+ sourceKey: referencedColumnName,
111
+ });
112
+ }
113
+ });
114
+ }
115
+ }));
116
+ }
117
+ hasTimestamps(columnNames) {
118
+ const hasCreatedAt = columnNames.includes('createdAt');
119
+ const hasUpdatedAt = columnNames.includes('updatedAt');
120
+ return hasCreatedAt && hasUpdatedAt;
121
+ }
122
+ removeTimeStampColumns(modelDefinition) {
123
+ const copy = { ...modelDefinition };
124
+ delete copy.createdAt;
125
+ delete copy.updatedAt;
126
+ return copy;
127
+ }
128
+ isParanoid(columnNames) {
129
+ return columnNames.includes('deletedAt');
130
+ }
131
+ removeParanoidColumn(modelDefinition) {
132
+ const copy = { ...modelDefinition };
133
+ delete copy.deletedAt;
134
+ return copy;
135
+ }
136
+ isJunctionTable(modelAttributes) {
137
+ // remove autogenerated field to keep the belongsToMany behavior
138
+ const modelAttributesDefinition = Object.values(modelAttributes).filter(({ _autoGenerated }) => !_autoGenerated);
139
+ if (modelAttributesDefinition.length !== 2)
140
+ return false;
141
+ if (modelAttributesDefinition.some(({ primaryKey }) => !primaryKey))
142
+ return false;
143
+ return true;
144
+ }
145
+ async getUniqueFields(tableName) {
146
+ const tableIndex = await this.queryInterface.showIndex(tableName);
147
+ return tableIndex
148
+ .filter(({ primary, unique, fields }) => !primary && unique && fields.length === 1)
149
+ .map(({ fields }) => fields.map(({ attribute }) => attribute))
150
+ .flat();
8
151
  }
9
152
  }
10
153
  exports.default = SqlDataSource;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUNBQXNDO0FBRXRDLDRFQUF3RTtBQUV4RSxNQUFxQixhQUFjLFNBQVEsMENBQW1CO0lBQzVELFlBQVksYUFBcUI7UUFDL0IsS0FBSyxDQUFDLElBQUkscUJBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRjtBQUpELGdDQUlDIn0=
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBTW1CO0FBR25CLDRFQUF3RTtBQUV4RSx3RkFBOEQ7QUFDOUQsb0ZBQTBEO0FBRTFELE1BQXFCLGFBQWMsU0FBUSwwQ0FBbUI7SUFNNUQsWUFBWSxhQUFxQixFQUFFLE1BQWU7UUFDaEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RixLQUFLLENBQUMsSUFBSSxxQkFBUyxDQUFDLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSw4QkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBYSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksNEJBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsOERBQThEO1FBQzlELE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFlLENBQUM7UUFFN0UsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsSUFBSSxTQUFT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
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import SqlDataSource from './datasource';
2
- export default SqlDataSource;
1
+ import { DataSourceFactory } from '@forestadmin/datasource-toolkit';
2
+ export declare function createSqlDataSource(connectionUri: string): DataSourceFactory;
3
3
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -3,6 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSqlDataSource = void 0;
6
7
  const datasource_1 = __importDefault(require("./datasource"));
7
- exports.default = datasource_1.default;
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4REFBeUM7QUFFekMsa0JBQWUsb0JBQWEsQ0FBQyJ9
8
+ // eslint-disable-next-line import/prefer-default-export
9
+ function createSqlDataSource(connectionUri) {
10
+ if (!/.*:\/\//g.test(connectionUri))
11
+ throw new Error(`Connection Uri "${connectionUri}" provided to Sql data source is not valid.` +
12
+ ' Should be <dialect>://<connection>.');
13
+ return async (logger) => {
14
+ const datasource = new datasource_1.default(connectionUri, logger);
15
+ await datasource.build();
16
+ return datasource;
17
+ };
18
+ }
19
+ exports.createSqlDataSource = createSqlDataSource;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsOERBQXlDO0FBRXpDLHdEQUF3RDtBQUN4RCxTQUFnQixtQkFBbUIsQ0FBQyxhQUFxQjtJQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYixtQkFBbUIsYUFBYSw2Q0FBNkM7WUFDM0Usc0NBQXNDLENBQ3pDLENBQUM7SUFFSixPQUFPLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLG9CQUFhLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFiRCxrREFhQyJ9
@@ -0,0 +1,12 @@
1
+ import { Sequelize } from 'sequelize';
2
+ export default class ArrayTypeGetter {
3
+ private readonly sequelize;
4
+ private readonly fromArray;
5
+ private readonly query;
6
+ constructor(sequelize: Sequelize);
7
+ getType(tableName: string, columnName: string): Promise<{
8
+ type: string;
9
+ special: string[];
10
+ }>;
11
+ }
12
+ //# sourceMappingURL=array-type-getter.d.ts.map
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sequelize_1 = require("sequelize");
4
+ class ArrayTypeGetter {
5
+ constructor(sequelize) {
6
+ this.query = `
7
+ SELECT
8
+ (
9
+ CASE
10
+ WHEN e.udt_name = 'hstore' THEN e.udt_name
11
+ ELSE e.data_type
12
+ END
13
+ ) || (
14
+ CASE
15
+ WHEN e.character_maximum_length IS NOT NULL THEN '(' || e.character_maximum_length || ')'
16
+ ELSE ''
17
+ END
18
+ ) as "type",
19
+ (
20
+ SELECT
21
+ array_agg(en.enumlabel)
22
+ FROM
23
+ pg_catalog.pg_type t
24
+ JOIN pg_catalog.pg_enum en ON t.oid = en.enumtypid
25
+ WHERE
26
+ t.typname = e.udt_name
27
+ ) AS "special"
28
+ FROM
29
+ INFORMATION_SCHEMA.columns c
30
+ LEFT JOIN INFORMATION_SCHEMA.element_types e ON (
31
+ (
32
+ c.table_catalog,
33
+ c.table_schema,
34
+ c.table_name,
35
+ 'TABLE',
36
+ c.dtd_identifier
37
+ ) = (
38
+ e.object_catalog,
39
+ e.object_schema,
40
+ e.object_name,
41
+ e.object_type,
42
+ e.collection_type_identifier
43
+ )
44
+ )
45
+ WHERE
46
+ table_name = :tableName
47
+ AND c.column_name = :columnName
48
+ ;
49
+ `;
50
+ this.sequelize = sequelize;
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ this.fromArray = this.sequelize.getQueryInterface().queryGenerator.fromArray;
53
+ }
54
+ async getType(tableName, columnName) {
55
+ const replacements = { tableName, columnName };
56
+ const [{ type, special }] = await this.sequelize.query(this.query, {
57
+ replacements,
58
+ type: sequelize_1.QueryTypes.SELECT,
59
+ });
60
+ return {
61
+ type: type.toUpperCase(),
62
+ special: special ? this.fromArray(special) : [],
63
+ };
64
+ }
65
+ }
66
+ exports.default = ArrayTypeGetter;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktdHlwZS1nZXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXJyYXktdHlwZS1nZXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBa0Q7QUFFbEQsTUFBcUIsZUFBZTtJQWdEbEMsWUFBWSxTQUFvQjtRQTdDZixVQUFLLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ3hCLENBQUM7UUFHQSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsY0FBc0IsQ0FBQyxTQUFTLENBQUM7SUFDeEYsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsU0FBaUIsRUFDakIsVUFBa0I7UUFFbEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFL0MsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2pFLFlBQVk7WUFDWixJQUFJLEVBQUUsc0JBQVUsQ0FBQyxNQUFNO1NBQ3hCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN4QixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2hELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF0RUQsa0NBc0VDIn0=
@@ -0,0 +1,11 @@
1
+ import { AbstractDataType, AbstractDataTypeConstructor, Dialect } from 'sequelize';
2
+ export default class DefaultValueParser {
3
+ private readonly dialect;
4
+ constructor(dialect: Dialect);
5
+ parse(expression: any, type: AbstractDataType | AbstractDataTypeConstructor): unknown;
6
+ private parseGeneric;
7
+ private sanitizeExpression;
8
+ private literalUnlessMatch;
9
+ private parseNumber;
10
+ }
11
+ //# sourceMappingURL=default-value-parser.d.ts.map
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sequelize_1 = require("sequelize");
4
+ class DefaultValueParser {
5
+ constructor(dialect) {
6
+ this.dialect = dialect;
7
+ }
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ parse(expression, type) {
10
+ if (expression === null || expression === undefined)
11
+ return undefined;
12
+ if (typeof expression === 'string' && expression.startsWith('NULL'))
13
+ return null;
14
+ // FA backend not handle correctly
15
+ if (type.key === sequelize_1.DataTypes.ARRAY.key) {
16
+ return undefined;
17
+ }
18
+ try {
19
+ const result = this.parseGeneric(expression, type);
20
+ return result !== undefined ? result : (0, sequelize_1.literal)(expression);
21
+ }
22
+ catch (e) {
23
+ return (0, sequelize_1.literal)(expression);
24
+ }
25
+ }
26
+ parseGeneric(
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ expression, type) {
29
+ let sanitizedExpression = expression;
30
+ // sanitize string
31
+ if (typeof expression === 'string') {
32
+ sanitizedExpression = this.sanitizeExpression(expression);
33
+ }
34
+ if (type.key === sequelize_1.DataTypes.ENUM.key) {
35
+ return sanitizedExpression;
36
+ }
37
+ switch (type) {
38
+ case sequelize_1.DataTypes.BOOLEAN:
39
+ return [true, 'true', 'TRUE', "b'1'", '1'].includes(sanitizedExpression);
40
+ case sequelize_1.DataTypes.NUMBER:
41
+ case sequelize_1.DataTypes.BIGINT:
42
+ case sequelize_1.DataTypes.FLOAT:
43
+ case sequelize_1.DataTypes.DOUBLE:
44
+ return this.parseNumber(sanitizedExpression);
45
+ case sequelize_1.DataTypes.DATE:
46
+ case sequelize_1.DataTypes.DATEONLY:
47
+ return this.literalUnlessMatch(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})|(\d{4}-\d{2}-\d{2})|(\d{2}:\d{2}:\d{2})$/, sanitizedExpression);
48
+ case sequelize_1.DataTypes.STRING:
49
+ return sanitizedExpression;
50
+ case sequelize_1.DataTypes.JSON:
51
+ case sequelize_1.DataTypes.JSONB:
52
+ return JSON.parse(sanitizedExpression);
53
+ default:
54
+ return undefined;
55
+ }
56
+ }
57
+ sanitizeExpression(expression) {
58
+ let sanitizedExpression = expression;
59
+ if (/^'.*'$/.test(sanitizedExpression)) {
60
+ sanitizedExpression = expression.substring(1, expression.length - 1);
61
+ }
62
+ if (this.dialect === 'mssql') {
63
+ // Sequelize send default values with weird char at the beginning (`(Ndefault value`)
64
+ sanitizedExpression = sanitizedExpression.replace(/\(N/, '');
65
+ while (/^\(.*\)$/.test(sanitizedExpression)) {
66
+ sanitizedExpression = sanitizedExpression.substring(1, sanitizedExpression.length - 1);
67
+ }
68
+ }
69
+ return sanitizedExpression;
70
+ }
71
+ literalUnlessMatch(regexp, expression) {
72
+ return regexp.test(expression) ? expression : (0, sequelize_1.literal)(expression);
73
+ }
74
+ parseNumber(expression) {
75
+ const result = Number.parseFloat(expression);
76
+ return Number.isNaN(result) ? (0, sequelize_1.literal)(expression) : result;
77
+ }
78
+ }
79
+ exports.default = DefaultValueParser;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC12YWx1ZS1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZGVmYXVsdC12YWx1ZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FNbUI7QUFFbkIsTUFBcUIsa0JBQWtCO0lBR3JDLFlBQVksT0FBZ0I7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxLQUFLLENBQUMsVUFBZSxFQUFFLElBQW9EO1FBQ3pFLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRXRFLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFakYsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDcEMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxJQUFJO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFbkQsT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUEsbUJBQU8sRUFBQyxVQUFVLENBQUMsQ0FBQztTQUM1RDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxJQUFBLG1CQUFPLEVBQUMsVUFBVSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sWUFBWTtJQUNsQiw4REFBOEQ7SUFDOUQsVUFBZSxFQUNmLElBQW9EO1FBRXBELElBQUksbUJBQW1CLEdBQUcsVUFBVSxDQUFDO1FBRXJDLGtCQUFrQjtRQUNsQixJQUFJLE9BQU8sVUFBVSxLQUFL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
@@ -0,0 +1,14 @@
1
+ import { AbstractDataType, AbstractDataTypeConstructor, ColumnDescription, Sequelize } from 'sequelize';
2
+ export default class SqlTypeConverter {
3
+ private readonly enumRegex;
4
+ private readonly arrayTypeGetter;
5
+ constructor(sequelize: Sequelize);
6
+ private typeMatch;
7
+ private typeStartsWith;
8
+ private typeContains;
9
+ private convertToEnum;
10
+ private getTypeForUserDefined;
11
+ private getTypeForArray;
12
+ convert(tableName: string, columnName: string, columnInfo: ColumnDescription): Promise<AbstractDataType | AbstractDataTypeConstructor>;
13
+ }
14
+ //# sourceMappingURL=sql-type-converter.d.ts.map
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const sequelize_1 = require("sequelize");
7
+ const array_type_getter_1 = __importDefault(require("./array-type-getter"));
8
+ class SqlTypeConverter {
9
+ constructor(sequelize) {
10
+ this.enumRegex = /ENUM\((.*)\)/i;
11
+ this.arrayTypeGetter = new array_type_getter_1.default(sequelize);
12
+ }
13
+ typeMatch(type, value) {
14
+ return (type.match(value) || {}).input;
15
+ }
16
+ typeStartsWith(type, value) {
17
+ return this.typeMatch(type, new RegExp(`^${value}.*`, 'i'));
18
+ }
19
+ typeContains(type, value) {
20
+ return this.typeMatch(type, new RegExp(`${value}.*`, 'i'));
21
+ }
22
+ convertToEnum(type) {
23
+ const enumOptions = this.enumRegex.exec(type)?.[1];
24
+ return sequelize_1.DataTypes.ENUM(...enumOptions.replace(/'/g, '').split(','));
25
+ }
26
+ getTypeForUserDefined(columnInfo) {
27
+ const { special } = columnInfo;
28
+ if (special && special.length > 0) {
29
+ return sequelize_1.DataTypes.ENUM(...special);
30
+ }
31
+ // User-defined enum with no values will default to string
32
+ return sequelize_1.DataTypes.STRING;
33
+ }
34
+ async getTypeForArray(tableName, columnName) {
35
+ const { type, special } = await this.arrayTypeGetter.getType(tableName, columnName);
36
+ const arrayType = await this.convert(tableName, columnName, {
37
+ type,
38
+ special,
39
+ });
40
+ return sequelize_1.DataTypes.ARRAY(arrayType);
41
+ }
42
+ async convert(tableName, columnName, columnInfo) {
43
+ const { type } = columnInfo;
44
+ switch (type) {
45
+ case 'JSON':
46
+ return sequelize_1.DataTypes.JSON;
47
+ case 'TINYINT(1)': // MYSQL bool
48
+ case 'BIT': // NOTICE: MSSQL type.
49
+ case 'BOOLEAN':
50
+ return sequelize_1.DataTypes.BOOLEAN;
51
+ case 'CHARACTER VARYING':
52
+ case 'TEXT':
53
+ case 'NTEXT': // MSSQL type
54
+ case this.typeContains(type, 'TEXT'):
55
+ case this.typeContains(type, 'VARCHAR'):
56
+ case this.typeContains(type, 'CHAR'):
57
+ case 'NVARCHAR': // NOTICE: MSSQL type.
58
+ return sequelize_1.DataTypes.STRING;
59
+ case 'USER-DEFINED':
60
+ return this.getTypeForUserDefined(columnInfo);
61
+ case this.typeMatch(type, this.enumRegex):
62
+ return this.convertToEnum(type);
63
+ case 'UNIQUEIDENTIFIER':
64
+ case 'UUID':
65
+ return sequelize_1.DataTypes.UUID;
66
+ case 'JSONB':
67
+ return sequelize_1.DataTypes.JSONB;
68
+ case 'INTEGER':
69
+ case 'SERIAL':
70
+ case 'BIGSERIAL':
71
+ case this.typeStartsWith(type, 'INT'):
72
+ case this.typeStartsWith(type, 'SMALLINT'):
73
+ case this.typeStartsWith(type, 'TINYINT'):
74
+ case this.typeStartsWith(type, 'MEDIUMINT'):
75
+ return sequelize_1.DataTypes.NUMBER;
76
+ case this.typeStartsWith(type, 'BIGINT'):
77
+ return sequelize_1.DataTypes.BIGINT;
78
+ case this.typeContains(type, 'FLOAT'):
79
+ return sequelize_1.DataTypes.FLOAT;
80
+ case 'NUMERIC':
81
+ case 'REAL':
82
+ case 'DOUBLE':
83
+ case 'DOUBLE PRECISION':
84
+ case this.typeContains(type, 'DECIMAL'):
85
+ return sequelize_1.DataTypes.DOUBLE;
86
+ case 'DATE':
87
+ return sequelize_1.DataTypes.DATEONLY;
88
+ case this.typeStartsWith(type, 'DATETIME'):
89
+ case this.typeStartsWith(type, 'TIMESTAMP'):
90
+ return sequelize_1.DataTypes.DATE;
91
+ case 'TIME':
92
+ case 'TIME WITHOUT TIME ZONE':
93
+ return sequelize_1.DataTypes.TIME;
94
+ case 'ARRAY':
95
+ return this.getTypeForArray(tableName, columnName);
96
+ case 'INET':
97
+ return sequelize_1.DataTypes.INET;
98
+ default:
99
+ throw new Error(`Unsupported type: ${type}`);
100
+ }
101
+ }
102
+ }
103
+ exports.default = SqlTypeConverter;
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXR5cGUtY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NxbC10eXBlLWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlDQU9tQjtBQUVuQiw0RUFBa0Q7QUFFbEQsTUFBcUIsZ0JBQWdCO0lBSW5DLFlBQVksU0FBb0I7UUFIZixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBSTNDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSwyQkFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQXNCO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxZQUFZLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFZO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsT0FBTyxxQkFBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/datasource-sql",
3
- "version": "1.0.0-beta.4",
3
+ "version": "1.0.0-beta.42",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -12,9 +12,9 @@
12
12
  "directory": "packages/datasource-sql"
13
13
  },
14
14
  "dependencies": {
15
- "@forestadmin/datasource-sequelize": "1.0.0-beta.3",
16
- "@forestadmin/datasource-toolkit": "1.0.0-beta.3",
17
- "sequelize": "6.18.0"
15
+ "@forestadmin/datasource-sequelize": "1.0.0-beta.36",
16
+ "@forestadmin/datasource-toolkit": "1.0.0-beta.27",
17
+ "sequelize": "6.21.3"
18
18
  },
19
19
  "files": [
20
20
  "dist/**/*.js",
@@ -28,7 +28,6 @@
28
28
  "test": "jest"
29
29
  },
30
30
  "devDependencies": {
31
- "lodash": "^4.17.21",
32
- "sequelize": "6.18.0"
31
+ "lodash": "^4.17.21"
33
32
  }
34
33
  }