@hcengineering/text-markdown 0.7.17 → 0.7.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__tests__/markdown.test.js +125 -3
- package/lib/__tests__/markdown.test.js.map +2 -2
- package/lib/parser.js +23 -8
- package/lib/parser.js.map +2 -2
- package/lib/serializer.js +40 -0
- package/lib/serializer.js.map +2 -2
- package/package.json +3 -3
- package/src/__tests__/markdown.test.ts +125 -4
- package/src/parser.ts +31 -14
- package/src/serializer.ts +43 -0
- package/types/parser.d.ts.map +1 -1
- package/types/serializer.d.ts.map +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
+
var import_text_core = require("@hcengineering/text-core");
|
|
4
5
|
var import__ = require("..");
|
|
5
6
|
var import_compare = require("../compare");
|
|
6
7
|
const refUrl = "ref://";
|
|
@@ -889,6 +890,25 @@ Lorem ipsum dolor sit amet.
|
|
|
889
890
|
}
|
|
890
891
|
]
|
|
891
892
|
}
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
name: "textColor",
|
|
896
|
+
markdown: '<span style="color: #abcdef" data-color="#abcdef">colored</span>',
|
|
897
|
+
markup: {
|
|
898
|
+
type: import_text_core.MarkupNodeType.doc,
|
|
899
|
+
content: [
|
|
900
|
+
{
|
|
901
|
+
type: import_text_core.MarkupNodeType.paragraph,
|
|
902
|
+
content: [
|
|
903
|
+
{
|
|
904
|
+
type: import_text_core.MarkupNodeType.text,
|
|
905
|
+
text: "colored",
|
|
906
|
+
marks: [{ type: "textColor", attrs: { color: "#abcdef" } }]
|
|
907
|
+
}
|
|
908
|
+
]
|
|
909
|
+
}
|
|
910
|
+
]
|
|
911
|
+
}
|
|
892
912
|
}
|
|
893
913
|
];
|
|
894
914
|
describe("to markup", () => {
|
|
@@ -899,11 +919,10 @@ Lorem ipsum dolor sit amet.
|
|
|
899
919
|
});
|
|
900
920
|
});
|
|
901
921
|
});
|
|
902
|
-
describe("to
|
|
922
|
+
describe("to markdown", () => {
|
|
903
923
|
tests.forEach(({ name, markdown, markup }) => {
|
|
904
924
|
it(name, () => {
|
|
905
|
-
const
|
|
906
|
-
const serialized = (0, import__.markupToMarkdown)(json, options);
|
|
925
|
+
const serialized = (0, import__.markupToMarkdown)(markup, options);
|
|
907
926
|
expect(serialized).toEqualMarkdown(markdown);
|
|
908
927
|
});
|
|
909
928
|
});
|
|
@@ -953,6 +972,109 @@ describe("markupToMarkdown", () => {
|
|
|
953
972
|
}
|
|
954
973
|
]
|
|
955
974
|
}
|
|
975
|
+
},
|
|
976
|
+
{
|
|
977
|
+
name: "textColor",
|
|
978
|
+
markdown: '<span style="color: #abcdef" data-color="#abcdef">colored</span>',
|
|
979
|
+
markup: {
|
|
980
|
+
type: import_text_core.MarkupNodeType.doc,
|
|
981
|
+
content: [
|
|
982
|
+
{
|
|
983
|
+
type: import_text_core.MarkupNodeType.paragraph,
|
|
984
|
+
content: [
|
|
985
|
+
{
|
|
986
|
+
type: import_text_core.MarkupNodeType.text,
|
|
987
|
+
text: "colored",
|
|
988
|
+
marks: [{ type: "textColor", attrs: { color: "#abcdef" } }]
|
|
989
|
+
}
|
|
990
|
+
]
|
|
991
|
+
}
|
|
992
|
+
]
|
|
993
|
+
}
|
|
994
|
+
},
|
|
995
|
+
{
|
|
996
|
+
name: "textColor + italic",
|
|
997
|
+
markdown: '<span style="color: #abcdef" data-color="#abcdef">*styled*</span>',
|
|
998
|
+
markup: {
|
|
999
|
+
type: import_text_core.MarkupNodeType.doc,
|
|
1000
|
+
content: [
|
|
1001
|
+
{
|
|
1002
|
+
type: import_text_core.MarkupNodeType.paragraph,
|
|
1003
|
+
content: [
|
|
1004
|
+
{
|
|
1005
|
+
type: import_text_core.MarkupNodeType.text,
|
|
1006
|
+
text: "styled",
|
|
1007
|
+
marks: [
|
|
1008
|
+
{ type: "textColor", attrs: { color: "#abcdef" } },
|
|
1009
|
+
{ type: import_text_core.MarkupMarkType.em }
|
|
1010
|
+
]
|
|
1011
|
+
}
|
|
1012
|
+
]
|
|
1013
|
+
}
|
|
1014
|
+
]
|
|
1015
|
+
}
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
name: "textStyle with font-family",
|
|
1019
|
+
markdown: '<span style="font-family: Arial">arial</span>',
|
|
1020
|
+
markup: {
|
|
1021
|
+
type: import_text_core.MarkupNodeType.doc,
|
|
1022
|
+
content: [
|
|
1023
|
+
{
|
|
1024
|
+
type: import_text_core.MarkupNodeType.paragraph,
|
|
1025
|
+
content: [
|
|
1026
|
+
{
|
|
1027
|
+
type: import_text_core.MarkupNodeType.text,
|
|
1028
|
+
text: "arial",
|
|
1029
|
+
marks: [{ type: import_text_core.MarkupMarkType.textStyle, attrs: { fontFamily: "Arial" } }]
|
|
1030
|
+
}
|
|
1031
|
+
]
|
|
1032
|
+
}
|
|
1033
|
+
]
|
|
1034
|
+
}
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
name: "textStyle with multiple properties",
|
|
1038
|
+
markdown: '<span style="font-family: Arial; font-size: 16px; font-weight: bold">styled</span>',
|
|
1039
|
+
markup: {
|
|
1040
|
+
type: import_text_core.MarkupNodeType.doc,
|
|
1041
|
+
content: [
|
|
1042
|
+
{
|
|
1043
|
+
type: import_text_core.MarkupNodeType.paragraph,
|
|
1044
|
+
content: [
|
|
1045
|
+
{
|
|
1046
|
+
type: import_text_core.MarkupNodeType.text,
|
|
1047
|
+
text: "styled",
|
|
1048
|
+
marks: [
|
|
1049
|
+
{
|
|
1050
|
+
type: import_text_core.MarkupMarkType.textStyle,
|
|
1051
|
+
attrs: { fontFamily: "Arial", fontSize: "16px", fontWeight: "bold" }
|
|
1052
|
+
}
|
|
1053
|
+
]
|
|
1054
|
+
}
|
|
1055
|
+
]
|
|
1056
|
+
}
|
|
1057
|
+
]
|
|
1058
|
+
}
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
name: "textStyle with color (no data-color)",
|
|
1062
|
+
markdown: '<span style="color: red">red</span>',
|
|
1063
|
+
markup: {
|
|
1064
|
+
type: import_text_core.MarkupNodeType.doc,
|
|
1065
|
+
content: [
|
|
1066
|
+
{
|
|
1067
|
+
type: import_text_core.MarkupNodeType.paragraph,
|
|
1068
|
+
content: [
|
|
1069
|
+
{
|
|
1070
|
+
type: import_text_core.MarkupNodeType.text,
|
|
1071
|
+
text: "red",
|
|
1072
|
+
marks: [{ type: import_text_core.MarkupMarkType.textStyle, attrs: { color: "red" } }]
|
|
1073
|
+
}
|
|
1074
|
+
]
|
|
1075
|
+
}
|
|
1076
|
+
]
|
|
1077
|
+
}
|
|
956
1078
|
}
|
|
957
1079
|
];
|
|
958
1080
|
describe("to markdown", () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/__tests__/markdown.test.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright \u00A9 2025 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport { MarkupNode } from '@hcengineering/text-core'\nimport { markdownToMarkup, markupToMarkdown } from '..'\nimport { isMarkdownsEquals } from '../compare'\n\nconst refUrl: string = 'ref://'\nconst imageUrl: string = 'http://localhost'\nconst options = { refUrl, imageUrl }\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n interface Matchers<R> {\n toEqualMarkdown: (expected: string) => R\n }\n }\n}\n\nexpect.extend({\n toEqualMarkdown (received: string, expected: string) {\n const pass = isMarkdownsEquals(received, expected)\n return {\n message: () =>\n pass\n ? `Expected markdown strings NOT to be equal:\\n Received:\\n${received}\\n Expected:\\n${expected}`\n : `Expected markdown strings to be equal:\\n Received:\\n${received}\\n Expected:\\n${expected}`,\n pass\n }\n }\n})\n\ndescribe('markdownToMarkup', () => {\n const tests: Array<{ name: string, markdown: string, markup: object }> = [\n {\n name: 'simple text',\n markdown: 'Lorem ipsum dolor sit amet.',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Lorem ipsum dolor sit amet.',\n marks: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'text with heading',\n markdown: `# Lorem ipsum\n\nLorem ipsum dolor sit amet.\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'Lorem ipsum',\n marks: []\n }\n ]\n },\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Lorem ipsum dolor sit amet.',\n marks: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'bullet list',\n markdown: `# bullet list\n- list item 1\n- list item 2\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'bullet list',\n marks: []\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'todos',\n markdown: `# TODO\n- [ ] todo 1\n- [x] todo 2\n `,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'TODO',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'todos followed by list items',\n markdown: `# todo and list\n- [ ] todo 1\n- [x] todo 2\n- list item 1\n- list item 2\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'todo and list',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'todos followed by list items',\n markdown: `# mixed lists\n- [ ] todo 1\n- list item 1\n- [x] todo 2\n- list item 2\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'mixed lists',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 1',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 1',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'nested todos',\n markdown: `# nested todos\n- [ ] todo\n - [x] sub todo\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'nested todos',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'nested lists',\n markdown: `# nested lists\n- [ ] todo\n - sub list item\n - [x] sub todo\n- list item\n - [x] sub todo\n - sub list item\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'nested lists',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo',\n marks: []\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub list item',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub list item',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'nested todos',\n markdown: `# nested todos\n- [ ] todo\n - [x] sub todo\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'nested todos',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'mermaid diagram',\n markdown: '```mermaid\\ngraph TD;\\n\\tA-->B;\\n\\tA-->C;\\n\\tB-->D;\\n\\tC-->D;\\n```',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'mermaid',\n attrs: {\n language: 'mermaid'\n },\n content: [\n {\n marks: [],\n text: 'graph TD;\\n\\tA-->B;\\n\\tA-->C;\\n\\tB-->D;\\n\\tC-->D;',\n type: 'text'\n }\n ]\n }\n ]\n }\n },\n {\n name: 'embed',\n markdown: '<a href=\"http://localhost/embed\" data-type=\"embed\">http://localhost/embed</a>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'embed',\n attrs: { src: 'http://localhost/embed' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'embed-uri-escape',\n markdown:\n '<a href=\"http://localhost/embed%20spaces\" data-type=\"embed\">http://localhost/embed spaces</a>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'embed',\n attrs: { src: 'http://localhost/embed spaces' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'embed-html-escape',\n markdown:\n '<a href=\"http://localhost/embed%3Chtml%3E\" data-type=\"embed\">http://localhost/embed<html></a>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'embed',\n attrs: { src: 'http://localhost/embed<html>' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'multiline image alt',\n markdown: '',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'image',\n attrs: { src: 'http://example.com/image.png', alt: 'line0\\n\\nline1' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'image in a table cell',\n markdown:\n '<table><tbody><tr><td><p>Some text</p><p> <img src=\"files/image_1.png\" alt=\"image-alt\"/></p></td></tr></tbody></table>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'table',\n content: [\n {\n type: 'tableRow',\n content: [\n {\n type: 'tableCell',\n attrs: {\n colspan: undefined,\n rowspan: undefined,\n colwidth: undefined\n },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Some text'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n textAlign: null\n },\n content: [\n {\n type: 'text',\n text: ' '\n },\n {\n type: 'image',\n attrs: {\n src: 'files/image_1.png',\n alt: 'image-alt',\n 'file-id': null,\n title: null\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n }\n ]\n\n describe('to markup', () => {\n tests.forEach(({ name, markdown, markup }) => {\n it(name, () => {\n const parsed = markdownToMarkup(markdown, options)\n expect(parsed).toEqual(markup)\n })\n })\n })\n\n describe('to markup and back', () => {\n tests.forEach(({ name, markdown, markup }) => {\n it(name, () => {\n const json = markdownToMarkup(markdown, options)\n const serialized = markupToMarkdown(json, options)\n expect(serialized).toEqualMarkdown(markdown)\n })\n })\n })\n})\n\ndescribe('markupToMarkdown', () => {\n const tests: Array<{ name: string, markdown: string, markup: object }> = [\n {\n name: 'links',\n markdown: `[Link](https://example.com)\n\n[Link with spaces](<https://example.com/with spaces>)\n\n[Link with spaces and braces](<https://example.com/\\\\<with spaces\\\\>>)`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Link',\n marks: [{ type: 'link', attrs: { href: 'https://example.com' } }]\n }\n ]\n },\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Link with spaces',\n marks: [{ type: 'link', attrs: { href: 'https://example.com/with spaces' } }]\n }\n ]\n },\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Link with spaces and braces',\n marks: [{ type: 'link', attrs: { href: 'https://example.com/<with spaces>' } }]\n }\n ]\n }\n ]\n }\n }\n ]\n\n describe('to markdown', () => {\n tests.forEach(({ name, markdown, markup }) => {\n it(name, () => {\n const result = markupToMarkdown(markup as MarkupNode, options)\n expect(result).toEqual(markdown)\n })\n })\n })\n})\n\ndescribe('markdownToMarkup -> markupToMarkdown', () => {\n const tests: Array<{ name: string, markdown: string, alternate?: string }> = [\n { name: 'Italic', markdown: '*Asteriscs* and _Underscores_' },\n { name: 'Bold', markdown: '**Asteriscs** and __Underscores__' },\n { name: 'Bullet list with asteriscs', markdown: 'Asterisks :\\r\\n* Firstly\\r\\n* Secondly' },\n { name: 'Bullet list with dashes', markdown: 'Dashes :\\r\\n- Firstly\\r\\n- Secondly' },\n { name: 'TODO list with asteriscs', markdown: '* [ ] Take\\n* [ ] Do\\n\\n' },\n { name: 'TODO list with dashes', markdown: '- [x] Take\\n- [ ] Do\\n\\n' },\n {\n name: 'Different markers',\n markdown:\n 'Asterisks bulleted list:\\r\\n* Asterisks: *Italic* and **Bold*** Underscores: _Italic_ and __Bold__\\r\\n\\r\\nDash bulleted list:\\r\\n- Asterisks: *Italic* and **Bold**\\r\\n- Underscores: _Italic_ and __Bold__\\r\\n-'\n },\n { name: 'Single line comment', markdown: '<!-- Do not erase me -->' },\n {\n name: 'Multsiline comment',\n markdown:\n '\"<!--\\r\\n\\r\\nPlease title your PR as follows: `module: description` (e.g. `time: fix date format`).\\r\\nAlways start with the thing you are fixing, then describe the fix.\\r\\nDon\\'t use past tense (e.g. \"fixed foo bar\").\\r\\n\\r\\nExplain what your PR does and why.\\r\\n\\r\\nIf you are adding a new function, please document it and add tests:\\r\\n\\r\\n```\\r\\n// foo does foo and bar\\r\\nfn foo() {\\r\\n\\r\\n// file_test.v\\r\\nfn test_foo() {\\r\\n assert foo() == ...\\r\\n ...\\r\\n}\\r\\n```\\r\\n\\r\\nIf you are fixing a bug, please add a test that covers it.\\r\\n\\r\\nBefore submitting a PR, please run `v test-all` .\\r\\nSee also `TESTS.md`.\\r\\n\\r\\nI try to process PRs as soon as possible. They should be handled within 24 hours.\\r\\n\\r\\nApplying labels to PRs is not needed.\\r\\n\\r\\nThanks a lot for your contribution!\\r\\n\\r\\n-->\\r\\n\\r\\nThis PR fix issue #22424\\r\\n\\r\\n\\r\\n\"'\n },\n {\n name: 'Link',\n markdown: 'See [link](https://example.com)'\n },\n {\n name: 'Link with spaces',\n markdown: 'See [link](<https://example.com/with spaces>)',\n alternate: 'See [link](https://example.com/with%20spaces)'\n },\n {\n name: 'Link with spaces and braces',\n markdown: 'See [link](<https://example.com/\\\\<with spaces\\\\>>)',\n alternate: 'See [link](https://example.com/%3Cwith%20spaces%3E)'\n },\n {\n name: 'Codeblock',\n markdown: '```typescript\\nconst x: number = 42;\\n```'\n },\n {\n name: 'Image',\n markdown: '<img width=\"320\" height=\"160\" src=\"http://example.com/image\" alt=\"image\">'\n },\n {\n name: 'Images',\n markdown: `\n<img width=\"250\" height=\"330\" src=\"https://github.com/user-attachments/assets/f348e016-3f7d-45b1-b8a0-9098e9961885\" alt=\"Screenshot 2025-09-11 at 15 42 40\" />\n\n<img width=\"250\" height=\"230\" alt=\"Screenshot 2025-09-11 at 15 43 42\" src=\"https://github.com/user-attachments/assets/4502eba1-1f55-44df-b691-c4d3d3d3d67d\" >\n\n<img src=\"https://github.com/user-attachments/assets/e21431a3-2062-4b0b-9c8f-d06c92ede741\" alt=\"Screenshot 2025-09-11 at 15 43 50\" width=\"250\" height=\"210\" >`\n },\n {\n name: 'Image with multiline alt',\n markdown: ''\n },\n {\n name: 'Table',\n markdown:\n '<table><tbody><tr><th><p>Header 1</p></th><th><p>Header 2</p></th></tr><tr><td><p>Cell 1</p></td><td><p>Cell 2</p></td></tr><tr><td><p>Cell 3</p></td><td><p>Cell 4</p></td></tr></tbody></table>'\n },\n {\n name: 'Complex table',\n markdown:\n '<table><tbody><tr><td colspan=\"2\" colwidth=\"320\"><p>Header</p></td></tr><tr><td rowspan=\"2\"><p>Cell 1</p></td><td><p>Cell 2</p></td></tr><tr><td><p>Cell 3</p></td></tr></tbody></table>'\n },\n {\n name: 'Sub',\n markdown: '<sub>View in Huly <a href=\"http://localhost:8080/guest/github?token=token\">TSK-50</a></sub>'\n }\n // {\n // name: 'Malformed',\n // markdown: '<foo>try to parse me</bar></buzz>'\n // }\n ]\n\n tests.forEach(({ name, markdown, alternate }) => {\n it(name, () => {\n const json = markdownToMarkup(markdown, options)\n const serialized = markupToMarkdown(json, options)\n expect(serialized).toEqualMarkdown(alternate ?? markdown)\n })\n })\n})\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["//\n// Copyright \u00A9 2025 Hardcore Engineering Inc.\n//\n// Licensed under the Eclipse Public License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License. You may\n// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\nimport { MarkupNode, MarkupNodeType, MarkupMarkType } from '@hcengineering/text-core'\nimport { markdownToMarkup, markupToMarkdown } from '..'\nimport { isMarkdownsEquals } from '../compare'\n\nconst refUrl: string = 'ref://'\nconst imageUrl: string = 'http://localhost'\nconst options = { refUrl, imageUrl }\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n interface Matchers<R> {\n toEqualMarkdown: (expected: string) => R\n }\n }\n}\n\nexpect.extend({\n toEqualMarkdown (received: string, expected: string) {\n const pass = isMarkdownsEquals(received, expected)\n return {\n message: () =>\n pass\n ? `Expected markdown strings NOT to be equal:\\n Received:\\n${received}\\n Expected:\\n${expected}`\n : `Expected markdown strings to be equal:\\n Received:\\n${received}\\n Expected:\\n${expected}`,\n pass\n }\n }\n})\n\ndescribe('markdownToMarkup', () => {\n const tests: Array<{ name: string, markdown: string, markup: object }> = [\n {\n name: 'simple text',\n markdown: 'Lorem ipsum dolor sit amet.',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Lorem ipsum dolor sit amet.',\n marks: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'text with heading',\n markdown: `# Lorem ipsum\n\nLorem ipsum dolor sit amet.\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'Lorem ipsum',\n marks: []\n }\n ]\n },\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Lorem ipsum dolor sit amet.',\n marks: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'bullet list',\n markdown: `# bullet list\n- list item 1\n- list item 2\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'bullet list',\n marks: []\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'todos',\n markdown: `# TODO\n- [ ] todo 1\n- [x] todo 2\n `,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'TODO',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'todos followed by list items',\n markdown: `# todo and list\n- [ ] todo 1\n- [x] todo 2\n- list item 1\n- list item 2\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'todo and list',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 1',\n marks: []\n }\n ]\n }\n ]\n },\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'todos followed by list items',\n markdown: `# mixed lists\n- [ ] todo 1\n- list item 1\n- [x] todo 2\n- list item 2\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'mixed lists',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 1',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 1',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item 2',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'nested todos',\n markdown: `# nested todos\n- [ ] todo\n - [x] sub todo\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'nested todos',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'nested lists',\n markdown: `# nested lists\n- [ ] todo\n - sub list item\n - [x] sub todo\n- list item\n - [x] sub todo\n - sub list item\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'nested lists',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo',\n marks: []\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub list item',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'list item',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n },\n {\n type: 'bulletList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'listItem',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub list item',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'nested todos',\n markdown: `# nested todos\n- [ ] todo\n - [x] sub todo\n`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'heading',\n attrs: { level: 1, marker: '#' },\n content: [\n {\n type: 'text',\n text: 'nested todos',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: false },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'todo',\n marks: []\n }\n ]\n },\n {\n type: 'todoList',\n attrs: {\n bullet: '-'\n },\n content: [\n {\n type: 'todoItem',\n attrs: { checked: true },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'sub todo',\n marks: []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'mermaid diagram',\n markdown: '```mermaid\\ngraph TD;\\n\\tA-->B;\\n\\tA-->C;\\n\\tB-->D;\\n\\tC-->D;\\n```',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'mermaid',\n attrs: {\n language: 'mermaid'\n },\n content: [\n {\n marks: [],\n text: 'graph TD;\\n\\tA-->B;\\n\\tA-->C;\\n\\tB-->D;\\n\\tC-->D;',\n type: 'text'\n }\n ]\n }\n ]\n }\n },\n {\n name: 'embed',\n markdown: '<a href=\"http://localhost/embed\" data-type=\"embed\">http://localhost/embed</a>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'embed',\n attrs: { src: 'http://localhost/embed' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'embed-uri-escape',\n markdown:\n '<a href=\"http://localhost/embed%20spaces\" data-type=\"embed\">http://localhost/embed spaces</a>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'embed',\n attrs: { src: 'http://localhost/embed spaces' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'embed-html-escape',\n markdown:\n '<a href=\"http://localhost/embed%3Chtml%3E\" data-type=\"embed\">http://localhost/embed<html></a>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'embed',\n attrs: { src: 'http://localhost/embed<html>' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'multiline image alt',\n markdown: '',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'image',\n attrs: { src: 'http://example.com/image.png', alt: 'line0\\n\\nline1' },\n content: []\n }\n ]\n }\n ]\n }\n },\n {\n name: 'image in a table cell',\n markdown:\n '<table><tbody><tr><td><p>Some text</p><p> <img src=\"files/image_1.png\" alt=\"image-alt\"/></p></td></tr></tbody></table>',\n markup: {\n type: 'doc',\n content: [\n {\n type: 'table',\n content: [\n {\n type: 'tableRow',\n content: [\n {\n type: 'tableCell',\n attrs: {\n colspan: undefined,\n rowspan: undefined,\n colwidth: undefined\n },\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Some text'\n }\n ]\n },\n {\n type: 'paragraph',\n attrs: {\n textAlign: null\n },\n content: [\n {\n type: 'text',\n text: ' '\n },\n {\n type: 'image',\n attrs: {\n src: 'files/image_1.png',\n alt: 'image-alt',\n 'file-id': null,\n title: null\n }\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'textColor',\n markdown: '<span style=\"color: #abcdef\" data-color=\"#abcdef\">colored</span>',\n markup: {\n type: MarkupNodeType.doc,\n content: [\n {\n type: MarkupNodeType.paragraph,\n content: [\n {\n type: MarkupNodeType.text,\n text: 'colored',\n marks: [{ type: 'textColor' as MarkupMarkType, attrs: { color: '#abcdef' } }]\n }\n ]\n }\n ]\n }\n }\n ]\n\n describe('to markup', () => {\n tests.forEach(({ name, markdown, markup }) => {\n it(name, () => {\n const parsed = markdownToMarkup(markdown, options)\n expect(parsed).toEqual(markup)\n })\n })\n })\n\n describe('to markdown', () => {\n tests.forEach(({ name, markdown, markup }) => {\n it(name, () => {\n const serialized = markupToMarkdown(markup as MarkupNode, options)\n expect(serialized).toEqualMarkdown(markdown)\n })\n })\n })\n})\n\ndescribe('markupToMarkdown', () => {\n const tests: Array<{ name: string, markdown: string, markup: object }> = [\n {\n name: 'links',\n markdown: `[Link](https://example.com)\n\n[Link with spaces](<https://example.com/with spaces>)\n\n[Link with spaces and braces](<https://example.com/\\\\<with spaces\\\\>>)`,\n markup: {\n type: 'doc',\n content: [\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Link',\n marks: [{ type: 'link', attrs: { href: 'https://example.com' } }]\n }\n ]\n },\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Link with spaces',\n marks: [{ type: 'link', attrs: { href: 'https://example.com/with spaces' } }]\n }\n ]\n },\n {\n type: 'paragraph',\n content: [\n {\n type: 'text',\n text: 'Link with spaces and braces',\n marks: [{ type: 'link', attrs: { href: 'https://example.com/<with spaces>' } }]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'textColor',\n markdown: '<span style=\"color: #abcdef\" data-color=\"#abcdef\">colored</span>',\n markup: {\n type: MarkupNodeType.doc,\n content: [\n {\n type: MarkupNodeType.paragraph,\n content: [\n {\n type: MarkupNodeType.text,\n text: 'colored',\n marks: [{ type: 'textColor' as MarkupMarkType, attrs: { color: '#abcdef' } }]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'textColor + italic',\n markdown: '<span style=\"color: #abcdef\" data-color=\"#abcdef\">*styled*</span>',\n markup: {\n type: MarkupNodeType.doc,\n content: [\n {\n type: MarkupNodeType.paragraph,\n content: [\n {\n type: MarkupNodeType.text,\n text: 'styled',\n marks: [\n { type: 'textColor' as MarkupMarkType, attrs: { color: '#abcdef' } },\n { type: MarkupMarkType.em }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'textStyle with font-family',\n markdown: '<span style=\"font-family: Arial\">arial</span>',\n markup: {\n type: MarkupNodeType.doc,\n content: [\n {\n type: MarkupNodeType.paragraph,\n content: [\n {\n type: MarkupNodeType.text,\n text: 'arial',\n marks: [{ type: MarkupMarkType.textStyle, attrs: { fontFamily: 'Arial' } }]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'textStyle with multiple properties',\n markdown: '<span style=\"font-family: Arial; font-size: 16px; font-weight: bold\">styled</span>',\n markup: {\n type: MarkupNodeType.doc,\n content: [\n {\n type: MarkupNodeType.paragraph,\n content: [\n {\n type: MarkupNodeType.text,\n text: 'styled',\n marks: [\n {\n type: MarkupMarkType.textStyle,\n attrs: { fontFamily: 'Arial', fontSize: '16px', fontWeight: 'bold' }\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n name: 'textStyle with color (no data-color)',\n markdown: '<span style=\"color: red\">red</span>',\n markup: {\n type: MarkupNodeType.doc,\n content: [\n {\n type: MarkupNodeType.paragraph,\n content: [\n {\n type: MarkupNodeType.text,\n text: 'red',\n marks: [{ type: MarkupMarkType.textStyle, attrs: { color: 'red' } }]\n }\n ]\n }\n ]\n }\n }\n ]\n\n describe('to markdown', () => {\n tests.forEach(({ name, markdown, markup }) => {\n it(name, () => {\n const result = markupToMarkdown(markup as MarkupNode, options)\n expect(result).toEqual(markdown)\n })\n })\n })\n})\n\ndescribe('markdownToMarkup -> markupToMarkdown', () => {\n const tests: Array<{ name: string, markdown: string, alternate?: string }> = [\n { name: 'Italic', markdown: '*Asteriscs* and _Underscores_' },\n { name: 'Bold', markdown: '**Asteriscs** and __Underscores__' },\n { name: 'Bullet list with asteriscs', markdown: 'Asterisks :\\r\\n* Firstly\\r\\n* Secondly' },\n { name: 'Bullet list with dashes', markdown: 'Dashes :\\r\\n- Firstly\\r\\n- Secondly' },\n { name: 'TODO list with asteriscs', markdown: '* [ ] Take\\n* [ ] Do\\n\\n' },\n { name: 'TODO list with dashes', markdown: '- [x] Take\\n- [ ] Do\\n\\n' },\n {\n name: 'Different markers',\n markdown:\n 'Asterisks bulleted list:\\r\\n* Asterisks: *Italic* and **Bold*** Underscores: _Italic_ and __Bold__\\r\\n\\r\\nDash bulleted list:\\r\\n- Asterisks: *Italic* and **Bold**\\r\\n- Underscores: _Italic_ and __Bold__\\r\\n-'\n },\n { name: 'Single line comment', markdown: '<!-- Do not erase me -->' },\n {\n name: 'Multsiline comment',\n markdown:\n '\"<!--\\r\\n\\r\\nPlease title your PR as follows: `module: description` (e.g. `time: fix date format`).\\r\\nAlways start with the thing you are fixing, then describe the fix.\\r\\nDon\\'t use past tense (e.g. \"fixed foo bar\").\\r\\n\\r\\nExplain what your PR does and why.\\r\\n\\r\\nIf you are adding a new function, please document it and add tests:\\r\\n\\r\\n```\\r\\n// foo does foo and bar\\r\\nfn foo() {\\r\\n\\r\\n// file_test.v\\r\\nfn test_foo() {\\r\\n assert foo() == ...\\r\\n ...\\r\\n}\\r\\n```\\r\\n\\r\\nIf you are fixing a bug, please add a test that covers it.\\r\\n\\r\\nBefore submitting a PR, please run `v test-all` .\\r\\nSee also `TESTS.md`.\\r\\n\\r\\nI try to process PRs as soon as possible. They should be handled within 24 hours.\\r\\n\\r\\nApplying labels to PRs is not needed.\\r\\n\\r\\nThanks a lot for your contribution!\\r\\n\\r\\n-->\\r\\n\\r\\nThis PR fix issue #22424\\r\\n\\r\\n\\r\\n\"'\n },\n {\n name: 'Link',\n markdown: 'See [link](https://example.com)'\n },\n {\n name: 'Link with spaces',\n markdown: 'See [link](<https://example.com/with spaces>)',\n alternate: 'See [link](https://example.com/with%20spaces)'\n },\n {\n name: 'Link with spaces and braces',\n markdown: 'See [link](<https://example.com/\\\\<with spaces\\\\>>)',\n alternate: 'See [link](https://example.com/%3Cwith%20spaces%3E)'\n },\n {\n name: 'Codeblock',\n markdown: '```typescript\\nconst x: number = 42;\\n```'\n },\n {\n name: 'Image',\n markdown: '<img width=\"320\" height=\"160\" src=\"http://example.com/image\" alt=\"image\">'\n },\n {\n name: 'Images',\n markdown: `\n<img width=\"250\" height=\"330\" src=\"https://github.com/user-attachments/assets/f348e016-3f7d-45b1-b8a0-9098e9961885\" alt=\"Screenshot 2025-09-11 at 15 42 40\" />\n\n<img width=\"250\" height=\"230\" alt=\"Screenshot 2025-09-11 at 15 43 42\" src=\"https://github.com/user-attachments/assets/4502eba1-1f55-44df-b691-c4d3d3d3d67d\" >\n\n<img src=\"https://github.com/user-attachments/assets/e21431a3-2062-4b0b-9c8f-d06c92ede741\" alt=\"Screenshot 2025-09-11 at 15 43 50\" width=\"250\" height=\"210\" >`\n },\n {\n name: 'Image with multiline alt',\n markdown: ''\n },\n {\n name: 'Table',\n markdown:\n '<table><tbody><tr><th><p>Header 1</p></th><th><p>Header 2</p></th></tr><tr><td><p>Cell 1</p></td><td><p>Cell 2</p></td></tr><tr><td><p>Cell 3</p></td><td><p>Cell 4</p></td></tr></tbody></table>'\n },\n {\n name: 'Complex table',\n markdown:\n '<table><tbody><tr><td colspan=\"2\" colwidth=\"320\"><p>Header</p></td></tr><tr><td rowspan=\"2\"><p>Cell 1</p></td><td><p>Cell 2</p></td></tr><tr><td><p>Cell 3</p></td></tr></tbody></table>'\n },\n {\n name: 'Sub',\n markdown: '<sub>View in Huly <a href=\"http://localhost:8080/guest/github?token=token\">TSK-50</a></sub>'\n }\n // {\n // name: 'Malformed',\n // markdown: '<foo>try to parse me</bar></buzz>'\n // }\n ]\n\n tests.forEach(({ name, markdown, alternate }) => {\n it(name, () => {\n const json = markdownToMarkup(markdown, options)\n const serialized = markupToMarkdown(json, options)\n expect(serialized).toEqualMarkdown(alternate ?? markdown)\n })\n })\n})\n"],
|
|
5
|
+
"mappings": ";;;AAeA,uBAA2D;AAC3D,eAAmD;AACnD,qBAAkC;AAElC,MAAM,SAAiB;AACvB,MAAM,WAAmB;AACzB,MAAM,UAAU,EAAE,QAAQ,SAAS;AAWnC,OAAO,OAAO;AAAA,EACZ,gBAAiB,UAAkB,UAAkB;AACnD,UAAM,WAAO,kCAAkB,UAAU,QAAQ;AACjD,WAAO;AAAA,MACL,SAAS,6BACP,OACI;AAAA;AAAA,EAA2D,QAAQ;AAAA;AAAA,EAAiB,QAAQ,KAC5F;AAAA;AAAA,EAAuD,QAAQ;AAAA;AAAA,EAAiB,QAAQ,IAHrF;AAAA,MAIT;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,SAAS,oBAAoB,MAAM;AACjC,QAAM,QAAmE;AAAA,IACvE;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA,MAIV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA,MAIV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA,MAIV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,MAAM;AAAA,gBACxB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,KAAK;AAAA,gBACvB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,MAAM;AAAA,gBACxB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,KAAK;AAAA,gBACvB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,MAAM;AAAA,gBACxB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,KAAK;AAAA,gBACvB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA,MAIV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,MAAM;AAAA,gBACxB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,QAAQ;AAAA,oBACV;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,OAAO,EAAE,SAAS,KAAK;AAAA,wBACvB,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,SAAS;AAAA,8BACP;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,OAAO,CAAC;AAAA,8BACV;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,MAAM;AAAA,gBACxB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,QAAQ;AAAA,oBACV;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,SAAS;AAAA,8BACP;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,OAAO,CAAC;AAAA,8BACV;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,QAAQ;AAAA,oBACV;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,OAAO,EAAE,SAAS,KAAK;AAAA,wBACvB,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,SAAS;AAAA,8BACP;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,OAAO,CAAC;AAAA,8BACV;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,QAAQ;AAAA,oBACV;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,OAAO,EAAE,SAAS,KAAK;AAAA,wBACvB,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,SAAS;AAAA,8BACP;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,OAAO,CAAC;AAAA,8BACV;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,QAAQ;AAAA,oBACV;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,SAAS;AAAA,8BACP;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,OAAO,CAAC;AAAA,8BACV;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA,MAIV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,YAC/B,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,QAAQ;AAAA,YACV;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,SAAS,MAAM;AAAA,gBACxB,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,OAAO,CAAC;AAAA,sBACV;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,QAAQ;AAAA,oBACV;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,OAAO,EAAE,SAAS,KAAK;AAAA,wBACvB,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,SAAS;AAAA,8BACP;AAAA,gCACE,MAAM;AAAA,gCACN,MAAM;AAAA,gCACN,OAAO,CAAC;AAAA,8BACV;AAAA,4BACF;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,UAAU;AAAA,YACZ;AAAA,YACA,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,CAAC;AAAA,gBACR,MAAM;AAAA,gBACN,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,KAAK,yBAAyB;AAAA,gBACvC,SAAS,CAAC;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,MACF,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,KAAK,gCAAgC;AAAA,gBAC9C,SAAS,CAAC;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,MACF,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,KAAK,+BAA+B;AAAA,gBAC7C,SAAS,CAAC;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO,EAAE,KAAK,gCAAgC,KAAK,iBAAiB;AAAA,gBACpE,SAAS,CAAC;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,MACF,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,kBACP;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,SAAS;AAAA,sBACT,UAAU;AAAA,oBACZ;AAAA,oBACA,SAAS;AAAA,sBACP;AAAA,wBACE,MAAM;AAAA,wBACN,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,MAAM;AAAA,0BACR;AAAA,wBACF;AAAA,sBACF;AAAA,sBACA;AAAA,wBACE,MAAM;AAAA,wBACN,OAAO;AAAA,0BACL,WAAW;AAAA,wBACb;AAAA,wBACA,SAAS;AAAA,0BACP;AAAA,4BACE,MAAM;AAAA,4BACN,MAAM;AAAA,0BACR;AAAA,0BACA;AAAA,4BACE,MAAM;AAAA,4BACN,OAAO;AAAA,8BACL,KAAK;AAAA,8BACL,KAAK;AAAA,8BACL,WAAW;AAAA,8BACX,OAAO;AAAA,4BACT;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM,gCAAe;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,MAAM,gCAAe;AAAA,YACrB,SAAS;AAAA,cACP;AAAA,gBACE,MAAM,gCAAe;AAAA,gBACrB,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,aAA+B,OAAO,EAAE,OAAO,UAAU,EAAE,CAAC;AAAA,cAC9E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,aAAa,MAAM;AAC1B,UAAM,QAAQ,CAAC,EAAE,MAAM,UAAU,OAAO,MAAM;AAC5C,SAAG,MAAM,MAAM;AACb,cAAM,aAAS,2BAAiB,UAAU,OAAO;AACjD,eAAO,MAAM,EAAE,QAAQ,MAAM;AAAA,MAC/B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAC5B,UAAM,QAAQ,CAAC,EAAE,MAAM,UAAU,OAAO,MAAM;AAC5C,SAAG,MAAM,MAAM;AACb,cAAM,iBAAa,2BAAiB,QAAsB,OAAO;AACjE,eAAO,UAAU,EAAE,gBAAgB,QAAQ;AAAA,MAC7C,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,MAAM;AACjC,QAAM,QAAmE;AAAA,IACvE;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKV,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAM,sBAAsB,EAAE,CAAC;AAAA,cAClE;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAM,kCAAkC,EAAE,CAAC;AAAA,cAC9E;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAM,oCAAoC,EAAE,CAAC;AAAA,cAChF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM,gCAAe;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,MAAM,gCAAe;AAAA,YACrB,SAAS;AAAA,cACP;AAAA,gBACE,MAAM,gCAAe;AAAA,gBACrB,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,aAA+B,OAAO,EAAE,OAAO,UAAU,EAAE,CAAC;AAAA,cAC9E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM,gCAAe;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,MAAM,gCAAe;AAAA,YACrB,SAAS;AAAA,cACP;AAAA,gBACE,MAAM,gCAAe;AAAA,gBACrB,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,EAAE,MAAM,aAA+B,OAAO,EAAE,OAAO,UAAU,EAAE;AAAA,kBACnE,EAAE,MAAM,gCAAe,GAAG;AAAA,gBAC5B;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM,gCAAe;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,MAAM,gCAAe;AAAA,YACrB,SAAS;AAAA,cACP;AAAA,gBACE,MAAM,gCAAe;AAAA,gBACrB,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,gCAAe,WAAW,OAAO,EAAE,YAAY,QAAQ,EAAE,CAAC;AAAA,cAC5E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM,gCAAe;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,MAAM,gCAAe;AAAA,YACrB,SAAS;AAAA,cACP;AAAA,gBACE,MAAM,gCAAe;AAAA,gBACrB,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL;AAAA,oBACE,MAAM,gCAAe;AAAA,oBACrB,OAAO,EAAE,YAAY,SAAS,UAAU,QAAQ,YAAY,OAAO;AAAA,kBACrE;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,MAAM,gCAAe;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,MAAM,gCAAe;AAAA,YACrB,SAAS;AAAA,cACP;AAAA,gBACE,MAAM,gCAAe;AAAA,gBACrB,MAAM;AAAA,gBACN,OAAO,CAAC,EAAE,MAAM,gCAAe,WAAW,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;AAAA,cACrE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,eAAe,MAAM;AAC5B,UAAM,QAAQ,CAAC,EAAE,MAAM,UAAU,OAAO,MAAM;AAC5C,SAAG,MAAM,MAAM;AACb,cAAM,aAAS,2BAAiB,QAAsB,OAAO;AAC7D,eAAO,MAAM,EAAE,QAAQ,QAAQ;AAAA,MACjC,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAED,SAAS,wCAAwC,MAAM;AACrD,QAAM,QAAuE;AAAA,IAC3E,EAAE,MAAM,UAAU,UAAU,gCAAgC;AAAA,IAC5D,EAAE,MAAM,QAAQ,UAAU,oCAAoC;AAAA,IAC9D,EAAE,MAAM,8BAA8B,UAAU,yCAAyC;AAAA,IACzF,EAAE,MAAM,2BAA2B,UAAU,sCAAsC;AAAA,IACnF,EAAE,MAAM,4BAA4B,UAAU,2BAA2B;AAAA,IACzE,EAAE,MAAM,yBAAyB,UAAU,2BAA2B;AAAA,IACtE;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,IACJ;AAAA,IACA,EAAE,MAAM,uBAAuB,UAAU,2BAA2B;AAAA,IACpE;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,IACJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,IACJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UACE;AAAA,IACJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKF;AAEA,QAAM,QAAQ,CAAC,EAAE,MAAM,UAAU,UAAU,MAAM;AAC/C,OAAG,MAAM,MAAM;AACb,YAAM,WAAO,2BAAiB,UAAU,OAAO;AAC/C,YAAM,iBAAa,2BAAiB,MAAM,OAAO;AACjD,aAAO,UAAU,EAAE,gBAAgB,aAAa,QAAQ;AAAA,IAC1D,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/parser.js
CHANGED
|
@@ -138,6 +138,17 @@ class MarkdownParseState {
|
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
+
if (tok.type === "html_inline" && tok.content.trim().startsWith("<span")) {
|
|
142
|
+
while (_toks.length > 0) {
|
|
143
|
+
const _tok = _toks.shift();
|
|
144
|
+
if (_tok !== void 0) {
|
|
145
|
+
tok.content += _tok.content;
|
|
146
|
+
if (_tok.type === "html_inline" && _tok.content.trim() === "</span>") {
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
141
152
|
const handler = this.tokenHandlers[tok.type];
|
|
142
153
|
if (handler === void 0) {
|
|
143
154
|
throw new Error(`Token type '${String(tok.type)} not supported by Markdown parser`);
|
|
@@ -226,18 +237,22 @@ __name(addSpecMark, "addSpecMark");
|
|
|
226
237
|
function addSpecialRule(handlers, spec, type) {
|
|
227
238
|
handlers[type + "_open"] = (state, tok) => {
|
|
228
239
|
const type2 = spec.type(state, tok);
|
|
229
|
-
if (type2
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
240
|
+
if (type2 !== void 0) {
|
|
241
|
+
if (type2.node) {
|
|
242
|
+
state.openNode(type2.type, spec.getAttrs?.(tok, state) ?? {});
|
|
243
|
+
} else {
|
|
244
|
+
state.openMark({ type: type2.type, attrs: spec.getAttrs?.(tok, state) ?? {} });
|
|
245
|
+
}
|
|
233
246
|
}
|
|
234
247
|
};
|
|
235
248
|
handlers[type + "_close"] = (state, tok) => {
|
|
236
249
|
const type2 = spec.type(state, tok);
|
|
237
|
-
if (type2
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
250
|
+
if (type2 !== void 0) {
|
|
251
|
+
if (type2.node) {
|
|
252
|
+
state.closeNode();
|
|
253
|
+
} else {
|
|
254
|
+
state.closeMark(type2.type);
|
|
255
|
+
}
|
|
241
256
|
}
|
|
242
257
|
};
|
|
243
258
|
}
|