UNPKG

@zodiac-ui/editor

Version:

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

107 lines 15.5 kB
import { Plugin, PluginKey } from "prosemirror-state"; import { findParentDomRefOfType, findParentNodeOfType } from "prosemirror-utils"; import { codeBlock } from "./code.node"; import { arrowHandlers, codeBlockFactory } from "./code.nodeview"; import { code } from "./code.mark"; export const getPluginState = (state) => pluginKey.getState(state); export const setPluginState = (stateProps) => (state, dispatch) => { const pluginState = getPluginState(state); dispatch(state.tr.setMeta(pluginKey, Object.assign({}, pluginState, stateProps))); return true; }; export const pluginKey = new PluginKey("codeBlockPlugin"); export const createPlugin = ({ dispatch }) => new Plugin({ state: { init(config, state) { return { toolbarVisible: false, }; }, apply(tr, pluginState, oldState, newState) { const nextPluginState = tr.getMeta(pluginKey); if (nextPluginState) { dispatch(pluginKey, nextPluginState); return nextPluginState; } return pluginState; }, }, key: pluginKey, view: () => { return { update: (view, prevState) => { const { state: { selection, schema: { // tslint:disable-next-line:no-shadowed-variable nodes: { codeBlock }, }, }, } = view; const pluginState = getPluginState(view.state); const parentDOM = findParentDomRefOfType(codeBlock, view.domAtPos.bind(view))(selection); const parent = findParentNodeOfType(codeBlock)(selection); let language; if (parent) { language = parent.node.attrs.language; } if (parentDOM !== pluginState.element || pluginState.language !== language) { const newState = { element: parentDOM, language, toolbarVisible: !!parent, }; setPluginState(newState)(view.state, view.dispatch); return true; } /** Plugin dispatch needed to reposition the toolbar */ dispatch(pluginKey, Object.assign({}, pluginState, { language })); }, }; }, props: { nodeViews: { codeBlock: codeBlockFactory, }, handleDOMEvents: { blur(view, event) { const pluginState = getPluginState(view.state); if (pluginState.toolbarVisible) { setPluginState({ toolbarVisible: false, element: null, language: null })(view.state, view.dispatch); return true; } return false; }, }, }, }); export function codeBlockPlugin(options = {}) { return { nodes() { return [{ name: "codeBlock", node: codeBlock }]; }, marks() { return [{ name: 'code', mark: code }]; }, pmPlugins() { return [ { name: "codeBlock", plugin: createPlugin }, { name: "codeBlockKeyHandlers", plugin: () => arrowHandlers } // { // name: "codeBlockIDEKeyBindings", // plugin: () => (options.enableKeybindingsForIDE ? ideUX : undefined), // }, // { // name: "codeBlockKeyMap", // plugin: ({ schema }) => keymap(schema), // }, ]; }, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5wbHVnaW4uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbInBsdWdpbnMvY29kZS9jb2RlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWxFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFRbEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBa0IsRUFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFFL0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FDbEQsS0FBa0IsRUFDbEIsUUFBc0IsRUFDZixFQUFFO0lBQ1QsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLFFBQVEsQ0FDSixLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLG9CQUNuQixXQUFXLEVBQ1gsVUFBVSxFQUNmLENBQ0wsQ0FBQTtJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBSUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUE7QUFFekQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQ3pDLElBQUksTUFBTSxDQUFDO0lBQ1AsS0FBSyxFQUFFO1FBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFrQjtZQUMzQixPQUFPO2dCQUNILGNBQWMsRUFBRSxLQUFLO2FBQ3hCLENBQUE7UUFDTCxDQUFDO1FBQ0QsS0FBSyxDQUFDLEVBQUUsRUFBRSxXQUEyQixFQUFFLFFBQVEsRUFBRSxRQUFRO1lBQ3JELE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDN0MsSUFBSSxlQUFlLEVBQUU7Z0JBQ2pCLFFBQVEsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUE7Z0JBQ3BDLE9BQU8sZUFBZSxDQUFBO2FBQ3pCO1lBQ0QsT0FBTyxXQUFXLENBQUE7UUFDdEIsQ0FBQztLQUNKO0lBQ0QsR0FBRyxFQUFFLFNBQVM7SUFDZCxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQ1AsT0FBTztZQUNILE1BQU0sRUFBRSxDQUFDLElBQWdCLEVBQUUsU0FBc0IsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLEVBQ0YsS0FBSyxFQUFFLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFBRTtnQkFDSixnREFBZ0Q7Z0JBQ2hELEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUN2QixHQUNKLEdBQ0osR0FBRyxJQUFJLENBQUE7Z0JBQ1IsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDOUMsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pFLFNBQVMsQ0FDWixDQUFBO2dCQUNELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUN6RCxJQUFJLFFBQVEsQ0FBQTtnQkFFWixJQUFJLE1BQU0sRUFBRTtvQkFDUixRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFBO2lCQUN4QztnQkFFRCxJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO29CQUN4RSxNQUFNLFFBQVEsR0FBbUI7d0JBQzdCLE9BQU8sRUFBRSxTQUF3Qjt3QkFDakMsUUFBUTt3QkFDUixjQUFjLEVBQUUsQ0FBQyxDQUFDLE1BQU07cUJBQzNCLENBQUE7b0JBQ0QsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUNuRCxPQUFPLElBQUksQ0FBQTtpQkFDZDtnQkFFRCx1REFBdUQ7Z0JBQ3ZELFFBQVEsQ0FBQyxTQUFTLG9CQUNYLFdBQVcsSUFDZCxRQUFRLElBQ1YsQ0FBQTtZQUNOLENBQUM7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUNELEtBQUssRUFBRTtRQUNILFNBQVMsRUFBRTtZQUNQLFNBQVMsRUFBRSxnQkFBZ0I7U0FDOUI7UUFDRCxlQUFlLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBZ0IsRUFBRSxLQUFLO2dCQUN4QixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUM5QyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUU7b0JBQzVCLGNBQWMsQ0FBQzt3QkFDWCxjQUFjLEVBQUUsS0FBSzt3QkFDckIsT0FBTyxFQUFFLElBQUk7d0JBQ2IsUUFBUSxFQUFFLElBQUk7cUJBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDN0IsT0FBTyxJQUFJLENBQUE7aUJBQ2Q7Z0JBQ0QsT0FBTyxLQUFLLENBQUE7WUFDaEIsQ0FBQztTQUNKO0tBQ0o7Q0FDSixDQUFDLENBQUE7QUFNTixNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQTRCLEVBQUU7SUFDMUQsT0FBTztRQUNILEtBQUs7WUFDRCxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ25ELENBQUM7UUFFRCxLQUFLO1lBQ0QsT0FBTyxDQUFDO29CQUNKLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxJQUFJO2lCQUNiLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFFRCxTQUFTO1lBQ0wsT0FBTztnQkFDSCxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtnQkFDM0M7b0JBQ0ksSUFBSSxFQUFFLHNCQUFzQjtvQkFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWE7aUJBQzlCO2dCQUNELElBQUk7Z0JBQ0osdUNBQXVDO2dCQUN2QywyRUFBMkU7Z0JBQzNFLEtBQUs7Z0JBQ0wsSUFBSTtnQkFDSiwrQkFBK0I7Z0JBQy9CLDhDQUE4QztnQkFDOUMsS0FBSzthQUNSLENBQUE7UUFDTCxDQUFDO0tBQ0osQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3JTdGF0ZSwgUGx1Z2luLCBQbHVnaW5LZXkgfSBmcm9tIFwicHJvc2VtaXJyb3Itc3RhdGVcIlxyXG5pbXBvcnQgeyBFZGl0b3JWaWV3IH0gZnJvbSBcInByb3NlbWlycm9yLXZpZXdcIlxyXG5pbXBvcnQgeyBmaW5kUGFyZW50RG9tUmVmT2ZUeXBlLCBmaW5kUGFyZW50Tm9kZU9mVHlwZSB9IGZyb20gXCJwcm9zZW1pcnJvci11dGlsc1wiXHJcbmltcG9ydCB7IEVkaXRvclBsdWdpbiB9IGZyb20gXCIuLi8uLi9saWIvaW50ZXJmYWNlcy9lZGl0b3ItcGx1Z2luXCJcclxuaW1wb3J0IHsgY29kZUJsb2NrIH0gZnJvbSBcIi4vY29kZS5ub2RlXCJcclxuaW1wb3J0IHsgYXJyb3dIYW5kbGVycywgY29kZUJsb2NrRmFjdG9yeSB9IGZyb20gXCIuL2NvZGUubm9kZXZpZXdcIlxyXG5pbXBvcnQgeyBjb2RlIH0gZnJvbSBcIi4vY29kZS5tYXJrXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrU3RhdGUge1xyXG4gICAgZWxlbWVudD86IEhUTUxFbGVtZW50XHJcbiAgICB0b29sYmFyVmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcclxuICAgIGxhbmd1YWdlPzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRQbHVnaW5TdGF0ZSA9IChzdGF0ZTogRWRpdG9yU3RhdGUpOiBDb2RlQmxvY2tTdGF0ZSA9PiBwbHVnaW5LZXkuZ2V0U3RhdGUoc3RhdGUpXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0UGx1Z2luU3RhdGUgPSAoc3RhdGVQcm9wczogT2JqZWN0KSA9PiAoXHJcbiAgICBzdGF0ZTogRWRpdG9yU3RhdGUsXHJcbiAgICBkaXNwYXRjaDogKHRyKSA9PiB2b2lkLFxyXG4pOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IHBsdWdpblN0YXRlID0gZ2V0UGx1Z2luU3RhdGUoc3RhdGUpXHJcbiAgICBkaXNwYXRjaChcclxuICAgICAgICBzdGF0ZS50ci5zZXRNZXRhKHBsdWdpbktleSwge1xyXG4gICAgICAgICAgICAuLi5wbHVnaW5TdGF0ZSxcclxuICAgICAgICAgICAgLi4uc3RhdGVQcm9wcyxcclxuICAgICAgICB9KSxcclxuICAgIClcclxuICAgIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENvZGVCbG9ja1N0YXRlU3Vic2NyaWJlciA9IChzdGF0ZTogQ29kZUJsb2NrU3RhdGUpID0+IGFueVxyXG5cclxuZXhwb3J0IGNvbnN0IHBsdWdpbktleSA9IG5ldyBQbHVnaW5LZXkoXCJjb2RlQmxvY2tQbHVnaW5cIilcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVQbHVnaW4gPSAoeyBkaXNwYXRjaCB9KSA9PlxyXG4gICAgbmV3IFBsdWdpbih7XHJcbiAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgICAgaW5pdChjb25maWcsIHN0YXRlOiBFZGl0b3JTdGF0ZSk6IENvZGVCbG9ja1N0YXRlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbGJhclZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhcHBseSh0ciwgcGx1Z2luU3RhdGU6IENvZGVCbG9ja1N0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQbHVnaW5TdGF0ZSA9IHRyLmdldE1ldGEocGx1Z2luS2V5KVxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRQbHVnaW5TdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHBsdWdpbktleSwgbmV4dFBsdWdpblN0YXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0UGx1Z2luU3RhdGVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBwbHVnaW5TdGF0ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAga2V5OiBwbHVnaW5LZXksXHJcbiAgICAgICAgdmlldzogKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiAodmlldzogRWRpdG9yVmlldywgcHJldlN0YXRlOiBFZGl0b3JTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zaGFkb3dlZC12YXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzOiB7IGNvZGVCbG9jayB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9ID0gdmlld1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpblN0YXRlID0gZ2V0UGx1Z2luU3RhdGUodmlldy5zdGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRET00gPSBmaW5kUGFyZW50RG9tUmVmT2ZUeXBlKGNvZGVCbG9jaywgdmlldy5kb21BdFBvcy5iaW5kKHZpZXcpKShcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBmaW5kUGFyZW50Tm9kZU9mVHlwZShjb2RlQmxvY2spKHNlbGVjdGlvbilcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFuZ3VhZ2VcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IHBhcmVudC5ub2RlLmF0dHJzLmxhbmd1YWdlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RE9NICE9PSBwbHVnaW5TdGF0ZS5lbGVtZW50IHx8IHBsdWdpblN0YXRlLmxhbmd1YWdlICE9PSBsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZTogQ29kZUJsb2NrU3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBwYXJlbnRET00gYXMgSFRNTEVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xiYXJWaXNpYmxlOiAhIXBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQbHVnaW5TdGF0ZShuZXdTdGF0ZSkodmlldy5zdGF0ZSwgdmlldy5kaXNwYXRjaClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiBQbHVnaW4gZGlzcGF0Y2ggbmVlZGVkIHRvIHJlcG9zaXRpb24gdGhlIHRvb2xiYXIgKi9cclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChwbHVnaW5LZXksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGx1Z2luU3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgIG5vZGVWaWV3czoge1xyXG4gICAgICAgICAgICAgICAgY29kZUJsb2NrOiBjb2RlQmxvY2tGYWN0b3J5LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcclxuICAgICAgICAgICAgICAgIGJsdXIodmlldzogRWRpdG9yVmlldywgZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbHVnaW5TdGF0ZSA9IGdldFBsdWdpblN0YXRlKHZpZXcuc3RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpblN0YXRlLnRvb2xiYXJWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFBsdWdpblN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xiYXJWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSh2aWV3LnN0YXRlLCB2aWV3LmRpc3BhdGNoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgIH0pXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja09wdGlvbnMge1xyXG4gICAgZW5hYmxlS2V5YmluZGluZ3NGb3JJREU/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2RlQmxvY2tQbHVnaW4ob3B0aW9uczogQ29kZUJsb2NrT3B0aW9ucyA9IHt9KTogRWRpdG9yUGx1Z2luIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZXMoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbeyBuYW1lOiBcImNvZGVCbG9ja1wiLCBub2RlOiBjb2RlQmxvY2sgfV1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBtYXJrcygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICBtYXJrOiBjb2RlXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcG1QbHVnaW5zKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgeyBuYW1lOiBcImNvZGVCbG9ja1wiLCBwbHVnaW46IGNyZWF0ZVBsdWdpbiB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZUJsb2NrS2V5SGFuZGxlcnNcIixcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW46ICgpID0+IGFycm93SGFuZGxlcnNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICBuYW1lOiBcImNvZGVCbG9ja0lERUtleUJpbmRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcGx1Z2luOiAoKSA9PiAob3B0aW9ucy5lbmFibGVLZXliaW5kaW5nc0ZvcklERSA/IGlkZVVYIDogdW5kZWZpbmVkKSxcclxuICAgICAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgICAgICAvLyB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbmFtZTogXCJjb2RlQmxvY2tLZXlNYXBcIixcclxuICAgICAgICAgICAgICAgIC8vICAgICBwbHVnaW46ICh7IHNjaGVtYSB9KSA9PiBrZXltYXAoc2NoZW1hKSxcclxuICAgICAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9LFxyXG4gICAgfVxyXG59XHJcbiJdfQ==