Some checks failed
Verify / Install node dependencies (push) Failing after 2s
Verify / Build packages (push) Has been skipped
Verify / Check linting & formatting (push) Has been skipped
Verify / Run unit tests (push) Has been skipped
Verify / Run e2e tests (shard 1/4) (push) Has been skipped
Verify / Run e2e tests (shard 2/4) (push) Has been skipped
Verify / Run e2e tests (shard 3/4) (push) Has been skipped
Verify / Run e2e tests (shard 4/4) (push) Has been skipped
Publish / Resolve publish config (push) Failing after 2s
Publish / Send notification to Slack (push) Has been skipped
Publish / Send failure notification to Slack (push) Failing after 8s
Verify / Merge e2e reports (push) Has been skipped
Publish / Build (push) Has been skipped
Publish / Bump Versions OR Release to Registry (push) Has been skipped
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { type Extensions, type JSONContent, getSchema } from '@tiptap/core'
|
|
import { Node as PMNode } from '@tiptap/pm/model'
|
|
|
|
import { getHTMLFromFragment } from './getHTMLFromFragment.js'
|
|
|
|
/**
|
|
* This function generates HTML from a ProseMirror JSON content object.
|
|
*
|
|
* @remarks **Important**: This function requires `happy-dom` to be installed in your project.
|
|
* @param doc - The ProseMirror JSON content object.
|
|
* @param extensions - The Tiptap extensions used to build the schema.
|
|
* @returns The generated HTML string.
|
|
* @example
|
|
* ```js
|
|
* const html = generateHTML(doc, extensions)
|
|
* console.log(html)
|
|
* ```
|
|
*/
|
|
export function generateHTML(doc: JSONContent, extensions: Extensions): string {
|
|
// Use positive Node.js detection to allow for jsdom/happy-dom environments in tests
|
|
const isNode =
|
|
typeof process !== 'undefined' && process.versions != null && process.versions.node != null
|
|
|
|
if (!isNode) {
|
|
throw new Error(
|
|
'generateHTML can only be used in a Node environment\nIf you want to use this in a browser environment, use the `@tiptap/html` import instead.',
|
|
)
|
|
}
|
|
|
|
const schema = getSchema(extensions)
|
|
const contentNode = PMNode.fromJSON(schema, doc)
|
|
|
|
return getHTMLFromFragment(contentNode, schema)
|
|
}
|