MCPcopy
hub / github.com/webpack/webpack / charsToCharClassContent

Function charsToCharClassContent

lib/util/compileBooleanMatcher.js:34–65  ·  view source on GitHub ↗
(chars)

Source from the content-addressed store, hash-verified

32 * @returns {string} optimized character class content (without the brackets)
33 */
34const charsToCharClassContent = (chars) => {
35 if (chars.length === 0) return "";
36 if (chars.length === 1) return quoteMetaInCharClass(chars[0]);
37
38 // Sort by char code
39 const sorted = [...chars].sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0));
40
41 /** @type {string[]} */
42 const parts = [];
43 let rangeStart = sorted[0];
44 let rangeEnd = sorted[0];
45
46 for (let i = 1; i < sorted.length; i++) {
47 const char = sorted[i];
48 const prevCode = rangeEnd.charCodeAt(0);
49 const currCode = char.charCodeAt(0);
50
51 if (currCode === prevCode + 1) {
52 // Extend the range
53 rangeEnd = char;
54 } else {
55 // Flush the current range
56 parts.push(formatRange(rangeStart, rangeEnd));
57 rangeStart = char;
58 rangeEnd = char;
59 }
60 }
61 // Flush the last range
62 parts.push(formatRange(rangeStart, rangeEnd));
63
64 return parts.join("");
65};
66
67/**
68 * Formats a range of characters for use in a character class

Callers 1

itemsToRegexpFunction · 0.85

Calls 4

quoteMetaInCharClassFunction · 0.85
formatRangeFunction · 0.85
sortMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected