@strapi/database 4.12.7 → 4.13.0-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 (112) hide show
  1. package/dist/connection.d.ts +2 -0
  2. package/dist/connection.js +57 -0
  3. package/dist/connection.js.map +1 -0
  4. package/dist/dialects/dialect.d.ts +21 -0
  5. package/dist/dialects/dialect.js +49 -0
  6. package/dist/dialects/dialect.js.map +1 -0
  7. package/dist/dialects/index.d.ts +4 -0
  8. package/dist/dialects/index.js +49 -0
  9. package/dist/dialects/index.js.map +1 -0
  10. package/dist/dialects/mysql/constants.d.ts +2 -0
  11. package/dist/dialects/mysql/constants.js +6 -0
  12. package/dist/dialects/mysql/constants.js.map +1 -0
  13. package/dist/dialects/mysql/database-inspector.d.ts +11 -0
  14. package/dist/dialects/mysql/database-inspector.js +34 -0
  15. package/dist/dialects/mysql/database-inspector.js.map +1 -0
  16. package/dist/dialects/mysql/index.d.ts +19 -0
  17. package/dist/dialects/mysql/index.js +80 -0
  18. package/dist/dialects/mysql/index.js.map +1 -0
  19. package/dist/dialects/mysql/schema-inspector.d.ts +11 -0
  20. package/dist/dialects/mysql/schema-inspector.js +206 -0
  21. package/dist/dialects/mysql/schema-inspector.js.map +1 -0
  22. package/dist/dialects/postgresql/index.d.ts +13 -0
  23. package/dist/dialects/postgresql/index.js +72 -0
  24. package/dist/dialects/postgresql/index.js.map +1 -0
  25. package/dist/dialects/postgresql/schema-inspector.d.ts +12 -0
  26. package/dist/dialects/postgresql/schema-inspector.js +236 -0
  27. package/dist/dialects/postgresql/schema-inspector.js.map +1 -0
  28. package/dist/dialects/sqlite/index.d.ts +18 -0
  29. package/dist/dialects/sqlite/index.js +95 -0
  30. package/dist/dialects/sqlite/index.js.map +1 -0
  31. package/dist/dialects/sqlite/schema-inspector.d.ts +11 -0
  32. package/dist/dialects/sqlite/schema-inspector.js +133 -0
  33. package/dist/dialects/sqlite/schema-inspector.js.map +1 -0
  34. package/dist/dialects/types.d.ts +33 -0
  35. package/dist/dialects/types.js +3 -0
  36. package/dist/dialects/types.js.map +1 -0
  37. package/dist/errors/database.d.ts +4 -0
  38. package/dist/errors/database.js +12 -0
  39. package/dist/errors/database.js.map +1 -0
  40. package/dist/errors/index.d.ts +7 -0
  41. package/dist/errors/index.js +19 -0
  42. package/dist/errors/index.js.map +1 -0
  43. package/dist/errors/invalid-date.d.ts +4 -0
  44. package/dist/errors/invalid-date.js +14 -0
  45. package/dist/errors/invalid-date.js.map +1 -0
  46. package/dist/errors/invalid-datetime.d.ts +4 -0
  47. package/dist/errors/invalid-datetime.js +14 -0
  48. package/dist/errors/invalid-datetime.js.map +1 -0
  49. package/dist/errors/invalid-relation.d.ts +4 -0
  50. package/dist/errors/invalid-relation.js +14 -0
  51. package/dist/errors/invalid-relation.js.map +1 -0
  52. package/dist/errors/invalid-time.d.ts +4 -0
  53. package/dist/errors/invalid-time.js +14 -0
  54. package/dist/errors/invalid-time.js.map +1 -0
  55. package/dist/errors/not-null.d.ts +6 -0
  56. package/dist/errors/not-null.js +16 -0
  57. package/dist/errors/not-null.js.map +1 -0
  58. package/dist/index.d.ts +44 -0
  59. package/dist/index.js +135 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/lifecycles/index.d.ts +16 -0
  62. package/dist/lifecycles/index.js +86 -0
  63. package/dist/lifecycles/index.js.map +1 -0
  64. package/dist/lifecycles/subscribers/index.d.ts +4 -0
  65. package/dist/lifecycles/subscribers/index.js +12 -0
  66. package/dist/lifecycles/subscribers/index.js.map +1 -0
  67. package/dist/lifecycles/subscribers/models-lifecycles.d.ts +5 -0
  68. package/dist/lifecycles/subscribers/models-lifecycles.js +14 -0
  69. package/dist/lifecycles/subscribers/models-lifecycles.js.map +1 -0
  70. package/dist/lifecycles/subscribers/timestamps.d.ts +2 -0
  71. package/dist/lifecycles/subscribers/timestamps.js +50 -0
  72. package/dist/lifecycles/subscribers/timestamps.js.map +1 -0
  73. package/dist/lifecycles/types.d.ts +25 -0
  74. package/dist/lifecycles/types.js +3 -0
  75. package/dist/lifecycles/types.js.map +1 -0
  76. package/dist/metadata/index.d.ts +6 -0
  77. package/dist/metadata/index.js +236 -0
  78. package/dist/metadata/index.js.map +1 -0
  79. package/dist/metadata/relations.d.ts +20 -0
  80. package/dist/metadata/relations.js +529 -0
  81. package/dist/metadata/relations.js.map +1 -0
  82. package/dist/metadata/types.d.ts +44 -0
  83. package/dist/metadata/types.js +22 -0
  84. package/dist/metadata/types.js.map +1 -0
  85. package/dist/migrations/index.d.ts +11 -0
  86. package/dist/migrations/index.js +74 -0
  87. package/dist/migrations/index.js.map +1 -0
  88. package/dist/migrations/storage.d.ts +14 -0
  89. package/dist/migrations/storage.js +38 -0
  90. package/dist/migrations/storage.js.map +1 -0
  91. package/dist/transaction-context.d.ts +16 -0
  92. package/dist/transaction-context.js +56 -0
  93. package/dist/transaction-context.js.map +1 -0
  94. package/dist/types/index.d.ts +6 -0
  95. package/dist/types/index.js +38 -0
  96. package/dist/types/index.js.map +1 -0
  97. package/dist/utils/content-types.d.ts +17 -0
  98. package/dist/utils/content-types.js +39 -0
  99. package/dist/utils/content-types.js.map +1 -0
  100. package/dist/utils/knex.d.ts +8 -0
  101. package/dist/utils/knex.js +22 -0
  102. package/dist/utils/knex.js.map +1 -0
  103. package/dist/validations/index.d.ts +5 -0
  104. package/dist/validations/index.js +12 -0
  105. package/dist/validations/index.js.map +1 -0
  106. package/dist/validations/relations/bidirectional.d.ts +11 -0
  107. package/dist/validations/relations/bidirectional.js +75 -0
  108. package/dist/validations/relations/bidirectional.js.map +1 -0
  109. package/dist/validations/relations/index.d.ts +6 -0
  110. package/dist/validations/relations/index.js +13 -0
  111. package/dist/validations/relations/index.js.map +1 -0
  112. package/package.json +3 -3
