UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

183 lines 22.5 kB
import { chainCommands, createParagraphNear, liftEmptyBlock, newlineInCode, splitBlock, } from 'prosemirror-commands'; import { DOMParser } from 'prosemirror-model'; import { NgxEditorError } from 'ngx-editor/utils'; 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 new NgxEditorError('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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWRpdG9yQ29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NyYy9saWIvRWRpdG9yQ29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQ2xELGFBQWEsRUFBRSxVQUFVLEdBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLFdBQVcsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLFdBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxjQUFpQyxNQUFNLG9CQUFvQixDQUFDO0FBQ25FLE9BQU8sWUFBNEIsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLGdCQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sZ0JBQTJCLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxFQUFFO0lBQ2hELE9BQU8sQ0FBQyxLQUFrQixFQUFFLFFBQW1DLEVBQUUsRUFBRTtRQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztB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LENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0QsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvclN0YXRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7IEVkaXRvclZpZXcgfSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7XG4gIGNoYWluQ29tbWFuZHMsIGNyZWF0ZVBhcmFncmFwaE5lYXIsIGxpZnRFbXB0eUJsb2NrLFxuICBuZXdsaW5lSW5Db2RlLCBzcGxpdEJsb2NrLFxufSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5pbXBvcnQgeyBET01QYXJzZXIgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbmltcG9ydCB7IE5neEVkaXRvckVycm9yIH0gZnJvbSAnbmd4LWVkaXRvci91dGlscyc7XG5pbXBvcnQgTWFya0NvbW1hbmQgZnJvbSAnLi9jb21tYW5kcy9NYXJrJztcbmltcG9ydCBMaXN0Q29tbWFuZCBmcm9tICcuL2NvbW1hbmRzL0xpc3RJdGVtJztcbmltcG9ydCBMaW5rQ29tbWFuZCwgeyBMaW5rQXR0cnMgfSBmcm9tICcuL2NvbW1hbmRzL0xpbmsnO1xuaW1wb3J0IEhlYWRpbmdDb21tYW5kLCB7IEhlYWRpbmdMZXZlbHMgfSBmcm9tICcuL2NvbW1hbmRzL0hlYWRpbmcnO1xuaW1wb3J0IEltYWdlQ29tbWFuZCwgeyBJbWFnZUF0dHJzIH0gZnJvbSAnLi9jb21tYW5kcy9JbWFnZSc7XG5pbXBvcnQgVGV4dENvbG9yQ29tbWFuZCBmcm9tICcuL2NvbW1hbmRzL1RleHRDb2xvcic7XG5pbXBvcnQgVGV4dEFsaWduQ29tbWFuZCwgeyBBbGlnbiB9IGZyb20gJy4vY29tbWFuZHMvVGV4dEFsaWduJztcblxuY29uc3QgZXhlY01hcmsgPSAobmFtZTogc3RyaW5nLCB0b2dnbGUgPSBmYWxzZSkgPT4ge1xuICByZXR1cm4gKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g6ICh0cjogVHJhbnNhY3Rpb24pID0+IHZvaWQpID0+IHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IE1hcmtDb21tYW5kKG5hbWUpO1xuXG4gICAgaWYgKCF0b2dnbGUpIHtcbiAgICAgIHJldHVybiBjb21tYW5kLmFwcGx5KCkoc3RhdGUsIGRpc3BhdGNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZC50b2dnbGUoKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICB9O1xufTtcblxuY2xhc3MgRWRpdG9yQ29tbWFuZHMge1xuICBwcml2YXRlIHZpZXc6IEVkaXRvclZpZXc7XG4gIHByaXZhdGUgc3RhdGU6IEVkaXRvclN0YXRlO1xuICBwcml2YXRlIHRyOiBUcmFuc2FjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcih2aWV3OiBFZGl0b3JWaWV3KSB7XG4gICAgaWYgKCF2aWV3KSB7XG4gICAgICB0aHJvdyBuZXcgTmd4RWRpdG9yRXJyb3IoJ1JlcXVpcmVkIHZpZXcgdG8gaW5pdGlhbGl6ZSBjb21tYW5kcy4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgIHRoaXMuc3RhdGUgPSB2aWV3LnN0YXRlO1xuICAgIHRoaXMudHIgPSB0aGlzLnZpZXcuc3RhdGUudHI7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VHJ4ID0gKHRyPzogVHJhbnNhY3Rpb24pID0+IHtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZS5hcHBseSh0ciA/PyB0aGlzLnRyKTtcbiAgICB0aGlzLnRyID0gdGhpcy5zdGF0ZS50cjtcbiAgICB0aGlzLnRyLnNldE1ldGEoJ0FQUExJRURfVFJYJywgdHJ1ZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaCA9ICh0cjogVHJhbnNhY3Rpb24pOiB2b2lkID0+IHtcbiAgICB0aGlzLmFwcGx5VHJ4KHRyKTtcbiAgfTtcblxuICBleGVjKCk6IGJvb2xlYW4ge1xuICAgIC8vIE5vIGNoYW5nZXMgYXBwbGllZFxuICAgIGlmICghdGhpcy50ci5nZXRNZXRhKCdBUFBMSUVEX1RSWCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZm9yY2VFbWl0ID0gIXRoaXMudmlldy5zdGF0ZS5kb2MuZXEodGhpcy5zdGF0ZS5kb2MpO1xuICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZSh0aGlzLnN0YXRlKTtcblxuICAgIGNvbnN0IHRyID0gdGhpcy50clxuICAgICAgLnNldE1ldGEoJ0ZPUkNFX0VNSVQnLCBmb3JjZUVtaXQpO1xuXG4gICAgdGhpcy52aWV3LmRpc3BhdGNoKHRyKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZvY3VzKCk6IHRoaXMge1xuICAgIHRoaXMudmlldy5mb2N1cygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2Nyb2xsSW50b1ZpZXcoKTogdGhpcyB7XG4gICAgdGhpcy50ci5zY3JvbGxJbnRvVmlldygpO1xuICAgIHRoaXMuYXBwbHlUcngoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluc2VydFRleHQodGV4dDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy50ci5pbnNlcnRUZXh0KHRleHQpO1xuICAgIHRoaXMuYXBwbHlUcngoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluc2VydE5ld0xpbmUoKTogdGhpcyB7XG4gICAgY29uc3QgbmV3TGluZUNvbW1hbmRzID0gW25ld2xpbmVJbkNvZGUsIGNyZWF0ZVBhcmFncmFwaE5lYXIsIGxpZnRFbXB0eUJsb2NrLCBzcGxpdEJsb2NrXTtcbiAgICBjaGFpbkNvbW1hbmRzKC4uLm5ld0xpbmVDb21tYW5kcykodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhcHBseU1hcmsobmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgZXhlY01hcmsobmFtZSwgZmFsc2UpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlTWFyayhuYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBleGVjTWFyayhuYW1lLCB0cnVlKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJvbGQoKTogdGhpcyB7XG4gICAgZXhlY01hcmsoJ3N0cm9uZycpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlQm9sZCgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnc3Ryb25nJywgdHJ1ZSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpdGFsaWNzKCk6IHRoaXMge1xuICAgIGV4ZWNNYXJrKCdlbScpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlSXRhbGljcygpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnZW0nLCB0cnVlKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVuZGVybGluZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygndScpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlVW5kZXJsaW5lKCk6IHRoaXMge1xuICAgIGV4ZWNNYXJrKCd1JywgdHJ1ZSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdHJpa2UoKTogdGhpcyB7XG4gICAgZXhlY01hcmsoJ3MnKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvZ2dsZVN0cmlrZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygncycsIHRydWUpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29kZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnY29kZScpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlQ29kZSgpOiB0aGlzIHtcbiAgICBleGVjTWFyaygnY29kZScsIHRydWUpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlT3JkZXJlZExpc3QoKTogdGhpcyB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBMaXN0Q29tbWFuZChmYWxzZSk7XG4gICAgY29tbWFuZC50b2dnbGUoKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRvZ2dsZUJ1bGxldExpc3QoKTogdGhpcyB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBMaXN0Q29tbWFuZCh0cnVlKTtcbiAgICBjb21tYW5kLnRvZ2dsZSgpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlSGVhZGluZyhsZXZlbDogSGVhZGluZ0xldmVscyk6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgSGVhZGluZ0NvbW1hbmQobGV2ZWwpO1xuICAgIGNvbW1hbmQudG9nZ2xlKCkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbnNlcnRMaW5rKHRleHQ6IHN0cmluZywgYXR0cnM6IExpbmtBdHRycyk6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgTGlua0NvbW1hbmQoKTtcbiAgICBjb21tYW5kLmluc2VydCh0ZXh0LCBhdHRycykodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMaW5rKGF0dHJzOiBMaW5rQXR0cnMpOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IExpbmtDb21tYW5kKCk7XG4gICAgY29tbWFuZC51cGRhdGUoYXR0cnMpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5zZXJ0SW1hZ2Uoc3JjOiBzdHJpbmcsIGF0dHJzOiBJbWFnZUF0dHJzID0ge30pOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IEltYWdlQ29tbWFuZCgpO1xuICAgIGNvbW1hbmQuaW5zZXJ0KHNyYywgYXR0cnMpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGV4dENvbG9yKGNvbG9yOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFRleHRDb2xvckNvbW1hbmQoJ3RleHRfY29sb3InKTtcbiAgICBjb21tYW5kLmFwcGx5KHsgY29sb3IgfSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBiYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVGV4dENvbG9yQ29tbWFuZCgndGV4dF9iYWNrZ3JvdW5kX2NvbG9yJyk7XG4gICAgY29tbWFuZC5hcHBseSh7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfSkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZW1vdmVUZXh0Q29sb3IoKTogdGhpcyB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBUZXh0Q29sb3JDb21tYW5kKCd0ZXh0X2NvbG9yJyk7XG4gICAgY29tbWFuZC5yZW1vdmUoKSh0aGlzLnN0YXRlLCB0aGlzLmRpc3BhdGNoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlbW92ZUJhY2tncm91bmRDb2xvcigpOiB0aGlzIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IFRleHRDb2xvckNvbW1hbmQoJ3RleHRfYmFja2dyb3VuZF9jb2xvcicpO1xuICAgIGNvbW1hbmQucmVtb3ZlKCkodGhpcy5zdGF0ZSwgdGhpcy5kaXNwYXRjaCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbGlnbihwOiBBbGlnbik6IHRoaXMge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVGV4dEFsaWduQ29tbWFuZChwKTtcbiAgICBjb21tYW5kLnRvZ2dsZSgpKHRoaXMuc3RhdGUsIHRoaXMuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5zZXJ0SFRNTChodG1sOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB7IHNlbGVjdGlvbiwgc2NoZW1hLCB0ciB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSBzZWxlY3Rpb247XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBodG1sLnRyaW0oKTtcbiAgICBjb25zdCBzbGljZSA9IERPTVBhcnNlci5mcm9tU2NoZW1hKHNjaGVtYSkucGFyc2VTbGljZShlbGVtZW50KTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHIucmVwbGFjZVJhbmdlKGZyb20sIHRvLCBzbGljZSk7XG4gICAgdGhpcy5hcHBseVRyeCh0cmFuc2FjdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3JDb21tYW5kcztcbiJdfQ==