feat: refactor markup to markdown utils (#8134)

Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com>
This commit is contained in:
Alexander Onnikov
2025-03-05 12:18:49 +07:00
committed by GitHub
parent c0aabddaac
commit b96283ffc6
70 changed files with 2933 additions and 1514 deletions
@@ -19,10 +19,10 @@ import {
MarkupNode,
MarkupNodeType,
jsonToMarkup,
MarkdownState,
traverseAllMarks,
traverseMarkupNode
traverseNode
} from '@hcengineering/text'
import { MarkdownState } from '@hcengineering/text-markdown'
import { markdownToMarkup, markupToMarkdown, parseMessageMarkdown, serializeMessage } from '..'
describe('server', () => {
@@ -788,8 +788,9 @@ A list of closed updated issues`
const msg = parseMessageMarkdown(t1, 'ref://', 'http://', 'http://')
const nodes = []
traverseMarkupNode(msg, (node) => {
traverseNode(msg, (node) => {
nodes.push(node)
return true
})
expect(nodes.length).toEqual(5)
const marks = []
@@ -13,15 +13,8 @@
// limitations under the License.
//
import {
MarkupNode,
jsonToMarkup,
markupToJSON,
MarkdownParser,
storeNodes,
storeMarks,
MarkdownState
} from '@hcengineering/text'
import { MarkupNode, jsonToMarkup, markupToJSON, htmlToJSON } from '@hcengineering/text'
import { MarkdownParser, storeNodes, storeMarks, MarkdownState } from '@hcengineering/text-markdown'
import { GithubKit } from './extensions'
import { hasHulyLink, hasHulyLinkText } from '../sync/guest'
@@ -42,8 +35,12 @@ export function parseMessageMarkdown (
}
})
]
const parser = new MarkdownParser(extensions, refUrl, imageUrl)
return parser.parse(message ?? '')
const htmlParser = (html: string): MarkupNode => {
return htmlToJSON(html, extensions)
}
const parser = new MarkdownParser({ refUrl, imageUrl, htmlParser })
const json = parser.parse(message ?? '')
return json
}
/**
+9 -5
View File
@@ -3,7 +3,7 @@
//
import { Branding, generateUuid, PersonUuid, TxOperations, WorkspaceIds, WorkspaceUuid } from '@hcengineering/core'
import { MarkupMarkType, MarkupNode, MarkupNodeType, traverseMarkupNode } from '@hcengineering/text'
import { MarkupMarkType, MarkupNode, MarkupNodeType, traverseNode } from '@hcengineering/text'
import { getPublicLink } from '@hcengineering/server-guest-resources'
import { Task } from '@hcengineering/task'
import { generateToken } from '@hcengineering/server-token'
@@ -23,9 +23,9 @@ export function hasHulyLink (href: string, guestLink: string): boolean {
export async function stripGuestLink (markdown: MarkupNode): Promise<void> {
const toRemove: MarkupNode[] = []
traverseMarkupNode(markdown, (node) => {
traverseNode(markdown, (node) => {
if (node.content === undefined) {
return
return false
}
const oldLength = node.content.length
node.content = node.content.filter((it) => it.type !== MarkupNodeType.subLink)
@@ -35,14 +35,18 @@ export async function stripGuestLink (markdown: MarkupNode): Promise<void> {
if (node.content.length !== oldLength && node.type === MarkupNodeType.paragraph) {
toRemove.push(node)
}
return true
})
// traverse nodes once again and remove empty parent node
traverseMarkupNode(markdown, (node) => {
traverseNode(markdown, (node) => {
if (node.content === undefined) {
return
return false
}
node.content = node.content.filter((it) => !toRemove.includes(it))
return true
})
}
export async function appendGuestLink (
+2 -1
View File
@@ -55,7 +55,8 @@ import { LiveQuery } from '@hcengineering/query'
import { StorageAdapter } from '@hcengineering/server-core'
import { getPublicLinkUrl } from '@hcengineering/server-guest-resources'
import task, { ProjectType, TaskType } from '@hcengineering/task'
import { MarkupNode, isMarkdownsEquals, jsonToMarkup } from '@hcengineering/text'
import { MarkupNode, jsonToMarkup } from '@hcengineering/text'
import { isMarkdownsEquals } from '@hcengineering/text-markdown'
import tracker from '@hcengineering/tracker'
import { User } from '@octokit/webhooks-types'
import { App, Octokit } from 'octokit'