@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
132 lines • 17.8 kB
JavaScript
import { Fragment } from 'prosemirror-model';
const getLanguageFromEditorStyle = (dom) => {
return dom.getAttribute('data-language') || undefined;
};
const ɵ0 = getLanguageFromEditorStyle;
// example of BB style:
// <div class="codehilite language-javascript"><pre><span>hello world</span><span>\n</span></pre></div>
const getLanguageFromBitbucketStyle = (dom) => {
if (dom && dom.classList.contains('codehilite')) {
// code block html from Bitbucket always contains an extra new line
return extractLanguageFromClass(dom.className);
}
return;
};
const ɵ1 = getLanguageFromBitbucketStyle;
const extractLanguageFromClass = (className) => {
const languageRegex = /(?:^|\s)language-([^\s]+)/;
const result = languageRegex.exec(className);
if (result && result[1]) {
return result[1];
}
return;
};
const ɵ2 = extractLanguageFromClass;
const removeLastNewLine = (dom) => {
const parent = dom && dom.parentElement;
if (parent && parent.classList.contains('codehilite')) {
dom.textContent = dom.textContent.replace(/\n$/, '');
}
return dom;
};
const ɵ3 = removeLastNewLine;
export const codeBlock = {
attrs: { language: { default: null }, uniqueId: { default: null } },
content: 'text*',
marks: '',
group: 'block',
code: true,
defining: true,
parseDOM: [
{
tag: 'pre > code',
preserveWhitespace: 'full',
getAttrs: dom => {
const language = dom.getAttribute('data-language');
return { language };
},
},
{
tag: 'pre',
preserveWhitespace: 'full',
getAttrs: domNode => {
let dom = domNode;
const language = getLanguageFromBitbucketStyle(dom.parentElement) ||
getLanguageFromEditorStyle(dom.parentElement) ||
dom.getAttribute('data-language');
dom = removeLastNewLine(dom);
return { language };
},
},
// Handle VSCode paste
// Checking `white-space: pre-wrap` is too aggressive @see ED-2627
{
tag: 'div[style]',
preserveWhitespace: 'full',
getAttrs: domNode => {
const dom = domNode;
if (dom.style.whiteSpace === 'pre' ||
(dom.style.fontFamily &&
dom.style.fontFamily.toLowerCase().indexOf('monospace') > -1)) {
return {};
}
return false;
},
// @see ED-5682
getContent: (domNode, schema) => {
const dom = domNode;
const code = Array.from(dom.children)
.map(child => child.textContent)
// tslint:disable-next-line:triple-equals
.filter(x => x = undefined)
.join('\n');
return code ? Fragment.from(schema.text(code)) : Fragment.empty;
},
},
// Handle GitHub/Gist paste
{
tag: 'table[style]',
preserveWhitespace: 'full',
getAttrs: dom => {
if (dom.querySelector('td[class*="blob-code"]')) {
return {};
}
return false;
},
},
{
tag: 'div.CodeBlock',
preserveWhitespace: 'full',
getAttrs: domNode => {
const dom = domNode;
// TODO: ED-5604 Fix it inside `react-syntax-highlighter`
// Remove line numbers
const linesCode = dom.querySelector('code');
if (linesCode &&
linesCode.querySelector('.react-syntax-highlighter-line-number')) {
// It's possible to copy without the line numbers too hence this
// `react-syntax-highlighter-line-number` check, so that we don't remove real code
linesCode.remove();
}
return {};
},
},
],
toDOM(node) {
return ['pre', ['code', { 'data-language': node.attrs.language }, 0]];
},
};
export const toJSON = (node) => ({
attrs: Object.keys(node.attrs).reduce((memo, key) => {
if (key === 'uniqueId') {
return memo;
}
if (key === 'language' && node.attrs.language === null) {
return memo;
}
memo[key] = node.attrs[key];
return memo;
}, {}),
});
export { ɵ0, ɵ1, ɵ2, ɵ3 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5ub2RlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHpvZGlhYy11aS9lZGl0b3IvIiwic291cmNlcyI6WyJwbHVnaW5zL2NvZGUvY29kZS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEIsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUE0QnZFLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFnQixFQUFzQixFQUFFO0lBQ3hFLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDMUQsQ0FBQyxDQUFDOztBQUVGLHVCQUF1QjtBQUN2Qix1R0FBdUc7QUFDdkcsTUFBTSw2QkFBNkIsR0FBRyxDQUNsQyxHQUFnQixFQUNFLEVBQUU7SUFDcEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDN0MsbUVBQW1FO1FBQ25FLE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsT0FBTztBQUNYLENBQUMsQ0FBQzs7QUFFRixNQUFNLHdCQUF3QixHQUFHLENBQUMsU0FBaUIsRUFBc0IsRUFBRTtJQUN2RSxNQUFNLGFBQWEsR0FBRywyQkFBMkIsQ0FBQztJQUNsRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQjtJQUNELE9BQU87QUFDWCxDQUFDLENBQUM7O0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQWdCLEVBQWUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMs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LElBQUksR0FBRyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDVCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlU3BlYywgTm9kZSBhcyBQTU5vZGUsIEZyYWdtZW50IH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xyXG5pbXBvcnQgeyBNYXJrc09iamVjdCwgTm9NYXJrIH0gZnJvbSBcIi4uL2RvYy9kb2Mubm9kZVwiXHJcbi8qKlxyXG4gKiBAbmFtZSBjb2RlQmxvY2tfbm9kZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tCYXNlRGVmaW5pdGlvbiB7XHJcbiAgICB0eXBlOiAnY29kZUJsb2NrJztcclxuICAgIGNvbnRlbnQ/OiBBcnJheTxUZXh0ICYgTm9NYXJrPjtcclxuICAgIG1hcmtzPzogQXJyYXk8YW55PjtcclxuICAgIGF0dHJzPzogQ29kZUJsb2NrQXR0cnM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrQXR0cnMge1xyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjb2RlQmxvY2tfd2l0aF9ub19tYXJrc19ub2RlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb2RlQmxvY2tEZWZpbml0aW9uID0gQ29kZUJsb2NrQmFzZURlZmluaXRpb24gJiBOb01hcms7XHJcblxyXG4vKipcclxuICogQG5hbWUgY29kZUJsb2NrX3dpdGhfbWFya3Nfbm9kZVxyXG4gKiBAc3RhZ2UgMFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29kZUJsb2NrV2l0aE1hcmtzRGVmaW5pdGlvbiA9IENvZGVCbG9ja0Jhc2VEZWZpbml0aW9uICZcclxuICAgIE1hcmtzT2JqZWN0PGFueT47XHJcblxyXG5jb25zdCBnZXRMYW5ndWFnZUZyb21FZGl0b3JTdHlsZSA9IChkb206IEhUTUxFbGVtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICAgIHJldHVybiBkb20uZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmd1YWdlJykgfHwgdW5kZWZpbmVkO1xyXG59O1xyXG5cclxuLy8gZXhhbXBsZSBvZiBCQiBzdHlsZTpcclxuLy8gPGRpdiBjbGFzcz1cImNvZGVoaWxpdGUgbGFuZ3VhZ2UtamF2YXNjcmlwdFwiPjxwcmU+PHNwYW4+aGVsbG8gd29ybGQ8L3NwYW4+PHNwYW4+XFxuPC9zcGFuPjwvcHJlPjwvZGl2PlxyXG5jb25zdCBnZXRMYW5ndWFnZUZyb21CaXRidWNrZXRTdHlsZSA9IChcclxuICAgIGRvbTogSFRNTEVsZW1lbnQsXHJcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAoZG9tICYmIGRvbS5jbGFzc0xpc3QuY29udGFpbnMoJ2NvZGVoaWxpdGUnKSkge1xyXG4gICAgICAgIC8vIGNvZGUgYmxvY2sgaHRtbCBmcm9tIEJpdGJ1Y2tldCBhbHdheXMgY29udGFpbnMgYW4gZXh0cmEgbmV3IGxpbmVcclxuICAgICAgICByZXR1cm4gZXh0cmFjdExhbmd1YWdlRnJvbUNsYXNzKGRvbS5jbGFzc05hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29uc3QgZXh0cmFjdExhbmd1YWdlRnJvbUNsYXNzID0gKGNsYXNzTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICAgIGNvbnN0IGxhbmd1YWdlUmVnZXggPSAvKD86XnxcXHMpbGFuZ3VhZ2UtKFteXFxzXSspLztcclxuICAgIGNvbnN0IHJlc3VsdCA9IGxhbmd1YWdlUmVnZXguZXhlYyhjbGFzc05hbWUpO1xyXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHRbMV0pIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29uc3QgcmVtb3ZlTGFzdE5ld0xpbmUgPSAoZG9tOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50ID0+IHtcclxuICAgIGNvbnN0IHBhcmVudCA9IGRvbSAmJiBkb20ucGFyZW50RWxlbWVudDtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnY29kZWhpbGl0ZScpKSB7XHJcbiAgICAgICAgZG9tLnRleHRDb250ZW50ID0gZG9tLnRleHRDb250ZW50LnJlcGxhY2UoL1xcbiQvLCAnJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZG9tO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvZGVCbG9jazogTm9kZVNwZWMgPSB7XHJcbiAgICBhdHRyczogeyBsYW5ndWFnZTogeyBkZWZhdWx0OiBudWxsIH0sIHVuaXF1ZUlkOiB7IGRlZmF1bHQ6IG51bGwgfSB9LFxyXG4gICAgY29udGVudDogJ3RleHQqJyxcclxuICAgIG1hcmtzOiAnJyxcclxuICAgIGdyb3VwOiAnYmxvY2snLFxyXG4gICAgY29kZTogdHJ1ZSxcclxuICAgIGRlZmluaW5nOiB0cnVlLFxyXG4gICAgcGFyc2VET006IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZzogJ3ByZSA+IGNvZGUnLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IChkb20gYXMgSFRNTEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5ndWFnZScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFuZ3VhZ2UgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFnOiAncHJlJyxcclxuICAgICAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiAnZnVsbCcsXHJcbiAgICAgICAgICAgIGdldEF0dHJzOiBkb21Ob2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkb20gPSBkb21Ob2RlIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRMYW5ndWFnZUZyb21CaXRidWNrZXRTdHlsZShkb20ucGFyZW50RWxlbWVudCkgfHxcclxuICAgICAgICAgICAgICAgICAgICBnZXRMYW5ndWFnZUZyb21FZGl0b3JTdHlsZShkb20ucGFyZW50RWxlbWVudCkgfHxcclxuICAgICAgICAgICAgICAgICAgICBkb20uZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmd1YWdlJyk7XHJcbiAgICAgICAgICAgICAgICBkb20gPSByZW1vdmVMYXN0TmV3TGluZShkb20pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFuZ3VhZ2UgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIEhhbmRsZSBWU0NvZGUgcGFzdGVcclxuICAgICAgICAvLyBDaGVja2luZyBgd2hpdGUtc3BhY2U6IHByZS13cmFwYCBpcyB0b28gYWdncmVzc2l2ZSBAc2VlIEVELTI2MjdcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZzogJ2RpdltzdHlsZV0nLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbU5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gZG9tTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkb20uc3R5bGUud2hpdGVTcGFjZSA9PT0gJ3ByZScgfHxcclxuICAgICAgICAgICAgICAgICAgICAoZG9tLnN0eWxlLmZvbnRGYW1pbHkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tLnN0eWxlLmZvbnRGYW1pbHkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdtb25vc3BhY2UnKSA+IC0xKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBAc2VlIEVELTU2ODJcclxuICAgICAgICAgICAgZ2V0Q29udGVudDogKGRvbU5vZGUsIHNjaGVtYSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gZG9tTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBBcnJheS5mcm9tKGRvbS5jaGlsZHJlbilcclxuICAgICAgICAgICAgICAgICAgICAubWFwKGNoaWxkID0+IGNoaWxkLnRleHRDb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPyBGcmFnbWVudC5mcm9tKHNjaGVtYS50ZXh0KGNvZGUpKSA6IEZyYWdtZW50LmVtcHR5O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gSGFuZGxlIEdpdEh1Yi9HaXN0IHBhc3RlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0YWc6ICd0YWJsZVtzdHlsZV0nLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGRvbSBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcigndGRbY2xhc3MqPVwiYmxvYi1jb2RlXCJdJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZzogJ2Rpdi5Db2RlQmxvY2snLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbU5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gZG9tTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEVELTU2MDQgRml4IGl0IGluc2lkZSBgcmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyYFxyXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxpbmUgbnVtYmVyc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXNDb2RlID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJ2NvZGUnKTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBsaW5lc0NvZGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBsaW5lc0NvZGUucXVlcnlTZWxlY3RvcignLnJlYWN0LXN5bnRheC1oaWdobGlnaHRlci1saW5lLW51bWJlcicpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIGNvcHkgd2l0aG91dCB0aGUgbGluZSBudW1iZXJzIHRvbyBoZW5jZSB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYHJlYWN0LXN5bnRheC1oaWdobGlnaHRlci1saW5lLW51bWJlcmAgY2hlY2ssIHNvIHRoYXQgd2UgZG9uJ3QgcmVtb3ZlIHJlYWwgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzQ29kZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHRvRE9NKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gWydwcmUnLCBbJ2NvZGUnLCB7ICdkYXRhLWxhbmd1YWdlJzogbm9kZS5hdHRycy5sYW5ndWFnZSB9LCAwXV07XHJcbiAgICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHRvSlNPTiA9IChub2RlOiBQTU5vZGUpID0+ICh7XHJcbiAgICBhdHRyczogT2JqZWN0LmtleXMobm9kZS5hdHRycykucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChtZW1vLCBrZXkpID0+IHtcclxuICAgICAgICBpZiAoa2V5ID09PSAndW5pcXVlSWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSA9PT0gJ2xhbmd1YWdlJyAmJiBub2RlLmF0dHJzLmxhbmd1YWdlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVtb1trZXldID0gbm9kZS5hdHRyc1trZXldO1xyXG4gICAgICAgIHJldHVybiBtZW1vO1xyXG4gICAgfSwge30pLFxyXG59KTtcclxuIl19