UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

140 lines 16.4 kB
import { __decorate, __metadata } from "tslib"; import { NotificationService } from '@alauda/ui'; import { Location } from '@angular/common'; import { Directive, Injector, Input, ViewChild } from '@angular/core'; import { FormBuilder, NgForm } from '@angular/forms'; import { identity } from 'lodash-es'; import { dissocPath } from 'ramda'; import { Observable } from 'rxjs'; import { createActions, yamlWriteOptions, } from '../../code/code-editor-configs'; import { InterceptDeactivateService } from '../public-api'; import { isErrorMessage } from '../types/public-api'; import { ObservableInput } from '../utils/decorators'; import { parseAll, stringify } from '../utils/yaml'; import * as i0 from "@angular/core"; const _c0 = ["resourceForm"]; /** * http://confluence.alauda.cn/display/FRON/Issue-Angular+related * 由于formControl存在内存泄漏问题,内部 form 展示-隐藏切换应当采用 hidden 进行控制 */ export class BaseFormContainer { constructor(injector) { this.isUpdate = false; this.hideManagedFields = true; this.codeEditorOptions = yamlWriteOptions; this.actionsConfig = createActions; this.formView = 'UI'; this.submitting = false; this.fillResource = identity; this.notification = injector.get(NotificationService); this.location = injector.get(Location); this.fb = injector.get(FormBuilder); this.interceptDeactivate = injector.get(InterceptDeactivateService); this.form = this.fb.group({ resource: this.fb.control('') }); } ngOnInit() { this.resource = this.initResource; this.form.patchValue({ resource: this.initResource, }); this.originalYaml = this.resourceToYaml(this.initResource); } switchFormView(view) { let resource; if (view === 'UI') { try { resource = this.yamlToResource(this.yaml); this.form.patchValue({ resource, }); } catch (err) { console.error(err); } } else { resource = this.form.get('resource').value; this.yaml = this.resourceToYaml(resource); } this.resource = resource; this.formView = view; } cancel(escape) { this.interceptDeactivate.back(escape); } checkForm() { this.ngForm.onSubmit(null); if (this.formView === 'UI' && this.ngForm.invalid) { return false; } if (this.formView === 'YAML') { try { this.resource = this.yamlToResource(this.yaml); return true; } catch { return false; } } const resource = this.form.get('resource').value; this.resource = this.fillResource(resource); return true; } yamlToResource(yaml) { try { const all = parseAll(yaml); return (Array.isArray(this.resource) ? all : all[0]); } catch (e) { if (isErrorMessage(e)) { this.notification.error(e.message); } throw e; } } resourceToYaml(resource) { try { if (Array.isArray(resource)) { return resource.map(r => this.stringifyResource(r)).join('\n---\r\n\n'); } return this.stringifyResource(resource); } catch (error) { console.error(error); return '{}'; } } updateResource(resource) { this.form.patchValue({ resource }); this.resource = resource; } stringifyResource(resource) { return stringify(this.hideManagedFields ? dissocPath(['metadata', 'managedFields'], resource) : resource, { blockQuote: 'literal' }); } static { this.ɵfac = function BaseFormContainer_Factory(t) { return new (t || BaseFormContainer)(i0.ɵɵdirectiveInject(i0.Injector)); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseFormContainer, viewQuery: function BaseFormContainer_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ngForm = _t.first); } }, inputs: { isUpdate: "isUpdate", initResource: "initResource", hideManagedFields: "hideManagedFields" } }); } } __decorate([ ObservableInput(), __metadata("design:type", Observable) ], BaseFormContainer.prototype, "initResource$", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseFormContainer, [{ type: Directive }], () => [{ type: i0.Injector }], { isUpdate: [{ type: Input }], initResource: [{ type: Input }], initResource$: [], hideManagedFields: [{ type: Input }], ngForm: [{ type: ViewChild, args: ['resourceForm', { static: false }] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL2Fic3RyYWN0L2Jhc2UtZm9ybS1jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFhLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEdBQ2pCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUVwRDs7O0dBR0c7QUFFSCxNQUFNLE9BQWdCLGlCQUFpQjtJQW9DckMsWUFBWSxRQUFrQjtRQWxDOUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVNqQixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFLekIsc0JBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDckMsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFDOUIsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDL0IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQWFULGlCQUFZLEdBQXVCLFFBQVEsQ0FBQztRQUtwRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFtQjtRQUNoQyxJQUFJLFFBQVcsQ0FBQztRQUNoQixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUM7Z0JBQ0gsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDbkIsUUFBUTtpQkFDVCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWdCO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFVLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLGNBQWMsQ0FBQyxJQUFZO1FBQ25DLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7UUFDNUQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFUyxjQUFjLENBQUMsUUFBVztRQUNsQyxJQUFJLENBQUM7WUFDSCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVTLGNBQWMsQ0FBQyxRQUFXO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRVMsaUJBQWlCLENBQUMsUUFBVztRQUNyQyxPQUFPLFNBQVMsQ0FDZCxJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDO1lBQ3JELENBQUMsQ0FBQyxRQUFRLEVBQ1osRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQzFCLENBQUM7SUFDSixDQUFDO2tGQWxJbUIsaUJBQWlCO29FQUFqQixpQkFBaUI7Ozs7Ozs7QUFRckM7SUFEQyxlQUFlLEVBQUU7OEJBQ0gsVUFBVTt3REFBSTtpRkFSVCxpQkFBaUI7Y0FEdEMsU0FBUzt5Q0FHUixRQUFRO2tCQURQLEtBQUs7WUFJTixZQUFZO2tCQURYLEtBQUs7WUFJTixhQUFhLE1BR2IsaUJBQWlCO2tCQURoQixLQUFLO1lBSVcsTUFBTTtrQkFEdEIsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBkaXNzb2NQYXRoIH0gZnJvbSAncmFtZGEnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVBY3Rpb25zLFxuICB5YW1sV3JpdGVPcHRpb25zLFxufSBmcm9tICcuLi8uLi9jb2RlL2NvZGUtZWRpdG9yLWNvbmZpZ3MnO1xuaW1wb3J0IHsgSW50ZXJjZXB0RGVhY3RpdmF0ZVNlcnZpY2UgfSBmcm9tICcuLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IGlzRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi91dGlscy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IHBhcnNlQWxsLCBzdHJpbmdpZnkgfSBmcm9tICcuLi91dGlscy95YW1sJztcblxuLyoqXG4gKiBodHRwOi8vY29uZmx1ZW5jZS5hbGF1ZGEuY24vZGlzcGxheS9GUk9OL0lzc3VlLUFuZ3VsYXIrcmVsYXRlZFxuICog55Sx5LqOZm9ybUNvbnRyb2zlrZjlnKjlhoXlrZjms4TmvI/pl67popjvvIzlhoXpg6ggZm9ybSDlsZXnpLot6ZqQ6JeP5YiH5o2i5bqU5b2T6YeH55SoIGhpZGRlbiDov5vooYzmjqfliLZcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1Db250YWluZXI8VCA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBpc1VwZGF0ZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGluaXRSZXNvdXJjZTogVDtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgaW5pdFJlc291cmNlJDogT2JzZXJ2YWJsZTxUPjtcblxuICBASW5wdXQoKVxuICBoaWRlTWFuYWdlZEZpZWxkcyA9IHRydWU7XG5cbiAgQFZpZXdDaGlsZCgncmVzb3VyY2VGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgbmdGb3JtOiBOZ0Zvcm07XG5cbiAgY29kZUVkaXRvck9wdGlvbnMgPSB5YW1sV3JpdGVPcHRpb25zO1xuICBhY3Rpb25zQ29uZmlnID0gY3JlYXRlQWN0aW9ucztcbiAgZm9ybVZpZXc6ICdVSScgfCAnWUFNTCcgPSAnVUknO1xuICBzdWJtaXR0aW5nID0gZmFsc2U7XG5cbiAgcmVzb3VyY2U6IFQ7XG4gIHlhbWw6IHN0cmluZztcbiAgLy8g5pSv5oyB5bimICfmgaLlpI0nIOeahCBjb2RlRWRpdG9yXG4gIG9yaWdpbmFsWWFtbDogc3RyaW5nO1xuICBmYjogRm9ybUJ1aWxkZXI7XG4gIGludGVyY2VwdERlYWN0aXZhdGU6IEludGVyY2VwdERlYWN0aXZhdGVTZXJ2aWNlO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcblxuICBwcm90ZWN0ZWQgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbG9jYXRpb246IExvY2F0aW9uO1xuICBwcm90ZWN0ZWQgZmlsbFJlc291cmNlOiAocmVzb3VyY2U6IFQpID0+IFQgPSBpZGVudGl0eTtcblxuICBhYnN0cmFjdCBzdWJtaXQocGFyYW1zPzogdW5rbm93bik6IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb24gPSBpbmplY3Rvci5nZXQoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGluamVjdG9yLmdldChMb2NhdGlvbik7XG4gICAgdGhpcy5mYiA9IGluamVjdG9yLmdldChGb3JtQnVpbGRlcik7XG4gICAgdGhpcy5pbnRlcmNlcHREZWFjdGl2YXRlID0gaW5qZWN0b3IuZ2V0KEludGVyY2VwdERlYWN0aXZhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHsgcmVzb3VyY2U6IHRoaXMuZmIuY29udHJvbCgnJykgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc291cmNlID0gdGhpcy5pbml0UmVzb3VyY2U7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgcmVzb3VyY2U6IHRoaXMuaW5pdFJlc291cmNlLFxuICAgIH0pO1xuICAgIHRoaXMub3JpZ2luYWxZYW1sID0gdGhpcy5yZXNvdXJjZVRvWWFtbCh0aGlzLmluaXRSZXNvdXJjZSk7XG4gIH1cblxuICBzd2l0Y2hGb3JtVmlldyh2aWV3OiAnWUFNTCcgfCAnVUknKSB7XG4gICAgbGV0IHJlc291cmNlOiBUO1xuICAgIGlmICh2aWV3ID09PSAnVUknKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvdXJjZSA9IHRoaXMueWFtbFRvUmVzb3VyY2UodGhpcy55YW1sKTtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHJlc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc291cmNlID0gdGhpcy5mb3JtLmdldCgncmVzb3VyY2UnKS52YWx1ZTtcbiAgICAgIHRoaXMueWFtbCA9IHRoaXMucmVzb3VyY2VUb1lhbWwocmVzb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2U7XG4gICAgdGhpcy5mb3JtVmlldyA9IHZpZXc7XG4gIH1cblxuICBjYW5jZWwoZXNjYXBlPzogYm9vbGVhbikge1xuICAgIHRoaXMuaW50ZXJjZXB0RGVhY3RpdmF0ZS5iYWNrKGVzY2FwZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tGb3JtKCkge1xuICAgIHRoaXMubmdGb3JtLm9uU3VibWl0KG51bGwpO1xuICAgIGlmICh0aGlzLmZvcm1WaWV3ID09PSAnVUknICYmIHRoaXMubmdGb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybVZpZXcgPT09ICdZQU1MJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMueWFtbFRvUmVzb3VyY2UodGhpcy55YW1sKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZm9ybS5nZXQoJ3Jlc291cmNlJykudmFsdWUgYXMgVDtcbiAgICB0aGlzLnJlc291cmNlID0gdGhpcy5maWxsUmVzb3VyY2UocmVzb3VyY2UpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgeWFtbFRvUmVzb3VyY2UoeWFtbDogc3RyaW5nKTogVCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFsbCA9IHBhcnNlQWxsKHlhbWwpO1xuICAgICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHRoaXMucmVzb3VyY2UpID8gYWxsIDogYWxsWzBdKSBhcyBUO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChpc0Vycm9yTWVzc2FnZShlKSkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUb1lhbWwocmVzb3VyY2U6IFQpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiByZXNvdXJjZS5tYXAociA9PiB0aGlzLnN0cmluZ2lmeVJlc291cmNlKHIpKS5qb2luKCdcXG4tLS1cXHJcXG5cXG4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeVJlc291cmNlKHJlc291cmNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gJ3t9JztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlUmVzb3VyY2UocmVzb3VyY2U6IFQpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHJlc291cmNlIH0pO1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdHJpbmdpZnlSZXNvdXJjZShyZXNvdXJjZTogVCkge1xuICAgIHJldHVybiBzdHJpbmdpZnkoXG4gICAgICB0aGlzLmhpZGVNYW5hZ2VkRmllbGRzXG4gICAgICAgID8gZGlzc29jUGF0aChbJ21ldGFkYXRhJywgJ21hbmFnZWRGaWVsZHMnXSwgcmVzb3VyY2UpXG4gICAgICAgIDogcmVzb3VyY2UsXG4gICAgICB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJyB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==