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;
 | |
| }
 |