-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptions.ts
106 lines (88 loc) · 2.67 KB
/
options.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { Options as htmlMinifierOptions } from 'html-minifier-terser'
import { compressFormat } from './compress.js'
export interface Options {
/**
* Rename index.html
*/
rename?: string
/**
* https://github.com/terser/html-minifier-terser?tab=readme-ov-file#options-quick-reference
* @default defaultHtmlMinifierTerserOptions
*/
htmlMinifierTerser?: htmlMinifierOptions | boolean
/**
* Try inline html used assets, if inlined or not used in JS.
* @default true
*/
tryInlineHtmlAssets?: boolean
/**
* Remove inlined asset files.
* @default true
*/
removeInlinedAssetFiles?: boolean
/**
* Try inline html icon, if icon is in public dir.
* @default true
*/
tryInlineHtmlPublicIcon?: boolean
/**
* Remove inlined html icon files.
* @default true
*/
removeInlinedPublicIconFiles?: boolean
/**
* Use Base128 to encode gzipped script.
* If false, use Base64.
* https://www.npmjs.com/package/base128-ascii
* @default true
*/
useBase128?: boolean
/**
* Compress format.
* @default "deflate-raw"
*/
compressFormat?: compressFormat
}
export const defaultHtmlMinifierTerserOptions: htmlMinifierOptions = {
removeAttributeQuotes: true,
removeComments: true,
collapseWhitespace: true,
removeOptionalTags: true,
removeRedundantAttributes: true,
minifyJS: false,
}
export interface innerOptions {
rename?: string
htmlMinifierTerser: htmlMinifierOptions | false
tryInlineHtmlAssets: boolean
removeInlinedAssetFiles: boolean
tryInlineHtmlPublicIcon: boolean
removeInlinedPublicIconFiles: boolean
useBase128: boolean
compressFormat: compressFormat
}
export function getInnerOptions(opt?: Options): innerOptions {
opt ||= {}
return {
rename:
opt.rename && opt.rename.replace(/(\.(html?)?)?$/, '.html'),
htmlMinifierTerser:
opt.htmlMinifierTerser == null || opt.htmlMinifierTerser === true
? defaultHtmlMinifierTerserOptions
: opt.htmlMinifierTerser,
tryInlineHtmlAssets:
opt.tryInlineHtmlAssets ?? true,
removeInlinedAssetFiles:
opt.removeInlinedAssetFiles ?? true,
tryInlineHtmlPublicIcon:
opt.tryInlineHtmlPublicIcon ?? true,
removeInlinedPublicIconFiles:
opt.removeInlinedPublicIconFiles ?? true,
useBase128:
opt.useBase128 ?? true,
compressFormat:
["deflate-raw", "deflate", "gzip"].includes(opt.compressFormat)
? opt.compressFormat
: "deflate-raw",
}
}