mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-12-14 07:07:21 +08:00
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
|
/**
|
||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
import type {CreateEditorArgs, LexicalEditor} from 'lexical';
|
||
|
|
||
|
import {createEditor} from 'lexical';
|
||
|
|
||
|
/**
|
||
|
* Generates a headless editor that allows lexical to be used without the need for a DOM, eg in Node.js.
|
||
|
* Throws an error when unsupported methods are used.
|
||
|
* @param editorConfig - The optional lexical editor configuration.
|
||
|
* @returns - The configured headless editor.
|
||
|
*/
|
||
|
export function createHeadlessEditor(
|
||
|
editorConfig?: CreateEditorArgs,
|
||
|
): LexicalEditor {
|
||
|
const editor = createEditor(editorConfig);
|
||
|
editor._headless = true;
|
||
|
|
||
|
const unsupportedMethods = [
|
||
|
'registerDecoratorListener',
|
||
|
'registerRootListener',
|
||
|
'registerMutationListener',
|
||
|
'getRootElement',
|
||
|
'setRootElement',
|
||
|
'getElementByKey',
|
||
|
'focus',
|
||
|
'blur',
|
||
|
] as const;
|
||
|
|
||
|
unsupportedMethods.forEach((method: typeof unsupportedMethods[number]) => {
|
||
|
editor[method] = () => {
|
||
|
throw new Error(`${method} is not supported in headless mode`);
|
||
|
};
|
||
|
});
|
||
|
|
||
|
return editor;
|
||
|
}
|