@uql/core 0.4.89 → 0.4.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +35 -35
  2. package/package.json +4 -4
  3. package/dialect/abstractSqlDialect-spec.d.ts +0 -49
  4. package/dialect/abstractSqlDialect-spec.js +0 -765
  5. package/dialect/mysqlDialect.spec.d.ts +0 -6
  6. package/dialect/mysqlDialect.spec.js +0 -33
  7. package/dialect/postgresDialect.spec.d.ts +0 -1
  8. package/dialect/postgresDialect.spec.js +0 -139
  9. package/dialect/sqliteDialect.spec.d.ts +0 -1
  10. package/dialect/sqliteDialect.spec.js +0 -12
  11. package/entity/decorator/definition.spec.d.ts +0 -1
  12. package/entity/decorator/definition.spec.js +0 -725
  13. package/entity/decorator/relation.spec.d.ts +0 -1
  14. package/entity/decorator/relation.spec.js +0 -55
  15. package/options.spec.d.ts +0 -1
  16. package/options.spec.js +0 -27
  17. package/querier/abstractQuerier-it.d.ts +0 -41
  18. package/querier/abstractQuerier-it.js +0 -410
  19. package/querier/abstractSqlQuerier-it.d.ts +0 -9
  20. package/querier/abstractSqlQuerier-it.js +0 -19
  21. package/querier/abstractSqlQuerier-spec.d.ts +0 -53
  22. package/querier/abstractSqlQuerier-spec.js +0 -607
  23. package/querier/decorator/injectQuerier.spec.d.ts +0 -1
  24. package/querier/decorator/injectQuerier.spec.js +0 -108
  25. package/querier/decorator/transactional.spec.d.ts +0 -1
  26. package/querier/decorator/transactional.spec.js +0 -239
  27. package/repository/genericRepository.spec.d.ts +0 -1
  28. package/repository/genericRepository.spec.js +0 -86
  29. package/test/entityMock.d.ts +0 -180
  30. package/test/entityMock.js +0 -451
  31. package/test/index.d.ts +0 -3
  32. package/test/index.js +0 -7
  33. package/test/it.util.d.ts +0 -4
  34. package/test/it.util.js +0 -60
  35. package/test/spec.util.d.ts +0 -13
  36. package/test/spec.util.js +0 -54
  37. package/util/dialect.util.spec.d.ts +0 -1
  38. package/util/dialect.util.spec.js +0 -23
  39. package/util/object.util.spec.d.ts +0 -1
  40. package/util/object.util.spec.js +0 -26
  41. package/util/sql.util.spec.d.ts +0 -1
  42. package/util/sql.util.spec.js +0 -164
  43. package/util/string.util.spec.d.ts +0 -1
  44. package/util/string.util.spec.js +0 -26
