UNPKG

formioangular-colfuturo

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

202 lines 26.4 kB
import { Injectable } from "@angular/core"; import { Formio } from "formiojs-colfuturo"; import _intersection from "lodash/intersection"; import * as i0 from "@angular/core"; import * as i1 from "formioangular-colfuturo"; import * as i2 from "./form-manager.config"; import * as i3 from "formioangular-colfuturo/auth"; export class FormManagerService { appConfig; config; auth; formio; access; allAccessMap; ownAccessMap; ready; formReady; actionAllowed; form = null; formSrc = ""; perms = { delete: false, edit: false }; constructor(appConfig, config, auth) { this.appConfig = appConfig; this.config = config; this.auth = auth; if (this.appConfig && this.appConfig.appUrl) { Formio.setBaseUrl(this.appConfig.apiUrl); Formio.setProjectUrl(this.appConfig.appUrl); } else { console.error("You must provide an AppConfig within your application!"); } this.allAccessMap = { update_all: "formEdit", delete_all: "formDelete", }; this.ownAccessMap = { update_own: "formEdit", delete_own: "formDelete", }; this.actionAllowed = (action) => this.isActionAllowed(action); this.reset(); } isActionAllowed(action) { return this.access[action]; } setAccess() { this.access = { formCreate: true, formView: true, formSubmission: true, formEdit: true, formPermission: true, formDelete: true, projectSettings: true, userManagement: true, }; if (this.auth) { this.access = { formCreate: false, formView: false, formSubmission: false, formEdit: false, formPermission: false, formDelete: false, projectSettings: false, userManagement: false, }; this.ready = this.auth.ready.then(() => { let administrator = this.auth.roles["administrator"]; let formbuilder = this.auth.roles["formbuilder"]; let formadmin = this.auth.roles["formadmin"]; if (this.auth.user && this.auth.user.roles) { this.auth.user.roles.forEach((roleId) => { if (administrator._id === roleId) { this.access.formCreate = true; this.access.formView = true; this.access.formSubmission = true; this.access.formEdit = true; this.access.formPermission = true; this.access.formDelete = true; this.access.projectSettings = true; this.access.userManagement = true; } else { if (formadmin && formadmin._id === roleId) { this.access.formCreate = this.auth.formAccess.create_all.includes(roleId); this.access.formEdit = this.auth.formAccess.update_all.includes(roleId); this.access.formPermission = this.auth.formAccess.update_all.includes(roleId); this.access.formDelete = this.auth.formAccess.delete_all.includes(roleId); this.access.formView = this.auth.formAccess.read_all.includes(roleId); this.access.formSubmission = this.auth.formAccess.read_all.includes(roleId); } if (formbuilder && formbuilder._id === roleId) { this.access.formCreate = this.auth.formAccess.create_all.includes(roleId); this.access.formEdit = this.auth.formAccess.update_all.includes(roleId); this.access.formPermission = this.auth.formAccess.update_all.includes(roleId); this.access.formDelete = this.auth.formAccess.delete_all.includes(roleId); this.access.formView = this.auth.formAccess.read_all.includes(roleId); } } }); } }); } else { this.ready = Promise.resolve(false); } } reset(route) { if (route) { route.params.subscribe((params) => { if (params.id) { this.formio = new Formio(`${this.formio.formsUrl}/${params.id}`); } else { this.reset(); } }); } else { this.formio = new Formio(this.appConfig.appUrl); this.setAccess(); } } hasAccess(roles) { if (!this.auth.user) { return false; } return !!_intersection(roles, this.auth.user.roles).length; } setForm(form) { this.form = form; this.formSrc = this.appConfig.appUrl + "/" + form.path; if (form.access) { // Check if they have access here. form.access.forEach((access) => { // Check for all access. if (this.allAccessMap[access.type] && !this.access[this.allAccessMap[access.type]]) { this.access[this.allAccessMap[access.type]] = this.hasAccess(access.roles); } // Check for own access. if (this.auth && this.auth.user && form._id === this.auth.user._id && this.ownAccessMap[access.type] && !this.access[this.ownAccessMap[access.type]]) { this.access[this.ownAccessMap[access.type]] = this.hasAccess(access.roles); } }); } return form; } loadForm() { this.form = null; this.formReady = this.formio.loadForm().then((form) => this.setForm(form)); return this.formReady; } setSubmission(route) { return new Promise((resolve) => { route.params.subscribe((params) => { this.formio = new Formio(`${this.formio.submissionsUrl}/${params.id}`); resolve(this.formio); }); }); } submissionLoaded(submission) { this.auth.ready.then(() => { this.formio .userPermissions(this.auth.user, this.form, submission) .then((perms) => { this.perms.delete = perms.delete; this.perms.edit = perms.edit; }); }); } loadForms() { return this.formio.loadForms({ params: { tags: this.config.tag, }, }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService, deps: [{ token: i1.FormioAppConfig }, { token: i2.FormManagerConfig }, { token: i3.FormioAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.FormioAppConfig }, { type: i2.FormManagerConfig }, { type: i3.FormioAuthService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHaEQsTUFBTSxPQUFPLGtCQUFrQjtJQWFwQjtJQUNBO0lBQ0E7SUFkRixNQUFNLENBQVM7SUFDZixNQUFNLENBQU07SUFDWixZQUFZLENBQU07SUFDbEIsWUFBWSxDQUFNO0lBQ2xCLEtBQUssQ0FBZTtJQUNwQixTQUFTLENBQWU7SUFDeEIsYUFBYSxDQUFNO0lBQ25CLElBQUksR0FBRyxJQUFJLENBQUM7SUFDWixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFOUMsWUFDUyxTQUEwQixFQUMxQixNQUF5QixFQUN6QixJQUF1QjtRQUZ2QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUU5QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFD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LENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFlO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU07aUJBQ1IsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO2lCQUN0RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDM0IsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7YUFDdEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXpNVSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybWlvQXBwQ29uZmlnIH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvXCI7XG5pbXBvcnQgeyBGb3JtTWFuYWdlckNvbmZpZyB9IGZyb20gXCIuL2Zvcm0tbWFuYWdlci5jb25maWdcIjtcbmltcG9ydCB7IEZvcm1pbyB9IGZyb20gXCJmb3JtaW9qcy1jb2xmdXR1cm9cIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgRm9ybWlvQXV0aFNlcnZpY2UgfSBmcm9tIFwiZm9ybWlvYW5ndWxhci1jb2xmdXR1cm8vYXV0aFwiO1xuaW1wb3J0IF9pbnRlcnNlY3Rpb24gZnJvbSBcImxvZGFzaC9pbnRlcnNlY3Rpb25cIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZvcm1NYW5hZ2VyU2VydmljZSB7XG4gIHB1YmxpYyBmb3JtaW86IEZvcm1pbztcbiAgcHVibGljIGFjY2VzczogYW55O1xuICBwdWJsaWMgYWxsQWNjZXNzTWFwOiBhbnk7XG4gIHB1YmxpYyBvd25BY2Nlc3NNYXA6IGFueTtcbiAgcHVibGljIHJlYWR5OiBQcm9taXNlPGFueT47XG4gIHB1YmxpYyBmb3JtUmVhZHk6IFByb21pc2U8YW55PjtcbiAgcHVibGljIGFjdGlvbkFsbG93ZWQ6IGFueTtcbiAgcHVibGljIGZvcm0gPSBudWxsO1xuICBwdWJsaWMgZm9ybVNyYyA9IFwiXCI7XG4gIHB1YmxpYyBwZXJtcyA9IHsgZGVsZXRlOiBmYWxzZSwgZWRpdDogZmFsc2UgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXBwQ29uZmlnOiBGb3JtaW9BcHBDb25maWcsXG4gICAgcHVibGljIGNvbmZpZzogRm9ybU1hbmFnZXJDb25maWcsXG4gICAgcHVibGljIGF1dGg6IEZvcm1pb0F1dGhTZXJ2aWNlXG4gICkge1xuICAgIGlmICh0aGlzLmFwcENvbmZpZyAmJiB0aGlzLmFwcENvbmZpZy5hcHBVcmwpIHtcbiAgICAgIEZvcm1pby5zZXRCYXNlVXJsKHRoaXMuYXBwQ29uZmlnLmFwaVVybCk7XG4gICAgICBGb3JtaW8uc2V0UHJvamVjdFVybCh0aGlzLmFwcENvbmZpZy5hcHBVcmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhbiBBcHBDb25maWcgd2l0aGluIHlvdXIgYXBwbGljYXRpb24hXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYWxsQWNjZXNzTWFwID0ge1xuICAgICAgdXBkYXRlX2FsbDogXCJmb3JtRWRpdFwiLFxuICAgICAgZGVsZXRlX2FsbDogXCJmb3JtRGVsZXRlXCIsXG4gICAgfTtcbiAgICB0aGlzLm93bkFjY2Vzc01hcCA9IHtcbiAgICAgIHVwZGF0ZV9vd246IFwiZm9ybUVkaXRcIixcbiAgICAgIGRlbGV0ZV9vd246IFwiZm9ybURlbGV0ZVwiLFxuICAgIH07XG4gICAgdGhpcy5hY3Rpb25BbGxvd2VkID0gKGFjdGlvbikgPT4gdGhpcy5pc0FjdGlvbkFsbG93ZWQoYWN0aW9uKTtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICBpc0FjdGlvbkFsbG93ZWQoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hY2Nlc3NbYWN0aW9uXTtcbiAgfVxuXG4gIHNldEFjY2VzcygpIHtcbiAgICB0aGlzLmFjY2VzcyA9IHtcbiAgICAgIGZvcm1DcmVhdGU6IHRydWUsXG4gICAgICBmb3JtVmlldzogdHJ1ZSxcbiAgICAgIGZvcm1TdWJtaXNzaW9uOiB0cnVlLFxuICAgICAgZm9ybUVkaXQ6IHRydWUsXG4gICAgICBmb3JtUGVybWlzc2lvbjogdHJ1ZSxcbiAgICAgIGZvcm1EZWxldGU6IHRydWUsXG4gICAgICBwcm9qZWN0U2V0dGluZ3M6IHRydWUsXG4gICAgICB1c2VyTWFuYWdlbWVudDogdHJ1ZSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmF1dGgpIHtcbiAgICAgIHRoaXMuYWNjZXNzID0ge1xuICAgICAgICBmb3JtQ3JlYXRlOiBmYWxzZSxcbiAgICAgICAgZm9ybVZpZXc6IGZhbHNlLFxuICAgICAgICBmb3JtU3VibWlzc2lvbjogZmFsc2UsXG4gICAgICAgIGZvcm1FZGl0OiBmYWxzZSxcbiAgICAgICAgZm9ybVBlcm1pc3Npb246IGZhbHNlLFxuICAgICAgICBmb3JtRGVsZXRlOiBmYWxzZSxcbiAgICAgICAgcHJvamVjdFNldHRpbmdzOiBmYWxzZSxcbiAgICAgICAgdXNlck1hbmFnZW1lbnQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIHRoaXMucmVhZHkgPSB0aGlzLmF1dGgucmVhZHkudGhlbigoKSA9PiB7XG4gICAgICAgIGxldCBhZG1pbmlzdHJhdG9yID0gdGhpcy5hdXRoLnJvbGVzW1wiYWRtaW5pc3RyYXRvclwiXTtcbiAgICAgICAgbGV0IGZvcm1idWlsZGVyID0gdGhpcy5hdXRoLnJvbGVzW1wiZm9ybWJ1aWxkZXJcIl07XG4gICAgICAgIGxldCBmb3JtYWRtaW4gPSB0aGlzLmF1dGgucm9sZXNbXCJmb3JtYWRtaW5cIl07XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aC51c2VyICYmIHRoaXMuYXV0aC51c2VyLnJvbGVzKSB7XG4gICAgICAgICAgdGhpcy5hdXRoLnVzZXIucm9sZXMuZm9yRWFjaCgocm9sZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmIChhZG1pbmlzdHJhdG9yLl9pZCA9PT0gcm9sZUlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtVmlldyA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1TdWJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybUVkaXQgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtUGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1EZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5wcm9qZWN0U2V0dGluZ3MgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy51c2VyTWFuYWdlbWVudCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoZm9ybWFkbWluICYmIGZvcm1hZG1pbi5faWQgPT09IHJvbGVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1DcmVhdGUgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MuY3JlYXRlX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1FZGl0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5mb3JtQWNjZXNzLnVwZGF0ZV9hbGwuaW5jbHVkZXMocm9sZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtUGVybWlzc2lvbiA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy51cGRhdGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybURlbGV0ZSA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy5kZWxldGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybVZpZXcgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MucmVhZF9hbGwuaW5jbHVkZXMocm9sZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtU3VibWlzc2lvbiA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy5yZWFkX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChmb3JtYnVpbGRlciAmJiBmb3JtYnVpbGRlci5faWQgPT09IHJvbGVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1DcmVhdGUgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MuY3JlYXRlX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1FZGl0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5mb3JtQWNjZXNzLnVwZGF0ZV9hbGwuaW5jbHVkZXMocm9sZUlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtUGVybWlzc2lvbiA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy51cGRhdGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybURlbGV0ZSA9XG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy5kZWxldGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybVZpZXcgPVxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MucmVhZF9hbGwuaW5jbHVkZXMocm9sZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWFkeSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQocm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIGlmIChyb3V0ZSkge1xuICAgICAgcm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgICAgICB0aGlzLmZvcm1pbyA9IG5ldyBGb3JtaW8oYCR7dGhpcy5mb3JtaW8uZm9ybXNVcmx9LyR7cGFyYW1zLmlkfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybWlvID0gbmV3IEZvcm1pbyh0aGlzLmFwcENvbmZpZy5hcHBVcmwpO1xuICAgICAgdGhpcy5zZXRBY2Nlc3MoKTtcbiAgICB9XG4gIH1cblxuICBoYXNBY2Nlc3Mocm9sZXMpIHtcbiAgICBpZiAoIXRoaXMuYXV0aC51c2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhIV9pbnRlcnNlY3Rpb24ocm9sZXMsIHRoaXMuYXV0aC51c2VyLnJvbGVzKS5sZW5ndGg7XG4gIH1cblxuICBzZXRGb3JtKGZvcm06IGFueSkge1xuICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgdGhpcy5mb3JtU3JjID0gdGhpcy5hcHBDb25maWcuYXBwVXJsICsgXCIvXCIgKyBmb3JtLnBhdGg7XG4gICAgaWYgKGZvcm0uYWNjZXNzKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGV5IGhhdmUgYWNjZXNzIGhlcmUuXG4gICAgICBmb3JtLmFjY2Vzcy5mb3JFYWNoKChhY2Nlc3MpID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFsbCBhY2Nlc3MuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFsbEFjY2Vzc01hcFthY2Nlc3MudHlwZV0gJiZcbiAgICAgICAgICAhdGhpcy5hY2Nlc3NbdGhpcy5hbGxBY2Nlc3NNYXBbYWNjZXNzLnR5cGVdXVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFjY2Vzc1t0aGlzLmFsbEFjY2Vzc01hcFthY2Nlc3MudHlwZV1dID0gdGhpcy5oYXNBY2Nlc3MoXG4gICAgICAgICAgICBhY2Nlc3Mucm9sZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIG93biBhY2Nlc3MuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmF1dGggJiZcbiAgICAgICAgICB0aGlzLmF1dGgudXNlciAmJlxuICAgICAgICAgIGZvcm0uX2lkID09PSB0aGlzLmF1dGgudXNlci5faWQgJiZcbiAgICAgICAgICB0aGlzLm93bkFjY2Vzc01hcFthY2Nlc3MudHlwZV0gJiZcbiAgICAgICAgICAhdGhpcy5hY2Nlc3NbdGhpcy5vd25BY2Nlc3NNYXBbYWNjZXNzLnR5cGVdXVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmFjY2Vzc1t0aGlzLm93bkFjY2Vzc01hcFthY2Nlc3MudHlwZV1dID0gdGhpcy5oYXNBY2Nlc3MoXG4gICAgICAgICAgICBhY2Nlc3Mucm9sZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm07XG4gIH1cblxuICBsb2FkRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSBudWxsO1xuICAgIHRoaXMuZm9ybVJlYWR5ID0gdGhpcy5mb3JtaW8ubG9hZEZvcm0oKS50aGVuKChmb3JtKSA9PiB0aGlzLnNldEZvcm0oZm9ybSkpO1xuICAgIHJldHVybiB0aGlzLmZvcm1SZWFkeTtcbiAgfVxuXG4gIHNldFN1Ym1pc3Npb24ocm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtaW8gPSBuZXcgRm9ybWlvKGAke3RoaXMuZm9ybWlvLnN1Ym1pc3Npb25zVXJsfS8ke3BhcmFtcy5pZH1gKTtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLmZvcm1pbyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN1Ym1pc3Npb25Mb2FkZWQoc3VibWlzc2lvbjogYW55KSB7XG4gICAgdGhpcy5hdXRoLnJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtaW9cbiAgICAgICAgLnVzZXJQZXJtaXNzaW9ucyh0aGlzLmF1dGgudXNlciwgdGhpcy5mb3JtLCBzdWJtaXNzaW9uKVxuICAgICAgICAudGhlbigocGVybXMpID0+IHtcbiAgICAgICAgICB0aGlzLnBlcm1zLmRlbGV0ZSA9IHBlcm1zLmRlbGV0ZTtcbiAgICAgICAgICB0aGlzLnBlcm1zLmVkaXQgPSBwZXJtcy5lZGl0O1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRGb3JtcygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtaW8ubG9hZEZvcm1zKHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0YWdzOiB0aGlzLmNvbmZpZy50YWcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=