{ "version": 3, "sources": ["../src/diagrams/common/common.ts", "../src/commonDb.ts"], "sourcesContent": ["import DOMPurify from 'dompurify';\nimport { MermaidConfig } from '../../config.type.js';\n\nexport const lineBreakRegex = //gi;\n\n/**\n * Gets the rows of lines in a string\n *\n * @param s - The string to check the lines for\n * @returns The rows in that string\n */\nexport const getRows = (s?: string): string[] => {\n if (!s) {\n return [''];\n }\n const str = breakToPlaceholder(s).replace(/\\\\n/g, '#br#');\n return str.split('#br#');\n};\n\n/**\n * Removes script tags from a text\n *\n * @param txt - The text to sanitize\n * @returns The safer text\n */\nexport const removeScript = (txt: string): string => {\n return DOMPurify.sanitize(txt);\n};\n\nconst sanitizeMore = (text: string, config: MermaidConfig) => {\n if (config.flowchart?.htmlLabels !== false) {\n const level = config.securityLevel;\n if (level === 'antiscript' || level === 'strict') {\n text = removeScript(text);\n } else if (level !== 'loose') {\n text = breakToPlaceholder(text);\n text = text.replace(//g, '>');\n text = text.replace(/=/g, '=');\n text = placeholderToBreak(text);\n }\n }\n return text;\n};\n\nexport const sanitizeText = (text: string, config: MermaidConfig): string => {\n if (!text) {\n return text;\n }\n if (config.dompurifyConfig) {\n text = DOMPurify.sanitize(sanitizeMore(text, config), config.dompurifyConfig).toString();\n } else {\n text = DOMPurify.sanitize(sanitizeMore(text, config), {\n FORBID_TAGS: ['style'],\n }).toString();\n }\n return text;\n};\n\nexport const sanitizeTextOrArray = (\n a: string | string[] | string[][],\n config: MermaidConfig\n): string | string[] => {\n if (typeof a === 'string') {\n return sanitizeText(a, config);\n }\n // TODO: Refactor to avoid flat.\n return a.flat().map((x: string) => sanitizeText(x, config));\n};\n\n/**\n * Whether or not a text has any line breaks\n *\n * @param text - The text to test\n * @returns Whether or not the text has breaks\n */\nexport const hasBreaks = (text: string): boolean => {\n return lineBreakRegex.test(text);\n};\n\n/**\n * Splits on
tags\n *\n * @param text - Text to split\n * @returns List of lines as strings\n */\nexport const splitBreaks = (text: string): string[] => {\n return text.split(lineBreakRegex);\n};\n\n/**\n * Converts placeholders to line breaks in HTML\n *\n * @param s - HTML with placeholders\n * @returns HTML with breaks instead of placeholders\n */\nconst placeholderToBreak = (s: string): string => {\n return s.replace(/#br#/g, '
');\n};\n\n/**\n * Opposite of `placeholderToBreak`, converts breaks to placeholders\n *\n * @param s - HTML string\n * @returns String with placeholders\n */\nconst breakToPlaceholder = (s: string): string => {\n return s.replace(lineBreakRegex, '#br#');\n};\n\n/**\n * Gets the current URL\n *\n * @param useAbsolute - Whether to return the absolute URL or not\n * @returns The current URL\n */\nconst getUrl = (useAbsolute: boolean): string => {\n let url = '';\n if (useAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search;\n url = url.replaceAll(/\\(/g, '\\\\(');\n url = url.replaceAll(/\\)/g, '\\\\)');\n }\n\n return url;\n};\n\n/**\n * Converts a string/boolean into a boolean\n *\n * @param val - String or boolean to convert\n * @returns The result from the input\n */\nexport const evaluate = (val?: string | boolean): boolean =>\n val === false || ['false', 'null', '0'].includes(String(val).trim().toLowerCase()) ? false : true;\n\n/**\n * Wrapper around Math.max which removes non-numeric values\n * Returns the larger of a set of supplied numeric expressions.\n * @param values - Numeric expressions to be evaluated\n * @returns The smaller value\n */\nexport const getMax = function (...values: number[]): number {\n const newValues: number[] = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.max(...newValues);\n};\n\n/**\n * Wrapper around Math.min which removes non-numeric values\n * Returns the smaller of a set of supplied numeric expressions.\n * @param values - Numeric expressions to be evaluated\n * @returns The smaller value\n */\nexport const getMin = function (...values: number[]): number {\n const newValues: number[] = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.min(...newValues);\n};\n\n/**\n * Makes generics in typescript syntax\n *\n * @example\n * Array of array of strings in typescript syntax\n *\n * ```js\n * // returns \"Array>\"\n * parseGenericTypes('Array~Array~string~~');\n * ```\n * @param text - The text to convert\n * @returns The converted string\n */\nexport const parseGenericTypes = function (text: string): string {\n let cleanedText = text;\n\n if (text.split('~').length - 1 >= 2) {\n let newCleanedText = cleanedText;\n\n // use a do...while loop instead of replaceAll to detect recursion\n // e.g. Array~Array~T~~\n do {\n cleanedText = newCleanedText;\n newCleanedText = cleanedText.replace(/~([^\\s,:;]+)~/, '<$1>');\n } while (newCleanedText != cleanedText);\n\n return parseGenericTypes(newCleanedText);\n } else {\n return cleanedText;\n }\n};\n\nexport default {\n getRows,\n sanitizeText,\n sanitizeTextOrArray,\n hasBreaks,\n splitBreaks,\n lineBreakRegex,\n removeScript,\n getUrl,\n evaluate,\n getMax,\n getMin,\n};\n", "import { sanitizeText as _sanitizeText } from './diagrams/common/common.js';\nimport { getConfig } from './config.js';\nlet title = '';\nlet diagramTitle = '';\nlet description = '';\n\nconst sanitizeText = (txt: string): string => _sanitizeText(txt, getConfig());\n\nexport const clear = function (): void {\n title = '';\n description = '';\n diagramTitle = '';\n};\n\nexport const setAccTitle = function (txt: string): void {\n title = sanitizeText(txt).replace(/^\\s+/g, '');\n};\n\nexport const getAccTitle = function (): string {\n return title || diagramTitle;\n};\n\nexport const setAccDescription = function (txt: string): void {\n description = sanitizeText(txt).replace(/\\n\\s+/g, '\\n');\n};\n\nexport const getAccDescription = function (): string {\n return description;\n};\n\nexport const setDiagramTitle = function (txt: string): void {\n diagramTitle = sanitizeText(txt);\n};\n\nexport const getDiagramTitle = function (): string {\n return diagramTitle;\n};\n\nexport default {\n getAccTitle,\n setAccTitle,\n getDiagramTitle,\n setDiagramTitle,\n getAccDescription,\n setAccDescription,\n clear,\n};\n"], "mappings": "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", "names": ["DOMPurify", "lineBreakRegex", "getRows", "__name", "s", "breakToPlaceholder", "removeScript", "txt", "DOMPurify", "sanitizeMore", "text", "config", "level", "placeholderToBreak", "sanitizeText", "sanitizeTextOrArray", "a", "x", "hasBreaks", "splitBreaks", "getUrl", "useAbsolute", "url", "evaluate", "val", "getMax", "values", "newValues", "value", "getMin", "parseGenericTypes", "cleanedText", "newCleanedText", "common_default", "commonDb_exports", "__export", "clear", "commonDb_default", "getAccDescription", "getAccTitle", "getDiagramTitle", "setAccDescription", "setAccTitle", "setDiagramTitle", "title", "diagramTitle", "description", "sanitizeText", "__name", "txt", "getConfig", "clear", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "setDiagramTitle", "getDiagramTitle", "commonDb_default"] }