UNPKG

@zodiac-ui/editor

Version:

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

128 lines 20.2 kB
import { Plugin, PluginKey } from "prosemirror-state"; import { BLOCK_QUOTE, CODE_BLOCK, HEADING_1, HEADING_2, HEADING_3, HEADING_4, HEADING_5, HEADING_6, HEADINGS_BY_LEVEL, NORMAL_TEXT, OTHER, PANEL, TEXT_BLOCK_TYPES, WRAPPER_BLOCK_TYPES, } from "./interfaces"; import { getSelectedWrapperNodes } from "../../lib/utils/get-selected-wrapper-nodes"; import { inputRulePlugin } from "./block-type.inputrule"; import { keymapPlugin } from "./keymap"; export function areBlockTypesDisabled(state) { const nodesTypes = getSelectedWrapperNodes(state); const { panel } = state.schema.nodes; return nodesTypes.filter(type => type !== panel).length > 0; } const blockTypeForNode = (node, schema) => { if (node.type === schema.nodes.heading) { const maybeNode = HEADINGS_BY_LEVEL[node.attrs['level']]; if (maybeNode) { return maybeNode; } } else if (node.type === schema.nodes.paragraph) { return NORMAL_TEXT; } return OTHER; }; const ɵ0 = blockTypeForNode; const isBlockTypeSchemaSupported = (blockType, state) => { switch (blockType) { case NORMAL_TEXT: return !!state.schema.nodes.paragraph; case HEADING_1: case HEADING_2: case HEADING_3: case HEADING_4: case HEADING_5: case HEADING_6: return !!state.schema.nodes.heading; case BLOCK_QUOTE: return !!state.schema.nodes.blockquote; case CODE_BLOCK: return !!state.schema.nodes.codeBlock; case PANEL: return !!state.schema.nodes.panel; } }; const ɵ1 = isBlockTypeSchemaSupported; const detectBlockType = (availableBlockTypes, state) => { // Before a document is loaded, there is no selection. if (!state.selection) { return NORMAL_TEXT; } let blockType; const { $from, $to } = state.selection; state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => { const nodeBlockType = availableBlockTypes.filter( // tslint:disable-next-line:no-shadowed-variable blockType => blockType === blockTypeForNode(node, state.schema)); if (nodeBlockType.length > 0) { if (!blockType) { blockType = nodeBlockType[0]; } else if (blockType !== OTHER && blockType !== nodeBlockType[0]) { blockType = OTHER; } } }); return blockType || OTHER; }; const ɵ2 = detectBlockType; export const pluginKey = new PluginKey('blockTypePlugin'); export const createPlugin = (dispatch) => { return new Plugin({ appendTransaction(transactions, oldState, newState) { // if (appearance === 'comment') { // const pos = newState.doc.resolve(newState.doc.content.size - 1); // const lastNode = pos.node(1); // const { paragraph } = newState.schema.nodes; // if (lastNode && lastNode.isBlock && lastNode.type !== paragraph) { // return newState.tr.insert( // newState.doc.content.size, // newState.schema.nodes.paragraph.create(), // ); // } // } }, state: { init(config, state) { const availableBlockTypes = TEXT_BLOCK_TYPES.filter(blockType => isBlockTypeSchemaSupported(blockType, state)); const availableWrapperBlockTypes = WRAPPER_BLOCK_TYPES.filter(blockType => isBlockTypeSchemaSupported(blockType, state)); return { currentBlockType: detectBlockType(availableBlockTypes, state), blockTypesDisabled: areBlockTypesDisabled(state), availableBlockTypes, availableWrapperBlockTypes, }; }, apply(tr, oldPluginState, oldState, newState) { const newPluginState = Object.assign({}, oldPluginState, { currentBlockType: detectBlockType(oldPluginState.availableBlockTypes, newState), blockTypesDisabled: areBlockTypesDisabled(newState) }); if (newPluginState.currentBlockType !== oldPluginState.currentBlockType || newPluginState.blockTypesDisabled !== oldPluginState.blockTypesDisabled) { dispatch(pluginKey, newPluginState); } return newPluginState; }, }, key: pluginKey, }); }; export const blockTypePlugin = { pmPlugins() { return [ { name: 'blockType', plugin: ({ dispatch }) => createPlugin(dispatch), }, { name: 'blockTypeInputRule', plugin: ({ schema }) => inputRulePlugin(schema), }, // Needs to be lower priority than prosemirror-tables.tableEditing // plugin as it is currently swallowing right/down arrow events inside tables { name: 'blockTypeKeyMap', plugin: ({ schema }) => keymapPlugin(schema), }, ]; }, }; export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stdHlwZS5wbHVnaW4uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbInBsdWdpbnMvYmxvY2stdHlwZS9ibG9jay10eXBlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWUsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLG1CQUFtQixDQUFBO0FBQy9FLE9BQU8sRUFDSCxXQUFXLEVBRVgsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsS0FBSyxFQUNMLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3RCLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBVXZDLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFrQjtJQUNwRCxNQUFNLFVBQVUsR0FBZSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDckMsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFVLEVBQUUsTUFBYyxFQUFhLEVBQUU7SUFDL0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1FBQ3BDLE1BQU0sU0FBUyxH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QUFTO0tBQ2pCLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQWFGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDekMsU0FBUztRQUNMLE9BQU87WUFDSDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQzthQUNuRDtZQUNEO2dCQUNJLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7YUFDbEQ7WUFDRCxrRUFBa0U7WUFDbEUsNkVBQTZFO1lBQzdFO2dCQUNJLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDL0M7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3JQbHVnaW4gfSBmcm9tIFwiLi4vLi4vbGliL2ludGVyZmFjZXMvZWRpdG9yLXBsdWdpblwiXHJcblxyXG5pbXBvcnQgeyBOb2RlLCBOb2RlU3BlYywgTm9kZVR5cGUsIFNjaGVtYSB9IGZyb20gXCJwcm9zZW1pcnJvci1tb2RlbFwiXHJcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBQbHVnaW4sIFBsdWdpbktleSwgVHJhbnNhY3Rpb24gfSBmcm9tIFwicHJvc2VtaXJyb3Itc3RhdGVcIlxyXG5pbXBvcnQge1xyXG4gICAgQkxPQ0tfUVVPVEUsXHJcbiAgICBCbG9ja1R5cGUsXHJcbiAgICBDT0RFX0JMT0NLLFxyXG4gICAgSEVBRElOR18xLFxyXG4gICAgSEVBRElOR18yLFxyXG4gICAgSEVBRElOR18zLFxyXG4gICAgSEVBRElOR180LFxyXG4gICAgSEVBRElOR181LFxyXG4gICAgSEVBRElOR182LFxyXG4gICAgSEVBRElOR1NfQllfTEVWRUwsXHJcbiAgICBOT1JNQUxfVEVYVCxcclxuICAgIE9USEVSLFxyXG4gICAgUEFORUwsXHJcbiAgICBURVhUX0JMT0NLX1RZUEVTLFxyXG4gICAgV1JBUFBFUl9CTE9DS19UWVBFUyxcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRXcmFwcGVyTm9kZXMgfSBmcm9tIFwiLi4vLi4vbGliL3V0aWxzL2dldC1zZWxlY3RlZC13cmFwcGVyLW5vZGVzXCJcclxuaW1wb3J0IHsgaW5wdXRSdWxlUGx1Z2luIH0gZnJvbSBcIi4vYmxvY2stdHlwZS5pbnB1dHJ1bGVcIlxyXG5pbXBvcnQgeyBrZXltYXBQbHVnaW4gfSBmcm9tIFwiLi9rZXltYXBcIlxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tUeXBlU3RhdGUge1xyXG4gICAgY3VycmVudEJsb2NrVHlwZTogQmxvY2tUeXBlO1xyXG4gICAgYmxvY2tUeXBlc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgYXZhaWxhYmxlQmxvY2tUeXBlczogQmxvY2tUeXBlW107XHJcbiAgICBhdmFpbGFibGVXcmFwcGVyQmxvY2tUeXBlczogQmxvY2tUeXBlW107XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcmVCbG9ja1R5cGVzRGlzYWJsZWQoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBub2Rlc1R5cGVzOiBOb2RlVHlwZVtdID0gZ2V0U2VsZWN0ZWRXcmFwcGVyTm9kZXMoc3RhdGUpO1xyXG4gICAgY29uc3QgeyBwYW5lbCB9ID0gc3RhdGUuc2NoZW1hLm5vZGVzO1xyXG4gICAgcmV0dXJuIG5vZGVzVHlwZXMuZmlsdGVyKHR5cGUgPT4gdHlwZSAhPT0gcGFuZWwpLmxlbmd0aCA+IDA7XHJcbn1cclxuXHJcbmNvbnN0IGJsb2NrVHlwZUZvck5vZGUgPSAobm9kZTogTm9kZSwgc2NoZW1hOiBTY2hlbWEpOiBCbG9ja1R5cGUgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gc2NoZW1hLm5vZGVzLmhlYWRpbmcpIHtcclxuICAgICAgICBjb25zdCBtYXliZU5vZGUgPSBIRUFESU5HU19CWV9MRVZFTFtub2RlLmF0dHJzWydsZXZlbCddXTtcclxuICAgICAgICBpZiAobWF5YmVOb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXliZU5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IHNjaGVtYS5ub2Rlcy5wYXJhZ3JhcGgpIHtcclxuICAgICAgICByZXR1cm4gTk9STUFMX1RFWFQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT1RIRVI7XHJcbn07XHJcblxyXG5jb25zdCBpc0Jsb2NrVHlwZVNjaGVtYVN1cHBvcnRlZCA9IChcclxuICAgIGJsb2NrVHlwZTogQmxvY2tUeXBlLFxyXG4gICAgc3RhdGU6IEVkaXRvclN0YXRlLFxyXG4pID0+IHtcclxuICAgIHN3aXRjaCAoYmxvY2tUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBOT1JNQUxfVEVYVDpcclxuICAgICAgICAgICAgcmV0dXJuICEhc3RhdGUuc2NoZW1hLm5vZGVzLnBhcmFncmFwaDtcclxuICAgICAgICBjYXNlIEhFQURJTkdfMTpcclxuICAgICAgICBjYXNlIEhFQURJTkdfMjpcclxuICAgICAgICBjYXNlIEhFQURJTkdfMzpcclxuICAgICAgICBjYXNlIEhFQURJTkdfNDpcclxuICAgICAgICBjYXNlIEhFQURJTkdfNTpcclxuICAgICAgICBjYXNlIEhFQURJTkdfNjpcclxuICAgICAgICAgICAgcmV0dXJuICEhc3RhdGUuc2NoZW1hLm5vZGVzLmhlYWRpbmc7XHJcbiAgICAgICAgY2FzZSBCTE9DS19RVU9URTpcclxuICAgICAgICAgICAgcmV0dXJuICEhc3RhdGUuc2NoZW1hLm5vZGVzLmJsb2NrcXVvdGU7XHJcbiAgICAgICAgY2FzZSBDT0RFX0JMT0NLOlxyXG4gICAgICAgICAgICByZXR1cm4gISFzdGF0ZS5zY2hlbWEubm9kZXMuY29kZUJsb2NrO1xyXG4gICAgICAgIGNhc2UgUEFORUw6XHJcbiAgICAgICAgICAgIHJldHVybiAhIXN0YXRlLnNjaGVtYS5ub2Rlcy5wYW5lbDtcclxuICAgIH1cclxufTtcclxuXHJcbmNvbnN0IGRldGVjdEJsb2NrVHlwZSA9IChcclxuICAgIGF2YWlsYWJsZUJsb2NrVHlwZXM6IEJsb2NrVHlwZVtdLFxyXG4gICAgc3RhdGU6IEVkaXRvclN0YXRlLFxyXG4pOiBCbG9ja1R5cGUgPT4ge1xyXG4gICAgLy8gQmVmb3JlIGEgZG9jdW1lbnQgaXMgbG9hZGVkLCB0aGVyZSBpcyBubyBzZWxlY3Rpb24uXHJcbiAgICBpZiAoIXN0YXRlLnNlbGVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBOT1JNQUxfVEVYVDtcclxuICAgIH1cclxuICAgIGxldCBibG9ja1R5cGU7XHJcbiAgICBjb25zdCB7ICRmcm9tLCAkdG8gfSA9IHN0YXRlLnNlbGVjdGlvbjtcclxuICAgIHN0YXRlLmRvYy5ub2Rlc0JldHdlZW4oJGZyb20ucG9zLCAkdG8ucG9zLCAobm9kZSwgcG9zKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm9kZUJsb2NrVHlwZSA9IGF2YWlsYWJsZUJsb2NrVHlwZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc2hhZG93ZWQtdmFyaWFibGVcclxuICAgICAgICAgICAgYmxvY2tUeXBlID0+IGJsb2NrVHlwZSA9PT0gYmxvY2tUeXBlRm9yTm9kZShub2RlLCBzdGF0ZS5zY2hlbWEpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG5vZGVCbG9ja1R5cGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIWJsb2NrVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgYmxvY2tUeXBlID0gbm9kZUJsb2NrVHlwZVswXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChibG9ja1R5cGUgIT09IE9USEVSICYmIGJsb2NrVHlwZSAhPT0gbm9kZUJsb2NrVHlwZVswXSkge1xyXG4gICAgICAgICAgICAgICAgYmxvY2tUeXBlID0gT1RIRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBibG9ja1R5cGUgfHwgT1RIRVI7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgcGx1Z2luS2V5ID0gbmV3IFBsdWdpbktleSgnYmxvY2tUeXBlUGx1Z2luJyk7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUGx1Z2luID0gKFxyXG4gICAgZGlzcGF0Y2g6IChldmVudE5hbWU6IHN0cmluZyB8IFBsdWdpbktleSwgZGF0YTogYW55KSA9PiB2b2lkLFxyXG4gICAgLy8gYXBwZWFyYW5jZT8sXHJcbikgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQbHVnaW4oe1xyXG4gICAgICAgIGFwcGVuZFRyYW5zYWN0aW9uKFxyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10sXHJcbiAgICAgICAgICAgIG9sZFN0YXRlOiBFZGl0b3JTdGF0ZSxcclxuICAgICAgICAgICAgbmV3U3RhdGU6IEVkaXRvclN0YXRlLFxyXG4gICAgICAgICk6IFRyYW5zYWN0aW9uIHwgdm9pZCB7XHJcbiAgICAgICAgICAgIC8vIGlmIChhcHBlYXJhbmNlID09PSAnY29tbWVudCcpIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvbnN0IHBvcyA9IG5ld1N0YXRlLmRvYy5yZXNvbHZlKG5ld1N0YXRlLmRvYy5jb250ZW50LnNpemUgLSAxKTtcclxuICAgICAgICAgICAgLy8gICAgIGNvbnN0IGxhc3ROb2RlID0gcG9zLm5vZGUoMSk7XHJcbiAgICAgICAgICAgIC8vICAgICBjb25zdCB7IHBhcmFncmFwaCB9ID0gbmV3U3RhdGUuc2NoZW1hLm5vZGVzO1xyXG4gICAgICAgICAgICAvLyAgICAgaWYgKGxhc3ROb2RlICYmIGxhc3ROb2RlLmlzQmxvY2sgJiYgbGFzdE5vZGUudHlwZSAhPT0gcGFyYWdyYXBoKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIG5ld1N0YXRlLnRyLmluc2VydChcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbmV3U3RhdGUuZG9jLmNvbnRlbnQuc2l6ZSxcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbmV3U3RhdGUuc2NoZW1hLm5vZGVzLnBhcmFncmFwaC5jcmVhdGUoKSxcclxuICAgICAgICAgICAgLy8gICAgICAgICApO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgICAgaW5pdChjb25maWcsIHN0YXRlOiBFZGl0b3JTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlQmxvY2tUeXBlcyA9IFRFWFRfQkxPQ0tfVFlQRVMuZmlsdGVyKGJsb2NrVHlwZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGlzQmxvY2tUeXBlU2NoZW1hU3VwcG9ydGVkKGJsb2NrVHlwZSwgc3RhdGUpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZVdyYXBwZXJCbG9ja1R5cGVzID0gV1JBUFBFUl9CTE9DS19UWVBFUy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tUeXBlID0+IGlzQmxvY2tUeXBlU2NoZW1hU3VwcG9ydGVkKGJsb2NrVHlwZSwgc3RhdGUpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja1R5cGU6IGRldGVjdEJsb2NrVHlwZShhdmFpbGFibGVCbG9ja1R5cGVzLCBzdGF0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tUeXBlc0Rpc2FibGVkOiBhcmVCbG9ja1R5cGVzRGlzYWJsZWQoc3RhdGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUJsb2NrVHlwZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlV3JhcHBlckJsb2NrVHlwZXMsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgYXBwbHkoXHJcbiAgICAgICAgICAgICAgICB0cixcclxuICAgICAgICAgICAgICAgIG9sZFBsdWdpblN0YXRlOiBCbG9ja1R5cGVTdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9sZFN0YXRlOiBFZGl0b3JTdGF0ZSxcclxuICAgICAgICAgICAgICAgIG5ld1N0YXRlOiBFZGl0b3JTdGF0ZSxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQbHVnaW5TdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5vbGRQbHVnaW5TdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tUeXBlOiBkZXRlY3RCbG9ja1R5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBsdWdpblN0YXRlLmF2YWlsYWJsZUJsb2NrVHlwZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tUeXBlc0Rpc2FibGVkOiBhcmVCbG9ja1R5cGVzRGlzYWJsZWQobmV3U3RhdGUpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3UGx1Z2luU3RhdGUuY3VycmVudEJsb2NrVHlwZSAhPT0gb2xkUGx1Z2luU3RhdGUuY3VycmVudEJsb2NrVHlwZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1BsdWdpblN0YXRlLmJsb2NrVHlwZXNEaXNhYmxlZCAhPT1cclxuICAgICAgICAgICAgICAgICAgICBvbGRQbHVnaW5TdGF0ZS5ibG9ja1R5cGVzRGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHBsdWdpbktleSwgbmV3UGx1Z2luU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdQbHVnaW5TdGF0ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBrZXk6IHBsdWdpbktleSxcclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQWxsb3dlZEJsb2NrVHlwZXMgPVxyXG4gICAgfCAnaGVhZGluZydcclxuICAgIHwgJ2Jsb2NrcXVvdGUnXHJcbiAgICB8ICdoYXJkQnJlYWsnXHJcbiAgICB8ICdjb2RlQmxvY2snO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCbG9ja1R5cGVOb2RlIHtcclxuICAgIG5hbWU6IEFsbG93ZWRCbG9ja1R5cGVzO1xyXG4gICAgbm9kZTogTm9kZVNwZWM7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBibG9ja1R5cGVQbHVnaW46IEVkaXRvclBsdWdpbiA9IHtcclxuICAgIHBtUGx1Z2lucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmxvY2tUeXBlJyxcclxuICAgICAgICAgICAgICAgIHBsdWdpbjogKHsgZGlzcGF0Y2ggfSkgPT4gY3JlYXRlUGx1Z2luKGRpc3BhdGNoKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZUlucHV0UnVsZScsXHJcbiAgICAgICAgICAgICAgICBwbHVnaW46ICh7IHNjaGVtYSB9KSA9PiBpbnB1dFJ1bGVQbHVnaW4oc2NoZW1hKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gTmVlZHMgdG8gYmUgbG93ZXIgcHJpb3JpdHkgdGhhbiBwcm9zZW1pcnJvci10YWJsZXMudGFibGVFZGl0aW5nXHJcbiAgICAgICAgICAgIC8vIHBsdWdpbiBhcyBpdCBpcyBjdXJyZW50bHkgc3dhbGxvd2luZyByaWdodC9kb3duIGFycm93IGV2ZW50cyBpbnNpZGUgdGFibGVzXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja1R5cGVLZXlNYXAnLFxyXG4gICAgICAgICAgICAgICAgcGx1Z2luOiAoeyBzY2hlbWEgfSkgPT4ga2V5bWFwUGx1Z2luKHNjaGVtYSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH0sXHJcbn1cclxuIl19