diff --git a/.changeset/fair-toes-provide.md b/.changeset/fair-toes-provide.md new file mode 100644 index 000000000..063a5bf81 --- /dev/null +++ b/.changeset/fair-toes-provide.md @@ -0,0 +1,12 @@ +--- +'@web/dev-server-import-maps': patch +'@web/dev-server-esbuild': patch +'@web/rollup-plugin-html': patch +'@web/dev-server-legacy': patch +'@web/dev-server-rollup': patch +'@web/polyfills-loader': patch +'@web/dev-server-core': patch +'@web/parse5-utils': patch +--- + +Upgraded parse5 and removed external parse5/types dependency. diff --git a/package-lock.json b/package-lock.json index b0ffe701d..13fb6adb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "rollup": "^4.4.0", "ts-node": "^10.4.0", "typescript": "~5.0.4", - "wireit": "^0.10.0" + "wireit": "^0.14.12" }, "engines": { "node": ">=18.0.0" @@ -34954,9 +34954,9 @@ } }, "node_modules/wireit": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/wireit/-/wireit-0.10.0.tgz", - "integrity": "sha512-4TX6V9D/2iXUBzdqQaUG+cRePle0mDx1Q7x4Ka2cA8lgp1+ZBhrOTiLsXYRl2roQEldEFgQ2Ff1W8YgyNWAa6w==", + "version": "0.14.12", + "resolved": "https://registry.npmjs.org/wireit/-/wireit-0.14.12.tgz", + "integrity": "sha512-gNSd+nZmMo6cuICezYXRIayu6TSOeCSCDzjSF0q6g8FKDsRbdqrONrSZYzdk/uBISmRcv4vZtsno6GyGvdXwGA==", "dev": true, "license": "Apache-2.0", "workspaces": [ @@ -34964,7 +34964,7 @@ "website" ], "dependencies": { - "braces": "^3.0.2", + "brace-expansion": "^4.0.0", "chokidar": "^3.5.3", "fast-glob": "^3.2.11", "jsonc-parser": "^3.0.0", @@ -34974,7 +34974,30 @@ "wireit": "bin/wireit.js" }, "engines": { - "node": ">=14.14.0" + "node": ">=18.0.0" + } + }, + "node_modules/wireit/node_modules/balanced-match": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz", + "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/wireit/node_modules/brace-expansion": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.0.tgz", + "integrity": "sha512-l/mOwLWs7BQIgOKrL46dIAbyCKvPV7YJPDspkuc88rHsZRlg3hptUGdU7Trv0VFP4d3xnSGBQrKu5ZvGB7UeIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^3.0.0" + }, + "engines": { + "node": ">= 18" } }, "node_modules/with": { @@ -36267,7 +36290,7 @@ "koa-static": "^5.0.0", "lru-cache": "^8.0.4", "mime-types": "^2.1.27", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "picomatch": "^2.2.2", "ws": "^7.5.10" }, @@ -36275,7 +36298,6 @@ "@types/clone": "^2.1.0", "@types/koa-etag": "^3.0.0", "@types/koa-static": "^4.0.1", - "@types/parse5": "^6.0.1", "abort-controller": "^3.0.0", "express": "^4.21.2", "nanoid": "^3.1.25", @@ -36300,6 +36322,30 @@ "url": "https://paulmillr.com/funding/" } }, + "packages/dev-server-core/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/dev-server-core/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/dev-server-core/node_modules/readdirp": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", @@ -36321,7 +36367,7 @@ "@mdn/browser-compat-data": "^4.0.0", "@web/dev-server-core": "^0.7.4", "esbuild": "^0.25.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "ua-parser-js": "^1.0.33" }, "devDependencies": { @@ -36334,6 +36380,30 @@ "node": ">=18.0.0" } }, + "packages/dev-server-esbuild/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/dev-server-esbuild/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/dev-server-hmr": { "name": "@web/dev-server-hmr", "version": "0.4.1", @@ -36355,10 +36425,9 @@ "license": "MIT", "dependencies": { "@import-maps/resolve": "^1.0.1", - "@types/parse5": "^6.0.1", "@web/dev-server-core": "^0.7.2", "@web/parse5-utils": "^2.1.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "picomatch": "^2.2.2" }, "devDependencies": { @@ -36368,6 +36437,30 @@ "node": ">=18.0.0" } }, + "packages/dev-server-import-maps/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/dev-server-import-maps/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/dev-server-legacy": { "name": "@web/dev-server-legacy", "version": "2.1.1", @@ -36387,7 +36480,7 @@ "browserslist": "^4.16.0", "browserslist-useragent": "^4.0.0", "caniuse-api": "^3.0.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "valid-url": "^1.0.9" }, "devDependencies": { @@ -36400,6 +36493,30 @@ "node": ">=18.0.0" } }, + "packages/dev-server-legacy/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/dev-server-legacy/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/dev-server-polyfill": { "name": "@web/dev-server-polyfill", "version": "1.0.6", @@ -36420,7 +36537,7 @@ "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.2", "nanocolors": "^0.2.1", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "rollup": "^4.4.0", "whatwg-url": "^14.0.0" }, @@ -36430,7 +36547,6 @@ "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "25.0.7", "@rollup/plugin-replace": "^5.0.5", - "@types/parse5": "^6.0.1", "@types/whatwg-url": "^11.0.0", "@web/test-runner-chrome": "^0.18.0", "@web/test-runner-core": "^0.13.0", @@ -36535,6 +36651,30 @@ } } }, + "packages/dev-server-rollup/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/dev-server-rollup/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/dev-server-rollup/node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -36935,8 +37075,7 @@ "version": "2.1.0", "license": "MIT", "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" + "parse5": "^7.3.0" }, "devDependencies": { "@types/html-minifier-terser": "^7.0.0" @@ -36945,6 +37084,30 @@ "node": ">=18.0.0" } }, + "packages/parse5-utils/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/parse5-utils/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/polyfills-loader": { "name": "@web/polyfills-loader", "version": "2.3.1", @@ -36961,7 +37124,7 @@ "dynamic-import-polyfill": "^0.1.1", "es-module-shims": "^1.4.1", "intersection-observer": "^0.12.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "regenerator-runtime": "^0.14.0", "resize-observer-polyfill": "^1.5.1", "shady-css-scoped-element": "^0.0.2", @@ -36972,7 +37135,6 @@ }, "devDependencies": { "@types/babel__core": "^7.1.12", - "@types/parse5": "^6.0.1", "@types/valid-url": "^1.0.3" }, "engines": { @@ -36984,6 +37146,30 @@ "resolved": "https://registry.npmjs.org/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.10.tgz", "integrity": "sha512-wP4LF28aysE2Pq3NQRNQxko7Q0vOOwcoOSMg8FFI4S6z76UuXkYIc5ndC31dJMwso1/vSteL75LW2CEKedAJbA==" }, + "packages/polyfills-loader/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/polyfills-loader/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/rollup-plugin-copy": { "name": "@web/rollup-plugin-copy", "version": "0.5.1", @@ -37060,7 +37246,7 @@ "glob": "^10.0.0", "html-minifier-terser": "^7.1.0", "lightningcss": "^1.24.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "picomatch": "^2.2.2" }, "devDependencies": { @@ -37080,6 +37266,18 @@ "balanced-match": "^1.0.0" } }, + "packages/rollup-plugin-html/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "packages/rollup-plugin-html/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -37115,6 +37313,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/rollup-plugin-html/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "packages/rollup-plugin-import-meta-assets": { "name": "@web/rollup-plugin-import-meta-assets", "version": "2.2.1", @@ -38679,13 +38889,13 @@ }, "packages/test-runner": { "name": "@web/test-runner", - "version": "0.20.0", + "version": "0.20.1", "license": "MIT", "dependencies": { "@web/browser-logs": "^0.4.0", "@web/config-loader": "^0.3.0", "@web/dev-server": "^0.4.0", - "@web/test-runner-chrome": "^0.18.0", + "@web/test-runner-chrome": "^0.18.1", "@web/test-runner-commands": "^0.9.0", "@web/test-runner-core": "^0.13.0", "@web/test-runner-mocha": "^0.9.0", @@ -38766,7 +38976,7 @@ }, "packages/test-runner-chrome": { "name": "@web/test-runner-chrome", - "version": "0.18.0", + "version": "0.18.1", "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.13.0", diff --git a/package.json b/package.json index 59bb00b9c..e202cde3e 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "rollup": "^4.4.0", "ts-node": "^10.4.0", "typescript": "~5.0.4", - "wireit": "^0.10.0" + "wireit": "^0.14.12" }, "eslintConfig": { "parser": "@typescript-eslint/parser", diff --git a/packages/dev-server-core/package.json b/packages/dev-server-core/package.json index defcaf24f..6050d5ae7 100644 --- a/packages/dev-server-core/package.json +++ b/packages/dev-server-core/package.json @@ -73,7 +73,7 @@ "koa-static": "^5.0.0", "lru-cache": "^8.0.4", "mime-types": "^2.1.27", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "picomatch": "^2.2.2", "ws": "^7.5.10" }, @@ -81,7 +81,6 @@ "@types/clone": "^2.1.0", "@types/koa-etag": "^3.0.0", "@types/koa-static": "^4.0.1", - "@types/parse5": "^6.0.1", "abort-controller": "^3.0.0", "express": "^4.21.2", "nanoid": "^3.1.25", diff --git a/packages/dev-server-esbuild/package.json b/packages/dev-server-esbuild/package.json index bc24c9efa..aaf6d661e 100644 --- a/packages/dev-server-esbuild/package.json +++ b/packages/dev-server-esbuild/package.json @@ -54,7 +54,7 @@ "@mdn/browser-compat-data": "^4.0.0", "@web/dev-server-core": "^0.7.4", "esbuild": "^0.25.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "ua-parser-js": "^1.0.33" }, "devDependencies": { diff --git a/packages/dev-server-import-maps/package.json b/packages/dev-server-import-maps/package.json index 0fd9123ba..4e84fd123 100644 --- a/packages/dev-server-import-maps/package.json +++ b/packages/dev-server-import-maps/package.json @@ -51,10 +51,9 @@ ], "dependencies": { "@import-maps/resolve": "^1.0.1", - "@types/parse5": "^6.0.1", "@web/dev-server-core": "^0.7.2", "@web/parse5-utils": "^2.1.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "picomatch": "^2.2.2" }, "devDependencies": { diff --git a/packages/dev-server-import-maps/src/importMapsPlugin.ts b/packages/dev-server-import-maps/src/importMapsPlugin.ts index 11376b8f8..d3f0704fe 100644 --- a/packages/dev-server-import-maps/src/importMapsPlugin.ts +++ b/packages/dev-server-import-maps/src/importMapsPlugin.ts @@ -6,7 +6,7 @@ import { resolve, } from '@import-maps/resolve'; import { getHtmlPath } from '@web/dev-server-core'; -import { parse as parseHtml, serialize as serializeHtml, Element as ElementAst } from 'parse5'; +import { parse as parseHtml, serialize as serializeHtml, type DefaultTreeAdapterMap } from 'parse5'; import path from 'path'; import { @@ -32,6 +32,8 @@ import { setTextContent, } from '@web/parse5-utils'; +type ElementAst = DefaultTreeAdapterMap['element']; + export interface ImportMapData { htmlPath: string; importMap: ParsedImportMap; diff --git a/packages/dev-server-import-maps/src/utils.ts b/packages/dev-server-import-maps/src/utils.ts index f86991aa6..2e7ae3aef 100644 --- a/packages/dev-server-import-maps/src/utils.ts +++ b/packages/dev-server-import-maps/src/utils.ts @@ -1,11 +1,13 @@ import picoMatch from 'picomatch'; import { Context, getHtmlPath } from '@web/dev-server-core'; -import { Element as ElementAst } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import { getAttribute } from '@web/parse5-utils'; import { ParsedImportMap } from '@import-maps/resolve'; import { NormalizedInjectSetting, InjectSetting } from './importMapsPlugin.js'; +type ElementAst = DefaultTreeAdapterMap['element']; + export const IMPORT_MAP_PARAM = 'wds-import-map'; function createMatchers(inject: InjectSetting) { diff --git a/packages/dev-server-legacy/package.json b/packages/dev-server-legacy/package.json index 2edb604c8..17a2d2299 100644 --- a/packages/dev-server-legacy/package.json +++ b/packages/dev-server-legacy/package.json @@ -64,7 +64,7 @@ "browserslist": "^4.16.0", "browserslist-useragent": "^4.0.0", "caniuse-api": "^3.0.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "valid-url": "^1.0.9" }, "devDependencies": { diff --git a/packages/dev-server-legacy/src/findJsScripts.ts b/packages/dev-server-legacy/src/findJsScripts.ts index 02a30577a..cd4bdbecc 100644 --- a/packages/dev-server-legacy/src/findJsScripts.ts +++ b/packages/dev-server-legacy/src/findJsScripts.ts @@ -1,7 +1,10 @@ import { isUri } from 'valid-url'; -import { Document as DocumentAst, Node as NodeAst } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import { queryAll, predicates, getAttribute, hasAttribute } from '@web/dev-server-core/dist/dom5'; +type DocumentAst = DefaultTreeAdapterMap['document']; +type NodeAst = DefaultTreeAdapterMap['node']; + function isDeferred(script: NodeAst) { return getAttribute(script, 'type') === 'module' || hasAttribute(script, 'defer'); } diff --git a/packages/dev-server-legacy/src/injectPolyfillsLoader.ts b/packages/dev-server-legacy/src/injectPolyfillsLoader.ts index 58539f3d8..f446b9346 100644 --- a/packages/dev-server-legacy/src/injectPolyfillsLoader.ts +++ b/packages/dev-server-legacy/src/injectPolyfillsLoader.ts @@ -1,6 +1,6 @@ import { Context } from '@web/dev-server-core'; import { getAttribute, getTextContent, remove } from '@web/dev-server-core/dist/dom5'; -import { parse, serialize, Document as DocumentAst, Node as NodeAst } from 'parse5'; +import { parse, serialize, type DefaultTreeAdapterMap } from 'parse5'; import { injectPolyfillsLoader as originalInjectPolyfillsLoader, PolyfillsConfig, @@ -12,6 +12,9 @@ import { import { PARAM_TRANSFORM_SYSTEMJS } from './constants.js'; import { findJsScripts } from './findJsScripts.js'; +type NodeAst = DefaultTreeAdapterMap['node']; +type DocumentAst = DefaultTreeAdapterMap['document']; + function findScripts(indexUrl: string, documentAst: DocumentAst) { const scriptNodes = findJsScripts(documentAst); diff --git a/packages/dev-server-rollup/package.json b/packages/dev-server-rollup/package.json index 2d6ae4fa3..41548295f 100644 --- a/packages/dev-server-rollup/package.json +++ b/packages/dev-server-rollup/package.json @@ -51,7 +51,7 @@ "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.2", "nanocolors": "^0.2.1", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "rollup": "^4.4.0", "whatwg-url": "^14.0.0" }, @@ -61,7 +61,6 @@ "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "25.0.7", "@rollup/plugin-replace": "^5.0.5", - "@types/parse5": "^6.0.1", "@types/whatwg-url": "^11.0.0", "@web/test-runner-chrome": "^0.18.0", "@web/test-runner-core": "^0.13.0", diff --git a/packages/parse5-utils/package.json b/packages/parse5-utils/package.json index 287f3adf7..e62571856 100644 --- a/packages/parse5-utils/package.json +++ b/packages/parse5-utils/package.json @@ -42,8 +42,7 @@ "utils" ], "dependencies": { - "@types/parse5": "^6.0.1", - "parse5": "^6.0.1" + "parse5": "^7.3.0" }, "devDependencies": { "@types/html-minifier-terser": "^7.0.0" diff --git a/packages/parse5-utils/src/index.js b/packages/parse5-utils/src/index.js index c48fba1fc..22862ad54 100644 --- a/packages/parse5-utils/src/index.js +++ b/packages/parse5-utils/src/index.js @@ -1,14 +1,16 @@ -/** @typedef {import('parse5').TreeAdapter} TreeAdapter */ -/** @typedef {import('parse5').Element} Element */ -/** @typedef {import('parse5').Attribute} Attribute */ -/** @typedef {import('parse5').Node} Node */ -/** @typedef {import('parse5').ParentNode} ParentNode */ -/** @typedef {import('parse5').ChildNode} ChildNode */ -/** @typedef {import('parse5').CommentNode} CommentNode */ -/** @typedef {import('parse5').TextNode} TextNode */ +/** @typedef {import('parse5').DefaultTreeAdapterMap} DefaultTreeAdapterMap */ +/** @typedef {DefaultTreeAdapterMap['element']} Element */ +/** @typedef {DefaultTreeAdapterMap['template']} Template */ +/** @typedef {import('parse5').Token.Attribute} Attribute */ +/** @typedef {DefaultTreeAdapterMap['node']} Node */ +/** @typedef {DefaultTreeAdapterMap['parentNode']} ParentNode */ +/** @typedef {DefaultTreeAdapterMap['childNode']} ChildNode */ +/** @typedef {DefaultTreeAdapterMap['commentNode']} CommentNode */ +/** @typedef {DefaultTreeAdapterMap['textNode']} TextNode */ +/** @typedef {import('parse5').html.NS} NS */ const parse5 = require('parse5'); -const adapter = require('parse5/lib/tree-adapters/default'); +const adapter = parse5.defaultTreeAdapter; const DEFAULT_NAMESPACE = 'http://www.w3.org/1999/xhtml'; const REGEXP_IS_HTML_DOCUMENT = /^\s*<(!doctype|html|head|body)\b/i; @@ -23,7 +25,7 @@ const REGEXP_IS_HTML_DOCUMENT = /^\s*<(!doctype|html|head|body)\b/i; */ function createElement(tagName, attrs = {}, namespaceURI = DEFAULT_NAMESPACE) { const attrsArray = Object.entries(attrs).map(([name, value]) => ({ name, value })); - return adapter.createElement(tagName, namespaceURI, attrsArray); + return adapter.createElement(tagName, /** @type {NS} */ (namespaceURI), attrsArray); } /** @@ -220,7 +222,7 @@ function findNodes(nodes, test) { let children = []; if (adapter.isElementNode(node) && adapter.getTagName(node) === 'template') { - const content = adapter.getTemplateContent(node); + const content = adapter.getTemplateContent(/** @type {Template} */ (node)); if (content) { children = adapter.getChildNodes(content); } diff --git a/packages/polyfills-loader/package.json b/packages/polyfills-loader/package.json index 040b21f07..226cd98dd 100644 --- a/packages/polyfills-loader/package.json +++ b/packages/polyfills-loader/package.json @@ -57,7 +57,7 @@ "dynamic-import-polyfill": "^0.1.1", "es-module-shims": "^1.4.1", "intersection-observer": "^0.12.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "regenerator-runtime": "^0.14.0", "resize-observer-polyfill": "^1.5.1", "shady-css-scoped-element": "^0.0.2", @@ -68,7 +68,6 @@ }, "devDependencies": { "@types/babel__core": "^7.1.12", - "@types/parse5": "^6.0.1", "@types/valid-url": "^1.0.3" } } diff --git a/packages/polyfills-loader/src/injectPolyfillsLoader.ts b/packages/polyfills-loader/src/injectPolyfillsLoader.ts index 3fa48be47..35864de99 100644 --- a/packages/polyfills-loader/src/injectPolyfillsLoader.ts +++ b/packages/polyfills-loader/src/injectPolyfillsLoader.ts @@ -1,4 +1,4 @@ -import { Document, Node, ParentNode, parse, serialize } from 'parse5'; +import { type DefaultTreeAdapterMap, parse, serialize } from 'parse5'; import { findElements, getAttribute, @@ -16,7 +16,11 @@ import { PolyfillsLoaderConfig, PolyfillsLoader, GeneratedFile } from './types.j import { createPolyfillsLoader } from './createPolyfillsLoader.js'; import { hasFileOfType, fileTypes } from './utils.js'; -function injectImportMapPolyfill(headAst: ParentNode, originalScript: Node, type: string) { +type Document = DefaultTreeAdapterMap['document']; +type ParentNode = DefaultTreeAdapterMap['parentNode']; +type ChildNode = DefaultTreeAdapterMap['childNode']; + +function injectImportMapPolyfill(headAst: ParentNode, originalScript: ChildNode, type: string) { const systemJsScript = createScript({ type }, getTextContent(originalScript)); insertBefore(headAst, systemJsScript, originalScript); } @@ -24,8 +28,8 @@ function injectImportMapPolyfill(headAst: ParentNode, originalScript: Node, type function findImportMapScripts(document: Document) { const scripts = findElements(document, script => getAttribute(script, 'type') === 'importmap'); - const inline: Node[] = []; - const external: Node[] = []; + const inline: ChildNode[] = []; + const external: ChildNode[] = []; for (const script of scripts) { if (getAttribute(script, 'src')) { external.push(script); diff --git a/packages/polyfills-loader/src/types.ts b/packages/polyfills-loader/src/types.ts index dcec0f989..56c888ce9 100644 --- a/packages/polyfills-loader/src/types.ts +++ b/packages/polyfills-loader/src/types.ts @@ -1,4 +1,6 @@ -import { Attribute } from 'parse5'; +import type { Token } from 'parse5'; + +type Attribute = Token.Attribute; export interface PolyfillsLoaderConfig { // files to load on modern browsers. loaded when there are no diff --git a/packages/polyfills-loader/src/utils.ts b/packages/polyfills-loader/src/utils.ts index 5bc75af92..4b40e3cc3 100644 --- a/packages/polyfills-loader/src/utils.ts +++ b/packages/polyfills-loader/src/utils.ts @@ -1,8 +1,10 @@ -import { Element } from 'parse5'; +import { DefaultTreeAdapterMap } from 'parse5'; import { getAttribute } from '@web/parse5-utils'; import crypto from 'crypto'; import { FileType, PolyfillsLoaderConfig } from './types.js'; +type Element = DefaultTreeAdapterMap['element']; + export const noModuleSupportTest = "!('noModule' in HTMLScriptElement.prototype)"; export const fileTypes: Record<'SCRIPT' | 'MODULE' | 'MODULESHIM' | 'SYSTEMJS', FileType> = { diff --git a/packages/rollup-plugin-html/package.json b/packages/rollup-plugin-html/package.json index d67042312..1a3b5cd0b 100644 --- a/packages/rollup-plugin-html/package.json +++ b/packages/rollup-plugin-html/package.json @@ -48,7 +48,7 @@ "glob": "^10.0.0", "html-minifier-terser": "^7.1.0", "lightningcss": "^1.24.0", - "parse5": "^6.0.1", + "parse5": "^7.3.0", "picomatch": "^2.2.2" }, "devDependencies": { diff --git a/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts b/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts index c65198af3..82476c083 100644 --- a/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts +++ b/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts @@ -1,5 +1,7 @@ import { OutputChunk, OutputOptions, OutputBundle } from 'rollup'; -import { Attribute } from 'parse5'; +import type { Token } from 'parse5'; + +type Attribute = Token.Attribute; export interface InputHTMLOptions { /** The html source code. If set, overwrites path. */ diff --git a/packages/rollup-plugin-html/src/assets/utils.ts b/packages/rollup-plugin-html/src/assets/utils.ts index 5af29a52f..dff1c2ed2 100644 --- a/packages/rollup-plugin-html/src/assets/utils.ts +++ b/packages/rollup-plugin-html/src/assets/utils.ts @@ -1,10 +1,13 @@ -import { Document, Element } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import path from 'path'; import picomatch from 'picomatch'; import { findElements, getTagName, getAttribute } from '@web/parse5-utils'; import { createError } from '../utils.js'; import { serialize } from 'v8'; +type Document = DefaultTreeAdapterMap['document']; +type Element = DefaultTreeAdapterMap['element']; + const hashedLinkRels = ['stylesheet']; const linkRels = [...hashedLinkRels, 'icon', 'manifest', 'apple-touch-icon', 'mask-icon']; diff --git a/packages/rollup-plugin-html/src/input/extract/extractAssets.ts b/packages/rollup-plugin-html/src/input/extract/extractAssets.ts index b2ae8b8fc..98669ea74 100644 --- a/packages/rollup-plugin-html/src/input/extract/extractAssets.ts +++ b/packages/rollup-plugin-html/src/input/extract/extractAssets.ts @@ -1,4 +1,4 @@ -import { Document, serialize } from 'parse5'; +import { type DefaultTreeAdapterMap, serialize } from 'parse5'; import fs from 'fs'; import path from 'path'; import { InputAsset } from '../InputData.js'; @@ -10,6 +10,8 @@ import { createAssetPicomatchMatcher, } from '../../assets/utils.js'; +type Document = DefaultTreeAdapterMap['document']; + export interface ExtractAssetsParams { document: Document; htmlFilePath: string; diff --git a/packages/rollup-plugin-html/src/input/extract/extractModules.ts b/packages/rollup-plugin-html/src/input/extract/extractModules.ts index aec82e009..333fc5dbb 100644 --- a/packages/rollup-plugin-html/src/input/extract/extractModules.ts +++ b/packages/rollup-plugin-html/src/input/extract/extractModules.ts @@ -1,11 +1,14 @@ import { findElements, getAttribute, getTagName, getTextContent, remove } from '@web/parse5-utils'; -import { Document, Attribute } from 'parse5'; +import type { DefaultTreeAdapterMap, Token } from 'parse5'; import path from 'path'; import crypto from 'crypto'; import { resolveAssetFilePath } from '../../assets/utils.js'; import { getAttributes } from '@web/parse5-utils'; import { ScriptModuleTag } from '../../RollupPluginHTMLOptions.js'; +type Document = DefaultTreeAdapterMap['document']; +type Attribute = Token.Attribute; + export interface ExtractModulesParams { document: Document; htmlDir: string; diff --git a/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts b/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts index 12c1bbb5c..bc65736fe 100644 --- a/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts +++ b/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts @@ -1,4 +1,4 @@ -import { Attribute } from 'parse5'; +import type { Token } from 'parse5'; import path from 'path'; import { OutputChunk } from 'rollup'; @@ -11,6 +11,8 @@ import { import { createError, NOOP_IMPORT } from '../utils.js'; import { toBrowserPath } from './utils.js'; +type Attribute = Token.Attribute; + export interface CreateImportPathParams { publicPath?: string; outputDir: string; diff --git a/packages/rollup-plugin-html/src/output/hashInlineScripts.ts b/packages/rollup-plugin-html/src/output/hashInlineScripts.ts index 4e096eef2..f0db70dbb 100644 --- a/packages/rollup-plugin-html/src/output/hashInlineScripts.ts +++ b/packages/rollup-plugin-html/src/output/hashInlineScripts.ts @@ -1,4 +1,4 @@ -import { Document, Element, ParentNode } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import { findElement, findElements, @@ -13,6 +13,10 @@ import { } from '@web/parse5-utils'; import crypto from 'crypto'; +type Document = DefaultTreeAdapterMap['document']; +type Element = DefaultTreeAdapterMap['element']; +type ParentNode = DefaultTreeAdapterMap['parentNode']; + function isMetaCSPTag(node: Element) { if ( getTagName(node) === 'meta' && diff --git a/packages/rollup-plugin-html/src/output/injectAbsoluteBaseUrl.ts b/packages/rollup-plugin-html/src/output/injectAbsoluteBaseUrl.ts index 9d4ec9cfd..0acfd5828 100644 --- a/packages/rollup-plugin-html/src/output/injectAbsoluteBaseUrl.ts +++ b/packages/rollup-plugin-html/src/output/injectAbsoluteBaseUrl.ts @@ -1,6 +1,9 @@ -import { Document, Element } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import { findElements, getTagName, getAttribute, setAttribute } from '@web/parse5-utils'; +type Element = DefaultTreeAdapterMap['element']; +type Document = DefaultTreeAdapterMap['document']; + function isAbsoluteableNode(node: Element) { const metaAttributes = ['og:url', 'og:image']; switch (getTagName(node)) { diff --git a/packages/rollup-plugin-html/src/output/injectBundles.ts b/packages/rollup-plugin-html/src/output/injectBundles.ts index a624297bb..18c3abbda 100644 --- a/packages/rollup-plugin-html/src/output/injectBundles.ts +++ b/packages/rollup-plugin-html/src/output/injectBundles.ts @@ -1,9 +1,12 @@ -import { Document, Attribute } from 'parse5'; +import { type DefaultTreeAdapterMap, Token } from 'parse5'; import { createScript, findElement, getTagName, appendChild } from '@web/parse5-utils'; import { EntrypointBundle } from '../RollupPluginHTMLOptions.js'; import { createError } from '../utils.js'; +type Attribute = Token.Attribute; +type Document = DefaultTreeAdapterMap['document']; + export function createLoadScript(src: string, format: string, attributes?: Attribute[]) { const attributesObject: Record = {}; if (attributes) { diff --git a/packages/rollup-plugin-html/src/output/injectServiceWorkerRegistration.ts b/packages/rollup-plugin-html/src/output/injectServiceWorkerRegistration.ts index 5dcb22ebb..e32a2f4e6 100644 --- a/packages/rollup-plugin-html/src/output/injectServiceWorkerRegistration.ts +++ b/packages/rollup-plugin-html/src/output/injectServiceWorkerRegistration.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { Document } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import { findElement, getTagName, @@ -8,6 +8,8 @@ import { setAttribute, } from '@web/parse5-utils'; +type Document = DefaultTreeAdapterMap['document']; + export interface injectServiceWorkerRegistrationArgs { document: Document; serviceWorkerPath: string; diff --git a/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts b/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts index e5ba484ae..b90784c93 100644 --- a/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts +++ b/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts @@ -1,5 +1,5 @@ import { getAttribute, setAttribute } from '@web/parse5-utils'; -import { Document } from 'parse5'; +import type { DefaultTreeAdapterMap } from 'parse5'; import path from 'path'; import { @@ -15,6 +15,8 @@ import { createError } from '../utils.js'; import { EmittedAssets } from './emitAssets.js'; import { toBrowserPath } from './utils.js'; +type Document = DefaultTreeAdapterMap['document']; + export interface InjectUpdatedAssetPathsArgs { document: Document; input: InputData;