@chayns-components/format 5.0.0-beta.674 → 5.0.0-beta.682

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.
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BB_CODE_HTML_TAG_PREFIX = void 0;
7
+ const BB_CODE_HTML_TAG_PREFIX = exports.BB_CODE_HTML_TAG_PREFIX = 'bb-code-';
8
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","names":["BB_CODE_HTML_TAG_PREFIX","exports"],"sources":["../../../src/constants/format.ts"],"sourcesContent":["export const BB_CODE_HTML_TAG_PREFIX = 'bb-code-';\n"],"mappings":";;;;;;AAAO,MAAMA,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA,GAAG,UAAU","ignoreList":[]}
package/lib/cjs/index.js CHANGED
@@ -3,11 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "BB_CODE_HTML_TAG_PREFIX", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _format.BB_CODE_HTML_TAG_PREFIX;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "formatStringToHtml", {
7
13
  enumerable: true,
8
14
  get: function () {
9
15
  return _formatString.formatStringToHtml;
10
16
  }
11
17
  });
18
+ var _format = require("./constants/format");
12
19
  var _formatString = require("./utils/formatString/formatString");
13
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_formatString","require"],"sources":["../../src/index.ts"],"sourcesContent":["export { formatStringToHtml } from './utils/formatString/formatString';\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_format","require","_formatString"],"sources":["../../src/index.ts"],"sourcesContent":["export { BB_CODE_HTML_TAG_PREFIX } from './constants/format';\nexport type { TableObject } from './types/format';\nexport { formatStringToHtml } from './utils/formatString/formatString';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA","ignoreList":[]}
@@ -3,9 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.escapeHtmlInText = exports.MESSAGE_CONVERSION_LINE_BREAK_ESCAPED = exports.MESSAGE_CONVERSION_LINE_BREAK = void 0;
6
+ exports.escapeHtmlInText = void 0;
7
7
  const escapeHtmlInText = text => text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
8
8
  exports.escapeHtmlInText = escapeHtmlInText;
9
- const MESSAGE_CONVERSION_LINE_BREAK = exports.MESSAGE_CONVERSION_LINE_BREAK = '<br is-replaced-linebreak>';
10
- const MESSAGE_CONVERSION_LINE_BREAK_ESCAPED = exports.MESSAGE_CONVERSION_LINE_BREAK_ESCAPED = escapeHtmlInText(MESSAGE_CONVERSION_LINE_BREAK);
11
9
  //# sourceMappingURL=escape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"escape.js","names":["escapeHtmlInText","text","replace","exports","MESSAGE_CONVERSION_LINE_BREAK","MESSAGE_CONVERSION_LINE_BREAK_ESCAPED"],"sources":["../../../src/utils/escape.ts"],"sourcesContent":["export const escapeHtmlInText = (text: string): string =>\n text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nexport const MESSAGE_CONVERSION_LINE_BREAK = '<br is-replaced-linebreak>';\nexport const MESSAGE_CONVERSION_LINE_BREAK_ESCAPED = escapeHtmlInText(\n MESSAGE_CONVERSION_LINE_BREAK,\n);\n"],"mappings":";;;;;;AAAO,MAAMA,gBAAgB,GAAIC,IAAY,IACzCA,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAACC,OAAA,CAAAH,gBAAA,GAAAA,gBAAA;AAE9C,MAAMI,6BAA6B,GAAAD,OAAA,CAAAC,6BAAA,GAAG,4BAA4B;AAClE,MAAMC,qCAAqC,GAAAF,OAAA,CAAAE,qCAAA,GAAGL,gBAAgB,CACjEI,6BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"escape.js","names":["escapeHtmlInText","text","replace","exports"],"sources":["../../../src/utils/escape.ts"],"sourcesContent":["export const escapeHtmlInText = (text: string): string =>\n text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n"],"mappings":";;;;;;AAAO,MAAMA,gBAAgB,GAAIC,IAAY,IACzCA,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAACC,OAAA,CAAAH,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.unescapeBBCodeSquareBrackets = exports.parseBBCode = exports.escapeBBCodeSquareBrackets = void 0;
7
+ var _format = require("../../../constants/format");
7
8
  var _findBBCode = require("./findBBCode");
