@atlaskit/editor-plugin-code-block 13.1.12 → 13.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/codeBlockPlugin.js +1 -1
  3. package/dist/cjs/editor-commands/index.js +14 -8
  4. package/dist/cjs/pm-plugins/toolbar.js +8 -5
  5. package/dist/cjs/utils/format-code/formatter.js +8 -75
  6. package/dist/es2019/codeBlockPlugin.js +1 -1
  7. package/dist/es2019/editor-commands/index.js +13 -9
  8. package/dist/es2019/pm-plugins/toolbar.js +9 -9
  9. package/dist/es2019/utils/format-code/formatter.js +4 -42
  10. package/dist/esm/codeBlockPlugin.js +1 -1
  11. package/dist/esm/editor-commands/index.js +14 -8
  12. package/dist/esm/pm-plugins/toolbar.js +9 -6
  13. package/dist/esm/utils/format-code/formatter.js +7 -69
  14. package/dist/types/editor-commands/index.d.ts +3 -1
  15. package/dist/types/entry-points/types.d.ts +1 -1
  16. package/dist/types/pm-plugins/toolbar.d.ts +2 -1
  17. package/dist/types/types/index.d.ts +18 -0
  18. package/dist/types/utils/format-code/formatter.d.ts +3 -23
  19. package/dist/types-ts4.5/editor-commands/index.d.ts +3 -1
  20. package/dist/types-ts4.5/entry-points/types.d.ts +1 -1
  21. package/dist/types-ts4.5/pm-plugins/toolbar.d.ts +2 -1
  22. package/dist/types-ts4.5/types/index.d.ts +18 -0
  23. package/dist/types-ts4.5/utils/format-code/formatter.d.ts +3 -30
  24. package/package.json +1 -4
  25. package/dist/cjs/utils/format-code/formatter-impl.js +0 -15
  26. package/dist/es2019/utils/format-code/formatter-impl.js +0 -10
  27. package/dist/esm/utils/format-code/formatter-impl.js +0 -9
  28. package/dist/types/utils/format-code/formatter-impl.d.ts +0 -5
  29. package/dist/types-ts4.5/utils/format-code/formatter-impl.d.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @atlaskit/editor-plugin-code-block
2
2
 
3
+ ## 13.1.13
4
+
5
+ ### Patch Changes
6
+
7
+ - [`ff0d47c808e14`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ff0d47c808e14) -
8
+ Add provider-based opt-in for the code block formatting button.
9
+
3
10
  ## 13.1.12
4
11
 
5
12
  ### Patch Changes
@@ -163,7 +163,7 @@ var codeBlockPlugin = function codeBlockPlugin(_ref) {
163
163
  }
164
164
  }];
165
165
  },
166
- floatingToolbar: (0, _toolbar.getToolbarConfig)(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName)
166
+ floatingToolbar: (0, _toolbar.getToolbarConfig)(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName, options === null || options === void 0 ? void 0 : options.formatCodeProvider)
167
167
  },
168
168
  contentComponent: function contentComponent() {
169
169
  return (0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_code_block_q4_lovability', 'isEnabled', true) ? /*#__PURE__*/_react.default.createElement(_FormatCodeErrorFlag.FormatCodeErrorFlag, {
@@ -27,7 +27,6 @@ var _codeBlockCopySelectionPlugin = require("../pm-plugins/codeBlockCopySelectio
27
27
  var _pluginKey = require("../pm-plugins/plugin-key");
28
28
  var _transformToCodeBlock = require("../pm-plugins/transform-to-code-block");
29
29
  var _autoDetectState2 = require("../utils/auto-detect-state");
30
- var _formatter = require("../utils/format-code/formatter");
31
30
  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; }
32
31
  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; }
33
32
  var removeCodeBlockWithAnalytics = exports.removeCodeBlockWithAnalytics = function removeCodeBlockWithAnalytics(editorAnalyticsAPI) {
@@ -250,9 +249,13 @@ var createResolveFormatCodeTransaction = function createResolveFormatCodeTransac
250
249
  };
251
250
  var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
252
251
  var api = _ref5.api,
253
- editorAnalyticsAPI = _ref5.editorAnalyticsAPI;
252
+ editorAnalyticsAPI = _ref5.editorAnalyticsAPI,
253
+ formatCodeProvider = _ref5.formatCodeProvider;
254
254
  return function (state, dispatch) {
255
- var _autoDetectPluginKey$2, _api$core;
255
+ var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core;
256
+ if (!formatCodeProvider) {
257
+ return false;
258
+ }
256
259
  var currentCodeBlockState = _pluginKey.pluginKey.getState(state);
257
260
  var currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos;
258
261
  if (!currentCodeBlockState || typeof currentPos !== 'number') {
@@ -262,10 +265,7 @@ var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createF
262
265
  if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) {
263
266
  return false;
264
267
  }
265
- var currentLanguage = currentNode.attrs.language;
266
- if (!(0, _formatter.isSupportedFormatLanguage)(currentLanguage)) {
267
- return true;
268
- }
268
+ var currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : '';
269
269
  var currentLocalId = currentNode.attrs.localId;
270
270
  if (currentCodeBlockState.pendingFormats[currentLocalId]) {
271
271
  return true;
@@ -286,9 +286,15 @@ var createFormatCodeOnClick = exports.createFormatCodeOnClick = function createF
286
286
  }
287
287
  });
288
288
  });
