@strapi/database 4.14.4 → 4.14.6

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 +6211 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/index.mjs +6179 -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 +20 -8
  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
package/lib/index.d.ts DELETED
@@ -1,198 +0,0 @@
1
- import { Knex } from 'knex';
2
- import { LifecycleProvider } from './lifecycles';
3
- import { MigrationProvider } from './migrations';
4
- import { SchemaProvider } from './schema';
5
- export * as errors from './errors';
6
-
7
- type ID = number | string;
8
-
9
- type LogicalOperators<T> = {
10
- $and?: WhereParams<T>[];
11
- $or?: WhereParams<T>[];
12
- $not?: WhereParams<T>;
13
- };
14
-
15
- type AttributeOperators<T, K extends keyof T> = {
16
- $eq?: T[K] | Array<T[K]>;
17
- $ne?: T[K] | Array<T[K]>;
18
- $nei?: T[K] | Array<T[K]>;
19
- $in?: T[K][];
20
- $notIn?: T[K][];
21
- $lt?: T[K];
22
- $lte?: T[K];
23
- $gt?: T[K];
24
- $gte?: T[K];
25
- $between?: [T[K], T[K]];
26
- $contains?: T[K];
27
- $notContains?: T[K];
28
- $containsi?: T[K];
29
- $notContainsi?: T[K];
30
- $startsWith?: T[K];
31
- $endsWith?: T[K];
32
- $null?: boolean;
33
- $notNull?: boolean;
34
- $not?: WhereParams<T> | AttributeOperators<T, K>;
35
- };
36
-
37
- export type WhereParams<T> = {
38
- [K in keyof T]?: T[K] | T[K][] | AttributeOperators<T, K>;
39
- } & LogicalOperators<T>;
40
-
41
- type Sortables<T> = {
42
- // check sortable
43
- [P in keyof T]: P;
44
- }[keyof T];
45
-
46
- type Direction = 'asc' | 'ASC' | 'DESC' | 'desc';
47
-
48
- interface FindParams<T> {
49
- select?: (keyof T)[];
50
- // TODO: add nested operators & relations
51
- where?: WhereParams<T>;
52
- limit?: number;
53
- offset?: number;
54
- orderBy?: // TODO: add relations
55
- | Sortables<T>
56
- | Sortables<T>[]
57
- | { [K in Sortables<T>]?: Direction }
58
- | { [K in Sortables<T>]?: Direction }[];
59
- // TODO: define nested obj
60
- populate?: (keyof T)[];
61
- }
62
-
63
- interface CreateParams<T> {
64
- select?: (keyof T)[];
65
- populate?: (keyof T)[];
66
- data: T[keyof T];
67
- }
68
-
69
- interface CreateManyParams<T> {
70
- select?: (keyof T)[];
71
- populate?: (keyof T)[];
72
- data: T[keyof T][];
73
- }
74
-
75
- export interface Pagination {
76
- page: number;
77
- pageSize: number;
78
- pageCount: number;
79
- total: number;
80
- }
81
-
82
- interface PopulateParams {}
83
- interface EntityManager {
84
- findOne<K extends keyof AllTypes>(uid: K, params: FindParams<AllTypes[K]>): Promise<any>;
85
- findMany<K extends keyof AllTypes>(uid: K, params: FindParams<AllTypes[K]>): Promise<any[]>;
86
-
87
- create<K extends keyof AllTypes>(uid: K, params: CreateParams<AllTypes[K]>): Promise<any>;
88
- createMany<K extends keyof AllTypes>(
89
- uid: K,
90
- params: CreateManyParams<AllTypes[K]>
91
- ): Promise<{ count: number; ids: ID[] }>;
92
-
93
- update<K extends keyof AllTypes>(uid: K, params: any): Promise<any>;
94
- updateMany<K extends keyof AllTypes>(uid: K, params: any): Promise<{ count: number }>;
95
-
96
- delete<K extends keyof AllTypes>(uid: K, params: any): Promise<any>;
97
- deleteMany<K extends keyof AllTypes>(uid: K, params: any): Promise<{ count: number }>;
98
-
99
- count<K extends keyof AllTypes>(uid: K, params: any): Promise<number>;
100
-
101
- attachRelations<K extends keyof AllTypes>(uid: K, id: ID, data: any): Promise<any>;
102
- updateRelations<K extends keyof AllTypes>(uid: K, id: ID, data: any): Promise<any>;
103
- deleteRelations<K extends keyof AllTypes>(uid: K, id: ID): Promise<any>;
104
-
105
- populate<K extends keyof AllTypes, T extends AllTypes[K]>(
106
- uid: K,
107
- entity: T,
108
- populate: PopulateParams
109
- ): Promise<T>;
110
-
111
- load<K extends keyof AllTypes, T extends AllTypes[K], SK extends keyof T>(
112
- uid: K,
113
- entity: T,
114
- field: SK,
115
- populate: PopulateParams
116
- ): Promise<T[SK]>;
117
- }
118
-
119
- export interface QueryFromContentType<T extends keyof AllTypes> {
120
- findOne(params?: any): Promise<any>;
121
- findMany(params?: any): Promise<any[]>;
122
- findWithCount(params?: any): Promise<[any[], number]>;
123
- findPage(params?: any): Promise<{ results: any[]; pagination: Pagination }>;
124
-
125
- create(params?: any): Promise<any>;
126
- createMany(params?: any): Promise<{ count: number; ids: ID[] }>;
127
-
128
- update(params?: any): Promise<any>;
129
- updateMany(params?: any): Promise<{ count: number }>;
130
-
131
- delete(params?: any): Promise<any>;
132
- deleteMany(params?: any): Promise<{ count: number }>;
133
-
134
- count(params?: any): Promise<number>;
135
-
136
- attachRelations(id: ID, data: any): Promise<any>;
137
- updateRelations(id: ID, data: any): Promise<any>;
138
- deleteRelations(id: ID): Promise<any>;
139
-
140
- populate<S extends AllTypes[T]>(entity: S, populate: PopulateParams): Promise<S>;
141
- clone<S extends AllTypes[T]>(cloneId: ID, params?: Params<S>): Promise<S>;
142
- load<S extends AllTypes[T], K extends string>(
143
- entity: S,
144
- field: K | K[],
145
- populate?: PopulateParams
146
- ): Promise<S[K]>;
147
- loadPages<S extends AllTypes[T], K extends string>(
148
- entity: S,
149
- field: K | K[],
150
- populate?: PopulateParams
151
- ): Promise<S[K]>;
152
- }
153
-
154
- interface ModelConfig {
155
- tableName: string;
156
- [k: string]: any;
157
- }
158
-
159
- interface ConnectionConfig {}
160
-
161
- interface DatabaseConfig {
162
- connection: ConnectionConfig;
163
- models: ModelConfig[];
164
- }
165
- export interface Database {
166
- schema: SchemaProvider;
167
- lifecycles: LifecycleProvider;
168
- migrations: MigrationProvider;
169
- entityManager: EntityManager;
170
- queryBuilder: any;
171
- metadata: any;
172
- connection: Knex;
173
- dialect: {
174
- client: string;
175
- };
176
-
177
- destroy(): Promise<void>;
178
-
179
- getSchemaConnection: () => Knex.SchemaBuilder;
180
-
181
- query: <T extends keyof AllTypes>(uid: T) => QueryFromContentType<T>;
182
- transaction(
183
- cb?: (params: {
184
- trx: Knex.Transaction;
185
- rollback: () => Promise<void>;
186
- commit: () => Promise<void>;
187
- onCommit: (cb) => void;
188
- onRollback: (cb) => void;
189
- }) => Promise<unknown>
190
- ):
191
- | Promise<unknown>
192
- | { get: () => Knex.Transaction; rollback: () => Promise<void>; commit: () => Promise<void> };
193
- inTransaction: () => boolean;
194
- }
195
- export class Database implements Database {
196
- static transformContentTypes(contentTypes: any[]): ModelConfig[];
197
- static init(config: DatabaseConfig): Promise<Database>;
198
- }
package/lib/index.js DELETED
@@ -1,129 +0,0 @@
1
- 'use strict';
2
-
3
- const { getDialect } = require('./dialects');
4
- const createSchemaProvider = require('./schema');
5
- const createMetadata = require('./metadata');
6
- const { createEntityManager } = require('./entity-manager');
7
- const { createMigrationsProvider } = require('./migrations');
8
- const { createLifecyclesProvider } = require('./lifecycles');
9
- const createConnection = require('./connection');
10
- const errors = require('./errors');
11
- const transactionCtx = require('./transaction-context');
12
-
13
- // TODO: move back into strapi
14
- const { transformContentTypes } = require('./utils/content-types');
15
- const { validateDatabase } = require('./validations');
16
-
17
- class Database {
18
- constructor(config) {
19
- this.metadata = createMetadata(config.models);
20
-
21
- this.config = {
22
- connection: {},
23
- settings: {
24
- forceMigration: true,
25
- runMigrations: true,
26
- ...config.settings,
27
- },
28
- ...config,
29
- };
30
-
31
- this.dialect = getDialect(this);
32
- this.dialect.configure();
33
-
34
- this.connection = createConnection(this.config.connection);
35
-
36
- this.dialect.initialize();
37
-
38
- this.schema = createSchemaProvider(this);
39
-
40
- this.migrations = createMigrationsProvider(this);
41
- this.lifecycles = createLifecyclesProvider(this);
42
-
43
- this.entityManager = createEntityManager(this);
44
- }
45
-
46
- query(uid) {
47
- if (!this.metadata.has(uid)) {
48
- throw new Error(`Model ${uid} not found`);
49
- }
50
-
51
- return this.entityManager.getRepository(uid);
52
- }
53
-
54
- inTransaction() {
55
- return !!transactionCtx.get();
56
- }
57
-
58
- async transaction(cb) {
59
- const notNestedTransaction = !transactionCtx.get();
60
- const trx = notNestedTransaction ? await this.connection.transaction() : transactionCtx.get();
61
-
62
- async function commit() {
63
- if (notNestedTransaction) {
64
- await transactionCtx.commit(trx);
65
- }
66
- }
67
-
68
- async function rollback() {
69
- if (notNestedTransaction) {
70
- await transactionCtx.rollback(trx);
71
- }
72
- }
73
-
74
- if (!cb) {
75
- return { commit, rollback, get: () => trx };
76
- }
77
-
78
- return transactionCtx.run(trx, async () => {
79
- try {
80
- const callbackParams = {
81
- trx,
82
- commit,
83
- rollback,
84
- onCommit: transactionCtx.onCommit,
85
- onRollback: transactionCtx.onRollback,
86
- };
87
- const res = await cb(callbackParams);
88
- await commit();
89
- return res;
90
- } catch (error) {
91
- await rollback();
92
- throw error;
93
- }
94
- });
95
- }
96
-
97
- getConnection(tableName) {
98
- const schema = this.connection.getSchemaName();
99
- const connection = tableName ? this.connection(tableName) : this.connection;
100
- return schema ? connection.withSchema(schema) : connection;
101
- }
102
-
103
- getSchemaConnection(trx = this.connection) {
104
- const schema = this.connection.getSchemaName();
105
- return schema ? trx.schema.withSchema(schema) : trx.schema;
106
- }
107
-
108
- queryBuilder(uid) {
109
- return this.entityManager.createQueryBuilder(uid);
110
- }
111
-
112
- async destroy() {
113
- await this.lifecycles.clear();
114
- await this.connection.destroy();
115
- }
116
- }
117
-
118
- // TODO: move into strapi
119
- Database.transformContentTypes = transformContentTypes;
120
- Database.init = async (config) => {
121
- const db = new Database(config);
122
- await validateDatabase(db);
123
- return db;
124
- };
125
-
126
- module.exports = {
127
- Database,
128
- errors,
129
- };
@@ -1,51 +0,0 @@
1
- import { Database } from '../';
2
- import { Model } from '../schema';
3
- import { Subscriber } from './subscribers';
4
-
5
- export type Action =
6
- | 'beforeCreate'
7
- | 'afterCreate'
8
- | 'beforeFindOne'
9
- | 'afterFindOne'
10
- | 'beforeFindMany'
11
- | 'afterFindMany'
12
- | 'beforeCount'
13
- | 'afterCount'
14
- | 'beforeCreateMany'
15
- | 'afterCreateMany'
16
- | 'beforeUpdate'
17
- | 'afterUpdate'
18
- | 'beforeUpdateMany'
19
- | 'afterUpdateMany'
20
- | 'beforeDelete'
21
- | 'afterDelete'
22
- | 'beforeDeleteMany'
23
- | 'afterDeleteMany';
24
-
25
- export interface Params {
26
- select?: any;
27
- where?: any;
28
- _q?: any;
29
- orderBy?: any;
30
- groupBy?: any;
31
- offset?: any;
32
- limit?: any;
33
- populate?: any;
34
- data?: any;
35
- }
36
-
37
- export interface Event {
38
- action: Action;
39
- model: Model;
40
- params: Params;
41
- }
42
-
43
- export interface LifecycleProvider {
44
- subscribe(subscriber: Subscriber): () => void;
45
- clear(): void;
46
- run(action: Action, uid: string, properties: any): Promise<Map<any, any>>;
47
- run(action: Action, uid: string, properties: any, states: Map<any, any>): Promise<Map<any, any>>;
48
- createEvent(action: Action, uid: string, properties: any): Event;
49
- }
50
-
51
- export function createLifecyclesProvider(db: Database): LifecycleProvider;
@@ -1,90 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert').strict;
4
-
5
- const timestampsLifecyclesSubscriber = require('./subscribers/timestamps');
6
- const modelLifecyclesSubscriber = require('./subscribers/models-lifecycles');
7
-
8
- const isValidSubscriber = (subscriber) => {
9
- return (
10
- typeof subscriber === 'function' || (typeof subscriber === 'object' && subscriber !== null)
11
- );
12
- };
13
-
14
- /**
15
- * @type {import('.').createLifecyclesProvider}
16
- */
17
- const createLifecyclesProvider = (db) => {
18
- let subscribers = [timestampsLifecyclesSubscriber, modelLifecyclesSubscriber];
19
-
20
- return {
21
- subscribe(subscriber) {
22
- assert(isValidSubscriber(subscriber), 'Invalid subscriber. Expected function or object');
23
-
24
- subscribers.push(subscriber);
25
-
26
- return () => subscribers.splice(subscribers.indexOf(subscriber), 1);
27
- },
28
-
29
- clear() {
30
- subscribers = [];
31
- },
32
-
33
- /**
34
- * @param {string} action
35
- * @param {string} uid
36
- * @param {{ params?: any, result?: any }} properties
37
- * @param {Map<any, any>} state
38
- */
39
- createEvent(action, uid, properties, state) {
40
- const model = db.metadata.get(uid);
41
-
42
- return {
43
- action,
44
- model,
45
- state,
46
- ...properties,
47
- };
48
- },
49
-
50
- /**
51
- * @param {string} action
52
- * @param {string} uid
53
- * @param {{ params?: any, result?: any }} properties
54
- * @param {Map<any, any>} states
55
- */
56
- async run(action, uid, properties, states = new Map()) {
57
- for (let i = 0; i < subscribers.length; i += 1) {
58
- const subscriber = subscribers[i];
59
- if (typeof subscriber === 'function') {
60
- const state = states.get(subscriber) || {};
61
- const event = this.createEvent(action, uid, properties, state);
62
- await subscriber(event);
63
- if (event.state) {
64
- states.set(subscriber, event.state || state);
65
- }
66
- continue;
67
- }
68
-
69
- const hasAction = action in subscriber;
70
- const hasModel = !subscriber.models || subscriber.models.includes(uid);
71
-
72
- if (hasAction && hasModel) {
73
- const state = states.get(subscriber) || {};
74
- const event = this.createEvent(action, uid, properties, state);
75
-
76
- await subscriber[action](event);
77
- if (event.state) {
78
- states.set(subscriber, event.state);
79
- }
80
- }
81
- }
82
-
83
- return states;
84
- },
85
- };
86
- };
87
-
88
- module.exports = {
89
- createLifecyclesProvider,
90
- };
@@ -1,11 +0,0 @@
1
- import { Event, Action } from '../';
2
-
3
- type SubscriberFn = (event: Event) => Promise<void> | void;
4
-
5
- type SubscriberMap = {
6
- models?: string[];
7
- } & {
8
- [k in Action]?: SubscriberFn;
9
- };
10
-
11
- export type Subscriber = SubscriberFn | SubscriberMap;
@@ -1,19 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * @typedef {import(".").Subscriber } Subscriber
5
- */
6
-
7
- /**
8
- * For each model try to run it's lifecycles function if any is defined
9
- * @type {Subscriber}
10
- */
11
- const modelsLifecyclesSubscriber = async (event) => {
12
- const { model } = event;
13
-
14
- if (event.action in model.lifecycles) {
15
- await model.lifecycles[event.action](event);
16
- }
17
- };
18
-
19
- module.exports = modelsLifecyclesSubscriber;
@@ -1,65 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
-
5
- /**
6
- * @typedef {import(".").Subscriber } Subscriber
7
- * @typedef { import("../").Event } Event
8
- */
9
-
10
- // NOTE: we could add onCreate & onUpdate on field level to do this instead
11
-
12
- /**
13
- * @type {Subscriber}
14
- */
15
- const timestampsLifecyclesSubscriber = {
16
- /**
17
- * Init createdAt & updatedAt before create
18
- * @param {Event} event
19
- */
20
- beforeCreate(event) {
21
- const { data } = event.params;
22
-
23
- const now = new Date();
24
- _.defaults(data, { createdAt: now, updatedAt: now });
25
- },
26
-
27
- /**
28
- * Init createdAt & updatedAt before create
29
- * @param {Event} event
30
- */
31
- beforeCreateMany(event) {
32
- const { data } = event.params;
33
-
34
- const now = new Date();
35
- if (_.isArray(data)) {
36
- data.forEach((data) => _.defaults(data, { createdAt: now, updatedAt: now }));
37
- }
38
- },
39
-
40
- /**
41
- * Update updatedAt before update
42
- * @param {Event} event
43
- */
44
- beforeUpdate(event) {
45
- const { data } = event.params;
46
-
47
- const now = new Date();
48
- _.assign(data, { updatedAt: now });
49
- },
50
-
51
- /**
52
- * Update updatedAt before update
53
- * @param {Event} event
54
- */
55
- beforeUpdateMany(event) {
56
- const { data } = event.params;
57
-
58
- const now = new Date();
59
- if (_.isArray(data)) {
60
- data.forEach((data) => _.assign(data, { updatedAt: now }));
61
- }
62
- },
63
- };
64
-
65
- module.exports = timestampsLifecyclesSubscriber;