@strapi/database 5.12.0 → 5.12.2
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/dist/connection.js +43 -0
- package/dist/connection.js.map +1 -0
- package/dist/connection.mjs +41 -0
- package/dist/connection.mjs.map +1 -0
- package/dist/dialects/dialect.js +54 -0
- package/dist/dialects/dialect.js.map +1 -0
- package/dist/dialects/dialect.mjs +52 -0
- package/dist/dialects/dialect.mjs.map +1 -0
- package/dist/dialects/index.js +44 -0
- package/dist/dialects/index.js.map +1 -0
- package/dist/dialects/index.mjs +42 -0
- package/dist/dialects/index.mjs.map +1 -0
- package/dist/dialects/mysql/constants.js +8 -0
- package/dist/dialects/mysql/constants.js.map +1 -0
- package/dist/dialects/mysql/constants.mjs +5 -0
- package/dist/dialects/mysql/constants.mjs.map +1 -0
- package/dist/dialects/mysql/database-inspector.js +35 -0
- package/dist/dialects/mysql/database-inspector.js.map +1 -0
- package/dist/dialects/mysql/database-inspector.mjs +33 -0
- package/dist/dialects/mysql/database-inspector.mjs.map +1 -0
- package/dist/dialects/mysql/index.js +75 -0
- package/dist/dialects/mysql/index.js.map +1 -0
- package/dist/dialects/mysql/index.mjs +73 -0
- package/dist/dialects/mysql/index.mjs.map +1 -0
- package/dist/dialects/mysql/schema-inspector.js +297 -0
- package/dist/dialects/mysql/schema-inspector.js.map +1 -0
- package/dist/dialects/mysql/schema-inspector.mjs +295 -0
- package/dist/dialects/mysql/schema-inspector.mjs.map +1 -0
- package/dist/dialects/postgresql/index.js +62 -0
- package/dist/dialects/postgresql/index.js.map +1 -0
- package/dist/dialects/postgresql/index.mjs +60 -0
- package/dist/dialects/postgresql/index.mjs.map +1 -0
- package/dist/dialects/postgresql/schema-inspector.js +316 -0
- package/dist/dialects/postgresql/schema-inspector.js.map +1 -0
- package/dist/dialects/postgresql/schema-inspector.mjs +314 -0
- package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -0
- package/dist/dialects/sqlite/index.js +82 -0
- package/dist/dialects/sqlite/index.js.map +1 -0
- package/dist/dialects/sqlite/index.mjs +80 -0
- package/dist/dialects/sqlite/index.mjs.map +1 -0
- package/dist/dialects/sqlite/schema-inspector.js +211 -0
- package/dist/dialects/sqlite/schema-inspector.js.map +1 -0
- package/dist/dialects/sqlite/schema-inspector.mjs +209 -0
- package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -0
- package/dist/entity-manager/entity-repository.js +139 -0
- package/dist/entity-manager/entity-repository.js.map +1 -0
- package/dist/entity-manager/entity-repository.mjs +137 -0
- package/dist/entity-manager/entity-repository.mjs.map +1 -0
- package/dist/entity-manager/index.js +1186 -0
- package/dist/entity-manager/index.js.map +1 -0
- package/dist/entity-manager/index.mjs +1184 -0
- package/dist/entity-manager/index.mjs.map +1 -0
- package/dist/entity-manager/morph-relations.js +73 -0
- package/dist/entity-manager/morph-relations.js.map +1 -0
- package/dist/entity-manager/morph-relations.mjs +69 -0
- package/dist/entity-manager/morph-relations.mjs.map +1 -0
- package/dist/entity-manager/regular-relations.js +247 -0
- package/dist/entity-manager/regular-relations.js.map +1 -0
- package/dist/entity-manager/regular-relations.mjs +242 -0
- package/dist/entity-manager/regular-relations.mjs.map +1 -0
- package/dist/entity-manager/relations-orderer.js +221 -0
- package/dist/entity-manager/relations-orderer.js.map +1 -0
- package/dist/entity-manager/relations-orderer.mjs +218 -0
- package/dist/entity-manager/relations-orderer.mjs.map +1 -0
- package/dist/errors/database.js +13 -0
- package/dist/errors/database.js.map +1 -0
- package/dist/errors/database.mjs +11 -0
- package/dist/errors/database.mjs.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/index.mjs +7 -0
- package/dist/errors/index.mjs.map +1 -0
- package/dist/errors/invalid-date.js +13 -0
- package/dist/errors/invalid-date.js.map +1 -0
- package/dist/errors/invalid-date.mjs +11 -0
- package/dist/errors/invalid-date.mjs.map +1 -0
- package/dist/errors/invalid-datetime.js +13 -0
- package/dist/errors/invalid-datetime.js.map +1 -0
- package/dist/errors/invalid-datetime.mjs +11 -0
- package/dist/errors/invalid-datetime.mjs.map +1 -0
- package/dist/errors/invalid-relation.js +13 -0
- package/dist/errors/invalid-relation.js.map +1 -0
- package/dist/errors/invalid-relation.mjs +11 -0
- package/dist/errors/invalid-relation.mjs.map +1 -0
- package/dist/errors/invalid-time.js +13 -0
- package/dist/errors/invalid-time.js.map +1 -0
- package/dist/errors/invalid-time.mjs +11 -0
- package/dist/errors/invalid-time.mjs.map +1 -0
- package/dist/errors/not-null.js +17 -0
- package/dist/errors/not-null.js.map +1 -0
- package/dist/errors/not-null.mjs +15 -0
- package/dist/errors/not-null.mjs.map +1 -0
- package/dist/fields/biginteger.js +9 -0
- package/dist/fields/biginteger.js.map +1 -0
- package/dist/fields/biginteger.mjs +7 -0
- package/dist/fields/biginteger.mjs.map +1 -0
- package/dist/fields/boolean.js +48 -0
- package/dist/fields/boolean.js.map +1 -0
- package/dist/fields/boolean.mjs +46 -0
- package/dist/fields/boolean.mjs.map +1 -0
- package/dist/fields/date.js +16 -0
- package/dist/fields/date.js.map +1 -0
- package/dist/fields/date.mjs +14 -0
- package/dist/fields/date.mjs.map +1 -0
- package/dist/fields/datetime.js +37 -0
- package/dist/fields/datetime.js.map +1 -0
- package/dist/fields/datetime.mjs +16 -0
- package/dist/fields/datetime.mjs.map +1 -0
- package/dist/fields/field.js +16 -0
- package/dist/fields/field.js.map +1 -0
- package/dist/fields/field.mjs +14 -0
- package/dist/fields/field.mjs.map +1 -0
- package/dist/fields/index.js +45 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/fields/index.mjs +43 -0
- package/dist/fields/index.mjs.map +1 -0
- package/dist/fields/json.js +36 -0
- package/dist/fields/json.js.map +1 -0
- package/dist/fields/json.mjs +34 -0
- package/dist/fields/json.mjs.map +1 -0
- package/dist/fields/number.js +20 -0
- package/dist/fields/number.js.map +1 -0
- package/dist/fields/number.mjs +18 -0
- package/dist/fields/number.mjs.map +1 -0
- package/dist/fields/shared/parsers.js +91 -0
- package/dist/fields/shared/parsers.js.map +1 -0
- package/dist/fields/shared/parsers.mjs +68 -0
- package/dist/fields/shared/parsers.mjs.map +1 -0
- package/dist/fields/string.js +16 -0
- package/dist/fields/string.js.map +1 -0
- package/dist/fields/string.mjs +14 -0
- package/dist/fields/string.mjs.map +1 -0
- package/dist/fields/time.js +17 -0
- package/dist/fields/time.js.map +1 -0
- package/dist/fields/time.mjs +15 -0
- package/dist/fields/time.mjs.map +1 -0
- package/dist/fields/timestamp.js +37 -0
- package/dist/fields/timestamp.js.map +1 -0
- package/dist/fields/timestamp.mjs +16 -0
- package/dist/fields/timestamp.mjs.map +1 -0
- package/dist/index.js +33 -8569
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -8532
- package/dist/index.mjs.map +1 -1
- package/dist/lifecycles/index.js +73 -0
- package/dist/lifecycles/index.js.map +1 -0
- package/dist/lifecycles/index.mjs +71 -0
- package/dist/lifecycles/index.mjs.map +1 -0
- package/dist/lifecycles/subscribers/index.js +10 -0
- package/dist/lifecycles/subscribers/index.js.map +1 -0
- package/dist/lifecycles/subscribers/index.mjs +8 -0
- package/dist/lifecycles/subscribers/index.mjs.map +1 -0
- package/dist/lifecycles/subscribers/models-lifecycles.js +13 -0
- package/dist/lifecycles/subscribers/models-lifecycles.js.map +1 -0
- package/dist/lifecycles/subscribers/models-lifecycles.mjs +11 -0
- package/dist/lifecycles/subscribers/models-lifecycles.mjs.map +1 -0
- package/dist/lifecycles/subscribers/timestamps.js +55 -0
- package/dist/lifecycles/subscribers/timestamps.js.map +1 -0
- package/dist/lifecycles/subscribers/timestamps.mjs +53 -0
- package/dist/lifecycles/subscribers/timestamps.mjs.map +1 -0
- package/dist/metadata/index.js +24 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/index.mjs +16 -0
- package/dist/metadata/index.mjs.map +1 -0
- package/dist/metadata/metadata.js +100 -0
- package/dist/metadata/metadata.js.map +1 -0
- package/dist/metadata/metadata.mjs +98 -0
- package/dist/metadata/metadata.mjs.map +1 -0
- package/dist/metadata/relations.js +545 -0
- package/dist/metadata/relations.js.map +1 -0
- package/dist/metadata/relations.mjs +536 -0
- package/dist/metadata/relations.mjs.map +1 -0
- package/dist/migrations/common.js +8 -0
- package/dist/migrations/common.js.map +1 -0
- package/dist/migrations/common.mjs +6 -0
- package/dist/migrations/common.mjs.map +1 -0
- package/dist/migrations/index.js +39 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/index.mjs +37 -0
- package/dist/migrations/index.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js +179 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs +177 -0
- package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +125 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +123 -0
- package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.js +41 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs +39 -0
- package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.js +45 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs +43 -0
- package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js +43 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs +41 -0
- package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -0
- package/dist/migrations/internal-migrations/index.js +26 -0
- package/dist/migrations/internal-migrations/index.js.map +1 -0
- package/dist/migrations/internal-migrations/index.mjs +24 -0
- package/dist/migrations/internal-migrations/index.mjs.map +1 -0
- package/dist/migrations/internal.js +63 -0
- package/dist/migrations/internal.js.map +1 -0
- package/dist/migrations/internal.mjs +61 -0
- package/dist/migrations/internal.mjs.map +1 -0
- package/dist/migrations/logger.js +24 -0
- package/dist/migrations/logger.js.map +1 -0
- package/dist/migrations/logger.mjs +22 -0
- package/dist/migrations/logger.mjs.map +1 -0
- package/dist/migrations/storage.js +39 -0
- package/dist/migrations/storage.js.map +1 -0
- package/dist/migrations/storage.mjs +37 -0
- package/dist/migrations/storage.mjs.map +1 -0
- package/dist/migrations/users.js +87 -0
- package/dist/migrations/users.js.map +1 -0
- package/dist/migrations/users.mjs +85 -0
- package/dist/migrations/users.mjs.map +1 -0
- package/dist/query/helpers/join.js +127 -0
- package/dist/query/helpers/join.js.map +1 -0
- package/dist/query/helpers/join.mjs +122 -0
- package/dist/query/helpers/join.mjs.map +1 -0
- package/dist/query/helpers/order-by.js +167 -0
- package/dist/query/helpers/order-by.js.map +1 -0
- package/dist/query/helpers/order-by.mjs +163 -0
- package/dist/query/helpers/order-by.mjs.map +1 -0
- package/dist/query/helpers/populate/apply.js +592 -0
- package/dist/query/helpers/populate/apply.js.map +1 -0
- package/dist/query/helpers/populate/apply.mjs +590 -0
- package/dist/query/helpers/populate/apply.mjs.map +1 -0
- package/dist/query/helpers/populate/process.js +92 -0
- package/dist/query/helpers/populate/process.js.map +1 -0
- package/dist/query/helpers/populate/process.mjs +90 -0
- package/dist/query/helpers/populate/process.mjs.map +1 -0
- package/dist/query/helpers/search.js +67 -0
- package/dist/query/helpers/search.js.map +1 -0
- package/dist/query/helpers/search.mjs +65 -0
- package/dist/query/helpers/search.mjs.map +1 -0
- package/dist/query/helpers/streams/readable.js +131 -0
- package/dist/query/helpers/streams/readable.js.map +1 -0
- package/dist/query/helpers/streams/readable.mjs +129 -0
- package/dist/query/helpers/streams/readable.mjs.map +1 -0
- package/dist/query/helpers/transform.js +77 -0
- package/dist/query/helpers/transform.js.map +1 -0
- package/dist/query/helpers/transform.mjs +73 -0
- package/dist/query/helpers/transform.mjs.map +1 -0
- package/dist/query/helpers/where.js +372 -0
- package/dist/query/helpers/where.js.map +1 -0
- package/dist/query/helpers/where.mjs +369 -0
- package/dist/query/helpers/where.mjs.map +1 -0
- package/dist/query/query-builder.js +507 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-builder.mjs +505 -0
- package/dist/query/query-builder.mjs.map +1 -0
- package/dist/repairs/index.js +13 -0
- package/dist/repairs/index.js.map +1 -0
- package/dist/repairs/index.mjs +11 -0
- package/dist/repairs/index.mjs.map +1 -0
- package/dist/repairs/operations/remove-orphan-morph-types.js +54 -0
- package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -0
- package/dist/repairs/operations/remove-orphan-morph-types.mjs +52 -0
- package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -0
- package/dist/schema/builder.js +354 -0
- package/dist/schema/builder.js.map +1 -0
- package/dist/schema/builder.mjs +352 -0
- package/dist/schema/builder.mjs.map +1 -0
- package/dist/schema/diff.js +379 -0
- package/dist/schema/diff.js.map +1 -0
- package/dist/schema/diff.mjs +377 -0
- package/dist/schema/diff.mjs.map +1 -0
- package/dist/schema/index.js +93 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/index.mjs +91 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/schema/schema.js +266 -0
- package/dist/schema/schema.js.map +1 -0
- package/dist/schema/schema.mjs +264 -0
- package/dist/schema/schema.mjs.map +1 -0
- package/dist/schema/storage.js +58 -0
- package/dist/schema/storage.js.map +1 -0
- package/dist/schema/storage.mjs +56 -0
- package/dist/schema/storage.mjs.map +1 -0
- package/dist/transaction-context.js +65 -0
- package/dist/transaction-context.js.map +1 -0
- package/dist/transaction-context.mjs +63 -0
- package/dist/transaction-context.mjs.map +1 -0
- package/dist/utils/async-curry.js +19 -0
- package/dist/utils/async-curry.js.map +1 -0
- package/dist/utils/async-curry.mjs +17 -0
- package/dist/utils/async-curry.mjs.map +1 -0
- package/dist/utils/identifiers/hash.js +30 -0
- package/dist/utils/identifiers/hash.js.map +1 -0
- package/dist/utils/identifiers/hash.mjs +28 -0
- package/dist/utils/identifiers/hash.mjs.map +1 -0
- package/dist/utils/identifiers/index.js +414 -0
- package/dist/utils/identifiers/index.js.map +1 -0
- package/dist/utils/identifiers/index.mjs +411 -0
- package/dist/utils/identifiers/index.mjs.map +1 -0
- package/dist/utils/knex.js +21 -0
- package/dist/utils/knex.js.map +1 -0
- package/dist/utils/knex.mjs +18 -0
- package/dist/utils/knex.mjs.map +1 -0
- package/dist/utils/types.js +51 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/types.mjs +44 -0
- package/dist/utils/types.mjs.map +1 -0
- package/dist/validations/index.js +12 -0
- package/dist/validations/index.js.map +1 -0
- package/dist/validations/index.mjs +10 -0
- package/dist/validations/index.mjs.map +1 -0
- package/dist/validations/relations/bidirectional.js +64 -0
- package/dist/validations/relations/bidirectional.js.map +1 -0
- package/dist/validations/relations/bidirectional.mjs +62 -0
- package/dist/validations/relations/bidirectional.mjs.map +1 -0
- package/dist/validations/relations/index.js +13 -0
- package/dist/validations/relations/index.js.map +1 -0
- package/dist/validations/relations/index.mjs +11 -0
- package/dist/validations/relations/index.mjs.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
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
|
+
{
|
|
16
|
+
if (column.pk) {
|
|
17
|
+
return {
|
|
18
|
+
type: 'increments',
|
|
19
|
+
args: [
|
|
20
|
+
{
|
|
21
|
+
primary: true,
|
|
22
|
+
primaryKey: true
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
type: 'integer'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
case 'float':
|
|
32
|
+
{
|
|
33
|
+
return {
|
|
34
|
+
type: 'float',
|
|
35
|
+
args: [
|
|
36
|
+
10,
|
|
37
|
+
2
|
|
38
|
+
]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
case 'bigint':
|
|
42
|
+
{
|
|
43
|
+
return {
|
|
44
|
+
type: 'bigInteger'
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
case 'varchar':
|
|
48
|
+
{
|
|
49
|
+
const length = type.slice(8, type.length - 1);
|
|
50
|
+
return {
|
|
51
|
+
type: 'string',
|
|
52
|
+
args: [
|
|
53
|
+
Number(length)
|
|
54
|
+
]
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
case 'text':
|
|
58
|
+
{
|
|
59
|
+
return {
|
|
60
|
+
type: 'text',
|
|
61
|
+
args: [
|
|
62
|
+
'longtext'
|
|
63
|
+
]
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
case 'json':
|
|
67
|
+
{
|
|
68
|
+
return {
|
|
69
|
+
type: 'jsonb'
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
case 'boolean':
|
|
73
|
+
{
|
|
74
|
+
return {
|
|
75
|
+
type: 'boolean'
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
case 'datetime':
|
|
79
|
+
{
|
|
80
|
+
return {
|
|
81
|
+
type: 'datetime',
|
|
82
|
+
args: [
|
|
83
|
+
{
|
|
84
|
+
useTz: false,
|
|
85
|
+
precision: 6
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
case 'date':
|
|
91
|
+
{
|
|
92
|
+
return {
|
|
93
|
+
type: 'date'
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
case 'time':
|
|
97
|
+
{
|
|
98
|
+
return {
|
|
99
|
+
type: 'time',
|
|
100
|
+
args: [
|
|
101
|
+
{
|
|
102
|
+
precision: 3
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
default:
|
|
108
|
+
{
|
|
109
|
+
return {
|
|
110
|
+
type: 'specificType',
|
|
111
|
+
args: [
|
|
112
|
+
column.data_type
|
|
113
|
+
]
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
class SqliteSchemaInspector {
|
|
119
|
+
async getSchema() {
|
|
120
|
+
const schema = {
|
|
121
|
+
tables: []
|
|
122
|
+
};
|
|
123
|
+
const tables = await this.getTables();
|
|
124
|
+
for (const tableName of tables){
|
|
125
|
+
const columns = await this.getColumns(tableName);
|
|
126
|
+
const indexes = await this.getIndexes(tableName);
|
|
127
|
+
const foreignKeys = await this.getForeignKeys(tableName);
|
|
128
|
+
schema.tables.push({
|
|
129
|
+
name: tableName,
|
|
130
|
+
columns,
|
|
131
|
+
indexes,
|
|
132
|
+
foreignKeys
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return schema;
|
|
136
|
+
}
|
|
137
|
+
async getTables() {
|
|
138
|
+
const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
|
|
139
|
+
return rows.map((row)=>row.name);
|
|
140
|
+
}
|
|
141
|
+
async getColumns(tableName) {
|
|
142
|
+
const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_INFO, [
|
|
143
|
+
tableName
|
|
144
|
+
]);
|
|
145
|
+
return rows.map((row)=>{
|
|
146
|
+
const { type, args = [], ...rest } = toStrapiType(row);
|
|
147
|
+
return {
|
|
148
|
+
type,
|
|
149
|
+
args,
|
|
150
|
+
name: row.name,
|
|
151
|
+
defaultTo: row.dflt_value,
|
|
152
|
+
notNullable: row.notnull !== null ? Boolean(row.notnull) : null,
|
|
153
|
+
unsigned: false,
|
|
154
|
+
...rest
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async getIndexes(tableName) {
|
|
159
|
+
const indexes = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
|
|
160
|
+
tableName
|
|
161
|
+
]);
|
|
162
|
+
const ret = [];
|
|
163
|
+
for (const index of indexes.filter((index)=>!index.name.startsWith('sqlite_'))){
|
|
164
|
+
const res = await this.db.connection.raw(SQL_QUERIES.INDEX_INFO, [
|
|
165
|
+
index.name
|
|
166
|
+
]);
|
|
167
|
+
const indexInfo = {
|
|
168
|
+
columns: res.map((row)=>row.name),
|
|
169
|
+
name: index.name
|
|
170
|
+
};
|
|
171
|
+
if (index.unique) {
|
|
172
|
+
indexInfo.type = 'unique';
|
|
173
|
+
}
|
|
174
|
+
ret.push(indexInfo);
|
|
175
|
+
}
|
|
176
|
+
return ret;
|
|
177
|
+
}
|
|
178
|
+
async getForeignKeys(tableName) {
|
|
179
|
+
const fks = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
|
|
180
|
+
tableName
|
|
181
|
+
]);
|
|
182
|
+
const ret = {};
|
|
183
|
+
for (const fk of fks){
|
|
184
|
+
if (!ret[fk.id]) {
|
|
185
|
+
ret[fk.id] = {
|
|
186
|
+
// TODO: name, // find name
|
|
187
|
+
name: '',
|
|
188
|
+
columns: [
|
|
189
|
+
fk.from
|
|
190
|
+
],
|
|
191
|
+
referencedColumns: [
|
|
192
|
+
fk.to
|
|
193
|
+
],
|
|
194
|
+
referencedTable: fk.table,
|
|
195
|
+
onUpdate: fk.on_update.toUpperCase(),
|
|
196
|
+
onDelete: fk.on_delete.toUpperCase()
|
|
197
|
+
};
|
|
198
|
+
} else {
|
|
199
|
+
ret[fk.id].columns.push(fk.from);
|
|
200
|
+
ret[fk.id].referencedColumns.push(fk.to);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return Object.values(ret);
|
|
204
|
+
}
|
|
205
|
+
constructor(db){
|
|
206
|
+
this.db = db;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
module.exports = SqliteSchemaInspector;
|
|
211
|
+
//# sourceMappingURL=schema-inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-inspector.js","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values","constructor"],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
const SQL_QUERIES = {
|
|
2
|
+
TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,
|
|
3
|
+
TABLE_INFO: `pragma table_info(??)`,
|
|
4
|
+
INDEX_LIST: 'pragma index_list(??)',
|
|
5
|
+
INDEX_INFO: 'pragma index_info(??)',
|
|
6
|
+
FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)'
|
|
7
|
+
};
|
|
8
|
+
const toStrapiType = (column)=>{
|
|
9
|
+
const { type } = column;
|
|
10
|
+
const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];
|
|
11
|
+
switch(rootType){
|
|
12
|
+
case 'integer':
|
|
13
|
+
{
|
|
14
|
+
if (column.pk) {
|
|
15
|
+
return {
|
|
16
|
+
type: 'increments',
|
|
17
|
+
args: [
|
|
18
|
+
{
|
|
19
|
+
primary: true,
|
|
20
|
+
primaryKey: true
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
type: 'integer'
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
case 'float':
|
|
30
|
+
{
|
|
31
|
+
return {
|
|
32
|
+
type: 'float',
|
|
33
|
+
args: [
|
|
34
|
+
10,
|
|
35
|
+
2
|
|
36
|
+
]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
case 'bigint':
|
|
40
|
+
{
|
|
41
|
+
return {
|
|
42
|
+
type: 'bigInteger'
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
case 'varchar':
|
|
46
|
+
{
|
|
47
|
+
const length = type.slice(8, type.length - 1);
|
|
48
|
+
return {
|
|
49
|
+
type: 'string',
|
|
50
|
+
args: [
|
|
51
|
+
Number(length)
|
|
52
|
+
]
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
case 'text':
|
|
56
|
+
{
|
|
57
|
+
return {
|
|
58
|
+
type: 'text',
|
|
59
|
+
args: [
|
|
60
|
+
'longtext'
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case 'json':
|
|
65
|
+
{
|
|
66
|
+
return {
|
|
67
|
+
type: 'jsonb'
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
case 'boolean':
|
|
71
|
+
{
|
|
72
|
+
return {
|
|
73
|
+
type: 'boolean'
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
case 'datetime':
|
|
77
|
+
{
|
|
78
|
+
return {
|
|
79
|
+
type: 'datetime',
|
|
80
|
+
args: [
|
|
81
|
+
{
|
|
82
|
+
useTz: false,
|
|
83
|
+
precision: 6
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
case 'date':
|
|
89
|
+
{
|
|
90
|
+
return {
|
|
91
|
+
type: 'date'
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
case 'time':
|
|
95
|
+
{
|
|
96
|
+
return {
|
|
97
|
+
type: 'time',
|
|
98
|
+
args: [
|
|
99
|
+
{
|
|
100
|
+
precision: 3
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
default:
|
|
106
|
+
{
|
|
107
|
+
return {
|
|
108
|
+
type: 'specificType',
|
|
109
|
+
args: [
|
|
110
|
+
column.data_type
|
|
111
|
+
]
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
class SqliteSchemaInspector {
|
|
117
|
+
async getSchema() {
|
|
118
|
+
const schema = {
|
|
119
|
+
tables: []
|
|
120
|
+
};
|
|
121
|
+
const tables = await this.getTables();
|
|
122
|
+
for (const tableName of tables){
|
|
123
|
+
const columns = await this.getColumns(tableName);
|
|
124
|
+
const indexes = await this.getIndexes(tableName);
|
|
125
|
+
const foreignKeys = await this.getForeignKeys(tableName);
|
|
126
|
+
schema.tables.push({
|
|
127
|
+
name: tableName,
|
|
128
|
+
columns,
|
|
129
|
+
indexes,
|
|
130
|
+
foreignKeys
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return schema;
|
|
134
|
+
}
|
|
135
|
+
async getTables() {
|
|
136
|
+
const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
|
|
137
|
+
return rows.map((row)=>row.name);
|
|
138
|
+
}
|
|
139
|
+
async getColumns(tableName) {
|
|
140
|
+
const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_INFO, [
|
|
141
|
+
tableName
|
|
142
|
+
]);
|
|
143
|
+
return rows.map((row)=>{
|
|
144
|
+
const { type, args = [], ...rest } = toStrapiType(row);
|
|
145
|
+
return {
|
|
146
|
+
type,
|
|
147
|
+
args,
|
|
148
|
+
name: row.name,
|
|
149
|
+
defaultTo: row.dflt_value,
|
|
150
|
+
notNullable: row.notnull !== null ? Boolean(row.notnull) : null,
|
|
151
|
+
unsigned: false,
|
|
152
|
+
...rest
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
async getIndexes(tableName) {
|
|
157
|
+
const indexes = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
|
|
158
|
+
tableName
|
|
159
|
+
]);
|
|
160
|
+
const ret = [];
|
|
161
|
+
for (const index of indexes.filter((index)=>!index.name.startsWith('sqlite_'))){
|
|
162
|
+
const res = await this.db.connection.raw(SQL_QUERIES.INDEX_INFO, [
|
|
163
|
+
index.name
|
|
164
|
+
]);
|
|
165
|
+
const indexInfo = {
|
|
166
|
+
columns: res.map((row)=>row.name),
|
|
167
|
+
name: index.name
|
|
168
|
+
};
|
|
169
|
+
if (index.unique) {
|
|
170
|
+
indexInfo.type = 'unique';
|
|
171
|
+
}
|
|
172
|
+
ret.push(indexInfo);
|
|
173
|
+
}
|
|
174
|
+
return ret;
|
|
175
|
+
}
|
|
176
|
+
async getForeignKeys(tableName) {
|
|
177
|
+
const fks = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
|
|
178
|
+
tableName
|
|
179
|
+
]);
|
|
180
|
+
const ret = {};
|
|
181
|
+
for (const fk of fks){
|
|
182
|
+
if (!ret[fk.id]) {
|
|
183
|
+
ret[fk.id] = {
|
|
184
|
+
// TODO: name, // find name
|
|
185
|
+
name: '',
|
|
186
|
+
columns: [
|
|
187
|
+
fk.from
|
|
188
|
+
],
|
|
189
|
+
referencedColumns: [
|
|
190
|
+
fk.to
|
|
191
|
+
],
|
|
192
|
+
referencedTable: fk.table,
|
|
193
|
+
onUpdate: fk.on_update.toUpperCase(),
|
|
194
|
+
onDelete: fk.on_delete.toUpperCase()
|
|
195
|
+
};
|
|
196
|
+
} else {
|
|
197
|
+
ret[fk.id].columns.push(fk.from);
|
|
198
|
+
ret[fk.id].referencedColumns.push(fk.to);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return Object.values(ret);
|
|
202
|
+
}
|
|
203
|
+
constructor(db){
|
|
204
|
+
this.db = db;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export { SqliteSchemaInspector as default };
|
|
209
|
+
//# sourceMappingURL=schema-inspector.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values","constructor"],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash/fp');
|
|
4
|
+
|
|
5
|
+
const withDefaultPagination = (params)=>{
|
|
6
|
+
const { page = 1, pageSize = 10, ...rest } = params;
|
|
7
|
+
return {
|
|
8
|
+
page: Number(page),
|
|
9
|
+
pageSize: Number(pageSize),
|
|
10
|
+
...rest
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
const withOffsetLimit = (params)=>{
|
|
14
|
+
const { page, pageSize, ...rest } = withDefaultPagination(params);
|
|
15
|
+
const offset = Math.max(page - 1, 0) * pageSize;
|
|
16
|
+
const limit = pageSize;
|
|
17
|
+
const query = {
|
|
18
|
+
...rest,
|
|
19
|
+
limit,
|
|
20
|
+
offset
|
|
21
|
+
};
|
|
22
|
+
return [
|
|
23
|
+
query,
|
|
24
|
+
{
|
|
25
|
+
page,
|
|
26
|
+
pageSize
|
|
27
|
+
}
|
|
28
|
+
];
|
|
29
|
+
};
|
|
30
|
+
const createRepository = (uid, db)=>{
|
|
31
|
+
return {
|
|
32
|
+
findOne (params = {}) {
|
|
33
|
+
return db.entityManager.findOne(uid, params);
|
|
34
|
+
},
|
|
35
|
+
findMany (params = {}) {
|
|
36
|
+
return db.entityManager.findMany(uid, params);
|
|
37
|
+
},
|
|
38
|
+
findWithCount (params = {}) {
|
|
39
|
+
return Promise.all([
|
|
40
|
+
db.entityManager.findMany(uid, params),
|
|
41
|
+
db.entityManager.count(uid, params)
|
|
42
|
+
]);
|
|
43
|
+
},
|
|
44
|
+
async findPage (params) {
|
|
45
|
+
const [query, { page, pageSize }] = withOffsetLimit(params);
|
|
46
|
+
const [results, total] = await Promise.all([
|
|
47
|
+
db.entityManager.findMany(uid, query),
|
|
48
|
+
db.entityManager.count(uid, query)
|
|
49
|
+
]);
|
|
50
|
+
return {
|
|
51
|
+
results,
|
|
52
|
+
pagination: {
|
|
53
|
+
page,
|
|
54
|
+
pageSize,
|
|
55
|
+
pageCount: Math.ceil(total / pageSize),
|
|
56
|
+
total
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
create (params) {
|
|
61
|
+
return db.entityManager.create(uid, params);
|
|
62
|
+
},
|
|
63
|
+
createMany (params) {
|
|
64
|
+
return db.entityManager.createMany(uid, params);
|
|
65
|
+
},
|
|
66
|
+
update (params) {
|
|
67
|
+
return db.entityManager.update(uid, params);
|
|
68
|
+
},
|
|
69
|
+
updateMany (params) {
|
|
70
|
+
return db.entityManager.updateMany(uid, params);
|
|
71
|
+
},
|
|
72
|
+
delete (params) {
|
|
73
|
+
return db.entityManager.delete(uid, params);
|
|
74
|
+
},
|
|
75
|
+
deleteMany (params = {}) {
|
|
76
|
+
return db.entityManager.deleteMany(uid, params);
|
|
77
|
+
},
|
|
78
|
+
count (params) {
|
|
79
|
+
return db.entityManager.count(uid, params);
|
|
80
|
+
},
|
|
81
|
+
attachRelations (id, data) {
|
|
82
|
+
return db.entityManager.attachRelations(uid, id, data);
|
|
83
|
+
},
|
|
84
|
+
async updateRelations (id, data) {
|
|
85
|
+
const trx = await db.transaction();
|
|
86
|
+
try {
|
|
87
|
+
await db.entityManager.updateRelations(uid, id, data, {
|
|
88
|
+
transaction: trx.get()
|
|
89
|
+
});
|
|
90
|
+
return await trx.commit();
|
|
91
|
+
} catch (e) {
|
|
92
|
+
await trx.rollback();
|
|
93
|
+
throw e;
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
deleteRelations (id) {
|
|
97
|
+
return db.entityManager.deleteRelations(uid, id);
|
|
98
|
+
},
|
|
99
|
+
populate (entity, populate) {
|
|
100
|
+
return db.entityManager.populate(uid, entity, populate);
|
|
101
|
+
},
|
|
102
|
+
load (entity, fields, params) {
|
|
103
|
+
return db.entityManager.load(uid, entity, fields, params);
|
|
104
|
+
},
|
|
105
|
+
async loadPages (entity, field, params) {
|
|
106
|
+
if (!_.isString(field)) {
|
|
107
|
+
throw new Error(`Invalid load. Expected ${field} to be a string`);
|
|
108
|
+
}
|
|
109
|
+
const { attributes } = db.metadata.get(uid);
|
|
110
|
+
const attribute = attributes[field];
|
|
111
|
+
if (!attribute || attribute.type !== 'relation' || !attribute.relation || ![
|
|
112
|
+
'oneToMany',
|
|
113
|
+
'manyToMany'
|
|
114
|
+
].includes(attribute.relation)) {
|
|
115
|
+
throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);
|
|
116
|
+
}
|
|
117
|
+
const [query, { page, pageSize }] = withOffsetLimit(params);
|
|
118
|
+
const [results, { count: total }] = await Promise.all([
|
|
119
|
+
db.entityManager.load(uid, entity, field, query),
|
|
120
|
+
db.entityManager.load(uid, entity, field, {
|
|
121
|
+
...query,
|
|
122
|
+
count: true
|
|
123
|
+
})
|
|
124
|
+
]);
|
|
125
|
+
return {
|
|
126
|
+
results,
|
|
127
|
+
pagination: {
|
|
128
|
+
page,
|
|
129
|
+
pageSize,
|
|
130
|
+
pageCount: Math.ceil(total / pageSize),
|
|
131
|
+
total
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
exports.createRepository = createRepository;
|
|
139
|
+
//# sourceMappingURL=entity-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n attachRelations(id, data) {\n return db.entityManager.attachRelations(uid, id, data);\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","updateRelations","trx","transaction","get","commit","e","rollback","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
|