289
- void (0, _formatter.formatCode)({
289
+ void formatCodeProvider.formatCode({
290
290
  content: content,
291
291
  language: currentLanguage
292
+ }).catch(function () {
293
+ return {
294
+ errorType: 'formatter-execution-failed',
295
+ language: currentLanguage,
296
+ status: 'failed'
297
+ };
292
298
  }).then(function (result) {
293
299
  var _api$codeBlock, _api$core2;
294
300
  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];
@@ -64,6 +64,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
64
64
  var allowCopyToClipboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
65
65
  var api = arguments.length > 1 ? arguments[1] : undefined;
66
66
  var overrideLanguageName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
67
+ var formatCodeProvider = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
67
68
  var languageList = (0, _languageList.createLanguageList)(overrideLanguageName ? _languageList.DEFAULT_LANGUAGES.map(function (languageOption) {
68
69
  return _objectSpread(_objectSpread({}, languageOption), {}, {
69
70
  name: overrideLanguageName(languageOption.name)
@@ -248,7 +249,8 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
248
249
  tabIndex: null,
249
250
  selected: areLineNumbersVisible
250
251
  };
251
- var canFormatCode = node.textContent.length > 0 && (0, _formatter.isSupportedFormatLanguage)(language);
252
+ var formatLanguage = formatCodeProvider !== null && formatCodeProvider !== void 0 && formatCodeProvider.isSupportedLanguage(language) ? language : undefined;
253
+ var canFormatCode = node.textContent.length > 0 && Boolean(formatLanguage);
252
254
  var formatCodeButton = {
253
255
  id: 'editor.codeBlock.formatCode',
254
256
  type: 'button',
@@ -257,10 +259,11 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
257
259
  icon: _angleBrackets.default,
258
260
  onClick: (0, _editorCommands.createFormatCodeOnClick)({
259
261
  api: api,
260
- editorAnalyticsAPI: editorAnalyticsAPI
262
+ editorAnalyticsAPI: editorAnalyticsAPI,
263
+ formatCodeProvider: formatCodeProvider
261
264
  }),
262
- onFocus: (0, _formatter.preloadFormatterOnIntent)(),
263
- onMouseEnter: (0, _formatter.preloadFormatterOnIntent)(),
265
+ onFocus: (0, _formatter.preloadFormatterOnIntent)(formatCodeProvider, formatLanguage),
266
+ onMouseEnter: (0, _formatter.preloadFormatterOnIntent)(formatCodeProvider, formatLanguage),
264
267
  title: formatMessage(canFormatCode ? _messages.codeBlockButtonMessages.formatCode : _messages.codeBlockButtonMessages.formatCodeUnavailable)
265
268
  };
266
269
  return {
@@ -271,7 +274,7 @@ var getToolbarConfig = exports.getToolbarConfig = function getToolbarConfig() {
271
274
  return (0, _utils.findDomRefAtPos)(pos, view.domAtPos.bind(view));
272
275
  },
273
276
  nodeType: nodeType,
274
- items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat((0, _toConsumableArray2.default)(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], (0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton] : []), (0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_add_line_number_button') && (0, _platformFeatureFlags.fg)('platform_editor_code_block_formatting') ? [formatCodeButton] : []), (0, _toConsumableArray2.default)(copyAndDeleteButtonMenuItems)),
277
+ items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat((0, _toConsumableArray2.default)(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], (0, _toConsumableArray2.default)((0, _expValEquals.expValEquals)('platform_editor_code_block_q4_lovability', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton].concat((0, _toConsumableArray2.default)(formatCodeProvider ? [formatCodeButton] : [])) : []), (0, _toConsumableArray2.default)(copyAndDeleteButtonMenuItems)),
275
278
  scrollable: true
276
279
  };
277
280
  };
@@ -1,86 +1,19 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
- exports.preloadFormatterOnIntent = exports.preloadFormatterModule = exports.isSupportedFormatLanguage = exports.formatCode = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t3 in e) "default" !== _t3 && {}.hasOwnProperty.call(e, _t3) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t3)) && (i.get || i.set) ? o(f, _t3, i) : f[_t3] = e[_t3]); return f; })(e, t); }
12
- var supportedFormatLanguages = ['json', 'javascript', 'jsx', 'typescript', 'tsx', 'sql'];
13
- var isSupportedFormatLanguage = exports.isSupportedFormatLanguage = function isSupportedFormatLanguage(language) {
14
- return supportedFormatLanguages.includes(language);
15
- };
16
- var formatterModulePromise;
17
- var preloadFormatterModule = exports.preloadFormatterModule = function preloadFormatterModule() {
18
- if (!formatterModulePromise) {
19
- formatterModulePromise = Promise.resolve().then(function () {
20
- return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-plugin-code-block-formatter" */'./formatter-impl'));
21
- }).catch(function (error) {
22
- formatterModulePromise = undefined;
23
- throw error;
24
- });
25
- }
26
- return formatterModulePromise;
27
- };
28
- var preloadFormatterOnIntent = exports.preloadFormatterOnIntent = function preloadFormatterOnIntent() {
6
+ exports.preloadFormatterOnIntent = void 0;
7
+ var preloadFormatterOnIntent = exports.preloadFormatterOnIntent = function preloadFormatterOnIntent(formatCodeProvider, language) {
29
8
  return function (_state, dispatch) {
30
- if (!dispatch) {
9
+ var _formatCodeProvider$p;
10
+ if (!dispatch || !formatCodeProvider || !language) {
31
11
  // Hover/focus handlers are command-shaped; keep dry-runs side-effect free.
32
12
  return false;
33
13
  }
34
- void preloadFormatterModule();
14
+ void ((_formatCodeProvider$p = formatCodeProvider.preload) === null || _formatCodeProvider$p === void 0 || (_formatCodeProvider$p = _formatCodeProvider$p.call(formatCodeProvider, language)) === null || _formatCodeProvider$p === void 0 ? void 0 : _formatCodeProvider$p.catch(function () {
15
+ return undefined;
16
+ }));
35
17
  return false;
36
18
  };
37
- };
38
- var formatCode = exports.formatCode = /*#__PURE__*/function () {
39
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
40
- var content, language, formatterModule, _t, _t2;
41
- return _regenerator.default.wrap(function (_context) {
42
- while (1) switch (_context.prev = _context.next) {
43
- case 0:
44
- content = _ref.content, language = _ref.language;
45
- _context.prev = 1;
46
- _context.next = 2;
47
- return preloadFormatterModule();
48
- case 2:
49
- formatterModule = _context.sent;
50
- _context.next = 4;
51
- break;
52
- case 3:
53
- _context.prev = 3;
54
- _t = _context["catch"](1);
55
- return _context.abrupt("return", {
56
- errorType: 'formatter-load-failed',
57
- language: language,
58
- status: 'failed'
59
- });
60
- case 4:
61
- _context.prev = 4;
62
- _context.next = 5;
63
- return formatterModule.formatCode({
64
- content: content,
65
- language: language
66
- });
67
- case 5:
68
- return _context.abrupt("return", _context.sent);
69
- case 6:
70
- _context.prev = 6;
71
- _t2 = _context["catch"](4);
72
- return _context.abrupt("return", {
73
- errorType: 'formatter-execution-failed',
74
- language: language,
75
- status: 'failed'
76
- });
77
- case 7:
78
- case "end":
79
- return _context.stop();
80
- }
81
- }, _callee, null, [[1, 3], [4, 6]]);
82
- }));
83
- return function formatCode(_x) {
84
- return _ref2.apply(this, arguments);
85
- };
86
- }();
19
+ };
@@ -142,7 +142,7 @@ const codeBlockPlugin = ({
142
142
  return tr;
143
143
  }
144
144
  }],
