@stackql/provider-utils 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/docgen/helpers.js +31 -5
package/package.json
CHANGED
package/src/docgen/helpers.js
CHANGED
|
@@ -25,22 +25,48 @@ export function getIndefiniteArticle(resourceName) {
|
|
|
25
25
|
|
|
26
26
|
export function sanitizeHtml(text) {
|
|
27
27
|
return text
|
|
28
|
-
// Replace "<" unless it's followed by "a", "/a", "b", "/b", "strong"
|
|
28
|
+
// Replace "<" unless it's followed by "a", "/a", "b", "/b", "strong"
|
|
29
29
|
.replace(/<(?!\/?(?:a|b|strong)\b)/gi, '<')
|
|
30
30
|
// Replace ">" unless it's preceded by "</a", "<a ...>", "</b", "<b ...>", "</strong", or "<strong ...>"
|
|
31
31
|
.replace(/(?<!<\/?(?:a|b|strong)[^>]*)>/gi, '>')
|
|
32
32
|
// Add quotes around unquoted href values (within <a ...>)
|
|
33
33
|
.replace(/(<a\b[^>]*?)href=([^"' \t\r\n>]+)/gi, '$1href="$2"')
|
|
34
|
-
//
|
|
35
|
-
.replace(
|
|
34
|
+
// Special handling for code tags - remove them if they contain * or _
|
|
35
|
+
.replace(/<code>([\s\S]*?)<\/code>/gi, (match, content) => {
|
|
36
|
+
if (content.includes('*') || content.includes('_')) {
|
|
37
|
+
// If code block has problematic characters, remove the code tags
|
|
38
|
+
// and escape the special characters
|
|
39
|
+
return content
|
|
40
|
+
.replace(/\*/g, '*') // Escape asterisks
|
|
41
|
+
.replace(/_/g, '_') // Escape underscores
|
|
42
|
+
.replace(/\[/g, '[') // Escape brackets
|
|
43
|
+
.replace(/\]/g, ']')
|
|
44
|
+
.replace(/\(/g, '(') // Escape parentheses
|
|
45
|
+
.replace(/\)/g, ')');
|
|
46
|
+
}
|
|
47
|
+
// Otherwise keep the code tags
|
|
48
|
+
return match;
|
|
49
|
+
})
|
|
50
|
+
// Wrap backticked text with <code> but only if it doesn't contain * or _
|
|
51
|
+
.replace(/`([^`]+)`/g, (match, content) => {
|
|
52
|
+
if (content.includes('*') || content.includes('_')) {
|
|
53
|
+
// If backticked content has problematic characters, don't add code tags
|
|
54
|
+
return content
|
|
55
|
+
.replace(/\*/g, '*')
|
|
56
|
+
.replace(/_/g, '_')
|
|
57
|
+
.replace(/\[/g, '[')
|
|
58
|
+
.replace(/\]/g, ']')
|
|
59
|
+
.replace(/\(/g, '(')
|
|
60
|
+
.replace(/\)/g, ')');
|
|
61
|
+
}
|
|
62
|
+
return `<code>${content}</code>`;
|
|
63
|
+
})
|
|
36
64
|
// Replace { and }
|
|
37
65
|
.replace(/{/g, '{')
|
|
38
66
|
.replace(/}/g, '}')
|
|
39
67
|
// Escape backslash
|
|
40
68
|
.replace(/\\/g, '\\\\')
|
|
41
69
|
// Replace " with " UNLESS inside <code>...</code> OR inside an href="...".
|
|
42
|
-
// The alternation matches either a whole <code>...</code> block, an href="...",
|
|
43
|
-
// or a bare " to replace.
|
|
44
70
|
.replace(/(<code>[\s\S]*?<\/code>)|(\bhref="[^"]*")|"/gi, (m, code, href) => {
|
|
45
71
|
if (code) return code; // keep code blocks untouched
|
|
46
72
|
if (href) return href; // keep href="..." quotes untouched
|