@blocknote/server-util
Version:
A "Notion-style" block-based extensible text editor built on top of Prosemirror and Tiptap.
3 lines (2 loc) • 3.08 kB
JavaScript
"use strict";var d=Object.defineProperty;var m=(e,o,r)=>o in e?d(e,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[o]=r;var n=(e,o,r)=>m(e,typeof o!="symbol"?o+"":o,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("@blocknote/core"),u=require("@blocknote/react"),h=require("jsdom"),a=require("react"),T=require("react-dom"),p=require("react-dom/client"),c=require("y-prosemirror");function w(e){if(e&&typeof e=="object"&&"default"in e)return e;const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(o,r,t.get?t:{enumerable:!0,get:()=>e[r]})}}return o.default=e,Object.freeze(o)}const y=w(h);class i{constructor(o){n(this,"editor");n(this,"jsdom",new y.JSDOM);this.editor=s.BlockNoteEditor.create(o)}async _withJSDOM(o){const r=globalThis.window,t=globalThis.document;globalThis.document=this.jsdom.window.document,globalThis.window=this.jsdom.window,globalThis.window.__TEST_OPTIONS=r==null?void 0:r.__TEST_OPTIONS;try{return await o()}finally{globalThis.document=t,globalThis.window=r}}static create(o={}){return new i(o)}_prosemirrorNodeToBlocks(o){const r=[];return o.firstChild.descendants(t=>(r.push(s.nodeToBlock(t,this.editor.pmSchema)),!1)),r}_prosemirrorJSONToBlocks(o){const r=this.editor.pmSchema.nodeFromJSON(o);return this._prosemirrorNodeToBlocks(r)}_blocksToProsemirrorNode(o){const r=this.editor.pmSchema,t=o.map(l=>s.blockToNode(l,r));return r.topNodeType.create(null,r.nodes.blockGroup.create(null,t))}yXmlFragmentToBlocks(o){const r=c.yXmlFragmentToProseMirrorRootNode(o,this.editor.pmSchema);return this._prosemirrorNodeToBlocks(r)}blocksToYXmlFragment(o,r){return c.prosemirrorToYXmlFragment(this._blocksToProsemirrorNode(o),r)}yDocToBlocks(o,r="prosemirror"){return this.yXmlFragmentToBlocks(o.getXmlFragment(r))}blocksToYDoc(o,r="prosemirror"){return c.prosemirrorToYDoc(this._blocksToProsemirrorNode(o),r)}async blocksToHTMLLossy(o){return this._withJSDOM(async()=>s.createExternalHTMLExporter(this.editor.pmSchema,this.editor).exportBlocks(o,{document:this.jsdom.window.document}))}async blocksToFullHTML(o){return this._withJSDOM(async()=>s.createInternalHTMLSerializer(this.editor.pmSchema,this.editor).serializeBlocks(o,{document:this.jsdom.window.document}))}async tryParseHTMLToBlocks(o){return this._withJSDOM(async()=>this.editor.tryParseHTMLToBlocks(o))}async blocksToMarkdownLossy(o){return this._withJSDOM(async()=>s.blocksToMarkdown(o,this.editor.pmSchema,this.editor,{document:this.jsdom.window.document}))}async tryParseMarkdownToBlocks(o){return this._withJSDOM(()=>this.editor.tryParseMarkdownToBlocks(o))}async withReactContext(o,r){return this._withJSDOM(async()=>{const t=p.createRoot(this.jsdom.window.document.createElement("div"));T.flushSync(()=>{t.render(a.createElement(o,{},a.createElement(u.BlockNoteViewRaw,{editor:this.editor})))});try{return await r()}finally{t.unmount()}})}}exports.ServerBlockNoteEditor=i;
//# sourceMappingURL=blocknote-server-util.cjs.map