html-minifier-next 8.5.2 → 8.5.3
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/dist/types/htmlminifier.d.ts.map +1 -1
- package/dist/types/lib/constants.d.ts +5 -2
- package/dist/types/lib/constants.d.ts.map +1 -1
- package/dist/types/lib/whitespace.d.ts +44 -4
- package/dist/types/lib/whitespace.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/htmlminifier.js +27 -5
- package/src/lib/constants.js +12 -1
- package/src/lib/whitespace.js +58 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlminifier.d.ts","sourceRoot":"","sources":["../../src/htmlminifier.js"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"htmlminifier.d.ts","sourceRoot":"","sources":["../../src/htmlminifier.js"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,10 @@ declare const RE_EMPTY_ATTRIBUTE: RegExp;
|
|
|
26
26
|
declare const inlineElementsToKeepWhitespaceAround: Set<string>;
|
|
27
27
|
declare const inlineElementsToKeepWhitespaceWithin: Set<string>;
|
|
28
28
|
declare const inlineElementsToKeepWhitespace: Set<string>;
|
|
29
|
-
|
|
29
|
+
/** @param {Iterable<string>} names */
|
|
30
|
+
declare const toEndTags: (names: Iterable<string>) => Set<string>;
|
|
31
|
+
declare const inlineElementsToKeepWhitespaceWithinEither: Set<string>;
|
|
32
|
+
declare const formControlElementsEither: Set<string>;
|
|
30
33
|
declare const generalDefaults: {
|
|
31
34
|
autocorrect: string;
|
|
32
35
|
fetchpriority: string;
|
|
@@ -124,5 +127,5 @@ declare const svgoPluginsInline: {
|
|
|
124
127
|
};
|
|
125
128
|
}[];
|
|
126
129
|
declare const namesForeignMixedCase: Map<string, string>;
|
|
127
|
-
export { RE_WS_START, RE_WS_END, RE_WS_ONLY, RE_WS_NBSP_END, RE_ALL_WS_NBSP, RE_NBSP_LEADING_GROUP, RE_NBSP_LEAD_GROUP, RE_NBSP_TRAILING_GROUP, RE_NBSP_TRAILING_STRIP, RE_EVENT_ATTR_DEFAULT, RE_CAN_REMOVE_ATTR_QUOTES, RE_TRAILING_SEMICOLON, RE_AMP_ENTITY, RE_LEGACY_ENTITIES, RE_ESCAPE_LT, RE_ESCAPE_LT_RAW_TEXT, RE_HTML_ENCODING, RE_ATTR_WS_CHECK, RE_ATTR_WS_COLLAPSE, RE_ATTR_WS_TRIM, RE_STYLE_ELEMENT, RE_EMPTY_ATTRIBUTE, inlineElementsToKeepWhitespaceAround, inlineElementsToKeepWhitespaceWithin, inlineElementsToKeepWhitespace,
|
|
130
|
+
export { RE_WS_START, RE_WS_END, RE_WS_ONLY, RE_WS_NBSP_END, RE_ALL_WS_NBSP, RE_NBSP_LEADING_GROUP, RE_NBSP_LEAD_GROUP, RE_NBSP_TRAILING_GROUP, RE_NBSP_TRAILING_STRIP, RE_EVENT_ATTR_DEFAULT, RE_CAN_REMOVE_ATTR_QUOTES, RE_TRAILING_SEMICOLON, RE_AMP_ENTITY, RE_LEGACY_ENTITIES, RE_ESCAPE_LT, RE_ESCAPE_LT_RAW_TEXT, RE_HTML_ENCODING, RE_ATTR_WS_CHECK, RE_ATTR_WS_COLLAPSE, RE_ATTR_WS_TRIM, RE_STYLE_ELEMENT, RE_EMPTY_ATTRIBUTE, inlineElementsToKeepWhitespaceAround, inlineElementsToKeepWhitespaceWithin, inlineElementsToKeepWhitespace, inlineElementsToKeepWhitespaceWithinEither, formControlElementsEither, toEndTags, generalDefaults, tagDefaults, executableScriptsMimetypes, keepScriptsMimetypes, jsonScriptTypes, isSimpleBoolean, isBooleanValue, collapsibleValues, srcsetElements, MISSING_DEPENDENCY, namesForeignMixedCase, svgoPluginsInline, optionalStartTags, optionalEndTags, headerElements, descriptionElements, pBlockElements, pInlineElements, rubyEndTagOmission, rubyRtcEndTagOmission, optionElements, tableContentElements, tableSectionElements, cellElements, topLevelElements, compactElements, looseElements, trailingElements, htmlElements, specialContentElements, genericRawTextElements, endlessRawTextElements, escapableRawTextElements, rawTextElements };
|
|
128
131
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH,QAAA,MAAM,WAAW,QAAkB,CAAC;AACpC,QAAA,MAAM,SAAS,QAAkB,CAAC;AAClC,QAAA,MAAM,UAAU,QAAmB,CAAC;AACpC,QAAA,MAAM,cAAc,QAAqB,CAAC;AAC1C,QAAA,MAAM,cAAc,QAAsB,CAAC;AAC3C,QAAA,MAAM,qBAAqB,QAAuB,CAAC;AACnD,QAAA,MAAM,kBAAkB,QAAqB,CAAC;AAC9C,QAAA,MAAM,sBAAsB,QAAqB,CAAC;AAClD,QAAA,MAAM,sBAAsB,QAAc,CAAC;AAC3C,QAAA,MAAM,qBAAqB,QAAkB,CAAC;AAC9C,QAAA,MAAM,yBAAyB,QAA0B,CAAC;AAC1D,QAAA,MAAM,qBAAqB,QAAO,CAAC;AACnC,QAAA,MAAM,aAAa,QAAwB,CAAC;AAC5C,QAAA,MAAM,kBAAkB,QAA+oB,CAAC;AACxqB,QAAA,MAAM,YAAY,QAAO,CAAC;AAK1B,QAAA,MAAM,qBAAqB,EAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3D,CAAC;AAGJ,QAAA,MAAM,gBAAgB,QAA4C,CAAC;AACnE,QAAA,MAAM,gBAAgB,QAAgB,CAAC;AACvC,QAAA,MAAM,mBAAmB,QAAkB,CAAC;AAC5C,QAAA,MAAM,eAAe,QAAiC,CAAC;AACvD,QAAA,MAAM,gBAAgB,QAAkB,CAAC;AACzC,QAAA,MAAM,kBAAkB,QAE6B,CAAC;AAKtD,QAAA,MAAM,oCAAoC,aAAqY,CAAC;AAGhb,QAAA,MAAM,oCAAoC,aAAkM,CAAC;AAG7O,QAAA,MAAM,8BAA8B,aAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.js"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
/** @param {string} str */
|
|
5
5
|
declare const trimWhitespace: (str: string) => string;
|
|
6
6
|
/** @param {string} str */
|
|
7
|
+
declare function endsWithWhitespace(str: string): boolean;
|
|
8
|
+
/** @param {string} str */
|
|
7
9
|
declare function collapseWhitespaceAll(str: string): string;
|
|
8
10
|
/**
|
|
9
11
|
* @param {string} str
|
|
@@ -16,6 +18,45 @@ declare function collapseWhitespace(str: string, options: {
|
|
|
16
18
|
preserveLineBreaks?: boolean | undefined;
|
|
17
19
|
conservativeCollapse?: boolean | undefined;
|
|
18
20
|
}, trimLeft: boolean, trimRight: boolean, collapseAll?: boolean): string;
|
|
21
|
+
export type InlineSets = {
|
|
22
|
+
/**
|
|
23
|
+
* - Elements whose surrounding whitespace is kept
|
|
24
|
+
*/
|
|
25
|
+
around: Set<string>;
|
|
26
|
+
/**
|
|
27
|
+
* - The same, spelled as end tags
|
|
28
|
+
*/
|
|
29
|
+
aroundEnd: Set<string>;
|
|
30
|
+
/**
|
|
31
|
+
* - Elements whose inner whitespace is kept
|
|
32
|
+
*/
|
|
33
|
+
within: Set<string>;
|
|
34
|
+
/**
|
|
35
|
+
* - The same, spelled as end tags
|
|
36
|
+
*/
|
|
37
|
+
withinEnd: Set<string>;
|
|
38
|
+
/**
|
|
39
|
+
* - `within` under both spellings
|
|
40
|
+
*/
|
|
41
|
+
withinEither: Set<string>;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* @typedef {object} InlineSets
|
|
45
|
+
* @prop {Set<string>} around - Elements whose surrounding whitespace is kept
|
|
46
|
+
* @prop {Set<string>} aroundEnd - The same, spelled as end tags
|
|
47
|
+
* @prop {Set<string>} within - Elements whose inner whitespace is kept
|
|
48
|
+
* @prop {Set<string>} withinEnd - The same, spelled as end tags
|
|
49
|
+
* @prop {Set<string>} withinEither - `within` under both spellings
|
|
50
|
+
*/
|
|
51
|
+
/**
|
|
52
|
+
* Inline-element membership for the whitespace pass, each set paired with its end-tag
|
|
53
|
+
* spelling so a lookup takes the tag as it comes rather than slicing off the slash
|
|
54
|
+
* @param {Set<string>} around
|
|
55
|
+
* @param {Set<string>} within
|
|
56
|
+
* @returns {InlineSets}
|
|
57
|
+
*/
|
|
58
|
+
declare function buildInlineSets(around: Set<string>, within: Set<string>): InlineSets;
|
|
59
|
+
declare const defaultInlineSets: InlineSets;
|
|
19
60
|
/**
|
|
20
61
|
* @param {string} str
|
|
21
62
|
* @param {string} prevTag
|
|
@@ -23,8 +64,7 @@ declare function collapseWhitespace(str: string, options: {
|
|
|
23
64
|
* @param {Array<{name: string, value?: string}>} prevAttrs
|
|
24
65
|
* @param {Array<{name: string, value?: string}>} nextAttrs
|
|
25
66
|
* @param {{preserveLineBreaks?: boolean, conservativeCollapse?: boolean, collapseInlineTagWhitespace?: boolean}} options
|
|
26
|
-
* @param {
|
|
27
|
-
* @param {Set<string>} inlineTextSet
|
|
67
|
+
* @param {InlineSets} inlineSets
|
|
28
68
|
*/
|
|
29
69
|
declare function collapseWhitespaceSmart(str: string, prevTag: string, nextTag: string, prevAttrs: Array<{
|
|
30
70
|
name: string;
|
|
@@ -36,10 +76,10 @@ declare function collapseWhitespaceSmart(str: string, prevTag: string, nextTag:
|
|
|
36
76
|
preserveLineBreaks?: boolean;
|
|
37
77
|
conservativeCollapse?: boolean;
|
|
38
78
|
collapseInlineTagWhitespace?: boolean;
|
|
39
|
-
},
|
|
79
|
+
}, inlineSets: InlineSets): string;
|
|
40
80
|
/** @param {string} tag */
|
|
41
81
|
declare function canCollapseWhitespace(tag: string): boolean;
|
|
42
82
|
/** @param {string} tag */
|
|
43
83
|
declare function canTrimWhitespace(tag: string): boolean;
|
|
44
|
-
export { trimWhitespace, collapseWhitespaceAll, collapseWhitespace, collapseWhitespaceSmart, canCollapseWhitespace, canTrimWhitespace };
|
|
84
|
+
export { buildInlineSets, defaultInlineSets, endsWithWhitespace, trimWhitespace, collapseWhitespaceAll, collapseWhitespace, collapseWhitespaceSmart, canCollapseWhitespace, canTrimWhitespace };
|
|
45
85
|
//# sourceMappingURL=whitespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whitespace.d.ts","sourceRoot":"","sources":["../../../src/lib/whitespace.js"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"whitespace.d.ts","sourceRoot":"","sources":["../../../src/lib/whitespace.js"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,0BAA0B;AAC1B,QAAA,MAAM,cAAc,QADR,MAAM,WAQjB,CAAC;AAaF,0BAA0B;AAC1B,iBAAS,kBAAkB,CAAC,GAAG,EADnB,MACmB,WAE9B;AAaD,0BAA0B;AAC1B,iBAAS,qBAAqB,CAAC,GAAG,EADtB,MACsB,UAOjC;AAoBD;;;;;;GAMG;AACH,iBAAS,kBAAkB,CAAC,GAAG,EANpB,MAMoB,EAAE,OAAO,EAL7B;IAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAKxD,EAAE,QAAQ,EAJvC,OAIuC,EAAE,SAAS,EAHlD,OAGkD,EAAE,WAAW,AAFvE,CAA8B,EAAtB,OAEuE,UAcjF;AAwGE,YAAkB,UAAU,GAC5B;;;;IAAoB,MAAM,EAAnB,GAAG,CAAC,MAAM,CAAC,CAClB;;;;IAAoB,SAAS,EAAtB,GAAG,CAAC,MAAM,CAAC,CAClB;;;;IAAoB,MAAM,EAAnB,GAAG,CAAC,MAAM,CAAC,CAClB;;;;IAAoB,SAAS,EAAtB,GAAG,CAAC,MAAM,CAAC,CAClB;;;;IAAoB,YAAY,EAAzB,GAAG,CAAC,MAAM,CAAC,CACpB;CAAA,CAAA;AAPD;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,iBAAS,eAAe,CAAC,MAAM,EAJpB,GAAG,CAAC,MAAM,CAIU,EAAE,MAAM,EAH5B,GAAG,CAAC,MAAM,CAGkB,GAF1B,UAAU,CAWtB;AAGD,QAAA,MAAM,iBAAiB,YAA8F,CAAC;AAiBtH;;;;;;;;GAQG;AACH,iBAAS,uBAAuB,CAAC,GAAG,EARzB,MAQyB,EAAE,OAAO,EAPlC,MAOkC,EAAE,OAAO,EAN3C,MAM2C,EAAE,SAAS,EALtD,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAKkB,EAAE,SAAS,EAJjE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAI6B,EAAE,OAAO,EAH1E;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAAC,2BAA2B,CAAC,EAAE,OAAO,CAAA;CAG1B,EAAE,UAAU,EAFtF,UAEsF,UA6DhG;AASD,0BAA0B;AAC1B,iBAAS,qBAAqB,CAAC,GAAG,EADtB,MACsB,WAEjC;AAED,0BAA0B;AAC1B,iBAAS,iBAAiB,CAAC,GAAG,EADlB,MACkB,WAE7B;AAID,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
},
|
|
15
15
|
"description": "Highly effective, super-configurable, well-tested web page minifier (enhanced successor to HTML Minifier)",
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@commitlint/cli": "^21.2.
|
|
17
|
+
"@commitlint/cli": "^21.2.3",
|
|
18
18
|
"@eslint/js": "^10.0.1",
|
|
19
19
|
"@swc/core": "^1.16.2",
|
|
20
|
-
"@types/node": "^26.6.
|
|
21
|
-
"eslint": "^10.
|
|
20
|
+
"@types/node": "^26.6.2",
|
|
21
|
+
"eslint": "^10.11.0",
|
|
22
22
|
"globals": "^17.12.0",
|
|
23
23
|
"typescript": "^7.0.2",
|
|
24
24
|
"vite": "^8.3.0"
|
|
@@ -95,5 +95,5 @@
|
|
|
95
95
|
},
|
|
96
96
|
"type": "module",
|
|
97
97
|
"types": "dist/types/htmlminifier.d.ts",
|
|
98
|
-
"version": "8.5.
|
|
98
|
+
"version": "8.5.3"
|
|
99
99
|
}
|
package/src/htmlminifier.js
CHANGED
|
@@ -32,6 +32,9 @@ import {
|
|
|
32
32
|
} from './lib/constants.js';
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
|
+
buildInlineSets,
|
|
36
|
+
defaultInlineSets,
|
|
37
|
+
endsWithWhitespace,
|
|
35
38
|
trimWhitespace,
|
|
36
39
|
collapseWhitespaceAll,
|
|
37
40
|
collapseWhitespace,
|
|
@@ -1102,6 +1105,9 @@ async function minifyHTML(value, options, partialMarkup) {
|
|
|
1102
1105
|
const inlineElements = normalizedCustomElements.length
|
|
1103
1106
|
? new Set([...inlineElementsToKeepWhitespaceAround, ...normalizedCustomElements])
|
|
1104
1107
|
: inlineElementsToKeepWhitespaceAround;
|
|
1108
|
+
const inlineSets = normalizedCustomElements.length
|
|
1109
|
+
? buildInlineSets(inlineElements, inlineTextSet)
|
|
1110
|
+
: defaultInlineSets;
|
|
1105
1111
|
|
|
1106
1112
|
// Parse `removeEmptyElementsExcept` option
|
|
1107
1113
|
/** @type {Array<{tag: string, attrs: {[x: string]: string | undefined} | null}>} */
|
|
@@ -1364,13 +1370,27 @@ async function minifyHTML(value, options, partialMarkup) {
|
|
|
1364
1370
|
|
|
1365
1371
|
// Look for trailing whitespaces, bypass any inline tags
|
|
1366
1372
|
function trimTrailingWhitespace(/** @type {number} */ index, /** @type {string} */ nextTag) {
|
|
1373
|
+
// Nothing to the left of the text is in play here, so only its trailing run can
|
|
1374
|
+
// change—unless preserved line breaks bring the leading run into play, too
|
|
1375
|
+
const trailingOnly = !options.preserveLineBreaks;
|
|
1367
1376
|
for (let prevTag = ''; index >= 0 && canTrimWhitespace(prevTag, emptyAttrs); index--) {
|
|
1368
1377
|
const str = buffer[index] ?? '';
|
|
1369
1378
|
const endTagName = matchPlainEndTag(str);
|
|
1370
1379
|
if (endTagName !== null) {
|
|
1371
1380
|
prevTag = endTagName;
|
|
1372
|
-
|
|
1373
|
-
|
|
1381
|
+
continue;
|
|
1382
|
+
}
|
|
1383
|
+
// A tag ends the search, and so does text that survives collapsing. Text with no
|
|
1384
|
+
// trailing run comes back from the call unchanged, so it can end the search on
|
|
1385
|
+
// the spot; empty text cannot, as the search has to carry on past it
|
|
1386
|
+
if (str.charCodeAt(str.length - 1) === 62 /* > */) {
|
|
1387
|
+
break;
|
|
1388
|
+
}
|
|
1389
|
+
if (trailingOnly && str && !endsWithWhitespace(str)) {
|
|
1390
|
+
break;
|
|
1391
|
+
}
|
|
1392
|
+
buffer[index] = collapseWhitespaceSmart(str, '', nextTag, emptyAttrs, emptyAttrs, options, inlineSets);
|
|
1393
|
+
if (buffer[index]) {
|
|
1374
1394
|
break;
|
|
1375
1395
|
}
|
|
1376
1396
|
}
|
|
@@ -1386,7 +1406,9 @@ async function minifyHTML(value, options, partialMarkup) {
|
|
|
1386
1406
|
// minification run then removes
|
|
1387
1407
|
while (charsIndex > 0) {
|
|
1388
1408
|
const item = buffer[charsIndex] ?? '';
|
|
1389
|
-
|
|
1409
|
+
// Comments and empty entries only, as `<!…` or nothing at all
|
|
1410
|
+
const skippable = item === '' || (item.charCodeAt(0) === 60 /* < */ && item.charCodeAt(1) === 33 /* ! */);
|
|
1411
|
+
if (!skippable || (uidIgnore && item.indexOf(uidIgnore) !== -1)) {
|
|
1390
1412
|
break;
|
|
1391
1413
|
}
|
|
1392
1414
|
charsIndex--;
|
|
@@ -1473,12 +1495,12 @@ async function minifyHTML(value, options, partialMarkup) {
|
|
|
1473
1495
|
}
|
|
1474
1496
|
trimTrailingWhitespace(tagIndex - 1, 'br');
|
|
1475
1497
|
}
|
|
1476
|
-
} else if (
|
|
1498
|
+
} else if (inlineSets.withinEither.has(textPrevTag)) {
|
|
1477
1499
|
text = collapseWhitespace(text, options, /(?:^|\s)$/.test(currentChars), false);
|
|
1478
1500
|
}
|
|
1479
1501
|
}
|
|
1480
1502
|
if (textPrevTag || textNextTag) {
|
|
1481
|
-
text = collapseWhitespaceSmart(text, effectivePrevTag, textNextTag, textPrevAttrs, textNextAttrs, options,
|
|
1503
|
+
text = collapseWhitespaceSmart(text, effectivePrevTag, textNextTag, textPrevAttrs, textNextAttrs, options, inlineSets);
|
|
1482
1504
|
} else {
|
|
1483
1505
|
text = collapseWhitespace(text, options, true, true);
|
|
1484
1506
|
}
|
package/src/lib/constants.js
CHANGED
|
@@ -50,6 +50,15 @@ const inlineElementsToKeepWhitespace = new Set(['comment', 'img', 'input', 'wbr'
|
|
|
50
50
|
// Form control elements (for conditional whitespace collapsing)
|
|
51
51
|
const formControlElements = new Set(['input', 'button', 'select', 'textarea', 'output', 'meter', 'progress']);
|
|
52
52
|
|
|
53
|
+
// End-tag spellings (`/a`) of a set of element names
|
|
54
|
+
/** @param {Iterable<string>} names */
|
|
55
|
+
const toEndTags = names => new Set(Array.from(names, name => '/' + name));
|
|
56
|
+
|
|
57
|
+
// Membership under either spelling, for the whitespace checks that ignore the slash;
|
|
58
|
+
// looking a tag up as it comes keeps the hot path from slicing one string per call
|
|
59
|
+
const inlineElementsToKeepWhitespaceWithinEither = new Set([...inlineElementsToKeepWhitespaceWithin, ...toEndTags(inlineElementsToKeepWhitespaceWithin)]);
|
|
60
|
+
const formControlElementsEither = new Set([...formControlElements, ...toEndTags(formControlElements)]);
|
|
61
|
+
|
|
53
62
|
// Default attribute values
|
|
54
63
|
|
|
55
64
|
// Default attribute values (could apply to any element)
|
|
@@ -285,7 +294,9 @@ export {
|
|
|
285
294
|
inlineElementsToKeepWhitespaceAround,
|
|
286
295
|
inlineElementsToKeepWhitespaceWithin,
|
|
287
296
|
inlineElementsToKeepWhitespace,
|
|
288
|
-
|
|
297
|
+
inlineElementsToKeepWhitespaceWithinEither,
|
|
298
|
+
formControlElementsEither,
|
|
299
|
+
toEndTags,
|
|
289
300
|
|
|
290
301
|
// Default values
|
|
291
302
|
generalDefaults,
|
package/src/lib/whitespace.js
CHANGED
|
@@ -9,14 +9,18 @@ import {
|
|
|
9
9
|
RE_NBSP_TRAILING_GROUP,
|
|
10
10
|
RE_NBSP_TRAILING_STRIP,
|
|
11
11
|
inlineElementsToKeepWhitespace,
|
|
12
|
+
inlineElementsToKeepWhitespaceAround,
|
|
12
13
|
inlineElementsToKeepWhitespaceWithin,
|
|
13
|
-
|
|
14
|
+
inlineElementsToKeepWhitespaceWithinEither,
|
|
15
|
+
formControlElementsEither,
|
|
16
|
+
toEndTags
|
|
14
17
|
} from './constants.js';
|
|
15
18
|
|
|
16
19
|
const RE_ANY_WS_NBSP = /[ \n\r\t\f\xA0]/;
|
|
17
20
|
const RE_TAB_NBSP = /[\t\xA0]/;
|
|
18
21
|
const RE_ASCII_WS_RUN = /[ \n\r\f]+/g;
|
|
19
|
-
|
|
22
|
+
// Every reason `collapseWhitespaceAllKnown` has to do any work at all, in one scan
|
|
23
|
+
const RE_COLLAPSIBLE = /[\t\xA0\n\r\f]| {2}/;
|
|
20
24
|
const RE_NON_WS = /\S/;
|
|
21
25
|
|
|
22
26
|
// Trim whitespace
|
|
@@ -41,6 +45,12 @@ function isWsOrNbsp(code) {
|
|
|
41
45
|
return code === 32 || code === 10 || code === 13 || code === 9 || code === 12 || code === 160;
|
|
42
46
|
}
|
|
43
47
|
|
|
48
|
+
// Whether the last character is whitespace, no-break space included
|
|
49
|
+
/** @param {string} str */
|
|
50
|
+
function endsWithWhitespace(str) {
|
|
51
|
+
return str.length > 0 && isWsOrNbsp(str.charCodeAt(str.length - 1));
|
|
52
|
+
}
|
|
53
|
+
|
|
44
54
|
// Collapse all whitespace
|
|
45
55
|
|
|
46
56
|
// Module scope so the hot path doesn’t allocate a closure per call
|
|
@@ -65,10 +75,15 @@ function collapseWhitespaceAll(str) {
|
|
|
65
75
|
// As `collapseWhitespaceAll`, for callers that already know `str` holds whitespace
|
|
66
76
|
/** @param {string} str */
|
|
67
77
|
function collapseWhitespaceAllKnown(str) {
|
|
78
|
+
// Most text reaching here is already collapsed, so settle that in one scan rather
|
|
79
|
+
// than two—single spaces with no tab and no no-break space leave nothing to do
|
|
80
|
+
if (!RE_COLLAPSIBLE.test(str)) {
|
|
81
|
+
return str;
|
|
82
|
+
}
|
|
68
83
|
// Only a tab or a no-break space makes the replacement depend on the run itself;
|
|
69
84
|
// without either, every run becomes one space and no per-match callback is needed
|
|
70
85
|
if (!RE_TAB_NBSP.test(str)) {
|
|
71
|
-
return
|
|
86
|
+
return str.replace(RE_ASCII_WS_RUN, ' ');
|
|
72
87
|
}
|
|
73
88
|
return str.replace(RE_ALL_WS_NBSP, collapseRun);
|
|
74
89
|
}
|
|
@@ -199,6 +214,36 @@ function collapseWhitespaceKnown(str, options, trimLeft, trimRight, collapseAll)
|
|
|
199
214
|
|
|
200
215
|
// Collapse whitespace smartly based on surrounding tags
|
|
201
216
|
|
|
217
|
+
/**
|
|
218
|
+
* @typedef {object} InlineSets
|
|
219
|
+
* @prop {Set<string>} around - Elements whose surrounding whitespace is kept
|
|
220
|
+
* @prop {Set<string>} aroundEnd - The same, spelled as end tags
|
|
221
|
+
* @prop {Set<string>} within - Elements whose inner whitespace is kept
|
|
222
|
+
* @prop {Set<string>} withinEnd - The same, spelled as end tags
|
|
223
|
+
* @prop {Set<string>} withinEither - `within` under both spellings
|
|
224
|
+
*/
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Inline-element membership for the whitespace pass, each set paired with its end-tag
|
|
228
|
+
* spelling so a lookup takes the tag as it comes rather than slicing off the slash
|
|
229
|
+
* @param {Set<string>} around
|
|
230
|
+
* @param {Set<string>} within
|
|
231
|
+
* @returns {InlineSets}
|
|
232
|
+
*/
|
|
233
|
+
function buildInlineSets(around, within) {
|
|
234
|
+
const withinEnd = toEndTags(within);
|
|
235
|
+
return {
|
|
236
|
+
around,
|
|
237
|
+
aroundEnd: toEndTags(around),
|
|
238
|
+
within,
|
|
239
|
+
withinEnd,
|
|
240
|
+
withinEither: new Set([...within, ...withinEnd])
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// The sets for a document without custom inline elements, built once
|
|
245
|
+
const defaultInlineSets = buildInlineSets(inlineElementsToKeepWhitespaceAround, inlineElementsToKeepWhitespaceWithin);
|
|
246
|
+
|
|
202
247
|
// Check if an input element has `type="hidden"`; module-scope so the hot path
|
|
203
248
|
// doesn’t allocate a closure per text node
|
|
204
249
|
/**
|
|
@@ -221,10 +266,9 @@ function isHiddenInput(attrs) {
|
|
|
221
266
|
* @param {Array<{name: string, value?: string}>} prevAttrs
|
|
222
267
|
* @param {Array<{name: string, value?: string}>} nextAttrs
|
|
223
268
|
* @param {{preserveLineBreaks?: boolean, conservativeCollapse?: boolean, collapseInlineTagWhitespace?: boolean}} options
|
|
224
|
-
* @param {
|
|
225
|
-
* @param {Set<string>} inlineTextSet
|
|
269
|
+
* @param {InlineSets} inlineSets
|
|
226
270
|
*/
|
|
227
|
-
function collapseWhitespaceSmart(str, prevTag, nextTag, prevAttrs, nextAttrs, options,
|
|
271
|
+
function collapseWhitespaceSmart(str, prevTag, nextTag, prevAttrs, nextAttrs, options, inlineSets) {
|
|
228
272
|
if (!str) return str;
|
|
229
273
|
|
|
230
274
|
// Fast path: No whitespace at all—every decision below would leave `str`
|
|
@@ -253,7 +297,7 @@ function collapseWhitespaceSmart(str, prevTag, nextTag, prevAttrs, nextAttrs, op
|
|
|
253
297
|
}
|
|
254
298
|
// Aggressive mode: Collapse between all form controls
|
|
255
299
|
if (inlineOption && (!trimLeft || !trimRight) &&
|
|
256
|
-
|
|
300
|
+
formControlElementsEither.has(prevTag) && formControlElementsEither.has(nextTag)) {
|
|
257
301
|
trimLeft = true;
|
|
258
302
|
trimRight = true;
|
|
259
303
|
}
|
|
@@ -262,21 +306,21 @@ function collapseWhitespaceSmart(str, prevTag, nextTag, prevAttrs, nextAttrs, op
|
|
|
262
306
|
if (trimLeft) {
|
|
263
307
|
if (inlineOption) {
|
|
264
308
|
// Still preserve whitespace around inline text elements
|
|
265
|
-
if (
|
|
309
|
+
if (inlineElementsToKeepWhitespaceWithinEither.has(prevTag)) {
|
|
266
310
|
trimLeft = false;
|
|
267
311
|
}
|
|
268
312
|
} else {
|
|
269
|
-
trimLeft = prevTag.charCodeAt(0) === 47 /* / */ ? !
|
|
313
|
+
trimLeft = prevTag.charCodeAt(0) === 47 /* / */ ? !inlineSets.aroundEnd.has(prevTag) : !inlineSets.within.has(prevTag);
|
|
270
314
|
}
|
|
271
315
|
}
|
|
272
316
|
|
|
273
317
|
if (trimRight) {
|
|
274
318
|
if (inlineOption) {
|
|
275
|
-
if (
|
|
319
|
+
if (inlineElementsToKeepWhitespaceWithinEither.has(nextTag)) {
|
|
276
320
|
trimRight = false;
|
|
277
321
|
}
|
|
278
322
|
} else {
|
|
279
|
-
trimRight = nextTag.charCodeAt(0) === 47 /* / */ ? !
|
|
323
|
+
trimRight = nextTag.charCodeAt(0) === 47 /* / */ ? !inlineSets.withinEnd.has(nextTag) : !inlineSets.around.has(nextTag);
|
|
280
324
|
}
|
|
281
325
|
}
|
|
282
326
|
|
|
@@ -287,11 +331,6 @@ function collapseWhitespaceSmart(str, prevTag, nextTag, prevAttrs, nextAttrs, op
|
|
|
287
331
|
return collapseWhitespaceKnown(str, options, trimLeft, trimRight, collapseAll);
|
|
288
332
|
}
|
|
289
333
|
|
|
290
|
-
/** @param {string} tag */
|
|
291
|
-
function stripSlash(tag) {
|
|
292
|
-
return tag && tag.charCodeAt(0) === 47 /* / */ ? tag.slice(1) : tag;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
334
|
// Collapse/trim whitespace for given tag
|
|
296
335
|
|
|
297
336
|
// `xmp`, `listing`, and `plaintext` render preformatted, as `pre` does
|
|
@@ -312,6 +351,9 @@ function canTrimWhitespace(tag) {
|
|
|
312
351
|
// Exports
|
|
313
352
|
|
|
314
353
|
export {
|
|
354
|
+
buildInlineSets,
|
|
355
|
+
defaultInlineSets,
|
|
356
|
+
endsWithWhitespace,
|
|
315
357
|
trimWhitespace,
|
|
316
358
|
collapseWhitespaceAll,
|
|
317
359
|
collapseWhitespace,
|