Skip to content

Commit c7b25b6

Browse files
authored
Merge pull request #339 from SukkaW/ts-init
chore: add tsconfig & bunchee
2 parents 8bdd3d8 + 59b5dad commit c7b25b6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+143
-118
lines changed

.eslintignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
lib/modules/example.mjs
1+
src/_modules/example.mjs
22
test.mjs
33
**/*.cjs

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,6 @@ yarn.lock
5151
# Docs
5252
/docs/build/
5353
/docs/.docusaurus/
54+
55+
# Dist
56+
dist

index.cjs

-11
This file was deleted.

index.d.cts

-3
This file was deleted.

index.d.mts

-3
This file was deleted.

index.mjs

-2
This file was deleted.

package.json

+41-32
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,44 @@
22
"name": "htmlnano",
33
"version": "2.1.2",
44
"description": "Modular HTML minifier, built on top of the PostHTML",
5-
"main": "index.cjs",
6-
"module": "index.mjs",
7-
"source": "index.mjs",
8-
"exports": {
9-
".": {
10-
"types": "./index.d.ts",
11-
"require": "./index.cjs",
12-
"import": "./index.mjs"
13-
},
14-
"./index.mjs": {
15-
"types": "./index.d.mts",
16-
"import": "./index.mjs"
17-
},
18-
"./index.cjs": {
19-
"types": "./index.d.cts",
20-
"require": "./index.cjs"
21-
}
22-
},
23-
"types": "index.d.ts",
245
"author": "Kirill Maltsev <[email protected]>",
256
"license": "MIT",
267
"scripts": {
27-
"clean": "rimraf lib/*.cjs lib/**/*.cjs",
28-
"compile": "npm run clean && babel -d lib/ lib/ --out-file-extension .cjs",
29-
"lint": "eslint --fix *.mjs lib/*.mjs lib/**/*.mjs test/*.mjs test/**/*.mjs",
8+
"clean": "rimraf dist",
9+
"compile": "npm run clean && bunchee",
10+
"lint": "eslint --fix src/*.mjs src/**/*.mjs test/*.mjs test/**/*.mjs",
3011
"pretest": "npm run lint && npm run compile",
3112
"test": ":",
32-
"posttest": "mocha --timeout 5000 --require @babel/register --recursive --check-leaks --globals addresses",
13+
"posttest": "mocha --timeout 5000 --require @swc-node/register --recursive --check-leaks --globals addresses",
3314
"prepare": "npm run compile"
3415
},
35-
"keywords": [
36-
"posthtml",
37-
"posthtml-plugin",
38-
"html",
39-
"postproccessor",
40-
"minifier"
16+
"files": [
17+
"dist"
4118
],
19+
"main": "./dist/index.js",
20+
"module": "./dist/index.mjs",
21+
"exports": {
22+
"./helpers": {
23+
"import": "./dist/helpers.mjs",
24+
"require": "./dist/helpers.js"
25+
},
26+
".": {
27+
"import": "./dist/index.mjs",
28+
"require": "./dist/index.js"
29+
},
30+
"./presets/ampSafe": {
31+
"import": "./dist/presets/ampSafe.mjs",
32+
"require": "./dist/presets/ampSafe.js"
33+
},
34+
"./presets/max": {
35+
"import": "./dist/presets/max.mjs",
36+
"require": "./dist/presets/max.js"
37+
},
38+
"./presets/safe": {
39+
"import": "./dist/presets/safe.mjs",
40+
"require": "./dist/presets/safe.js"
41+
}
42+
},
4243
"babel": {
4344
"presets": [
4445
[
@@ -61,17 +62,24 @@
6162
]
6263
]
6364
},
65+
"keywords": [
66+
"posthtml",
67+
"posthtml-plugin",
68+
"html",
69+
"postproccessor",
70+
"minifier"
71+
],
6472
"dependencies": {
6573
"cosmiconfig": "^9.0.0",
6674
"posthtml": "^0.16.5"
6775
},
6876
"devDependencies": {
6977
"@aminya/babel-plugin-replace-import-extension": "1.2.0",
70-
"@babel/cli": "^7.15.7",
7178
"@babel/core": "^7.15.5",
7279
"@babel/eslint-parser": "^7.17.0",
73-
"@babel/preset-env": "^7.15.6",
74-
"@babel/register": "^7.15.3",
80+
"@babel/preset-env": "^7.27.1",
81+
"@swc-node/register": "^1.10.10",
82+
"bunchee": "^6.5.1",
7583
"cssnano": "^7.0.0",
7684
"eslint": "^8.12.0",
7785
"eslint-plugin-import": "^2.28.1",
@@ -85,6 +93,7 @@
8593
"srcset": "5.0.1",
8694
"svgo": "^3.0.2",
8795
"terser": "^5.21.0",
96+
"typescript": "^5.8.3",
8897
"uncss": "^0.17.3"
8998
},
9099
"peerDependencies": {
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

lib/modules/minifyConditionalComments.mjs renamed to src/_modules/minifyConditionalComments.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import htmlnano from '../htmlnano.mjs';
1+
import htmlnano from '../index.mjs';
22
import { isConditionalComment } from '../helpers.mjs';
33

44
// Spec: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/compatibility/ms537512(v=vs.85)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

lib/htmlnano.mjs renamed to src/index.mjs

+39-31
Original file line numberDiff line numberDiff line change
@@ -47,32 +47,32 @@ const optionalDependencies = {
4747

4848

4949
const modules = {
50-
collapseAttributeWhitespace: () => import('./modules/collapseAttributeWhitespace.mjs'),
51-
collapseBooleanAttributes: () => import('./modules/collapseBooleanAttributes.mjs'),
52-
collapseWhitespace: () => import('./modules/collapseWhitespace.mjs'),
53-
custom: () => import('./modules/custom.mjs'),
54-
deduplicateAttributeValues: () => import('./modules/deduplicateAttributeValues.mjs'),
55-
example: () => import('./modules/example.mjs'),
56-
mergeScripts: () => import('./modules/mergeScripts.mjs'),
57-
mergeStyles: () => import('./modules/mergeStyles.mjs'),
58-
minifyConditionalComments: () => import('./modules/minifyConditionalComments.mjs'),
59-
minifyCss: () => import('./modules/minifyCss.mjs'),
60-
minifyJs: () => import('./modules/minifyJs.mjs'),
61-
minifyJson: () => import('./modules/minifyJson.mjs'),
62-
minifySvg: () => import('./modules/minifySvg.mjs'),
63-
minifyUrls: () => import('./modules/minifyUrls.mjs'),
64-
normalizeAttributeValues: () => import('./modules/normalizeAttributeValues.mjs'),
65-
removeAttributeQuotes: () => import('./modules/removeAttributeQuotes.mjs'),
66-
removeComments: () => import('./modules/removeComments.mjs'),
67-
removeEmptyAttributes: () => import('./modules/removeEmptyAttributes.mjs'),
68-
removeOptionalTags: () => import('./modules/removeOptionalTags.mjs'),
69-
removeRedundantAttributes: () => import('./modules/removeRedundantAttributes.mjs'),
70-
removeUnusedCss: () => import('./modules/removeUnusedCss.mjs'),
71-
sortAttributes: () => import('./modules/sortAttributes.mjs'),
72-
sortAttributesWithLists: () => import('./modules/sortAttributesWithLists.mjs'),
50+
collapseAttributeWhitespace: () => import('./_modules/collapseAttributeWhitespace.mjs'),
51+
collapseBooleanAttributes: () => import('./_modules/collapseBooleanAttributes.mjs'),
52+
collapseWhitespace: () => import('./_modules/collapseWhitespace.mjs'),
53+
custom: () => import('./_modules/custom.mjs'),
54+
deduplicateAttributeValues: () => import('./_modules/deduplicateAttributeValues.mjs'),
55+
example: () => import('./_modules/example.mjs'),
56+
mergeScripts: () => import('./_modules/mergeScripts.mjs'),
57+
mergeStyles: () => import('./_modules/mergeStyles.mjs'),
58+
minifyConditionalComments: () => import('./_modules/minifyConditionalComments.mjs'),
59+
minifyCss: () => import('./_modules/minifyCss.mjs'),
60+
minifyJs: () => import('./_modules/minifyJs.mjs'),
61+
minifyJson: () => import('./_modules/minifyJson.mjs'),
62+
minifySvg: () => import('./_modules/minifySvg.mjs'),
63+
minifyUrls: () => import('./_modules/minifyUrls.mjs'),
64+
normalizeAttributeValues: () => import('./_modules/normalizeAttributeValues.mjs'),
65+
removeAttributeQuotes: () => import('./_modules/removeAttributeQuotes.mjs'),
66+
removeComments: () => import('./_modules/removeComments.mjs'),
67+
removeEmptyAttributes: () => import('./_modules/removeEmptyAttributes.mjs'),
68+
removeOptionalTags: () => import('./_modules/removeOptionalTags.mjs'),
69+
removeRedundantAttributes: () => import('./_modules/removeRedundantAttributes.mjs'),
70+
removeUnusedCss: () => import('./_modules/removeUnusedCss.mjs'),
71+
sortAttributes: () => import('./_modules/sortAttributes.mjs'),
72+
sortAttributesWithLists: () => import('./_modules/sortAttributesWithLists.mjs'),
7373
};
7474

75-
function htmlnano(optionsRun, presetRun) {
75+
export function htmlnano(optionsRun, presetRun) {
7676
let [options, preset] = loadConfig(optionsRun, presetRun);
7777

7878
return async function minifier(tree) {
@@ -109,7 +109,7 @@ function htmlnano(optionsRun, presetRun) {
109109

110110
const module = moduleName in modules ?
111111
await (modules[moduleName]()) :
112-
await import(`./modules/${moduleName}.mjs`);
112+
await import(`./_modules/${moduleName}.mjs`);
113113

114114
if (typeof module.onAttrs === 'function') {
115115
attrsHandlers.push(module.onAttrs(options, moduleOptions));
@@ -170,29 +170,37 @@ function htmlnano(optionsRun, presetRun) {
170170
};
171171
}
172172

173-
htmlnano.getRequiredOptionalDependencies = function (optionsRun, presetRun) {
173+
export function getRequiredOptionalDependencies (optionsRun, presetRun) {
174174
const [options] = loadConfig(optionsRun, presetRun);
175175

176176
return [...new Set(Object.keys(options).filter(moduleName => options[moduleName]).map(moduleName => optionalDependencies[moduleName]).flat())];
177-
};
177+
}
178178

179179

180-
htmlnano.process = function (html, options, preset, postHtmlOptions) {
180+
export function process(html, options, preset, postHtmlOptions) {
181181
return posthtml([htmlnano(options, preset)])
182182
.process(html, postHtmlOptions);
183-
};
183+
}
184184

185185
// https://github.com/webpack-contrib/html-minimizer-webpack-plugin/blob/faca00f2219514bc671c5942685721f0b5dbaa70/src/utils.js#L74
186-
htmlnano.htmlMinimizerWebpackPluginMinify = function htmlNano(input, minimizerOptions = {}) {
186+
export function htmlMinimizerWebpackPluginMinify(input, minimizerOptions = {}) {
187187
const [[, code]] = Object.entries(input);
188188
return htmlnano.process(code, minimizerOptions, presets.safe)
189189
.then(result => {
190190
return {
191191
code: result.html
192192
};
193193
});
194-
};
194+
}
195195

196196
htmlnano.presets = presets;
197+
htmlnano.getRequiredOptionalDependencies = getRequiredOptionalDependencies;
198+
htmlnano.process = process;
199+
htmlnano.htmlMinimizerWebpackPluginMinify = htmlMinimizerWebpackPluginMinify;
197200

198201
export default htmlnano;
202+
203+
if (typeof module !== 'undefined') {
204+
// eslint-disable-next-line import/no-commonjs -- CJS compat, will remove once we fully migrated to TS
205+
module.exports = htmlnano;
206+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.

test/helpers.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect } from 'expect';
2-
import { isAmpBoilerplate, isComment, isConditionalComment, isStyleNode, extractCssFromStyleNode, optionalImport } from '../lib/helpers.mjs';
2+
import { isAmpBoilerplate, isComment, isConditionalComment, isStyleNode, extractCssFromStyleNode, optionalImport } from '../src/helpers.mjs';
33

44
describe('[helpers]', () => {
55
context('isAmpBoilerplate()', () => {

test/htmlnano.mjs

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { expect } from 'expect';
22
import posthtml from 'posthtml';
3-
import htmlnano from '../index.mjs';
4-
import safePreset from '../lib/presets/safe.mjs';
5-
import ampSafePreset from '../lib/presets/ampSafe.mjs';
6-
import maxPreset from '../lib/presets/max.mjs';
7-
import { loadConfig } from '../lib/htmlnano.mjs';
3+
import htmlnano, { loadConfig } from '../dist/index.mjs';
4+
import safePreset from '../dist/presets/safe.mjs';
5+
import ampSafePreset from '../dist/presets/ampSafe.mjs';
6+
import maxPreset from '../dist/presets/max.mjs';
87

98

109
describe('[htmlnano]', () => {

test/htmlnano_compat.cjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { expect } = require('expect');
22
const posthtml = require('posthtml');
3-
const htmlnano = require('../index.cjs');
3+
const htmlnano = require('../dist/index.js');
44

55

66
describe('[commonjs usage]', () => {

test/modules/collapseAttributeWhitespace.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
33

44

55
describe('collapseAttributeWhitespace', () => {

test/modules/collapseBooleanAttributes.mjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
3-
import ampSafePreset from '../../lib/presets/ampSafe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
3+
import ampSafePreset from '../../dist/presets/ampSafe.mjs';
44

55

66
describe('collapseBooleanAttributes', () => {

test/modules/collapseWhitespace.mjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
3-
import maxPreset from '../../lib/presets/max.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
3+
import maxPreset from '../../dist/presets/max.mjs';
44

55

66
describe('collapseWhitespace', () => {

test/modules/deduplicateAttributeValues.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
33

44

55
describe('deduplicateAttributeValues', () => {

test/modules/mergeScripts.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import maxPreset from '../../lib/presets/max.mjs';
2+
import maxPreset from '../../dist/presets/max.mjs';
33

44

55
describe('mergeScripts', () => {

test/modules/mergeStyles.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import maxPreset from '../../lib/presets/max.mjs';
2+
import maxPreset from '../../dist/presets/max.mjs';
33

44

55
describe('mergeStyles', () => {

test/modules/minifyConditionalComments.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
33

44

55
describe('minifyConditionalComments', () => {

test/modules/minifyCss.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
33

44

55
describe('minifyCss', function () {

test/modules/minifyJs.mjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
3-
import ampSafePreset from '../../lib/presets/ampSafe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
3+
import ampSafePreset from '../../dist/presets/ampSafe.mjs';
44

55

66
describe('minifyJs', () => {

test/modules/minifyJson.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
33

44

55
describe('minifyJson', () => {

test/modules/minifySvg.mjs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
3-
import maxPreset from '../../lib/presets/max.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
3+
import maxPreset from '../../dist/presets/max.mjs';
44

55

66
describe('minifySvg', () => {

test/modules/minifyUrls.mjs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
3-
import maxPreset from '../../lib/presets/max.mjs';
4-
import ampSafePreset from '../../lib/presets/ampSafe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
3+
import maxPreset from '../../dist/presets/max.mjs';
4+
import ampSafePreset from '../../dist/presets/ampSafe.mjs';
55

66
describe('minifyUrls', () => {
77
it('shouldn\'t be enabled with safe preset', () => {

test/modules/normalizeAttributeValues.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { init } from '../htmlnano.mjs';
2-
import safePreset from '../../lib/presets/safe.mjs';
2+
import safePreset from '../../dist/presets/safe.mjs';
33

44
describe('normalizeAttributeValues', () => {
55
const options = {

0 commit comments

Comments
 (0)