@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.
- package/README.md +3 -0
- package/dist/connection.d.ts +3 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/dialects/dialect.d.ts +27 -0
- package/dist/dialects/dialect.d.ts.map +1 -0
- package/dist/dialects/index.d.ts +5 -0
- package/dist/dialects/index.d.ts.map +1 -0
- package/dist/dialects/mysql/constants.d.ts +3 -0
- package/dist/dialects/mysql/constants.d.ts.map +1 -0
- package/dist/dialects/mysql/database-inspector.d.ts +12 -0
- package/dist/dialects/mysql/database-inspector.d.ts.map +1 -0
- package/dist/dialects/mysql/index.d.ts +20 -0
- package/dist/dialects/mysql/index.d.ts.map +1 -0
- package/dist/dialects/mysql/schema-inspector.d.ts +13 -0
- package/dist/dialects/mysql/schema-inspector.d.ts.map +1 -0
- package/dist/dialects/postgresql/index.d.ts +14 -0
- package/dist/dialects/postgresql/index.d.ts.map +1 -0
- package/dist/dialects/postgresql/schema-inspector.d.ts +14 -0
- package/dist/dialects/postgresql/schema-inspector.d.ts.map +1 -0
- package/dist/dialects/sqlite/index.d.ts +19 -0
- package/dist/dialects/sqlite/index.d.ts.map +1 -0
- package/dist/dialects/sqlite/schema-inspector.d.ts +13 -0
- package/dist/dialects/sqlite/schema-inspector.d.ts.map +1 -0
- package/dist/entity-manager/entity-repository.d.ts +4 -0
- package/dist/entity-manager/entity-repository.d.ts.map +1 -0
- package/dist/entity-manager/index.d.ts +5 -0
- package/dist/entity-manager/index.d.ts.map +1 -0
- package/dist/entity-manager/morph-relations.d.ts +13 -0
- package/dist/entity-manager/morph-relations.d.ts.map +1 -0
- package/dist/entity-manager/regular-relations.d.ts +83 -0
- package/dist/entity-manager/regular-relations.d.ts.map +1 -0
- package/dist/entity-manager/relations/cloning/regular-relations.d.ts +17 -0
- package/dist/entity-manager/relations/cloning/regular-relations.d.ts.map +1 -0
- package/dist/entity-manager/relations-orderer.d.ts +73 -0
- package/dist/entity-manager/relations-orderer.d.ts.map +1 -0
- package/dist/entity-manager/types.d.ts +97 -0
- package/dist/entity-manager/types.d.ts.map +1 -0
- package/dist/errors/database.d.ts +5 -0
- package/dist/errors/database.d.ts.map +1 -0
- package/dist/errors/index.d.ts +8 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/invalid-date.d.ts +5 -0
- package/dist/errors/invalid-date.d.ts.map +1 -0
- package/dist/errors/invalid-datetime.d.ts +5 -0
- package/dist/errors/invalid-datetime.d.ts.map +1 -0
- package/dist/errors/invalid-relation.d.ts +5 -0
- package/dist/errors/invalid-relation.d.ts.map +1 -0
- package/dist/errors/invalid-time.d.ts +5 -0
- package/dist/errors/invalid-time.d.ts.map +1 -0
- package/dist/errors/not-null.d.ts +7 -0
- package/dist/errors/not-null.d.ts.map +1 -0
- package/dist/fields/biginteger.d.ts +4 -0
- package/dist/fields/biginteger.d.ts.map +1 -0
- package/dist/fields/boolean.d.ts +6 -0
- package/dist/fields/boolean.d.ts.map +1 -0
- package/dist/fields/date.d.ts +6 -0
- package/dist/fields/date.d.ts.map +1 -0
- package/dist/fields/datetime.d.ts +6 -0
- package/dist/fields/datetime.d.ts.map +1 -0
- package/dist/fields/field.d.ts +7 -0
- package/dist/fields/field.d.ts.map +1 -0
- package/dist/fields/index.d.ts +4 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/json.d.ts +6 -0
- package/dist/fields/json.d.ts.map +1 -0
- package/dist/fields/number.d.ts +6 -0
- package/dist/fields/number.d.ts.map +1 -0
- package/dist/fields/shared/parsers.d.ts +4 -0
- package/dist/fields/shared/parsers.d.ts.map +1 -0
- package/dist/fields/string.d.ts +6 -0
- package/dist/fields/string.d.ts.map +1 -0
- package/dist/fields/time.d.ts +6 -0
- package/dist/fields/time.d.ts.map +1 -0
- package/dist/fields/timestamp.d.ts +6 -0
- package/dist/fields/timestamp.d.ts.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6189 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6157 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lifecycles/index.d.ts +17 -0
- package/dist/lifecycles/index.d.ts.map +1 -0
- package/dist/lifecycles/subscribers/index.d.ts +5 -0
- package/dist/lifecycles/subscribers/index.d.ts.map +1 -0
- package/dist/lifecycles/subscribers/models-lifecycles.d.ts +6 -0
- package/dist/lifecycles/subscribers/models-lifecycles.d.ts.map +1 -0
- package/dist/lifecycles/subscribers/timestamps.d.ts +3 -0
- package/dist/lifecycles/subscribers/timestamps.d.ts.map +1 -0
- package/dist/lifecycles/types.d.ts +25 -0
- package/dist/lifecycles/types.d.ts.map +1 -0
- package/dist/metadata/index.d.ts +10 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/metadata.d.ts +22 -0
- package/dist/metadata/metadata.d.ts.map +1 -0
- package/dist/metadata/relations.d.ts +16 -0
- package/dist/metadata/relations.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +12 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/storage.d.ts +15 -0
- package/dist/migrations/storage.d.ts.map +1 -0
- package/dist/query/helpers/index.d.ts +8 -0
- package/dist/query/helpers/index.d.ts.map +1 -0
- package/dist/query/helpers/join.d.ts +30 -0
- package/dist/query/helpers/join.d.ts.map +1 -0
- package/dist/query/helpers/order-by.d.ts +14 -0
- package/dist/query/helpers/order-by.d.ts.map +1 -0
- package/dist/query/helpers/populate/apply.d.ts +11 -0
- package/dist/query/helpers/populate/apply.d.ts.map +1 -0
- package/dist/query/helpers/populate/index.d.ts +4 -0
- package/dist/query/helpers/populate/index.d.ts.map +1 -0
- package/dist/query/helpers/populate/process.d.ts +24 -0
- package/dist/query/helpers/populate/process.d.ts.map +1 -0
- package/dist/query/helpers/search.d.ts +4 -0
- package/dist/query/helpers/search.d.ts.map +1 -0
- package/dist/query/helpers/streams/index.d.ts +2 -0
- package/dist/query/helpers/streams/index.d.ts.map +1 -0
- package/dist/query/helpers/streams/readable.d.ts +39 -0
- package/dist/query/helpers/streams/readable.d.ts.map +1 -0
- package/dist/query/helpers/transform.d.ts +8 -0
- package/dist/query/helpers/transform.d.ts.map +1 -0
- package/dist/query/helpers/where.d.ts +19 -0
- package/dist/query/helpers/where.d.ts.map +1 -0
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/query-builder.d.ts +79 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/types.d.ts +8 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/schema/builder.d.ts +33 -0
- package/dist/schema/builder.d.ts.map +1 -0
- package/dist/schema/diff.d.ts +7 -0
- package/dist/schema/diff.d.ts.map +1 -0
- package/dist/schema/index.d.ts +20 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/schema.d.ts +4 -0
- package/dist/schema/schema.d.ts.map +1 -0
- package/dist/schema/storage.d.ts +10 -0
- package/dist/schema/storage.d.ts.map +1 -0
- package/dist/schema/types.d.ts +103 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/transaction-context.d.ts +22 -0
- package/dist/transaction-context.d.ts.map +1 -0
- package/dist/types/index.d.ts +169 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/content-types.d.ts +13 -0
- package/dist/utils/content-types.d.ts.map +1 -0
- package/dist/utils/knex.d.ts +12 -0
- package/dist/utils/knex.d.ts.map +1 -0
- package/dist/utils/types.d.ts +10 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/validations/index.d.ts +6 -0
- package/dist/validations/index.d.ts.map +1 -0
- package/dist/validations/relations/bidirectional.d.ts +12 -0
- package/dist/validations/relations/bidirectional.d.ts.map +1 -0
- package/dist/validations/relations/index.d.ts +7 -0
- package/dist/validations/relations/index.d.ts.map +1 -0
- package/package.json +21 -9
- package/.eslintignore +0 -2
- package/.eslintrc.js +0 -4
- package/jest.config.js +0 -6
- package/lib/__tests__/index.test.js +0 -93
- package/lib/__tests__/lifecycles.test.js +0 -55
- package/lib/connection.js +0 -64
- package/lib/dialects/dialect.js +0 -63
- package/lib/dialects/index.js +0 -53
- package/lib/dialects/mysql/constants.js +0 -6
- package/lib/dialects/mysql/database-inspector.js +0 -37
- package/lib/dialects/mysql/index.js +0 -92
- package/lib/dialects/mysql/schema-inspector.js +0 -234
- package/lib/dialects/postgresql/index.js +0 -65
- package/lib/dialects/postgresql/schema-inspector.js +0 -283
- package/lib/dialects/sqlite/index.js +0 -87
- package/lib/dialects/sqlite/schema-inspector.js +0 -151
- package/lib/entity-manager/__tests__/relations-orderer.test.js +0 -186
- package/lib/entity-manager/__tests__/sort-connect-array.test.js +0 -79
- package/lib/entity-manager/entity-repository.js +0 -164
- package/lib/entity-manager/index.js +0 -1385
- package/lib/entity-manager/morph-relations.js +0 -63
- package/lib/entity-manager/regular-relations.js +0 -506
- package/lib/entity-manager/relations/cloning/regular-relations.js +0 -76
- package/lib/entity-manager/relations-orderer.js +0 -225
- package/lib/errors/database.js +0 -12
- package/lib/errors/index.js +0 -17
- package/lib/errors/invalid-date.js +0 -14
- package/lib/errors/invalid-datetime.js +0 -14
- package/lib/errors/invalid-relation.js +0 -14
- package/lib/errors/invalid-time.js +0 -14
- package/lib/errors/not-null.js +0 -15
- package/lib/fields/biginteger.js +0 -17
- package/lib/fields/boolean.js +0 -39
- package/lib/fields/date.js +0 -16
- package/lib/fields/datetime.js +0 -19
- package/lib/fields/field.js +0 -17
- package/lib/fields/index.d.ts +0 -9
- package/lib/fields/index.js +0 -50
- package/lib/fields/json.js +0 -21
- package/lib/fields/number.js +0 -23
- package/lib/fields/shared/parsers.js +0 -71
- package/lib/fields/string.js +0 -17
- package/lib/fields/time.js +0 -17
- package/lib/fields/timestamp.js +0 -19
- package/lib/index.d.ts +0 -198
- package/lib/index.js +0 -129
- package/lib/lifecycles/index.d.ts +0 -51
- package/lib/lifecycles/index.js +0 -90
- package/lib/lifecycles/subscribers/index.d.ts +0 -11
- package/lib/lifecycles/subscribers/models-lifecycles.js +0 -19
- package/lib/lifecycles/subscribers/timestamps.js +0 -65
- package/lib/metadata/index.js +0 -244
- package/lib/metadata/relations.js +0 -578
- package/lib/migrations/index.d.ts +0 -9
- package/lib/migrations/index.js +0 -75
- package/lib/migrations/storage.js +0 -44
- package/lib/query/helpers/index.js +0 -11
- package/lib/query/helpers/join.js +0 -96
- package/lib/query/helpers/order-by.js +0 -70
- package/lib/query/helpers/populate/apply.js +0 -664
- package/lib/query/helpers/populate/index.js +0 -9
- package/lib/query/helpers/populate/process.js +0 -102
- package/lib/query/helpers/search.js +0 -84
- package/lib/query/helpers/streams/index.js +0 -5
- package/lib/query/helpers/streams/readable.js +0 -174
- package/lib/query/helpers/transform.js +0 -84
- package/lib/query/helpers/where.js +0 -365
- package/lib/query/index.js +0 -7
- package/lib/query/query-builder.js +0 -514
- package/lib/schema/__tests__/schema-diff.test.js +0 -231
- package/lib/schema/builder.js +0 -386
- package/lib/schema/diff.js +0 -399
- package/lib/schema/index.d.ts +0 -49
- package/lib/schema/index.js +0 -94
- package/lib/schema/schema.js +0 -202
- package/lib/schema/storage.js +0 -76
- package/lib/transaction-context.js +0 -68
- package/lib/types/index.d.ts +0 -6
- package/lib/types/index.js +0 -35
- package/lib/utils/content-types.js +0 -40
- package/lib/utils/knex.js +0 -22
- package/lib/validations/index.js +0 -20
- package/lib/validations/relations/bidirectional.js +0 -89
- 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;
|
package/lib/lifecycles/index.js
DELETED
|
@@ -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,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;
|