@@ -0,0 +1,72 @@
1
+ "use strict";
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;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const errors = __importStar(require("../../errors"));
30
+ const dialect_1 = __importDefault(require("../dialect"));
31
+ const schema_inspector_1 = __importDefault(require("./schema-inspector"));
32
+ class PostgresDialect extends dialect_1.default {
33
+ constructor(db) {
34
+ super(db, 'postgres');
35
+ this.schemaInspector = new schema_inspector_1.default(db);
36
+ }
37
+ useReturning() {
38
+ return true;
39
+ }
40
+ async initialize() {
41
+ // Don't cast DATE string to Date()
42
+ this.db.connection.client.driver.types.setTypeParser(this.db.connection.client.driver.types.builtins.DATE, 'text', (v) => v);
43
+ this.db.connection.client.driver.types.setTypeParser(this.db.connection.client.driver.types.builtins.NUMERIC, 'text', parseFloat);
44
+ }
45
+ usesForeignKeys() {
46
+ return true;
47
+ }
48
+ getSqlType(type) {
49
+ switch (type) {
50
+ case 'timestamp': {
51
+ return 'datetime';
52
+ }
53
+ default: {
54
+ return type;
55
+ }
56
+ }
57
+ }
58
+ transformErrors(error) {
59
+ switch (error.code) {
60
+ case '23502': {
61
+ throw new errors.NotNullError({
62
+ column: 'column' in error ? `${error.column}` : undefined,
63
+ });
64
+ }
65
+ default: {
66
+ super.transformErrors(error);
67
+ }
68
+ }
69
+ }
70
+ }
71
+ exports.default = PostgresDialect;
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dialects/postgresql/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qDAAuC;AACvC,yDAAiC;AACjC,0EAA2D;AAE3D,MAAqB,eAAgB,SAAQ,iBAAO;IAGlD,YAAY,EAAY;QACtB,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAEtB,IAAI,CAAC,eAAe,GAAG,IAAI,0BAAyB,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU;QACd,mCAAmC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EACpD,MAAM,EACN,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACT,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EACvD,MAAM,EACN,UAAU,CACX,CAAC;IACJ,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,QAAQ,IAAI,EAAE;YACZ,KAAK,WAAW,CAAC,CAAC;gBAChB,OAAO,UAAU,CAAC;aACnB;YACD,OAAO,CAAC,CAAC;gBACP,OAAO,IAAI,CAAC;aACb;SACF;IACH,CAAC;IAED,eAAe,CAAC,KAA4B;QAC1C,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,OAAO,CAAC,CAAC;gBACZ,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;oBAC5B,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;iBAC1D,CAAC,CAAC;aACJ;YACD,OAAO,CAAC,CAAC;gBACP,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC9B;SACF;IACH,CAAC;CACF;AAtDD,kCAsDC"}
@@ -0,0 +1,12 @@
1
+ import { Database } from '../..';
2
+ import { Schema, Column, Index, ForeignKey } from '../types';
3
+ export default class PostgresqlSchemaInspector {
4
+ db: Database;
5
+ constructor(db: Database);
6
+ getSchema(): Promise<Schema>;
7
+ getDatabaseSchema(): string;
8
+ getTables(): Promise<string[]>;
9
+ getColumns(tableName: string): Promise<Column[]>;
10
+ getIndexes(tableName: string): Promise<Index[]>;
11
+ getForeignKeys(tableName: string): Promise<ForeignKey[]>;
12
+ }
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const SQL_QUERIES = {
4
+ TABLE_LIST: /* sql */ `
5
+ SELECT *
6
+ FROM information_schema.tables
7
+ WHERE
8
+ table_schema = ?
9
+ AND table_type = 'BASE TABLE'
10
+ AND table_name != 'geometry_columns'
11
+ AND table_name != 'spatial_ref_sys';
12
+ `,
13
+ LIST_COLUMNS: /* sql */ `
14
+ SELECT data_type, column_name, character_maximum_length, column_default, is_nullable
15
+ FROM information_schema.columns
16
+ WHERE table_schema = ? AND table_name = ?;
17
+ `,
18
+ INDEX_LIST: /* sql */ `
19
+ SELECT
20
+ ix.indexrelid,
21
+ i.relname as index_name,
22
+ a.attname as column_name,
23
+ ix.indisunique as is_unique,
24
+ ix.indisprimary as is_primary
25
+ FROM
26
+ pg_class t,
27
+ pg_namespace s,
28
+ pg_class i,
29
+ pg_index ix,
30
+ pg_attribute a
31
+ WHERE
32
+ t.oid = ix.indrelid
33
+ AND i.oid = ix.indexrelid
34
+ AND a.attrelid = t.oid
35
+ AND a.attnum = ANY(ix.indkey)
36
+ AND t.relkind = 'r'
37
+ AND t.relnamespace = s.oid
38
+ AND s.nspname = ?
39
+ AND t.relname = ?;
40
+ `,
41
+ FOREIGN_KEY_LIST: /* sql */ `
42
+ SELECT
43
+ tco."constraint_name" as constraint_name
44
+ FROM information_schema.table_constraints tco
45
+ WHERE
46
+ tco.constraint_type = 'FOREIGN KEY'
47
+ AND tco.constraint_schema = ?
48
+ AND tco.table_name = ?
49
+ `,
50
+ FOREIGN_KEY_REFERENCES: /* sql */ `
51
+ SELECT
52
+ kcu."constraint_name" as constraint_name,
53
+ kcu."column_name" as column_name
54
+
55
+ FROM information_schema.key_column_usage kcu
56
+ WHERE kcu.constraint_name=ANY(?)
57
+ AND kcu.table_schema = ?
58
+ AND kcu.table_name = ?;
59
+ `,
60
+ FOREIGN_KEY_REFERENCES_CONSTRAIN: /* sql */ `
61
+ SELECT
62
+ rco.update_rule as on_update,
63
+ rco.delete_rule as on_delete,
64
+ rco."unique_constraint_name" as unique_constraint_name
65
+ FROM information_schema.referential_constraints rco
66
+ WHERE rco.constraint_name=ANY(?)
67
+ AND rco.constraint_schema = ?
68
+ `,
69
+ FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE: /* sql */ `
70
+ SELECT
71
+ rel_kcu."table_name" as foreign_table,
72
+ rel_kcu."column_name" as fk_column_name
73
+ FROM information_schema.key_column_usage rel_kcu
74
+ WHERE rel_kcu.constraint_name=?
75
+ AND rel_kcu.table_schema = ?
76
+ `,
77
+ };
78
+ const toStrapiType = (column) => {
79
+ const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];
80
+ switch (rootType) {
81
+ case 'integer': {
82
+ // find a way to figure out the increments
83
+ return { type: 'integer' };
84
+ }
85
+ case 'text': {
86
+ return { type: 'text', args: ['longtext'] };
87
+ }
88
+ case 'boolean': {
89
+ return { type: 'boolean' };
90
+ }
91
+ case 'character': {
92
+ return { type: 'string', args: [column.character_maximum_length] };
93
+ }
94
+ case 'timestamp': {
95
+ return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };
96
+ }
97
+ case 'date': {
98
+ return { type: 'date' };
99
+ }
100
+ case 'time': {
101
+ return { type: 'time', args: [{ precision: 3 }] };
102
+ }
103
+ case 'numeric': {
104
+ return { type: 'decimal', args: [10, 2] };
105
+ }
106
+ case 'real':
107
+ case 'double': {
108
+ return { type: 'double' };
109
+ }
110
+ case 'bigint': {
111
+ return { type: 'bigInteger' };
112
+ }
113
+ case 'jsonb': {
114
+ return { type: 'jsonb' };
115
+ }
116
+ default: {
117
+ return { type: 'specificType', args: [column.data_type] };
118
+ }
119
+ }
120
+ };
121
+ const getIndexType = (index) => {
122
+ if (index.is_primary) {
123
+ return 'primary';
124
+ }
125
+ if (index.is_unique) {
126
+ return 'unique';
127
+ }
128
+ return null;
129
+ };
130
+ class PostgresqlSchemaInspector {
131
+ constructor(db) {
132
+ this.db = db;
133
+ }
134
+ async getSchema() {
135
+ const schema = { tables: [] };
136
+ const tables = await this.getTables();
137
+ schema.tables = await Promise.all(tables.map(async (tableName) => {
138
+ const columns = await this.getColumns(tableName);
139
+ const indexes = await this.getIndexes(tableName);
140
+ const foreignKeys = await this.getForeignKeys(tableName);
141
+ return {
142
+ name: tableName,
143
+ columns,
144
+ indexes,
145
+ foreignKeys,
146
+ };
147
+ }));
148
+ return schema;
149
+ }
150
+ getDatabaseSchema() {
151
+ return this.db.getSchemaName() || 'public';
152
+ }
153
+ async getTables() {
154
+ const { rows } = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST, [
155
+ this.getDatabaseSchema(),
156
+ ]);
157
+ return rows.map((row) => row.table_name);
158
+ }
159
+ async getColumns(tableName) {
160
+ const { rows } = await this.db.connection.raw(SQL_QUERIES.LIST_COLUMNS, [
161
+ this.getDatabaseSchema(),
162
+ tableName,
163
+ ]);
164
+ return rows.map((row) => {
165
+ const { type, args = [], ...rest } = toStrapiType(row);
166
+ const defaultTo = row.column_default && row.column_default.includes('nextval(') ? null : row.column_default;
167
+ return {
168
+ type,
169
+ args,
170
+ defaultTo,
171
+ name: row.column_name,
172
+ notNullable: row.is_nullable === 'NO',
173
+ unsigned: false,
174
+ ...rest,
175
+ };
176
+ });
177
+ }
178
+ async getIndexes(tableName) {
179
+ const { rows } = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
180
+ this.getDatabaseSchema(),
181
+ tableName,
182
+ ]);
183
+ const ret = {};
184
+ for (const index of rows) {
185
+ if (index.column_name === 'id') {
186
+ continue;
187
+ }
188
+ if (!ret[index.indexrelid]) {
189
+ ret[index.indexrelid] = {
190
+ columns: [index.column_name],
191
+ name: index.index_name,
192
+ type: getIndexType(index),
193
+ };
194
+ }
195
+ else {
196
+ ret[index.indexrelid].columns.push(index.column_name);
197
+ }
198
+ }
199
+ return Object.values(ret);
200
+ }
201
+ async getForeignKeys(tableName) {
202
+ const { rows } = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [this.getDatabaseSchema(), tableName]);
203
+ const ret = {};
204
+ for (const fk of rows) {
205
+ ret[fk.constraint_name] = {
206
+ name: fk.constraint_name,
207
+ columns: [],
208
+ referencedColumns: [],
209
+ referencedTable: null,
210
+ onUpdate: null,
211
+ onDelete: null,
212
+ };
213
+ }
214
+ const constraintNames = Object.keys(ret);
215
+ const dbSchema = this.getDatabaseSchema();
216
+ if (constraintNames.length > 0) {
217
+ const { rows: fkReferences } = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES, [[constraintNames], dbSchema, tableName]);
218
+ for (const fkReference of fkReferences) {
219
+ ret[fkReference.constraint_name].columns.push(fkReference.column_name);
220
+ const { rows: fkReferencesConstraint } = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN, [[fkReference.constraint_name], dbSchema]);
221
+ for (const fkReferenceC of fkReferencesConstraint) {
222
+ const { rows: fkReferencesConstraintReferece } = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE, [fkReferenceC.unique_constraint_name, dbSchema]);
223
+ for (const fkReferenceConst of fkReferencesConstraintReferece) {
224
+ ret[fkReference.constraint_name].referencedTable = fkReferenceConst.foreign_table;
225
+ ret[fkReference.constraint_name].referencedColumns.push(fkReferenceConst.fk_column_name);
226
+ }
227
+ ret[fkReference.constraint_name].onUpdate = fkReferenceC.on_update.toUpperCase();
228
+ ret[fkReference.constraint_name].onDelete = fkReferenceC.on_delete.toUpperCase();
229
+ }
230
+ }
231
+ }
232
+ return Object.values(ret);
233
+ }
234
+ }
235
+ exports.default = PostgresqlSchemaInspector;
236
+ //# sourceMappingURL=schema-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-inspector.js","sourceRoot":"","sources":["../../../src/dialects/postgresql/schema-inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ import Dialect from '../dialect';
3
+ import SqliteSchemaInspector from './schema-inspector';
4
+ import { Database } from '../..';
5
+ export default class SqliteDialect extends Dialect {
6
+ schemaInspector: SqliteSchemaInspector;
7
+ constructor(db: Database);
8
+ configure(): void;
9
+ useReturning(): boolean;
10
+ initialize(): Promise<void>;
11
+ canAlterConstraints(): boolean;
12
+ getSqlType(type: string): string;
13
+ supportsOperator(operator: string): boolean;
14
+ startSchemaUpdate(): Promise<void>;
15
+ endSchemaUpdate(): Promise<void>;
16
+ transformErrors(error: NodeJS.ErrnoException): void;
17
+ canAddIncrements(): boolean;
18
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
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;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const path_1 = __importDefault(require("path"));
30
+ const fs_extra_1 = __importDefault(require("fs-extra"));
31
+ const errors = __importStar(require("../../errors"));
32
+ const dialect_1 = __importDefault(require("../dialect"));
33
+ const schema_inspector_1 = __importDefault(require("./schema-inspector"));
34
+ const UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];
35
+ class SqliteDialect extends dialect_1.default {
36
+ constructor(db) {
37
+ super(db, 'sqlite');
38
+ this.schemaInspector = new schema_inspector_1.default(db);
39
+ }
40
+ configure() {
41
+ this.db.config.connection.connection.filename = path_1.default.resolve(this.db.config.connection.connection.filename);
42
+ const dbDir = path_1.default.dirname(this.db.config.connection.connection.filename);
43
+ fs_extra_1.default.ensureDirSync(dbDir);
44
+ }
45
+ useReturning() {
46
+ return true;
47
+ }
48
+ async initialize() {
49
+ await this.db.connection.raw('pragma foreign_keys = on');
50
+ }
51
+ canAlterConstraints() {
52
+ return false;
53
+ }
54
+ getSqlType(type) {
55
+ switch (type) {
56
+ case 'enum': {
57
+ return 'text';
58
+ }
59
+ case 'double':
60
+ case 'decimal': {
61
+ return 'float';
62
+ }
63
+ case 'timestamp': {
64
+ return 'datetime';
65
+ }
66
+ default: {
67
+ return type;
68
+ }
69
+ }
70
+ }
71
+ supportsOperator(operator) {
72
+ return !UNSUPPORTED_OPERATORS.includes(operator);
73
+ }
74
+ async startSchemaUpdate() {
75
+ await this.db.connection.raw(`pragma foreign_keys = off`);
76
+ }
77
+ async endSchemaUpdate() {
78
+ await this.db.connection.raw(`pragma foreign_keys = on`);
79
+ }
80
+ transformErrors(error) {
81
+ switch (error.errno) {
82
+ case 19: {
83
+ throw new errors.NotNullError(); // TODO: extract column name
84
+ }
85
+ default: {
86
+ super.transformErrors(error);
87
+ }
88
+ }
89
+ }
90
+ canAddIncrements() {
91
+ return false;
92
+ }
93
+ }
94
+ exports.default = SqliteDialect;
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dialects/sqlite/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,wDAA2B;AAE3B,qDAAuC;AACvC,yDAAiC;AACjC,0EAAuD;AAGvD,MAAM,qBAAqB,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAElD,MAAqB,aAAc,SAAQ,iBAAO;IAGhD,YAAY,EAAY;QACtB,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEpB,IAAI,CAAC,eAAe,GAAG,IAAI,0BAAqB,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,SAAS;QACP,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,GAAG,cAAI,CAAC,OAAO,CAC1D,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAC9C,CAAC;QAEF,MAAM,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE1E,kBAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC3D,CAAC;IAED,mBAAmB;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,QAAQ,IAAI,EAAE;YACZ,KAAK,MAAM,CAAC,CAAC;gBACX,OAAO,MAAM,CAAC;aACf;YACD,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC,CAAC;gBACd,OAAO,OAAO,CAAC;aAChB;YACD,KAAK,WAAW,CAAC,CAAC;gBAChB,OAAO,UAAU,CAAC;aACnB;YACD,OAAO,CAAC,CAAC;gBACP,OAAO,IAAI,CAAC;aACb;SACF;IACH,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAC/B,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC3D,CAAC;IAED,eAAe,CAAC,KAA4B;QAC1C,QAAQ,KAAK,CAAC,KAAK,EAAE;YACnB,KAAK,EAAE,CAAC,CAAC;gBACP,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,4BAA4B;aAC9D;YACD,OAAO,CAAC,CAAC;gBACP,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC9B;SACF;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA3ED,gCA2EC"}
@@ -0,0 +1,11 @@
1
+ import { Database } from '../..';
2
+ import { Schema, Column, Index, ForeignKey } from '../types';
3
+ export default class SqliteSchemaInspector {
4
+ db: Database;
5
+ constructor(db: Database);
6
+ getSchema(): Promise<Schema>;
7
+ getTables(): Promise<string[]>;
8
+ getColumns(tableName: string): Promise<Column[]>;
9
+ getIndexes(tableName: string): Promise<Index[]>;
10
+ getForeignKeys(tableName: string): Promise<ForeignKey[]>;
11
+ }
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const SQL_QUERIES = {
4
+ TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,
5
+ TABLE_INFO: `pragma table_info(??)`,
6
+ INDEX_LIST: 'pragma index_list(??)',
7
+ INDEX_INFO: 'pragma index_info(??)',
8
+ FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',
9
+ };
10
+ const toStrapiType = (column) => {
11
+ const { type } = column;
12
+ const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];
13
+ switch (rootType) {
14
+ case 'integer': {
15
+ if (column.pk) {
16
+ return { type: 'increments', args: [{ primary: true, primaryKey: true }] };
17
+ }
18
+ return { type: 'integer' };
19
+ }
20
+ case 'float': {
21
+ return { type: 'float', args: [10, 2] };
22
+ }
23
+ case 'bigint': {
24
+ return { type: 'bigInteger' };
25
+ }
26
+ case 'varchar': {
27
+ const length = type.slice(8, type.length - 1);
28
+ return { type: 'string', args: [Number(length)] };
29
+ }
30
+ case 'text': {
31
+ return { type: 'text', args: ['longtext'] };
32
+ }
33
+ case 'json': {
34
+ return { type: 'jsonb' };
35
+ }
36
+ case 'boolean': {
37
+ return { type: 'boolean' };
38
+ }
39
+ case 'datetime': {
40
+ return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };
41
+ }
42
+ case 'date': {
43
+ return { type: 'date' };
44
+ }
45
+ case 'time': {
46
+ return { type: 'time', args: [{ precision: 3 }] };
47
+ }
48
+ default: {
49
+ return { type: 'specificType', args: [column.data_type] };
50
+ }
51
+ }
52
+ };
53
+ class SqliteSchemaInspector {
54
+ constructor(db) {
55
+ this.db = db;
56
+ }
57
+ async getSchema() {
58
+ const schema = { tables: [] };
59
+ const tables = await this.getTables();
60
+ for (const tableName of tables) {
61
+ const columns = await this.getColumns(tableName);
62
+ const indexes = await this.getIndexes(tableName);
63
+ const foreignKeys = await this.getForeignKeys(tableName);
64
+ schema.tables.push({
65
+ name: tableName,
66
+ columns,
67
+ indexes,
68
+ foreignKeys,
69
+ });
70
+ }
71
+ return schema;
72
+ }
73
+ async getTables() {
74
+ const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
75
+ return rows.map((row) => row.name);
76
+ }
77
+ async getColumns(tableName) {
78
+ const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_INFO, [tableName]);
79
+ return rows.map((row) => {
80
+ const { type, args = [], ...rest } = toStrapiType(row);
81
+ return {
82
+ type,
83
+ args,
84
+ name: row.name,
85
+ defaultTo: row.dflt_value,
86
+ notNullable: row.notnull !== null ? Boolean(row.notnull) : null,
87
+ unsigned: false,
88
+ ...rest,
89
+ };
90
+ });
91
+ }
92
+ async getIndexes(tableName) {
93
+ const indexes = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [tableName]);
94
+ const ret = [];
95
+ for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {
96
+ const res = await this.db.connection.raw(SQL_QUERIES.INDEX_INFO, [
97
+ index.name,
98
+ ]);
99
+ const type = index.unique ? 'unique' : null;
100
+ ret.push({
101
+ columns: res.map((row) => row.name),
102
+ name: index.name,
103
+ type,
104
+ });
105
+ }
106
+ return ret;
107
+ }
108
+ async getForeignKeys(tableName) {
109
+ const fks = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
110
+ tableName,
111
+ ]);
112
+ const ret = {};
113
+ for (const fk of fks) {
114
+ if (!ret[fk.id]) {
115
+ ret[fk.id] = {
116
+ // TODO: name, // find name
117
+ columns: [fk.from],
118
+ referencedColumns: [fk.to],
119
+ referencedTable: fk.table,
120
+ onUpdate: fk.on_update.toUpperCase(),
121
+ onDelete: fk.on_delete.toUpperCase(),
122
+ };
123
+ }
124
+ else {
125
+ ret[fk.id].columns.push(fk.from);
126
+ ret[fk.id].referencedColumns.push(fk.to);
127
+ }
128
+ }
129
+ return Object.values(ret);
130
+ }
131
+ }
132
+ exports.default = SqliteSchemaInspector;
133
+ //# sourceMappingURL=schema-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-inspector.js","sourceRoot":"","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface Schema {
2
+ tables: Table[];
3
+ }
4
+ export interface Table {
5
+ name: string;
6
+ columns: Column[];
7
+ indexes: Index[];
8
+ foreignKeys: ForeignKey[];
9
+ }
10
+ export interface Column {
11
+ type: string;
12
+ name: string;
13
+ args?: unknown[];
14
+ defaultTo?: unknown;
15
+ notNullable: boolean | null;
16
+ unsigned?: boolean;
17
+ unique?: boolean;
18
+ primary?: boolean;
19
+ }
20
+ export type IndexType = 'primary' | 'unique' | null;
21
+ export interface Index {
22
+ columns: string[];
23
+ name: string;
24
+ type: IndexType;
25
+ }
26
+ export interface ForeignKey {
27
+ name?: string;
28
+ columns: string[];
29
+ referencedColumns: string[];
30
+ referencedTable: string | null;
31
+ onUpdate: string | null;
32
+ onDelete: string | null;
33
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dialects/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export default class DatabaseError extends Error {
2
+ details: unknown;
3
+ constructor(message?: string, details?: {});
4
+ }