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
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRhYmxlLWRhdGFiYXNlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiQzovVHJhYmFsaG9GZXJuYW5kby9Qcm9qZXRvcy9pb25pYy1kYXRhYmFzZS1idWlsZGVyL3Byb2plY3RzL2lvbmljLWRhdGFiYXNlLWJ1aWxkZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2J1aWxkYWJsZS1kYXRhYmFzZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWtCLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQWtCLEdBQUcsRUFBRSxpQkFBaUIsRUFBYSxLQUFLLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7QUFFakgsT0FBTyxFQUFFLFVBQVUsRUFBWSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU0xQyxNQUFNLE9BQWdCLHdCQUF5QixTQUFRLGVBQWU7SUFFbEUsWUFDSSxlQUF3QyxFQUM5QixpQkFBa0QsRUFDbEQsU0FBbUIsRUFDckIsT0FBa0IsRUFDMUIsWUFBMEIsRUFDbkIsWUFBcUIsSUFBSTtRQUVoQyxLQUFLLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBTjNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBaUM7UUFDbEQsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNyQixZQUFPLEdBQVAsT0FBTyxDQUFXO1FBRW5CLGNBQVMsR0FBVCxTQUFTLENBQWdCO0lBR3BDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxD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QyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBS0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhYmFzZVJlc3VsdCwgRGF0YWJhc2VCdWlsZGVyRXJyb3IgfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyJztcclxuaW1wb3J0IHsgRGF0YWJhc2VNYW5hZ2VyIH0gZnJvbSAnLi9kYXRhYmFzZS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ3J1ZCwgRGF0YWJhc2VPYmplY3QsIERkbCwgRXhlY3V0YWJsZUJ1aWxkZXIsIEdldE1hcHBlciwgUXVlcnksIFF1ZXJ5Q29tcGlsZWQgfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyJztcclxuaW1wb3J0IHsgRGF0YWJhc2VGYWN0b3J5Q29udHJhY3QgfSBmcm9tICcuL2RhdGFiYXNlLWZhY3RvcnktY29udHJhY3QnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFBsYXRmb3JtTG9hZCB9IGZyb20gJy4vcGxhdGZvcm0tbG9hZCc7XHJcbmltcG9ydCB7IERhdGFiYXNlU2V0dGluZ3NGYWN0b3J5Q29udHJhY3QgfSBmcm9tICcuL2RhdGFiYXNlLXNldHRpbmdzLWZhY3RvcnktY29udHJhY3QnO1xyXG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYW5hZ2VkVHJhbnNhY3Rpb24gfSBmcm9tICdkYXRhYmFzZS1idWlsZGVyL3NyYy90cmFuc2FjdGlvbi9tYW5hZ2VkLXRyYW5zYWN0aW9uJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGFibGVEYXRhYmFzZU1hbmFnZXIgZXh0ZW5kcyBEYXRhYmFzZU1hbmFnZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGRhdGFiYXNlRmFjdG9yeTogRGF0YWJhc2VGYWN0b3J5Q29udHJhY3QsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9kYXRhYmFzZVNldHRpbmdzOiBEYXRhYmFzZVNldHRpbmdzRmFjdG9yeUNvbnRyYWN0LFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21hcHBlcjogR2V0TWFwcGVyLFxyXG4gICAgICAgIHBsYXRmb3JtTG9hZDogUGxhdGZvcm1Mb2FkLFxyXG4gICAgICAgIHB1YmxpYyBlbmFibGVMb2c6IGJvb2xlYW4gPSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihkYXRhYmFzZUZhY3RvcnksIHBsYXRmb3JtTG9hZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtYXBwZXIoKTogR2V0TWFwcGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYXRhYmFzZUluc3RhbmNlKCk6IFByb21pc2U8RGF0YWJhc2VPYmplY3Q+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