@goatlab/fluent 0.7.5 → 0.7.10
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/BaseConnector.d.ts +8 -31
- package/dist/BaseConnector.js +11 -104
- package/dist/FluentConnectorInterface.d.ts +17 -0
- package/dist/FluentConnectorInterface.js +2 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +8 -12
- package/dist/TypeOrmConnector/TypeOrmConnector.js +183 -546
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.d.ts +7 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js +148 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.d.ts +6 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js +34 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.d.ts +4 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js +12 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.d.ts +6 -0
- package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js +166 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.d.ts +8 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js +200 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.d.ts +6 -0
- package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js +207 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +3 -3
- package/dist/TypeOrmConnector/test/basic/goat.entity.js +1 -1
- package/dist/TypeOrmConnector/test/docker/docker.d.ts +1 -1
- package/dist/TypeOrmConnector/test/docker/docker.js +3 -4
- package/dist/TypeOrmConnector/test/docker/mongo.d.ts +16 -0
- package/dist/TypeOrmConnector/test/docker/mongo.js +93 -0
- package/dist/TypeOrmConnector/test/docker/mysql.js +1 -1
- package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.d.ts +4 -2
- package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.js +6 -1
- package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.d.ts +3 -2
- package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.js +3 -1
- package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.d.ts +2 -2
- package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.js +2 -1
- package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +6 -2
- package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.js +10 -1
- package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.js +1 -1
- package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.d.ts +3 -2
- package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.js +3 -1
- package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.d.ts +2 -2
- package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.js +2 -1
- package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +0 -1
- package/dist/TypeOrmConnector/test/relations/car/car.entity.js +0 -8
- package/dist/TypeOrmConnector/test/relations/car/car.output.schema.d.ts +511 -0
- package/dist/TypeOrmConnector/test/relations/car/car.output.schema.js +8 -0
- package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +4 -2
- package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +6 -1
- package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +2 -25
- package/dist/TypeOrmConnector/test/relations/car/car.schema.js +3 -8
- package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +1 -1
- package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +435 -35
- package/dist/TypeOrmConnector/test/relations/roles/role.output.schema.d.ts +152 -0
- package/dist/TypeOrmConnector/test/relations/roles/role.output.schema.js +14 -0
- package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +2 -25
- package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +2 -10
- package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +3 -2
- package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +3 -1
- package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +2 -2
- package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +2 -1
- package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +465 -69
- package/dist/TypeOrmConnector/test/relations/user/user.schema.js +54 -5
- package/dist/TypeOrmConnector/util/clearEmpties.d.ts +1 -0
- package/dist/TypeOrmConnector/util/clearEmpties.js +25 -0
- package/dist/TypeOrmConnector/util/extractConditions.d.ts +6 -0
- package/dist/TypeOrmConnector/util/extractConditions.js +80 -0
- package/dist/TypeOrmConnector/util/extractInclude.d.ts +2 -0
- package/dist/TypeOrmConnector/util/extractInclude.js +25 -0
- package/dist/TypeOrmConnector/util/extractMetadataFromKeys.d.ts +12 -0
- package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js +42 -0
- package/dist/TypeOrmConnector/util/extractOrderBy.d.ts +4 -0
- package/dist/TypeOrmConnector/util/extractOrderBy.js +18 -0
- package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.d.ts +19 -0
- package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js +26 -0
- package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.d.ts +1 -0
- package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js +20 -0
- package/dist/TypeOrmConnector/util/isAnyObject.d.ts +1 -0
- package/dist/TypeOrmConnector/util/isAnyObject.js +7 -0
- package/dist/TypeOrmConnector/util/nestQueryResults.d.ts +2 -0
- package/dist/TypeOrmConnector/util/nestQueryResults.js +31 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.js +2 -1
- package/dist/loadRelations.js +8 -10
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +37 -20
- package/package.json +4 -3
- package/CHANGELOG.md +0 -1072
- package/dist/TypeOrmConnector/test/mongo/mongo.memory.d.ts +0 -4
- package/dist/TypeOrmConnector/test/mongo/mongo.memory.js +0 -43
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTypeOrmWhere = void 0;
|
|
4
|
+
const js_utils_1 = require("@goatlab/js-utils");
|
|
5
|
+
const typeorm_1 = require("typeorm");
|
|
6
|
+
const clearEmpties_1 = require("../..//util/clearEmpties");
|
|
7
|
+
const types_1 = require("../../../types");
|
|
8
|
+
const extractConditions_1 = require("../../util/extractConditions");
|
|
9
|
+
const getTypeOrmWhere = ({ where }) => {
|
|
10
|
+
if (!where || Object.keys(where).length === 0) {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
const Filters = { where: [{}] };
|
|
14
|
+
const orConditions = (0, extractConditions_1.extractConditions)(where['OR']);
|
|
15
|
+
const andConditions = (0, extractConditions_1.extractConditions)(where['AND']);
|
|
16
|
+
const copy = js_utils_1.Objects.clone(where);
|
|
17
|
+
if (!!copy['AND']) {
|
|
18
|
+
delete copy['AND'];
|
|
19
|
+
}
|
|
20
|
+
if (!!copy['OR']) {
|
|
21
|
+
delete copy['OR'];
|
|
22
|
+
}
|
|
23
|
+
const rootLevelConditions = (0, extractConditions_1.extractConditions)([copy]);
|
|
24
|
+
for (const condition of andConditions) {
|
|
25
|
+
const { element, operator, value } = condition;
|
|
26
|
+
switch (operator) {
|
|
27
|
+
case types_1.LogicOperator.equals:
|
|
28
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
29
|
+
...Filters.where[0],
|
|
30
|
+
...{ [element]: (0, typeorm_1.Equal)(value) }
|
|
31
|
+
});
|
|
32
|
+
break;
|
|
33
|
+
case types_1.LogicOperator.isNot:
|
|
34
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
35
|
+
...Filters.where[0],
|
|
36
|
+
...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.Equal)(value)) }
|
|
37
|
+
});
|
|
38
|
+
break;
|
|
39
|
+
case types_1.LogicOperator.greaterThan:
|
|
40
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
41
|
+
...Filters.where[0],
|
|
42
|
+
...{ [element]: (0, typeorm_1.MoreThan)(value) }
|
|
43
|
+
});
|
|
44
|
+
break;
|
|
45
|
+
case types_1.LogicOperator.greaterOrEqualThan:
|
|
46
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
47
|
+
...Filters.where[0],
|
|
48
|
+
...{ [element]: (0, typeorm_1.MoreThanOrEqual)(value) }
|
|
49
|
+
});
|
|
50
|
+
break;
|
|
51
|
+
case types_1.LogicOperator.lessThan:
|
|
52
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
53
|
+
...Filters.where[0],
|
|
54
|
+
...{ [element]: (0, typeorm_1.LessThan)(value) }
|
|
55
|
+
});
|
|
56
|
+
break;
|
|
57
|
+
case types_1.LogicOperator.lessOrEqualThan:
|
|
58
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
59
|
+
...Filters.where[0],
|
|
60
|
+
...{ [element]: (0, typeorm_1.LessThanOrEqual)(value) }
|
|
61
|
+
});
|
|
62
|
+
break;
|
|
63
|
+
case types_1.LogicOperator.in:
|
|
64
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
65
|
+
...Filters.where[0],
|
|
66
|
+
...{ [element]: (0, typeorm_1.In)(value) }
|
|
67
|
+
});
|
|
68
|
+
break;
|
|
69
|
+
case types_1.LogicOperator.notIn:
|
|
70
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
71
|
+
...Filters.where[0],
|
|
72
|
+
...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.In)(value)) }
|
|
73
|
+
});
|
|
74
|
+
break;
|
|
75
|
+
case types_1.LogicOperator.exists:
|
|
76
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
77
|
+
...Filters.where[0],
|
|
78
|
+
...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) }
|
|
79
|
+
});
|
|
80
|
+
break;
|
|
81
|
+
case types_1.LogicOperator.notExists:
|
|
82
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
83
|
+
...Filters.where[0],
|
|
84
|
+
...{ [element]: (0, typeorm_1.IsNull)() }
|
|
85
|
+
});
|
|
86
|
+
break;
|
|
87
|
+
case types_1.LogicOperator.regexp:
|
|
88
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
89
|
+
...Filters.where[0],
|
|
90
|
+
...{ [element]: (0, typeorm_1.Like)(value) }
|
|
91
|
+
});
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const condition of rootLevelConditions) {
|
|
96
|
+
const { element, operator, value } = condition;
|
|
97
|
+
switch (operator) {
|
|
98
|
+
case types_1.LogicOperator.equals:
|
|
99
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
100
|
+
...Filters.where[0],
|
|
101
|
+
...{ [element]: (0, typeorm_1.Equal)(value) }
|
|
102
|
+
});
|
|
103
|
+
break;
|
|
104
|
+
case types_1.LogicOperator.isNot:
|
|
105
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
106
|
+
...Filters.where[0],
|
|
107
|
+
...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.Equal)(value)) }
|
|
108
|
+
});
|
|
109
|
+
break;
|
|
110
|
+
case types_1.LogicOperator.greaterThan:
|
|
111
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
112
|
+
...Filters.where[0],
|
|
113
|
+
...{ [element]: (0, typeorm_1.MoreThan)(value) }
|
|
114
|
+
});
|
|
115
|
+
break;
|
|
116
|
+
case types_1.LogicOperator.greaterOrEqualThan:
|
|
117
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
118
|
+
...Filters.where[0],
|
|
119
|
+
...{ [element]: (0, typeorm_1.MoreThanOrEqual)(value) }
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
case types_1.LogicOperator.lessThan:
|
|
123
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
124
|
+
...Filters.where[0],
|
|
125
|
+
...{ [element]: (0, typeorm_1.LessThan)(value) }
|
|
126
|
+
});
|
|
127
|
+
break;
|
|
128
|
+
case types_1.LogicOperator.lessOrEqualThan:
|
|
129
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
130
|
+
...Filters.where[0],
|
|
131
|
+
...{ [element]: (0, typeorm_1.LessThanOrEqual)(value) }
|
|
132
|
+
});
|
|
133
|
+
break;
|
|
134
|
+
case types_1.LogicOperator.in:
|
|
135
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
136
|
+
...Filters.where[0],
|
|
137
|
+
...{ [element]: (0, typeorm_1.In)(value) }
|
|
138
|
+
});
|
|
139
|
+
break;
|
|
140
|
+
case types_1.LogicOperator.notIn:
|
|
141
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
142
|
+
...Filters.where[0],
|
|
143
|
+
...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.In)(value)) }
|
|
144
|
+
});
|
|
145
|
+
break;
|
|
146
|
+
case types_1.LogicOperator.exists:
|
|
147
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
148
|
+
...Filters.where[0],
|
|
149
|
+
...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) }
|
|
150
|
+
});
|
|
151
|
+
break;
|
|
152
|
+
case types_1.LogicOperator.notExists:
|
|
153
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
154
|
+
...Filters.where[0],
|
|
155
|
+
...{ [element]: (0, typeorm_1.IsNull)() }
|
|
156
|
+
});
|
|
157
|
+
break;
|
|
158
|
+
case types_1.LogicOperator.regexp:
|
|
159
|
+
Filters.where[0] = js_utils_1.Objects.nest({
|
|
160
|
+
...Filters.where[0],
|
|
161
|
+
...{ [element]: (0, typeorm_1.Like)(value) }
|
|
162
|
+
});
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
for (const condition of orConditions) {
|
|
167
|
+
const { element, operator, value } = condition;
|
|
168
|
+
switch (operator) {
|
|
169
|
+
case types_1.LogicOperator.equals:
|
|
170
|
+
Filters.where.push({ [element]: (0, typeorm_1.Equal)(value) });
|
|
171
|
+
break;
|
|
172
|
+
case types_1.LogicOperator.isNot:
|
|
173
|
+
Filters.where.push({ [element]: (0, typeorm_1.Not)((0, typeorm_1.Equal)(value)) });
|
|
174
|
+
break;
|
|
175
|
+
case types_1.LogicOperator.greaterThan:
|
|
176
|
+
Filters.where.push({ [element]: (0, typeorm_1.MoreThan)(value) });
|
|
177
|
+
break;
|
|
178
|
+
case types_1.LogicOperator.greaterOrEqualThan:
|
|
179
|
+
Filters.where.push({ [element]: (0, typeorm_1.MoreThanOrEqual)(value) });
|
|
180
|
+
break;
|
|
181
|
+
case types_1.LogicOperator.lessThan:
|
|
182
|
+
Filters.where.push({ [element]: (0, typeorm_1.LessThan)(value) });
|
|
183
|
+
break;
|
|
184
|
+
case types_1.LogicOperator.lessOrEqualThan:
|
|
185
|
+
Filters.where.push({ [element]: (0, typeorm_1.LessThanOrEqual)(value) });
|
|
186
|
+
break;
|
|
187
|
+
case types_1.LogicOperator.in:
|
|
188
|
+
Filters.where.push({ [element]: (0, typeorm_1.In)(value) });
|
|
189
|
+
break;
|
|
190
|
+
case types_1.LogicOperator.notIn:
|
|
191
|
+
Filters.where.push({ [element]: (0, typeorm_1.Not)((0, typeorm_1.In)(value)) });
|
|
192
|
+
break;
|
|
193
|
+
case types_1.LogicOperator.exists:
|
|
194
|
+
Filters.where.push({ [element]: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) });
|
|
195
|
+
break;
|
|
196
|
+
case types_1.LogicOperator.notExists:
|
|
197
|
+
Filters.where.push({ [element]: (0, typeorm_1.IsNull)() });
|
|
198
|
+
break;
|
|
199
|
+
case types_1.LogicOperator.regexp:
|
|
200
|
+
Filters.where.push({ [element]: (0, typeorm_1.Like)(value) });
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const filtered = (0, clearEmpties_1.clearEmpties)(Filters.where);
|
|
205
|
+
return filtered;
|
|
206
|
+
};
|
|
207
|
+
exports.getTypeOrmWhere = getTypeOrmWhere;
|
|
@@ -21,7 +21,7 @@ export declare const BreedSchema: z.ZodObject<{
|
|
|
21
21
|
}>;
|
|
22
22
|
export declare const GoatSchema: z.ZodObject<{
|
|
23
23
|
id: z.ZodOptional<z.ZodString>;
|
|
24
|
-
name: z.ZodString
|
|
24
|
+
name: z.ZodOptional<z.ZodString>;
|
|
25
25
|
age: z.ZodNumber;
|
|
26
26
|
breed: z.ZodOptional<z.ZodObject<{
|
|
27
27
|
family: z.ZodString;
|
|
@@ -35,19 +35,19 @@ export declare const GoatSchema: z.ZodObject<{
|
|
|
35
35
|
}>>;
|
|
36
36
|
}, "strip", z.ZodTypeAny, {
|
|
37
37
|
id?: string | undefined;
|
|
38
|
+
name?: string | undefined;
|
|
38
39
|
breed?: {
|
|
39
40
|
family: string;
|
|
40
41
|
members: number;
|
|
41
42
|
} | undefined;
|
|
42
|
-
name: string;
|
|
43
43
|
age: number;
|
|
44
44
|
}, {
|
|
45
45
|
id?: string | undefined;
|
|
46
|
+
name?: string | undefined;
|
|
46
47
|
breed?: {
|
|
47
48
|
family: string;
|
|
48
49
|
members: number;
|
|
49
50
|
} | undefined;
|
|
50
|
-
name: string;
|
|
51
51
|
age: number;
|
|
52
52
|
}>;
|
|
53
53
|
export declare type GoatInputSchema = z.infer<typeof GoatSchema>;
|
|
@@ -47,7 +47,7 @@ exports.BreedSchema = zod_1.z.object({
|
|
|
47
47
|
});
|
|
48
48
|
exports.GoatSchema = zod_1.z.object({
|
|
49
49
|
id: zod_1.z.string().optional(),
|
|
50
|
-
name: zod_1.z.string(),
|
|
50
|
+
name: zod_1.z.string().optional(),
|
|
51
51
|
age: zod_1.z.number(),
|
|
52
52
|
breed: exports.BreedSchema.optional()
|
|
53
53
|
});
|
|
@@ -57,8 +57,7 @@ function startDockerContainer(options) {
|
|
|
57
57
|
`${options.externalPort}:${options.internalPort}`,
|
|
58
58
|
...(options.detached ? ['--detach'] : []),
|
|
59
59
|
...envArgs,
|
|
60
|
-
options.image
|
|
61
|
-
'--default_authentication_plugin=mysql_native_password'
|
|
60
|
+
options.image
|
|
62
61
|
], {
|
|
63
62
|
stdio: options.debug ? 'inherit' : 'ignore'
|
|
64
63
|
});
|
|
@@ -141,8 +140,8 @@ async function startContainer(options) {
|
|
|
141
140
|
return {
|
|
142
141
|
proc,
|
|
143
142
|
externalPort,
|
|
144
|
-
async
|
|
145
|
-
await killOldContainers(options);
|
|
143
|
+
kill: async () => {
|
|
144
|
+
return await killOldContainers(options);
|
|
146
145
|
}
|
|
147
146
|
};
|
|
148
147
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Options as WithContainerOptions } from './docker';
|
|
2
|
+
export interface Options extends Omit<WithContainerOptions, 'internalPort' | 'enableDebugInstructions' | 'testConnection'> {
|
|
3
|
+
mongoUser: string;
|
|
4
|
+
mongoPassword: string;
|
|
5
|
+
mongoDb: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function waitForConnection(databaseURL: string, timeoutSeconds: number): Promise<void>;
|
|
8
|
+
export default function getDatabase(options?: Partial<Options>): Promise<{
|
|
9
|
+
proc: any;
|
|
10
|
+
databaseURL: string;
|
|
11
|
+
kill: () => Promise<void>;
|
|
12
|
+
user: string;
|
|
13
|
+
password: string;
|
|
14
|
+
port: number;
|
|
15
|
+
dbName: string;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitForConnection = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const docker_1 = tslib_1.__importDefault(require("./docker"));
|
|
6
|
+
const mongodb_1 = require("mongodb");
|
|
7
|
+
const DEFAULT_IMAGE = 'mongo:6.0.1';
|
|
8
|
+
const DEFAULT_CONTAINER_NAME = `fluent-${DEFAULT_IMAGE.replace(':', '-')}-test`;
|
|
9
|
+
const DEFAULT_CONNECT_TIMEOUT_SECONDS = 10;
|
|
10
|
+
const DEFAULT_MONGO_PORT = 27017;
|
|
11
|
+
const DEFAULT_MONGO_USER = 'test-user';
|
|
12
|
+
const DEFAULT_MONGO_PASSWORD = 'password';
|
|
13
|
+
const DEFAULT_MONGO_DB = 'test-db';
|
|
14
|
+
const DEFAULT_MONGO_DEBUG = false;
|
|
15
|
+
async function waitForConnection(databaseURL, timeoutSeconds) {
|
|
16
|
+
const start = Date.now();
|
|
17
|
+
const timeoutMilliseconds = timeoutSeconds * 1000;
|
|
18
|
+
let lastAttempt = false;
|
|
19
|
+
while (true) {
|
|
20
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
21
|
+
const conn = new mongodb_1.MongoClient(databaseURL);
|
|
22
|
+
try {
|
|
23
|
+
try {
|
|
24
|
+
await conn.connect();
|
|
25
|
+
const db = conn.db('anyDB');
|
|
26
|
+
const result = await db.command({
|
|
27
|
+
ping: 1
|
|
28
|
+
});
|
|
29
|
+
if (result.ok) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
if (lastAttempt) {
|
|
34
|
+
throw new Error('Got unexpected result: ' + JSON.stringify(result));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (ex) {
|
|
39
|
+
console.log(ex);
|
|
40
|
+
if (lastAttempt) {
|
|
41
|
+
throw ex;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await conn.close();
|
|
47
|
+
}
|
|
48
|
+
if (Date.now() - timeoutMilliseconds > start) {
|
|
49
|
+
lastAttempt = true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.waitForConnection = waitForConnection;
|
|
54
|
+
async function getDatabase(options = {}) {
|
|
55
|
+
const { mongoUser, mongoPassword, mongoDb, environment, ...rawOptions } = {
|
|
56
|
+
debug: DEFAULT_MONGO_DEBUG,
|
|
57
|
+
image: DEFAULT_IMAGE,
|
|
58
|
+
containerName: DEFAULT_CONTAINER_NAME,
|
|
59
|
+
connectTimeoutSeconds: DEFAULT_CONNECT_TIMEOUT_SECONDS,
|
|
60
|
+
mongoUser: DEFAULT_MONGO_USER,
|
|
61
|
+
mongoPassword: DEFAULT_MONGO_PASSWORD,
|
|
62
|
+
mongoDb: DEFAULT_MONGO_DB,
|
|
63
|
+
defaultExternalPort: DEFAULT_MONGO_PORT,
|
|
64
|
+
...options
|
|
65
|
+
};
|
|
66
|
+
const { proc, externalPort, kill } = await (0, docker_1.default)({
|
|
67
|
+
...rawOptions,
|
|
68
|
+
internalPort: DEFAULT_MONGO_PORT,
|
|
69
|
+
environment: {
|
|
70
|
+
MONGO_HOST: '127.0.0.1',
|
|
71
|
+
...environment,
|
|
72
|
+
MONGO_INITDB_ROOT_USERNAME: mongoUser,
|
|
73
|
+
MONGO_INITDB_ROOT_PASSWORD: mongoPassword,
|
|
74
|
+
MONGO_DB_USER: mongoUser,
|
|
75
|
+
MONGO_DB_PASSWORD: mongoPassword,
|
|
76
|
+
MONGO_PASSWORD: mongoPassword,
|
|
77
|
+
MONGO_INITDB_DATABASE: mongoDb
|
|
78
|
+
},
|
|
79
|
+
enableDebugInstructions: `To view logs, run with MONGO_TEST_DEBUG=true environment variable.`
|
|
80
|
+
});
|
|
81
|
+
const databaseURL = `mongodb://${mongoUser}:${mongoPassword}@localhost:${externalPort}`;
|
|
82
|
+
await waitForConnection(databaseURL, rawOptions.connectTimeoutSeconds);
|
|
83
|
+
return {
|
|
84
|
+
proc,
|
|
85
|
+
databaseURL,
|
|
86
|
+
kill,
|
|
87
|
+
user: mongoUser,
|
|
88
|
+
password: mongoPassword,
|
|
89
|
+
port: externalPort,
|
|
90
|
+
dbName: mongoDb
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
exports.default = getDatabase;
|
|
@@ -5,7 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const docker_1 = tslib_1.__importStar(require("./docker"));
|
|
6
6
|
const { createConnection } = require('mysql2');
|
|
7
7
|
const DEFAULT_IMAGE = 'mysql:8.0';
|
|
8
|
-
const DEFAULT_CONTAINER_NAME = '
|
|
8
|
+
const DEFAULT_CONTAINER_NAME = `fluent-${DEFAULT_IMAGE.replace(':', '-')}-test`;
|
|
9
9
|
const DEFAULT_CONNECT_TIMEOUT_SECONDS = 10;
|
|
10
10
|
const DEFAULT_MYSQL_PORT = 3306;
|
|
11
11
|
const DEFAULT_MYSQL_USER = 'test-user';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { TypeOrmConnector } from '../../TypeOrmConnector';
|
|
2
2
|
import { CarsEntity } from '../relations/car/car.entity';
|
|
3
|
-
import {
|
|
3
|
+
import { CarDtoOutput } from '../relations/car/car.output.schema';
|
|
4
|
+
import { CarDtoInput } from '../relations/car/car.schema';
|
|
4
5
|
import { UserRepository } from './user.mongo.repository';
|
|
5
|
-
export declare class CarsRepository extends TypeOrmConnector<CarsEntity,
|
|
6
|
+
export declare class CarsRepository extends TypeOrmConnector<CarsEntity, CarDtoInput, CarDtoOutput> {
|
|
6
7
|
constructor();
|
|
7
8
|
user: () => UserRepository;
|
|
9
|
+
anotherRelation: () => UserRepository;
|
|
8
10
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CarsRepository = void 0;
|
|
4
4
|
const TypeOrmConnector_1 = require("../../TypeOrmConnector");
|
|
5
5
|
const car_entity_1 = require("../relations/car/car.entity");
|
|
6
|
+
const car_output_schema_1 = require("../relations/car/car.output.schema");
|
|
6
7
|
const car_schema_1 = require("../relations/car/car.schema");
|
|
7
8
|
const user_entity_1 = require("../relations/user/user.entity");
|
|
8
9
|
const mongoDatasource_1 = require("./mongoDatasource");
|
|
@@ -12,12 +13,16 @@ class CarsRepository extends TypeOrmConnector_1.TypeOrmConnector {
|
|
|
12
13
|
super({
|
|
13
14
|
entity: car_entity_1.CarsEntity,
|
|
14
15
|
dataSource: mongoDatasource_1.MongoDataSource,
|
|
15
|
-
inputSchema: car_schema_1.
|
|
16
|
+
inputSchema: car_schema_1.carInputSchema,
|
|
17
|
+
outputSchema: car_output_schema_1.carOutputSchema
|
|
16
18
|
});
|
|
17
19
|
this.user = () => this.belongsTo({
|
|
18
20
|
repository: user_mongo_repository_1.UserRepository,
|
|
19
21
|
model: user_entity_1.UsersEntity
|
|
20
22
|
});
|
|
23
|
+
this.anotherRelation = () => this.belongsTo({
|
|
24
|
+
repository: user_mongo_repository_1.UserRepository
|
|
25
|
+
});
|
|
21
26
|
}
|
|
22
27
|
}
|
|
23
28
|
exports.CarsRepository = CarsRepository;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { TypeOrmConnector } from '../../TypeOrmConnector';
|
|
2
|
-
import {
|
|
2
|
+
import { RoleDtoInput } from '../relations/roles/role.schema';
|
|
3
3
|
import { RoleEntity } from '../relations/roles/roles.entity';
|
|
4
4
|
import { UserRepository } from './user.mongo.repository';
|
|
5
|
-
|
|
5
|
+
import { RoleDtoOut } from '../relations/roles/role.output.schema';
|
|
6
|
+
export declare class RoleRepository extends TypeOrmConnector<RoleEntity, RoleDtoInput, RoleDtoOut> {
|
|
6
7
|
constructor();
|
|
7
8
|
users: () => UserRepository;
|
|
8
9
|
}
|
|
@@ -7,12 +7,14 @@ const roles_user_mongo_repository_1 = require("./roles_user.mongo.repository");
|
|
|
7
7
|
const roles_entity_1 = require("../relations/roles/roles.entity");
|
|
8
8
|
const mongoDatasource_1 = require("./mongoDatasource");
|
|
9
9
|
const user_mongo_repository_1 = require("./user.mongo.repository");
|
|
10
|
+
const role_output_schema_1 = require("../relations/roles/role.output.schema");
|
|
10
11
|
class RoleRepository extends TypeOrmConnector_1.TypeOrmConnector {
|
|
11
12
|
constructor() {
|
|
12
13
|
super({
|
|
13
14
|
entity: roles_entity_1.RoleEntity,
|
|
14
15
|
dataSource: mongoDatasource_1.MongoDataSource,
|
|
15
|
-
inputSchema: role_schema_1.
|
|
16
|
+
inputSchema: role_schema_1.RoleInputSchema,
|
|
17
|
+
outputSchema: role_output_schema_1.RoleOuputSchema
|
|
16
18
|
});
|
|
17
19
|
this.users = () => this.belongsToMany({
|
|
18
20
|
repository: user_mongo_repository_1.UserRepository,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TypeOrmConnector } from '../../TypeOrmConnector';
|
|
2
2
|
import { UsersEntity } from '../relations/user/user.entity';
|
|
3
|
-
import {
|
|
3
|
+
import { UsersDtoIn, UsersDtoOut } from '../relations/user/user.schema';
|
|
4
4
|
import { CarsRepository } from './car.mongo.repository';
|
|
5
5
|
import { RoleRepository } from './roles.mongo.repository';
|
|
6
|
-
export declare class UserRepository extends TypeOrmConnector<UsersEntity,
|
|
6
|
+
export declare class UserRepository extends TypeOrmConnector<UsersEntity, UsersDtoIn, UsersDtoOut> {
|
|
7
7
|
constructor();
|
|
8
8
|
cars: () => CarsRepository;
|
|
9
9
|
roles: () => RoleRepository;
|
|
@@ -14,7 +14,8 @@ class UserRepository extends TypeOrmConnector_1.TypeOrmConnector {
|
|
|
14
14
|
super({
|
|
15
15
|
entity: user_entity_1.UsersEntity,
|
|
16
16
|
dataSource: mongoDatasource_1.MongoDataSource,
|
|
17
|
-
inputSchema: user_schema_1.
|
|
17
|
+
inputSchema: user_schema_1.userInputSchema,
|
|
18
|
+
outputSchema: user_schema_1.userOutputSchema
|
|
18
19
|
});
|
|
19
20
|
this.cars = () => {
|
|
20
21
|
return this.hasMany({
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { TypeOrmConnector } from '../../TypeOrmConnector';
|
|
2
2
|
import { CarsEntity } from '../relations/car/car.entity';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { CarDtoOutput } from '../relations/car/car.output.schema';
|
|
4
|
+
import { CarDtoInput } from '../relations/car/car.schema';
|
|
5
|
+
import { UserRepository } from './user.mysql.repository';
|
|
6
|
+
export declare class CarsRepository extends TypeOrmConnector<CarsEntity, CarDtoInput, CarDtoOutput> {
|
|
5
7
|
constructor();
|
|
8
|
+
user: () => UserRepository;
|
|
9
|
+
anotherRelation: () => UserRepository;
|
|
6
10
|
}
|
|
@@ -3,14 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CarsRepository = void 0;
|
|
4
4
|
const TypeOrmConnector_1 = require("../../TypeOrmConnector");
|
|
5
5
|
const car_entity_1 = require("../relations/car/car.entity");
|
|
6
|
+
const car_output_schema_1 = require("../relations/car/car.output.schema");
|
|
6
7
|
const car_schema_1 = require("../relations/car/car.schema");
|
|
7
8
|
const mysqlDataSource_1 = require("./mysqlDataSource");
|
|
9
|
+
const user_mysql_repository_1 = require("./user.mysql.repository");
|
|
8
10
|
class CarsRepository extends TypeOrmConnector_1.TypeOrmConnector {
|
|
9
11
|
constructor() {
|
|
10
12
|
super({
|
|
11
13
|
entity: car_entity_1.CarsEntity,
|
|
12
14
|
dataSource: mysqlDataSource_1.MYSQLDataSource,
|
|
13
|
-
inputSchema: car_schema_1.
|
|
15
|
+
inputSchema: car_schema_1.carInputSchema,
|
|
16
|
+
outputSchema: car_output_schema_1.carOutputSchema
|
|
17
|
+
});
|
|
18
|
+
this.user = () => this.belongsTo({
|
|
19
|
+
repository: user_mysql_repository_1.UserRepository
|
|
20
|
+
});
|
|
21
|
+
this.anotherRelation = () => this.belongsTo({
|
|
22
|
+
repository: user_mysql_repository_1.UserRepository
|
|
14
23
|
});
|
|
15
24
|
}
|
|
16
25
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { TypeOrmConnector } from '../../TypeOrmConnector';
|
|
2
|
-
import {
|
|
2
|
+
import { RoleDtoInput } from '../relations/roles/role.schema';
|
|
3
3
|
import { RoleEntity } from '../relations/roles/roles.entity';
|
|
4
4
|
import { UserRepository } from './user.mysql.repository';
|
|
5
|
-
|
|
5
|
+
import { RoleDtoOut } from '../relations/roles/role.output.schema';
|
|
6
|
+
export declare class RoleRepository extends TypeOrmConnector<RoleEntity, RoleDtoInput, RoleDtoOut> {
|
|
6
7
|
constructor();
|
|
7
8
|
users: () => UserRepository;
|
|
8
9
|
}
|
|
@@ -7,12 +7,14 @@ const roles_entity_1 = require("../relations/roles/roles.entity");
|
|
|
7
7
|
const mysqlDataSource_1 = require("./mysqlDataSource");
|
|
8
8
|
const user_mysql_repository_1 = require("./user.mysql.repository");
|
|
9
9
|
const roles_user_mysql_repository_1 = require("./roles_user.mysql.repository");
|
|
10
|
+
const role_output_schema_1 = require("../relations/roles/role.output.schema");
|
|
10
11
|
class RoleRepository extends TypeOrmConnector_1.TypeOrmConnector {
|
|
11
12
|
constructor() {
|
|
12
13
|
super({
|
|
13
14
|
entity: roles_entity_1.RoleEntity,
|
|
14
15
|
dataSource: mysqlDataSource_1.MYSQLDataSource,
|
|
15
|
-
inputSchema: role_schema_1.
|
|
16
|
+
inputSchema: role_schema_1.RoleInputSchema,
|
|
17
|
+
outputSchema: role_output_schema_1.RoleOuputSchema
|
|
16
18
|
});
|
|
17
19
|
this.users = () => this.belongsToMany({
|
|
18
20
|
repository: user_mysql_repository_1.UserRepository,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TypeOrmConnector } from '../../TypeOrmConnector';
|
|
2
2
|
import { UsersEntity } from '../relations/user/user.entity';
|
|
3
|
-
import {
|
|
3
|
+
import { UsersDtoIn, UsersDtoOut } from '../relations/user/user.schema';
|
|
4
4
|
import { CarsRepository } from './car.mysql.repository';
|
|
5
5
|
import { RoleRepository } from './roles.mysql.repository';
|
|
6
|
-
export declare class UserRepository extends TypeOrmConnector<UsersEntity,
|
|
6
|
+
export declare class UserRepository extends TypeOrmConnector<UsersEntity, UsersDtoIn, UsersDtoOut> {
|
|
7
7
|
constructor();
|
|
8
8
|
cars: () => CarsRepository;
|
|
9
9
|
roles: () => RoleRepository;
|
|
@@ -14,7 +14,8 @@ class UserRepository extends TypeOrmConnector_1.TypeOrmConnector {
|
|
|
14
14
|
super({
|
|
15
15
|
entity: user_entity_1.UsersEntity,
|
|
16
16
|
dataSource: mysqlDataSource_1.MYSQLDataSource,
|
|
17
|
-
inputSchema: user_schema_1.
|
|
17
|
+
inputSchema: user_schema_1.userInputSchema,
|
|
18
|
+
outputSchema: user_schema_1.userOutputSchema
|
|
18
19
|
});
|
|
19
20
|
this.cars = () => {
|
|
20
21
|
return this.hasMany({
|
|
@@ -26,14 +26,6 @@ tslib_1.__decorate([
|
|
|
26
26
|
}),
|
|
27
27
|
tslib_1.__metadata("design:type", user_entity_1.UsersEntity)
|
|
28
28
|
], CarsEntity.prototype, "user", void 0);
|
|
29
|
-
tslib_1.__decorate([
|
|
30
|
-
decorators_1.f.belongsTo({
|
|
31
|
-
entity: () => user_entity_1.UsersEntity,
|
|
32
|
-
inverse: user => user.cars,
|
|
33
|
-
pivotColumnName: 'userId'
|
|
34
|
-
}),
|
|
35
|
-
tslib_1.__metadata("design:type", user_entity_1.UsersEntity)
|
|
36
|
-
], CarsEntity.prototype, "anotherRelation", void 0);
|
|
37
29
|
CarsEntity = tslib_1.__decorate([
|
|
38
30
|
decorators_1.f.entity('cars')
|
|
39
31
|
], CarsEntity);
|