@chayns-components/format 5.0.0-beta.1352 → 5.0.0-beta.1353

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.
@@ -135,6 +135,26 @@ const renderer = {
135
135
  }
136
136
  result += `>${text}</a>`;
137
137
  return result;
138
+ },
139
+ // Ensures that the numbering of ordered lists is preserved.
140
+ listitem(item) {
141
+ if (item.task) {
142
+ return false;
143
+ }
144
+ const match = item.raw.trim().match(/^\d{1,9}[.)]/);
145
+
146
+ // Removes the trailing dot or parenthesis from the match.
147
+ const value = match ? match[0].slice(0, match[0].length - 1) : '';
148
+ if (value) {
149
+ let itemBody = '';
150
+ itemBody += this.parser.parse(item.tokens);
151
+
152
+ // Sets the value attribute of the list item to the number of the list item.
153
+ return `<li value="${value}">${itemBody}</li>\n`;
154
+ }
155
+
156
+ // Ensures that the default listitem renderer from marked js is used.
157
+ return false;
138
158
  }
139
159
  };
140
160
  const postprocess = html => {
@@ -1 +1 @@
1
- {"version":3,"file":"formatMarkdown.js","names":["_sync","require","_marked","_formatBBCode","inlineCodeRule","inlineTextRule","TABLE_ID_PREFIX","tokenizer","codespan","src","cap","exec","text","replace","hasNonSpaceChars","test","hasSpaceCharsOnBothEnds","substring","length","raw","type","undefined","lheading","url","code","inlineText","escape","br","list","renderer","lang","_match","langString","match","checkbox","checked","link","href","title","tokens","parser","parseInline","cleanHref","encodeURI","result","postprocess","html","tableIndex","marked","use","hooks","parseMarkdown","parseBBCode","parse","walkTokens","token","escapeBBCodeSquareBrackets","exports","unescapeHtml","replaceAll","getMarkdownTables","tableTokens","push","tables","forEach","tableToken","index","_tableToken$header","_tableToken$rows","tableArray","header","rowArray","rows","row","cell","csv","stringify","id"],"sources":["../../../../../src/utils/formatString/markdown/formatMarkdown.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { stringify } from 'csv-stringify/browser/esm/sync';\nimport { marked, RendererObject, TokenizerObject, Tokens } from 'marked';\nimport type { TableObject } from '../../../types/format';\nimport { escapeBBCodeSquareBrackets } from '../bb-code/formatBBCode';\n\nconst inlineCodeRule = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst inlineTextRule = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<![`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\nconst TABLE_ID_PREFIX = 'formatted-table-';\n\n/*\n The marked Pipeline, including tokenizer, renderer and hooks, are explained here:\n https://marked.js.org/using_pro\n*/\n\nconst tokenizer: TokenizerObject = {\n // Codespan Tokenizer is overwritten to prevent HTML escaping, since HTML has been already\n // escaped. The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L749\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = inlineCodeRule.exec(src);\n\n if (cap) {\n let text = (cap[2] as string).replace(/\\n/g, ' ');\n\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n return { raw: cap[0], text, type: 'codespan' };\n }\n\n return undefined;\n },\n // Disables Markdown formatting for setext headings.\n lheading(): Tokens.Heading | undefined {\n return undefined;\n },\n // Disables converting urls to hyperlinks.\n url() {\n return undefined;\n },\n // Disables converting text with 4 leading spaces to the code block.\n code() {\n return undefined;\n },\n // inlineText is overwritten to prevent HTML escaping, specifically since quote characters are\n // escaped, which breaks the attributes of bb-code elements. The function is copied from\n // marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L854\n inlineText(src: string) {\n const cap = inlineTextRule.exec(src);\n\n if (cap) {\n return { raw: cap[0], text: cap[0], type: 'text' };\n }\n\n return undefined;\n },\n // Disables escaping of characters via backslash. This is needed for LaTeX formulas, since\n // multiline LaTeX formulas have 2 backslashes at the end of their lines. Without this function,\n // the backslashes would be escaped and the LaTeX formula would be broken.\n escape() {\n return undefined;\n },\n // Disables the conversion of backslash at the end of a line to a line break. This is needed for\n // LaTeX formulas, since multiline LaTeX formulas have 2 backslashes at the end of their lines.\n // Without this '\\\\' would be converted to '\\<br>' which breaks LaTeX formulas.\n br() {\n return undefined;\n },\n // Only recognizes ordered lists that start with the number 1. Also recognizes ordered lists\n // that contain a list item with the number 1, so those lists are\n list(src: string) {\n // The regex is copied from marked.js: https://github.com/markedjs/marked/blob/4fc639e053a605b25abf66dccaa70c1bf6562eb7/src/rules.ts#L115\n if (/^( {0,3}[*+-]|1[.)])/.test(src)) {\n return false;\n }\n\n // Prevents the text from being recognized as a list.\n return undefined;\n },\n};\n\nconst renderer: RendererObject = {\n // Code Renderer is overwritten to prevent HTML escaping, since HTML has been already escaped.\n // The function is copied from marked.js and slightly modified: https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Renderer.ts#L24\n code({ lang, text }: Tokens.Code): string {\n const langString = (lang || '').match(/^\\S*/)?.[0];\n\n const code = `${text.replace(/\\n$/, '')}`;\n\n if (!langString) {\n return `<pre><code>${code}</code></pre>\\n`;\n }\n\n return `<pre><code class=\"language-${langString}\">${code}</code></pre>\\n`;\n },\n // Replaces the checkbox input elements with Markdown checkboxes. This is the easiest way to\n // prevent the formatting of Markdown checkboxes in lists. This can modify the input string\n // slightly, since the capitalization of the checkbox can be lost. If a user types '- [X]', it\n // will be replaced with '- [x]'.\n checkbox({ checked }: Tokens.Checkbox) {\n return checked ? '[x]' : '[ ]';\n },\n // Replaces the link renderer to prevent opening links in the same tab. Therefore, the target\n // attribute is set to \"_blank\". The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/15c77deb9e099041d5e70e3b7b17e50ddc35ec2a/src/Renderer.ts#L160\n link({ href, title, tokens }: Tokens.Link): string {\n const text = this.parser.parseInline(tokens);\n\n let cleanHref;\n\n try {\n cleanHref = encodeURI(href).replace(/%25/g, '%');\n } catch {\n return text;\n }\n\n let result = `<a href=\"${cleanHref}\" rel=\"noopener noreferrer\" target=\"_blank\"`;\n\n if (title) {\n result += ` title=\"${title}\"`;\n }\n\n result += `>${text}</a>`;\n\n return result;\n },\n};\n\nconst postprocess = (html: string): string => {\n let tableIndex = -1;\n\n // Assigns ids to tables.\n return html.replace(/(<table>)/g, () => {\n tableIndex++;\n\n return `<table id=\"${TABLE_ID_PREFIX}${tableIndex}\">`;\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\nmarked.use({ tokenizer, renderer, hooks: { postprocess } });\n\n// Parses Markdown following the GitHub flavored Markdown specification. The tokenizer and renderer\n// are slightly modified to prevent HTML escaping in code block and inline code.\nexport const parseMarkdown = (text: string, parseBBCode: boolean) =>\n marked.parse(text, {\n walkTokens: (token) => {\n if (parseBBCode && (token.type === 'codespan' || token.type === 'code')) {\n // eslint-disable-next-line no-param-reassign\n (token as Tokens.Codespan).text = escapeBBCodeSquareBrackets(\n (token as Tokens.Codespan).text,\n );\n }\n },\n }) as string;\n\n// It is important that, &amp; is replaced last to prevent double escaping.\nconst unescapeHtml = (text: string) =>\n text.replaceAll('&lt;', '<').replaceAll('&gt;', '>').replaceAll('&amp;', '&');\n\nexport const getMarkdownTables = (text: string): TableObject[] => {\n const tableTokens: Tokens.Table[] = [];\n\n // Since walkTokens is not called with async functions and parseInline is not used, the result\n // of parse is synchronous. To match the type, it will be voided here.\n void marked.parse(text, {\n walkTokens: (token) => {\n if (token.type === 'table') {\n tableTokens.push(token as Tokens.Table);\n }\n },\n });\n\n const tables: TableObject[] = [];\n\n tableTokens.forEach((tableToken, index) => {\n const tableArray: string[][] = [];\n\n if (tableToken.header?.length > 0) {\n const rowArray: string[] = [];\n\n tableToken.header.forEach((header) => {\n rowArray.push(unescapeHtml(header.text));\n });\n\n tableArray.push(rowArray);\n }\n\n if (tableToken.rows?.length > 0) {\n tableToken.rows.forEach((row) => {\n const rowArray: string[] = [];\n\n row.forEach((cell) => {\n rowArray.push(unescapeHtml(cell.text));\n });\n\n tableArray.push(rowArray);\n });\n }\n\n const csv = stringify(tableArray || []);\n\n tables.push({\n raw: unescapeHtml(tableToken.raw),\n csv,\n id: `${TABLE_ID_PREFIX}${index}`,\n });\n });\n\n return tables;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"formatMarkdown.js","names":["_sync","require","_marked","_formatBBCode","inlineCodeRule","inlineTextRule","TABLE_ID_PREFIX","tokenizer","codespan","src","cap","exec","text","replace","hasNonSpaceChars","test","hasSpaceCharsOnBothEnds","substring","length","raw","type","undefined","lheading","url","code","inlineText","escape","br","list","renderer","lang","_match","langString","match","checkbox","checked","link","href","title","tokens","parser","parseInline","cleanHref","encodeURI","result","listitem","item","task","trim","value","slice","itemBody","parse","postprocess","html","tableIndex","marked","use","hooks","parseMarkdown","parseBBCode","walkTokens","token","escapeBBCodeSquareBrackets","exports","unescapeHtml","replaceAll","getMarkdownTables","tableTokens","push","tables","forEach","tableToken","index","_tableToken$header","_tableToken$rows","tableArray","header","rowArray","rows","row","cell","csv","stringify","id"],"sources":["../../../../../src/utils/formatString/markdown/formatMarkdown.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { stringify } from 'csv-stringify/browser/esm/sync';\nimport { marked, RendererObject, TokenizerObject, Tokens } from 'marked';\nimport type { TableObject } from '../../../types/format';\nimport { escapeBBCodeSquareBrackets } from '../bb-code/formatBBCode';\n\nconst inlineCodeRule = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst inlineTextRule = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<![`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\nconst TABLE_ID_PREFIX = 'formatted-table-';\n\n/*\n The marked Pipeline, including tokenizer, renderer and hooks, are explained here:\n https://marked.js.org/using_pro\n*/\n\nconst tokenizer: TokenizerObject = {\n // Codespan Tokenizer is overwritten to prevent HTML escaping, since HTML has been already\n // escaped. The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L749\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = inlineCodeRule.exec(src);\n\n if (cap) {\n let text = (cap[2] as string).replace(/\\n/g, ' ');\n\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n return { raw: cap[0], text, type: 'codespan' };\n }\n\n return undefined;\n },\n // Disables Markdown formatting for setext headings.\n lheading(): Tokens.Heading | undefined {\n return undefined;\n },\n // Disables converting urls to hyperlinks.\n url() {\n return undefined;\n },\n // Disables converting text with 4 leading spaces to the code block.\n code() {\n return undefined;\n },\n // inlineText is overwritten to prevent HTML escaping, specifically since quote characters are\n // escaped, which breaks the attributes of bb-code elements. The function is copied from\n // marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L854\n inlineText(src: string) {\n const cap = inlineTextRule.exec(src);\n\n if (cap) {\n return { raw: cap[0], text: cap[0], type: 'text' };\n }\n\n return undefined;\n },\n // Disables escaping of characters via backslash. This is needed for LaTeX formulas, since\n // multiline LaTeX formulas have 2 backslashes at the end of their lines. Without this function,\n // the backslashes would be escaped and the LaTeX formula would be broken.\n escape() {\n return undefined;\n },\n // Disables the conversion of backslash at the end of a line to a line break. This is needed for\n // LaTeX formulas, since multiline LaTeX formulas have 2 backslashes at the end of their lines.\n // Without this '\\\\' would be converted to '\\<br>' which breaks LaTeX formulas.\n br() {\n return undefined;\n },\n // Only recognizes ordered lists that start with the number 1. Also recognizes ordered lists\n // that contain a list item with the number 1, so those lists are\n list(src: string) {\n // The regex is copied from marked.js: https://github.com/markedjs/marked/blob/4fc639e053a605b25abf66dccaa70c1bf6562eb7/src/rules.ts#L115\n if (/^( {0,3}[*+-]|1[.)])/.test(src)) {\n return false;\n }\n\n // Prevents the text from being recognized as a list.\n return undefined;\n },\n};\n\nconst renderer: RendererObject = {\n // Code Renderer is overwritten to prevent HTML escaping, since HTML has been already escaped.\n // The function is copied from marked.js and slightly modified: https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Renderer.ts#L24\n code({ lang, text }: Tokens.Code): string {\n const langString = (lang || '').match(/^\\S*/)?.[0];\n\n const code = `${text.replace(/\\n$/, '')}`;\n\n if (!langString) {\n return `<pre><code>${code}</code></pre>\\n`;\n }\n\n return `<pre><code class=\"language-${langString}\">${code}</code></pre>\\n`;\n },\n // Replaces the checkbox input elements with Markdown checkboxes. This is the easiest way to\n // prevent the formatting of Markdown checkboxes in lists. This can modify the input string\n // slightly, since the capitalization of the checkbox can be lost. If a user types '- [X]', it\n // will be replaced with '- [x]'.\n checkbox({ checked }: Tokens.Checkbox) {\n return checked ? '[x]' : '[ ]';\n },\n // Replaces the link renderer to prevent opening links in the same tab. Therefore, the target\n // attribute is set to \"_blank\". The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/15c77deb9e099041d5e70e3b7b17e50ddc35ec2a/src/Renderer.ts#L160\n link({ href, title, tokens }: Tokens.Link): string {\n const text = this.parser.parseInline(tokens);\n\n let cleanHref;\n\n try {\n cleanHref = encodeURI(href).replace(/%25/g, '%');\n } catch {\n return text;\n }\n\n let result = `<a href=\"${cleanHref}\" rel=\"noopener noreferrer\" target=\"_blank\"`;\n\n if (title) {\n result += ` title=\"${title}\"`;\n }\n\n result += `>${text}</a>`;\n\n return result;\n },\n // Ensures that the numbering of ordered lists is preserved.\n listitem(item: Tokens.ListItem) {\n if (item.task) {\n return false;\n }\n\n const match = item.raw.trim().match(/^\\d{1,9}[.)]/);\n\n // Removes the trailing dot or parenthesis from the match.\n const value = match ? match[0].slice(0, match[0].length - 1) : '';\n\n if (value) {\n let itemBody = '';\n\n itemBody += this.parser.parse(item.tokens);\n\n // Sets the value attribute of the list item to the number of the list item.\n return `<li value=\"${value}\">${itemBody}</li>\\n`;\n }\n\n // Ensures that the default listitem renderer from marked js is used.\n return false;\n },\n};\n\nconst postprocess = (html: string): string => {\n let tableIndex = -1;\n\n // Assigns ids to tables.\n return html.replace(/(<table>)/g, () => {\n tableIndex++;\n\n return `<table id=\"${TABLE_ID_PREFIX}${tableIndex}\">`;\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\nmarked.use({ tokenizer, renderer, hooks: { postprocess } });\n\n// Parses Markdown following the GitHub flavored Markdown specification. The tokenizer and renderer\n// are slightly modified to prevent HTML escaping in code block and inline code.\nexport const parseMarkdown = (text: string, parseBBCode: boolean) =>\n marked.parse(text, {\n walkTokens: (token) => {\n if (parseBBCode && (token.type === 'codespan' || token.type === 'code')) {\n // eslint-disable-next-line no-param-reassign\n (token as Tokens.Codespan).text = escapeBBCodeSquareBrackets(\n (token as Tokens.Codespan).text,\n );\n }\n },\n }) as string;\n\n// It is important that, &amp; is replaced last to prevent double escaping.\nconst unescapeHtml = (text: string) =>\n text.replaceAll('&lt;', '<').replaceAll('&gt;', '>').replaceAll('&amp;', '&');\n\nexport const getMarkdownTables = (text: string): TableObject[] => {\n const tableTokens: Tokens.Table[] = [];\n\n // Since walkTokens is not called with async functions and parseInline is not used, the result\n // of parse is synchronous. To match the type, it will be voided here.\n void marked.parse(text, {\n walkTokens: (token) => {\n if (token.type === 'table') {\n tableTokens.push(token as Tokens.Table);\n }\n },\n });\n\n const tables: TableObject[] = [];\n\n tableTokens.forEach((tableToken, index) => {\n const tableArray: string[][] = [];\n\n if (tableToken.header?.length > 0) {\n const rowArray: string[] = [];\n\n tableToken.header.forEach((header) => {\n rowArray.push(unescapeHtml(header.text));\n });\n\n tableArray.push(rowArray);\n }\n\n if (tableToken.rows?.length > 0) {\n tableToken.rows.forEach((row) => {\n const rowArray: string[] = [];\n\n row.forEach((cell) => {\n rowArray.push(unescapeHtml(cell.text));\n });\n\n tableArray.push(rowArray);\n });\n }\n\n const csv = stringify(tableArray || []);\n\n tables.push({\n raw: unescapeHtml(tableToken.raw),\n csv,\n id: `${TABLE_ID_PREFIX}${index}`,\n });\n });\n\n return tables;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -127,6 +127,26 @@ const renderer = {
127
127
  }
128
128
  result += `>${text}</a>`;
129
129
  return result;
130
+ },
131
+ // Ensures that the numbering of ordered lists is preserved.
132
+ listitem(item) {
133
+ if (item.task) {
134
+ return false;
135
+ }
136
+ const match = item.raw.trim().match(/^\d{1,9}[.)]/);
137
+
138
+ // Removes the trailing dot or parenthesis from the match.
139
+ const value = match ? match[0].slice(0, match[0].length - 1) : '';
140
+ if (value) {
141
+ let itemBody = '';
142
+ itemBody += this.parser.parse(item.tokens);
143
+
144
+ // Sets the value attribute of the list item to the number of the list item.
145
+ return `<li value="${value}">${itemBody}</li>\n`;
146
+ }
147
+
148
+ // Ensures that the default listitem renderer from marked js is used.
149
+ return false;
130
150
  }
131
151
  };
