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/dist/index.d.ts
CHANGED
|
@@ -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;
|
|
@@ -84,7 +128,7 @@ type HtmlnanoOptionsConfigFile = Omit<HtmlnanoOptions, 'skipConfigLoading' | 'co
|
|
|
84
128
|
type HtmlnanoModuleAttrsHandler = (attrs: Record<string, string | boolean | void>, node: PostHTML.Node) => Record<string, string | boolean | void>;
|
|
85
129
|
type HtmlnanoModuleContentHandler = (content: Array<PostHTMLNodeLike>, node: PostHTML.Node) => MaybeArray<PostHTMLNodeLike>;
|
|
86
130
|
type HtmlnanoModuleNodeHandler = (node: PostHTMLNodeLike) => PostHTML.Node | string;
|
|
87
|
-
type OptionalOptions<T> = T extends boolean | string | Function | number | null | undefined ? T : T extends object ? Partial<T> : T;
|
|
131
|
+
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;
|
|
88
132
|
type HtmlnanoModule<Options = any> = {
|
|
89
133
|
onAttrs?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleAttrsHandler;
|
|
90
134
|
onContent?: (options: Partial<HtmlnanoOptions>, moduleOptions: OptionalOptions<Options>) => HtmlnanoModuleContentHandler;
|
|
@@ -110,4 +154,4 @@ declare function htmlMinimizerWebpackPluginMinify(input: {
|
|
|
110
154
|
}>;
|
|
111
155
|
|
|
112
156
|
export { htmlnano as default, getRequiredOptionalDependencies, htmlMinimizerWebpackPluginMinify, loadConfig, presets, process };
|
|
113
|
-
export type { HtmlnanoModule, HtmlnanoModuleAttrsHandler, HtmlnanoModuleContentHandler, HtmlnanoModuleNodeHandler, HtmlnanoOptions, HtmlnanoOptionsConfigFile, HtmlnanoPredefinedPreset, HtmlnanoPredefinedPresets, HtmlnanoPreset, HtmlnanoTemplateRule, MinifyHtmlTemplateOptions, PostHTMLNodeLike, PostHTMLTreeLike };
|
|
157
|
+
export type { HtmlnanoMinifyCssOptions, HtmlnanoMinifyJsOptions, HtmlnanoMinifySvgOptions, HtmlnanoModule, HtmlnanoModuleAttrsHandler, HtmlnanoModuleContentHandler, HtmlnanoModuleNodeHandler, HtmlnanoOptions, HtmlnanoOptionsConfigFile, HtmlnanoPredefinedPreset, HtmlnanoPredefinedPresets, HtmlnanoPreset, HtmlnanoPurgeCssDefaultExtractor, HtmlnanoPurgeCssExtractorResult, HtmlnanoPurgeCssExtractorResultDetailed, HtmlnanoPurgeCssOptions, HtmlnanoPurgeCssPattern, HtmlnanoPurgeCssSafelist, HtmlnanoPurgeCssSourceMapOptions, HtmlnanoTemplateRule, MinifyHtmlTemplateOptions, PostHTMLNodeLike, PostHTMLTreeLike };
|
package/dist/index.js
CHANGED
|
@@ -256,14 +256,15 @@ const htmlnano = Object.assign(function htmlnano(optionsRun = {}, presetRun) {
|
|
|
256
256
|
});
|
|
257
257
|
function getRequiredOptionalDependencies(optionsRun, presetRun) {
|
|
258
258
|
const [options] = loadConfig(optionsRun, presetRun);
|
|
259
|
-
|
|
259
|
+
const dependencies = Object.keys(options).flatMap((moduleName)=>{
|
|
260
260
|
if (moduleName in optionalDependencies) {
|
|
261
|
-
|
|
262
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method -- thisArg provided by forEach
|
|
263
|
-
dependencies.forEach(acc.add, acc);
|
|
261
|
+
return optionalDependencies[moduleName];
|
|
264
262
|
}
|
|
265
|
-
return
|
|
266
|
-
}
|
|
263
|
+
return [];
|
|
264
|
+
});
|
|
265
|
+
return [
|
|
266
|
+
...new Set(dependencies)
|
|
267
|
+
];
|
|
267
268
|
}
|
|
268
269
|
function process(html, options, preset, postHtmlOptions) {
|
|
269
270
|
return posthtml__default.default([
|
package/dist/index.mjs
CHANGED
|
@@ -247,14 +247,15 @@ const htmlnano = Object.assign(function htmlnano(optionsRun = {}, presetRun) {
|
|
|
247
247
|
});
|
|
248
248
|
function getRequiredOptionalDependencies(optionsRun, presetRun) {
|
|
249
249
|
const [options] = loadConfig(optionsRun, presetRun);
|
|
250
|
-
|
|
250
|
+
const dependencies = Object.keys(options).flatMap((moduleName)=>{
|
|
251
251
|
if (moduleName in optionalDependencies) {
|
|
252
|
-
|
|
253
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method -- thisArg provided by forEach
|
|
254
|
-
dependencies.forEach(acc.add, acc);
|
|
252
|
+
return optionalDependencies[moduleName];
|
|
255
253
|
}
|
|
256
|
-
return
|
|
257
|
-
}
|
|
254
|
+
return [];
|
|
255
|
+
});
|
|
256
|
+
return [
|
|
257
|
+
...new Set(dependencies)
|
|
258
|
+
];
|
|
258
259
|
}
|
|
259
260
|
function process(html, options, preset, postHtmlOptions) {
|
|
260
261
|
return posthtml([
|
|
@@ -1,17 +1,14 @@
|
|
|
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
14
|
type HtmlnanoTemplateRule = {
|
|
@@ -19,6 +16,55 @@ type HtmlnanoTemplateRule = {
|
|
|
19
16
|
attrs?: Record<string, string | boolean | void>;
|
|
20
17
|
};
|
|
21
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
|
+
}
|
|
22
68
|
interface HtmlnanoOptions {
|
|
23
69
|
skipConfigLoading?: boolean;
|
|
24
70
|
configPath?: string;
|
|
@@ -33,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
33
79
|
minifyUrls?: URL | string | false;
|
|
34
80
|
mergeStyles?: boolean;
|
|
35
81
|
mergeScripts?: boolean;
|
|
36
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
37
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
38
84
|
minifyConditionalComments?: boolean;
|
|
39
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
40
86
|
minifyJson?: boolean;
|
|
41
87
|
minifyAttributes?: boolean | {
|
|
42
88
|
metaContent?: boolean;
|
|
43
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
44
90
|
};
|
|
45
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
46
92
|
normalizeAttributeValues?: boolean;
|
|
47
93
|
removeAttributeQuotes?: boolean | {
|
|
48
94
|
force?: boolean;
|
|
@@ -54,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
54
100
|
};
|
|
55
101
|
removeRedundantAttributes?: boolean;
|
|
56
102
|
removeOptionalTags?: boolean;
|
|
57
|
-
removeUnusedCss?: boolean |
|
|
58
|
-
tool
|
|
59
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
60
105
|
banner?: boolean;
|
|
61
106
|
csspath?: string;
|
|
62
107
|
htmlroot?: string;
|
package/dist/presets/max.d.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
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
14
|
type HtmlnanoTemplateRule = {
|
|
@@ -19,6 +16,55 @@ type HtmlnanoTemplateRule = {
|
|
|
19
16
|
attrs?: Record<string, string | boolean | void>;
|
|
20
17
|
};
|
|
21
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
|
+
}
|
|
22
68
|
interface HtmlnanoOptions {
|
|
23
69
|
skipConfigLoading?: boolean;
|
|
24
70
|
configPath?: string;
|
|
@@ -33,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
33
79
|
minifyUrls?: URL | string | false;
|
|
34
80
|
mergeStyles?: boolean;
|
|
35
81
|
mergeScripts?: boolean;
|
|
36
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
37
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
38
84
|
minifyConditionalComments?: boolean;
|
|
39
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
40
86
|
minifyJson?: boolean;
|
|
41
87
|
minifyAttributes?: boolean | {
|
|
42
88
|
metaContent?: boolean;
|
|
43
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
44
90
|
};
|
|
45
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
46
92
|
normalizeAttributeValues?: boolean;
|
|
47
93
|
removeAttributeQuotes?: boolean | {
|
|
48
94
|
force?: boolean;
|
|
@@ -54,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
54
100
|
};
|
|
55
101
|
removeRedundantAttributes?: boolean;
|
|
56
102
|
removeOptionalTags?: boolean;
|
|
57
|
-
removeUnusedCss?: boolean |
|
|
58
|
-
tool
|
|
59
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
60
105
|
banner?: boolean;
|
|
61
106
|
csspath?: string;
|
|
62
107
|
htmlroot?: string;
|
package/dist/presets/max.js
CHANGED
|
@@ -10,23 +10,27 @@ var safePreset__default = /*#__PURE__*/_interopDefault(safePreset);
|
|
|
10
10
|
* Maximal minification (might break some pages)
|
|
11
11
|
*/ var max = {
|
|
12
12
|
...safePreset__default.default,
|
|
13
|
+
removeRedundantAttributes: true,
|
|
14
|
+
sortAttributes: true,
|
|
13
15
|
collapseWhitespace: 'all',
|
|
14
16
|
removeComments: 'all',
|
|
17
|
+
removeEmptyElements: true,
|
|
18
|
+
minifyConditionalComments: true,
|
|
19
|
+
removeOptionalTags: true,
|
|
15
20
|
removeAttributeQuotes: true,
|
|
16
|
-
removeRedundantAttributes: true,
|
|
17
21
|
minifyAttributes: {
|
|
18
22
|
metaContent: true,
|
|
19
23
|
redundantWhitespaces: 'agressive'
|
|
20
24
|
},
|
|
21
25
|
mergeScripts: true,
|
|
22
26
|
mergeStyles: true,
|
|
23
|
-
removeUnusedCss: {
|
|
27
|
+
removeUnusedCss: {
|
|
28
|
+
tool: 'purgeCSS'
|
|
29
|
+
},
|
|
24
30
|
minifyCss: {
|
|
25
31
|
preset: 'default'
|
|
26
32
|
},
|
|
27
|
-
minifySvg: {}
|
|
28
|
-
minifyConditionalComments: true,
|
|
29
|
-
removeOptionalTags: true
|
|
33
|
+
minifySvg: {}
|
|
30
34
|
};
|
|
31
35
|
|
|
32
36
|
exports.default = max;
|
package/dist/presets/max.mjs
CHANGED
|
@@ -4,23 +4,27 @@ import safePreset from './safe.mjs';
|
|
|
4
4
|
* Maximal minification (might break some pages)
|
|
5
5
|
*/ var max = {
|
|
6
6
|
...safePreset,
|
|
7
|
+
removeRedundantAttributes: true,
|
|
8
|
+
sortAttributes: true,
|
|
7
9
|
collapseWhitespace: 'all',
|
|
8
10
|
removeComments: 'all',
|
|
11
|
+
removeEmptyElements: true,
|
|
12
|
+
minifyConditionalComments: true,
|
|
13
|
+
removeOptionalTags: true,
|
|
9
14
|
removeAttributeQuotes: true,
|
|
10
|
-
removeRedundantAttributes: true,
|
|
11
15
|
minifyAttributes: {
|
|
12
16
|
metaContent: true,
|
|
13
17
|
redundantWhitespaces: 'agressive'
|
|
14
18
|
},
|
|
15
19
|
mergeScripts: true,
|
|
16
20
|
mergeStyles: true,
|
|
17
|
-
removeUnusedCss: {
|
|
21
|
+
removeUnusedCss: {
|
|
22
|
+
tool: 'purgeCSS'
|
|
23
|
+
},
|
|
18
24
|
minifyCss: {
|
|
19
25
|
preset: 'default'
|
|
20
26
|
},
|
|
21
|
-
minifySvg: {}
|
|
22
|
-
minifyConditionalComments: true,
|
|
23
|
-
removeOptionalTags: true
|
|
27
|
+
minifySvg: {}
|
|
24
28
|
};
|
|
25
29
|
|
|
26
30
|
export { max as default };
|
package/dist/presets/safe.d.ts
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
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
14
|
type HtmlnanoTemplateRule = {
|
|
@@ -19,6 +16,55 @@ type HtmlnanoTemplateRule = {
|
|
|
19
16
|
attrs?: Record<string, string | boolean | void>;
|
|
20
17
|
};
|
|
21
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
|
+
}
|
|
22
68
|
interface HtmlnanoOptions {
|
|
23
69
|
skipConfigLoading?: boolean;
|
|
24
70
|
configPath?: string;
|
|
@@ -33,16 +79,16 @@ interface HtmlnanoOptions {
|
|
|
33
79
|
minifyUrls?: URL | string | false;
|
|
34
80
|
mergeStyles?: boolean;
|
|
35
81
|
mergeScripts?: boolean;
|
|
36
|
-
minifyCss?:
|
|
82
|
+
minifyCss?: HtmlnanoMinifyCssOptions | boolean;
|
|
37
83
|
minifyHtmlTemplate?: MinifyHtmlTemplateOptions;
|
|
38
84
|
minifyConditionalComments?: boolean;
|
|
39
|
-
minifyJs?:
|
|
85
|
+
minifyJs?: HtmlnanoMinifyJsOptions | boolean;
|
|
40
86
|
minifyJson?: boolean;
|
|
41
87
|
minifyAttributes?: boolean | {
|
|
42
88
|
metaContent?: boolean;
|
|
43
89
|
redundantWhitespaces?: 'safe' | 'agressive' | false;
|
|
44
90
|
};
|
|
45
|
-
minifySvg?:
|
|
91
|
+
minifySvg?: HtmlnanoMinifySvgOptions | boolean;
|
|
46
92
|
normalizeAttributeValues?: boolean;
|
|
47
93
|
removeAttributeQuotes?: boolean | {
|
|
48
94
|
force?: boolean;
|
|
@@ -54,9 +100,8 @@ interface HtmlnanoOptions {
|
|
|
54
100
|
};
|
|
55
101
|
removeRedundantAttributes?: boolean;
|
|
56
102
|
removeOptionalTags?: boolean;
|
|
57
|
-
removeUnusedCss?: boolean |
|
|
58
|
-
tool
|
|
59
|
-
} & Omit<UserDefinedOptions, 'content' | 'css' | 'extractors'>) | {
|
|
103
|
+
removeUnusedCss?: boolean | HtmlnanoPurgeCssOptions | {
|
|
104
|
+
tool?: 'uncss';
|
|
60
105
|
banner?: boolean;
|
|
61
106
|
csspath?: string;
|
|
62
107
|
htmlroot?: string;
|
package/dist/presets/safe.js
CHANGED
package/dist/presets/safe.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "htmlnano",
|
|
3
|
-
"version": "3.1
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Modular HTML minifier, built on top of the PostHTML",
|
|
5
5
|
"author": "Kirill Maltsev <maltsevkirill@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -9,11 +9,16 @@
|
|
|
9
9
|
"build": "npm run clean && bunchee",
|
|
10
10
|
"postbuild": "chmod +x dist/bin.js",
|
|
11
11
|
"compile": "npm run build",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
12
|
+
"release": "node scripts/release.js",
|
|
13
|
+
"lint:eslint": "eslint --fix .",
|
|
14
|
+
"lint:duplicates": "jscpd",
|
|
15
|
+
"lint:knip": "knip",
|
|
16
|
+
"lint": "npm run lint:eslint && npm run lint:duplicates && npm run lint:knip",
|
|
17
|
+
"test:types": "tsc --noEmit -p tsconfig.typecheck.json",
|
|
18
|
+
"test:mocha": "mocha --timeout 5000 --require @swc-node/register --recursive --ignore 'test/typecheck/**/*.ts' --check-leaks --globals addresses 'test/**/*.ts'",
|
|
19
|
+
"pretest": "npm run lint && npm run compile && npm run test:types",
|
|
15
20
|
"test": "c8 -r text -r html npm run test:mocha",
|
|
16
|
-
"posttest": "c8 check-coverage --lines
|
|
21
|
+
"posttest": "c8 check-coverage --lines 85 --per-file",
|
|
17
22
|
"prepare": "npm run compile"
|
|
18
23
|
},
|
|
19
24
|
"files": [
|
|
@@ -63,21 +68,22 @@
|
|
|
63
68
|
"posthtml": "^0.16.5"
|
|
64
69
|
},
|
|
65
70
|
"devDependencies": {
|
|
66
|
-
"@eslint/js": "^
|
|
71
|
+
"@eslint/js": "^10.0.1",
|
|
67
72
|
"@stylistic/eslint-plugin": "^5.3.1",
|
|
68
73
|
"@swc-node/register": "^1.10.10",
|
|
69
74
|
"@types/mocha": "^10.0.10",
|
|
70
75
|
"@types/node": "^25.0.0",
|
|
71
76
|
"bunchee": "^6.5.1",
|
|
72
|
-
"c8": "^
|
|
77
|
+
"c8": "^11.0.0",
|
|
73
78
|
"cssnano": "^7.0.0",
|
|
74
|
-
"eslint": "^
|
|
75
|
-
"eslint-config-flat-gitignore": "^2.
|
|
76
|
-
"eslint-plugin-import": "^
|
|
77
|
-
"eslint-plugin-
|
|
78
|
-
"eslint-plugin-unused-imports": "^4.1.4",
|
|
79
|
+
"eslint": "^10.2.0",
|
|
80
|
+
"eslint-config-flat-gitignore": "^2.3.0",
|
|
81
|
+
"eslint-plugin-import-x": "^4.16.2",
|
|
82
|
+
"eslint-plugin-unused-imports": "^4.4.1",
|
|
79
83
|
"expect": "^30.1.1",
|
|
80
84
|
"globals": "^17.0.0",
|
|
85
|
+
"jscpd": "^4.0.8",
|
|
86
|
+
"knip": "^6.0.2",
|
|
81
87
|
"mocha": "^11.0.1",
|
|
82
88
|
"postcss": "^8.3.11",
|
|
83
89
|
"purgecss": "^8.0.0",
|
|
@@ -86,8 +92,8 @@
|
|
|
86
92
|
"srcset": "^5.0.1",
|
|
87
93
|
"svgo": "^4.0.0",
|
|
88
94
|
"terser": "^5.21.0",
|
|
89
|
-
"typescript": "^
|
|
90
|
-
"typescript-eslint": "^8.
|
|
95
|
+
"typescript": "^6.0.2",
|
|
96
|
+
"typescript-eslint": "^8.58.1",
|
|
91
97
|
"uncss": "^0.17.3"
|
|
92
98
|
},
|
|
93
99
|
"peerDependencies": {
|