8
- const BB_CODE_HTML_TAG_PREFIX = 'bb-code-';
9
9
  const BLOCK_LEVEL_TAGS = ['center', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'];
10
10
  const INLINE_LEVEL_TAGS = ['b', 'strong', 'i', 'em', 'u', 's', 'span', 'img'];
11
11
  // Parses BB-Code to HTML recursively.
@@ -74,7 +74,7 @@ const parseBBCode = (text, options) => {
74
74
  htmlAfterTag = htmlAfterTag.replace(/^\n/, '');
75
75
  }
76
76
  const isCustomTag = [...customBlockLevelTags, ...customInlineLevelTags].includes(Tag);
77
- const htmlTag = isCustomTag ? `${BB_CODE_HTML_TAG_PREFIX}${Tag}` : Tag;
77
+ const htmlTag = isCustomTag ? `${_format.BB_CODE_HTML_TAG_PREFIX}${Tag}` : Tag;
78
78
  const openingHtmlTag = `<${htmlTag}${Object.entries(parameters).length > 0 ? ' ' : ''}${Object.entries(parameters).map(([key, value]) => `${key}="${value}"`).join(' ')}>`;
79
79
  const closingHtmlTag = `</${htmlTag}>`;
80
80
  const element = Tag === 'img' ? openingHtmlTag : openingHtmlTag + parsedContent + closingHtmlTag;
@@ -1 +1 @@
1
- {"version":3,"file":"formatBBCode.js","names":["_findBBCode","require","BB_CODE_HTML_TAG_PREFIX","BLOCK_LEVEL_TAGS","INLINE_LEVEL_TAGS","parseBBCode","text","options","customBlockLevelBBCodeTags","customBlockLevelTags","customInlineLevelBBCodeTags","customInlineLevelTags","justEscapeSquareBrackets","html","parseBehindIndex","length","htmlToParse","slice","firstBBCodeMatch","findFirstBBCode","content","fullMatch","parameters","index","openingTag","closingTag","Tag","tag","toLowerCase","isValidTag","includes","isBlockLevelTag","parsedContent","indexOfFullMatch","indexOf","escapedOpeningTag","escapeBBCodeSquareBrackets","escapedClosingTag","replace","htmlAfterTag","isCustomTag","htmlTag","openingHtmlTag","Object","entries","map","key","value","join","closingHtmlTag","element","exports","replaceAll","unescapeBBCodeSquareBrackets"],"sources":["../../../../../src/utils/formatString/bb-code/formatBBCode.ts"],"sourcesContent":["import { findFirstBBCode } from './findBBCode';\n\nconst BB_CODE_HTML_TAG_PREFIX = 'bb-code-';\n\nconst BLOCK_LEVEL_TAGS = ['center', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'];\nconst INLINE_LEVEL_TAGS = ['b', 'strong', 'i', 'em', 'u', 's', 'span', 'img'];\n\nexport interface ParseBBCodesOptions {\n customBlockLevelBBCodeTags?: string[];\n customInlineLevelBBCodeTags?: string[];\n justEscapeSquareBrackets?: boolean;\n}\n\n// Parses BB-Code to HTML recursively.\n// When justEscapeSquareBrackets is true, square brackets are escaped to prevent conflicts between markdown and BB Code.\n// In that case the function only escapes square brackets and doesn't remove line breaks.\nexport const parseBBCode = (text: string, options?: ParseBBCodesOptions) => {\n const {\n customBlockLevelBBCodeTags: customBlockLevelTags = [],\n customInlineLevelBBCodeTags: customInlineLevelTags = [],\n justEscapeSquareBrackets = false,\n } = options || {};\n\n let html = text;\n\n // This index is used to keep track of the position in the html string that is being parsed.\n let parseBehindIndex = 0;\n\n while (parseBehindIndex < html.length) {\n const htmlToParse = html.slice(parseBehindIndex);\n\n const firstBBCodeMatch = findFirstBBCode(htmlToParse);\n\n // Stops parsing if no BB-Code is found.\n if (!firstBBCodeMatch) {\n return html;\n }\n\n const { content, fullMatch, parameters, index, openingTag, closingTag } = firstBBCodeMatch;\n\n const Tag = firstBBCodeMatch.tag.toLowerCase();\n const isValidTag = [\n ...BLOCK_LEVEL_TAGS,\n ...customBlockLevelTags,\n ...INLINE_LEVEL_TAGS,\n ...customInlineLevelTags,\n ].includes(Tag);\n const isBlockLevelTag = [...BLOCK_LEVEL_TAGS, ...customBlockLevelTags].includes(Tag);\n\n // Ignores tags that are not supported.\n if (!isValidTag) {\n // The parsing continues behind the first square bracket of the BB-Code tag.\n parseBehindIndex += index + 1;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Converts BB-Code tag's content before converting itself, because it may contain other BB-Codes.\n let parsedContent = parseBBCode(content, options);\n\n if (justEscapeSquareBrackets) {\n const indexOfFullMatch = html.indexOf(fullMatch);\n const escapedOpeningTag = escapeBBCodeSquareBrackets(openingTag);\n const escapedClosingTag = escapeBBCodeSquareBrackets(closingTag);\n\n // Removes leading and trailing line-breaks from within bb code elements, to prevent unwanted spacing.\n // This needs to be done before formatting Markdown, so the Markdown formatting doesn't interpret line breaks unexpectedly.\n parsedContent = parsedContent.replace(/^\\n+|\\n+$/g, '');\n\n // Simply escapes the square brackets of the BB-Code opening and closing tag.\n html =\n html.slice(0, indexOfFullMatch) +\n escapedOpeningTag +\n parsedContent +\n escapedClosingTag +\n html.slice(indexOfFullMatch + fullMatch.length);\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex =\n indexOfFullMatch +\n escapedOpeningTag.length +\n parsedContent.length +\n escapedClosingTag.length;\n } else {\n const indexOfFullMatch = html.indexOf(fullMatch);\n\n let htmlAfterTag = html.slice(indexOfFullMatch + fullMatch.length);\n\n // Removes leading line-break (ONE, NOT ALL) after block level elements, to prevent unwanted spacing.\n if (isBlockLevelTag) {\n htmlAfterTag = htmlAfterTag.replace(/^\\n/, '');\n }\n\n const isCustomTag = [...customBlockLevelTags, ...customInlineLevelTags].includes(Tag);\n const htmlTag = isCustomTag ? `${BB_CODE_HTML_TAG_PREFIX}${Tag}` : Tag;\n const openingHtmlTag = `<${htmlTag}${Object.entries(parameters).length > 0 ? ' ' : ''}${Object.entries(\n parameters,\n )\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')}>`;\n const closingHtmlTag = `</${htmlTag}>`;\n\n const element =\n Tag === 'img' ? openingHtmlTag : openingHtmlTag + parsedContent + closingHtmlTag;\n\n html = `${html.slice(0, indexOfFullMatch)}${element}${htmlAfterTag}`;\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex = indexOfFullMatch + element.length;\n }\n }\n\n return html;\n};\n\nexport const escapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('[', '&zwj;[&zwj;').replaceAll(']', '&zwj;]&zwj;');\n\nexport const unescapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('&zwj;[&zwj;', '[').replaceAll('&zwj;]&zwj;', ']');\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"formatBBCode.js","names":["_format","require","_findBBCode","BLOCK_LEVEL_TAGS","INLINE_LEVEL_TAGS","parseBBCode","text","options","customBlockLevelBBCodeTags","customBlockLevelTags","customInlineLevelBBCodeTags","customInlineLevelTags","justEscapeSquareBrackets","html","parseBehindIndex","length","htmlToParse","slice","firstBBCodeMatch","findFirstBBCode","content","fullMatch","parameters","index","openingTag","closingTag","Tag","tag","toLowerCase","isValidTag","includes","isBlockLevelTag","parsedContent","indexOfFullMatch","indexOf","escapedOpeningTag","escapeBBCodeSquareBrackets","escapedClosingTag","replace","htmlAfterTag","isCustomTag","htmlTag","BB_CODE_HTML_TAG_PREFIX","openingHtmlTag","Object","entries","map","key","value","join","closingHtmlTag","element","exports","replaceAll","unescapeBBCodeSquareBrackets"],"sources":["../../../../../src/utils/formatString/bb-code/formatBBCode.ts"],"sourcesContent":["import { BB_CODE_HTML_TAG_PREFIX } from '../../../constants/format';\nimport { findFirstBBCode } from './findBBCode';\n\nconst BLOCK_LEVEL_TAGS = ['center', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'];\nconst INLINE_LEVEL_TAGS = ['b', 'strong', 'i', 'em', 'u', 's', 'span', 'img'];\n\nexport interface ParseBBCodesOptions {\n customBlockLevelBBCodeTags?: string[];\n customInlineLevelBBCodeTags?: string[];\n}\n\ninterface ParseBBCodePrivateOptions extends ParseBBCodesOptions {\n justEscapeSquareBrackets?: boolean;\n}\n\n// Parses BB-Code to HTML recursively.\n// When justEscapeSquareBrackets is true, square brackets are escaped to prevent conflicts between markdown and BB Code.\n// In that case the function only escapes square brackets and doesn't remove line breaks.\nexport const parseBBCode = (text: string, options?: ParseBBCodePrivateOptions) => {\n const {\n customBlockLevelBBCodeTags: customBlockLevelTags = [],\n customInlineLevelBBCodeTags: customInlineLevelTags = [],\n justEscapeSquareBrackets = false,\n } = options || {};\n\n let html = text;\n\n // This index is used to keep track of the position in the html string that is being parsed.\n let parseBehindIndex = 0;\n\n while (parseBehindIndex < html.length) {\n const htmlToParse = html.slice(parseBehindIndex);\n\n const firstBBCodeMatch = findFirstBBCode(htmlToParse);\n\n // Stops parsing if no BB-Code is found.\n if (!firstBBCodeMatch) {\n return html;\n }\n\n const { content, fullMatch, parameters, index, openingTag, closingTag } = firstBBCodeMatch;\n\n const Tag = firstBBCodeMatch.tag.toLowerCase();\n const isValidTag = [\n ...BLOCK_LEVEL_TAGS,\n ...customBlockLevelTags,\n ...INLINE_LEVEL_TAGS,\n ...customInlineLevelTags,\n ].includes(Tag);\n const isBlockLevelTag = [...BLOCK_LEVEL_TAGS, ...customBlockLevelTags].includes(Tag);\n\n // Ignores tags that are not supported.\n if (!isValidTag) {\n // The parsing continues behind the first square bracket of the BB-Code tag.\n parseBehindIndex += index + 1;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Converts BB-Code tag's content before converting itself, because it may contain other BB-Codes.\n let parsedContent = parseBBCode(content, options);\n\n if (justEscapeSquareBrackets) {\n const indexOfFullMatch = html.indexOf(fullMatch);\n const escapedOpeningTag = escapeBBCodeSquareBrackets(openingTag);\n const escapedClosingTag = escapeBBCodeSquareBrackets(closingTag);\n\n // Removes leading and trailing line-breaks from within bb code elements, to prevent unwanted spacing.\n // This needs to be done before formatting Markdown, so the Markdown formatting doesn't interpret line breaks unexpectedly.\n parsedContent = parsedContent.replace(/^\\n+|\\n+$/g, '');\n\n // Simply escapes the square brackets of the BB-Code opening and closing tag.\n html =\n html.slice(0, indexOfFullMatch) +\n escapedOpeningTag +\n parsedContent +\n escapedClosingTag +\n html.slice(indexOfFullMatch + fullMatch.length);\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex =\n indexOfFullMatch +\n escapedOpeningTag.length +\n parsedContent.length +\n escapedClosingTag.length;\n } else {\n const indexOfFullMatch = html.indexOf(fullMatch);\n\n let htmlAfterTag = html.slice(indexOfFullMatch + fullMatch.length);\n\n // Removes leading line-break (ONE, NOT ALL) after block level elements, to prevent unwanted spacing.\n if (isBlockLevelTag) {\n htmlAfterTag = htmlAfterTag.replace(/^\\n/, '');\n }\n\n const isCustomTag = [...customBlockLevelTags, ...customInlineLevelTags].includes(Tag);\n const htmlTag = isCustomTag ? `${BB_CODE_HTML_TAG_PREFIX}${Tag}` : Tag;\n const openingHtmlTag = `<${htmlTag}${Object.entries(parameters).length > 0 ? ' ' : ''}${Object.entries(\n parameters,\n )\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')}>`;\n const closingHtmlTag = `</${htmlTag}>`;\n\n const element =\n Tag === 'img' ? openingHtmlTag : openingHtmlTag + parsedContent + closingHtmlTag;\n\n html = `${html.slice(0, indexOfFullMatch)}${element}${htmlAfterTag}`;\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex = indexOfFullMatch + element.length;\n }\n }\n\n return html;\n};\n\nexport const escapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('[', '&zwj;[&zwj;').replaceAll(']', '&zwj;]&zwj;');\n\nexport const unescapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('&zwj;[&zwj;', '[').replaceAll('&zwj;]&zwj;', ']');\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export const BB_CODE_HTML_TAG_PREFIX = 'bb-code-';
2
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","names":["BB_CODE_HTML_TAG_PREFIX"],"sources":["../../../src/constants/format.ts"],"sourcesContent":["export const BB_CODE_HTML_TAG_PREFIX = 'bb-code-';\n"],"mappings":"AAAA,OAAO,MAAMA,uBAAuB,GAAG,UAAU","ignoreList":[]}
package/lib/esm/index.js CHANGED
@@ -1,2 +1,3 @@
1
+ export { BB_CODE_HTML_TAG_PREFIX } from './constants/format';
1
2
  export { formatStringToHtml } from './utils/formatString/formatString';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["formatStringToHtml"],"sources":["../../src/index.ts"],"sourcesContent":["export { formatStringToHtml } from './utils/formatString/formatString';\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,mCAAmC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["BB_CODE_HTML_TAG_PREFIX","formatStringToHtml"],"sources":["../../src/index.ts"],"sourcesContent":["export { BB_CODE_HTML_TAG_PREFIX } from './constants/format';\nexport type { TableObject } from './types/format';\nexport { formatStringToHtml } from './utils/formatString/formatString';\n"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,oBAAoB;AAE5D,SAASC,kBAAkB,QAAQ,mCAAmC","ignoreList":[]}
@@ -1,4 +1,2 @@
1
1
  export const escapeHtmlInText = text => text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
2
- export const MESSAGE_CONVERSION_LINE_BREAK = '<br is-replaced-linebreak>';
3
- export const MESSAGE_CONVERSION_LINE_BREAK_ESCAPED = escapeHtmlInText(MESSAGE_CONVERSION_LINE_BREAK);
4
2
  //# sourceMappingURL=escape.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"escape.js","names":["escapeHtmlInText","text","replace","MESSAGE_CONVERSION_LINE_BREAK","MESSAGE_CONVERSION_LINE_BREAK_ESCAPED"],"sources":["../../../src/utils/escape.ts"],"sourcesContent":["export const escapeHtmlInText = (text: string): string =>\n text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\nexport const MESSAGE_CONVERSION_LINE_BREAK = '<br is-replaced-linebreak>';\nexport const MESSAGE_CONVERSION_LINE_BREAK_ESCAPED = escapeHtmlInText(\n MESSAGE_CONVERSION_LINE_BREAK,\n);\n"],"mappings":"AAAA,OAAO,MAAMA,gBAAgB,GAAIC,IAAY,IACzCA,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAEpD,OAAO,MAAMC,6BAA6B,GAAG,4BAA4B;AACzE,OAAO,MAAMC,qCAAqC,GAAGJ,gBAAgB,CACjEG,6BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"escape.js","names":["escapeHtmlInText","text","replace"],"sources":["../../../src/utils/escape.ts"],"sourcesContent":["export const escapeHtmlInText = (text: string): string =>\n text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n"],"mappings":"AAAA,OAAO,MAAMA,gBAAgB,GAAIC,IAAY,IACzCA,IAAI,CAACC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
+ import { BB_CODE_HTML_TAG_PREFIX } from '../../../constants/format';
1
2
  import { findFirstBBCode } from './findBBCode';
2
- const BB_CODE_HTML_TAG_PREFIX = 'bb-code-';
3
3
  const BLOCK_LEVEL_TAGS = ['center', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'];
4
4
  const INLINE_LEVEL_TAGS = ['b', 'strong', 'i', 'em', 'u', 's', 'span', 'img'];
5
5
  // Parses BB-Code to HTML recursively.
@@ -1 +1 @@
1
- {"version":3,"file":"formatBBCode.js","names":["findFirstBBCode","BB_CODE_HTML_TAG_PREFIX","BLOCK_LEVEL_TAGS","INLINE_LEVEL_TAGS","parseBBCode","text","options","customBlockLevelBBCodeTags","customBlockLevelTags","customInlineLevelBBCodeTags","customInlineLevelTags","justEscapeSquareBrackets","html","parseBehindIndex","length","htmlToParse","slice","firstBBCodeMatch","content","fullMatch","parameters","index","openingTag","closingTag","Tag","tag","toLowerCase","isValidTag","includes","isBlockLevelTag","parsedContent","indexOfFullMatch","indexOf","escapedOpeningTag","escapeBBCodeSquareBrackets","escapedClosingTag","replace","htmlAfterTag","isCustomTag","htmlTag","openingHtmlTag","Object","entries","map","_ref","key","value","join","closingHtmlTag","element","replaceAll","unescapeBBCodeSquareBrackets"],"sources":["../../../../../src/utils/formatString/bb-code/formatBBCode.ts"],"sourcesContent":["import { findFirstBBCode } from './findBBCode';\n\nconst BB_CODE_HTML_TAG_PREFIX = 'bb-code-';\n\nconst BLOCK_LEVEL_TAGS = ['center', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'];\nconst INLINE_LEVEL_TAGS = ['b', 'strong', 'i', 'em', 'u', 's', 'span', 'img'];\n\nexport interface ParseBBCodesOptions {\n customBlockLevelBBCodeTags?: string[];\n customInlineLevelBBCodeTags?: string[];\n justEscapeSquareBrackets?: boolean;\n}\n\n// Parses BB-Code to HTML recursively.\n// When justEscapeSquareBrackets is true, square brackets are escaped to prevent conflicts between markdown and BB Code.\n// In that case the function only escapes square brackets and doesn't remove line breaks.\nexport const parseBBCode = (text: string, options?: ParseBBCodesOptions) => {\n const {\n customBlockLevelBBCodeTags: customBlockLevelTags = [],\n customInlineLevelBBCodeTags: customInlineLevelTags = [],\n justEscapeSquareBrackets = false,\n } = options || {};\n\n let html = text;\n\n // This index is used to keep track of the position in the html string that is being parsed.\n let parseBehindIndex = 0;\n\n while (parseBehindIndex < html.length) {\n const htmlToParse = html.slice(parseBehindIndex);\n\n const firstBBCodeMatch = findFirstBBCode(htmlToParse);\n\n // Stops parsing if no BB-Code is found.\n if (!firstBBCodeMatch) {\n return html;\n }\n\n const { content, fullMatch, parameters, index, openingTag, closingTag } = firstBBCodeMatch;\n\n const Tag = firstBBCodeMatch.tag.toLowerCase();\n const isValidTag = [\n ...BLOCK_LEVEL_TAGS,\n ...customBlockLevelTags,\n ...INLINE_LEVEL_TAGS,\n ...customInlineLevelTags,\n ].includes(Tag);\n const isBlockLevelTag = [...BLOCK_LEVEL_TAGS, ...customBlockLevelTags].includes(Tag);\n\n // Ignores tags that are not supported.\n if (!isValidTag) {\n // The parsing continues behind the first square bracket of the BB-Code tag.\n parseBehindIndex += index + 1;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Converts BB-Code tag's content before converting itself, because it may contain other BB-Codes.\n let parsedContent = parseBBCode(content, options);\n\n if (justEscapeSquareBrackets) {\n const indexOfFullMatch = html.indexOf(fullMatch);\n const escapedOpeningTag = escapeBBCodeSquareBrackets(openingTag);\n const escapedClosingTag = escapeBBCodeSquareBrackets(closingTag);\n\n // Removes leading and trailing line-breaks from within bb code elements, to prevent unwanted spacing.\n // This needs to be done before formatting Markdown, so the Markdown formatting doesn't interpret line breaks unexpectedly.\n parsedContent = parsedContent.replace(/^\\n+|\\n+$/g, '');\n\n // Simply escapes the square brackets of the BB-Code opening and closing tag.\n html =\n html.slice(0, indexOfFullMatch) +\n escapedOpeningTag +\n parsedContent +\n escapedClosingTag +\n html.slice(indexOfFullMatch + fullMatch.length);\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex =\n indexOfFullMatch +\n escapedOpeningTag.length +\n parsedContent.length +\n escapedClosingTag.length;\n } else {\n const indexOfFullMatch = html.indexOf(fullMatch);\n\n let htmlAfterTag = html.slice(indexOfFullMatch + fullMatch.length);\n\n // Removes leading line-break (ONE, NOT ALL) after block level elements, to prevent unwanted spacing.\n if (isBlockLevelTag) {\n htmlAfterTag = htmlAfterTag.replace(/^\\n/, '');\n }\n\n const isCustomTag = [...customBlockLevelTags, ...customInlineLevelTags].includes(Tag);\n const htmlTag = isCustomTag ? `${BB_CODE_HTML_TAG_PREFIX}${Tag}` : Tag;\n const openingHtmlTag = `<${htmlTag}${Object.entries(parameters).length > 0 ? ' ' : ''}${Object.entries(\n parameters,\n )\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')}>`;\n const closingHtmlTag = `</${htmlTag}>`;\n\n const element =\n Tag === 'img' ? openingHtmlTag : openingHtmlTag + parsedContent + closingHtmlTag;\n\n html = `${html.slice(0, indexOfFullMatch)}${element}${htmlAfterTag}`;\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex = indexOfFullMatch + element.length;\n }\n }\n\n return html;\n};\n\nexport const escapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('[', '&zwj;[&zwj;').replaceAll(']', '&zwj;]&zwj;');\n\nexport const unescapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('&zwj;[&zwj;', '[').replaceAll('&zwj;]&zwj;', ']');\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"formatBBCode.js","names":["BB_CODE_HTML_TAG_PREFIX","findFirstBBCode","BLOCK_LEVEL_TAGS","INLINE_LEVEL_TAGS","parseBBCode","text","options","customBlockLevelBBCodeTags","customBlockLevelTags","customInlineLevelBBCodeTags","customInlineLevelTags","justEscapeSquareBrackets","html","parseBehindIndex","length","htmlToParse","slice","firstBBCodeMatch","content","fullMatch","parameters","index","openingTag","closingTag","Tag","tag","toLowerCase","isValidTag","includes","isBlockLevelTag","parsedContent","indexOfFullMatch","indexOf","escapedOpeningTag","escapeBBCodeSquareBrackets","escapedClosingTag","replace","htmlAfterTag","isCustomTag","htmlTag","openingHtmlTag","Object","entries","map","_ref","key","value","join","closingHtmlTag","element","replaceAll","unescapeBBCodeSquareBrackets"],"sources":["../../../../../src/utils/formatString/bb-code/formatBBCode.ts"],"sourcesContent":["import { BB_CODE_HTML_TAG_PREFIX } from '../../../constants/format';\nimport { findFirstBBCode } from './findBBCode';\n\nconst BLOCK_LEVEL_TAGS = ['center', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p'];\nconst INLINE_LEVEL_TAGS = ['b', 'strong', 'i', 'em', 'u', 's', 'span', 'img'];\n\nexport interface ParseBBCodesOptions {\n customBlockLevelBBCodeTags?: string[];\n customInlineLevelBBCodeTags?: string[];\n}\n\ninterface ParseBBCodePrivateOptions extends ParseBBCodesOptions {\n justEscapeSquareBrackets?: boolean;\n}\n\n// Parses BB-Code to HTML recursively.\n// When justEscapeSquareBrackets is true, square brackets are escaped to prevent conflicts between markdown and BB Code.\n// In that case the function only escapes square brackets and doesn't remove line breaks.\nexport const parseBBCode = (text: string, options?: ParseBBCodePrivateOptions) => {\n const {\n customBlockLevelBBCodeTags: customBlockLevelTags = [],\n customInlineLevelBBCodeTags: customInlineLevelTags = [],\n justEscapeSquareBrackets = false,\n } = options || {};\n\n let html = text;\n\n // This index is used to keep track of the position in the html string that is being parsed.\n let parseBehindIndex = 0;\n\n while (parseBehindIndex < html.length) {\n const htmlToParse = html.slice(parseBehindIndex);\n\n const firstBBCodeMatch = findFirstBBCode(htmlToParse);\n\n // Stops parsing if no BB-Code is found.\n if (!firstBBCodeMatch) {\n return html;\n }\n\n const { content, fullMatch, parameters, index, openingTag, closingTag } = firstBBCodeMatch;\n\n const Tag = firstBBCodeMatch.tag.toLowerCase();\n const isValidTag = [\n ...BLOCK_LEVEL_TAGS,\n ...customBlockLevelTags,\n ...INLINE_LEVEL_TAGS,\n ...customInlineLevelTags,\n ].includes(Tag);\n const isBlockLevelTag = [...BLOCK_LEVEL_TAGS, ...customBlockLevelTags].includes(Tag);\n\n // Ignores tags that are not supported.\n if (!isValidTag) {\n // The parsing continues behind the first square bracket of the BB-Code tag.\n parseBehindIndex += index + 1;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Converts BB-Code tag's content before converting itself, because it may contain other BB-Codes.\n let parsedContent = parseBBCode(content, options);\n\n if (justEscapeSquareBrackets) {\n const indexOfFullMatch = html.indexOf(fullMatch);\n const escapedOpeningTag = escapeBBCodeSquareBrackets(openingTag);\n const escapedClosingTag = escapeBBCodeSquareBrackets(closingTag);\n\n // Removes leading and trailing line-breaks from within bb code elements, to prevent unwanted spacing.\n // This needs to be done before formatting Markdown, so the Markdown formatting doesn't interpret line breaks unexpectedly.\n parsedContent = parsedContent.replace(/^\\n+|\\n+$/g, '');\n\n // Simply escapes the square brackets of the BB-Code opening and closing tag.\n html =\n html.slice(0, indexOfFullMatch) +\n escapedOpeningTag +\n parsedContent +\n escapedClosingTag +\n html.slice(indexOfFullMatch + fullMatch.length);\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex =\n indexOfFullMatch +\n escapedOpeningTag.length +\n parsedContent.length +\n escapedClosingTag.length;\n } else {\n const indexOfFullMatch = html.indexOf(fullMatch);\n\n let htmlAfterTag = html.slice(indexOfFullMatch + fullMatch.length);\n\n // Removes leading line-break (ONE, NOT ALL) after block level elements, to prevent unwanted spacing.\n if (isBlockLevelTag) {\n htmlAfterTag = htmlAfterTag.replace(/^\\n/, '');\n }\n\n const isCustomTag = [...customBlockLevelTags, ...customInlineLevelTags].includes(Tag);\n const htmlTag = isCustomTag ? `${BB_CODE_HTML_TAG_PREFIX}${Tag}` : Tag;\n const openingHtmlTag = `<${htmlTag}${Object.entries(parameters).length > 0 ? ' ' : ''}${Object.entries(\n parameters,\n )\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')}>`;\n const closingHtmlTag = `</${htmlTag}>`;\n\n const element =\n Tag === 'img' ? openingHtmlTag : openingHtmlTag + parsedContent + closingHtmlTag;\n\n html = `${html.slice(0, indexOfFullMatch)}${element}${htmlAfterTag}`;\n\n // Continues parsing behind the parsed bb-code.\n parseBehindIndex = indexOfFullMatch + element.length;\n }\n }\n\n return html;\n};\n\nexport const escapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('[', '&zwj;[&zwj;').replaceAll(']', '&zwj;]&zwj;');\n\nexport const unescapeBBCodeSquareBrackets = (text: string) =>\n text.replaceAll('&zwj;[&zwj;', '[').replaceAll('&zwj;]&zwj;', ']');\n"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,2BAA2B;AACnE,SAASC,eAAe,QAAQ,cAAc;AAE9C,MAAMC,gBAAgB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;AAC9F,MAAMC,iBAAiB,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;AAW7E;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGA,CAACC,IAAY,EAAEC,OAAmC,KAAK;EAC9E,MAAM;IACFC,0BAA0B,EAAEC,oBAAoB,GAAG,EAAE;IACrDC,2BAA2B,EAAEC,qBAAqB,GAAG,EAAE;IACvDC,wBAAwB,GAAG;EAC/B,CAAC,GAAGL,OAAO,IAAI,CAAC,CAAC;EAEjB,IAAIM,IAAI,GAAGP,IAAI;;EAEf;EACA,IAAIQ,gBAAgB,GAAG,CAAC;EAExB,OAAOA,gBAAgB,GAAGD,IAAI,CAACE,MAAM,EAAE;IACnC,MAAMC,WAAW,GAAGH,IAAI,CAACI,KAAK,CAACH,gBAAgB,CAAC;IAEhD,MAAMI,gBAAgB,GAAGhB,eAAe,CAACc,WAAW,CAAC;;IAErD;IACA,IAAI,CAACE,gBAAgB,EAAE;MACnB,OAAOL,IAAI;IACf;IAEA,MAAM;MAAEM,OAAO;MAAEC,SAAS;MAAEC,UAAU;MAAEC,KAAK;MAAEC,UAAU;MAAEC;IAAW,CAAC,GAAGN,gBAAgB;IAE1F,MAAMO,GAAG,GAAGP,gBAAgB,CAACQ,GAAG,CAACC,WAAW,CAAC,CAAC;IAC9C,MAAMC,UAAU,GAAG,CACf,GAAGzB,gBAAgB,EACnB,GAAGM,oBAAoB,EACvB,GAAGL,iBAAiB,EACpB,GAAGO,qBAAqB,CAC3B,CAACkB,QAAQ,CAACJ,GAAG,CAAC;IACf,MAAMK,eAAe,GAAG,CAAC,GAAG3B,gBAAgB,EAAE,GAAGM,oBAAoB,CAAC,CAACoB,QAAQ,CAACJ,GAAG,CAAC;;IAEpF;IACA,IAAI,CAACG,UAAU,EAAE;MACb;MACAd,gBAAgB,IAAIQ,KAAK,GAAG,CAAC;MAC7B;MACA;IACJ;;IAEA;IACA,IAAIS,aAAa,GAAG1B,WAAW,CAACc,OAAO,EAAEZ,OAAO,CAAC;IAEjD,IAAIK,wBAAwB,EAAE;MAC1B,MAAMoB,gBAAgB,GAAGnB,IAAI,CAACoB,OAAO,CAACb,SAAS,CAAC;MAChD,MAAMc,iBAAiB,GAAGC,0BAA0B,CAACZ,UAAU,CAAC;MAChE,MAAMa,iBAAiB,GAAGD,0BAA0B,CAACX,UAAU,CAAC;;MAEhE;MACA;MACAO,aAAa,GAAGA,aAAa,CAACM,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;;MAEvD;MACAxB,IAAI,GACAA,IAAI,CAACI,KAAK,CAAC,CAAC,EAAEe,gBAAgB,CAAC,GAC/BE,iBAAiB,GACjBH,aAAa,GACbK,iBAAiB,GACjBvB,IAAI,CAACI,KAAK,CAACe,gBAAgB,GAAGZ,SAAS,CAACL,MAAM,CAAC;;MAEnD;MACAD,gBAAgB,GACZkB,gBAAgB,GAChBE,iBAAiB,CAACnB,MAAM,GACxBgB,aAAa,CAAChB,MAAM,GACpBqB,iBAAiB,CAACrB,MAAM;IAChC,CAAC,MAAM;MACH,MAAMiB,gBAAgB,GAAGnB,IAAI,CAACoB,OAAO,CAACb,SAAS,CAAC;MAEhD,IAAIkB,YAAY,GAAGzB,IAAI,CAACI,KAAK,CAACe,gBAAgB,GAAGZ,SAAS,CAACL,MAAM,CAAC;;MAElE;MACA,IAAIe,eAAe,EAAE;QACjBQ,YAAY,GAAGA,YAAY,CAACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;MAClD;MAEA,MAAME,WAAW,GAAG,CAAC,GAAG9B,oBAAoB,EAAE,GAAGE,qBAAqB,CAAC,CAACkB,QAAQ,CAACJ,GAAG,CAAC;MACrF,MAAMe,OAAO,GAAGD,WAAW,GAAG,GAAGtC,uBAAuB,GAAGwB,GAAG,EAAE,GAAGA,GAAG;MACtE,MAAMgB,cAAc,GAAG,IAAID,OAAO,GAAGE,MAAM,CAACC,OAAO,CAACtB,UAAU,CAAC,CAACN,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG2B,MAAM,CAACC,OAAO,CAClGtB,UACJ,CAAC,CACIuB,GAAG,CAACC,IAAA;QAAA,IAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAAF,IAAA;QAAA,OAAK,GAAGC,GAAG,KAAKC,KAAK,GAAG;MAAA,EAAC,CAC1CC,IAAI,CAAC,GAAG,CAAC,GAAG;MACjB,MAAMC,cAAc,GAAG,KAAKT,OAAO,GAAG;MAEtC,MAAMU,OAAO,GACTzB,GAAG,KAAK,KAAK,GAAGgB,cAAc,GAAGA,cAAc,GAAGV,aAAa,GAAGkB,cAAc;MAEpFpC,IAAI,GAAG,GAAGA,IAAI,CAACI,KAAK,CAAC,CAAC,EAAEe,gBAAgB,CAAC,GAAGkB,OAAO,GAAGZ,YAAY,EAAE;;MAEpE;MACAxB,gBAAgB,GAAGkB,gBAAgB,GAAGkB,OAAO,CAACnC,MAAM;IACxD;EACJ;EAEA,OAAOF,IAAI;AACf,CAAC;AAED,OAAO,MAAMsB,0BAA0B,GAAI7B,IAAY,IACnDA,IAAI,CAAC6C,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAACA,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC;AAEtE,OAAO,MAAMC,4BAA4B,GAAI9C,IAAY,IACrDA,IAAI,CAAC6C,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,CAACA,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const BB_CODE_HTML_TAG_PREFIX = "bb-code-";
@@ -1 +1,3 @@
1
+ export { BB_CODE_HTML_TAG_PREFIX } from './constants/format';
2
+ export type { TableObject } from './types/format';
1
3
  export { formatStringToHtml } from './utils/formatString/formatString';
@@ -1,3 +1 @@
1
1
  export declare const escapeHtmlInText: (text: string) => string;
2
- export declare const MESSAGE_CONVERSION_LINE_BREAK = "<br is-replaced-linebreak>";
3
- export declare const MESSAGE_CONVERSION_LINE_BREAK_ESCAPED: string;
@@ -1,8 +1,11 @@
1
1
  export interface ParseBBCodesOptions {
2
2
  customBlockLevelBBCodeTags?: string[];
3
3
  customInlineLevelBBCodeTags?: string[];
4
+ }
5
+ interface ParseBBCodePrivateOptions extends ParseBBCodesOptions {
4
6
  justEscapeSquareBrackets?: boolean;
5
7
  }
6
- export declare const parseBBCode: (text: string, options?: ParseBBCodesOptions) => string;
8
+ export declare const parseBBCode: (text: string, options?: ParseBBCodePrivateOptions) => string;
7
9
  export declare const escapeBBCodeSquareBrackets: (text: string) => string;
8
10
  export declare const unescapeBBCodeSquareBrackets: (text: string) => string;
11
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/format",
3
- "version": "5.0.0-beta.674",
3
+ "version": "5.0.0-beta.682",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "0a809ee9a5e3883ddeb7e1d3ab6c8805e0665693"
74
+ "gitHead": "f70fcf3c45699b8c5ad2c439112cc1aada012553"
75
75
  }