Skip to content

Commit 5610e9b

Browse files
committed
feat(engine): export bundled htmlparser2
1 parent 5c2822f commit 5610e9b

12 files changed

Lines changed: 76 additions & 6 deletions
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@tailwindcss-mangle/engine": patch
3+
"@tailwindcss-mangle/core": patch
4+
---
5+
6+
Export the bundled htmlparser2 API from `@tailwindcss-mangle/engine/htmlparser2` for packages that need the same Node.js 18-compatible parser entry.
7+
8+
Switch core HTML parsing to the engine-provided htmlparser2 entry instead of depending on htmlparser2 directly.

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@
6868
"@babel/traverse": "^7.29.7",
6969
"@babel/types": "^7.29.7",
7070
"@tailwindcss-mangle/config": "workspace:^",
71+
"@tailwindcss-mangle/engine": "workspace:^",
7172
"@tailwindcss-mangle/shared": "workspace:^",
7273
"@vue/compiler-sfc": "^3.5.38",
7374
"fast-sort": "^3.4.1",
7475
"fs-extra": "^11.3.5",
75-
"htmlparser2": "12.0.0",
7676
"magic-string": "^0.30.21",
7777
"parse5": "^8.0.1",
7878
"pathe": "^2.0.3",

packages/core/src/html/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { IHandlerTransformResult, IHtmlHandlerOptions } from '../types'
2-
import { Parser } from 'htmlparser2'
2+
import { Parser } from '@tailwindcss-mangle/engine/htmlparser2'
33
import MagicString from 'magic-string'
44
import { makeRegex, splitCode } from '../shared'
55

packages/engine/package.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
"import": "./dist/index.js",
2828
"require": "./dist/index.cjs"
2929
},
30+
"./htmlparser2": {
31+
"types": "./dist/htmlparser2.d.ts",
32+
"import": "./dist/htmlparser2.js",
33+
"require": "./dist/htmlparser2.cjs"
34+
},
35+
"./htmlparser2/WritableStream": {
36+
"types": "./dist/htmlparser2/WritableStream.d.ts",
37+
"import": "./dist/htmlparser2/WritableStream.js",
38+
"require": "./dist/htmlparser2/WritableStream.cjs"
39+
},
40+
"./htmlparser2/WebWritableStream": {
41+
"types": "./dist/htmlparser2/WebWritableStream.d.ts",
42+
"import": "./dist/htmlparser2/WebWritableStream.js",
43+
"require": "./dist/htmlparser2/WebWritableStream.cjs"
44+
},
3045
"./v3": {
3146
"types": "./dist/v3/index.d.ts",
3247
"import": "./dist/v3/index.js",
@@ -43,6 +58,15 @@
4358
"types": "./dist/index.d.ts",
4459
"typesVersions": {
4560
"*": {
61+
"htmlparser2": [
62+
"./dist/htmlparser2.d.ts"
63+
],
64+
"htmlparser2/WritableStream": [
65+
"./dist/htmlparser2/WritableStream.d.ts"
66+
],
67+
"htmlparser2/WebWritableStream": [
68+
"./dist/htmlparser2/WebWritableStream.d.ts"
69+
],
4670
"v3": [
4771
"./dist/v3/index.d.ts"
4872
],
@@ -82,6 +106,21 @@
82106
"import": "./dist/index.js",
83107
"require": "./dist/index.cjs"
84108
},
109+
"./htmlparser2": {
110+
"types": "./dist/htmlparser2.d.ts",
111+
"import": "./dist/htmlparser2.js",
112+
"require": "./dist/htmlparser2.cjs"
113+
},
114+
"./htmlparser2/WritableStream": {
115+
"types": "./dist/htmlparser2/WritableStream.d.ts",
116+
"import": "./dist/htmlparser2/WritableStream.js",
117+
"require": "./dist/htmlparser2/WritableStream.cjs"
118+
},
119+
"./htmlparser2/WebWritableStream": {
120+
"types": "./dist/htmlparser2/WebWritableStream.d.ts",
121+
"import": "./dist/htmlparser2/WebWritableStream.js",
122+
"require": "./dist/htmlparser2/WebWritableStream.cjs"
123+
},
85124
"./v3": {
86125
"types": "./dist/v3/index.d.ts",
87126
"import": "./dist/v3/index.js",

packages/engine/scripts/node18-smoke.mjs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@ if (!oxideCandidates.includes('text-red-500') || !oxideCandidates.includes('hove
1313
}
1414

1515
const engine = await import('../dist/index.js')
16+
const { Parser } = await import('../dist/htmlparser2.js')
17+
let sawClassAttribute = false
18+
const parser = new Parser({
19+
onattribute(name, value) {
20+
sawClassAttribute ||= name === 'class' && value === 'text-red-500'
21+
},
22+
})
23+
24+
parser.write('<div class="text-red-500"></div>')
25+
parser.end()
26+
27+
if (!sawClassAttribute) {
28+
throw new Error('Unexpected htmlparser2 subpath export behavior')
29+
}
30+
1631
const vueCandidates = await engine.extractSourceCandidatesWithPositions(
1732
'<template><div class="text-red-500 hover:bg-blue-500"></div></template>',
1833
'vue',
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from 'htmlparser2/WebWritableStream'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from 'htmlparser2/WritableStream'

packages/engine/src/htmlparser2.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from 'htmlparser2'

packages/engine/test-d/public-api.test-d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { expectAssignable, expectType } from 'tsd'
2+
import { Parser } from '../dist/htmlparser2'
23
import {
34
collectTailwindStyleCandidates,
45
createTailwindV4Engine,
@@ -13,6 +14,7 @@ import {
1314
type TailwindV4GenerateResult,
1415
} from '../dist/index'
1516

17+
expectAssignable<typeof Parser>(Parser)
1618
expectType<string[]>(splitCandidateTokens('text-red-500'))
1719
expectType<Promise<string[]>>(extractSourceCandidates('<div class="text-red-500"></div>', 'html'))
1820
expectType<Promise<Array<{ rawCandidate: string, start: number, end: number }>>>(

packages/engine/tsdown.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { defineConfig } from 'tsdown'
33
export default defineConfig({
44
entry: {
55
'index': 'src/index.ts',
6+
'htmlparser2': 'src/htmlparser2.ts',
7+
'htmlparser2/WritableStream': 'src/htmlparser2-writable-stream.ts',
8+
'htmlparser2/WebWritableStream': 'src/htmlparser2-web-writable-stream.ts',
69
'v3/index': 'src/v3/index.ts',
710
'v4/index': 'src/v4/index.ts',
811
},

0 commit comments

Comments
 (0)