@@ -1 +0,0 @@
1
- export {};
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const relation_1 = require("./relation");
5
- it('invalid auto-inferred type', () => {
6
- expect(() => {
7
- class SomeEntity {
8
- }
9
- tslib_1.__decorate([
10
- (0, relation_1.ManyToOne)(),
11
- tslib_1.__metadata("design:type", Number)
12
- ], SomeEntity.prototype, "idTwo", void 0);
13
- }).toThrow(`'SomeEntity.idTwo' type was auto-inferred with invalid type 'Number'`);
14
- expect(() => {
15
- class SomeEntity {
16
- }
17
- tslib_1.__decorate([
18
- (0, relation_1.ManyToOne)(),
19
- tslib_1.__metadata("design:type", String)
20
- ], SomeEntity.prototype, "idTwo", void 0);
21
- }).toThrow(`'SomeEntity.idTwo' type was auto-inferred with invalid type 'String'`);
22
- expect(() => {
23
- class SomeEntity {
24
- }
25
- tslib_1.__decorate([
26
- (0, relation_1.ManyToOne)(),
27
- tslib_1.__metadata("design:type", Boolean)
28
- ], SomeEntity.prototype, "idTwo", void 0);
29
- }).toThrow(`'SomeEntity.idTwo' type was auto-inferred with invalid type 'Boolean'`);
30
- expect(() => {
31
- class SomeEntity {
32
- }
33
- tslib_1.__decorate([
34
- (0, relation_1.ManyToOne)(),
35
- tslib_1.__metadata("design:type", Object)
36
- ], SomeEntity.prototype, "idTwo", void 0);
37
- }).toThrow(`'SomeEntity.idTwo' type was auto-inferred with invalid type 'Object'`);
38
- expect(() => {
39
- class SomeEntity {
40
- }
41
- tslib_1.__decorate([
42
- (0, relation_1.ManyToOne)(),
43
- tslib_1.__metadata("design:type", void 0)
44
- ], SomeEntity.prototype, "idTwo", void 0);
45
- }).toThrow(`'SomeEntity.idTwo' type was auto-inferred with invalid type 'undefined'`);
46
- expect(() => {
47
- class SomeEntity {
48
- }
49
- tslib_1.__decorate([
50
- (0, relation_1.ManyToOne)(),
51
- tslib_1.__metadata("design:type", void 0)
52
- ], SomeEntity.prototype, "idTwo", void 0);
53
- }).toThrow(`'SomeEntity.idTwo' type was auto-inferred with invalid type 'undefined'`);
54
- });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb24uc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL3JlbGF0aW9uLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXVDO0FBRXZDLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDcEMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLE1BQU0sVUFBVTtTQUdmO1FBREM7WUFEQyxJQUFBLG9CQUFTLEdBQUU7O2lEQUNFO0lBRWxCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDVixNQUFNLFVBQVU7U0FHZjtRQURDO1lBREMsSUFBQSxvQkFBUyxHQUFFOztpREFDRTtJQUVsQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsc0VBQXNFLENBQUMsQ0FBQztJQUNuRixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsTUFBTSxVQUFVO1NBR2Y7UUFEQztZQURDLElBQUEsb0JBQVMsR0FBRTs7aURBQ0c7SUFFbkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7SUFDcEYsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLE1BQU0sVUFBVTtTQUdmO1FBREM7WUFEQyxJQUFBLG9CQUFTLEdBQUU7O2lEQUNFO0lBRWxCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDVixNQUFNLFVBQVU7U0FHZjtRQURDO1lBREMsSUFBQSxvQkFBUyxHQUFFOztpREFDQTtJQUVoQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMseUVBQXlFLENBQUMsQ0FBQztJQUN0RixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsTUFBTSxVQUFVO1NBR2Y7UUFEQztZQURDLElBQUEsb0JBQVMsR0FBRTs7aURBQ0s7SUFFckIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYW55VG9PbmUgfSBmcm9tICcuL3JlbGF0aW9uJztcblxuaXQoJ2ludmFsaWQgYXV0by1pbmZlcnJlZCB0eXBlJywgKCkgPT4ge1xuICBleHBlY3QoKCkgPT4ge1xuICAgIGNsYXNzIFNvbWVFbnRpdHkge1xuICAgICAgQE1hbnlUb09uZSgpXG4gICAgICBpZFR3bzogbnVtYmVyO1xuICAgIH1cbiAgfSkudG9UaHJvdyhgJ1NvbWVFbnRpdHkuaWRUd28nIHR5cGUgd2FzIGF1dG8taW5mZXJyZWQgd2l0aCBpbnZhbGlkIHR5cGUgJ051bWJlcidgKTtcbiAgZXhwZWN0KCgpID0+IHtcbiAgICBjbGFzcyBTb21lRW50aXR5IHtcbiAgICAgIEBNYW55VG9PbmUoKVxuICAgICAgaWRUd286IHN0cmluZztcbiAgICB9XG4gIH0pLnRvVGhyb3coYCdTb21lRW50aXR5LmlkVHdvJyB0eXBlIHdhcyBhdXRvLWluZmVycmVkIHdpdGggaW52YWxpZCB0eXBlICdTdHJpbmcnYCk7XG4gIGV4cGVjdCgoKSA9PiB7XG4gICAgY2xhc3MgU29tZUVudGl0eSB7XG4gICAgICBATWFueVRvT25lKClcbiAgICAgIGlkVHdvOiBib29sZWFuO1xuICAgIH1cbiAgfSkudG9UaHJvdyhgJ1NvbWVFbnRpdHkuaWRUd28nIHR5cGUgd2FzIGF1dG8taW5mZXJyZWQgd2l0aCBpbnZhbGlkIHR5cGUgJ0Jvb2xlYW4nYCk7XG4gIGV4cGVjdCgoKSA9PiB7XG4gICAgY2xhc3MgU29tZUVudGl0eSB7XG4gICAgICBATWFueVRvT25lKClcbiAgICAgIGlkVHdvOiBvYmplY3Q7XG4gICAgfVxuICB9KS50b1Rocm93KGAnU29tZUVudGl0eS5pZFR3bycgdHlwZSB3YXMgYXV0by1pbmZlcnJlZCB3aXRoIGludmFsaWQgdHlwZSAnT2JqZWN0J2ApO1xuICBleHBlY3QoKCkgPT4ge1xuICAgIGNsYXNzIFNvbWVFbnRpdHkge1xuICAgICAgQE1hbnlUb09uZSgpXG4gICAgICBpZFR3bzogbnVsbDtcbiAgICB9XG4gIH0pLnRvVGhyb3coYCdTb21lRW50aXR5LmlkVHdvJyB0eXBlIHdhcyBhdXRvLWluZmVycmVkIHdpdGggaW52YWxpZCB0eXBlICd1bmRlZmluZWQnYCk7XG4gIGV4cGVjdCgoKSA9PiB7XG4gICAgY2xhc3MgU29tZUVudGl0eSB7XG4gICAgICBATWFueVRvT25lKClcbiAgICAgIGlkVHdvOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9KS50b1Rocm93KGAnU29tZUVudGl0eS5pZFR3bycgdHlwZSB3YXMgYXV0by1pbmZlcnJlZCB3aXRoIGludmFsaWQgdHlwZSAndW5kZWZpbmVkJ2ApO1xufSk7XG4iXX0=
package/options.spec.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/options.spec.js DELETED
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const test_1 = require("@uql/core/test");
4
- const options_1 = require("./options");
5
- describe('options', () => {
6
- beforeEach(() => {
7
- jest.spyOn(console, 'log');
8
- });
9
- it('getDefaultQuerierPool unset', () => {
10
- expect(() => (0, options_1.getDefaultQuerierPool)()).toThrow('A default querier-pool has to be set first');
11
- });
12
- it('getQuerier', async () => {
13
- const querierMock = {};
14
- (0, options_1.setDefaultQuerierPool)({
15
- getQuerier: async () => querierMock,
16
- end: async () => { },
17
- });
18
- const querier1 = await (0, options_1.getDefaultQuerierPool)().getQuerier();
19
- expect(querier1).toBe(querierMock);
20
- const querier2 = await (0, options_1.getQuerier)();
21
- expect(querier2).toBe(querierMock);
22
- const repository = (0, options_1.getRepository)(test_1.User, querier1);
23
- expect(repository).toBeDefined();
24
- expect((0, options_1.getDefaultQuerierPool)()).toBe((0, options_1.getDefaultQuerierPool)());
25
- });
26
- });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29wdGlvbnMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUFzQztBQUV0Qyx1Q0FBb0c7QUFFcEcsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBcUIsR0FBRSxDQUFDLENBQUMsT0FBTyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDOUYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFCLE1BQU0sV0FBVyxHQUFHLEVBQWEsQ0FBQztRQUVsQyxJQUFBLCtCQUFxQixFQUFDO1lBQ3BCLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLFdBQVc7WUFDbkMsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUUsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsK0JBQXFCLEdBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxvQkFBVSxHQUFFLENBQUM7UUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuQyxNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFhLEVBQUMsV0FBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWpELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqQyxNQUFNLENBQUMsSUFBQSwrQkFBcUIsR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUEsK0JBQXFCLEdBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyIH0gZnJvbSAnQHVxbC9jb3JlL3Rlc3QnO1xuaW1wb3J0IHsgUXVlcmllciB9IGZyb20gJ0B1cWwvY29yZS90eXBlJztcbmltcG9ydCB7IGdldFF1ZXJpZXIsIGdldERlZmF1bHRRdWVyaWVyUG9vbCwgZ2V0UmVwb3NpdG9yeSwgc2V0RGVmYXVsdFF1ZXJpZXJQb29sIH0gZnJvbSAnLi9vcHRpb25zJztcblxuZGVzY3JpYmUoJ29wdGlvbnMnLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3Quc3B5T24oY29uc29sZSwgJ2xvZycpO1xuICB9KTtcblxuICBpdCgnZ2V0RGVmYXVsdFF1ZXJpZXJQb29sIHVuc2V0JywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBnZXREZWZhdWx0UXVlcmllclBvb2woKSkudG9UaHJvdygnQSBkZWZhdWx0IHF1ZXJpZXItcG9vbCBoYXMgdG8gYmUgc2V0IGZpcnN0Jyk7XG4gIH0pO1xuXG4gIGl0KCdnZXRRdWVyaWVyJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJpZXJNb2NrID0ge30gYXMgUXVlcmllcjtcblxuICAgIHNldERlZmF1bHRRdWVyaWVyUG9vbCh7XG4gICAgICBnZXRRdWVyaWVyOiBhc3luYyAoKSA9PiBxdWVyaWVyTW9jayxcbiAgICAgIGVuZDogYXN5bmMgKCkgPT4ge30sXG4gICAgfSk7XG5cbiAgICBjb25zdCBxdWVyaWVyMSA9IGF3YWl0IGdldERlZmF1bHRRdWVyaWVyUG9vbCgpLmdldFF1ZXJpZXIoKTtcbiAgICBleHBlY3QocXVlcmllcjEpLnRvQmUocXVlcmllck1vY2spO1xuXG4gICAgY29uc3QgcXVlcmllcjIgPSBhd2FpdCBnZXRRdWVyaWVyKCk7XG4gICAgZXhwZWN0KHF1ZXJpZXIyKS50b0JlKHF1ZXJpZXJNb2NrKTtcblxuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBnZXRSZXBvc2l0b3J5KFVzZXIsIHF1ZXJpZXIxKTtcblxuICAgIGV4cGVjdChyZXBvc2l0b3J5KS50b0JlRGVmaW5lZCgpO1xuXG4gICAgZXhwZWN0KGdldERlZmF1bHRRdWVyaWVyUG9vbCgpKS50b0JlKGdldERlZmF1bHRRdWVyaWVyUG9vbCgpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,41 +0,0 @@
1
- import { Querier, QuerierPool } from '@uql/core/type';
2
- import { Spec } from '@uql/core/test';
3
- export declare abstract class AbstractQuerierIt<Q extends Querier> implements Spec {
4
- readonly pool: QuerierPool<Q>;
5
- querier: Q;
6
- constructor(pool: QuerierPool<Q>);
7
- beforeAll(): Promise<void>;
8
- beforeEach(): Promise<void>;
9
- afterEach(): Promise<void>;
10
- afterAll(): Promise<void>;
11
- shouldGetRepository(): void;
12
- shouldInsertMany(): Promise<void>;
13
- shouldInsertOne(): Promise<void>;
14
- shouldInsertOneWithOnInsertId(): Promise<void>;
15
- shouldInsertManyWithSpecifiedIdsAndOnInsertIdAsDefault(): Promise<void>;
16
- shouldInsertManyWithAutoIncrementIdAsDefault(): Promise<void>;
17
- shouldInsertOneAndCascadeOneToOne(): Promise<void>;
18
- shouldInsertOneAndCascadeManyToOne(): Promise<void>;
19
- shouldInsertOneAndCascadeOneToMany(): Promise<void>;
20
- shouldInsertOneAndCascadeOneToManyWithSpecificFields(): Promise<void>;
21
- shouldUpdateOneAndCascadeOneToMany(): Promise<void>;
22
- shouldUpdateOneByIdAndCascadeOneToManyNull(): Promise<void>;
23
- shouldUpdateManyAndCascadeOneToManyNull(): Promise<void>;
24
- shouldInsertOneAndCascadeManyToMany(): Promise<void>;
25
- shouldUpdateOneAndCascadeManyToMany(): Promise<void>;
26
- shouldFindMany(): Promise<void>;
27
- shouldFindOne(): Promise<void>;
28
- shouldCount(): Promise<void>;
29
- shouldUpdateMany(): Promise<void>;
30
- shouldThrowWhenRollbackTransactionWithoutBeginTransaction(): Promise<void>;
31
- shouldThrowIfUnknownComparisonOperator(): Promise<void>;
32
- shouldCommit(): Promise<void>;
33
- shouldRollback(): Promise<void>;
34
- shouldThrowWhenBeginTransactionAfterBeginTransaction(): Promise<void>;
35
- shouldProjectOneToMany(): Promise<void>;
36
- shouldDeleteMany(): Promise<void>;
37
- shouldThrowWhenCommitTransactionWithoutBeginTransaction(): Promise<void>;
38
- clearTables(): Promise<void>;
39
- abstract createTables(): Promise<void>;
40
- abstract dropTables(): Promise<void>;
41
- }
@@ -1,410 +0,0 @@
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==
@@ -1,9 +0,0 @@
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
- }