145
- floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName)
145
+ floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName, options === null || options === void 0 ? void 0 : options.formatCodeProvider)
146
146
  },
147
147
  contentComponent: () => expValEqualsNoExposure('platform_editor_code_block_q4_lovability', 'isEnabled', true) ? /*#__PURE__*/React.createElement(FormatCodeErrorFlag, {
148
148
  api: api
@@ -15,7 +15,6 @@ import { copySelectionPluginKey } from '../pm-plugins/codeBlockCopySelectionPlug
15
15
  import { pluginKey } from '../pm-plugins/plugin-key';
16
16
  import { transformToCodeBlockAction } from '../pm-plugins/transform-to-code-block';
17
17
  import { createAutoDetectEntry, getLocalId, hasEnoughTextForAutoDetection } from '../utils/auto-detect-state';
18
- import { formatCode, isSupportedFormatLanguage } from '../utils/format-code/formatter';
19
18
  export const removeCodeBlockWithAnalytics = editorAnalyticsAPI => {
20
19
  return withAnalytics(editorAnalyticsAPI, {
21
20
  action: ACTION.DELETED,
@@ -243,9 +242,13 @@ const createResolveFormatCodeTransaction = ({
243
242
  };
244
243
  export const createFormatCodeOnClick = ({
245
244
  api,
246
- editorAnalyticsAPI
245
+ editorAnalyticsAPI,
246
+ formatCodeProvider
247
247
  }) => (state, dispatch) => {
248
- var _autoDetectPluginKey$2, _api$core;
248
+ var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core;
249
+ if (!formatCodeProvider) {
250
+ return false;
251
+ }
249
252
  const currentCodeBlockState = pluginKey.getState(state);
250
253
  const currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos;
251
254
  if (!currentCodeBlockState || typeof currentPos !== 'number') {
@@ -255,10 +258,7 @@ export const createFormatCodeOnClick = ({
255
258
  if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) {
256
259
  return false;
257
260
  }
258
- const currentLanguage = currentNode.attrs.language;
259
- if (!isSupportedFormatLanguage(currentLanguage)) {
260
- return true;
261
- }
261
+ const currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : '';
262
262
  const currentLocalId = currentNode.attrs.localId;
263
263
  if (currentCodeBlockState.pendingFormats[currentLocalId]) {
264
264
  return true;
@@ -278,10 +278,14 @@ export const createFormatCodeOnClick = ({
278
278
  requestId
279
279
  }
280
280
  }));
281
- void formatCode({
281
+ void formatCodeProvider.formatCode({
282
282
  content,
283
283
  language: currentLanguage
284
- }).then(result => {
284
+ }).catch(() => ({
285
+ errorType: 'formatter-execution-failed',
286
+ language: currentLanguage,
287
+ status: 'failed'
288
+ })).then(result => {
285
289
  var _api$codeBlock, _api$codeBlock$shared, _api$core2;
286
290
  const pendingFormat = api === null || api === void 0 ? void 0 : (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 ? void 0 : (_api$codeBlock$shared = _api$codeBlock.sharedState.currentState()) === null || _api$codeBlock$shared === void 0 ? void 0 : _api$codeBlock$shared.pendingFormats[currentLocalId];
287
291
  if (!pendingFormat || pendingFormat.requestId !== requestId) {
@@ -14,7 +14,7 @@ import { changeLanguage, copyContentToClipboardWithAnalytics, createFormatCodeOn
14
14
  import { CodeBlockLanguagePicker } from '../ui/CodeBlockLanguagePicker';
15
15
  import { WrapIcon } from '../ui/icons/WrapIcon';
16
16
  import { NONE_LANGUAGE_VALUE, PLAIN_TEXT_LANGUAGE_VALUE } from '../ui/language-picker-options';
17
- import { isSupportedFormatLanguage, preloadFormatterOnIntent } from '../utils/format-code/formatter';
17
+ import { preloadFormatterOnIntent } from '../utils/format-code/formatter';
18
18
  import { autoDetectPluginKey } from './auto-detect-state';
19
19
  import { provideVisualFeedbackForCopyButton, removeVisualFeedbackForCopyButton } from './codeBlockCopySelectionPlugin';
20
20
  import { createLanguageList, DEFAULT_LANGUAGES, getLanguageIdentifier } from './language-list';
@@ -47,7 +47,7 @@ const getAutoDetectPickerValue = ({
47
47
  }
48
48
  return defaultPickerValue;
49
49
  };
50
- export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLanguageName = undefined) => {
50
+ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLanguageName = undefined, formatCodeProvider = undefined) => {
51
51
  const languageList = createLanguageList(overrideLanguageName ? DEFAULT_LANGUAGES.map(languageOption => ({
52
52
  ...languageOption,
53
53
  name: overrideLanguageName(languageOption.name)
@@ -225,7 +225,8 @@ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLang
225
225
  tabIndex: null,
226
226
  selected: areLineNumbersVisible
227
227
  };
228
- const canFormatCode = node.textContent.length > 0 && isSupportedFormatLanguage(language);
228
+ const formatLanguage = formatCodeProvider !== null && formatCodeProvider !== void 0 && formatCodeProvider.isSupportedLanguage(language) ? language : undefined;
229
+ const canFormatCode = node.textContent.length > 0 && Boolean(formatLanguage);
229
230
  const formatCodeButton = {
230
231
  id: 'editor.codeBlock.formatCode',
231
232
  type: 'button',
@@ -234,10 +235,11 @@ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLang
234
235
  icon: AngleBracketsIcon,
235
236
  onClick: createFormatCodeOnClick({
236
237
  api,
237
- editorAnalyticsAPI
238
+ editorAnalyticsAPI,
239
+ formatCodeProvider
238
240
  }),
239
- onFocus: preloadFormatterOnIntent(),
240
- onMouseEnter: preloadFormatterOnIntent(),
241
+ onFocus: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
242
+ onMouseEnter: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
241
243
  title: formatMessage(canFormatCode ? codeBlockButtonMessages.formatCode : codeBlockButtonMessages.formatCodeUnavailable)
242
244
  };
243
245
  return {
@@ -246,9 +248,7 @@ export const getToolbarConfig = (allowCopyToClipboard = false, api, overrideLang
246
248
  // eslint-disable-next-line @atlaskit/editor/no-as-casting
247
249
  getDomRef: view => findDomRefAtPos(pos, view.domAtPos.bind(view)),
248
250
  nodeType,
249
- items: [(_languagePicker = languagePicker) !== null && _languagePicker !== void 0 ? _languagePicker : languageSelect, ...(areAnyNewToolbarFlagsEnabled ? [] : [separator]), codeBlockWrapButton, ...(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton] : []),
250
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
251
- ...(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') && fg('platform_editor_code_block_formatting') ? [formatCodeButton] : []), ...copyAndDeleteButtonMenuItems],
251
+ items: [(_languagePicker = languagePicker) !== null && _languagePicker !== void 0 ? _languagePicker : languageSelect, ...(areAnyNewToolbarFlagsEnabled ? [] : [separator]), codeBlockWrapButton, ...(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton, ...(formatCodeProvider ? [formatCodeButton] : [])] : []), ...copyAndDeleteButtonMenuItems],
252
252
  scrollable: true
253
253
  };
254
254
  };
@@ -1,47 +1,9 @@
1
- const supportedFormatLanguages = ['json', 'javascript', 'jsx', 'typescript', 'tsx', 'sql'];
2
- export const isSupportedFormatLanguage = language => supportedFormatLanguages.includes(language);
3
- let formatterModulePromise;
4
- export const preloadFormatterModule = () => {
5
- if (!formatterModulePromise) {
6
- formatterModulePromise = import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-code-block-formatter" */'./formatter-impl').catch(error => {
7
- formatterModulePromise = undefined;
8
- throw error;
9
- });
10
- }
11
- return formatterModulePromise;
12
- };
13
- export const preloadFormatterOnIntent = () => (_state, dispatch) => {
14
- if (!dispatch) {
1
+ export const preloadFormatterOnIntent = (formatCodeProvider, language) => (_state, dispatch) => {
2
+ var _formatCodeProvider$p, _formatCodeProvider$p2;
3
+ if (!dispatch || !formatCodeProvider || !language) {
15
4
  // Hover/focus handlers are command-shaped; keep dry-runs side-effect free.
16
5
  return false;
17
6
  }
18
- void preloadFormatterModule();
7
+ void ((_formatCodeProvider$p = formatCodeProvider.preload) === null || _formatCodeProvider$p === void 0 ? void 0 : (_formatCodeProvider$p2 = _formatCodeProvider$p.call(formatCodeProvider, language)) === null || _formatCodeProvider$p2 === void 0 ? void 0 : _formatCodeProvider$p2.catch(() => undefined));
19
8
  return false;
20
- };
21
- export const formatCode = async ({
22
- content,
23
- language
24
- }) => {
25
- let formatterModule;
26
- try {
27
- formatterModule = await preloadFormatterModule();
28
- } catch {
29
- return {
30
- errorType: 'formatter-load-failed',
31
- language,
32
- status: 'failed'
33
- };
34
- }
35
- try {
36
- return await formatterModule.formatCode({
37
- content,
38
- language
39
- });
40
- } catch {
41
- return {
42
- errorType: 'formatter-execution-failed',
43
- language,
44
- status: 'failed'
45
- };
46
- }
47
9
  };
@@ -156,7 +156,7 @@ var codeBlockPlugin = function codeBlockPlugin(_ref) {
156
156
  }
157
157
  }];
158
158
  },
159
- floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName)
159
+ floatingToolbar: getToolbarConfig(options === null || options === void 0 ? void 0 : options.allowCopyToClipboard, api, options === null || options === void 0 ? void 0 : options.overrideLanguageName, options === null || options === void 0 ? void 0 : options.formatCodeProvider)
160
160
  },
161
161
  contentComponent: function contentComponent() {
162
162
  return expValEqualsNoExposure('platform_editor_code_block_q4_lovability', 'isEnabled', true) ? /*#__PURE__*/React.createElement(FormatCodeErrorFlag, {
@@ -18,7 +18,6 @@ import { copySelectionPluginKey } from '../pm-plugins/codeBlockCopySelectionPlug
18
18
  import { pluginKey } from '../pm-plugins/plugin-key';
19
19
  import { transformToCodeBlockAction } from '../pm-plugins/transform-to-code-block';
20
20
  import { createAutoDetectEntry, getLocalId, hasEnoughTextForAutoDetection } from '../utils/auto-detect-state';
21
- import { formatCode, isSupportedFormatLanguage } from '../utils/format-code/formatter';
22
21
  export var removeCodeBlockWithAnalytics = function removeCodeBlockWithAnalytics(editorAnalyticsAPI) {
23
22
  return withAnalytics(editorAnalyticsAPI, {
24
23
  action: ACTION.DELETED,
@@ -239,9 +238,13 @@ var createResolveFormatCodeTransaction = function createResolveFormatCodeTransac
239
238
  };
240
239
  export var createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
241
240
  var api = _ref5.api,
242
- editorAnalyticsAPI = _ref5.editorAnalyticsAPI;
241
+ editorAnalyticsAPI = _ref5.editorAnalyticsAPI,
242
+ formatCodeProvider = _ref5.formatCodeProvider;
243
243
  return function (state, dispatch) {
244
- var _autoDetectPluginKey$2, _api$core;
244
+ var _currentNode$attrs$la, _autoDetectPluginKey$2, _api$core;
245
+ if (!formatCodeProvider) {
246
+ return false;
247
+ }
245
248
  var currentCodeBlockState = pluginKey.getState(state);
246
249
  var currentPos = currentCodeBlockState === null || currentCodeBlockState === void 0 ? void 0 : currentCodeBlockState.pos;
247
250
  if (!currentCodeBlockState || typeof currentPos !== 'number') {
@@ -251,10 +254,7 @@ export var createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
251
254
  if (!currentNode || currentNode.type !== state.schema.nodes.codeBlock) {
252
255
  return false;
253
256
  }
254
- var currentLanguage = currentNode.attrs.language;
255
- if (!isSupportedFormatLanguage(currentLanguage)) {
256
- return true;
257
- }
257
+ var currentLanguage = (_currentNode$attrs$la = currentNode.attrs.language) !== null && _currentNode$attrs$la !== void 0 ? _currentNode$attrs$la : '';
258
258
  var currentLocalId = currentNode.attrs.localId;
259
259
  if (currentCodeBlockState.pendingFormats[currentLocalId]) {
260
260
  return true;
@@ -275,9 +275,15 @@ export var createFormatCodeOnClick = function createFormatCodeOnClick(_ref5) {
275
275
  }
276
276
  });
277
277
  });
278
- void formatCode({
278
+ void formatCodeProvider.formatCode({
279
279
  content: content,
280
280
  language: currentLanguage
281
+ }).catch(function () {
282
+ return {
283
+ errorType: 'formatter-execution-failed',
284
+ language: currentLanguage,
285
+ status: 'failed'
286
+ };
281
287
  }).then(function (result) {
282
288
  var _api$codeBlock, _api$core2;
283
289
  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];
@@ -18,7 +18,7 @@ import { changeLanguage, copyContentToClipboardWithAnalytics, createFormatCodeOn
18
18
  import { CodeBlockLanguagePicker } from '../ui/CodeBlockLanguagePicker';
19
19
  import { WrapIcon } from '../ui/icons/WrapIcon';
20
20
  import { NONE_LANGUAGE_VALUE, PLAIN_TEXT_LANGUAGE_VALUE } from '../ui/language-picker-options';
21
- import { isSupportedFormatLanguage, preloadFormatterOnIntent } from '../utils/format-code/formatter';
21
+ import { preloadFormatterOnIntent } from '../utils/format-code/formatter';
22
22
  import { autoDetectPluginKey } from './auto-detect-state';
23
23
  import { provideVisualFeedbackForCopyButton, removeVisualFeedbackForCopyButton } from './codeBlockCopySelectionPlugin';
24
24
  import { createLanguageList, DEFAULT_LANGUAGES, getLanguageIdentifier } from './language-list';
@@ -55,6 +55,7 @@ export var getToolbarConfig = function getToolbarConfig() {
55
55
  var allowCopyToClipboard = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
56
56
  var api = arguments.length > 1 ? arguments[1] : undefined;
57
57
  var overrideLanguageName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
58
+ var formatCodeProvider = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
58
59
  var languageList = createLanguageList(overrideLanguageName ? DEFAULT_LANGUAGES.map(function (languageOption) {
59
60
  return _objectSpread(_objectSpread({}, languageOption), {}, {
60
61
  name: overrideLanguageName(languageOption.name)
@@ -239,7 +240,8 @@ export var getToolbarConfig = function getToolbarConfig() {
239
240
  tabIndex: null,
240
241
  selected: areLineNumbersVisible
241
242
  };
242
- var canFormatCode = node.textContent.length > 0 && isSupportedFormatLanguage(language);
243
+ var formatLanguage = formatCodeProvider !== null && formatCodeProvider !== void 0 && formatCodeProvider.isSupportedLanguage(language) ? language : undefined;
244
+ var canFormatCode = node.textContent.length > 0 && Boolean(formatLanguage);
243
245
  var formatCodeButton = {
244
246
  id: 'editor.codeBlock.formatCode',
245
247
  type: 'button',
@@ -248,10 +250,11 @@ export var getToolbarConfig = function getToolbarConfig() {
248
250
  icon: AngleBracketsIcon,
249
251
  onClick: createFormatCodeOnClick({
250
252
  api: api,
251
- editorAnalyticsAPI: editorAnalyticsAPI
253
+ editorAnalyticsAPI: editorAnalyticsAPI,
254
+ formatCodeProvider: formatCodeProvider
252
255
  }),
253
- onFocus: preloadFormatterOnIntent(),
254
- onMouseEnter: preloadFormatterOnIntent(),
256
+ onFocus: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
257
+ onMouseEnter: preloadFormatterOnIntent(formatCodeProvider, formatLanguage),
255
258
  title: formatMessage(canFormatCode ? codeBlockButtonMessages.formatCode : codeBlockButtonMessages.formatCodeUnavailable)
256
259
  };
257
260
  return {
@@ -262,7 +265,7 @@ export var getToolbarConfig = function getToolbarConfig() {
262
265
  return findDomRefAtPos(pos, view.domAtPos.bind(view));
263
266
  },
264
267
  nodeType: nodeType,
265
- items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat(_toConsumableArray(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], _toConsumableArray(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton] : []), _toConsumableArray(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') && fg('platform_editor_code_block_formatting') ? [formatCodeButton] : []), _toConsumableArray(copyAndDeleteButtonMenuItems)),
268
+ items: [languagePicker !== null && languagePicker !== void 0 ? languagePicker : languageSelect].concat(_toConsumableArray(areAnyNewToolbarFlagsEnabled ? [] : [separator]), [codeBlockWrapButton], _toConsumableArray(expValEquals('platform_editor_code_block_q4_lovability', 'isEnabled', true) && fg('platform_editor_code_block_add_line_number_button') ? [codeBlockLineNumbersButton].concat(_toConsumableArray(formatCodeProvider ? [formatCodeButton] : [])) : []), _toConsumableArray(copyAndDeleteButtonMenuItems)),
266
269
  scrollable: true
267
270
  };
268
271
  };
@@ -1,75 +1,13 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- var supportedFormatLanguages = ['json', 'javascript', 'jsx', 'typescript', 'tsx', 'sql'];
4
- export var isSupportedFormatLanguage = function isSupportedFormatLanguage(language) {
5
- return supportedFormatLanguages.includes(language);
6
- };
7
- var formatterModulePromise;
8
- export var preloadFormatterModule = function preloadFormatterModule() {
9
- if (!formatterModulePromise) {
10
- formatterModulePromise = import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-code-block-formatter" */'./formatter-impl').catch(function (error) {
11
- formatterModulePromise = undefined;
12
- throw error;
13
- });
14
- }
15
- return formatterModulePromise;
16
- };
17
- export var preloadFormatterOnIntent = function preloadFormatterOnIntent() {
1
+ export var preloadFormatterOnIntent = function preloadFormatterOnIntent(formatCodeProvider, language) {
18
2
  return function (_state, dispatch) {
19
- if (!dispatch) {
3
+ var _formatCodeProvider$p;
4
+ if (!dispatch || !formatCodeProvider || !language) {
20
5
  // Hover/focus handlers are command-shaped; keep dry-runs side-effect free.
21
6
  return false;
22
7
  }
23
- void preloadFormatterModule();
8
+ void ((_formatCodeProvider$p = formatCodeProvider.preload) === null || _formatCodeProvider$p === void 0 || (_formatCodeProvider$p = _formatCodeProvider$p.call(formatCodeProvider, language)) === null || _formatCodeProvider$p === void 0 ? void 0 : _formatCodeProvider$p.catch(function () {
9
+ return undefined;
10
+ }));
24
11
  return false;
25
12
  };
26
- };
27
- export var formatCode = /*#__PURE__*/function () {
28
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
29
- var content, language, formatterModule, _t, _t2;
30
- return _regeneratorRuntime.wrap(function (_context) {
31
- while (1) switch (_context.prev = _context.next) {
32
- case 0:
33
- content = _ref.content, language = _ref.language;
34
- _context.prev = 1;
35
- _context.next = 2;
36
- return preloadFormatterModule();
37
- case 2:
38
- formatterModule = _context.sent;
39
- _context.next = 4;
40
- break;
41
- case 3:
42
- _context.prev = 3;
43
- _t = _context["catch"](1);
44
- return _context.abrupt("return", {
45
- errorType: 'formatter-load-failed',
46
- language: language,
47
- status: 'failed'
48
- });
49
- case 4:
50
- _context.prev = 4;
51
- _context.next = 5;
52
- return formatterModule.formatCode({
53
- content: content,
54
- language: language
55
- });
56
- case 5:
57
- return _context.abrupt("return", _context.sent);
58
- case 6:
59
- _context.prev = 6;
60
- _t2 = _context["catch"](4);
61
- return _context.abrupt("return", {
62
- errorType: 'formatter-execution-failed',
63
- language: language,
64
- status: 'failed'
65
- });
66
- case 7:
67
- case "end":
68
- return _context.stop();
69
- }
70
- }, _callee, null, [[1, 3], [4, 6]]);
71
- }));
72
- return function formatCode(_x) {
73
- return _ref2.apply(this, arguments);
74
- };
75
- }();
13
+ };
@@ -3,15 +3,17 @@ import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
3
3
  import type { Command, EditorCommand, ExtractInjectionAPI } from '@atlaskit/editor-common/types';
4
4
  import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
5
5
  import type { CodeBlockPlugin } from '../codeBlockPluginType';
6
+ import type { CodeBlockFormatProvider } from '../types';
6
7
  import type { LanguagePickerSelectionSource } from '../ui/language-picker-options';
7
8
  export declare const removeCodeBlockWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
8
9
  export declare const removeCodeBlock: Command;
9
10
  export declare const changeLanguage: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (language: string | null, selectionSource?: LanguagePickerSelectionSource) => Command;
10
11
  /** Queue auto-detection for selected code block. */
11
12
  export declare const detectLanguage: () => Command;
12
- export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, }: {
13
+ export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, formatCodeProvider, }: {
13
14
  api?: ExtractInjectionAPI<CodeBlockPlugin>;
14
15
  editorAnalyticsAPI: EditorAnalyticsAPI | undefined;
16
+ formatCodeProvider: CodeBlockFormatProvider | undefined;
15
17
  }) => Command;
16
18
  export declare const copyContentToClipboardWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
17
19
  export declare const copyContentToClipboard: Command;
@@ -1 +1 @@
1
- export type { CodeBlockOptions, CodeBlockPluginOptions } from '../types/index';
1
+ export type { CodeBlockFormatProvider, CodeBlockOptions, CodeBlockPluginOptions, FormatResult, } from '../types/index';
@@ -1,7 +1,8 @@
1
1
  import type { ExtractInjectionAPI, FloatingToolbarHandler, SelectOption } from '@atlaskit/editor-common/types';
2
2
  import type { CodeBlockPlugin } from '../index';
3
+ import type { CodeBlockFormatProvider } from '../types';
3
4
  import type { Language } from './language-list';
4
- export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined) => FloatingToolbarHandler;
5
+ export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined, formatCodeProvider?: CodeBlockFormatProvider | undefined) => FloatingToolbarHandler;
5
6
  /**
6
7
  * Filters language list based on both name and alias properties.
7
8
  * @param option
@@ -1,7 +1,25 @@
1
1
  import type { LongPressSelectionPluginOptions } from '@atlaskit/editor-common/types';
2
+ export type FormatResult = {
3
+ content: string;
4
+ language: string;
5
+ status: 'formatted' | 'unchanged';
6
+ } | {
7
+ errorType: 'formatter-execution-failed' | 'formatter-load-failed';
8
+ language: string;
9
+ status: 'failed';
10
+ };
11
+ export type CodeBlockFormatProvider = {
12
+ formatCode: (args: {
13
+ content: string;
14
+ language: string;
15
+ }) => Promise<FormatResult>;
16
+ isSupportedLanguage: (language: string | null | undefined) => boolean;
17
+ preload?: (language: string) => Promise<void>;
18
+ };
2
19
  export interface CodeBlockPluginOptions extends LongPressSelectionPluginOptions {
3
20
  allowCompositionInputOverride?: boolean;
4
21
  allowCopyToClipboard?: boolean;
22
+ formatCodeProvider?: CodeBlockFormatProvider;
5
23
  overrideLanguageName?: (name: string) => string;
6
24
  }
7
25
  /**
@@ -1,25 +1,5 @@
1
1
  import type { Command } from '@atlaskit/editor-common/types';
2
- declare const supportedFormatLanguages: readonly ["json", "javascript", "jsx", "typescript", "tsx", "sql"];
3
- type FormatCodeLanguage = (typeof supportedFormatLanguages)[number];
4
- export type FormatCodeResult = {
5
- content: string;
6
- language: FormatCodeLanguage;
7
- status: 'formatted' | 'unchanged';
8
- } | {
9
- errorType: 'formatter-execution-failed' | 'formatter-load-failed';
10
- language: FormatCodeLanguage;
11
- status: 'failed';
12
- };
2
+ import type { CodeBlockFormatProvider, FormatResult } from '../../types';
13
3
  export type LanguageSource = 'auto-detected' | 'selected';
14
- type FormatCode = (args: {
15
- content: string;
16
- language: FormatCodeLanguage;
17
- }) => Promise<FormatCodeResult>;
18
- type FormatterModule = {
19
- formatCode: FormatCode;
20
- };
21
- export declare const isSupportedFormatLanguage: (language: string | null | undefined) => language is FormatCodeLanguage;
22
- export declare const preloadFormatterModule: () => Promise<FormatterModule>;
23
- export declare const preloadFormatterOnIntent: () => Command;
24
- export declare const formatCode: FormatCode;
25
- export {};
4
+ export type FormatCodeResult = FormatResult;
5
+ export declare const preloadFormatterOnIntent: (formatCodeProvider: CodeBlockFormatProvider | undefined, language: string | undefined) => Command;
@@ -3,15 +3,17 @@ import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
3
3
  import type { Command, EditorCommand, ExtractInjectionAPI } from '@atlaskit/editor-common/types';
4
4
  import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
5
5
  import type { CodeBlockPlugin } from '../codeBlockPluginType';
6
+ import type { CodeBlockFormatProvider } from '../types';
6
7
  import type { LanguagePickerSelectionSource } from '../ui/language-picker-options';
7
8
  export declare const removeCodeBlockWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
8
9
  export declare const removeCodeBlock: Command;
9
10
  export declare const changeLanguage: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (language: string | null, selectionSource?: LanguagePickerSelectionSource) => Command;
10
11
  /** Queue auto-detection for selected code block. */
11
12
  export declare const detectLanguage: () => Command;
12
- export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, }: {
13
+ export declare const createFormatCodeOnClick: ({ api, editorAnalyticsAPI, formatCodeProvider, }: {
13
14
  api?: ExtractInjectionAPI<CodeBlockPlugin>;
14
15
  editorAnalyticsAPI: EditorAnalyticsAPI | undefined;
16
+ formatCodeProvider: CodeBlockFormatProvider | undefined;
15
17
  }) => Command;
16
18
  export declare const copyContentToClipboardWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => Command;
17
19
  export declare const copyContentToClipboard: Command;
@@ -1 +1 @@
1
- export type { CodeBlockOptions, CodeBlockPluginOptions } from '../types/index';
1
+ export type { CodeBlockFormatProvider, CodeBlockOptions, CodeBlockPluginOptions, FormatResult, } from '../types/index';
@@ -1,7 +1,8 @@
1
1
  import type { ExtractInjectionAPI, FloatingToolbarHandler, SelectOption } from '@atlaskit/editor-common/types';
2
2
  import type { CodeBlockPlugin } from '../index';
3
+ import type { CodeBlockFormatProvider } from '../types';
3
4
  import type { Language } from './language-list';
4
- export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined) => FloatingToolbarHandler;
5
+ export declare const getToolbarConfig: (allowCopyToClipboard: boolean | undefined, api: ExtractInjectionAPI<CodeBlockPlugin> | undefined, overrideLanguageName?: ((name: Language["name"]) => string) | undefined, formatCodeProvider?: CodeBlockFormatProvider | undefined) => FloatingToolbarHandler;
5
6
  /**
6
7
  * Filters language list based on both name and alias properties.
7
8
  * @param option
@@ -1,7 +1,25 @@
1
1
  import type { LongPressSelectionPluginOptions } from '@atlaskit/editor-common/types';
2
+ export type FormatResult = {
3
+ content: string;
4
+ language: string;
5
+ status: 'formatted' | 'unchanged';
6
+ } | {
7
+ errorType: 'formatter-execution-failed' | 'formatter-load-failed';
8
+ language: string;
9
+ status: 'failed';
10
+ };
11
+ export type CodeBlockFormatProvider = {
12
+ formatCode: (args: {
13
+ content: string;
14
+ language: string;
15
+ }) => Promise<FormatResult>;
16
+ isSupportedLanguage: (language: string | null | undefined) => boolean;
17
+ preload?: (language: string) => Promise<void>;
18
+ };
2
19
  export interface CodeBlockPluginOptions extends LongPressSelectionPluginOptions {
3
20
  allowCompositionInputOverride?: boolean;
4
21
  allowCopyToClipboard?: boolean;
22
+ formatCodeProvider?: CodeBlockFormatProvider;
5
23
  overrideLanguageName?: (name: string) => string;
6
24
  }
7
25
  /**
@@ -1,32 +1,5 @@
1
1
  import type { Command } from '@atlaskit/editor-common/types';
2
- declare const supportedFormatLanguages: readonly [
3
- "json",
4
- "javascript",
5
- "jsx",
6
- "typescript",
7
- "tsx",
8
- "sql"
9
- ];
10
- type FormatCodeLanguage = (typeof supportedFormatLanguages)[number];
11
- export type FormatCodeResult = {
12
- content: string;
13
- language: FormatCodeLanguage;
14
- status: 'formatted' | 'unchanged';
15
- } | {
16
- errorType: 'formatter-execution-failed' | 'formatter-load-failed';
17
- language: FormatCodeLanguage;
18
- status: 'failed';
19
- };
2
+ import type { CodeBlockFormatProvider, FormatResult } from '../../types';
20
3
  export type LanguageSource = 'auto-detected' | 'selected';
21
- type FormatCode = (args: {
22
- content: string;
23
- language: FormatCodeLanguage;
24
- }) => Promise<FormatCodeResult>;
25
- type FormatterModule = {
26
- formatCode: FormatCode;
27
- };
28
- export declare const isSupportedFormatLanguage: (language: string | null | undefined) => language is FormatCodeLanguage;
29
- export declare const preloadFormatterModule: () => Promise<FormatterModule>;
30
- export declare const preloadFormatterOnIntent: () => Command;
31
- export declare const formatCode: FormatCode;
32
- export {};
4
+ export type FormatCodeResult = FormatResult;
5
+ export declare const preloadFormatterOnIntent: (formatCodeProvider: CodeBlockFormatProvider | undefined, language: string | undefined) => Command;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-code-block",
3
- "version": "13.1.12",
3
+ "version": "13.1.13",
4
4
  "description": "Code block plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -111,9 +111,6 @@
111
111
  "platform_editor_code_block_add_line_number_button": {
112
112
  "type": "boolean"
113
113
  },
114
- "platform_editor_code_block_formatting": {
115
- "type": "boolean"
116
- },
117
114
  "platform_editor_code_block_language_detection_flow": {
118
115
  "type": "boolean"
119
116
  }
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.formatCode = void 0;
7
- var formatCode = exports.formatCode = function formatCode(_ref) {
8
- var content = _ref.content,
9
- language = _ref.language;
10
- return Promise.resolve({
11
- content: content,
12
- language: language,
13
- status: 'unchanged'
14
- });
15
- };
@@ -1,10 +0,0 @@
1
- export const formatCode = ({
2
- content,
3
- language
4
- }) => {
5
- return Promise.resolve({
6
- content,
7
- language,
8
- status: 'unchanged'
9
- });
10
- };
@@ -1,9 +0,0 @@
1
- export var formatCode = function formatCode(_ref) {
2
- var content = _ref.content,
3
- language = _ref.language;
4
- return Promise.resolve({
5
- content: content,
6
- language: language,
7
- status: 'unchanged'
8
- });
9
- };
@@ -1,5 +0,0 @@
1
- import type { FormatCodeResult } from './formatter';
2
- export declare const formatCode: ({ content, language, }: {
3
- content: string;
4
- language: FormatCodeResult["language"];
5
- }) => Promise<FormatCodeResult>;
@@ -1,5 +0,0 @@
1
- import type { FormatCodeResult } from './formatter';
2
- export declare const formatCode: ({ content, language, }: {
3
- content: string;
4
- language: FormatCodeResult["language"];
5
- }) => Promise<FormatCodeResult>;