htmlnano 3.1.0 → 3.2.1
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/README.md +37 -23
- package/dist/_modules/collapseAttributeWhitespace.d.mts +58 -14
- package/dist/_modules/collapseAttributeWhitespace.d.ts +58 -14
- package/dist/_modules/collapseBooleanAttributes.d.mts +58 -14
- package/dist/_modules/collapseBooleanAttributes.d.ts +58 -14
- package/dist/_modules/collapseWhitespace.d.mts +58 -14
- package/dist/_modules/collapseWhitespace.d.ts +58 -14
- package/dist/_modules/custom.d.mts +58 -14
- package/dist/_modules/custom.d.ts +58 -14
- package/dist/_modules/deduplicateAttributeValues.d.mts +58 -14
- package/dist/_modules/deduplicateAttributeValues.d.ts +58 -14
- package/dist/_modules/example.d.mts +58 -14
- package/dist/_modules/example.d.ts +58 -14
- package/dist/_modules/mergeScripts.d.mts +58 -14
- package/dist/_modules/mergeScripts.d.ts +58 -14
- package/dist/_modules/mergeScripts.js +30 -23
- package/dist/_modules/mergeScripts.mjs +30 -23
- package/dist/_modules/mergeStyles.d.mts +58 -14
- package/dist/_modules/mergeStyles.d.ts +58 -14
- package/dist/_modules/mergeStyles.js +26 -21
- package/dist/_modules/mergeStyles.mjs +26 -21
- package/dist/_modules/minifyAttributes.d.mts +58 -14
- package/dist/_modules/minifyAttributes.d.ts +58 -14
- package/dist/_modules/minifyAttributes.js +2 -2
- package/dist/_modules/minifyAttributes.mjs +2 -2
- package/dist/_modules/minifyConditionalComments.d.mts +58 -14
- package/dist/_modules/minifyConditionalComments.d.ts +58 -14
- package/dist/_modules/minifyCss.d.mts +61 -14
- package/dist/_modules/minifyCss.d.ts +61 -14
- package/dist/_modules/minifyCss.js +79 -12
- package/dist/_modules/minifyCss.mjs +79 -13
- package/dist/_modules/minifyHtmlTemplate.d.mts +58 -14
- package/dist/_modules/minifyHtmlTemplate.d.ts +58 -14
- package/dist/_modules/minifyJs.d.mts +58 -13
- package/dist/_modules/minifyJs.d.ts +58 -13
- package/dist/_modules/minifyJs.js +12 -0
- package/dist/_modules/minifyJs.mjs +12 -0
- package/dist/_modules/minifyJson.d.mts +58 -14
- package/dist/_modules/minifyJson.d.ts +58 -14
- package/dist/_modules/minifyJson.js +1 -1
- package/dist/_modules/minifyJson.mjs +1 -1
- package/dist/_modules/minifySvg.d.mts +58 -13
- package/dist/_modules/minifySvg.d.ts +58 -13
- package/dist/_modules/minifySvg.js +2 -2
- package/dist/_modules/minifySvg.mjs +2 -2
- package/dist/_modules/minifyUrls.d.mts +58 -14
- package/dist/_modules/minifyUrls.d.ts +58 -14
- package/dist/_modules/minifyUrls.js +2 -2
- package/dist/_modules/minifyUrls.mjs +2 -2
- package/dist/_modules/normalizeAttributeValues.d.mts +58 -14
- package/dist/_modules/normalizeAttributeValues.d.ts +58 -14
- package/dist/_modules/removeAttributeQuotes.d.mts +58 -14
- package/dist/_modules/removeAttributeQuotes.d.ts +58 -14
- package/dist/_modules/removeComments.d.mts +58 -14
- package/dist/_modules/removeComments.d.ts +58 -14
- package/dist/_modules/removeComments.js +1 -1
- package/dist/_modules/removeComments.mjs +1 -1
- package/dist/_modules/removeEmptyAttributes.d.mts +58 -14
- package/dist/_modules/removeEmptyAttributes.d.ts +58 -14
- package/dist/_modules/removeEmptyElements.d.mts +58 -14
- package/dist/_modules/removeEmptyElements.d.ts +58 -14
- package/dist/_modules/removeOptionalTags.d.mts +58 -14
- package/dist/_modules/removeOptionalTags.d.ts +58 -14
- package/dist/_modules/removeRedundantAttributes.d.mts +58 -14
- package/dist/_modules/removeRedundantAttributes.d.ts +58 -14
- package/dist/_modules/removeUnusedCss.d.mts +58 -14
- package/dist/_modules/removeUnusedCss.d.ts +58 -14
- package/dist/_modules/removeUnusedCss.js +3 -2
- package/dist/_modules/removeUnusedCss.mjs +3 -2
- package/dist/_modules/sortAttributes.d.mts +61 -16
- package/dist/_modules/sortAttributes.d.ts +61 -16
- package/dist/_modules/sortAttributes.js +5 -9
- package/dist/_modules/sortAttributes.mjs +5 -9
- package/dist/_modules/sortAttributesWithLists.d.mts +61 -15
- package/dist/_modules/sortAttributesWithLists.d.ts +61 -15
- package/dist/_modules/sortAttributesWithLists.js +43 -56
- package/dist/_modules/sortAttributesWithLists.mjs +43 -56
- package/dist/index.d.ts +59 -15
- package/dist/index.js +7 -6
- package/dist/index.mjs +7 -6
- package/dist/presets/ampSafe.d.ts +57 -12
- package/dist/presets/max.d.ts +57 -12
- package/dist/presets/max.js +9 -5
- package/dist/presets/max.mjs +9 -5
- package/dist/presets/safe.d.ts +57 -12
- package/dist/presets/safe.js +1 -1
- package/dist/presets/safe.mjs +1 -1
- package/package.json +20 -14
package/README.md
CHANGED
|
@@ -5,28 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
Modular HTML minifier, built on top of the [PostHTML](https://github.com/posthtml/posthtml). Inspired by [cssnano](https://github.com/cssnano/cssnano).
|
|
7
7
|
|
|
8
|
-
## Benchmarks
|
|
9
|
-
|
|
10
|
-
[html-minifier-terser]: https://www.npmjs.com/package/html-minifier-terser/v/7.2.0
|
|
11
|
-
[html-minifier-next]: https://www.npmjs.com/package/html-minifier-next/v/4.15.2
|
|
12
|
-
[htmlnano]: https://www.npmjs.com/package/htmlnano/v/3.1.0
|
|
13
|
-
[minify]: https://www.npmjs.com/package/@tdewolff/minify/v/2.24.8
|
|
14
|
-
[minify-html]: https://www.npmjs.com/package/@minify-html/node/v/0.18.1
|
|
15
|
-
|
|
16
|
-
| Website | Source (KB) | [html-minifier-terser] | [html-minifier-next] | [htmlnano] | [minify] | [minify-html] |
|
|
17
|
-
| ------------------------------------------------------------- | ----------: | ---------------------: | -------------------: | ---------: | --------: | ------------: |
|
|
18
|
-
| [stackoverflow.blog](https://stackoverflow.blog/) | 142 | 3.7% | 32.3% | 6.8% | 4.5% | 4.6% |
|
|
19
|
-
| [github.com](https://github.com/) | 549 | 2.9% | 42.2% | 16.6% | 7.3% | 5.7% |
|
|
20
|
-
| [en.wikipedia.org](https://en.wikipedia.org/wiki/Main_Page) | 218 | 4.6% | 7.7% | 7.4% | 6.2% | 2.9% |
|
|
21
|
-
| [developer.mozilla.org](https://developer.mozilla.org/en-US/) | 109 | 37.9% | 42.0% | 52.7% | 40.1% | 39.9% |
|
|
22
|
-
| [tc39.es](https://tc39.es/ecma262/) | 7243 | 8.5% | 11.8% | 9.3% | 9.5% | 9.1% |
|
|
23
|
-
| [apple.com](https://www.apple.com/) | 210 | 9.2% | 14.4% | 11.2% | 10.3% | 9.8% |
|
|
24
|
-
| [w3.org](https://www.w3.org/) | 50 | 19.0% | 24.6% | 23.4% | 24.4% | 20.3% |
|
|
25
|
-
| [weather.com](https://weather.com) | 1960 | 0.4% | 11.2% | 19.8% | 11.6% | 0.6% |
|
|
26
|
-
| **Avg. minify rate** | | **10.8%** | **23.3%** | **18.4%** | **14.2%** | **11.6%** |
|
|
27
|
-
|
|
28
|
-
Latest benchmarks: https://github.com/maltsev/html-minifiers-benchmark (updated daily).
|
|
29
|
-
|
|
30
8
|
## Documentation
|
|
31
9
|
https://htmlnano.netlify.app
|
|
32
10
|
|
|
@@ -68,4 +46,40 @@ Also, you can use it as CLI tool:
|
|
|
68
46
|
node_modules/.bin/htmlnano --help
|
|
69
47
|
```
|
|
70
48
|
|
|
71
|
-
More usage examples (PostHTML,
|
|
49
|
+
More usage examples (PostHTML, CLI, Webpack): https://htmlnano.netlify.app/usage
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## Benchmarks
|
|
53
|
+
|
|
54
|
+
[html-minifier-terser]: https://www.npmjs.com/package/html-minifier-terser/v/7.2.0
|
|
55
|
+
[html-minifier-next]: https://www.npmjs.com/package/html-minifier-next/v/5.0.3
|
|
56
|
+
[htmlnano]: https://www.npmjs.com/package/htmlnano/v/3.1.0
|
|
57
|
+
[minify]: https://www.npmjs.com/package/@tdewolff/minify/v/2.24.8
|
|
58
|
+
[minify-html]: https://www.npmjs.com/package/@minify-html/node/v/0.18.1
|
|
59
|
+
|
|
60
|
+
| Website | Source (KB) | [html-minifier-terser] | [html-minifier-next] | [htmlnano] | [minify] | [minify-html] |
|
|
61
|
+
| --------------------------------------------------------------- | ----------: | ---------------------: | -------------------: | ---------: | --------: | ------------: |
|
|
62
|
+
| [alistapart.com](https://alistapart.com/) | 63 | 7.6% | 11.6% | 34.6% | 11.1% | 8.6% |
|
|
63
|
+
| [developer.mozilla.org](https://developer.mozilla.org/en-US/) | 109 | 38.0% | 41.7% | 52.8% | 40.1% | 39.9% |
|
|
64
|
+
| [css-tricks.com](https://css-tricks.com) | 11 | 8.2% | 34.1% | 37.2% | 18.8% | 8.5% |
|
|
65
|
+
| [en.wikipedia.org](https://en.wikipedia.org/wiki/Main_Page) | 224 | 4.5% | 7.4% | 7.2% | 60.6% | 2.9% |
|
|
66
|
+
| [github.com](https://github.com/) | 546 | 3.0% | 9.7% | 16.7% | 7.3% | 5.7% |
|
|
67
|
+
| [edri.org](https://edri.org) | 80 | 7.7% | 12.3% | 30.6% | 12.3% | 8.2% |
|
|
68
|
+
| [leanpub.com](https://leanpub.com) | 251 | 1.3% | 6.9% | 6.3% | 6.0% | 1.7% |
|
|
69
|
+
| [stackoverflow.blog](https://stackoverflow.blog/) | 139 | 3.9% | 5.7% | 7.0% | 4.6% | 4.7% |
|
|
70
|
+
| [html.spec.whatwg.org](https://html.spec.whatwg.org/multipage/) | 149 | -3.9% | 0.7% | -2.6% | 0.3% | 0.2% |
|
|
71
|
+
| [eff.org](https://eff.org) | 54 | 8.8% | 14.7% | 10.9% | 13.4% | 9.7% |
|
|
72
|
+
| [apple.com](https://apple.com/) | 229 | 8.9% | 12.5% | 11.5% | 10.4% | 9.5% |
|
|
73
|
+
| [w3.org](https://w3.org/) | 50 | 19.0% | 24.6% | 23.4% | 24.4% | 20.3% |
|
|
74
|
+
| [mastodon.social](https://mastodon.social/explore) | 37 | 3.4% | 6.8% | 14.6% | 5.9% | 3.6% |
|
|
75
|
+
| [bbc.co.uk](https://bbc.co.uk) | 694 | 0.8% | 6.3% | 5.9% | 4.7% | 1.2% |
|
|
76
|
+
| [un.org](https://un.org/en/) | 151 | 14.2% | 22.5% | 41.2% | 20.0% | 15.0% |
|
|
77
|
+
| [lafrenchtech.gouv.fr](https://lafrenchtech.gouv.fr/) | 152 | 13.2% | 17.9% | 64.1% | 17.0% | 13.8% |
|
|
78
|
+
| [sitepoint.com](https://sitepoint.com) | 497 | 0.8% | 7.4% | 12.9% | 6.1% | 0.9% |
|
|
79
|
+
| [faz.net](https://faz.net/aktuell/) | 1572 | 3.4% | 8.0% | 15.8% | 4.8% | 3.6% |
|
|
80
|
+
| [weather.com](https://weather.com) | 2395 | 0.3% | 11.4% | 18.1% | 11.0% | 0.6% |
|
|
81
|
+
| [tc39.es](https://tc39.es/ecma262/) | 7254 | 8.5% | 11.3% | 9.3% | 9.5% | 9.1% |
|
|
82
|
+
| [home.cern](https://home.cern) | 151 | 37.1% | 46.4% | 40.2% | 38.9% | 39.5% |
|
|
83
|
+
| **Avg. minify rate** | | **9.0%** | **15.2%** | **21.8%** | **15.6%** | **9.9%** |
|
|
84
|
+
|
|
85
|
+
Latest benchmarks: https://github.com/maltsev/html-minifiers-benchmark (updated daily).
|
|
@@ -1,25 +1,70 @@
|
|
|
1
1
|
import PostHTML from 'posthtml';
|
|
2
|
-
import { MinifyOptions } from 'terser';
|
|
3
|
-
import { Options } from 'cssnano';
|
|
4
|
-
import { Config } from 'svgo';
|
|
5
|
-
import { UserDefinedOptions } from 'purgecss';
|
|
6
2
|
|
|
7
|
-
type
|
|
3
|
+
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
4
|
+
type PostHTMLTreeLike = [PostHTMLNodeLike] & PostHTML.NodeAPI & {
|
|
8
5
|
options?: {
|
|
9
6
|
quoteAllAttributes?: boolean | undefined;
|
|
10
7
|
quoteStyle?: 0 | 1 | 2 | undefined;
|
|
11
8
|
replaceQuote?: boolean | undefined;
|
|
12
9
|
} | undefined;
|
|
13
10
|
render(): string;
|
|
14
|
-
render(node:
|
|
11
|
+
render(node: PostHTMLNodeLike | PostHTMLTreeLike, renderOptions?: any): string;
|
|
15
12
|
};
|
|
16
13
|
type MaybeArray<T> = T | Array<T>;
|
|
17
|
-
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
18
14
|
type HtmlnanoTemplateRule = {
|
|
19
15
|
tag: string;
|
|
20
16
|
attrs?: Record<string, string | boolean | void>;
|
|
21
17
|
};
|
|
22
18
|
type MinifyHtmlTemplateOptions = boolean | HtmlnanoTemplateRule[];
|
|
19
|
+
type HtmlnanoMinifyCssOptions = object;
|
|
20
|
+
type HtmlnanoMinifyJsOptions = object;
|
|
21
|
+
type HtmlnanoMinifySvgOptions = object;
|
|
22
|
+
type HtmlnanoPurgeCssPattern = string | RegExp;
|
|
23
|
+
type HtmlnanoPurgeCssExtractorResultDetailed = {
|
|
24
|
+
attributes: {
|
|
25
|
+
names: string[];
|
|
26
|
+
values: string[];
|
|
27
|
+
};
|
|
28
|
+
classes: string[];
|
|
29
|
+
ids: string[];
|
|
30
|
+
tags: string[];
|
|
31
|
+
undetermined: string[];
|
|
32
|
+
};
|
|
33
|
+
type HtmlnanoPurgeCssExtractorResult = HtmlnanoPurgeCssExtractorResultDetailed | string[];
|
|
34
|
+
type HtmlnanoPurgeCssDefaultExtractor = (content: string) => HtmlnanoPurgeCssExtractorResult;
|
|
35
|
+
type HtmlnanoPurgeCssSourceMapOptions = {
|
|
36
|
+
absolute?: boolean;
|
|
37
|
+
annotation?: boolean | string;
|
|
38
|
+
from?: string;
|
|
39
|
+
inline?: boolean;
|
|
40
|
+
prev?: boolean | object | string;
|
|
41
|
+
sourcesContent?: boolean;
|
|
42
|
+
to?: string;
|
|
43
|
+
};
|
|
44
|
+
type HtmlnanoPurgeCssSafelist = HtmlnanoPurgeCssPattern[] | {
|
|
45
|
+
standard?: HtmlnanoPurgeCssPattern[];
|
|
46
|
+
deep?: RegExp[];
|
|
47
|
+
greedy?: RegExp[];
|
|
48
|
+
variables?: HtmlnanoPurgeCssPattern[];
|
|
49
|
+
keyframes?: HtmlnanoPurgeCssPattern[];
|
|
50
|
+
};
|
|
51
|
+
interface HtmlnanoPurgeCssOptions {
|
|
52
|
+
tool: 'purgeCSS';
|
|
53
|
+
defaultExtractor?: HtmlnanoPurgeCssDefaultExtractor;
|
|
54
|
+
fontFace?: boolean;
|
|
55
|
+
keyframes?: boolean;
|
|
56
|
+
output?: string;
|
|
57
|
+
rejected?: boolean;
|
|
58
|
+
rejectedCss?: boolean;
|
|
59
|
+
sourceMap?: boolean | HtmlnanoPurgeCssSourceMapOptions;
|
|
60
|
+
stdin?: boolean;
|
|
61
|
+
stdout?: boolean;
|
|
62
|
+
variables?: boolean;
|
|
63
|
+
safelist?: HtmlnanoPurgeCssSafelist;
|
|
64
|
+
blocklist?: HtmlnanoPurgeCssPattern[];
|
|
65
|
+
skippedContentGlobs?: string[];
|
|
66
|
+
dynamicAttributes?: string[];
|
|
67
|
+
}
|
|
23
68
|
interface HtmlnanoOptions {
|
|
24
69
|
skipConfigLoading?: boolean;
|
|
25
70
|
configPath?: string;
|
|
@@ -34,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
34
79
|
minifyUrls?: URL | string | false;
|
|
35
80
|
mergeStyles?: boolean;
|
|
36
81
|
mergeScripts?: boolean;
|
|
37
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
38
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
39
84
|
minifyConditionalComments?: boolean;
|
|
40
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
41
86
|
minifyJson?: boolean;
|
|
42
87
|
minifyAttributes?: boolean | {
|
|
43
88
|
metaContent?: boolean;
|
|
44
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
45
90
|
};
|
|
46
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
47
92
|
normalizeAttributeValues?: boolean;
|
|
48
93
|
removeAttributeQuotes?: boolean | {
|
|
49
94
|
force?: boolean;
|
|
@@ -55,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
55
100
|
};
|
|
56
101
|
removeRedundantAttributes?: boolean;
|
|
57
102
|
removeOptionalTags?: boolean;
|
|
58
|
-
removeUnusedCss?: boolean |
|
|
59
|
-
tool
|
|
60
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
61
105
|
banner?: boolean;
|
|
62
106
|
csspath?: string;
|
|
63
107
|
htmlroot?: string;
|
|
@@ -77,7 +121,7 @@ interface HtmlnanoOptions {
|
|
|
77
121
|
type HtmlnanoModuleAttrsHandler = (attrs: Record<string, string | boolean | void>, node: PostHTML.Node) => Record<string, string | boolean | void>;
|
|
78
122
|
type HtmlnanoModuleContentHandler = (content: Array<PostHTMLNodeLike>, node: PostHTML.Node) => MaybeArray<PostHTMLNodeLike>;
|
|
79
123
|
type HtmlnanoModuleNodeHandler = (node: PostHTMLNodeLike) => PostHTML.Node | string;
|
|
80
|
-
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends object ? Partial<T> : T;
|
|
124
|
+
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends Array<infer Item> ? Array<Item> : T extends object ? Partial<T> : T;
|
|
81
125
|
type HtmlnanoModule<Options = any> = {
|
|
82
126
|
onAttrs?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleAttrsHandler;
|
|
83
127
|
onContent?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleContentHandler;
|
|
@@ -1,25 +1,70 @@
|
|
|
1
1
|
import PostHTML from 'posthtml';
|
|
2
|
-
import { MinifyOptions } from 'terser';
|
|
3
|
-
import { Options } from 'cssnano';
|
|
4
|
-
import { Config } from 'svgo';
|
|
5
|
-
import { UserDefinedOptions } from 'purgecss';
|
|
6
2
|
|
|
7
|
-
type
|
|
3
|
+
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
4
|
+
type PostHTMLTreeLike = [PostHTMLNodeLike] & PostHTML.NodeAPI & {
|
|
8
5
|
options?: {
|
|
9
6
|
quoteAllAttributes?: boolean | undefined;
|
|
10
7
|
quoteStyle?: 0 | 1 | 2 | undefined;
|
|
11
8
|
replaceQuote?: boolean | undefined;
|
|
12
9
|
} | undefined;
|
|
13
10
|
render(): string;
|
|
14
|
-
render(node:
|
|
11
|
+
render(node: PostHTMLNodeLike | PostHTMLTreeLike, renderOptions?: any): string;
|
|
15
12
|
};
|
|
16
13
|
type MaybeArray<T> = T | Array<T>;
|
|
17
|
-
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
18
14
|
type HtmlnanoTemplateRule = {
|
|
19
15
|
tag: string;
|
|
20
16
|
attrs?: Record<string, string | boolean | void>;
|
|
21
17
|
};
|
|
22
18
|
type MinifyHtmlTemplateOptions = boolean | HtmlnanoTemplateRule[];
|
|
19
|
+
type HtmlnanoMinifyCssOptions = object;
|
|
20
|
+
type HtmlnanoMinifyJsOptions = object;
|
|
21
|
+
type HtmlnanoMinifySvgOptions = object;
|
|
22
|
+
type HtmlnanoPurgeCssPattern = string | RegExp;
|
|
23
|
+
type HtmlnanoPurgeCssExtractorResultDetailed = {
|
|
24
|
+
attributes: {
|
|
25
|
+
names: string[];
|
|
26
|
+
values: string[];
|
|
27
|
+
};
|
|
28
|
+
classes: string[];
|
|
29
|
+
ids: string[];
|
|
30
|
+
tags: string[];
|
|
31
|
+
undetermined: string[];
|
|
32
|
+
};
|
|
33
|
+
type HtmlnanoPurgeCssExtractorResult = HtmlnanoPurgeCssExtractorResultDetailed | string[];
|
|
34
|
+
type HtmlnanoPurgeCssDefaultExtractor = (content: string) => HtmlnanoPurgeCssExtractorResult;
|
|
35
|
+
type HtmlnanoPurgeCssSourceMapOptions = {
|
|
36
|
+
absolute?: boolean;
|
|
37
|
+
annotation?: boolean | string;
|
|
38
|
+
from?: string;
|
|
39
|
+
inline?: boolean;
|
|
40
|
+
prev?: boolean | object | string;
|
|
41
|
+
sourcesContent?: boolean;
|
|
42
|
+
to?: string;
|
|
43
|
+
};
|
|
44
|
+
type HtmlnanoPurgeCssSafelist = HtmlnanoPurgeCssPattern[] | {
|
|
45
|
+
standard?: HtmlnanoPurgeCssPattern[];
|
|
46
|
+
deep?: RegExp[];
|
|
47
|
+
greedy?: RegExp[];
|
|
48
|
+
variables?: HtmlnanoPurgeCssPattern[];
|
|
49
|
+
keyframes?: HtmlnanoPurgeCssPattern[];
|
|
50
|
+
};
|
|
51
|
+
interface HtmlnanoPurgeCssOptions {
|
|
52
|
+
tool: 'purgeCSS';
|
|
53
|
+
defaultExtractor?: HtmlnanoPurgeCssDefaultExtractor;
|
|
54
|
+
fontFace?: boolean;
|
|
55
|
+
keyframes?: boolean;
|
|
56
|
+
output?: string;
|
|
57
|
+
rejected?: boolean;
|
|
58
|
+
rejectedCss?: boolean;
|
|
59
|
+
sourceMap?: boolean | HtmlnanoPurgeCssSourceMapOptions;
|
|
60
|
+
stdin?: boolean;
|
|
61
|
+
stdout?: boolean;
|
|
62
|
+
variables?: boolean;
|
|
63
|
+
safelist?: HtmlnanoPurgeCssSafelist;
|
|
64
|
+
blocklist?: HtmlnanoPurgeCssPattern[];
|
|
65
|
+
skippedContentGlobs?: string[];
|
|
66
|
+
dynamicAttributes?: string[];
|
|
67
|
+
}
|
|
23
68
|
interface HtmlnanoOptions {
|
|
24
69
|
skipConfigLoading?: boolean;
|
|
25
70
|
configPath?: string;
|
|
@@ -34,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
34
79
|
minifyUrls?: URL | string | false;
|
|
35
80
|
mergeStyles?: boolean;
|
|
36
81
|
mergeScripts?: boolean;
|
|
37
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
38
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
39
84
|
minifyConditionalComments?: boolean;
|
|
40
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
41
86
|
minifyJson?: boolean;
|
|
42
87
|
minifyAttributes?: boolean | {
|
|
43
88
|
metaContent?: boolean;
|
|
44
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
45
90
|
};
|
|
46
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
47
92
|
normalizeAttributeValues?: boolean;
|
|
48
93
|
removeAttributeQuotes?: boolean | {
|
|
49
94
|
force?: boolean;
|
|
@@ -55,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
55
100
|
};
|
|
56
101
|
removeRedundantAttributes?: boolean;
|
|
57
102
|
removeOptionalTags?: boolean;
|
|
58
|
-
removeUnusedCss?: boolean |
|
|
59
|
-
tool
|
|
60
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
61
105
|
banner?: boolean;
|
|
62
106
|
csspath?: string;
|
|
63
107
|
htmlroot?: string;
|
|
@@ -77,7 +121,7 @@ interface HtmlnanoOptions {
|
|
|
77
121
|
type HtmlnanoModuleAttrsHandler = (attrs: Record<string, string | boolean | void>, node: PostHTML.Node) => Record<string, string | boolean | void>;
|
|
78
122
|
type HtmlnanoModuleContentHandler = (content: Array<PostHTMLNodeLike>, node: PostHTML.Node) => MaybeArray<PostHTMLNodeLike>;
|
|
79
123
|
type HtmlnanoModuleNodeHandler = (node: PostHTMLNodeLike) => PostHTML.Node | string;
|
|
80
|
-
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends object ? Partial<T> : T;
|
|
124
|
+
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends Array<infer Item> ? Array<Item> : T extends object ? Partial<T> : T;
|
|
81
125
|
type HtmlnanoModule<Options = any> = {
|
|
82
126
|
onAttrs?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleAttrsHandler;
|
|
83
127
|
onContent?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleContentHandler;
|
|
@@ -1,25 +1,70 @@
|
|
|
1
1
|
import PostHTML from 'posthtml';
|
|
2
|
-
import { MinifyOptions } from 'terser';
|
|
3
|
-
import { Options } from 'cssnano';
|
|
4
|
-
import { Config } from 'svgo';
|
|
5
|
-
import { UserDefinedOptions } from 'purgecss';
|
|
6
2
|
|
|
7
|
-
type
|
|
3
|
+
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
4
|
+
type PostHTMLTreeLike = [PostHTMLNodeLike] & PostHTML.NodeAPI & {
|
|
8
5
|
options?: {
|
|
9
6
|
quoteAllAttributes?: boolean | undefined;
|
|
10
7
|
quoteStyle?: 0 | 1 | 2 | undefined;
|
|
11
8
|
replaceQuote?: boolean | undefined;
|
|
12
9
|
} | undefined;
|
|
13
10
|
render(): string;
|
|
14
|
-
render(node:
|
|
11
|
+
render(node: PostHTMLNodeLike | PostHTMLTreeLike, renderOptions?: any): string;
|
|
15
12
|
};
|
|
16
13
|
type MaybeArray<T> = T | Array<T>;
|
|
17
|
-
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
18
14
|
type HtmlnanoTemplateRule = {
|
|
19
15
|
tag: string;
|
|
20
16
|
attrs?: Record<string, string | boolean | void>;
|
|
21
17
|
};
|
|
22
18
|
type MinifyHtmlTemplateOptions = boolean | HtmlnanoTemplateRule[];
|
|
19
|
+
type HtmlnanoMinifyCssOptions = object;
|
|
20
|
+
type HtmlnanoMinifyJsOptions = object;
|
|
21
|
+
type HtmlnanoMinifySvgOptions = object;
|
|
22
|
+
type HtmlnanoPurgeCssPattern = string | RegExp;
|
|
23
|
+
type HtmlnanoPurgeCssExtractorResultDetailed = {
|
|
24
|
+
attributes: {
|
|
25
|
+
names: string[];
|
|
26
|
+
values: string[];
|
|
27
|
+
};
|
|
28
|
+
classes: string[];
|
|
29
|
+
ids: string[];
|
|
30
|
+
tags: string[];
|
|
31
|
+
undetermined: string[];
|
|
32
|
+
};
|
|
33
|
+
type HtmlnanoPurgeCssExtractorResult = HtmlnanoPurgeCssExtractorResultDetailed | string[];
|
|
34
|
+
type HtmlnanoPurgeCssDefaultExtractor = (content: string) => HtmlnanoPurgeCssExtractorResult;
|
|
35
|
+
type HtmlnanoPurgeCssSourceMapOptions = {
|
|
36
|
+
absolute?: boolean;
|
|
37
|
+
annotation?: boolean | string;
|
|
38
|
+
from?: string;
|
|
39
|
+
inline?: boolean;
|
|
40
|
+
prev?: boolean | object | string;
|
|
41
|
+
sourcesContent?: boolean;
|
|
42
|
+
to?: string;
|
|
43
|
+
};
|
|
44
|
+
type HtmlnanoPurgeCssSafelist = HtmlnanoPurgeCssPattern[] | {
|
|
45
|
+
standard?: HtmlnanoPurgeCssPattern[];
|
|
46
|
+
deep?: RegExp[];
|
|
47
|
+
greedy?: RegExp[];
|
|
48
|
+
variables?: HtmlnanoPurgeCssPattern[];
|
|
49
|
+
keyframes?: HtmlnanoPurgeCssPattern[];
|
|
50
|
+
};
|
|
51
|
+
interface HtmlnanoPurgeCssOptions {
|
|
52
|
+
tool: 'purgeCSS';
|
|
53
|
+
defaultExtractor?: HtmlnanoPurgeCssDefaultExtractor;
|
|
54
|
+
fontFace?: boolean;
|
|
55
|
+
keyframes?: boolean;
|
|
56
|
+
output?: string;
|
|
57
|
+
rejected?: boolean;
|
|
58
|
+
rejectedCss?: boolean;
|
|
59
|
+
sourceMap?: boolean | HtmlnanoPurgeCssSourceMapOptions;
|
|
60
|
+
stdin?: boolean;
|
|
61
|
+
stdout?: boolean;
|
|
62
|
+
variables?: boolean;
|
|
63
|
+
safelist?: HtmlnanoPurgeCssSafelist;
|
|
64
|
+
blocklist?: HtmlnanoPurgeCssPattern[];
|
|
65
|
+
skippedContentGlobs?: string[];
|
|
66
|
+
dynamicAttributes?: string[];
|
|
67
|
+
}
|
|
23
68
|
interface HtmlnanoOptions {
|
|
24
69
|
skipConfigLoading?: boolean;
|
|
25
70
|
configPath?: string;
|
|
@@ -34,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
34
79
|
minifyUrls?: URL | string | false;
|
|
35
80
|
mergeStyles?: boolean;
|
|
36
81
|
mergeScripts?: boolean;
|
|
37
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
38
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
39
84
|
minifyConditionalComments?: boolean;
|
|
40
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
41
86
|
minifyJson?: boolean;
|
|
42
87
|
minifyAttributes?: boolean | {
|
|
43
88
|
metaContent?: boolean;
|
|
44
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
45
90
|
};
|
|
46
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
47
92
|
normalizeAttributeValues?: boolean;
|
|
48
93
|
removeAttributeQuotes?: boolean | {
|
|
49
94
|
force?: boolean;
|
|
@@ -55,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
55
100
|
};
|
|
56
101
|
removeRedundantAttributes?: boolean;
|
|
57
102
|
removeOptionalTags?: boolean;
|
|
58
|
-
removeUnusedCss?: boolean |
|
|
59
|
-
tool
|
|
60
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
61
105
|
banner?: boolean;
|
|
62
106
|
csspath?: string;
|
|
63
107
|
htmlroot?: string;
|
|
@@ -77,7 +121,7 @@ interface HtmlnanoOptions {
|
|
|
77
121
|
type HtmlnanoModuleAttrsHandler = (attrs: Record<string, string | boolean | void>, node: PostHTML.Node) => Record<string, string | boolean | void>;
|
|
78
122
|
type HtmlnanoModuleContentHandler = (content: Array<PostHTMLNodeLike>, node: PostHTML.Node) => MaybeArray<PostHTMLNodeLike>;
|
|
79
123
|
type HtmlnanoModuleNodeHandler = (node: PostHTMLNodeLike) => PostHTML.Node | string;
|
|
80
|
-
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends object ? Partial<T> : T;
|
|
124
|
+
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends Array<infer Item> ? Array<Item> : T extends object ? Partial<T> : T;
|
|
81
125
|
type HtmlnanoModule<Options = any> = {
|
|
82
126
|
onAttrs?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleAttrsHandler;
|
|
83
127
|
onContent?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleContentHandler;
|
|
@@ -1,25 +1,70 @@
|
|
|
1
1
|
import PostHTML from 'posthtml';
|
|
2
|
-
import { MinifyOptions } from 'terser';
|
|
3
|
-
import { Options } from 'cssnano';
|
|
4
|
-
import { Config } from 'svgo';
|
|
5
|
-
import { UserDefinedOptions } from 'purgecss';
|
|
6
2
|
|
|
7
|
-
type
|
|
3
|
+
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
4
|
+
type PostHTMLTreeLike = [PostHTMLNodeLike] & PostHTML.NodeAPI & {
|
|
8
5
|
options?: {
|
|
9
6
|
quoteAllAttributes?: boolean | undefined;
|
|
10
7
|
quoteStyle?: 0 | 1 | 2 | undefined;
|
|
11
8
|
replaceQuote?: boolean | undefined;
|
|
12
9
|
} | undefined;
|
|
13
10
|
render(): string;
|
|
14
|
-
render(node:
|
|
11
|
+
render(node: PostHTMLNodeLike | PostHTMLTreeLike, renderOptions?: any): string;
|
|
15
12
|
};
|
|
16
13
|
type MaybeArray<T> = T | Array<T>;
|
|
17
|
-
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
18
14
|
type HtmlnanoTemplateRule = {
|
|
19
15
|
tag: string;
|
|
20
16
|
attrs?: Record<string, string | boolean | void>;
|
|
21
17
|
};
|
|
22
18
|
type MinifyHtmlTemplateOptions = boolean | HtmlnanoTemplateRule[];
|
|
19
|
+
type HtmlnanoMinifyCssOptions = object;
|
|
20
|
+
type HtmlnanoMinifyJsOptions = object;
|
|
21
|
+
type HtmlnanoMinifySvgOptions = object;
|
|
22
|
+
type HtmlnanoPurgeCssPattern = string | RegExp;
|
|
23
|
+
type HtmlnanoPurgeCssExtractorResultDetailed = {
|
|
24
|
+
attributes: {
|
|
25
|
+
names: string[];
|
|
26
|
+
values: string[];
|
|
27
|
+
};
|
|
28
|
+
classes: string[];
|
|
29
|
+
ids: string[];
|
|
30
|
+
tags: string[];
|
|
31
|
+
undetermined: string[];
|
|
32
|
+
};
|
|
33
|
+
type HtmlnanoPurgeCssExtractorResult = HtmlnanoPurgeCssExtractorResultDetailed | string[];
|
|
34
|
+
type HtmlnanoPurgeCssDefaultExtractor = (content: string) => HtmlnanoPurgeCssExtractorResult;
|
|
35
|
+
type HtmlnanoPurgeCssSourceMapOptions = {
|
|
36
|
+
absolute?: boolean;
|
|
37
|
+
annotation?: boolean | string;
|
|
38
|
+
from?: string;
|
|
39
|
+
inline?: boolean;
|
|
40
|
+
prev?: boolean | object | string;
|
|
41
|
+
sourcesContent?: boolean;
|
|
42
|
+
to?: string;
|
|
43
|
+
};
|
|
44
|
+
type HtmlnanoPurgeCssSafelist = HtmlnanoPurgeCssPattern[] | {
|
|
45
|
+
standard?: HtmlnanoPurgeCssPattern[];
|
|
46
|
+
deep?: RegExp[];
|
|
47
|
+
greedy?: RegExp[];
|
|
48
|
+
variables?: HtmlnanoPurgeCssPattern[];
|
|
49
|
+
keyframes?: HtmlnanoPurgeCssPattern[];
|
|
50
|
+
};
|
|
51
|
+
interface HtmlnanoPurgeCssOptions {
|
|
52
|
+
tool: 'purgeCSS';
|
|
53
|
+
defaultExtractor?: HtmlnanoPurgeCssDefaultExtractor;
|
|
54
|
+
fontFace?: boolean;
|
|
55
|
+
keyframes?: boolean;
|
|
56
|
+
output?: string;
|
|
57
|
+
rejected?: boolean;
|
|
58
|
+
rejectedCss?: boolean;
|
|
59
|
+
sourceMap?: boolean | HtmlnanoPurgeCssSourceMapOptions;
|
|
60
|
+
stdin?: boolean;
|
|
61
|
+
stdout?: boolean;
|
|
62
|
+
variables?: boolean;
|
|
63
|
+
safelist?: HtmlnanoPurgeCssSafelist;
|
|
64
|
+
blocklist?: HtmlnanoPurgeCssPattern[];
|
|
65
|
+
skippedContentGlobs?: string[];
|
|
66
|
+
dynamicAttributes?: string[];
|
|
67
|
+
}
|
|
23
68
|
interface HtmlnanoOptions {
|
|
24
69
|
skipConfigLoading?: boolean;
|
|
25
70
|
configPath?: string;
|
|
@@ -34,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
34
79
|
minifyUrls?: URL | string | false;
|
|
35
80
|
mergeStyles?: boolean;
|
|
36
81
|
mergeScripts?: boolean;
|
|
37
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
38
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
39
84
|
minifyConditionalComments?: boolean;
|
|
40
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
41
86
|
minifyJson?: boolean;
|
|
42
87
|
minifyAttributes?: boolean | {
|
|
43
88
|
metaContent?: boolean;
|
|
44
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
45
90
|
};
|
|
46
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
47
92
|
normalizeAttributeValues?: boolean;
|
|
48
93
|
removeAttributeQuotes?: boolean | {
|
|
49
94
|
force?: boolean;
|
|
@@ -55,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
55
100
|
};
|
|
56
101
|
removeRedundantAttributes?: boolean;
|
|
57
102
|
removeOptionalTags?: boolean;
|
|
58
|
-
removeUnusedCss?: boolean |
|
|
59
|
-
tool
|
|
60
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
61
105
|
banner?: boolean;
|
|
62
106
|
csspath?: string;
|
|
63
107
|
htmlroot?: string;
|
|
@@ -77,7 +121,7 @@ interface HtmlnanoOptions {
|
|
|
77
121
|
type HtmlnanoModuleAttrsHandler = (attrs: Record<string, string | boolean | void>, node: PostHTML.Node) => Record<string, string | boolean | void>;
|
|
78
122
|
type HtmlnanoModuleContentHandler = (content: Array<PostHTMLNodeLike>, node: PostHTML.Node) => MaybeArray<PostHTMLNodeLike>;
|
|
79
123
|
type HtmlnanoModuleNodeHandler = (node: PostHTMLNodeLike) => PostHTML.Node | string;
|
|
80
|
-
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends object ? Partial<T> : T;
|
|
124
|
+
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends Array<infer Item> ? Array<Item> : T extends object ? Partial<T> : T;
|
|
81
125
|
type HtmlnanoModule<Options = any> = {
|
|
82
126
|
onAttrs?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleAttrsHandler;
|
|
83
127
|
onContent?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleContentHandler;
|
|
@@ -1,25 +1,70 @@
|
|
|
1
1
|
import PostHTML from 'posthtml';
|
|
2
|
-
import { MinifyOptions } from 'terser';
|
|
3
|
-
import { Options } from 'cssnano';
|
|
4
|
-
import { Config } from 'svgo';
|
|
5
|
-
import { UserDefinedOptions } from 'purgecss';
|
|
6
2
|
|
|
7
|
-
type
|
|
3
|
+
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
4
|
+
type PostHTMLTreeLike = [PostHTMLNodeLike] & PostHTML.NodeAPI & {
|
|
8
5
|
options?: {
|
|
9
6
|
quoteAllAttributes?: boolean | undefined;
|
|
10
7
|
quoteStyle?: 0 | 1 | 2 | undefined;
|
|
11
8
|
replaceQuote?: boolean | undefined;
|
|
12
9
|
} | undefined;
|
|
13
10
|
render(): string;
|
|
14
|
-
render(node:
|
|
11
|
+
render(node: PostHTMLNodeLike | PostHTMLTreeLike, renderOptions?: any): string;
|
|
15
12
|
};
|
|
16
13
|
type MaybeArray<T> = T | Array<T>;
|
|
17
|
-
type PostHTMLNodeLike = PostHTML.Node | string;
|
|
18
14
|
type HtmlnanoTemplateRule = {
|
|
19
15
|
tag: string;
|
|
20
16
|
attrs?: Record<string, string | boolean | void>;
|
|
21
17
|
};
|
|
22
18
|
type MinifyHtmlTemplateOptions = boolean | HtmlnanoTemplateRule[];
|
|
19
|
+
type HtmlnanoMinifyCssOptions = object;
|
|
20
|
+
type HtmlnanoMinifyJsOptions = object;
|
|
21
|
+
type HtmlnanoMinifySvgOptions = object;
|
|
22
|
+
type HtmlnanoPurgeCssPattern = string | RegExp;
|
|
23
|
+
type HtmlnanoPurgeCssExtractorResultDetailed = {
|
|
24
|
+
attributes: {
|
|
25
|
+
names: string[];
|
|
26
|
+
values: string[];
|
|
27
|
+
};
|
|
28
|
+
classes: string[];
|
|
29
|
+
ids: string[];
|
|
30
|
+
tags: string[];
|
|
31
|
+
undetermined: string[];
|
|
32
|
+
};
|
|
33
|
+
type HtmlnanoPurgeCssExtractorResult = HtmlnanoPurgeCssExtractorResultDetailed | string[];
|
|
34
|
+
type HtmlnanoPurgeCssDefaultExtractor = (content: string) => HtmlnanoPurgeCssExtractorResult;
|
|
35
|
+
type HtmlnanoPurgeCssSourceMapOptions = {
|
|
36
|
+
absolute?: boolean;
|
|
37
|
+
annotation?: boolean | string;
|
|
38
|
+
from?: string;
|
|
39
|
+
inline?: boolean;
|
|
40
|
+
prev?: boolean | object | string;
|
|
41
|
+
sourcesContent?: boolean;
|
|
42
|
+
to?: string;
|
|
43
|
+
};
|
|
44
|
+
type HtmlnanoPurgeCssSafelist = HtmlnanoPurgeCssPattern[] | {
|
|
45
|
+
standard?: HtmlnanoPurgeCssPattern[];
|
|
46
|
+
deep?: RegExp[];
|
|
47
|
+
greedy?: RegExp[];
|
|
48
|
+
variables?: HtmlnanoPurgeCssPattern[];
|
|
49
|
+
keyframes?: HtmlnanoPurgeCssPattern[];
|
|
50
|
+
};
|
|
51
|
+
interface HtmlnanoPurgeCssOptions {
|
|
52
|
+
tool: 'purgeCSS';
|
|
53
|
+
defaultExtractor?: HtmlnanoPurgeCssDefaultExtractor;
|
|
54
|
+
fontFace?: boolean;
|
|
55
|
+
keyframes?: boolean;
|
|
56
|
+
output?: string;
|
|
57
|
+
rejected?: boolean;
|
|
58
|
+
rejectedCss?: boolean;
|
|
59
|
+
sourceMap?: boolean | HtmlnanoPurgeCssSourceMapOptions;
|
|
60
|
+
stdin?: boolean;
|
|
61
|
+
stdout?: boolean;
|
|
62
|
+
variables?: boolean;
|
|
63
|
+
safelist?: HtmlnanoPurgeCssSafelist;
|
|
64
|
+
blocklist?: HtmlnanoPurgeCssPattern[];
|
|
65
|
+
skippedContentGlobs?: string[];
|
|
66
|
+
dynamicAttributes?: string[];
|
|
67
|
+
}
|
|
23
68
|
interface HtmlnanoOptions {
|
|
24
69
|
skipConfigLoading?: boolean;
|
|
25
70
|
configPath?: string;
|
|
@@ -34,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
34
79
|
minifyUrls?: URL | string | false;
|
|
35
80
|
mergeStyles?: boolean;
|
|
36
81
|
mergeScripts?: boolean;
|
|
37
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
38
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
39
84
|
minifyConditionalComments?: boolean;
|
|
40
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
41
86
|
minifyJson?: boolean;
|
|
42
87
|
minifyAttributes?: boolean | {
|
|
43
88
|
metaContent?: boolean;
|
|
44
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
45
90
|
};
|
|
46
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
47
92
|
normalizeAttributeValues?: boolean;
|
|
48
93
|
removeAttributeQuotes?: boolean | {
|
|
49
94
|
force?: boolean;
|
|
@@ -55,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
55
100
|
};
|
|
56
101
|
removeRedundantAttributes?: boolean;
|
|
57
102
|
removeOptionalTags?: boolean;
|
|
58
|
-
removeUnusedCss?: boolean |
|
|
59
|
-
tool
|
|
60
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
61
105
|
banner?: boolean;
|
|
62
106
|
csspath?: string;
|
|
63
107
|
htmlroot?: string;
|
|
@@ -77,7 +121,7 @@ interface HtmlnanoOptions {
|
|
|
77
121
|
type HtmlnanoModuleAttrsHandler = (attrs: Record<string, string | boolean | void>, node: PostHTML.Node) => Record<string, string | boolean | void>;
|
|
78
122
|
type HtmlnanoModuleContentHandler = (content: Array<PostHTMLNodeLike>, node: PostHTML.Node) => MaybeArray<PostHTMLNodeLike>;
|
|
79
123
|
type HtmlnanoModuleNodeHandler = (node: PostHTMLNodeLike) => PostHTML.Node | string;
|
|
80
|
-
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends object ? Partial<T> : T;
|
|
124
|
+
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends Array<infer Item> ? Array<Item> : T extends object ? Partial<T> : T;
|
|
81
125
|
type HtmlnanoModule<Options = any> = {
|
|
82
126
|
onAttrs?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleAttrsHandler;
|
|
83
127
|
onContent?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleContentHandler;
|