@uql/sqlite
Advanced tools
Comparing version 0.4.8 to 0.4.9
@@ -5,3 +5,3 @@ { | ||
"license": "MIT", | ||
"version": "0.4.8", | ||
"version": "0.4.9", | ||
"main": "index.js", | ||
@@ -25,3 +25,3 @@ "types": "index.d.ts", | ||
"@types/sqlite3": "^3.1.7", | ||
"@uql/core": "^0.4.8", | ||
"@uql/core": "^0.4.9", | ||
"copyfiles": "^2.4.1", | ||
@@ -28,0 +28,0 @@ "rimraf": "^3.0.2", |
@@ -248,15 +248,12 @@ [![build status](https://travis-ci.org/impensables/uql.svg?branch=master)](https://travis-ci.org/impensables/uql?branch=master) | ||
@Transactional() | ||
async confirmAction(body: Confirmation, @InjectQuerier() querier?: Querier): Promise<void> { | ||
async confirmAction(body: Confirmation, @InjectQuerier() querier?: Querier) { | ||
if (body.type === 'register') { | ||
const newUser: User = { | ||
await querier.insertOne(User, { | ||
name: body.name, | ||
email: body.email, | ||
password: body.password, | ||
}; | ||
await querier.insertOne(User, newUser); | ||
}); | ||
} else { | ||
const userId = body.user as string; | ||
await querier.updateOneById(User, userId, { password: body.password }); | ||
await querier.updateOneById(User, body.userId, { password: body.password }); | ||
} | ||
await querier.updateOneById(Confirmation, body.id, { status: CONFIRM_STATUS_VERIFIED }); | ||
@@ -281,3 +278,3 @@ } | ||
3. start the transaction with `await querier.beginTransaction()` | ||
4. perform the different operations using the `querier` | ||
4. perform the different operations using the `querier` or `repositories` | ||
5. commit the transaction with `await querier.commitTransaction()` | ||
@@ -288,5 +285,5 @@ 6. in the `catch` block, add `await querier.rollbackTransaction()` | ||
```ts | ||
import { getQuerier } from '@uql/core/querier'; | ||
import { getQuerier } from '@uql/core'; | ||
async function confirmAction(confirmation: Confirmation): Promise<void> { | ||
async function confirmAction(body: Confirmation) { | ||
const querier = await getQuerier(); | ||
@@ -297,16 +294,15 @@ | ||
if (confirmation.entity === 'register') { | ||
const newUser: User = { | ||
name: confirmation.name, | ||
email: confirmation.email, | ||
password: confirmation.password, | ||
}; | ||
await querier.insertOne(User, newUser); | ||
if (body.action === 'signup') { | ||
// signup | ||
await querier.insertOne(User, { | ||
name: body.name, | ||
email: body.email, | ||
password: body.password, | ||
}); | ||
} else { | ||
// confirm change password | ||
const userId = confirmation.user as string; | ||
await querier.updateOneById(User, userId, { password: confirmation.password }); | ||
// change password | ||
await querier.updateOneById(User, body.userId, { password: body.password }); | ||
} | ||
await this.querier.updateOneById(Confirmation, body.id, { status: CONFIRM_STATUS_VERIFIED }); | ||
await querier.updateOneById(Confirmation, body.id, { status: CONFIRM_STATUS_VERIFIED }); | ||
@@ -349,9 +345,9 @@ await querier.commitTransaction(); | ||
app | ||
// ...other routes may go before and/or after (as usual) | ||
// ... | ||
.use( | ||
'/api', | ||
// this will generate CRUD REST APIs for the entities. | ||
// all entities will be automatically exposed unless | ||
// 'include' or 'exclude' options are provided | ||
entitiesMiddleware({ | ||
// all entities will be automatically exposed unless | ||
// 'include' or 'exclude' options are provided | ||
exclude: [Confirmation], | ||
@@ -381,8 +377,8 @@ }) | ||
```ts | ||
import { getQuerier } from '@uql/client'; | ||
import { getRepository } from '@uql/client'; | ||
const querier = await getQuerier(); | ||
// 'Item' is an entity class | ||
const querier = await getRepository(Item); | ||
// 'Item' is an entity class | ||
const lastItems = await querier.find(Item, { | ||
const lastItems = await itemRepository.findMany({ | ||
sort: { createdAt: -1 }, | ||
@@ -389,0 +385,0 @@ limit: 100, |
@@ -8,6 +8,6 @@ import { BaseSqlQuerier } from '@uql/core/sql'; | ||
query<E>(query: string): Promise<E>; | ||
insert<E>(entity: Type<E>, bodies: E[]): Promise<any[]>; | ||
update<E>(entity: Type<E>, filter: QueryFilter<E>, body: E): Promise<number>; | ||
find<E>(entity: Type<E>, qm: Query<E>, opts?: QueryOptions): Promise<E[]>; | ||
remove<E>(entity: Type<E>, filter: QueryFilter<E>): Promise<number>; | ||
insertMany<E>(entity: Type<E>, bodies: E[]): Promise<any[]>; | ||
updateMany<E>(entity: Type<E>, filter: QueryFilter<E>, body: E): Promise<number>; | ||
findMany<E>(entity: Type<E>, qm: Query<E>, opts?: QueryOptions): Promise<E[]>; | ||
removeMany<E>(entity: Type<E>, filter: QueryFilter<E>): Promise<number>; | ||
} |
@@ -16,3 +16,3 @@ "use strict"; | ||
} | ||
async insert(entity, bodies) { | ||
async insertMany(entity, bodies) { | ||
const query = this.dialect.insert(entity, bodies); | ||
@@ -23,3 +23,3 @@ const res = await this.conn.run(query); | ||
} | ||
async update(entity, filter, body) { | ||
async updateMany(entity, filter, body) { | ||
const query = this.dialect.update(entity, filter, body); | ||
@@ -29,3 +29,3 @@ const res = await this.conn.run(query); | ||
} | ||
async find(entity, qm, opts) { | ||
async findMany(entity, qm, opts) { | ||
const query = this.dialect.find(entity, qm, opts); | ||
@@ -37,3 +37,3 @@ const res = await this.query(query); | ||
} | ||
async remove(entity, filter) { | ||
async removeMany(entity, filter) { | ||
const query = this.dialect.remove(entity, filter); | ||
@@ -45,2 +45,2 @@ const res = await this.conn.run(query); | ||
exports.SqliteQuerier = SqliteQuerier; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlUXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcWxpdGVRdWVyaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUF3RDtBQUN4RCwwREFBcUQ7QUFHckQsbURBQWdEO0FBRWhELE1BQWEsYUFBYyxTQUFRLG9CQUFjO0lBQy9DLFlBQXFCLElBQXNCO1FBQ3pDLEtBQUssQ0FBQyxJQUFJLDZCQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQURkLFNBQUksR0FBSixJQUFJLENBQWtCO0lBRTNDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFJLEtBQWE7UUFDMUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLEdBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUksTUFBZSxFQUFFLE1BQVc7UUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsbUJBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FDdkYsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFJLE1BQWUsRUFBRSxNQUFzQixFQUFFLElBQU87UUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBSSxNQUFlLEVBQUUsRUFBWSxFQUFFLElBQW1CO1FBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLGFBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBSSxNQUFlLEVBQUUsTUFBc0I7UUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQXRDRCxzQ0FzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXBSb3dzLCBCYXNlU3FsUXVlcmllciB9IGZyb20gJ0B1cWwvY29yZS9zcWwnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJ0B1cWwvY29yZS9lbnRpdHkvZGVjb3JhdG9yJztcbmltcG9ydCB7IFF1ZXJ5LCBRdWVyeUZpbHRlciwgUXVlcnlPcHRpb25zLCBUeXBlIH0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuaW1wb3J0IHsgU3FsaXQzQ29ubmVjdGlvbiB9IGZyb20gJy4vc3FsaXRlM0Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgU3FsaXRlRGlhbGVjdCB9IGZyb20gJy4vc3FsaXRlRGlhbGVjdCc7XG5cbmV4cG9ydCBjbGFzcyBTcWxpdGVRdWVyaWVyIGV4dGVuZHMgQmFzZVNxbFF1ZXJpZXIge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uOiBTcWxpdDNDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIobmV3IFNxbGl0ZURpYWxlY3QoKSwgY29ubik7XG4gIH1cblxuICBhc3luYyBxdWVyeTxFPihxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxFPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICByZXR1cm4gcmVzIGFzIHVua25vd24gYXMgRTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydDxFPihlbnRpdHk6IFR5cGU8RT4sIGJvZGllczogRVtdKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmRpYWxlY3QuaW5zZXJ0KGVudGl0eSwgYm9kaWVzKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbm4ucnVuKHF1ZXJ5KTtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIHJldHVybiBib2RpZXMubWFwKChib2R5LCBpbmRleCkgPT5cbiAgICAgIGJvZHlbbWV0YS5pZC5wcm9wZXJ0eV0gPyBib2R5W21ldGEuaWQucHJvcGVydHldIDogcmVzLmxhc3RJRCAtIHJlcy5jaGFuZ2VzICsgaW5kZXggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZTxFPihlbnRpdHk6IFR5cGU8RT4sIGZpbHRlcjogUXVlcnlGaWx0ZXI8RT4sIGJvZHk6IEUpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGlhbGVjdC51cGRhdGUoZW50aXR5LCBmaWx0ZXIsIGJvZHkpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29ubi5ydW4ocXVlcnkpO1xuICAgIHJldHVybiByZXMuY2hhbmdlcztcbiAgfVxuXG4gIGFzeW5jIGZpbmQ8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM/OiBRdWVyeU9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGlhbGVjdC5maW5kKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucXVlcnk8RVtdPihxdWVyeSk7XG4gICAgY29uc3QgZm91bmRzID0gbWFwUm93cyhyZXMpO1xuICAgIGF3YWl0IHRoaXMucG9wdWxhdGVUb01hbnlSZWxhdGlvbnMoZW50aXR5LCBmb3VuZHMsIHFtLnBvcHVsYXRlKTtcbiAgICByZXR1cm4gZm91bmRzO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlPEU+KGVudGl0eTogVHlwZTxFPiwgZmlsdGVyOiBRdWVyeUZpbHRlcjxFPikge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5kaWFsZWN0LnJlbW92ZShlbnRpdHksIGZpbHRlcik7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb25uLnJ1bihxdWVyeSk7XG4gICAgcmV0dXJuIHJlcy5jaGFuZ2VzO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlUXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcWxpdGVRdWVyaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUF3RDtBQUN4RCwwREFBcUQ7QUFHckQsbURBQWdEO0FBRWhELE1BQWEsYUFBYyxTQUFRLG9CQUFjO0lBQy9DLFlBQXFCLElBQXNCO1FBQ3pDLEtBQUssQ0FBQyxJQUFJLDZCQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQURkLFNBQUksR0FBSixJQUFJLENBQWtCO0lBRTNDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFJLEtBQWE7UUFDMUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLEdBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUksTUFBZSxFQUFFLE1BQVc7UUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsbUJBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FDdkYsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFJLE1BQWUsRUFBRSxNQUFzQixFQUFFLElBQU87UUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBSSxNQUFlLEVBQUUsRUFBWSxFQUFFLElBQW1CO1FBQ2xFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLGFBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBSSxNQUFlLEVBQUUsTUFBc0I7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQXRDRCxzQ0FzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXBSb3dzLCBCYXNlU3FsUXVlcmllciB9IGZyb20gJ0B1cWwvY29yZS9zcWwnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJ0B1cWwvY29yZS9lbnRpdHkvZGVjb3JhdG9yJztcbmltcG9ydCB7IFF1ZXJ5LCBRdWVyeUZpbHRlciwgUXVlcnlPcHRpb25zLCBUeXBlIH0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuaW1wb3J0IHsgU3FsaXQzQ29ubmVjdGlvbiB9IGZyb20gJy4vc3FsaXRlM0Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgU3FsaXRlRGlhbGVjdCB9IGZyb20gJy4vc3FsaXRlRGlhbGVjdCc7XG5cbmV4cG9ydCBjbGFzcyBTcWxpdGVRdWVyaWVyIGV4dGVuZHMgQmFzZVNxbFF1ZXJpZXIge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25uOiBTcWxpdDNDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIobmV3IFNxbGl0ZURpYWxlY3QoKSwgY29ubik7XG4gIH1cblxuICBhc3luYyBxdWVyeTxFPihxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxFPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICByZXR1cm4gcmVzIGFzIHVua25vd24gYXMgRTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydE1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBib2RpZXM6IEVbXSkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5kaWFsZWN0Lmluc2VydChlbnRpdHksIGJvZGllcyk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb25uLnJ1bihxdWVyeSk7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICByZXR1cm4gYm9kaWVzLm1hcCgoYm9keSwgaW5kZXgpID0+XG4gICAgICBib2R5W21ldGEuaWQucHJvcGVydHldID8gYm9keVttZXRhLmlkLnByb3BlcnR5XSA6IHJlcy5sYXN0SUQgLSByZXMuY2hhbmdlcyArIGluZGV4ICsgMVxuICAgICk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVNYW55PEU+KGVudGl0eTogVHlwZTxFPiwgZmlsdGVyOiBRdWVyeUZpbHRlcjxFPiwgYm9keTogRSkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5kaWFsZWN0LnVwZGF0ZShlbnRpdHksIGZpbHRlciwgYm9keSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb25uLnJ1bihxdWVyeSk7XG4gICAgcmV0dXJuIHJlcy5jaGFuZ2VzO1xuICB9XG5cbiAgYXN5bmMgZmluZE1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM/OiBRdWVyeU9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGlhbGVjdC5maW5kKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucXVlcnk8RVtdPihxdWVyeSk7XG4gICAgY29uc3QgZm91bmRzID0gbWFwUm93cyhyZXMpO1xuICAgIGF3YWl0IHRoaXMucG9wdWxhdGVUb01hbnlSZWxhdGlvbnMoZW50aXR5LCBmb3VuZHMsIHFtLnBvcHVsYXRlKTtcbiAgICByZXR1cm4gZm91bmRzO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlTWFueTxFPihlbnRpdHk6IFR5cGU8RT4sIGZpbHRlcjogUXVlcnlGaWx0ZXI8RT4pIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGlhbGVjdC5yZW1vdmUoZW50aXR5LCBmaWx0ZXIpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29ubi5ydW4ocXVlcnkpO1xuICAgIHJldHVybiByZXMuY2hhbmdlcztcbiAgfVxufVxuIl19 |
30011
392