@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.
@@ -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 markup and back", () => {
922
+ describe("to markdown", () => {
903
923
  tests.forEach(({ name, markdown, markup }) => {
904
924
  it(name, () => {
905
- const json = (0, import__.markdownToMarkup)(markdown, options);
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:&#x2F;&#x2F;localhost&#x2F;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:&#x2F;&#x2F;localhost&#x2F;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:&#x2F;&#x2F;localhost&#x2F;embed&lt;html&gt;</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: '![line0\\\\\\n\\\\\\nline1](http://example.com/image.png)',\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: '![link0\\\\\\n\\\\\\nline1](http://example.com/image.png)'\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:&#x2F;&#x2F;localhost&#x2F;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:&#x2F;&#x2F;localhost&#x2F;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:&#x2F;&#x2F;localhost&#x2F;embed&lt;html&gt;</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: '![line0\\\\\\n\\\\\\nline1](http://example.com/image.png)',\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: '![link0\\\\\\n\\\\\\nline1](http://example.com/image.png)'\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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",
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.node) {
230
- state.openNode(type2.type, spec.getAttrs?.(tok, state) ?? {});
231
- } else {
232
- state.openMark({ type: type2.type, attrs: spec.getAttrs?.(tok, state) ?? {} });
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.node) {
238
- state.closeNode();
239
- } else {
240
- state.closeMark(type2.type);
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
  }