UNPKG

@zodiac-ui/editor

Version:

A rich text editor for Angular based on `@atlaskit/editor-core`.

132 lines 17.8 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5ub2RlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHpvZGlhYy11aS9lZGl0b3IvIiwic291cmNlcyI6WyJwbHVnaW5zL2NvZGUvY29kZS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEIsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUE0QnZFLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFnQixFQUFzQixFQUFFO0lBQ3hFLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDMUQsQ0FBQyxDQUFDOztBQUVGLHVCQUF1QjtBQUN2Qix1R0FBdUc7QUFDdkcsTUFBTSw2QkFBNkIsR0FBRyxDQUNsQyxHQUFnQixFQUNFLEVBQUU7SUFDcEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDN0MsbUVBQW1FO1FBQ25FLE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsT0FBTztBQUNYLENBQUMsQ0FBQzs7QUFFRixNQUFNLHdCQUF3QixHQUFHLENBQUMsU0FBaUIsRUFBc0IsRUFBRTtJQUN2RSxNQUFNLGFBQWEsR0FBRywyQkFBMkIsQ0FBQztJQUNsRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQjtJQUNELE9BQU87QUFDWCxDQUFDLENBQUM7O0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQWdCLEVBQWUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNuRCxHQUFHLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN4RDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDOztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBYTtJQUMvQixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ25FLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLEtBQUssRUFBRSxFQUFFO0lBQ1QsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsSUFBSTtJQUNWLFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFO1FBQ047WUFDSSxHQUFHLEVBQUUsWUFBWTtZQUNqQixrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWixNQUFNLFFBQVEsR0FBSSxHQUFtQixDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUM7U0FDSjtRQUNEO1lBQ0ksR0FBRyxFQUFFLEtBQUs7WUFDVixrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxHQUFHLEdBQUcsT0FBc0IsQ0FBQztnQkFFakMsTUFBTSxRQUFRLEdBQ1YsNkJBQTZCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztvQkFDaEQsMEJBQTBCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztvQkFDN0MsR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQztTQUNKO1FBQ0Qsc0JBQXNCO1FBQ3RCLGtFQUFrRTtRQUNsRTtZQUNJLEdBQUcsRUFBRSxZQUFZO1lBQ2pCLGtCQUFrQixFQUFFLE1BQU07WUFDMUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNoQixNQUFNLEdBQUcsR0FBRyxPQUFzQixDQUFDO2dCQUNuQyxJQUNJLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUs7b0JBQzlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUNqQixHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDbkU7b0JBQ0UsT0FBTyxFQUFFLENBQUM7aUJBQ2I7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztZQUNELGVBQWU7WUFDZixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxHQUFHLE9BQXNCLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztxQkFDaEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFDaEMseUNBQXlDO3FCQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO3FCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNwRSxDQUFDO1NBQ0o7UUFDRCwyQkFBMkI7UUFDM0I7WUFDSSxHQUFHLEVBQUUsY0FBYztZQUNuQixrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWixJQUFLLEdBQW1CLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7b0JBQzlELE9BQU8sRUFBRSxDQUFDO2lCQUNiO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7U0FDSjtRQUNEO1lBQ0ksR0FBRyxFQUFFLGVBQWU7WUFDcEIsa0JBQWtCLEVBQUUsTUFBTTtZQUMxQixRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQXNCLENBQUM7Z0JBQ25DLHlEQUF5RDtnQkFDekQsc0JBQXNCO2dCQUN0QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxJQUNJLFNBQVM7b0JBQ1QsU0FBUyxDQUFDLGFBQWEsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUNsRTtvQkFDRSxnRUFBZ0U7b0JBQ2hFLGtGQUFrRjtvQkFDbEYsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN0QjtnQkFDRCxPQUFPLEVBQUUsQ0FBQztZQUNkLENBQUM7U0FDSjtLQUNKO0lBQ0QsS0FBSyxDQUFDLElBQUk7UUFDTixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0NBQ0osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFzQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNyRSxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksR0FBRyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUM7Q0FDVCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlU3BlYywgTm9kZSBhcyBQTU5vZGUsIEZyYWdtZW50IH0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xyXG5pbXBvcnQgeyBNYXJrc09iamVjdCwgTm9NYXJrIH0gZnJvbSBcIi4uL2RvYy9kb2Mubm9kZVwiXHJcbi8qKlxyXG4gKiBAbmFtZSBjb2RlQmxvY2tfbm9kZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tCYXNlRGVmaW5pdGlvbiB7XHJcbiAgICB0eXBlOiAnY29kZUJsb2NrJztcclxuICAgIGNvbnRlbnQ/OiBBcnJheTxUZXh0ICYgTm9NYXJrPjtcclxuICAgIG1hcmtzPzogQXJyYXk8YW55PjtcclxuICAgIGF0dHJzPzogQ29kZUJsb2NrQXR0cnM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrQXR0cnMge1xyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjb2RlQmxvY2tfd2l0aF9ub19tYXJrc19ub2RlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb2RlQmxvY2tEZWZpbml0aW9uID0gQ29kZUJsb2NrQmFzZURlZmluaXRpb24gJiBOb01hcms7XHJcblxyXG4vKipcclxuICogQG5hbWUgY29kZUJsb2NrX3dpdGhfbWFya3Nfbm9kZVxyXG4gKiBAc3RhZ2UgMFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29kZUJsb2NrV2l0aE1hcmtzRGVmaW5pdGlvbiA9IENvZGVCbG9ja0Jhc2VEZWZpbml0aW9uICZcclxuICAgIE1hcmtzT2JqZWN0PGFueT47XHJcblxyXG5jb25zdCBnZXRMYW5ndWFnZUZyb21FZGl0b3JTdHlsZSA9IChkb206IEhUTUxFbGVtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICAgIHJldHVybiBkb20uZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmd1YWdlJykgfHwgdW5kZWZpbmVkO1xyXG59O1xyXG5cclxuLy8gZXhhbXBsZSBvZiBCQiBzdHlsZTpcclxuLy8gPGRpdiBjbGFzcz1cImNvZGVoaWxpdGUgbGFuZ3VhZ2UtamF2YXNjcmlwdFwiPjxwcmU+PHNwYW4+aGVsbG8gd29ybGQ8L3NwYW4+PHNwYW4+XFxuPC9zcGFuPjwvcHJlPjwvZGl2PlxyXG5jb25zdCBnZXRMYW5ndWFnZUZyb21CaXRidWNrZXRTdHlsZSA9IChcclxuICAgIGRvbTogSFRNTEVsZW1lbnQsXHJcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAoZG9tICYmIGRvbS5jbGFzc0xpc3QuY29udGFpbnMoJ2NvZGVoaWxpdGUnKSkge1xyXG4gICAgICAgIC8vIGNvZGUgYmxvY2sgaHRtbCBmcm9tIEJpdGJ1Y2tldCBhbHdheXMgY29udGFpbnMgYW4gZXh0cmEgbmV3IGxpbmVcclxuICAgICAgICByZXR1cm4gZXh0cmFjdExhbmd1YWdlRnJvbUNsYXNzKGRvbS5jbGFzc05hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29uc3QgZXh0cmFjdExhbmd1YWdlRnJvbUNsYXNzID0gKGNsYXNzTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICAgIGNvbnN0IGxhbmd1YWdlUmVnZXggPSAvKD86XnxcXHMpbGFuZ3VhZ2UtKFteXFxzXSspLztcclxuICAgIGNvbnN0IHJlc3VsdCA9IGxhbmd1YWdlUmVnZXguZXhlYyhjbGFzc05hbWUpO1xyXG4gICAgaWYgKHJlc3VsdCAmJiByZXN1bHRbMV0pIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29uc3QgcmVtb3ZlTGFzdE5ld0xpbmUgPSAoZG9tOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50ID0+IHtcclxuICAgIGNvbnN0IHBhcmVudCA9IGRvbSAmJiBkb20ucGFyZW50RWxlbWVudDtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnY29kZWhpbGl0ZScpKSB7XHJcbiAgICAgICAgZG9tLnRleHRDb250ZW50ID0gZG9tLnRleHRDb250ZW50LnJlcGxhY2UoL1xcbiQvLCAnJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZG9tO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvZGVCbG9jazogTm9kZVNwZWMgPSB7XHJcbiAgICBhdHRyczogeyBsYW5ndWFnZTogeyBkZWZhdWx0OiBudWxsIH0sIHVuaXF1ZUlkOiB7IGRlZmF1bHQ6IG51bGwgfSB9LFxyXG4gICAgY29udGVudDogJ3RleHQqJyxcclxuICAgIG1hcmtzOiAnJyxcclxuICAgIGdyb3VwOiAnYmxvY2snLFxyXG4gICAgY29kZTogdHJ1ZSxcclxuICAgIGRlZmluaW5nOiB0cnVlLFxyXG4gICAgcGFyc2VET006IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZzogJ3ByZSA+IGNvZGUnLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IChkb20gYXMgSFRNTEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnZGF0YS1sYW5ndWFnZScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFuZ3VhZ2UgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGFnOiAncHJlJyxcclxuICAgICAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiAnZnVsbCcsXHJcbiAgICAgICAgICAgIGdldEF0dHJzOiBkb21Ob2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkb20gPSBkb21Ob2RlIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRMYW5ndWFnZUZyb21CaXRidWNrZXRTdHlsZShkb20ucGFyZW50RWxlbWVudCkgfHxcclxuICAgICAgICAgICAgICAgICAgICBnZXRMYW5ndWFnZUZyb21FZGl0b3JTdHlsZShkb20ucGFyZW50RWxlbWVudCkgfHxcclxuICAgICAgICAgICAgICAgICAgICBkb20uZ2V0QXR0cmlidXRlKCdkYXRhLWxhbmd1YWdlJyk7XHJcbiAgICAgICAgICAgICAgICBkb20gPSByZW1vdmVMYXN0TmV3TGluZShkb20pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGFuZ3VhZ2UgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIEhhbmRsZSBWU0NvZGUgcGFzdGVcclxuICAgICAgICAvLyBDaGVja2luZyBgd2hpdGUtc3BhY2U6IHByZS13cmFwYCBpcyB0b28gYWdncmVzc2l2ZSBAc2VlIEVELTI2MjdcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZzogJ2RpdltzdHlsZV0nLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbU5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gZG9tTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkb20uc3R5bGUud2hpdGVTcGFjZSA9PT0gJ3ByZScgfHxcclxuICAgICAgICAgICAgICAgICAgICAoZG9tLnN0eWxlLmZvbnRGYW1pbHkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tLnN0eWxlLmZvbnRGYW1pbHkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdtb25vc3BhY2UnKSA+IC0xKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBAc2VlIEVELTU2ODJcclxuICAgICAgICAgICAgZ2V0Q29udGVudDogKGRvbU5vZGUsIHNjaGVtYSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gZG9tTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSBBcnJheS5mcm9tKGRvbS5jaGlsZHJlbilcclxuICAgICAgICAgICAgICAgICAgICAubWFwKGNoaWxkID0+IGNoaWxkLnRleHRDb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPyBGcmFnbWVudC5mcm9tKHNjaGVtYS50ZXh0KGNvZGUpKSA6IEZyYWdtZW50LmVtcHR5O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gSGFuZGxlIEdpdEh1Yi9HaXN0IHBhc3RlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0YWc6ICd0YWJsZVtzdHlsZV0nLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGRvbSBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcigndGRbY2xhc3MqPVwiYmxvYi1jb2RlXCJdJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRhZzogJ2Rpdi5Db2RlQmxvY2snLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6ICdmdWxsJyxcclxuICAgICAgICAgICAgZ2V0QXR0cnM6IGRvbU5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gZG9tTm9kZSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE86IEVELTU2MDQgRml4IGl0IGluc2lkZSBgcmVhY3Qtc3ludGF4LWhpZ2hsaWdodGVyYFxyXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGxpbmUgbnVtYmVyc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZXNDb2RlID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJ2NvZGUnKTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBsaW5lc0NvZGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBsaW5lc0NvZGUucXVlcnlTZWxlY3RvcignLnJlYWN0LXN5bnRheC1oaWdobGlnaHRlci1saW5lLW51bWJlcicpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIGNvcHkgd2l0aG91dCB0aGUgbGluZSBudW1iZXJzIHRvbyBoZW5jZSB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYHJlYWN0LXN5bnRheC1oaWdobGlnaHRlci1saW5lLW51bWJlcmAgY2hlY2ssIHNvIHRoYXQgd2UgZG9uJ3QgcmVtb3ZlIHJlYWwgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzQ29kZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHRvRE9NKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gWydwcmUnLCBbJ2NvZGUnLCB7ICdkYXRhLWxhbmd1YWdlJzogbm9kZS5hdHRycy5sYW5ndWFnZSB9LCAwXV07XHJcbiAgICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHRvSlNPTiA9IChub2RlOiBQTU5vZGUpID0+ICh7XHJcbiAgICBhdHRyczogT2JqZWN0LmtleXMobm9kZS5hdHRycykucmVkdWNlPFJlY29yZDxzdHJpbmcsIGFueT4+KChtZW1vLCBrZXkpID0+IHtcclxuICAgICAgICBpZiAoa2V5ID09PSAndW5pcXVlSWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSA9PT0gJ2xhbmd1YWdlJyAmJiBub2RlLmF0dHJzLmxhbmd1YWdlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVtb1trZXldID0gbm9kZS5hdHRyc1trZXldO1xyXG4gICAgICAgIHJldHVybiBtZW1vO1xyXG4gICAgfSwge30pLFxyXG59KTtcclxuIl19