Files
LearnNode/node-course/node_modules/@eslint/markdown/dist/util.js
T
2026-08-06 12:00:39 +10:00

59 lines
2.1 KiB
JavaScript

/**
* @fileoverview Utility Library
* @author Nicholas C. Zakas
*/
//-----------------------------------------------------------------------------
// Regex Patterns
//-----------------------------------------------------------------------------
/**
* Line ending pattern to match all line endings (CRLF, CR, LF). (CommonMark spec)
* @see https://spec.commonmark.org/0.31.2/#line-ending
*/
export const lineEndingPattern = /\r\n|[\r\n]/u;
/**
* CommonMark does not allow any white space between the brackets in a reference link.
* If that pattern is detected, then it's treated as text and not as a link. This pattern
* is used to detect that situation.
*/
export const illegalShorthandTailPattern = /\]\[\s+\]$/u;
/**
* Regular expression to match HTML comments, including multiline comments.
*/
export const htmlCommentPattern = /<!--[\s\S]*?-->/gu;
//-----------------------------------------------------------------------------
// Helpers
//-----------------------------------------------------------------------------
/**
* Checks if a frontmatter block contains a title matching the given pattern.
* @param {string} value The frontmatter content.
* @param {RegExp|null} pattern The pattern to match against.
* @returns {boolean} Whether a title was found.
*/
export function frontmatterHasTitle(value, pattern) {
if (!pattern) {
return false;
}
const lines = value.split(lineEndingPattern);
for (const line of lines) {
if (pattern.test(line)) {
return true;
}
}
return false;
}
/**
* Replaces all HTML comments with whitespace.
* This preserves offsets and locations of characters
* outside HTML comments by keeping line breaks and replacing
* other code units with a space character.
* @param {string} value The string to remove HTML comments from.
* @returns {string} The string with HTML comments removed.
*/
export function stripHtmlComments(value) {
return value.replace(htmlCommentPattern, match =>
/* eslint-disable-next-line require-unicode-regexp
-- we want to replace each code unit with a space
*/
match.replace(/[^\r\n]/g, " "));
}