lexical-code-no-prism
v0.41.0
Published
Fork of @lexical/code with Prism.js syntax highlighting removed. Drop-in replacement for @lexical/code.
Readme
@lexical/code (No Prism)
Drop-in replacement for @lexical/code with Prism.js removed.
What's preserved
CodeNode,CodeHighlightNode,CodeExtension- Keyboard handlers (Tab/Shift+Tab, Alt+Arrow line movement, Home/End)
- Gutter line numbers
- DOM import/export (including GitHub code tables)
- Language metadata and maps
- Full API surface — identical exports to upstream
@lexical/code
What's removed
prismjsdependency (0 bytes of Prism in your bundle)- Syntax highlighting / tokenization (code renders as plain text)
Merge strategy
Only FacadePrism.ts differs from upstream. All other source files (index.ts, CodeNode.ts, CodeHighlightNode.ts, CodeExtension.ts, CodeHighlighterPrism.ts, FlatStructureUtils.ts) are byte-identical to upstream @lexical/code.
When upstream updates, merge conflicts are isolated to FacadePrism.ts only.
Additional fork-only files:
src/shared/invariant.ts— shim for monorepo-internalshared/invarianttsconfig.json—pathsaliases forshared/invariantand@lexical/codetsup.config.ts— esbuild alias forshared/invariant
Usage
Override @lexical/code in your package manager:
pnpm
{
"pnpm": {
"overrides": {
"@lexical/code": "npm:@anthropic/lexical-code-no-prism@^0.41.0"
}
}
}npm
{
"overrides": {
"@lexical/code": "npm:@anthropic/lexical-code-no-prism@^0.41.0"
}
}yarn
{
"resolutions": {
"@lexical/code": "npm:@anthropic/lexical-code-no-prism@^0.41.0"
}
}Custom Tokenizer
You can provide your own tokenizer (e.g., Shiki) via the Tokenizer interface:
import { registerCodeHighlighting, type Tokenizer } from '@lexical/code';
const myTokenizer: Tokenizer = {
defaultLanguage: 'javascript',
tokenize(code, language) { /* return tokens */ },
$tokenize(codeNode, language) { /* return LexicalNode[] */ },
};
registerCodeHighlighting(editor, myTokenizer);License
MIT (forked from facebook/lexical)
