refac
This commit is contained in:
+29
-23
@@ -32,6 +32,18 @@ function escapeRegExp(string: string): string {
|
|||||||
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace tokens outside code blocks only
|
||||||
|
export const replaceOutsideCode = (content: string, replacer: (str: string) => string) => {
|
||||||
|
return content
|
||||||
|
.split(/(```[\s\S]*?```|`[\s\S]*?`)/)
|
||||||
|
.map((segment) => {
|
||||||
|
return segment.startsWith('```') || segment.startsWith('`')
|
||||||
|
? segment
|
||||||
|
: replacer(segment);
|
||||||
|
})
|
||||||
|
.join('');
|
||||||
|
};
|
||||||
|
|
||||||
export const replaceTokens = (content, char, user) => {
|
export const replaceTokens = (content, char, user) => {
|
||||||
const tokens = [
|
const tokens = [
|
||||||
{ regex: /{{char}}/gi, replacement: char },
|
{ regex: /{{char}}/gi, replacement: char },
|
||||||
@@ -47,20 +59,8 @@ export const replaceTokens = (content, char, user) => {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
// Replace tokens outside code blocks only
|
|
||||||
const processOutsideCodeBlocks = (text, replacementFn) => {
|
|
||||||
return text
|
|
||||||
.split(/(```[\s\S]*?```|`[\s\S]*?`)/)
|
|
||||||
.map((segment) => {
|
|
||||||
return segment.startsWith('```') || segment.startsWith('`')
|
|
||||||
? segment
|
|
||||||
: replacementFn(segment);
|
|
||||||
})
|
|
||||||
.join('');
|
|
||||||
};
|
|
||||||
|
|
||||||
// Apply replacements
|
// Apply replacements
|
||||||
content = processOutsideCodeBlocks(content, (segment) => {
|
content = replaceOutsideCode(content, (segment) => {
|
||||||
tokens.forEach(({ regex, replacement }) => {
|
tokens.forEach(({ regex, replacement }) => {
|
||||||
if (replacement !== undefined && replacement !== null) {
|
if (replacement !== undefined && replacement !== null) {
|
||||||
segment = segment.replace(regex, replacement);
|
segment = segment.replace(regex, replacement);
|
||||||
@@ -841,19 +841,21 @@ export const cleanText = (content: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const removeDetails = (content, types) => {
|
export const removeDetails = (content, types) => {
|
||||||
for (const type of types) {
|
return replaceOutsideCode(content, (segment) => {
|
||||||
content = content.replace(
|
for (const type of types) {
|
||||||
new RegExp(`<details\\s+type="${type}"[^>]*>.*?<\\/details>`, 'gis'),
|
segment = segment.replace(
|
||||||
''
|
new RegExp(`<details\\s+type="${type}"[^>]*>.*?<\\/details>`, 'gis'),
|
||||||
);
|
''
|
||||||
}
|
);
|
||||||
|
}
|
||||||
return content;
|
return segment;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const removeAllDetails = (content) => {
|
export const removeAllDetails = (content) => {
|
||||||
content = content.replace(/<details[^>]*>.*?<\/details>/gis, '');
|
return replaceOutsideCode(content, (segment) => {
|
||||||
return content;
|
return segment.replace(/<details[^>]*>.*?<\/details>/gis, '');
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const processDetails = (content) => {
|
export const processDetails = (content) => {
|
||||||
@@ -1655,6 +1657,10 @@ export const getCodeBlockContents = (content: string): object => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
// Remove details tags from the content to check if there are any code blocks
|
||||||
|
// hidden in the details tags (e.g. reasoning, etc.)
|
||||||
|
content = removeAllDetails(content);
|
||||||
|
|
||||||
const inlineHtml = content.match(/<html>[\s\S]*?<\/html>/gi);
|
const inlineHtml = content.match(/<html>[\s\S]*?<\/html>/gi);
|
||||||
const inlineCss = content.match(/<style>[\s\S]*?<\/style>/gi);
|
const inlineCss = content.match(/<style>[\s\S]*?<\/style>/gi);
|
||||||
const inlineJs = content.match(/<script>[\s\S]*?<\/script>/gi);
|
const inlineJs = content.match(/<script>[\s\S]*?<\/script>/gi);
|
||||||
|
|||||||
Reference in New Issue
Block a user