132
152
  const postprocess = html => {
@@ -1 +1 @@
1
- {"version":3,"file":"formatMarkdown.js","names":["stringify","marked","escapeBBCodeSquareBrackets","inlineCodeRule","inlineTextRule","TABLE_ID_PREFIX","tokenizer","codespan","src","cap","exec","text","replace","hasNonSpaceChars","test","hasSpaceCharsOnBothEnds","substring","length","raw","type","undefined","lheading","url","code","inlineText","escape","br","list","renderer","lang","langString","match","checkbox","checked","link","href","title","tokens","parser","parseInline","cleanHref","encodeURI","result","postprocess","html","tableIndex","use","hooks","parseMarkdown","parseBBCode","parse","walkTokens","token","unescapeHtml","replaceAll","getMarkdownTables","tableTokens","push","tables","forEach","tableToken","index","tableArray","header","rowArray","rows","row","cell","csv","id"],"sources":["../../../../../src/utils/formatString/markdown/formatMarkdown.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { stringify } from 'csv-stringify/browser/esm/sync';\nimport { marked, RendererObject, TokenizerObject, Tokens } from 'marked';\nimport type { TableObject } from '../../../types/format';\nimport { escapeBBCodeSquareBrackets } from '../bb-code/formatBBCode';\n\nconst inlineCodeRule = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst inlineTextRule = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<![`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\nconst TABLE_ID_PREFIX = 'formatted-table-';\n\n/*\n The marked Pipeline, including tokenizer, renderer and hooks, are explained here:\n https://marked.js.org/using_pro\n*/\n\nconst tokenizer: TokenizerObject = {\n // Codespan Tokenizer is overwritten to prevent HTML escaping, since HTML has been already\n // escaped. The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L749\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = inlineCodeRule.exec(src);\n\n if (cap) {\n let text = (cap[2] as string).replace(/\\n/g, ' ');\n\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n return { raw: cap[0], text, type: 'codespan' };\n }\n\n return undefined;\n },\n // Disables Markdown formatting for setext headings.\n lheading(): Tokens.Heading | undefined {\n return undefined;\n },\n // Disables converting urls to hyperlinks.\n url() {\n return undefined;\n },\n // Disables converting text with 4 leading spaces to the code block.\n code() {\n return undefined;\n },\n // inlineText is overwritten to prevent HTML escaping, specifically since quote characters are\n // escaped, which breaks the attributes of bb-code elements. The function is copied from\n // marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L854\n inlineText(src: string) {\n const cap = inlineTextRule.exec(src);\n\n if (cap) {\n return { raw: cap[0], text: cap[0], type: 'text' };\n }\n\n return undefined;\n },\n // Disables escaping of characters via backslash. This is needed for LaTeX formulas, since\n // multiline LaTeX formulas have 2 backslashes at the end of their lines. Without this function,\n // the backslashes would be escaped and the LaTeX formula would be broken.\n escape() {\n return undefined;\n },\n // Disables the conversion of backslash at the end of a line to a line break. This is needed for\n // LaTeX formulas, since multiline LaTeX formulas have 2 backslashes at the end of their lines.\n // Without this '\\\\' would be converted to '\\<br>' which breaks LaTeX formulas.\n br() {\n return undefined;\n },\n // Only recognizes ordered lists that start with the number 1. Also recognizes ordered lists\n // that contain a list item with the number 1, so those lists are\n list(src: string) {\n // The regex is copied from marked.js: https://github.com/markedjs/marked/blob/4fc639e053a605b25abf66dccaa70c1bf6562eb7/src/rules.ts#L115\n if (/^( {0,3}[*+-]|1[.)])/.test(src)) {\n return false;\n }\n\n // Prevents the text from being recognized as a list.\n return undefined;\n },\n};\n\nconst renderer: RendererObject = {\n // Code Renderer is overwritten to prevent HTML escaping, since HTML has been already escaped.\n // The function is copied from marked.js and slightly modified: https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Renderer.ts#L24\n code({ lang, text }: Tokens.Code): string {\n const langString = (lang || '').match(/^\\S*/)?.[0];\n\n const code = `${text.replace(/\\n$/, '')}`;\n\n if (!langString) {\n return `<pre><code>${code}</code></pre>\\n`;\n }\n\n return `<pre><code class=\"language-${langString}\">${code}</code></pre>\\n`;\n },\n // Replaces the checkbox input elements with Markdown checkboxes. This is the easiest way to\n // prevent the formatting of Markdown checkboxes in lists. This can modify the input string\n // slightly, since the capitalization of the checkbox can be lost. If a user types '- [X]', it\n // will be replaced with '- [x]'.\n checkbox({ checked }: Tokens.Checkbox) {\n return checked ? '[x]' : '[ ]';\n },\n // Replaces the link renderer to prevent opening links in the same tab. Therefore, the target\n // attribute is set to \"_blank\". The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/15c77deb9e099041d5e70e3b7b17e50ddc35ec2a/src/Renderer.ts#L160\n link({ href, title, tokens }: Tokens.Link): string {\n const text = this.parser.parseInline(tokens);\n\n let cleanHref;\n\n try {\n cleanHref = encodeURI(href).replace(/%25/g, '%');\n } catch {\n return text;\n }\n\n let result = `<a href=\"${cleanHref}\" rel=\"noopener noreferrer\" target=\"_blank\"`;\n\n if (title) {\n result += ` title=\"${title}\"`;\n }\n\n result += `>${text}</a>`;\n\n return result;\n },\n};\n\nconst postprocess = (html: string): string => {\n let tableIndex = -1;\n\n // Assigns ids to tables.\n return html.replace(/(<table>)/g, () => {\n tableIndex++;\n\n return `<table id=\"${TABLE_ID_PREFIX}${tableIndex}\">`;\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\nmarked.use({ tokenizer, renderer, hooks: { postprocess } });\n\n// Parses Markdown following the GitHub flavored Markdown specification. The tokenizer and renderer\n// are slightly modified to prevent HTML escaping in code block and inline code.\nexport const parseMarkdown = (text: string, parseBBCode: boolean) =>\n marked.parse(text, {\n walkTokens: (token) => {\n if (parseBBCode && (token.type === 'codespan' || token.type === 'code')) {\n // eslint-disable-next-line no-param-reassign\n (token as Tokens.Codespan).text = escapeBBCodeSquareBrackets(\n (token as Tokens.Codespan).text,\n );\n }\n },\n }) as string;\n\n// It is important that, &amp; is replaced last to prevent double escaping.\nconst unescapeHtml = (text: string) =>\n text.replaceAll('&lt;', '<').replaceAll('&gt;', '>').replaceAll('&amp;', '&');\n\nexport const getMarkdownTables = (text: string): TableObject[] => {\n const tableTokens: Tokens.Table[] = [];\n\n // Since walkTokens is not called with async functions and parseInline is not used, the result\n // of parse is synchronous. To match the type, it will be voided here.\n void marked.parse(text, {\n walkTokens: (token) => {\n if (token.type === 'table') {\n tableTokens.push(token as Tokens.Table);\n }\n },\n });\n\n const tables: TableObject[] = [];\n\n tableTokens.forEach((tableToken, index) => {\n const tableArray: string[][] = [];\n\n if (tableToken.header?.length > 0) {\n const rowArray: string[] = [];\n\n tableToken.header.forEach((header) => {\n rowArray.push(unescapeHtml(header.text));\n });\n\n tableArray.push(rowArray);\n }\n\n if (tableToken.rows?.length > 0) {\n tableToken.rows.forEach((row) => {\n const rowArray: string[] = [];\n\n row.forEach((cell) => {\n rowArray.push(unescapeHtml(cell.text));\n });\n\n tableArray.push(rowArray);\n });\n }\n\n const csv = stringify(tableArray || []);\n\n tables.push({\n raw: unescapeHtml(tableToken.raw),\n csv,\n id: `${TABLE_ID_PREFIX}${index}`,\n });\n });\n\n return tables;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"formatMarkdown.js","names":["stringify","marked","escapeBBCodeSquareBrackets","inlineCodeRule","inlineTextRule","TABLE_ID_PREFIX","tokenizer","codespan","src","cap","exec","text","replace","hasNonSpaceChars","test","hasSpaceCharsOnBothEnds","substring","length","raw","type","undefined","lheading","url","code","inlineText","escape","br","list","renderer","lang","langString","match","checkbox","checked","link","href","title","tokens","parser","parseInline","cleanHref","encodeURI","result","listitem","item","task","trim","value","slice","itemBody","parse","postprocess","html","tableIndex","use","hooks","parseMarkdown","parseBBCode","walkTokens","token","unescapeHtml","replaceAll","getMarkdownTables","tableTokens","push","tables","forEach","tableToken","index","tableArray","header","rowArray","rows","row","cell","csv","id"],"sources":["../../../../../src/utils/formatString/markdown/formatMarkdown.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { stringify } from 'csv-stringify/browser/esm/sync';\nimport { marked, RendererObject, TokenizerObject, Tokens } from 'marked';\nimport type { TableObject } from '../../../types/format';\nimport { escapeBBCodeSquareBrackets } from '../bb-code/formatBBCode';\n\nconst inlineCodeRule = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst inlineTextRule = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<![`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\nconst TABLE_ID_PREFIX = 'formatted-table-';\n\n/*\n The marked Pipeline, including tokenizer, renderer and hooks, are explained here:\n https://marked.js.org/using_pro\n*/\n\nconst tokenizer: TokenizerObject = {\n // Codespan Tokenizer is overwritten to prevent HTML escaping, since HTML has been already\n // escaped. The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L749\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = inlineCodeRule.exec(src);\n\n if (cap) {\n let text = (cap[2] as string).replace(/\\n/g, ' ');\n\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n return { raw: cap[0], text, type: 'codespan' };\n }\n\n return undefined;\n },\n // Disables Markdown formatting for setext headings.\n lheading(): Tokens.Heading | undefined {\n return undefined;\n },\n // Disables converting urls to hyperlinks.\n url() {\n return undefined;\n },\n // Disables converting text with 4 leading spaces to the code block.\n code() {\n return undefined;\n },\n // inlineText is overwritten to prevent HTML escaping, specifically since quote characters are\n // escaped, which breaks the attributes of bb-code elements. The function is copied from\n // marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Tokenizer.ts#L854\n inlineText(src: string) {\n const cap = inlineTextRule.exec(src);\n\n if (cap) {\n return { raw: cap[0], text: cap[0], type: 'text' };\n }\n\n return undefined;\n },\n // Disables escaping of characters via backslash. This is needed for LaTeX formulas, since\n // multiline LaTeX formulas have 2 backslashes at the end of their lines. Without this function,\n // the backslashes would be escaped and the LaTeX formula would be broken.\n escape() {\n return undefined;\n },\n // Disables the conversion of backslash at the end of a line to a line break. This is needed for\n // LaTeX formulas, since multiline LaTeX formulas have 2 backslashes at the end of their lines.\n // Without this '\\\\' would be converted to '\\<br>' which breaks LaTeX formulas.\n br() {\n return undefined;\n },\n // Only recognizes ordered lists that start with the number 1. Also recognizes ordered lists\n // that contain a list item with the number 1, so those lists are\n list(src: string) {\n // The regex is copied from marked.js: https://github.com/markedjs/marked/blob/4fc639e053a605b25abf66dccaa70c1bf6562eb7/src/rules.ts#L115\n if (/^( {0,3}[*+-]|1[.)])/.test(src)) {\n return false;\n }\n\n // Prevents the text from being recognized as a list.\n return undefined;\n },\n};\n\nconst renderer: RendererObject = {\n // Code Renderer is overwritten to prevent HTML escaping, since HTML has been already escaped.\n // The function is copied from marked.js and slightly modified: https://github.com/markedjs/marked/blob/42954aaba960b6f815b24ec0d39da464960e4ec9/src/Renderer.ts#L24\n code({ lang, text }: Tokens.Code): string {\n const langString = (lang || '').match(/^\\S*/)?.[0];\n\n const code = `${text.replace(/\\n$/, '')}`;\n\n if (!langString) {\n return `<pre><code>${code}</code></pre>\\n`;\n }\n\n return `<pre><code class=\"language-${langString}\">${code}</code></pre>\\n`;\n },\n // Replaces the checkbox input elements with Markdown checkboxes. This is the easiest way to\n // prevent the formatting of Markdown checkboxes in lists. This can modify the input string\n // slightly, since the capitalization of the checkbox can be lost. If a user types '- [X]', it\n // will be replaced with '- [x]'.\n checkbox({ checked }: Tokens.Checkbox) {\n return checked ? '[x]' : '[ ]';\n },\n // Replaces the link renderer to prevent opening links in the same tab. Therefore, the target\n // attribute is set to \"_blank\". The function is copied from marked.js and slightly modified:\n // https://github.com/markedjs/marked/blob/15c77deb9e099041d5e70e3b7b17e50ddc35ec2a/src/Renderer.ts#L160\n link({ href, title, tokens }: Tokens.Link): string {\n const text = this.parser.parseInline(tokens);\n\n let cleanHref;\n\n try {\n cleanHref = encodeURI(href).replace(/%25/g, '%');\n } catch {\n return text;\n }\n\n let result = `<a href=\"${cleanHref}\" rel=\"noopener noreferrer\" target=\"_blank\"`;\n\n if (title) {\n result += ` title=\"${title}\"`;\n }\n\n result += `>${text}</a>`;\n\n return result;\n },\n // Ensures that the numbering of ordered lists is preserved.\n listitem(item: Tokens.ListItem) {\n if (item.task) {\n return false;\n }\n\n const match = item.raw.trim().match(/^\\d{1,9}[.)]/);\n\n // Removes the trailing dot or parenthesis from the match.\n const value = match ? match[0].slice(0, match[0].length - 1) : '';\n\n if (value) {\n let itemBody = '';\n\n itemBody += this.parser.parse(item.tokens);\n\n // Sets the value attribute of the list item to the number of the list item.\n return `<li value=\"${value}\">${itemBody}</li>\\n`;\n }\n\n // Ensures that the default listitem renderer from marked js is used.\n return false;\n },\n};\n\nconst postprocess = (html: string): string => {\n let tableIndex = -1;\n\n // Assigns ids to tables.\n return html.replace(/(<table>)/g, () => {\n tableIndex++;\n\n return `<table id=\"${TABLE_ID_PREFIX}${tableIndex}\">`;\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\nmarked.use({ tokenizer, renderer, hooks: { postprocess } });\n\n// Parses Markdown following the GitHub flavored Markdown specification. The tokenizer and renderer\n// are slightly modified to prevent HTML escaping in code block and inline code.\nexport const parseMarkdown = (text: string, parseBBCode: boolean) =>\n marked.parse(text, {\n walkTokens: (token) => {\n if (parseBBCode && (token.type === 'codespan' || token.type === 'code')) {\n // eslint-disable-next-line no-param-reassign\n (token as Tokens.Codespan).text = escapeBBCodeSquareBrackets(\n (token as Tokens.Codespan).text,\n );\n }\n },\n }) as string;\n\n// It is important that, &amp; is replaced last to prevent double escaping.\nconst unescapeHtml = (text: string) =>\n text.replaceAll('&lt;', '<').replaceAll('&gt;', '>').replaceAll('&amp;', '&');\n\nexport const getMarkdownTables = (text: string): TableObject[] => {\n const tableTokens: Tokens.Table[] = [];\n\n // Since walkTokens is not called with async functions and parseInline is not used, the result\n // of parse is synchronous. To match the type, it will be voided here.\n void marked.parse(text, {\n walkTokens: (token) => {\n if (token.type === 'table') {\n tableTokens.push(token as Tokens.Table);\n }\n },\n });\n\n const tables: TableObject[] = [];\n\n tableTokens.forEach((tableToken, index) => {\n const tableArray: string[][] = [];\n\n if (tableToken.header?.length > 0) {\n const rowArray: string[] = [];\n\n tableToken.header.forEach((header) => {\n rowArray.push(unescapeHtml(header.text));\n });\n\n tableArray.push(rowArray);\n }\n\n if (tableToken.rows?.length > 0) {\n tableToken.rows.forEach((row) => {\n const rowArray: string[] = [];\n\n row.forEach((cell) => {\n rowArray.push(unescapeHtml(cell.text));\n });\n\n tableArray.push(rowArray);\n });\n }\n\n const csv = stringify(tableArray || []);\n\n tables.push({\n raw: unescapeHtml(tableToken.raw),\n csv,\n id: `${TABLE_ID_PREFIX}${index}`,\n });\n });\n\n return tables;\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/format",
3
- "version": "5.0.0-beta.1352",
3
+ "version": "5.0.0-beta.1353",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -74,5 +74,5 @@
74
74
  "publishConfig": {
75
75
  "access": "public"
76
76
  },
77
- "gitHead": "d6b366ed6224381b9a2db83fade6b703ad7fdd56"
77
+ "gitHead": "659e1d7836b6c5c6f9af47976f53170da733c258"
78
78
  }