UNPKG

@atlaskit/editor-plugin-code-block

Version:

Code block plugin for @atlaskit/editor-core

542 lines (536 loc) 24.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createFormatCodeOnClick = exports.copyContentToClipboardWithAnalytics = exports.copyContentToClipboard = exports.changeLanguage = void 0; exports.createInsertCodeBlockTransaction = createInsertCodeBlockTransaction; exports.ignoreFollowingMutations = exports.detectLanguage = void 0; exports.insertCodeBlockWithAnalytics = insertCodeBlockWithAnalytics; exports.toggleWordWrapStateForCodeBlockNode = exports.toggleLineNumbersForCodeBlockNodeEditorCommand = exports.toggleLineNumbersForCodeBlockNode = exports.resetShouldIgnoreFollowingMutations = exports.resetCopiedState = exports.removeCodeBlockWithAnalytics = exports.removeCodeBlock = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _analytics = require("@atlaskit/editor-common/analytics"); var _clipboard = require("@atlaskit/editor-common/clipboard"); var _codeBlock = require("@atlaskit/editor-common/code-block"); var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics"); var _insert = require("@atlaskit/editor-common/insert"); var _preset = require("@atlaskit/editor-common/preset"); var _transforms = require("@atlaskit/editor-common/transforms"); var _state = require("@atlaskit/editor-prosemirror/state"); var _utils = require("@atlaskit/editor-prosemirror/utils"); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals"); var _actions = require("../pm-plugins/actions"); var _autoDetectState = require("../pm-plugins/auto-detect-state"); var _codeBlockCopySelectionPlugin = require("../pm-plugins/codeBlockCopySelectionPlugin"); var _pluginKey = require("../pm-plugins/plugin-key"); var _transformToCodeBlock = require("../pm-plugins/transform-to-code-block"); var _autoDetectState2 = require("../utils/auto-detect-state"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var removeCodeBlockWithAnalytics = exports.removeCodeBlockWithAnalytics = function removeCodeBlockWithAnalytics(editorAnalyticsAPI) { return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, { action: _analytics.ACTION.DELETED, actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK, attributes: { inputMethod: _analytics.INPUT_METHOD.FLOATING_TB }, eventType: _analytics.EVENT_TYPE.TRACK })(removeCodeBlock); }; var removeCodeBlock = exports.removeCodeBlock = function removeCodeBlock(state, dispatch) { var nodes = state.schema.nodes, tr = state.tr; if (dispatch) { var removeTr = tr; if ((0, _utils.findSelectedNodeOfType)(nodes.codeBlock)(tr.selection)) { removeTr = (0, _utils.removeSelectedNode)(tr); } else { removeTr = (0, _utils.removeParentNodeOfType)(nodes.codeBlock)(tr); } dispatch(removeTr); } return true; }; var changeLanguage = exports.changeLanguage = function changeLanguage(editorAnalyticsAPI) { return function (language, selectionSource) { return function (state, dispatch) { var _pluginKey$getState, _autoDetectPluginKey$; var codeBlock = state.schema.nodes.codeBlock; var pos = (_pluginKey$getState = _pluginKey.pluginKey.getState(state)) === null || _pluginKey$getState === void 0 ? void 0 : _pluginKey$getState.pos; if (typeof pos !== 'number') { return false; } var node = state.doc.nodeAt(pos); var localId = node === null || node === void 0 ? void 0 : node.attrs.localId; var shouldIncludeAutoDetectionContext = (0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_language_detection_flow'); var previousAutoDetectEntry = shouldIncludeAutoDetectionContext ? (_autoDetectPluginKey$ = _autoDetectState.autoDetectPluginKey.getState(state)) === null || _autoDetectPluginKey$ === void 0 ? void 0 : _autoDetectPluginKey$.languageDetectionMap[localId] : undefined; var tr = state.tr.setNodeMarkup(pos, codeBlock, _objectSpread(_objectSpread({}, node === null || node === void 0 ? void 0 : node.attrs), {}, { language: language })).setMeta('scrollIntoView', false); if (shouldIncludeAutoDetectionContext) { tr.setMeta(_autoDetectState.autoDetectPluginKey, { type: _actions.ACTIONS.REMOVE_AUTO_DETECT_ENTRY, data: { localId: localId } }); } var selection = (0, _utils.isNodeSelection)(state.selection) ? _state.NodeSelection.create(tr.doc, pos) : tr.selection; var result = tr.setSelection(selection); if (dispatch) { editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({ action: _analytics.ACTION.LANGUAGE_SELECTED, actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK, attributes: _objectSpread(_objectSpread({ language: language !== null && language !== void 0 ? language : 'none' }, selectionSource ? { selectionSource: selectionSource } : {}), shouldIncludeAutoDetectionContext ? { autoDetectionResult: previousAutoDetectEntry === null || previousAutoDetectEntry === void 0 ? void 0 : previousAutoDetectEntry.detectionResult, autoDetectedLanguage: previousAutoDetectEntry === null || previousAutoDetectEntry === void 0 ? void 0 : previousAutoDetectEntry.autoDetectedLanguage } : {}), eventType: _analytics.EVENT_TYPE.TRACK })(result); dispatch(result); } return true; }; }; }; /** Queue auto-detection for selected code block. */ var detectLanguage = exports.detectLanguage = function detectLanguage() { return function (state, dispatch) { var _pluginKey$getState2; var pos = (_pluginKey$getState2 = _pluginKey.pluginKey.getState(state)) === null || _pluginKey$getState2 === void 0 ? void 0 : _pluginKey$getState2.pos; if (typeof pos !== 'number') { return false; } var node = state.doc.nodeAt(pos); if (!node) { return false; } var localId = (0, _autoDetectState2.getLocalId)(node); if (!localId) { return false; } var autoDetectState = _autoDetectState.autoDetectPluginKey.getState(state); var previousEntry = autoDetectState === null || autoDetectState === void 0 ? void 0 : autoDetectState.languageDetectionMap[localId]; var entry = (0, _autoDetectState2.createAutoDetectEntry)(node, pos, (0, _autoDetectState2.hasEnoughTextForAutoDetection)(node.textContent), previousEntry, { preserveDetectionResult: false }); var tr = state.tr.setNodeMarkup(pos, state.schema.nodes.codeBlock, _objectSpread(_objectSpread({}, node.attrs), {}, { language: null })).setMeta(_autoDetectState.autoDetectPluginKey, { type: _actions.ACTIONS.SET_AUTO_DETECT_ENTRY, data: { localId: localId, entry: entry } }).setMeta('scrollIntoView', false); var selection = (0, _utils.isNodeSelection)(state.selection) ? _state.NodeSelection.create(tr.doc, pos) : tr.selection; var result = tr.setSelection(selection); if (dispatch) { dispatch(result); } return true; }; }; var setResolveFormatCodeMeta = function setResolveFormatCodeMeta(tr, _ref) { var languageSource = _ref.languageSource, localId = _ref.localId, outcome = _ref.outcome, requestId = _ref.requestId, errorType = _ref.errorType; return tr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.RESOLVE_FORMAT_CODE, data: _objectSpread({ languageSource: languageSource, localId: localId, outcome: outcome, requestId: requestId }, errorType ? { errorType: errorType } : {}) }); }; var replaceCodeBlockText = function replaceCodeBlockText(_ref2) { var codeBlockNode = _ref2.codeBlockNode, content = _ref2.content, pos = _ref2.pos, tr = _ref2.tr; var from = pos + 1; var to = pos + codeBlockNode.nodeSize - 1; tr.delete(from, to); if (content) { tr.insertText(content, from); } // The editor scroll plugin scrolls doc-changing transactions by default. return tr.setMeta('scrollIntoView', false); }; var attachFormatCodeAnalytics = function attachFormatCodeAnalytics(_ref3) { var editorAnalyticsAPI = _ref3.editorAnalyticsAPI, languageSource = _ref3.languageSource, result = _ref3.result, tr = _ref3.tr; if (result.status === 'failed') { editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({ action: _analytics.ACTION.ERRORED, actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK, attributes: { errorType: result.errorType, language: result.language, languageSource: languageSource }, eventType: _analytics.EVENT_TYPE.TRACK })(tr); return; } editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({ action: _analytics.ACTION.FORMATTED, actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK, attributes: { language: result.language, languageSource: languageSource, outcome: result.status }, eventType: _analytics.EVENT_TYPE.TRACK })(tr); }; var createResolveFormatCodeTransaction = function createResolveFormatCodeTransaction(_ref4) { var editorAnalyticsAPI = _ref4.editorAnalyticsAPI, localId = _ref4.localId, pendingFormat = _ref4.pendingFormat, result = _ref4.result, tr = _ref4.tr; var languageSource = pendingFormat.languageSource, requestId = pendingFormat.requestId; var codeBlockNode = tr.doc.nodeAt(pendingFormat.pos); var hasMatchingCodeBlock = (codeBlockNode === null || codeBlockNode === void 0 ? void 0 : codeBlockNode.type) === tr.doc.type.schema.nodes.codeBlock && (codeBlockNode === null || codeBlockNode === void 0 ? void 0 : codeBlockNode.attrs.localId) === localId; if (!hasMatchingCodeBlock) { // Keep failure telemetry even when the target block is no longer available. if (result.status === 'failed') { attachFormatCodeAnalytics({ editorAnalyticsAPI: editorAnalyticsAPI, languageSource: languageSource, result: result, tr: tr }); } return setResolveFormatCodeMeta(tr, { languageSource: languageSource, localId: localId, outcome: 'unchanged', requestId: requestId }); } var resultTransaction = tr; if (result.status === 'formatted') { resultTransaction = replaceCodeBlockText({ codeBlockNode: codeBlockNode, content: result.content, pos: pendingFormat.pos, tr: tr }); } attachFormatCodeAnalytics({ editorAnalyticsAPI: editorAnalyticsAPI, languageSource: languageSource, result: result, tr: resultTransaction }); return setResolveFormatCodeMeta(resultTransaction, { errorType: result.status === 'failed' ? result.errorType : undefined, languageSource: languageSource, localId: localId, outcome: result.status, requestId: requestId }); }; var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) { var api = _ref5.api, editorAnalyticsAPI = _ref5.editorAnalyticsAPI, formatCodeProvider = _ref5.formatCodeProvider; return function (state, dispatch) { var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core; if (!formatCodeProvider) { return false; } var currentCodeBlockState = _pluginKey.pluginKey.getState(state); var currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos; if (!currentCodeBlockState || typeof currentPos !== 'number') { return false; } var currentNode = state.doc.nodeAt(currentPos); if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) { return false; } var currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : ''; var currentLocalId = currentNode.attrs.localId; if (currentCodeBlockState.pendingFormats[currentLocalId]) { return true; } var autoDetectEntry = (_autoDetectPluginKey$2 = _autoDetectState.autoDetectPluginKey.getState(state)) === null || _autoDetectPluginKey$2 === void 0 ? void 0 : _autoDetectPluginKey$2.languageDetectionMap[currentLocalId]; var languageSource = (autoDetectEntry === null || autoDetectEntry === void 0 ? void 0 : autoDetectEntry.autoDetectedLanguage) === currentLanguage ? 'auto-detected' : 'selected'; var content = currentNode.textContent; var requestId = crypto.randomUUID(); api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (_ref6) { var tr = _ref6.tr; return tr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.START_FORMAT_CODE, data: { languageSource: languageSource, localId: currentLocalId, pos: currentPos, requestId: requestId } }); }); void formatCodeProvider.formatCode({ content: content, language: currentLanguage }).catch(function () { return { errorType: 'formatter-execution-failed', language: currentLanguage, status: 'failed' }; }).then(function (result) { var _api$codeBlock, _api$core2; var pendingFormat = api === null || api === void 0 || (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 || (_api$codeBlock = _api$codeBlock.sharedState.currentState()) === null || _api$codeBlock === void 0 ? void 0 : _api$codeBlock.pendingFormats[currentLocalId]; if (!pendingFormat || pendingFormat.requestId !== requestId) { return; } api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 || _api$core2.actions.execute(function (_ref7) { var tr = _ref7.tr; return createResolveFormatCodeTransaction({ editorAnalyticsAPI: editorAnalyticsAPI, localId: currentLocalId, pendingFormat: pendingFormat, result: result, tr: tr }); }); }); return true; }; }; var copyContentToClipboardWithAnalytics = exports.copyContentToClipboardWithAnalytics = function copyContentToClipboardWithAnalytics(editorAnalyticsAPI) { return function (state, dispatch) { var nodes = state.schema.nodes, tr = state.tr; var codeBlock = (0, _utils.findParentNodeOfType)(nodes.codeBlock)(tr.selection); var textContent = codeBlock && codeBlock.node.textContent; if (textContent) { (0, _clipboard.copyToClipboard)(textContent); var copyToClipboardTr = tr; copyToClipboardTr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.SET_COPIED_TO_CLIPBOARD, data: true }); copyToClipboardTr.setMeta(_codeBlockCopySelectionPlugin.copySelectionPluginKey, 'remove-selection'); if (editorAnalyticsAPI) { var analyticsPayload = (0, _clipboard.getAnalyticsPayload)(state, _analytics.ACTION.COPIED); if (analyticsPayload) { analyticsPayload.attributes.inputMethod = _analytics.INPUT_METHOD.FLOATING_TB; analyticsPayload.attributes.nodeType = codeBlock === null || codeBlock === void 0 ? void 0 : codeBlock.node.type.name; editorAnalyticsAPI.attachAnalyticsEvent(analyticsPayload)(copyToClipboardTr); } } if (dispatch) { dispatch(copyToClipboardTr); } } return true; }; }; var copyContentToClipboard = exports.copyContentToClipboard = function copyContentToClipboard(state, dispatch) { var nodes = state.schema.nodes, tr = state.tr; var codeBlock = (0, _utils.findParentNodeOfType)(nodes.codeBlock)(tr.selection); var textContent = codeBlock && codeBlock.node.textContent; if (textContent) { (0, _clipboard.copyToClipboard)(textContent); var copyToClipboardTr = tr; copyToClipboardTr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.SET_COPIED_TO_CLIPBOARD, data: true }); copyToClipboardTr.setMeta(_codeBlockCopySelectionPlugin.copySelectionPluginKey, 'remove-selection'); if (dispatch) { dispatch(copyToClipboardTr); } } return true; }; var resetCopiedState = exports.resetCopiedState = function resetCopiedState(state, dispatch) { var tr = state.tr; var codeBlockState = _pluginKey.pluginKey.getState(state); var resetCopiedStateTr = tr; if (codeBlockState && codeBlockState.contentCopied) { resetCopiedStateTr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.SET_COPIED_TO_CLIPBOARD, data: false }); resetCopiedStateTr.setMeta(_codeBlockCopySelectionPlugin.copySelectionPluginKey, 'remove-selection'); if (dispatch) { dispatch(resetCopiedStateTr); } } else { var clearSelectionStateTransaction = state.tr; clearSelectionStateTransaction.setMeta(_codeBlockCopySelectionPlugin.copySelectionPluginKey, 'remove-selection'); // note: dispatch should always be defined when called from the // floating toolbar. Howver the Command type which floating toolbar uses // (and resetCopiedState) uses suggests it's optional. if (dispatch) { dispatch(clearSelectionStateTransaction); } } return true; }; var ignoreFollowingMutations = exports.ignoreFollowingMutations = function ignoreFollowingMutations(state, dispatch) { var tr = state.tr; var ignoreFollowingMutationsTr = tr; ignoreFollowingMutationsTr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.SET_SHOULD_IGNORE_FOLLOWING_MUTATIONS, data: true }); if (dispatch) { dispatch(ignoreFollowingMutationsTr); } return true; }; var resetShouldIgnoreFollowingMutations = exports.resetShouldIgnoreFollowingMutations = function resetShouldIgnoreFollowingMutations(state, dispatch) { var tr = state.tr; var ignoreFollowingMutationsTr = tr; ignoreFollowingMutationsTr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.SET_SHOULD_IGNORE_FOLLOWING_MUTATIONS, data: false }); if (dispatch) { dispatch(ignoreFollowingMutationsTr); } return true; }; /** * This function creates a new transaction that inserts a code block, * if there is text selected it will wrap the current selection if not it will * append the codeblock to the end of the document. */ function createInsertCodeBlockTransaction(_ref8) { var state = _ref8.state; var tr = state.tr; var from = state.selection.from; var codeBlock = state.schema.nodes.codeBlock; var codeBlockAttrs = (0, _codeBlock.getDefaultCodeBlockAttrs)(); var grandParentNode = state.selection.$from.node(-1); var grandParentNodeType = grandParentNode === null || grandParentNode === void 0 ? void 0 : grandParentNode.type; var parentNodeType = state.selection.$from.parent.type; /** We always want to append a codeBlock unless we're inserting into a paragraph * AND it's a valid child of the grandparent node. * Insert the current selection as codeBlock content unless it contains nodes other * than paragraphs and inline. */ var canInsertCodeBlock = (0, _insert.shouldSplitSelectedNodeOnNodeInsertion)({ parentNodeType: parentNodeType, grandParentNodeType: grandParentNodeType, content: codeBlock.createAndFill() }) && (0, _insert.contentAllowedInCodeBlock)(state); if (canInsertCodeBlock) { tr = (0, _transformToCodeBlock.transformToCodeBlockAction)(state, from, codeBlockAttrs); } else { (0, _utils.safeInsert)(codeBlock.createAndFill(codeBlockAttrs))(tr).scrollIntoView(); } return tr; } function insertCodeBlockWithAnalytics(inputMethod, analyticsAPI) { return (0, _editorAnalytics.withAnalytics)(analyticsAPI, { action: _analytics.ACTION.INSERTED, actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT, actionSubjectId: _analytics.ACTION_SUBJECT_ID.CODE_BLOCK, attributes: { inputMethod: inputMethod }, eventType: _analytics.EVENT_TYPE.TRACK })(function (state, dispatch) { var tr = createInsertCodeBlockTransaction({ state: state }); if (dispatch) { dispatch(tr); } return true; }); } /** * Add the given node to the codeBlockWrappedStates WeakMap with the toggle boolean value. */ var toggleWordWrapStateForCodeBlockNode = exports.toggleWordWrapStateForCodeBlockNode = function toggleWordWrapStateForCodeBlockNode(editorAnalyticsAPI) { return function (state, dispatch) { var codeBlock = (0, _transforms.findCodeBlock)(state); var codeBlockNode = codeBlock === null || codeBlock === void 0 ? void 0 : codeBlock.node; var tr = state.tr; if (!_codeBlock.codeBlockWrappedStates || !codeBlockNode) { return false; } var updatedToggleState = !(0, _codeBlock.isCodeBlockWordWrapEnabled)(codeBlockNode); if ((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true)) { tr.setNodeMarkup(codeBlock.pos, undefined, _objectSpread(_objectSpread({}, codeBlockNode.attrs), {}, { wrap: updatedToggleState })); if ((0, _platformFeatureFlags.fg)('platform_editor_code_block_dogfooding_patch')) { tr.setMeta('scrollIntoView', false); } } else { _codeBlock.codeBlockWrappedStates.set(codeBlockNode, updatedToggleState); } tr.setMeta(_pluginKey.pluginKey, { type: _actions.ACTIONS.SET_IS_WRAPPED, data: updatedToggleState }); if (dispatch) { editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({ action: _analytics.ACTION.TOGGLE_CODE_BLOCK_WRAP, actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK, attributes: { platform: _analytics.PLATFORMS.WEB, mode: _analytics.MODE.EDITOR, wordWrapEnabled: updatedToggleState, codeBlockNodeSize: codeBlockNode.nodeSize }, eventType: _analytics.EVENT_TYPE.TRACK })(tr); dispatch(tr); } return true; }; }; var toggleLineNumbersForCodeBlockNodeEditorCommand = exports.toggleLineNumbersForCodeBlockNodeEditorCommand = function toggleLineNumbersForCodeBlockNodeEditorCommand(editorAnalyticsAPI) { return function (_ref9) { var tr = _ref9.tr; var codeBlockType = tr.doc.type.schema.nodes.codeBlock; var codeBlock = (0, _utils.findSelectedNodeOfType)(codeBlockType)(tr.selection) || (0, _utils.findParentNodeOfType)(codeBlockType)(tr.selection); if (!codeBlock) { return null; } var codeBlockNode = codeBlock.node; var lineNumbersHidden = !Boolean(codeBlockNode.attrs.hideLineNumbers); tr.setNodeMarkup(codeBlock.pos, undefined, _objectSpread(_objectSpread({}, codeBlockNode.attrs), {}, { hideLineNumbers: lineNumbersHidden })); editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({ action: _analytics.ACTION.TOGGLE_CODE_BLOCK_LINE_NUMBERS, actionSubject: _analytics.ACTION_SUBJECT.CODE_BLOCK, attributes: { platform: _analytics.PLATFORMS.WEB, lineNumbersHidden: lineNumbersHidden, codeBlockNodeSize: codeBlockNode.nodeSize }, eventType: _analytics.EVENT_TYPE.TRACK })(tr); return tr; }; }; var toggleLineNumbersForCodeBlockNode = exports.toggleLineNumbersForCodeBlockNode = function toggleLineNumbersForCodeBlockNode(editorAnalyticsAPI) { return (0, _preset.editorCommandToPMCommand)(toggleLineNumbersForCodeBlockNodeEditorCommand(editorAnalyticsAPI)); };