UNPKG

ionic-database-builder

Version:

Extended library from database-builder to assist in creating and maintaining SQL commands. Allowing integrate execute commands with SQLite ('@ionic-native/sqlite'), Web Sql, etc. Through the interface injection 'DatabaseCreatorContract' returning an imple

193 lines 26.5 kB
import { __awaiter } from "tslib"; import { DatabaseBuilderError } from 'database-builder'; import { DatabaseManager } from './database-manager'; import { Crud, Ddl, ExecutableBuilder, Query } from 'database-builder'; import { Observable, from, of } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; export class BuildableDatabaseManager extends DatabaseManager { constructor(databaseFactory, _databaseSettings, _injector, _mapper, platformLoad, enableLog = true) { super(databaseFactory, platformLoad); this._databaseSettings = _databaseSettings; this._injector = _injector; this._mapper = _mapper; this.enableLog = enableLog; } get mapper() { return this._mapper; } databaseInstance() { const database = super.databaseInstance(this.databaseName(), this.version()); if (!database) { throw new Error('SQLite not avaliable!'); } return database; } managedTransaction() { return from(this.databaseInstance()).pipe(mergeMap((database) => { if (!database.managedTransaction) { throw new DatabaseBuilderError('Managed Transaction not supported in current middleware!'); } return of(database.managedTransaction()); })); } // /** // * @deprecated Use managedTransaction() // */ // public newTransaction(successTransaction: () => void): Observable<DatabaseBaseTransaction> { // return new Observable((observer: Observer<DatabaseBaseTransaction>) => { // this.databaseInstance() // .then(database => { // database.transaction((result: DatabaseBaseTransaction) => { // observer.next(result); // observer.complete(); // }) // .then(x => { // successTransaction(); // }) // .catch(error => { // observer.error(error); // observer.complete(); // }); // }) // .catch(err => { // observer.error(err); // observer.complete(); // }); // }); // } // /** // * @deprecated Use managedTransaction() // */ // public transaction(successTransaction: () => void): Observable<Crud> { // return new Observable((observer: Observer<Crud>) => { // this.newTransaction(successTransaction) // .subscribe((transaction) => { // observer.next(new Crud({ database: transaction, getMapper: this._mapper, enableLog: this.enableLog })); // observer.complete(); // }, error => { // observer.error(error); // observer.complete(); // }); // }); // } /** * @deprecated Use managedTransaction() */ beginTransaction() { return new Observable((observer) => { this.sql('BEGIN TRANSACTION') .subscribe(r => { this.crud() .subscribe(crud => { observer.next(crud); observer.complete(); }, error => { observer.error(error); observer.complete(); }); }, error => { observer.error(error); observer.complete(); }); }); } /** * @deprecated Use managedTransaction() */ commitTransaction() { return new Observable((observer) => { this.sql('COMMIT') .subscribe(r => { observer.next(true); observer.complete(); }, error => { observer.error(error); observer.complete(); }); }); } /** * @deprecated Use managedTransaction() */ rollbackTransaction() { return new Observable((observer) => { this.sql('ROLLBACK') .subscribe(r => { observer.next(true); observer.complete(); }, error => { observer.error(error); observer.complete(); }); }); } crud() { return new Observable((observer) => { this.databaseInstance() .then((database) => __awaiter(this, void 0, void 0, function* () { observer.next(new Crud(yield this._databaseSettings.config(this._injector, database), { database, getMapper: this._mapper, enableLog: this.enableLog })); observer.complete(); })) .catch(error => { observer.error(error); observer.complete(); }); }); } sql(sql, params = []) { return new Observable((observer) => { this.databaseInstance() .then(database => { const executable = new ExecutableBuilder(this.enableLog); executable.execute([{ query: sql, params }], database) .subscribe((cursor) => { observer.next(cursor[0]); observer.complete(); }, err => { observer.error(err); observer.complete(); }); }) .catch(err => { observer.error(err); observer.complete(); }); }); } query(typeT, alias = void 0) { return new Observable((observer) => { this.databaseInstance() .then(database => { const that = this; observer.next(new Query(typeT, { alias, getMapper: (tKey) => { return that._mapper.get(tKey); }, mapperTable: this._mapper.get(typeT).mapperTable, database, enableLog: this.enableLog })); observer.complete(); }) .catch(error => { observer.error(error); observer.complete(); }); }); } ddl() { return new Observable((observer) => { this.databaseInstance() .then(database => { observer.next(new Ddl({ database, getMapper: this._mapper, enableLog: this.enableLog })); observer.complete(); }) .catch(error => { observer.error(error); observer.complete(); }); }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRhYmxlLWRhdGFiYXNlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiQzovVHJhYmFsaG9GZXJuYW5kby9Qcm9qZXRvcy9pb25pYy1kYXRhYmFzZS1idWlsZGVyL3Byb2plY3RzL2lvbmljLWRhdGFiYXNlLWJ1aWxkZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2J1aWxkYWJsZS1kYXRhYmFzZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWtCLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQWtCLEdBQUcsRUFBRSxpQkFBaUIsRUFBYSxLQUFLLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7QUFFakgsT0FBTyxFQUFFLFVBQVUsRUFBWSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU0xQyxNQUFNLE9BQWdCLHdCQUF5QixTQUFRLGVBQWU7SUFFbEUsWUFDSSxlQUF3QyxFQUM5QixpQkFBa0QsRUFDbEQsU0FBbUIsRUFDckIsT0FBa0IsRUFDMUIsWUFBMEIsRUFDbkIsWUFBcUIsSUFBSTtRQUVoQyxLQUFLLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBTjNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBaUM7UUFDbEQsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBRW5CLGNBQVMsR0FBVCxTQUFTLENBQWdCO0lBR3BDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQXdCLEVBQUUsRUFBRTtZQUM1RSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO2dCQUM5QixNQUFNLElBQUksb0JBQW9CLENBQUMsMERBQTBELENBQUMsQ0FBQzthQUM5RjtZQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxNQUFNO0lBQ04sMENBQTBDO0lBQzFDLE1BQU07SUFDTiwrRkFBK0Y7SUFDL0YsK0VBQStFO0lBQy9FLGtDQUFrQztJQUNsQyxrQ0FBa0M7SUFDbEMsOEVBQThFO0lBQzlFLDZDQUE2QztJQUM3QywyQ0FBMkM7SUFDM0MscUJBQXFCO0lBQ3JCLG1DQUFtQztJQUNuQyxnREFBZ0Q7SUFDaEQseUJBQXlCO0lBQ3pCLHdDQUF3QztJQUN4QyxpREFBaUQ7SUFDakQsK0NBQStDO0lBQy9DLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsOEJBQThCO0lBQzlCLHVDQUF1QztJQUN2Qyx1Q0FBdUM7SUFDdkMsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixJQUFJO0lBRUosTUFBTTtJQUNOLDBDQUEwQztJQUMxQyxNQUFNO0lBQ04seUVBQXlFO0lBQ3pFLDREQUE0RDtJQUM1RCxrREFBa0Q7SUFDbEQsNENBQTRDO0lBQzVDLDBIQUEwSDtJQUMxSCx1Q0FBdUM7SUFDdkMsNEJBQTRCO0lBQzVCLHlDQUF5QztJQUN6Qyx1Q0FBdUM7SUFDdkMsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixJQUFJO0lBRUo7O09BRUc7SUFDSSxnQkFBZ0I7UUFDbkIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFFBQXdCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO2lCQUN4QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLElBQUksRUFBRTtxQkFDTixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2QsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztZQUNYLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDUCxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUNwQixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2lCQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDWCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNQLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CO1FBQ3RCLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUEyQixFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7aUJBQ2YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNYLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1AsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sSUFBSTtRQUNQLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUF3QixFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2lCQUNsQixJQUFJLENBQUMsQ0FBTSxRQUFRLEVBQUMsRUFBRTtnQkFDbkIsUUFBUSxDQUFDLElBQUksQ0FDVCxJQUFJLElBQUksQ0FDSixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFDN0QsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FDbkUsQ0FDSixDQUFDO2dCQUNGLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUEsQ0FBQztpQkFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVcsRUFBRSxTQUFnQixFQUFFO1FBQ3RDLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFrQyxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2lCQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDaEIsS0FBSyxFQUFFLEdBQUc7d0JBQ1YsTUFBTTtxQkFDUSxDQUFDLEVBQUUsUUFBUSxDQUFDO3FCQUN6QixTQUFTLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNMLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNULFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBSSxLQUFrQixFQUFFLFFBQWdCLEtBQUssQ0FBQztRQUN0RCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBNEIsRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtpQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQzNCLEtBQUs7b0JBQ0wsU0FBUyxFQUFFLENBQUMsSUFBOEIsRUFBRSxFQUFFO3dCQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsQyxDQUFDO29CQUNELFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXO29CQUNoRCxRQUFRO29CQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sR0FBRztRQUNOLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUF1QixFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2lCQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekYsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBS0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhYmFzZVJlc3VsdCwgRGF0YWJhc2VCdWlsZGVyRXJyb3IgfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyJztcclxuaW1wb3J0IHsgRGF0YWJhc2VNYW5hZ2VyIH0gZnJvbSAnLi9kYXRhYmFzZS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ3J1ZCwgRGF0YWJhc2VPYmplY3QsIERkbCwgRXhlY3V0YWJsZUJ1aWxkZXIsIEdldE1hcHBlciwgUXVlcnksIFF1ZXJ5Q29tcGlsZWQgfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyJztcclxuaW1wb3J0IHsgRGF0YWJhc2VGYWN0b3J5Q29udHJhY3QgfSBmcm9tICcuL2RhdGFiYXNlLWZhY3RvcnktY29udHJhY3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFBsYXRmb3JtTG9hZCB9IGZyb20gJy4vcGxhdGZvcm0tbG9hZCc7XHJcbmltcG9ydCB7IERhdGFiYXNlU2V0dGluZ3NGYWN0b3J5Q29udHJhY3QgfSBmcm9tICcuL2RhdGFiYXNlLXNldHRpbmdzLWZhY3RvcnktY29udHJhY3QnO1xyXG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYW5hZ2VkVHJhbnNhY3Rpb24gfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyL3NyYy90cmFuc2FjdGlvbi9tYW5hZ2VkLXRyYW5zYWN0aW9uJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGFibGVEYXRhYmFzZU1hbmFnZXIgZXh0ZW5kcyBEYXRhYmFzZU1hbmFnZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGRhdGFiYXNlRmFjdG9yeTogRGF0YWJhc2VGYWN0b3J5Q29udHJhY3QsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9kYXRhYmFzZVNldHRpbmdzOiBEYXRhYmFzZVNldHRpbmdzRmFjdG9yeUNvbnRyYWN0LFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21hcHBlcjogR2V0TWFwcGVyLFxyXG4gICAgICAgIHBsYXRmb3JtTG9hZDogUGxhdGZvcm1Mb2FkLFxyXG4gICAgICAgIHB1YmxpYyBlbmFibGVMb2c6IGJvb2xlYW4gPSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihkYXRhYmFzZUZhY3RvcnksIHBsYXRmb3JtTG9hZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtYXBwZXIoKTogR2V0TWFwcGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRhYmFzZUluc3RhbmNlKCk6IFByb21pc2U8RGF0YWJhc2VPYmplY3Q+IHtcclxuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IHN1cGVyLmRhdGFiYXNlSW5zdGFuY2UodGhpcy5kYXRhYmFzZU5hbWUoKSwgdGhpcy52ZXJzaW9uKCkpO1xyXG4gICAgICAgIGlmICghZGF0YWJhc2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUgbm90IGF2YWxpYWJsZSEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGFiYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYW5hZ2VkVHJhbnNhY3Rpb24oKTogT2JzZXJ2YWJsZTxNYW5hZ2VkVHJhbnNhY3Rpb24+IHtcclxuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmRhdGFiYXNlSW5zdGFuY2UoKSkucGlwZShtZXJnZU1hcCgoZGF0YWJhc2U6IERhdGFiYXNlT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZGF0YWJhc2UubWFuYWdlZFRyYW5zYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRGF0YWJhc2VCdWlsZGVyRXJyb3IoJ01hbmFnZWQgVHJhbnNhY3Rpb24gbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IG1pZGRsZXdhcmUhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9mKGRhdGFiYXNlLm1hbmFnZWRUcmFuc2FjdGlvbigpKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLyoqXHJcbiAgICAvLyAgKiBAZGVwcmVjYXRlZCBVc2UgbWFuYWdlZFRyYW5zYWN0aW9uKClcclxuICAgIC8vICAqL1xyXG4gICAgLy8gcHVibGljIG5ld1RyYW5zYWN0aW9uKHN1Y2Nlc3NUcmFuc2FjdGlvbjogKCkgPT4gdm9pZCk6IE9ic2VydmFibGU8RGF0YWJhc2VCYXNlVHJhbnNhY3Rpb24+IHtcclxuICAgIC8vICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxEYXRhYmFzZUJhc2VUcmFuc2FjdGlvbj4pID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5kYXRhYmFzZUluc3RhbmNlKClcclxuICAgIC8vICAgICAgICAgICAgIC50aGVuKGRhdGFiYXNlID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBkYXRhYmFzZS50cmFuc2FjdGlvbigocmVzdWx0OiBEYXRhYmFzZUJhc2VUcmFuc2FjdGlvbikgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSlcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLnRoZW4oeCA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzVHJhbnNhY3Rpb24oKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgfSlcclxuICAgIC8vICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIC8qKlxyXG4gICAgLy8gICogQGRlcHJlY2F0ZWQgVXNlIG1hbmFnZWRUcmFuc2FjdGlvbigpXHJcbiAgICAvLyAgKi9cclxuICAgIC8vIHB1YmxpYyB0cmFuc2FjdGlvbihzdWNjZXNzVHJhbnNhY3Rpb246ICgpID0+IHZvaWQpOiBPYnNlcnZhYmxlPENydWQ+IHtcclxuICAgIC8vICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxDcnVkPikgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLm5ld1RyYW5zYWN0aW9uKHN1Y2Nlc3NUcmFuc2FjdGlvbilcclxuICAgIC8vICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHRyYW5zYWN0aW9uKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgQ3J1ZCh7IGRhdGFiYXNlOiB0cmFuc2FjdGlvbiwgZ2V0TWFwcGVyOiB0aGlzLl9tYXBwZXIsIGVuYWJsZUxvZzogdGhpcy5lbmFibGVMb2cgfSkpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBtYW5hZ2VkVHJhbnNhY3Rpb24oKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYmVnaW5UcmFuc2FjdGlvbigpOiBPYnNlcnZhYmxlPENydWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxDcnVkPikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNxbCgnQkVHSU4gVFJBTlNBQ1RJT04nKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNydWQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGNydWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChjcnVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgbWFuYWdlZFRyYW5zYWN0aW9uKClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbW1pdFRyYW5zYWN0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPGJvb2xlYW4+KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3FsKCdDT01NSVQnKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBtYW5hZ2VkVHJhbnNhY3Rpb24oKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcm9sbGJhY2tUcmFuc2FjdGlvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxib29sZWFuPikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNxbCgnUk9MTEJBQ0snKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3J1ZCgpOiBPYnNlcnZhYmxlPENydWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxDcnVkPikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlSW5zdGFuY2UoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgZGF0YWJhc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDcnVkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGF0YWJhc2VTZXR0aW5ncy5jb25maWcodGhpcy5faW5qZWN0b3IsIGRhdGFiYXNlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGF0YWJhc2UsIGdldE1hcHBlcjogdGhpcy5fbWFwcGVyLCBlbmFibGVMb2c6IHRoaXMuZW5hYmxlTG9nIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4geyBvYnNlcnZlci5lcnJvcihlcnJvcik7IG9ic2VydmVyLmNvbXBsZXRlKCk7IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzcWwoc3FsOiBzdHJpbmcsIHBhcmFtczogYW55W10gPSBbXSk6IE9ic2VydmFibGU8RGF0YWJhc2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxEYXRhYmFzZVJlc3VsdD4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZUluc3RhbmNlKClcclxuICAgICAgICAgICAgICAgIC50aGVuKGRhdGFiYXNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRhYmxlID0gbmV3IEV4ZWN1dGFibGVCdWlsZGVyKHRoaXMuZW5hYmxlTG9nKTtcclxuICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlLmV4ZWN1dGUoW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHNxbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBRdWVyeUNvbXBpbGVkXSwgZGF0YWJhc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGN1cnNvcjogRGF0YWJhc2VSZXN1bHRbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChjdXJzb3JbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcXVlcnk8VD4odHlwZVQ6IG5ldyAoKSA9PiBULCBhbGlhczogc3RyaW5nID0gdm9pZCAwKTogT2JzZXJ2YWJsZTxRdWVyeTxUPj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPFF1ZXJ5PFQ+PikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlSW5zdGFuY2UoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YWJhc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFF1ZXJ5KHR5cGVULCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRNYXBwZXI6ICh0S2V5OiAobmV3ICgpID0+IGFueSkgfCBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9tYXBwZXIuZ2V0KHRLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBwZXJUYWJsZTogdGhpcy5fbWFwcGVyLmdldCh0eXBlVCkubWFwcGVyVGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVMb2c6IHRoaXMuZW5hYmxlTG9nXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZGwoKTogT2JzZXJ2YWJsZTxEZGw+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxEZGw+KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VJbnN0YW5jZSgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhYmFzZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgRGRsKHsgZGF0YWJhc2UsIGdldE1hcHBlcjogdGhpcy5fbWFwcGVyLCBlbmFibGVMb2c6IHRoaXMuZW5hYmxlTG9nIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGF0YWJhc2VOYW1lKCk6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgdmVyc2lvbigpOiBudW1iZXI7XHJcbn1cclxuIl19