@uql/core 0.4.80 → 0.4.83
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 +11 -11
- package/dialect/abstractSqlDialect-spec.d.ts +49 -0
- package/dialect/abstractSqlDialect-spec.js +765 -0
- package/dialect/abstractSqlDialect.js +11 -17
- package/dialect/mysqlDialect.js +2 -2
- package/dialect/mysqlDialect.spec.d.ts +6 -0
- package/dialect/mysqlDialect.spec.js +33 -0
- package/dialect/postgresDialect.js +2 -2
- package/dialect/postgresDialect.spec.d.ts +1 -0
- package/dialect/postgresDialect.spec.js +139 -0
- package/dialect/sqliteDialect.spec.d.ts +1 -0
- package/dialect/sqliteDialect.spec.js +12 -0
- package/entity/decorator/definition.js +22 -24
- package/entity/decorator/definition.spec.d.ts +1 -0
- package/entity/decorator/definition.spec.js +725 -0
- package/entity/decorator/relation.spec.d.ts +1 -0
- package/entity/decorator/relation.spec.js +55 -0
- package/options.js +2 -2
- package/options.spec.d.ts +1 -0
- package/options.spec.js +50 -0
- package/package.json +3 -3
- package/querier/abstractQuerier-it.d.ts +41 -0
- package/querier/abstractQuerier-it.js +410 -0
- package/querier/abstractSqlQuerier-it.d.ts +9 -0
- package/querier/abstractSqlQuerier-it.js +19 -0
- package/querier/abstractSqlQuerier-spec.d.ts +53 -0
- package/querier/abstractSqlQuerier-spec.js +607 -0
- package/querier/abstractSqlQuerier.js +2 -3
- package/querier/decorator/injectQuerier.js +2 -3
- package/querier/decorator/injectQuerier.spec.d.ts +1 -0
- package/querier/decorator/injectQuerier.spec.js +108 -0
- package/querier/decorator/transactional.js +2 -2
- package/querier/decorator/transactional.spec.d.ts +1 -0
- package/querier/decorator/transactional.spec.js +241 -0
- package/repository/genericRepository.spec.d.ts +1 -0
- package/repository/genericRepository.spec.js +86 -0
- package/test/entityMock.d.ts +180 -0
- package/test/entityMock.js +451 -0
- package/test/index.d.ts +3 -0
- package/test/index.js +7 -0
- package/test/it.util.d.ts +4 -0
- package/test/it.util.js +60 -0
- package/test/spec.util.d.ts +13 -0
- package/test/spec.util.js +54 -0
- package/type/entity.d.ts +12 -17
- package/type/entity.js +1 -1
- package/type/utility.d.ts +3 -2
- package/type/utility.js +1 -1
- package/util/dialect.util.js +2 -3
- package/util/dialect.util.spec.d.ts +1 -0
- package/util/dialect.util.spec.js +23 -0
- package/util/object.util.spec.d.ts +1 -0
- package/util/object.util.spec.js +26 -0
- package/util/sql.util.spec.d.ts +1 -0
- package/util/sql.util.spec.js +164 -0
- package/util/string.util.spec.d.ts +1 -0
- package/util/string.util.spec.js +26 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractQuerierIt = void 0;
|
|
4
|
+
const entity_1 = require("@uql/core/entity");
|
|
5
|
+
const test_1 = require("@uql/core/test");
|
|
6
|
+
class AbstractQuerierIt {
|
|
7
|
+
constructor(pool) {
|
|
8
|
+
this.pool = pool;
|
|
9
|
+
}
|
|
10
|
+
async beforeAll() {
|
|
11
|
+
this.querier = await this.pool.getQuerier();
|
|
12
|
+
await this.dropTables();
|
|
13
|
+
await this.createTables();
|
|
14
|
+
await this.querier.release();
|
|
15
|
+
}
|
|
16
|
+
async beforeEach() {
|
|
17
|
+
this.querier = await this.pool.getQuerier();
|
|
18
|
+
await this.clearTables();
|
|
19
|
+
}
|
|
20
|
+
async afterEach() {
|
|
21
|
+
await this.querier.release();
|
|
22
|
+
}
|
|
23
|
+
async afterAll() {
|
|
24
|
+
await this.pool.end();
|
|
25
|
+
}
|
|
26
|
+
shouldGetRepository() {
|
|
27
|
+
const repository = this.querier.getRepository(test_1.User);
|
|
28
|
+
expect(repository).toBeDefined();
|
|
29
|
+
}
|
|
30
|
+
async shouldInsertMany() {
|
|
31
|
+
const ids = await this.querier.insertMany(test_1.User, [
|
|
32
|
+
{
|
|
33
|
+
name: 'Some Name A',
|
|
34
|
+
email: 'someemaila@example.com',
|
|
35
|
+
password: '123456789a!',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Some Name B',
|
|
39
|
+
email: 'someemailb@example.com',
|
|
40
|
+
password: '123456789b!',
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
expect(ids).toHaveLength(2);
|
|
44
|
+
for (const id of ids) {
|
|
45
|
+
expect(id).toBeDefined();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async shouldInsertOne() {
|
|
49
|
+
const creatorId = await this.querier.insertOne(test_1.User, {
|
|
50
|
+
name: 'Some Name C',
|
|
51
|
+
email: 'someemailc@example.com',
|
|
52
|
+
password: '123456789z!',
|
|
53
|
+
});
|
|
54
|
+
expect(creatorId).toBeDefined();
|
|
55
|
+
const companyId = await this.querier.insertOne(test_1.Company, {
|
|
56
|
+
name: 'Some Name C',
|
|
57
|
+
creatorId,
|
|
58
|
+
});
|
|
59
|
+
expect(companyId).toBeDefined();
|
|
60
|
+
const taxCategoryId = await this.querier.insertOne(test_1.TaxCategory, {
|
|
61
|
+
name: 'Some Name C',
|
|
62
|
+
description: 'Some Description Z',
|
|
63
|
+
creatorId,
|
|
64
|
+
companyId,
|
|
65
|
+
});
|
|
66
|
+
expect(taxCategoryId).toBeDefined();
|
|
67
|
+
}
|
|
68
|
+
async shouldInsertOneWithOnInsertId() {
|
|
69
|
+
const id1 = await this.querier.insertOne(test_1.TaxCategory, {
|
|
70
|
+
name: 'Some Name',
|
|
71
|
+
});
|
|
72
|
+
const id2 = await this.querier.insertOne(test_1.TaxCategory, {
|
|
73
|
+
pk: '123',
|
|
74
|
+
name: 'Some Name',
|
|
75
|
+
});
|
|
76
|
+
expect(id1).toBeDefined();
|
|
77
|
+
expect(id2).toBeDefined();
|
|
78
|
+
}
|
|
79
|
+
async shouldInsertManyWithSpecifiedIdsAndOnInsertIdAsDefault() {
|
|
80
|
+
const ids = await this.querier.insertMany(test_1.TaxCategory, [
|
|
81
|
+
{
|
|
82
|
+
name: 'Some Name A',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
pk: '50',
|
|
86
|
+
name: 'Some Name B',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'Some Name C',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
pk: '70',
|
|
93
|
+
name: 'Some Name D',
|
|
94
|
+
},
|
|
95
|
+
]);
|
|
96
|
+
expect(ids).toHaveLength(4);
|
|
97
|
+
for (const id of ids) {
|
|
98
|
+
expect(id).toBeDefined();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async shouldInsertManyWithAutoIncrementIdAsDefault() {
|
|
102
|
+
const ids = await this.querier.insertMany(test_1.LedgerAccount, [
|
|
103
|
+
{
|
|
104
|
+
name: 'Some Name A',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'Some Name B',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'Some Name C',
|
|
111
|
+
},
|
|
112
|
+
]);
|
|
113
|
+
expect(ids).toHaveLength(3);
|
|
114
|
+
for (const id of ids) {
|
|
115
|
+
expect(id).toBeDefined();
|
|
116
|
+
}
|
|
117
|
+
const founds = await this.querier.findMany(test_1.LedgerAccount, {});
|
|
118
|
+
expect(founds.map(({ id }) => id)).toEqual(ids);
|
|
119
|
+
}
|
|
120
|
+
async shouldInsertOneAndCascadeOneToOne() {
|
|
121
|
+
const payload = {
|
|
122
|
+
name: 'Some Name D',
|
|
123
|
+
createdAt: 123,
|
|
124
|
+
profile: { picture: 'abc', createdAt: 123 },
|
|
125
|
+
};
|
|
126
|
+
const id = await this.querier.insertOne(test_1.User, payload);
|
|
127
|
+
expect(id).toBeDefined();
|
|
128
|
+
const found = await this.querier.findOneById(test_1.User, id, { $project: ['profile'] });
|
|
129
|
+
expect(found).toMatchObject({ id, profile: payload.profile });
|
|
130
|
+
}
|
|
131
|
+
async shouldInsertOneAndCascadeManyToOne() {
|
|
132
|
+
const payload = {
|
|
133
|
+
name: 'Centimeter',
|
|
134
|
+
createdAt: 123,
|
|
135
|
+
category: { name: 'Metric', createdAt: 123 },
|
|
136
|
+
};
|
|
137
|
+
const id = await this.querier.insertOne(test_1.MeasureUnit, payload);
|
|
138
|
+
expect(id).toBeDefined();
|
|
139
|
+
const found = await this.querier.findOneById(test_1.MeasureUnit, id, { $project: { category: true } });
|
|
140
|
+
expect(found).toMatchObject({ id, category: payload.category });
|
|
141
|
+
}
|
|
142
|
+
async shouldInsertOneAndCascadeOneToMany() {
|
|
143
|
+
const itemAdjustments = [{ buyPrice: 50 }, { buyPrice: 300 }];
|
|
144
|
+
const date = new Date();
|
|
145
|
+
const inventoryAdjustmentId = await this.querier.insertOne(test_1.InventoryAdjustment, {
|
|
146
|
+
description: 'some description',
|
|
147
|
+
date,
|
|
148
|
+
itemAdjustments,
|
|
149
|
+
});
|
|
150
|
+
expect(inventoryAdjustmentId).toBeDefined();
|
|
151
|
+
const inventoryAdjustmentFound = await this.querier.findOneById(test_1.InventoryAdjustment, inventoryAdjustmentId, {
|
|
152
|
+
$project: { itemAdjustments: true },
|
|
153
|
+
});
|
|
154
|
+
expect(inventoryAdjustmentFound).toMatchObject({
|
|
155
|
+
id: inventoryAdjustmentId,
|
|
156
|
+
itemAdjustments,
|
|
157
|
+
});
|
|
158
|
+
const itemAdjustmentsFound = await this.querier.findMany(test_1.ItemAdjustment, { $filter: { inventoryAdjustmentId } });
|
|
159
|
+
expect(itemAdjustmentsFound).toMatchObject(itemAdjustments);
|
|
160
|
+
}
|
|
161
|
+
async shouldInsertOneAndCascadeOneToManyWithSpecificFields() {
|
|
162
|
+
const itemAdjustments = [{ buyPrice: 50 }, { buyPrice: 300 }];
|
|
163
|
+
const inventoryAdjustmentId = await this.querier.insertOne(test_1.InventoryAdjustment, {
|
|
164
|
+
description: 'some description',
|
|
165
|
+
itemAdjustments: itemAdjustments.slice(),
|
|
166
|
+
});
|
|
167
|
+
expect(inventoryAdjustmentId).toBeDefined();
|
|
168
|
+
const inventoryAdjustmentFound = await this.querier.findOneById(test_1.InventoryAdjustment, inventoryAdjustmentId, {
|
|
169
|
+
$project: { itemAdjustments: ['buyPrice'] },
|
|
170
|
+
});
|
|
171
|
+
expect(inventoryAdjustmentFound).toMatchObject({
|
|
172
|
+
id: inventoryAdjustmentId,
|
|
173
|
+
itemAdjustments,
|
|
174
|
+
});
|
|
175
|
+
const itemAdjustmentsFound = await this.querier.findMany(test_1.ItemAdjustment, { $filter: { inventoryAdjustmentId } });
|
|
176
|
+
expect(itemAdjustmentsFound).toMatchObject(itemAdjustments);
|
|
177
|
+
}
|
|
178
|
+
async shouldUpdateOneAndCascadeOneToMany() {
|
|
179
|
+
const itemAdjustments = [{ buyPrice: 50 }, { buyPrice: 300 }];
|
|
180
|
+
const inventoryAdjustmentId = await this.querier.insertOne(test_1.InventoryAdjustment, {
|
|
181
|
+
description: 'some description',
|
|
182
|
+
});
|
|
183
|
+
expect(inventoryAdjustmentId).toBeDefined();
|
|
184
|
+
const changes = await this.querier.updateOneById(test_1.InventoryAdjustment, inventoryAdjustmentId, {
|
|
185
|
+
itemAdjustments,
|
|
186
|
+
});
|
|
187
|
+
expect(changes).toBe(1);
|
|
188
|
+
const inventoryAdjustmentFound = await this.querier.findOneById(test_1.InventoryAdjustment, inventoryAdjustmentId, {
|
|
189
|
+
$project: { itemAdjustments: ['buyPrice'] },
|
|
190
|
+
});
|
|
191
|
+
expect(inventoryAdjustmentFound).toMatchObject({
|
|
192
|
+
id: inventoryAdjustmentId,
|
|
193
|
+
itemAdjustments,
|
|
194
|
+
});
|
|
195
|
+
const itemAdjustmentsFound = await this.querier.findMany(test_1.ItemAdjustment, { $filter: { inventoryAdjustmentId } });
|
|
196
|
+
expect(itemAdjustmentsFound).toMatchObject(itemAdjustments);
|
|
197
|
+
}
|
|
198
|
+
async shouldUpdateOneByIdAndCascadeOneToManyNull() {
|
|
199
|
+
const id = await this.querier.insertOne(test_1.InventoryAdjustment, { itemAdjustments: [{}, {}] });
|
|
200
|
+
await expect(this.querier.count(test_1.ItemAdjustment)).resolves.toBe(2);
|
|
201
|
+
await this.querier.updateOneById(test_1.InventoryAdjustment, id, {
|
|
202
|
+
itemAdjustments: null,
|
|
203
|
+
});
|
|
204
|
+
await expect(this.querier.count(test_1.ItemAdjustment)).resolves.toBe(0);
|
|
205
|
+
}
|
|
206
|
+
async shouldUpdateManyAndCascadeOneToManyNull() {
|
|
207
|
+
await this.querier.insertOne(test_1.InventoryAdjustment, { itemAdjustments: [{}, {}] });
|
|
208
|
+
await expect(this.querier.count(test_1.ItemAdjustment)).resolves.toBe(2);
|
|
209
|
+
await this.querier.updateMany(test_1.InventoryAdjustment, { $filter: {} }, {
|
|
210
|
+
itemAdjustments: null,
|
|
211
|
+
});
|
|
212
|
+
await expect(this.querier.count(test_1.ItemAdjustment)).resolves.toBe(0);
|
|
213
|
+
}
|
|
214
|
+
async shouldInsertOneAndCascadeManyToMany() {
|
|
215
|
+
const payload = {
|
|
216
|
+
name: 'item one',
|
|
217
|
+
createdAt: 1,
|
|
218
|
+
tags: [
|
|
219
|
+
{
|
|
220
|
+
name: 'tag one',
|
|
221
|
+
createdAt: 1,
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'tag two',
|
|
225
|
+
createdAt: 1,
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
};
|
|
229
|
+
const id = await this.querier.insertOne(test_1.Item, payload);
|
|
230
|
+
expect(id).toBeDefined();
|
|
231
|
+
const foundItem = await this.querier.findOneById(test_1.Item, id, {
|
|
232
|
+
$project: { name: true, createdAt: true, tags: ['name', 'createdAt'] },
|
|
233
|
+
});
|
|
234
|
+
expect(foundItem).toMatchObject({
|
|
235
|
+
id,
|
|
236
|
+
...payload,
|
|
237
|
+
});
|
|
238
|
+
const foundTags = await this.querier.findMany(test_1.Tag, {
|
|
239
|
+
$project: { name: true, createdAt: true, items: ['name', 'createdAt'] },
|
|
240
|
+
});
|
|
241
|
+
delete foundItem.tags;
|
|
242
|
+
expect(foundTags).toMatchObject(payload.tags.map((tag) => ({ ...tag, items: [foundItem] })));
|
|
243
|
+
}
|
|
244
|
+
async shouldUpdateOneAndCascadeManyToMany() {
|
|
245
|
+
const id = await this.querier.insertOne(test_1.Item, { createdAt: 1 });
|
|
246
|
+
const payload = {
|
|
247
|
+
name: 'item one',
|
|
248
|
+
updatedAt: 1,
|
|
249
|
+
tags: [
|
|
250
|
+
{
|
|
251
|
+
name: 'tag one',
|
|
252
|
+
createdAt: 1,
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: 'tag two',
|
|
256
|
+
createdAt: 1,
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
};
|
|
260
|
+
await this.querier.updateOneById(test_1.Item, id, payload);
|
|
261
|
+
const found = await this.querier.findOneById(test_1.Item, id, {
|
|
262
|
+
$project: { name: true, updatedAt: true, tags: true },
|
|
263
|
+
});
|
|
264
|
+
expect(found).toMatchObject({
|
|
265
|
+
id,
|
|
266
|
+
...payload,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
async shouldFindMany() {
|
|
270
|
+
await Promise.all([this.shouldInsertMany(), this.shouldInsertOne()]);
|
|
271
|
+
const users = await this.querier.findMany(test_1.User, {
|
|
272
|
+
$project: ['name'],
|
|
273
|
+
$skip: 1,
|
|
274
|
+
$limit: 2,
|
|
275
|
+
$sort: {
|
|
276
|
+
name: 1,
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
expect(users).toMatchObject([
|
|
280
|
+
{
|
|
281
|
+
name: 'Some Name B',
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: 'Some Name C',
|
|
285
|
+
},
|
|
286
|
+
]);
|
|
287
|
+
}
|
|
288
|
+
async shouldFindOne() {
|
|
289
|
+
await Promise.all([this.shouldInsertMany(), this.shouldInsertOne()]);
|
|
290
|
+
const found = await this.querier.findOne(test_1.User, {
|
|
291
|
+
$project: ['id', 'name', 'email', 'password'],
|
|
292
|
+
$filter: {
|
|
293
|
+
email: 'someemaila@example.com',
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
expect(found).toMatchObject({
|
|
297
|
+
name: 'Some Name A',
|
|
298
|
+
email: 'someemaila@example.com',
|
|
299
|
+
password: '123456789a!',
|
|
300
|
+
});
|
|
301
|
+
const notFound = await this.querier.findOne(test_1.User, {
|
|
302
|
+
$filter: {
|
|
303
|
+
name: 'some name',
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
expect(notFound).toBeUndefined();
|
|
307
|
+
}
|
|
308
|
+
async shouldCount() {
|
|
309
|
+
await expect(this.querier.count(test_1.User, {})).resolves.toBe(0);
|
|
310
|
+
await Promise.all([this.shouldInsertMany(), this.shouldInsertOne()]);
|
|
311
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(3);
|
|
312
|
+
await expect(this.querier.count(test_1.User, { $filter: { companyId: null } })).resolves.toBe(3);
|
|
313
|
+
await expect(this.querier.count(test_1.User, { $filter: { companyId: 1 } })).resolves.toBe(0);
|
|
314
|
+
}
|
|
315
|
+
async shouldUpdateMany() {
|
|
316
|
+
await Promise.all([this.shouldInsertMany(), this.shouldInsertOne()]);
|
|
317
|
+
await expect(this.querier.updateMany(test_1.User, { $filter: { companyId: 1 } }, { companyId: null })).resolves.toBe(0);
|
|
318
|
+
await expect(this.querier.updateMany(test_1.User, { $filter: { companyId: null } }, { companyId: 1 })).resolves.toBe(3);
|
|
319
|
+
await expect(this.querier.updateMany(test_1.User, { $filter: { companyId: 1 } }, { companyId: null })).resolves.toBe(3);
|
|
320
|
+
}
|
|
321
|
+
async shouldThrowWhenRollbackTransactionWithoutBeginTransaction() {
|
|
322
|
+
await expect(this.querier.rollbackTransaction()).rejects.toThrow('not a pending transaction');
|
|
323
|
+
}
|
|
324
|
+
async shouldThrowIfUnknownComparisonOperator() {
|
|
325
|
+
await expect(this.querier.findMany(test_1.User, {
|
|
326
|
+
$filter: { name: { $someInvalidOperator: 'some' } },
|
|
327
|
+
})).rejects.toThrow('unknown operator: $someInvalidOperator');
|
|
328
|
+
}
|
|
329
|
+
async shouldCommit() {
|
|
330
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(0);
|
|
331
|
+
await this.querier.beginTransaction();
|
|
332
|
+
await this.querier.insertOne(test_1.User, {});
|
|
333
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(1);
|
|
334
|
+
await this.querier.commitTransaction();
|
|
335
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(1);
|
|
336
|
+
}
|
|
337
|
+
async shouldRollback() {
|
|
338
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(0);
|
|
339
|
+
await this.querier.beginTransaction();
|
|
340
|
+
await this.querier.insertOne(test_1.User, {});
|
|
341
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(1);
|
|
342
|
+
await this.querier.rollbackTransaction();
|
|
343
|
+
await expect(this.querier.count(test_1.User)).resolves.toBe(0);
|
|
344
|
+
}
|
|
345
|
+
async shouldThrowWhenBeginTransactionAfterBeginTransaction() {
|
|
346
|
+
expect(this.querier.hasOpenTransaction).toBeFalsy();
|
|
347
|
+
await this.querier.beginTransaction();
|
|
348
|
+
expect(this.querier.hasOpenTransaction).toBe(true);
|
|
349
|
+
await expect(this.querier.beginTransaction()).rejects.toThrow('pending transaction');
|
|
350
|
+
await expect(this.querier.release()).rejects.toThrow('pending transaction');
|
|
351
|
+
await this.querier.rollbackTransaction();
|
|
352
|
+
}
|
|
353
|
+
async shouldProjectOneToMany() {
|
|
354
|
+
await Promise.all([this.shouldInsertMany(), this.shouldInsertOne()]);
|
|
355
|
+
const [user, company] = await Promise.all([
|
|
356
|
+
this.querier.findOne(test_1.User, { $project: ['id'] }),
|
|
357
|
+
this.querier.findOne(test_1.Company, { $project: ['id'] }),
|
|
358
|
+
]);
|
|
359
|
+
const [firstItemId, secondItemId] = await this.querier.insertMany(test_1.Item, [
|
|
360
|
+
{
|
|
361
|
+
name: 'some item name a',
|
|
362
|
+
creatorId: user.id,
|
|
363
|
+
companyId: company.id,
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
name: 'some item name b',
|
|
367
|
+
creatorId: user.id,
|
|
368
|
+
companyId: company.id,
|
|
369
|
+
},
|
|
370
|
+
]);
|
|
371
|
+
const inventoryAdjustmentId = await this.querier.insertOne(test_1.InventoryAdjustment, {
|
|
372
|
+
description: 'some inventory adjustment',
|
|
373
|
+
creatorId: user.id,
|
|
374
|
+
companyId: company.id,
|
|
375
|
+
itemAdjustments: [
|
|
376
|
+
{ buyPrice: 1000, itemId: firstItemId },
|
|
377
|
+
{ buyPrice: 2000, itemId: secondItemId },
|
|
378
|
+
],
|
|
379
|
+
});
|
|
380
|
+
const inventoryAdjustmentFound = await this.querier.findOneById(test_1.InventoryAdjustment, inventoryAdjustmentId, {
|
|
381
|
+
$project: { itemAdjustments: true, creator: true },
|
|
382
|
+
});
|
|
383
|
+
expect(inventoryAdjustmentFound).toMatchObject({
|
|
384
|
+
id: inventoryAdjustmentId,
|
|
385
|
+
itemAdjustments: [
|
|
386
|
+
{ buyPrice: 1000, itemId: firstItemId },
|
|
387
|
+
{ buyPrice: 2000, itemId: secondItemId },
|
|
388
|
+
],
|
|
389
|
+
creator: {
|
|
390
|
+
email: 'someemaila@example.com',
|
|
391
|
+
name: 'Some Name A',
|
|
392
|
+
password: '123456789a!',
|
|
393
|
+
},
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
async shouldDeleteMany() {
|
|
397
|
+
await Promise.all([this.shouldInsertMany(), this.shouldInsertOne()]);
|
|
398
|
+
await expect(this.querier.deleteMany(test_1.User, { $filter: { companyId: 1 } })).resolves.toBe(0);
|
|
399
|
+
await expect(this.querier.deleteMany(test_1.User, { $filter: { companyId: null } })).resolves.toBe(3);
|
|
400
|
+
}
|
|
401
|
+
async shouldThrowWhenCommitTransactionWithoutBeginTransaction() {
|
|
402
|
+
await expect(this.querier.commitTransaction()).rejects.toThrow('not a pending transaction');
|
|
403
|
+
}
|
|
404
|
+
async clearTables() {
|
|
405
|
+
const entities = (0, entity_1.getEntities)();
|
|
406
|
+
await Promise.all(entities.map((entity) => this.querier.deleteMany(entity, {})));
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
exports.AbstractQuerierIt = AbstractQuerierIt;
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RRdWVyaWVyLWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJpZXIvYWJzdHJhY3RRdWVyaWVyLWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZDQUErQztBQUMvQyx5Q0FBOEk7QUFFOUksTUFBc0IsaUJBQWlCO0lBR3JDLFlBQXFCLElBQW9CO1FBQXBCLFNBQUksR0FBSixJQUFJLENBQWdCO0lBQUcsQ0FBQztJQUU3QyxLQUFLLENBQUMsU0FBUztRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBSSxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BC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SyxDQUFDLHVEQUF1RDtRQUMzRCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxRQUFRLEdBQUcsSUFBQSxvQkFBVyxHQUFFLENBQUM7UUFDL0IsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUtGO0FBcmZELDhDQXFmQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJpZXIsIFF1ZXJpZXJQb29sIH0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuaW1wb3J0IHsgZ2V0RW50aXRpZXMgfSBmcm9tICdAdXFsL2NvcmUvZW50aXR5JztcbmltcG9ydCB7IENvbXBhbnksIEludmVudG9yeUFkanVzdG1lbnQsIEl0ZW0sIEl0ZW1BZGp1c3RtZW50LCBMZWRnZXJBY2NvdW50LCBNZWFzdXJlVW5pdCwgU3BlYywgVGFnLCBUYXhDYXRlZ29yeSwgVXNlciB9IGZyb20gJ0B1cWwvY29yZS90ZXN0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UXVlcmllckl0PFEgZXh0ZW5kcyBRdWVyaWVyPiBpbXBsZW1lbnRzIFNwZWMge1xuICBxdWVyaWVyOiBRO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHBvb2w6IFF1ZXJpZXJQb29sPFE+KSB7fVxuXG4gIGFzeW5jIGJlZm9yZUFsbCgpIHtcbiAgICB0aGlzLnF1ZXJpZXIgPSBhd2FpdCB0aGlzLnBvb2wuZ2V0UXVlcmllcigpO1xuICAgIGF3YWl0IHRoaXMuZHJvcFRhYmxlcygpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlVGFibGVzKCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyaWVyLnJlbGVhc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGJlZm9yZUVhY2goKSB7XG4gICAgdGhpcy5xdWVyaWVyID0gYXdhaXQgdGhpcy5wb29sLmdldFF1ZXJpZXIoKTtcbiAgICBhd2FpdCB0aGlzLmNsZWFyVGFibGVzKCk7XG4gIH1cblxuICBhc3luYyBhZnRlckVhY2goKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyaWVyLnJlbGVhc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGFmdGVyQWxsKCkge1xuICAgIGF3YWl0IHRoaXMucG9vbC5lbmQoKTtcbiAgfVxuXG4gIHNob3VsZEdldFJlcG9zaXRvcnkoKSB7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IHRoaXMucXVlcmllci5nZXRSZXBvc2l0b3J5KFVzZXIpO1xuICAgIGV4cGVjdChyZXBvc2l0b3J5KS50b0JlRGVmaW5lZCgpO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkSW5zZXJ0TWFueSgpIHtcbiAgICBjb25zdCBpZHMgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0TWFueShVc2VyLCBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTb21lIE5hbWUgQScsXG4gICAgICAgIGVtYWlsOiAnc29tZWVtYWlsYUBleGFtcGxlLmNvbScsXG4gICAgICAgIHBhc3N3b3JkOiAnMTIzNDU2Nzg5YSEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbWUgTmFtZSBCJyxcbiAgICAgICAgZW1haWw6ICdzb21lZW1haWxiQGV4YW1wbGUuY29tJyxcbiAgICAgICAgcGFzc3dvcmQ6ICcxMjM0NTY3ODliIScsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGV4cGVjdChpZHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgZXhwZWN0KGlkKS50b0JlRGVmaW5lZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNob3VsZEluc2VydE9uZSgpIHtcbiAgICBjb25zdCBjcmVhdG9ySWQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKFVzZXIsIHtcbiAgICAgIG5hbWU6ICdTb21lIE5hbWUgQycsXG4gICAgICBlbWFpbDogJ3NvbWVlbWFpbGNAZXhhbXBsZS5jb20nLFxuICAgICAgcGFzc3dvcmQ6ICcxMjM0NTY3ODl6IScsXG4gICAgfSk7XG4gICAgZXhwZWN0KGNyZWF0b3JJZCkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IGNvbXBhbnlJZCA9IGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoQ29tcGFueSwge1xuICAgICAgbmFtZTogJ1NvbWUgTmFtZSBDJyxcbiAgICAgIGNyZWF0b3JJZCxcbiAgICB9KTtcbiAgICBleHBlY3QoY29tcGFueUlkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgdGF4Q2F0ZWdvcnlJZCA9IGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoVGF4Q2F0ZWdvcnksIHtcbiAgICAgIG5hbWU6ICdTb21lIE5hbWUgQycsXG4gICAgICBkZXNjcmlwdGlvbjogJ1NvbWUgRGVzY3JpcHRpb24gWicsXG4gICAgICBjcmVhdG9ySWQsXG4gICAgICBjb21wYW55SWQsXG4gICAgfSk7XG4gICAgZXhwZWN0KHRheENhdGVnb3J5SWQpLnRvQmVEZWZpbmVkKCk7XG4gIH1cblxuICBhc3luYyBzaG91bGRJbnNlcnRPbmVXaXRoT25JbnNlcnRJZCgpIHtcbiAgICBjb25zdCBpZDEgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKFRheENhdGVnb3J5LCB7XG4gICAgICBuYW1lOiAnU29tZSBOYW1lJyxcbiAgICB9KTtcbiAgICBjb25zdCBpZDIgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKFRheENhdGVnb3J5LCB7XG4gICAgICBwazogJzEyMycsXG4gICAgICBuYW1lOiAnU29tZSBOYW1lJyxcbiAgICB9KTtcbiAgICBleHBlY3QoaWQxKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChpZDIpLnRvQmVEZWZpbmVkKCk7XG4gIH1cblxuICBhc3luYyBzaG91bGRJbnNlcnRNYW55V2l0aFNwZWNpZmllZElkc0FuZE9uSW5zZXJ0SWRBc0RlZmF1bHQoKSB7XG4gICAgY29uc3QgaWRzID0gYXdhaXQgdGhpcy5xdWVyaWVyLmluc2VydE1hbnkoVGF4Q2F0ZWdvcnksIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbWUgTmFtZSBBJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBrOiAnNTAnLFxuICAgICAgICBuYW1lOiAnU29tZSBOYW1lIEInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbWUgTmFtZSBDJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBrOiAnNzAnLFxuICAgICAgICBuYW1lOiAnU29tZSBOYW1lIEQnLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBleHBlY3QoaWRzKS50b0hhdmVMZW5ndGgoNCk7XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIGV4cGVjdChpZCkudG9CZURlZmluZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaG91bGRJbnNlcnRNYW55V2l0aEF1dG9JbmNyZW1lbnRJZEFzRGVmYXVsdCgpIHtcbiAgICBjb25zdCBpZHMgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0TWFueShMZWRnZXJBY2NvdW50LCBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTb21lIE5hbWUgQScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU29tZSBOYW1lIEInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbWUgTmFtZSBDJyxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgZXhwZWN0KGlkcykudG9IYXZlTGVuZ3RoKDMpO1xuICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICBleHBlY3QoaWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfVxuICAgIGNvbnN0IGZvdW5kcyA9IGF3YWl0IHRoaXMucXVlcmllci5maW5kTWFueShMZWRnZXJBY2NvdW50LCB7fSk7XG4gICAgZXhwZWN0KGZvdW5kcy5tYXAoKHsgaWQgfSkgPT4gaWQpKS50b0VxdWFsKGlkcyk7XG4gIH1cblxuICBhc3luYyBzaG91bGRJbnNlcnRPbmVBbmRDYXNjYWRlT25lVG9PbmUoKSB7XG4gICAgY29uc3QgcGF5bG9hZDogVXNlciA9IHtcbiAgICAgIG5hbWU6ICdTb21lIE5hbWUgRCcsXG4gICAgICBjcmVhdGVkQXQ6IDEyMyxcbiAgICAgIHByb2ZpbGU6IHsgcGljdHVyZTogJ2FiYycsIGNyZWF0ZWRBdDogMTIzIH0sXG4gICAgfTtcbiAgICBjb25zdCBpZCA9IGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoVXNlciwgcGF5bG9hZCk7XG4gICAgZXhwZWN0KGlkKS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgdGhpcy5xdWVyaWVyLmZpbmRPbmVCeUlkKFVzZXIsIGlkLCB7ICRwcm9qZWN0OiBbJ3Byb2ZpbGUnXSB9KTtcbiAgICBleHBlY3QoZm91bmQpLnRvTWF0Y2hPYmplY3QoeyBpZCwgcHJvZmlsZTogcGF5bG9hZC5wcm9maWxlIH0pO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkSW5zZXJ0T25lQW5kQ2FzY2FkZU1hbnlUb09uZSgpIHtcbiAgICBjb25zdCBwYXlsb2FkOiBNZWFzdXJlVW5pdCA9IHtcbiAgICAgIG5hbWU6ICdDZW50aW1ldGVyJyxcbiAgICAgIGNyZWF0ZWRBdDogMTIzLFxuICAgICAgY2F0ZWdvcnk6IHsgbmFtZTogJ01ldHJpYycsIGNyZWF0ZWRBdDogMTIzIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGlkID0gYXdhaXQgdGhpcy5xdWVyaWVyLmluc2VydE9uZShNZWFzdXJlVW5pdCwgcGF5bG9hZCk7XG5cbiAgICBleHBlY3QoaWQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCBmb3VuZCA9IGF3YWl0IHRoaXMucXVlcmllci5maW5kT25lQnlJZChNZWFzdXJlVW5pdCwgaWQsIHsgJHByb2plY3Q6IHsgY2F0ZWdvcnk6IHRydWUgfSB9KTtcblxuICAgIGV4cGVjdChmb3VuZCkudG9NYXRjaE9iamVjdCh7IGlkLCBjYXRlZ29yeTogcGF5bG9hZC5jYXRlZ29yeSB9KTtcbiAgfVxuXG4gIGFzeW5jIHNob3VsZEluc2VydE9uZUFuZENhc2NhZGVPbmVUb01hbnkoKSB7XG4gICAgY29uc3QgaXRlbUFkanVzdG1lbnRzOiBJdGVtQWRqdXN0bWVudFtdID0gW3sgYnV5UHJpY2U6IDUwIH0sIHsgYnV5UHJpY2U6IDMwMCB9XTtcblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3QgaW52ZW50b3J5QWRqdXN0bWVudElkID0gYXdhaXQgdGhpcy5xdWVyaWVyLmluc2VydE9uZShJbnZlbnRvcnlBZGp1c3RtZW50LCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3NvbWUgZGVzY3JpcHRpb24nLFxuICAgICAgZGF0ZSxcbiAgICAgIGl0ZW1BZGp1c3RtZW50cyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChpbnZlbnRvcnlBZGp1c3RtZW50SWQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCBpbnZlbnRvcnlBZGp1c3RtZW50Rm91bmQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuZmluZE9uZUJ5SWQoSW52ZW50b3J5QWRqdXN0bWVudCwgaW52ZW50b3J5QWRqdXN0bWVudElkLCB7XG4gICAgICAkcHJvamVjdDogeyBpdGVtQWRqdXN0bWVudHM6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChpbnZlbnRvcnlBZGp1c3RtZW50Rm91bmQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgaWQ6IGludmVudG9yeUFkanVzdG1lbnRJZCxcbiAgICAgIGl0ZW1BZGp1c3RtZW50cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZW1BZGp1c3RtZW50c0ZvdW5kID0gYXdhaXQgdGhpcy5xdWVyaWVyLmZpbmRNYW55KEl0ZW1BZGp1c3RtZW50LCB7ICRmaWx0ZXI6IHsgaW52ZW50b3J5QWRqdXN0bWVudElkIH0gfSk7XG5cbiAgICBleHBlY3QoaXRlbUFkanVzdG1lbnRzRm91bmQpLnRvTWF0Y2hPYmplY3QoaXRlbUFkanVzdG1lbnRzKTtcbiAgfVxuXG4gIGFzeW5jIHNob3VsZEluc2VydE9uZUFuZENhc2NhZGVPbmVUb01hbnlXaXRoU3BlY2lmaWNGaWVsZHMoKSB7XG4gICAgY29uc3QgaXRlbUFkanVzdG1lbnRzOiBJdGVtQWRqdXN0bWVudFtdID0gW3sgYnV5UHJpY2U6IDUwIH0sIHsgYnV5UHJpY2U6IDMwMCB9XTtcblxuICAgIGNvbnN0IGludmVudG9yeUFkanVzdG1lbnRJZCA9IGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoSW52ZW50b3J5QWRqdXN0bWVudCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzb21lIGRlc2NyaXB0aW9uJyxcbiAgICAgIGl0ZW1BZGp1c3RtZW50czogaXRlbUFkanVzdG1lbnRzLnNsaWNlKCksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoaW52ZW50b3J5QWRqdXN0bWVudElkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgaW52ZW50b3J5QWRqdXN0bWVudEZvdW5kID0gYXdhaXQgdGhpcy5xdWVyaWVyLmZpbmRPbmVCeUlkKEludmVudG9yeUFkanVzdG1lbnQsIGludmVudG9yeUFkanVzdG1lbnRJZCwge1xuICAgICAgJHByb2plY3Q6IHsgaXRlbUFkanVzdG1lbnRzOiBbJ2J1eVByaWNlJ10gfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChpbnZlbnRvcnlBZGp1c3RtZW50Rm91bmQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgaWQ6IGludmVudG9yeUFkanVzdG1lbnRJZCxcbiAgICAgIGl0ZW1BZGp1c3RtZW50cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGl0ZW1BZGp1c3RtZW50c0ZvdW5kID0gYXdhaXQgdGhpcy5xdWVyaWVyLmZpbmRNYW55KEl0ZW1BZGp1c3RtZW50LCB7ICRmaWx0ZXI6IHsgaW52ZW50b3J5QWRqdXN0bWVudElkIH0gfSk7XG5cbiAgICBleHBlY3QoaXRlbUFkanVzdG1lbnRzRm91bmQpLnRvTWF0Y2hPYmplY3QoaXRlbUFkanVzdG1lbnRzKTtcbiAgfVxuXG4gIGFzeW5jIHNob3VsZFVwZGF0ZU9uZUFuZENhc2NhZGVPbmVUb01hbnkoKSB7XG4gICAgY29uc3QgaXRlbUFkanVzdG1lbnRzOiBJdGVtQWRqdXN0bWVudFtdID0gW3sgYnV5UHJpY2U6IDUwIH0sIHsgYnV5UHJpY2U6IDMwMCB9XTtcblxuICAgIGNvbnN0IGludmVudG9yeUFkanVzdG1lbnRJZCA9IGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoSW52ZW50b3J5QWRqdXN0bWVudCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzb21lIGRlc2NyaXB0aW9uJyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChpbnZlbnRvcnlBZGp1c3RtZW50SWQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgdGhpcy5xdWVyaWVyLnVwZGF0ZU9uZUJ5SWQoSW52ZW50b3J5QWRqdXN0bWVudCwgaW52ZW50b3J5QWRqdXN0bWVudElkLCB7XG4gICAgICBpdGVtQWRqdXN0bWVudHMsXG4gICAgfSk7XG5cbiAgICBleHBlY3QoY2hhbmdlcykudG9CZSgxKTtcblxuICAgIGNvbnN0IGludmVudG9yeUFkanVzdG1lbnRGb3VuZCA9IGF3YWl0IHRoaXMucXVlcmllci5maW5kT25lQnlJZChJbnZlbnRvcnlBZGp1c3RtZW50LCBpbnZlbnRvcnlBZGp1c3RtZW50SWQsIHtcbiAgICAgICRwcm9qZWN0OiB7IGl0ZW1BZGp1c3RtZW50czogWydidXlQcmljZSddIH0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QoaW52ZW50b3J5QWRqdXN0bWVudEZvdW5kKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIGlkOiBpbnZlbnRvcnlBZGp1c3RtZW50SWQsXG4gICAgICBpdGVtQWRqdXN0bWVudHMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpdGVtQWRqdXN0bWVudHNGb3VuZCA9IGF3YWl0IHRoaXMucXVlcmllci5maW5kTWFueShJdGVtQWRqdXN0bWVudCwgeyAkZmlsdGVyOiB7IGludmVudG9yeUFkanVzdG1lbnRJZCB9IH0pO1xuXG4gICAgZXhwZWN0KGl0ZW1BZGp1c3RtZW50c0ZvdW5kKS50b01hdGNoT2JqZWN0KGl0ZW1BZGp1c3RtZW50cyk7XG4gIH1cblxuICBhc3luYyBzaG91bGRVcGRhdGVPbmVCeUlkQW5kQ2FzY2FkZU9uZVRvTWFueU51bGwoKSB7XG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKEludmVudG9yeUFkanVzdG1lbnQsIHsgaXRlbUFkanVzdG1lbnRzOiBbe30sIHt9XSB9KTtcblxuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIuY291bnQoSXRlbUFkanVzdG1lbnQpKS5yZXNvbHZlcy50b0JlKDIpO1xuXG4gICAgYXdhaXQgdGhpcy5xdWVyaWVyLnVwZGF0ZU9uZUJ5SWQoSW52ZW50b3J5QWRqdXN0bWVudCwgaWQsIHtcbiAgICAgIGl0ZW1BZGp1c3RtZW50czogbnVsbCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIuY291bnQoSXRlbUFkanVzdG1lbnQpKS5yZXNvbHZlcy50b0JlKDApO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkVXBkYXRlTWFueUFuZENhc2NhZGVPbmVUb01hbnlOdWxsKCkge1xuICAgIGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoSW52ZW50b3J5QWRqdXN0bWVudCwgeyBpdGVtQWRqdXN0bWVudHM6IFt7fSwge31dIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChJdGVtQWRqdXN0bWVudCkpLnJlc29sdmVzLnRvQmUoMik7XG5cbiAgICBhd2FpdCB0aGlzLnF1ZXJpZXIudXBkYXRlTWFueShcbiAgICAgIEludmVudG9yeUFkanVzdG1lbnQsXG4gICAgICB7ICRmaWx0ZXI6IHt9IH0sXG4gICAgICB7XG4gICAgICAgIGl0ZW1BZGp1c3RtZW50czogbnVsbCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChJdGVtQWRqdXN0bWVudCkpLnJlc29sdmVzLnRvQmUoMCk7XG4gIH1cblxuICBhc3luYyBzaG91bGRJbnNlcnRPbmVBbmRDYXNjYWRlTWFueVRvTWFueSgpIHtcbiAgICBjb25zdCBwYXlsb2FkOiBJdGVtID0ge1xuICAgICAgbmFtZTogJ2l0ZW0gb25lJyxcbiAgICAgIGNyZWF0ZWRBdDogMSxcbiAgICAgIHRhZ3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0YWcgb25lJyxcbiAgICAgICAgICBjcmVhdGVkQXQ6IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAndGFnIHR3bycsXG4gICAgICAgICAgY3JlYXRlZEF0OiAxLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKEl0ZW0sIHBheWxvYWQpO1xuXG4gICAgZXhwZWN0KGlkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgY29uc3QgZm91bmRJdGVtID0gYXdhaXQgdGhpcy5xdWVyaWVyLmZpbmRPbmVCeUlkKEl0ZW0sIGlkLCB7XG4gICAgICAkcHJvamVjdDogeyBuYW1lOiB0cnVlLCBjcmVhdGVkQXQ6IHRydWUsIHRhZ3M6IFsnbmFtZScsICdjcmVhdGVkQXQnXSB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KGZvdW5kSXRlbSkudG9NYXRjaE9iamVjdCh7XG4gICAgICBpZCxcbiAgICAgIC4uLnBheWxvYWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3VuZFRhZ3MgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuZmluZE1hbnkoVGFnLCB7XG4gICAgICAkcHJvamVjdDogeyBuYW1lOiB0cnVlLCBjcmVhdGVkQXQ6IHRydWUsIGl0ZW1zOiBbJ25hbWUnLCAnY3JlYXRlZEF0J10gfSxcbiAgICB9KTtcblxuICAgIGRlbGV0ZSBmb3VuZEl0ZW0udGFncztcblxuICAgIGV4cGVjdChmb3VuZFRhZ3MpLnRvTWF0Y2hPYmplY3QocGF5bG9hZC50YWdzLm1hcCgodGFnKSA9PiAoeyAuLi50YWcsIGl0ZW1zOiBbZm91bmRJdGVtXSB9KSkpO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkVXBkYXRlT25lQW5kQ2FzY2FkZU1hbnlUb01hbnkoKSB7XG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKEl0ZW0sIHsgY3JlYXRlZEF0OiAxIH0pO1xuICAgIGNvbnN0IHBheWxvYWQ6IEl0ZW0gPSB7XG4gICAgICBuYW1lOiAnaXRlbSBvbmUnLFxuICAgICAgdXBkYXRlZEF0OiAxLFxuICAgICAgdGFnczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3RhZyBvbmUnLFxuICAgICAgICAgIGNyZWF0ZWRBdDogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0YWcgdHdvJyxcbiAgICAgICAgICBjcmVhdGVkQXQ6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnF1ZXJpZXIudXBkYXRlT25lQnlJZChJdGVtLCBpZCwgcGF5bG9hZCk7XG5cbiAgICBjb25zdCBmb3VuZCA9IGF3YWl0IHRoaXMucXVlcmllci5maW5kT25lQnlJZChJdGVtLCBpZCwge1xuICAgICAgJHByb2plY3Q6IHsgbmFtZTogdHJ1ZSwgdXBkYXRlZEF0OiB0cnVlLCB0YWdzOiB0cnVlIH0sXG4gICAgfSk7XG5cbiAgICBleHBlY3QoZm91bmQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgaWQsXG4gICAgICAuLi5wYXlsb2FkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkRmluZE1hbnkoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuc2hvdWxkSW5zZXJ0TWFueSgpLCB0aGlzLnNob3VsZEluc2VydE9uZSgpXSk7XG5cbiAgICBjb25zdCB1c2VycyA9IGF3YWl0IHRoaXMucXVlcmllci5maW5kTWFueShVc2VyLCB7XG4gICAgICAkcHJvamVjdDogWyduYW1lJ10sXG4gICAgICAkc2tpcDogMSxcbiAgICAgICRsaW1pdDogMixcbiAgICAgICRzb3J0OiB7XG4gICAgICAgIG5hbWU6IDEsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHVzZXJzKS50b01hdGNoT2JqZWN0KFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NvbWUgTmFtZSBCJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTb21lIE5hbWUgQycsXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkRmluZE9uZSgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5zaG91bGRJbnNlcnRNYW55KCksIHRoaXMuc2hvdWxkSW5zZXJ0T25lKCldKTtcblxuICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgdGhpcy5xdWVyaWVyLmZpbmRPbmUoVXNlciwge1xuICAgICAgJHByb2plY3Q6IFsnaWQnLCAnbmFtZScsICdlbWFpbCcsICdwYXNzd29yZCddLFxuICAgICAgJGZpbHRlcjoge1xuICAgICAgICBlbWFpbDogJ3NvbWVlbWFpbGFAZXhhbXBsZS5jb20nLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChmb3VuZCkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiAnU29tZSBOYW1lIEEnLFxuICAgICAgZW1haWw6ICdzb21lZW1haWxhQGV4YW1wbGUuY29tJyxcbiAgICAgIHBhc3N3b3JkOiAnMTIzNDU2Nzg5YSEnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgbm90Rm91bmQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuZmluZE9uZShVc2VyLCB7XG4gICAgICAkZmlsdGVyOiB7XG4gICAgICAgIG5hbWU6ICdzb21lIG5hbWUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChub3RGb3VuZCkudG9CZVVuZGVmaW5lZCgpO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkQ291bnQoKSB7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChVc2VyLCB7fSkpLnJlc29sdmVzLnRvQmUoMCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5zaG91bGRJbnNlcnRNYW55KCksIHRoaXMuc2hvdWxkSW5zZXJ0T25lKCldKTtcblxuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIuY291bnQoVXNlcikpLnJlc29sdmVzLnRvQmUoMyk7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChVc2VyLCB7ICRmaWx0ZXI6IHsgY29tcGFueUlkOiBudWxsIH0gfSkpLnJlc29sdmVzLnRvQmUoMyk7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChVc2VyLCB7ICRmaWx0ZXI6IHsgY29tcGFueUlkOiAxIH0gfSkpLnJlc29sdmVzLnRvQmUoMCk7XG4gIH1cblxuICBhc3luYyBzaG91bGRVcGRhdGVNYW55KCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnNob3VsZEluc2VydE1hbnkoKSwgdGhpcy5zaG91bGRJbnNlcnRPbmUoKV0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci51cGRhdGVNYW55KFVzZXIsIHsgJGZpbHRlcjogeyBjb21wYW55SWQ6IDEgfSB9LCB7IGNvbXBhbnlJZDogbnVsbCB9KSkucmVzb2x2ZXMudG9CZSgwKTtcbiAgICBhd2FpdCBleHBlY3QodGhpcy5xdWVyaWVyLnVwZGF0ZU1hbnkoVXNlciwgeyAkZmlsdGVyOiB7IGNvbXBhbnlJZDogbnVsbCB9IH0sIHsgY29tcGFueUlkOiAxIH0pKS5yZXNvbHZlcy50b0JlKDMpO1xuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIudXBkYXRlTWFueShVc2VyLCB7ICRmaWx0ZXI6IHsgY29tcGFueUlkOiAxIH0gfSwgeyBjb21wYW55SWQ6IG51bGwgfSkpLnJlc29sdmVzLnRvQmUoMyk7XG4gIH1cblxuICBhc3luYyBzaG91bGRUaHJvd1doZW5Sb2xsYmFja1RyYW5zYWN0aW9uV2l0aG91dEJlZ2luVHJhbnNhY3Rpb24oKSB7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCkpLnJlamVjdHMudG9UaHJvdygnbm90IGEgcGVuZGluZyB0cmFuc2FjdGlvbicpO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkVGhyb3dJZlVua25vd25Db21wYXJpc29uT3BlcmF0b3IoKSB7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgdGhpcy5xdWVyaWVyLmZpbmRNYW55KFVzZXIsIHtcbiAgICAgICAgJGZpbHRlcjogeyBuYW1lOiB7ICRzb21lSW52YWxpZE9wZXJhdG9yOiAnc29tZScgfSBhcyBhbnkgfSxcbiAgICAgIH0pXG4gICAgKS5yZWplY3RzLnRvVGhyb3coJ3Vua25vd24gb3BlcmF0b3I6ICRzb21lSW52YWxpZE9wZXJhdG9yJyk7XG4gIH1cblxuICBhc3luYyBzaG91bGRDb21taXQoKSB7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChVc2VyKSkucmVzb2x2ZXMudG9CZSgwKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXJpZXIuYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgIGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRPbmUoVXNlciwge30pO1xuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIuY291bnQoVXNlcikpLnJlc29sdmVzLnRvQmUoMSk7XG4gICAgYXdhaXQgdGhpcy5xdWVyaWVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChVc2VyKSkucmVzb2x2ZXMudG9CZSgxKTtcbiAgfVxuXG4gIGFzeW5jIHNob3VsZFJvbGxiYWNrKCkge1xuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIuY291bnQoVXNlcikpLnJlc29sdmVzLnRvQmUoMCk7XG4gICAgYXdhaXQgdGhpcy5xdWVyaWVyLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXJpZXIuaW5zZXJ0T25lKFVzZXIsIHt9KTtcbiAgICBhd2FpdCBleHBlY3QodGhpcy5xdWVyaWVyLmNvdW50KFVzZXIpKS5yZXNvbHZlcy50b0JlKDEpO1xuICAgIGF3YWl0IHRoaXMucXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb3VudChVc2VyKSkucmVzb2x2ZXMudG9CZSgwKTtcbiAgfVxuXG4gIGFzeW5jIHNob3VsZFRocm93V2hlbkJlZ2luVHJhbnNhY3Rpb25BZnRlckJlZ2luVHJhbnNhY3Rpb24oKSB7XG4gICAgZXhwZWN0KHRoaXMucXVlcmllci5oYXNPcGVuVHJhbnNhY3Rpb24pLnRvQmVGYWxzeSgpO1xuICAgIGF3YWl0IHRoaXMucXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgZXhwZWN0KHRoaXMucXVlcmllci5oYXNPcGVuVHJhbnNhY3Rpb24pLnRvQmUodHJ1ZSk7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCkpLnJlamVjdHMudG9UaHJvdygncGVuZGluZyB0cmFuc2FjdGlvbicpO1xuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIucmVsZWFzZSgpKS5yZWplY3RzLnRvVGhyb3coJ3BlbmRpbmcgdHJhbnNhY3Rpb24nKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXJpZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkUHJvamVjdE9uZVRvTWFueSgpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5zaG91bGRJbnNlcnRNYW55KCksIHRoaXMuc2hvdWxkSW5zZXJ0T25lKCldKTtcblxuICAgIGNvbnN0IFt1c2VyLCBjb21wYW55XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMucXVlcmllci5maW5kT25lKFVzZXIsIHsgJHByb2plY3Q6IFsnaWQnXSB9KSxcbiAgICAgIHRoaXMucXVlcmllci5maW5kT25lKENvbXBhbnksIHsgJHByb2plY3Q6IFsnaWQnXSB9KSxcbiAgICBdKTtcblxuICAgIGNvbnN0IFtmaXJzdEl0ZW1JZCwgc2Vjb25kSXRlbUlkXSA9IGF3YWl0IHRoaXMucXVlcmllci5pbnNlcnRNYW55KEl0ZW0sIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NvbWUgaXRlbSBuYW1lIGEnLFxuICAgICAgICBjcmVhdG9ySWQ6IHVzZXIuaWQsXG4gICAgICAgIGNvbXBhbnlJZDogY29tcGFueS5pZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzb21lIGl0ZW0gbmFtZSBiJyxcbiAgICAgICAgY3JlYXRvcklkOiB1c2VyLmlkLFxuICAgICAgICBjb21wYW55SWQ6IGNvbXBhbnkuaWQsXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgaW52ZW50b3J5QWRqdXN0bWVudElkID0gYXdhaXQgdGhpcy5xdWVyaWVyLmluc2VydE9uZShJbnZlbnRvcnlBZGp1c3RtZW50LCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3NvbWUgaW52ZW50b3J5IGFkanVzdG1lbnQnLFxuICAgICAgY3JlYXRvcklkOiB1c2VyLmlkLFxuICAgICAgY29tcGFueUlkOiBjb21wYW55LmlkLFxuICAgICAgaXRlbUFkanVzdG1lbnRzOiBbXG4gICAgICAgIHsgYnV5UHJpY2U6IDEwMDAsIGl0ZW1JZDogZmlyc3RJdGVtSWQgfSxcbiAgICAgICAgeyBidXlQcmljZTogMjAwMCwgaXRlbUlkOiBzZWNvbmRJdGVtSWQgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnZlbnRvcnlBZGp1c3RtZW50Rm91bmQgPSBhd2FpdCB0aGlzLnF1ZXJpZXIuZmluZE9uZUJ5SWQoSW52ZW50b3J5QWRqdXN0bWVudCwgaW52ZW50b3J5QWRqdXN0bWVudElkLCB7XG4gICAgICAkcHJvamVjdDogeyBpdGVtQWRqdXN0bWVudHM6IHRydWUsIGNyZWF0b3I6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChpbnZlbnRvcnlBZGp1c3RtZW50Rm91bmQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgaWQ6IGludmVudG9yeUFkanVzdG1lbnRJZCxcbiAgICAgIGl0ZW1BZGp1c3RtZW50czogW1xuICAgICAgICB7IGJ1eVByaWNlOiAxMDAwLCBpdGVtSWQ6IGZpcnN0SXRlbUlkIH0sXG4gICAgICAgIHsgYnV5UHJpY2U6IDIwMDAsIGl0ZW1JZDogc2Vjb25kSXRlbUlkIH0sXG4gICAgICBdLFxuICAgICAgY3JlYXRvcjoge1xuICAgICAgICBlbWFpbDogJ3NvbWVlbWFpbGFAZXhhbXBsZS5jb20nLFxuICAgICAgICBuYW1lOiAnU29tZSBOYW1lIEEnLFxuICAgICAgICBwYXNzd29yZDogJzEyMzQ1Njc4OWEhJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzaG91bGREZWxldGVNYW55KCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnNob3VsZEluc2VydE1hbnkoKSwgdGhpcy5zaG91bGRJbnNlcnRPbmUoKV0pO1xuICAgIGF3YWl0IGV4cGVjdCh0aGlzLnF1ZXJpZXIuZGVsZXRlTWFueShVc2VyLCB7ICRmaWx0ZXI6IHsgY29tcGFueUlkOiAxIH0gfSkpLnJlc29sdmVzLnRvQmUoMCk7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5kZWxldGVNYW55KFVzZXIsIHsgJGZpbHRlcjogeyBjb21wYW55SWQ6IG51bGwgfSB9KSkucmVzb2x2ZXMudG9CZSgzKTtcbiAgfVxuXG4gIGFzeW5jIHNob3VsZFRocm93V2hlbkNvbW1pdFRyYW5zYWN0aW9uV2l0aG91dEJlZ2luVHJhbnNhY3Rpb24oKSB7XG4gICAgYXdhaXQgZXhwZWN0KHRoaXMucXVlcmllci5jb21taXRUcmFuc2FjdGlvbigpKS5yZWplY3RzLnRvVGhyb3coJ25vdCBhIHBlbmRpbmcgdHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVGFibGVzKCkge1xuICAgIGNvbnN0IGVudGl0aWVzID0gZ2V0RW50aXRpZXMoKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gdGhpcy5xdWVyaWVyLmRlbGV0ZU1hbnkoZW50aXR5LCB7fSkpKTtcbiAgfVxuXG4gIGFic3RyYWN0IGNyZWF0ZVRhYmxlcygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGFic3RyYWN0IGRyb3BUYWJsZXMoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { QuerierPool } from '@uql/core/type';
|
|
2
|
+
import { AbstractQuerierIt } from './abstractQuerier-it';
|
|
3
|
+
import { AbstractSqlQuerier } from './abstractSqlQuerier';
|
|
4
|
+
export declare abstract class AbstractSqlQuerierIt extends AbstractQuerierIt<AbstractSqlQuerier> {
|
|
5
|
+
readonly idType: string;
|
|
6
|
+
constructor(pool: QuerierPool<AbstractSqlQuerier>, idType: string);
|
|
7
|
+
createTables(): Promise<void>;
|
|
8
|
+
dropTables(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractSqlQuerierIt = void 0;
|
|
4
|
+
const test_1 = require("@uql/core/test");
|
|
5
|
+
const abstractQuerier_it_1 = require("./abstractQuerier-it");
|
|
6
|
+
class AbstractSqlQuerierIt extends abstractQuerier_it_1.AbstractQuerierIt {
|
|
7
|
+
constructor(pool, idType) {
|
|
8
|
+
super(pool);
|
|
9
|
+
this.idType = idType;
|
|
10
|
+
}
|
|
11
|
+
createTables() {
|
|
12
|
+
return (0, test_1.createTables)(this.querier, this.idType);
|
|
13
|
+
}
|
|
14
|
+
dropTables() {
|
|
15
|
+
return (0, test_1.dropTables)(this.querier);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.AbstractSqlQuerierIt = AbstractSqlQuerierIt;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RTcWxRdWVyaWVyLWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJpZXIvYWJzdHJhY3RTcWxRdWVyaWVyLWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUEwRDtBQUMxRCw2REFBeUQ7QUFHekQsTUFBc0Isb0JBQXFCLFNBQVEsc0NBQXFDO0lBQ3RGLFlBQVksSUFBcUMsRUFBVyxNQUFjO1FBQ3hFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUQ4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBRTFFLENBQUM7SUFFUSxZQUFZO1FBQ25CLE9BQU8sSUFBQSxtQkFBWSxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUSxVQUFVO1FBQ2pCLE9BQU8sSUFBQSxpQkFBVSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUFaRCxvREFZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJpZXJQb29sIH0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuaW1wb3J0IHsgY3JlYXRlVGFibGVzLCBkcm9wVGFibGVzIH0gZnJvbSAnQHVxbC9jb3JlL3Rlc3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RRdWVyaWVySXQgfSBmcm9tICcuL2Fic3RyYWN0UXVlcmllci1pdCc7XG5pbXBvcnQgeyBBYnN0cmFjdFNxbFF1ZXJpZXIgfSBmcm9tICcuL2Fic3RyYWN0U3FsUXVlcmllcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNxbFF1ZXJpZXJJdCBleHRlbmRzIEFic3RyYWN0UXVlcmllckl0PEFic3RyYWN0U3FsUXVlcmllcj4ge1xuICBjb25zdHJ1Y3Rvcihwb29sOiBRdWVyaWVyUG9vbDxBYnN0cmFjdFNxbFF1ZXJpZXI+LCByZWFkb25seSBpZFR5cGU6IHN0cmluZykge1xuICAgIHN1cGVyKHBvb2wpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY3JlYXRlVGFibGVzKCkge1xuICAgIHJldHVybiBjcmVhdGVUYWJsZXModGhpcy5xdWVyaWVyLCB0aGlzLmlkVHlwZSk7XG4gIH1cblxuICBvdmVycmlkZSBkcm9wVGFibGVzKCkge1xuICAgIHJldHVybiBkcm9wVGFibGVzKHRoaXMucXVlcmllcik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Spec } from '@uql/core/test';
|
|
2
|
+
import { QuerierPool } from '@uql/core/type';
|
|
3
|
+
import { AbstractSqlQuerier } from './abstractSqlQuerier';
|
|
4
|
+
export declare abstract class AbstractSqlQuerierSpec implements Spec {
|
|
5
|
+
readonly pool: QuerierPool<AbstractSqlQuerier>;
|
|
6
|
+
readonly idType: string;
|
|
7
|
+
querier: AbstractSqlQuerier;
|
|
8
|
+
constructor(pool: QuerierPool<AbstractSqlQuerier>, idType: string);
|
|
9
|
+
beforeAll(): Promise<void>;
|
|
10
|
+
beforeEach(): Promise<void>;
|
|
11
|
+
afterEach(): Promise<void>;
|
|
12
|
+
afterAll(): Promise<void>;
|
|
13
|
+
shouldFindOneById(): Promise<void>;
|
|
14
|
+
shouldFindOne(): Promise<void>;
|
|
15
|
+
shouldFindOneAndProjectOneToMany(): Promise<void>;
|
|
16
|
+
shouldFindAndProjectRaw(): Promise<void>;
|
|
17
|
+
shouldVirtualField(): Promise<void>;
|
|
18
|
+
shouldFind$exists(): Promise<void>;
|
|
19
|
+
shouldFind$nexists(): Promise<void>;
|
|
20
|
+
shouldFindOneAndProjectOneToManyOnly(): Promise<void>;
|
|
21
|
+
shouldFindOneAndProjectOneToManyWithSpecifiedFields(): Promise<void>;
|
|
22
|
+
shouldFindManyAndProjectOneToMany(): Promise<void>;
|
|
23
|
+
shouldFindOneAndProjectManyToMany(): Promise<void>;
|
|
24
|
+
shouldFindOneByIdAndProjectManyToMany(): Promise<void>;
|
|
25
|
+
shouldFindMany(): Promise<void>;
|
|
26
|
+
shouldFindManyAndCount(): Promise<void>;
|
|
27
|
+
shouldInsertOne(): Promise<void>;
|
|
28
|
+
shouldInsertOneAndCascadeOneToOne(): Promise<void>;
|
|
29
|
+
shouldInsertOneAndCascadeManyToOne(): Promise<void>;
|
|
30
|
+
shouldInsertOneAndCascadeOneToMany(): Promise<void>;
|
|
31
|
+
shouldUpdateMany(): Promise<void>;
|
|
32
|
+
shouldUpdateOneById(): Promise<void>;
|
|
33
|
+
shouldUpdateOneByIdAndCascadeOneToOne(): Promise<void>;
|
|
34
|
+
shouldUpdateOneByIdAndCascadeOneToOneNull(): Promise<void>;
|
|
35
|
+
shouldUpdateOneByIdAndCascadeOneToMany(): Promise<void>;
|
|
36
|
+
shouldUpdateOneByIdAndCascadeOneToManyNull(): Promise<void>;
|
|
37
|
+
shouldUpdateManyAndCascadeOneToManyNull(): Promise<void>;
|
|
38
|
+
shouldInsertOneAndCascadeManyToManyInserts(): Promise<void>;
|
|
39
|
+
shouldUpdateAndCascadeManyToManyInserts(): Promise<void>;
|
|
40
|
+
shouldUpdateAndCascadeManyToManyLinks(): Promise<void>;
|
|
41
|
+
shouldDeleteOneAndCascadeManyToManyDeletes(): Promise<void>;
|
|
42
|
+
shouldDeleteOneAndNoCascadeManyToManyDeletes(): Promise<void>;
|
|
43
|
+
shouldDeleteOneById(): Promise<void>;
|
|
44
|
+
shouldDeleteMany(): Promise<void>;
|
|
45
|
+
shouldCount(): Promise<void>;
|
|
46
|
+
shouldUseTransaction(): Promise<void>;
|
|
47
|
+
shouldUseTransactionCallback(): Promise<void>;
|
|
48
|
+
shouldThrowIfRollbackIfErrorInCallback(): Promise<void>;
|
|
49
|
+
shouldThrowIfTransactionIsPending(): Promise<void>;
|
|
50
|
+
shouldThrowIfCommitWithNoPendingTransaction(): Promise<void>;
|
|
51
|
+
shouldThrowIfRollbackWithNoPendingTransaction(): Promise<void>;
|
|
52
|
+
shouldThrowIfReleaseWithPendingTransaction(): Promise<void>;
|
|
53
|
+
}
|