mirror of
https://github.com/ueberdosis/tiptap.git
synced 2025-06-11 20:08:59 +08:00

* chore:(core): migrate to tsup * chore: migrate blockquote and bold to tsup * chore: migrated bubble-menu and bullet-list to tsup * chore: migrated more packages to tsup * chore: migrate code and character extensions to tsup * chore: update package.json to simplify build for all packages * chore: move all packages to tsup as a build process * chore: change ci build task * feat(pm): add prosemirror meta package * rfix: resolve issues with build paths & export mappings * docs: update documentation to include notes for @tiptap/pm * chore(pm): update tsconfig * chore(packages): update packages * fix(pm): add package export infos & fix dependencies * chore(general): start moving to pm package as deps * chore: move to tiptap pm package internally * fix(demos): fix demos working with new pm package * fix(tables): fix tables package * fix(tables): fix tables package * chore(demos): pinned typescript version * chore: remove unnecessary tsconfig * chore: fix netlify build * fix(demos): fix package resolving for pm packages * fix(tests): fix package resolving for pm packages * fix(tests): fix package resolving for pm packages * chore(tests): fix tests not running correctly after pm package * chore(pm): add files to files array * chore: update build workflow * chore(tests): increase timeout time back to 12s * chore(docs): update docs * chore(docs): update installation guides & pm information to docs * chore(docs): add link to prosemirror docs * fix(vue-3): add missing build step * chore(docs): comment out cdn link * chore(docs): remove semicolons from docs * chore(docs): remove unnecessary installation note * chore(docs): remove unnecessary installation note
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
import {
|
|
DOMParser,
|
|
Fragment,
|
|
Node as ProseMirrorNode,
|
|
ParseOptions,
|
|
Schema,
|
|
} from '@tiptap/pm/model'
|
|
|
|
import { Content } from '../types'
|
|
import { elementFromString } from '../utilities/elementFromString'
|
|
|
|
export type CreateNodeFromContentOptions = {
|
|
slice?: boolean
|
|
parseOptions?: ParseOptions
|
|
}
|
|
|
|
export function createNodeFromContent(
|
|
content: Content,
|
|
schema: Schema,
|
|
options?: CreateNodeFromContentOptions,
|
|
): ProseMirrorNode | Fragment {
|
|
options = {
|
|
slice: true,
|
|
parseOptions: {},
|
|
...options,
|
|
}
|
|
|
|
if (typeof content === 'object' && content !== null) {
|
|
try {
|
|
if (Array.isArray(content)) {
|
|
return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)))
|
|
}
|
|
|
|
return schema.nodeFromJSON(content)
|
|
} catch (error) {
|
|
console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error)
|
|
|
|
return createNodeFromContent('', schema, options)
|
|
}
|
|
}
|
|
|
|
if (typeof content === 'string') {
|
|
const parser = DOMParser.fromSchema(schema)
|
|
|
|
return options.slice
|
|
? parser.parseSlice(elementFromString(content), options.parseOptions).content
|
|
: parser.parse(elementFromString(content), options.parseOptions)
|
|
}
|
|
|
|
return createNodeFromContent('', schema, options)
|
|
}
|