@strapi/database 4.15.0-alpha.0 → 4.15.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 (242) hide show
  1. package/README.md +3 -0
  2. package/dist/connection.d.ts +3 -0
  3. package/dist/connection.d.ts.map +1 -0
  4. package/dist/dialects/dialect.d.ts +27 -0
  5. package/dist/dialects/dialect.d.ts.map +1 -0
  6. package/dist/dialects/index.d.ts +5 -0
  7. package/dist/dialects/index.d.ts.map +1 -0
  8. package/dist/dialects/mysql/constants.d.ts +3 -0
  9. package/dist/dialects/mysql/constants.d.ts.map +1 -0
  10. package/dist/dialects/mysql/database-inspector.d.ts +12 -0
  11. package/dist/dialects/mysql/database-inspector.d.ts.map +1 -0
  12. package/dist/dialects/mysql/index.d.ts +20 -0
  13. package/dist/dialects/mysql/index.d.ts.map +1 -0
  14. package/dist/dialects/mysql/schema-inspector.d.ts +13 -0
  15. package/dist/dialects/mysql/schema-inspector.d.ts.map +1 -0
  16. package/dist/dialects/postgresql/index.d.ts +14 -0
  17. package/dist/dialects/postgresql/index.d.ts.map +1 -0
  18. package/dist/dialects/postgresql/schema-inspector.d.ts +14 -0
  19. package/dist/dialects/postgresql/schema-inspector.d.ts.map +1 -0
  20. package/dist/dialects/sqlite/index.d.ts +19 -0
  21. package/dist/dialects/sqlite/index.d.ts.map +1 -0
  22. package/dist/dialects/sqlite/schema-inspector.d.ts +13 -0
  23. package/dist/dialects/sqlite/schema-inspector.d.ts.map +1 -0
  24. package/dist/entity-manager/entity-repository.d.ts +4 -0
  25. package/dist/entity-manager/entity-repository.d.ts.map +1 -0
  26. package/dist/entity-manager/index.d.ts +5 -0
  27. package/dist/entity-manager/index.d.ts.map +1 -0
  28. package/dist/entity-manager/morph-relations.d.ts +13 -0
  29. package/dist/entity-manager/morph-relations.d.ts.map +1 -0
  30. package/dist/entity-manager/regular-relations.d.ts +83 -0
  31. package/dist/entity-manager/regular-relations.d.ts.map +1 -0
  32. package/dist/entity-manager/relations/cloning/regular-relations.d.ts +17 -0
  33. package/dist/entity-manager/relations/cloning/regular-relations.d.ts.map +1 -0
  34. package/dist/entity-manager/relations-orderer.d.ts +73 -0
  35. package/dist/entity-manager/relations-orderer.d.ts.map +1 -0
  36. package/dist/entity-manager/types.d.ts +97 -0
  37. package/dist/entity-manager/types.d.ts.map +1 -0
  38. package/dist/errors/database.d.ts +5 -0
  39. package/dist/errors/database.d.ts.map +1 -0
  40. package/dist/errors/index.d.ts +8 -0
  41. package/dist/errors/index.d.ts.map +1 -0
  42. package/dist/errors/invalid-date.d.ts +5 -0
  43. package/dist/errors/invalid-date.d.ts.map +1 -0
  44. package/dist/errors/invalid-datetime.d.ts +5 -0
  45. package/dist/errors/invalid-datetime.d.ts.map +1 -0
  46. package/dist/errors/invalid-relation.d.ts +5 -0
  47. package/dist/errors/invalid-relation.d.ts.map +1 -0
  48. package/dist/errors/invalid-time.d.ts +5 -0
  49. package/dist/errors/invalid-time.d.ts.map +1 -0
  50. package/dist/errors/not-null.d.ts +7 -0
  51. package/dist/errors/not-null.d.ts.map +1 -0
  52. package/dist/fields/biginteger.d.ts +4 -0
  53. package/dist/fields/biginteger.d.ts.map +1 -0
  54. package/dist/fields/boolean.d.ts +6 -0
  55. package/dist/fields/boolean.d.ts.map +1 -0
  56. package/dist/fields/date.d.ts +6 -0
  57. package/dist/fields/date.d.ts.map +1 -0
  58. package/dist/fields/datetime.d.ts +6 -0
  59. package/dist/fields/datetime.d.ts.map +1 -0
  60. package/dist/fields/field.d.ts +7 -0
  61. package/dist/fields/field.d.ts.map +1 -0
  62. package/dist/fields/index.d.ts +4 -0
  63. package/dist/fields/index.d.ts.map +1 -0
  64. package/dist/fields/json.d.ts +6 -0
  65. package/dist/fields/json.d.ts.map +1 -0
  66. package/dist/fields/number.d.ts +6 -0
  67. package/dist/fields/number.d.ts.map +1 -0
  68. package/dist/fields/shared/parsers.d.ts +4 -0
  69. package/dist/fields/shared/parsers.d.ts.map +1 -0
  70. package/dist/fields/string.d.ts +6 -0
  71. package/dist/fields/string.d.ts.map +1 -0
  72. package/dist/fields/time.d.ts +6 -0
  73. package/dist/fields/time.d.ts.map +1 -0
  74. package/dist/fields/timestamp.d.ts +6 -0
  75. package/dist/fields/timestamp.d.ts.map +1 -0
  76. package/dist/index.d.ts +46 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +6189 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/index.mjs +6157 -0
  81. package/dist/index.mjs.map +1 -0
  82. package/dist/lifecycles/index.d.ts +17 -0
  83. package/dist/lifecycles/index.d.ts.map +1 -0
  84. package/dist/lifecycles/subscribers/index.d.ts +5 -0
  85. package/dist/lifecycles/subscribers/index.d.ts.map +1 -0
  86. package/dist/lifecycles/subscribers/models-lifecycles.d.ts +6 -0
  87. package/dist/lifecycles/subscribers/models-lifecycles.d.ts.map +1 -0
  88. package/dist/lifecycles/subscribers/timestamps.d.ts +3 -0
  89. package/dist/lifecycles/subscribers/timestamps.d.ts.map +1 -0
  90. package/dist/lifecycles/types.d.ts +25 -0
  91. package/dist/lifecycles/types.d.ts.map +1 -0
  92. package/dist/metadata/index.d.ts +10 -0
  93. package/dist/metadata/index.d.ts.map +1 -0
  94. package/dist/metadata/metadata.d.ts +22 -0
  95. package/dist/metadata/metadata.d.ts.map +1 -0
  96. package/dist/metadata/relations.d.ts +16 -0
  97. package/dist/metadata/relations.d.ts.map +1 -0
  98. package/dist/migrations/index.d.ts +12 -0
  99. package/dist/migrations/index.d.ts.map +1 -0
  100. package/dist/migrations/storage.d.ts +15 -0
  101. package/dist/migrations/storage.d.ts.map +1 -0
  102. package/dist/query/helpers/index.d.ts +8 -0
  103. package/dist/query/helpers/index.d.ts.map +1 -0
  104. package/dist/query/helpers/join.d.ts +30 -0
  105. package/dist/query/helpers/join.d.ts.map +1 -0
  106. package/dist/query/helpers/order-by.d.ts +14 -0
  107. package/dist/query/helpers/order-by.d.ts.map +1 -0
  108. package/dist/query/helpers/populate/apply.d.ts +11 -0
  109. package/dist/query/helpers/populate/apply.d.ts.map +1 -0
  110. package/dist/query/helpers/populate/index.d.ts +4 -0
  111. package/dist/query/helpers/populate/index.d.ts.map +1 -0
  112. package/dist/query/helpers/populate/process.d.ts +24 -0
  113. package/dist/query/helpers/populate/process.d.ts.map +1 -0
  114. package/dist/query/helpers/search.d.ts +4 -0
  115. package/dist/query/helpers/search.d.ts.map +1 -0
  116. package/dist/query/helpers/streams/index.d.ts +2 -0
  117. package/dist/query/helpers/streams/index.d.ts.map +1 -0
  118. package/dist/query/helpers/streams/readable.d.ts +39 -0
  119. package/dist/query/helpers/streams/readable.d.ts.map +1 -0
  120. package/dist/query/helpers/transform.d.ts +8 -0
  121. package/dist/query/helpers/transform.d.ts.map +1 -0
  122. package/dist/query/helpers/where.d.ts +19 -0
  123. package/dist/query/helpers/where.d.ts.map +1 -0
  124. package/dist/query/index.d.ts +3 -0
  125. package/dist/query/index.d.ts.map +1 -0
  126. package/dist/query/query-builder.d.ts +79 -0
  127. package/dist/query/query-builder.d.ts.map +1 -0
  128. package/dist/query/types.d.ts +8 -0
  129. package/dist/query/types.d.ts.map +1 -0
  130. package/dist/schema/builder.d.ts +33 -0
  131. package/dist/schema/builder.d.ts.map +1 -0
  132. package/dist/schema/diff.d.ts +7 -0
  133. package/dist/schema/diff.d.ts.map +1 -0
  134. package/dist/schema/index.d.ts +20 -0
  135. package/dist/schema/index.d.ts.map +1 -0
  136. package/dist/schema/schema.d.ts +4 -0
  137. package/dist/schema/schema.d.ts.map +1 -0
  138. package/dist/schema/storage.d.ts +10 -0
  139. package/dist/schema/storage.d.ts.map +1 -0
  140. package/dist/schema/types.d.ts +103 -0
  141. package/dist/schema/types.d.ts.map +1 -0
  142. package/dist/transaction-context.d.ts +22 -0
  143. package/dist/transaction-context.d.ts.map +1 -0
  144. package/dist/types/index.d.ts +169 -0
  145. package/dist/types/index.d.ts.map +1 -0
  146. package/dist/utils/content-types.d.ts +13 -0
  147. package/dist/utils/content-types.d.ts.map +1 -0
  148. package/dist/utils/knex.d.ts +12 -0
  149. package/dist/utils/knex.d.ts.map +1 -0
  150. package/dist/utils/types.d.ts +10 -0
  151. package/dist/utils/types.d.ts.map +1 -0
  152. package/dist/validations/index.d.ts +6 -0
  153. package/dist/validations/index.d.ts.map +1 -0
  154. package/dist/validations/relations/bidirectional.d.ts +12 -0
  155. package/dist/validations/relations/bidirectional.d.ts.map +1 -0
  156. package/dist/validations/relations/index.d.ts +7 -0
  157. package/dist/validations/relations/index.d.ts.map +1 -0
  158. package/package.json +21 -9
  159. package/.eslintignore +0 -2
  160. package/.eslintrc.js +0 -4
  161. package/jest.config.js +0 -6
  162. package/lib/__tests__/index.test.js +0 -93
  163. package/lib/__tests__/lifecycles.test.js +0 -55
  164. package/lib/connection.js +0 -64
  165. package/lib/dialects/dialect.js +0 -63
  166. package/lib/dialects/index.js +0 -53
  167. package/lib/dialects/mysql/constants.js +0 -6
  168. package/lib/dialects/mysql/database-inspector.js +0 -37
  169. package/lib/dialects/mysql/index.js +0 -92
  170. package/lib/dialects/mysql/schema-inspector.js +0 -234
  171. package/lib/dialects/postgresql/index.js +0 -65
  172. package/lib/dialects/postgresql/schema-inspector.js +0 -283
  173. package/lib/dialects/sqlite/index.js +0 -87
  174. package/lib/dialects/sqlite/schema-inspector.js +0 -151
  175. package/lib/entity-manager/__tests__/relations-orderer.test.js +0 -186
  176. package/lib/entity-manager/__tests__/sort-connect-array.test.js +0 -79
  177. package/lib/entity-manager/entity-repository.js +0 -164
  178. package/lib/entity-manager/index.js +0 -1385
  179. package/lib/entity-manager/morph-relations.js +0 -63
  180. package/lib/entity-manager/regular-relations.js +0 -506
  181. package/lib/entity-manager/relations/cloning/regular-relations.js +0 -76
  182. package/lib/entity-manager/relations-orderer.js +0 -225
  183. package/lib/errors/database.js +0 -12
  184. package/lib/errors/index.js +0 -17
  185. package/lib/errors/invalid-date.js +0 -14
  186. package/lib/errors/invalid-datetime.js +0 -14
  187. package/lib/errors/invalid-relation.js +0 -14
  188. package/lib/errors/invalid-time.js +0 -14
  189. package/lib/errors/not-null.js +0 -15
  190. package/lib/fields/biginteger.js +0 -17
  191. package/lib/fields/boolean.js +0 -39
  192. package/lib/fields/date.js +0 -16
  193. package/lib/fields/datetime.js +0 -19
  194. package/lib/fields/field.js +0 -17
  195. package/lib/fields/index.d.ts +0 -9
  196. package/lib/fields/index.js +0 -50
  197. package/lib/fields/json.js +0 -21
  198. package/lib/fields/number.js +0 -23
  199. package/lib/fields/shared/parsers.js +0 -71
  200. package/lib/fields/string.js +0 -17
  201. package/lib/fields/time.js +0 -17
  202. package/lib/fields/timestamp.js +0 -19
  203. package/lib/index.d.ts +0 -198
  204. package/lib/index.js +0 -129
  205. package/lib/lifecycles/index.d.ts +0 -51
  206. package/lib/lifecycles/index.js +0 -90
  207. package/lib/lifecycles/subscribers/index.d.ts +0 -11
  208. package/lib/lifecycles/subscribers/models-lifecycles.js +0 -19
  209. package/lib/lifecycles/subscribers/timestamps.js +0 -65
  210. package/lib/metadata/index.js +0 -244
  211. package/lib/metadata/relations.js +0 -578
  212. package/lib/migrations/index.d.ts +0 -9
  213. package/lib/migrations/index.js +0 -75
  214. package/lib/migrations/storage.js +0 -44
  215. package/lib/query/helpers/index.js +0 -11
  216. package/lib/query/helpers/join.js +0 -96
  217. package/lib/query/helpers/order-by.js +0 -70
  218. package/lib/query/helpers/populate/apply.js +0 -664
  219. package/lib/query/helpers/populate/index.js +0 -9
  220. package/lib/query/helpers/populate/process.js +0 -102
  221. package/lib/query/helpers/search.js +0 -84
  222. package/lib/query/helpers/streams/index.js +0 -5
  223. package/lib/query/helpers/streams/readable.js +0 -174
  224. package/lib/query/helpers/transform.js +0 -84
  225. package/lib/query/helpers/where.js +0 -365
  226. package/lib/query/index.js +0 -7
  227. package/lib/query/query-builder.js +0 -514
  228. package/lib/schema/__tests__/schema-diff.test.js +0 -231
  229. package/lib/schema/builder.js +0 -386
  230. package/lib/schema/diff.js +0 -399
  231. package/lib/schema/index.d.ts +0 -49
  232. package/lib/schema/index.js +0 -94
  233. package/lib/schema/schema.js +0 -202
  234. package/lib/schema/storage.js +0 -76
  235. package/lib/transaction-context.js +0 -68
  236. package/lib/types/index.d.ts +0 -6
  237. package/lib/types/index.js +0 -35
  238. package/lib/utils/content-types.js +0 -40
  239. package/lib/utils/knex.js +0 -22
  240. package/lib/validations/index.js +0 -20
  241. package/lib/validations/relations/bidirectional.js +0 -89
  242. package/lib/validations/relations/index.js +0 -14
