UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

182 lines 22.3 kB
import { chainCommands, createParagraphNear, liftEmptyBlock, newlineInCode, splitBlock } from 'prosemirror-commands'; import { DOMParser } from 'prosemirror-model'; import MarkCommand from './commands/Mark'; import ListCommand from './commands/ListItem'; import LinkCommand from './commands/Link'; import HeadingCommand from './commands/Heading'; import ImageCommand from './commands/Image'; import TextColorCommand from './commands/TextColor'; import TextAlignCommand from './commands/TextAlign'; const execMark = (name, toggle = false) => { return (state, dispatch) => { const command = new MarkCommand(name); if (!toggle) { return command.apply()(state, dispatch); } return command.toggle()(state, dispatch); }; }; class EditorCommands { constructor(view) { this.applyTrx = (tr) => { this.state = this.state.apply(tr ?? this.tr); this.tr = this.state.tr; this.tr.setMeta('APPLIED_TRX', true); }; this.dispatch = (tr) => { this.applyTrx(tr); }; if (!view) { throw Error('NgxEditor: Required view to initialize commands.'); } this.view = view; this.state = view.state; this.tr = this.view.state.tr; } exec() { // No changes applied if (!this.tr.getMeta('APPLIED_TRX')) { return false; } const forceEmit = !this.view.state.doc.eq(this.state.doc); this.view.updateState(this.state); const tr = this.tr .setMeta('FORCE_EMIT', forceEmit); this.view.dispatch(tr); return true; } focus() { this.view.focus(); return this; } scrollIntoView() { this.tr.scrollIntoView(); this.applyTrx(); return this; } insertText(text) { this.tr.insertText(text); this.applyTrx(); return this; } insertNewLine() { const newLineCommands = [newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock]; chainCommands(...newLineCommands)(this.state, this.dispatch); return this; } applyMark(name) { execMark(name, false)(this.state, this.dispatch); return this; } toggleMark(name) { execMark(name, true)(this.state, this.dispatch); return this; } bold() { execMark('strong')(this.state, this.dispatch); return this; } toggleBold() { execMark('strong', true)(this.state, this.dispatch); return this; } italics() { execMark('em')(this.state, this.dispatch); return this; } toggleItalics() { execMark('em', true)(this.state, this.dispatch); return this; } underline() { execMark('u')(this.state, this.dispatch); return this; } toggleUnderline() { execMark('u', true)(this.state, this.dispatch); return this; } strike() { execMark('s')(this.state, this.dispatch); return this; } toggleStrike() { execMark('s', true)(this.state, this.dispatch); return this; } code() { execMark('code')(this.state, this.dispatch); return this; } toggleCode() { execMark('code', true)(this.state, this.dispatch); return this; } toggleOrderedList() { const command = new ListCommand(false); command.toggle()(this.state, this.dispatch); return this; } toggleBulletList() { const command = new ListCommand(true); command.toggle()(this.state, this.dispatch); return this; } toggleHeading(level) { const command = new HeadingCommand(level); command.toggle()(this.state, this.dispatch); return this; } insertLink(text, attrs) { const command = new LinkCommand(); command.insert(text, attrs)(this.state, this.dispatch); return this; } updateLink(attrs) { const command = new LinkCommand(); command.update(attrs)(this.state, this.dispatch); return this; } insertImage(src, attrs = {}) { const command = new ImageCommand(); command.insert(src, attrs)(this.state, this.dispatch); return this; } textColor(color) { const command = new TextColorCommand('text_color'); command.apply({ color })(this.state, this.dispatch); return this; } backgroundColor(color) { const command = new TextColorCommand('text_background_color'); command.apply({ backgroundColor: color })(this.state, this.dispatch); return this; } removeTextColor() { const command = new TextColorCommand('text_color'); command.remove()(this.state, this.dispatch); return this; } removeBackgroundColor() { const command = new TextColorCommand('text_background_color'); command.remove()(this.state, this.dispatch); return this; } align(p) { const command = new TextAlignCommand(p); command.toggle()(this.state, this.dispatch); return this; } insertHTML(html) { const { selection, schema, tr } = this.state; const { from, to } = selection; const element = document.createElement('div'); element.innerHTML = html.trim(); const slice = DOMParser.fromSchema(schema).parseSlice(element); const transaction = tr.replaceRange(from, to, slice); this.applyTrx(transaction); return this; } } export default EditorCommands; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWRpdG9yQ29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NyYy9saWIvRWRpdG9yQ29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQ2xELGFBQWEsRUFBRSxVQUFVLEVBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sV0FBVyxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sV0FBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLGNBQWlDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxZQUE0QixNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sZ0JBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxnQkFBMkIsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQVksRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEVBQUU7SUFDaEQsT0FBTyxDQUFDLEtBQWtCLEVBQUUsUUFBbUMsRUFBRSxFQUFFO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjO0lBS2xCLFlBQVksSUFBZ0I7UUFVcEIsYUFBUSxH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QUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvclN0YXRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IEVkaXRvclZpZXcgfSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7XG4gIGNoYWluQ29tbWFuZHMsIGNyZWF0ZVBhcmFncmFwaE5lYXIsIGxpZnRFbXB0eUJsb2NrLFxuICBuZXdsaW5lSW5Db2RlLCBzcGxpdEJsb2NrXG59IGZyb20gJ3Byb3NlbWlycm9yLWNvbW1hbmRzJztcbmltcG9ydCB7IERPTVBhcnNlciB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcblxuaW1wb3J0IE1hcmtDb21tYW5kIGZyb20gJy4vY29tbWFuZHMvTWFyayc7XG5pbXBvcnQgTGlzdENvbW1hbmQgZnJvbSAnLi9jb21tYW5kcy9MaXN0SXRlbSc7XG5pbXBvcnQgTGlua0NvbW1hbmQsIHsgTGlua0F0dHJzIH0gZnJvbSAnLi9jb21tYW5kcy9MaW5rJztcbmltcG9ydCBIZWFkaW5nQ29tbWFuZCwgeyBIZWFkaW5nTGV2ZWxzIH0gZnJvbSAnLi9jb21tYW5kcy9IZWFkaW5nJztcbmltcG9ydCBJbWFnZUNvbW1hbmQsIHsgSW1hZ2VBdHRycyB9IGZyb20gJy4vY29tbWFuZHMvSW1hZ2UnO1xuaW1wb3J0IFRleHRDb2xvckNvbW1hbmQgZnJvbSAnLi9jb21tYW5kcy9UZXh0Q29sb3InO1xuaW1wb3J0IFRleHRBbGlnbkNvbW1hbmQsIHsgQWxpZ24gfSBmcm9tICcuL2NvbW1hbmRzL1RleHRBbGlnbic7XG5cbmNvbnN0IGV4ZWNNYXJrID0gKG5hbWU6IHN0cmluZywgdG9nZ2xlID0gZmFsc2UpID0+IHtcbiAgcmV0dXJuIChzdGF0ZTogRWRpdG9yU3RhdGUsIGRpc3BhdGNoOiAodHI6IFRyYW5zYWN0aW9uKSA9PiB2b2lkKSA9PiB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBNYXJrQ29tbWFuZChuYW1lKTtcblxuICAgIGlmICghdG9nZ2xlKSB7XG4gICAgICByZXR1cm4gY29tbWFuZC5hcHBseSgpKHN0YXRlLCBkaXNwYXRjaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1hbmQudG9nZ2xlKCkoc3RhdGUsIGRpc3BhdGNoKTtcbiAgfTtcbn07XG5cbmNsYXNzIEVkaXRvckNvbW1hbmRzIHtcbiAgcHJpdmF0ZSB2aWV3OiBFZGl0b3JWaWV3O1xuICBwcml2YXRlIHN0YXRlOiBFZGl0b3JTdGF0ZTtcbiAgcHJpdmF0ZSB0cjogVHJhbnNhY3Rpb247XG5cbiAgY29uc3RydWN0b3IodmlldzogRWRpdG9yVmlldykge1xuICAgIGlmICghdmlldykge1xuICAgICAgdGhyb3cgRXJyb3IoJ05neEVkaXRvcjogUmVxdWlyZWQgdmlldyB0byBpbml0aWFsaXplIGNvbW1hbmRzLicpO1xuICAgIH1cblxuICAgIHRoaXMudmlldyA9IHZpZXc7XG4gICAgdGhpcy5zdGF0ZSA9IHZpZXcuc3RhdGU7XG4gICAgdGhpcy50ciA9IHRoaXMudmlldy5zdGF0ZS50cjtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUcnggPSAodHI/OiBUcmFuc2FjdGlvbikgPT4ge1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlLmFwcGx5KHRyID8/IHRoaXMudHIpO1xuICAgIHRoaXMudHIgPSB0aGlzLnN0YXRlLnRyO1xuICAgIHRoaXMudHIuc2V0TWV0YSgnQVBQTElFRF9UUlgnLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2ggPSAodHI6IFRyYW5zYWN0aW9uKTogdm9pZCA9PiB7XG4gICAgdGhpcy5hcHBseVRyeCh0cik7XG4gIH1cblxuICBleGVjKCk6IGJvb2xlYW4ge1xuICAgIC8vIE5vIGNoYW5nZXMgYXBwbGllZFxuICAgIGlmICghdGhpcy50ci5nZXRNZXRhKCdBUFBMSUVEX1RSWCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZm9yY2VFbWl0ID0gIXRoaXMudmlldy5zdGF0ZS5kb2MuZXEodGhpcy5zdGF0ZS5kb2MpO1xuICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZSh0aGlzLnN0YXRlKTtcblxuICAgIGNvbnN0IHRyID0gdGhpcy50clxuICAgICAgLnNldE1ldGEoJ0ZPUkNFX0VNSVQnLCBmb3JjZUVtaXQpO1xuXG4gICAgdGhpcy52aWV3LmRpc3BhdGNoKHRyKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZvY3VzKCk6IHRoaXMge1xuICAgIHRoaXMudmlldy5mb2N1cygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2Nyb2xsSW50b1ZpZXcoKTogdGhpcyB7XG4gICAgdGhpcy50ci5zY3JvbGxJbnRvVmlldygpO1xuICAgIHRoaXMuYXBwbHlUcngoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluc2VydFRleHQodGV4dDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy50ci5pbnNlcnRUZXh0KHRleHQpO1xuICAgIHRoaXMuYXBwbHlUcngoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluc2VydE5ld0xpbmUoKTogdGhpcyB7XG4gICAgY29uc3QgbmV3TGluZUNvbW1hbmRzID0gW25ld2xpbmVJbkNvZGUsIGNyZWF0ZVBhcmFncmFwaE5lYXIsIGxpZnRFbXB0eUJsb2NrLCBzcGxpdEJsb2NrXTtcbiAgICBjaGFpbkNvbW1hbmRzKC4uLm5ld0xpbmVDb21tYW5kcykodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhcHBseU1hcmsobmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgZXhlY01hcmsobmFtZSwgZmFsc2UpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlTWFyayhuYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBleGVjTWFyayhuYW1lLCB0cnVlKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJvbGQoKTogdGhpcyB7XG4gICAgZXhlY01hcmsoJ3N0cm9uZycpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlQm9sZCgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnc3Ryb25nJywgdHJ1ZSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpdGFsaWNzKCk6IHRoaXMge1xuICAgIGV4ZWNNYXJrKCdlbScpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlSXRhbGljcygpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnZW0nLCB0cnVlKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVuZGVybGluZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygndScpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlVW5kZXJsaW5lKCk6IHRoaXMge1xuICAgIGV4ZWNNYXJrKCd1JywgdHJ1ZSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdHJpa2UoKTogdGhpcyB7XG4gICAgZXhlY01hcmsoJ3MnKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvZ2dsZVN0cmlrZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygncycsIHRydWUpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29kZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnY29kZScpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlQ29kZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnY29kZScsIHRydWUpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlT3JkZXJlZExpc3QoKTogdGhpcyB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBMaXN0Q29tbWFuZChmYWxzZSk7XG4gICAgY29tbWFuZC50b2dnbGUoKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvZ2dsZUJ1bGxldExpc3QoKTogdGhpcyB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBMaXN0Q29tbWFuZCh0cnVlKTtcbiAgICBjb21tYW5kLnRvZ2dsZSgpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlSGVhZGluZyhsZXZlbDogSGVhZGluZ0xldmVscyk6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgSGVhZGluZ0NvbW1hbmQobGV2ZWwpO1xuICAgIGNvbW1hbmQudG9nZ2xlKCkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbnNlcnRMaW5rKHRleHQ6IHN0cmluZywgYXR0cnM6IExpbmtBdHRycyk6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgTGlua0NvbW1hbmQoKTtcbiAgICBjb21tYW5kLmluc2VydCh0ZXh0LCBhdHRycykodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMaW5rKGF0dHJzOiBMaW5rQXR0cnMpOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IExpbmtDb21tYW5kKCk7XG4gICAgY29tbWFuZC51cGRhdGUoYXR0cnMpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5zZXJ0SW1hZ2Uoc3JjOiBzdHJpbmcsIGF0dHJzOiBJbWFnZUF0dHJzID0ge30pOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IEltYWdlQ29tbWFuZCgpO1xuICAgIGNvbW1hbmQuaW5zZXJ0KHNyYywgYXR0cnMpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGV4dENvbG9yKGNvbG9yOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFRleHRDb2xvckNvbW1hbmQoJ3RleHRfY29sb3InKTtcbiAgICBjb21tYW5kLmFwcGx5KHsgY29sb3IgfSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBiYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVGV4dENvbG9yQ29tbWFuZCgndGV4dF9iYWNrZ3JvdW5kX2NvbG9yJyk7XG4gICAgY29tbWFuZC5hcHBseSh7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW1vdmVUZXh0Q29sb3IoKTogdGhpcyB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBUZXh0Q29sb3JDb21tYW5kKCd0ZXh0X2NvbG9yJyk7XG4gICAgY29tbWFuZC5yZW1vdmUoKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZUJhY2tncm91bmRDb2xvcigpOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFRleHRDb2xvckNvbW1hbmQoJ3RleHRfYmFja2dyb3VuZF9jb2xvcicpO1xuICAgIGNvbW1hbmQucmVtb3ZlKCkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbGlnbihwOiBBbGlnbik6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVGV4dEFsaWduQ29tbWFuZChwKTtcbiAgICBjb21tYW5kLnRvZ2dsZSgpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5zZXJ0SFRNTChodG1sOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB7IHNlbGVjdGlvbiwgc2NoZW1hLCB0ciB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSBzZWxlY3Rpb247XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBodG1sLnRyaW0oKTtcbiAgICBjb25zdCBzbGljZSA9IERPTVBhcnNlci5mcm9tU2NoZW1hKHNjaGVtYSkucGFyc2VTbGljZShlbGVtZW50KTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHIucmVwbGFjZVJhbmdlKGZyb20sIHRvLCBzbGljZSk7XG4gICAgdGhpcy5hcHBseVRyeCh0cmFuc2FjdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JDb21tYW5kcztcbiJdfQ==