@@ -1,244 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash/fp');
4
-
5
- const types = require('../types');
6
- const { createRelation } = require('./relations');
7
-
8
- class Metadata extends Map {
9
- add(meta) {
10
- return this.set(meta.uid, meta);
11
- }
12
-
13
- /**
14
- * Validate the DB metadata, throwing an error if a duplicate DB table name is detected
15
- */
16
- validate() {
17
- const seenTables = new Map();
18
- for (const meta of this.values()) {
19
- if (seenTables.get(meta.tableName)) {
20
- throw new Error(
21
- `DB table "${meta.tableName}" already exists. Change the collectionName of the related content type.`
22
- );
23
- }
24
- seenTables.set(meta.tableName, true);
25
- }
26
- }
27
- }
28
-
29
- // TODO: check if there isn't an attribute with an id already
30
- /**
31
- * Create Metadata from models configurations
32
- * @param {object[]} models
33
- * @returns {Metadata}
34
- */
35
- const createMetadata = (models = []) => {
36
- const metadata = new Metadata();
37
-
38
- // init pass
39
- for (const model of _.cloneDeep(models)) {
40
- metadata.add({
41
- singularName: model.singularName,
42
- uid: model.uid,
43
- tableName: model.tableName,
44
- attributes: {
45
- id: {
46
- type: 'increments',
47
- },
48
- ...model.attributes,
49
- },
50
- lifecycles: model.lifecycles || {},
51
- indexes: model.indexes || [],
52
- });
53
- }
54
-
55
- // build compos / relations
56
- for (const meta of metadata.values()) {
57
- if (hasComponentsOrDz(meta)) {
58
- const compoLinkModelMeta = createCompoLinkModelMeta(meta);
59
- meta.componentLink = compoLinkModelMeta;
60
- metadata.add(compoLinkModelMeta);
61
- }
62
-
63
- for (const [attributeName, attribute] of Object.entries(meta.attributes)) {
64
- try {
65
- if (types.isComponent(attribute.type)) {
66
- createComponent(attributeName, attribute, meta, metadata);
67
- continue;
68
- }
69
-
70
- if (types.isDynamicZone(attribute.type)) {
71
- createDynamicZone(attributeName, attribute, meta, metadata);
72
- continue;
73
- }
74
-
75
- if (types.isRelation(attribute.type)) {
76
- createRelation(attributeName, attribute, meta, metadata);
77
- continue;
78
- }
79
-
80
- createAttribute(attributeName, attribute, meta, metadata);
81
- } catch (error) {
82
- console.log(error);
83
- throw new Error(
84
- `Error on attribute ${attributeName} in model ${meta.singularName}(${meta.uid}): ${error.message}`
85
- );
86
- }
87
- }
88
- }
89
-
90
- for (const meta of metadata.values()) {
91
- const columnToAttribute = Object.keys(meta.attributes).reduce((acc, key) => {
92
- const attribute = meta.attributes[key];
93
- return Object.assign(acc, { [attribute.columnName || key]: key });
94
- }, {});
95
-
96
- meta.columnToAttribute = columnToAttribute;
97
- }
98
-
99
- metadata.validate();
100
- return metadata;
101
- };
102
-
103
- const hasComponentsOrDz = (model) => {
104
- return Object.values(model.attributes).some(
105
- ({ type }) => types.isComponent(type) || types.isDynamicZone(type)
106
- );
107
- };
108
-
109
- // NOTE: we might just move the compo logic outside this layer too at some point
110
- const createCompoLinkModelMeta = (baseModelMeta) => {
111
- return {
112
- // TODO: make sure there can't be any conflicts with a prefix
113
- // singularName: 'compo',
114
- uid: `${baseModelMeta.tableName}_components`,
115
- tableName: `${baseModelMeta.tableName}_components`,
116
- attributes: {
117
- id: {
118
- type: 'increments',
119
- },
120
- entity_id: {
121
- type: 'integer',
122
- column: {
123
- unsigned: true,
124
- },
125
- },
126
- component_id: {
127
- type: 'integer',
128
- column: {
129
- unsigned: true,
130
- },
131
- },
132
- component_type: {
133
- type: 'string',
134
- },
135
- field: {
136
- type: 'string',
137
- },
138
- order: {
139
- type: 'float',
140
- column: {
141
- unsigned: true,
142
- defaultTo: null,
143
- },
144
- },
145
- },
146
- indexes: [
147
- {
148
- name: `${baseModelMeta.tableName}_field_index`,
149
- columns: ['field'],
150
- type: null,
151
- },
152
- {
153
- name: `${baseModelMeta.tableName}_component_type_index`,
154
- columns: ['component_type'],
155
- type: null,
156
- },
157
- {
158
- name: `${baseModelMeta.tableName}_entity_fk`,
159
- columns: ['entity_id'],
160
- },
161
- {
162
- name: `${baseModelMeta.tableName}_unique`,
163
- columns: ['entity_id', 'component_id', 'field', 'component_type'],
164
- type: 'unique',
165
- },
166
- ],
167
- foreignKeys: [
168
- {
169
- name: `${baseModelMeta.tableName}_entity_fk`,
170
- columns: ['entity_id'],
171
- referencedColumns: ['id'],
172
- referencedTable: baseModelMeta.tableName,
173
- onDelete: 'CASCADE',
174
- },
175
- ],
176
- };
177
- };
178
-
179
- const createDynamicZone = (attributeName, attribute, meta) => {
180
- Object.assign(attribute, {
181
- type: 'relation',
182
- relation: 'morphToMany',
183
- // TODO: handle restrictions at some point
184
- // target: attribute.components,
185
- joinTable: {
186
- name: meta.componentLink.tableName,
187
- joinColumn: {
188
- name: 'entity_id',
189
- referencedColumn: 'id',
190
- },
191
- morphColumn: {
192
- idColumn: {
193
- name: 'component_id',
194
- referencedColumn: 'id',
195
- },
196
- typeColumn: {
197
- name: 'component_type',
198
- },
199
- typeField: '__component',
200
- },
201
- on: {
202
- field: attributeName,
203
- },
204
- orderBy: {
205
- order: 'asc',
206
- },
207
- pivotColumns: ['entity_id', 'component_id', 'field', 'component_type'],
208
- },
209
- });
210
- };
211
-
212
- const createComponent = (attributeName, attribute, meta) => {
213
- Object.assign(attribute, {
214
- type: 'relation',
215
- relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',
216
- target: attribute.component,
217
- joinTable: {
218
- name: meta.componentLink.tableName,
219
- joinColumn: {
220
- name: 'entity_id',
221
- referencedColumn: 'id',
222
- },
223
- inverseJoinColumn: {
224
- name: 'component_id',
225
- referencedColumn: 'id',
226
- },
227
- on: {
228
- field: attributeName,
229
- },
230
- orderColumnName: 'order',
231
- orderBy: {
232
- order: 'asc',
233
- },
234
- pivotColumns: ['entity_id', 'component_id', 'field', 'component_type'],
235
- },
236
- });
237
- };
238
-
239
- const createAttribute = (attributeName, attribute) => {
240
- const columnName = _.snakeCase(attributeName);
241
- Object.assign(attribute, { columnName });
242
- };
243
-
244
- module.exports = createMetadata;