diff --git "a/(JSDoc\342\206\222TS" "b/(JSDoc\342\206\222TS" new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 03ec43ac5f..24ba0622cb 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,7 +19,7 @@ jobs: env: FORCE_COLOR: 0 with: - node-version: 20 + node-version: 24 cache: npm - name: Install Dependencies diff --git a/.github/workflows/verify-browser.yml b/.github/workflows/verify-browser.yml index 73cf0e35a6..24bc02ca20 100644 --- a/.github/workflows/verify-browser.yml +++ b/.github/workflows/verify-browser.yml @@ -19,12 +19,12 @@ jobs: - name: Workaround for Chrome sandbox issue in Ubuntu 24.04 run: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 - - name: Setup Node 20 + - name: Setup Node 24 uses: actions/setup-node@v4 env: FORCE_COLOR: 0 with: - node-version: 20 + node-version: 24 cache: npm - name: Install Dependencies diff --git a/.github/workflows/verify-node.yml b/.github/workflows/verify-node.yml index b06b767291..69ca0e4e5e 100644 --- a/.github/workflows/verify-node.yml +++ b/.github/workflows/verify-node.yml @@ -14,10 +14,7 @@ jobs: fail-fast: false matrix: node-version: - - '18' - - '20' - - '22' - - 'latest' + - '24' steps: - uses: actions/checkout@v4 @@ -69,12 +66,12 @@ jobs: - uses: actions/checkout@v4 - - name: Setup Node '20' + - name: Setup Node '24' uses: actions/setup-node@v4 env: FORCE_COLOR: 0 with: - node-version: '20' + node-version: '24' cache: 'npm' # Set up GitHub Actions caching for Wireit. diff --git a/.github/workflows/verify-storybook-builder.yml b/.github/workflows/verify-storybook-builder.yml index fef72d71e0..a4894e66f2 100644 --- a/.github/workflows/verify-storybook-builder.yml +++ b/.github/workflows/verify-storybook-builder.yml @@ -16,12 +16,12 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup Node 22 + - name: Setup Node 24 uses: actions/setup-node@v4 env: FORCE_COLOR: 0 with: - node-version: 22 + node-version: 24 cache: npm - name: Install Dependencies diff --git a/package-lock.json b/package-lock.json index 5e4372f2b2..dbec94a9bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,28 +24,32 @@ "@rollup/plugin-typescript": "^11.1.5", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", + "@types/koa": "^3.0.1", "@types/mocha": "^10.0.1", "@types/node": "*", - "@typescript-eslint/eslint-plugin": "^5.3.0", - "@typescript-eslint/parser": "^5.59.1", + "@types/ws": "^8.5.13", + "@typescript-eslint/eslint-plugin": "^8.48.0", + "@typescript-eslint/parser": "^8.48.0", "alex": "^11.0.0", "chai": "^4.3.4", "concurrently": "^8.0.1", "deepmerge": "^4.2.2", "dev-to-git": "^1.4.1", - "eslint": "^8.1.0", - "eslint-config-prettier": "^8.3.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", "hanbi": "^1.0.1", "husky": "^9.1.7", "lint-staged": "^15.2.11", "mocha": "^10.8.2", "nanocolors": "^0.2.1", - "prettier": "^2.4.1", - "prettier-plugin-package": "^1.3.0", + "prettier": "^3.7.1", + "prettier-plugin-package": "^2.0.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", "rimraf": "^4.4.1", "rollup": "^4.4.0", "ts-node": "^10.4.0", - "typescript": "~5.0.4", + "typescript": "^5.9.3", "wireit": "^0.14.2" }, "engines": { @@ -159,6 +163,28 @@ "url": "https://opencollective.com/11ty" } }, + "node_modules/@11ty/eleventy-img/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "license": "MIT", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@11ty/eleventy-img/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -186,6 +212,110 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/@11ty/eleventy-img/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT" + }, + "node_modules/@11ty/eleventy-img/node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "license": "MIT", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/node-abi/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/@11ty/eleventy-img/node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/sharp": { + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", + "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^3.1.3", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.2.0", + "prebuild-install": "^6.1.2", + "semver": "^7.3.5", + "simple-get": "^3.1.0", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "license": "MIT", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/@11ty/eleventy-img/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -2078,6 +2208,22 @@ "semver": "^7.5.3" } }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@changesets/assemble-release-plan": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.5.tgz", @@ -2283,6 +2429,22 @@ "prettier": "^2.7.1" } }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2317,9 +2479,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -2333,9 +2495,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -2349,9 +2511,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -2365,9 +2527,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -2381,9 +2543,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -2397,9 +2559,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -2413,9 +2575,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -2429,9 +2591,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -2445,9 +2607,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -2461,9 +2623,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -2477,9 +2639,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -2493,9 +2655,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -2509,9 +2671,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -2525,9 +2687,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -2541,9 +2703,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -2557,9 +2719,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -2573,9 +2735,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -2589,9 +2751,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -2605,9 +2767,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -2621,9 +2783,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -2637,9 +2799,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -2669,9 +2831,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -2685,9 +2847,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -2701,9 +2863,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -2717,9 +2879,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -2733,25 +2895,28 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -2759,9 +2924,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2790,9 +2955,9 @@ "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2832,9 +2997,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -2852,14 +3017,15 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2881,9 +3047,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, @@ -3247,88 +3414,46 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@lion/accordion": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@lion/accordion/-/accordion-0.11.1.tgz", - "integrity": "sha512-r+p+/39mhS+bRILu2VMebfEtu6qV5z/tdl/6ROW7IKAx4FOlQo8sXgTl7HuAZztq3HisxCcBTjdqcTnnjAdMDg==", - "license": "MIT", - "dependencies": { - "@lion/core": "^0.24.0" - } - }, - "node_modules/@lion/combobox": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@lion/combobox/-/combobox-0.11.1.tgz", - "integrity": "sha512-Oc6U5aYZ9Uafc8/aPpE17HOcgsoeK3oLY4+HZxpNXu6HsYlViOTz1uIVgEz17IXInwpMnoQQ7qCEg2RnexSTSw==", - "license": "MIT", - "dependencies": { - "@lion/core": "^0.24.0", - "@lion/form-core": "^0.18.3", - "@lion/listbox": "^0.14.1", - "@lion/overlays": "^0.33.2" - } - }, - "node_modules/@lion/combobox/node_modules/@lion/listbox": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@lion/listbox/-/listbox-0.14.1.tgz", - "integrity": "sha512-cxREJY7SOSgsy6Dz6zrsEp82NTy0Z3tfpIkzeeht56YnYOXaWJsQvp9LmU49nuj41RYhrIbrQsiSF3qJXLwXtA==", + "node_modules/@lion/listbox": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@lion/listbox/-/listbox-0.12.0.tgz", + "integrity": "sha512-RupZ6KIsZk7D62ZrSmk0WXt5W0d86ynzUyzPAOGW3tby58LmpKEjt3NwyhMCrCpjpH6Ib7sPsy0/46wVk4ynRw==", "license": "MIT", "dependencies": { - "@lion/core": "^0.24.0", - "@lion/form-core": "^0.18.3" + "@lion/core": "^0.21.0", + "@lion/form-core": "^0.16.0" } }, - "node_modules/@lion/core": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/@lion/core/-/core-0.24.0.tgz", - "integrity": "sha512-hC5Fpi5U3PY0HOVycSev1jzoE8DYHFSN42s5gt6g6RlvvRYN5Pou0wtKnDOkOYf1UfjuL+T/4r8W99UFD1r/Eg==", + "node_modules/@lion/listbox/node_modules/@lion/core": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@lion/core/-/core-0.21.1.tgz", + "integrity": "sha512-6lCJ7ZLHQBcsZu/XBOEePG4KxxNFI1OD+1wSA4f9KMyHJVA4+FXZEv1mYniWVsfdPXyyAgKnmfB23xD4Z3kwng==", "license": "MIT", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", - "@open-wc/scoped-elements": "^2.1.1", + "@open-wc/scoped-elements": "^2.0.1", "lit": "^2.0.2" } }, - "node_modules/@lion/form-core": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/@lion/form-core/-/form-core-0.18.3.tgz", - "integrity": "sha512-AmVJRIsToSbhl/7Smp2NVPuDdPzelc7ohri58PfOf5iM1YOTbESuIXVA6khRaxTkw+b4/Dtf/ThwwvBs1BAFtg==", - "license": "MIT", - "dependencies": { - "@lion/core": "^0.24.0", - "@lion/localize": "^0.26.0" - } - }, - "node_modules/@lion/listbox": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@lion/listbox/-/listbox-0.12.0.tgz", - "integrity": "sha512-RupZ6KIsZk7D62ZrSmk0WXt5W0d86ynzUyzPAOGW3tby58LmpKEjt3NwyhMCrCpjpH6Ib7sPsy0/46wVk4ynRw==", + "node_modules/@lion/listbox/node_modules/@lion/form-core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@lion/form-core/-/form-core-0.16.0.tgz", + "integrity": "sha512-b3Tw0y/5eoIkfowJUqH4JIPvleFOsN09MM6Pb8j7QIyweRk/YlSMbirAlEYmdeTo8aOgGRJhbmrOKmukpsPA/g==", "license": "MIT", "dependencies": { "@lion/core": "^0.21.0", - "@lion/form-core": "^0.16.0" + "@lion/localize": "^0.23.0" } }, - "node_modules/@lion/localize": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@lion/localize/-/localize-0.26.0.tgz", - "integrity": "sha512-ZFXumnVYviPq689DYrU9ZVhBEOk7/b/bht0ySw36fLqg61VCDSRdbImv2WOYJywaSeuncBcMNhcJu0UlK9wflw==", + "node_modules/@lion/listbox/node_modules/@lion/localize": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@lion/localize/-/localize-0.23.0.tgz", + "integrity": "sha512-pGN2JzEPukvgtB3+BpeT13KZnI7mCqyq7m/a+A973XFhH1PJlAyEXdkv3bVJsIpNolqXRVP0lU4vgisMsO8IkQ==", "license": "MIT", "dependencies": { "@bundled-es-modules/message-format": "6.0.4", - "@lion/core": "^0.24.0", - "singleton-manager": "^1.5.0" - } - }, - "node_modules/@lion/overlays": { - "version": "0.33.2", - "resolved": "https://registry.npmjs.org/@lion/overlays/-/overlays-0.33.2.tgz", - "integrity": "sha512-xi6Jdj3QNfXO+bZ1GNS+9wZm4nZ7zwlY3Vqu4vNArV21lYM3/A6Vx/CbNPOjVVfhdvHvxR3RriVSLipI/YQMWA==", - "license": "MIT", - "dependencies": { - "@lion/core": "^0.24.0", - "@popperjs/core": "^2.5.4", - "singleton-manager": "^1.5.0" + "@lion/core": "^0.21.0", + "singleton-manager": "^1.4.3" } }, "node_modules/@lit-labs/ssr-dom-shim": { @@ -3456,6 +3581,26 @@ "lit": "^2.2.5" } }, + "node_modules/@mdjs/mdjs-preview/node_modules/@lion/accordion": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@lion/accordion/-/accordion-0.9.0.tgz", + "integrity": "sha512-ReFron+V7Uvrtuzb8H/qqvALmDJJNJu54uOcHuhU3AZvwZaQhe3q1A2Uo/gs+U4udYv20oeI3dsNPV6GnB+RTg==", + "license": "MIT", + "dependencies": { + "@lion/core": "^0.22.0" + } + }, + "node_modules/@mdjs/mdjs-preview/node_modules/@lion/core": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@lion/core/-/core-0.22.0.tgz", + "integrity": "sha512-qgIRqp77UtMFi9PDxS6EE5xT6djqJ6qWNKur08mnKNNIg9NtVUeGSpSLGuMeZs+lI1To+n9/DrOsbSpJ0xUKIQ==", + "license": "MIT", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.1.1", + "lit": "^2.0.2" + } + }, "node_modules/@mdjs/mdjs-story": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@mdjs/mdjs-story/-/mdjs-story-0.3.2.tgz", @@ -4172,22 +4317,6 @@ "url": "https://opencollective.com/popperjs" } }, - "node_modules/@prettier/sync": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.6.1.tgz", - "integrity": "sha512-yF9G8vK/LYUTF3Cijd7VC9La3b20F20/J/fgoR4H0B8JGOWnZVZX6+I6+vODPosjmMcpdlUV+gUqJQZp3kLOcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "make-synchronized": "^0.8.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" - }, - "peerDependencies": { - "prettier": "*" - } - }, "node_modules/@promptbook/utils": { "version": "0.69.5", "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.69.5.tgz", @@ -5031,6 +5160,34 @@ "lit": "^2.0.0" } }, + "node_modules/@rocket/drawer/node_modules/@lion/core": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@lion/core/-/core-0.19.0.tgz", + "integrity": "sha512-SU2JzKEgGdwOVK9WdsmjKiYkgQ/hOYC05jxyHfG9qJWmOzEUsuvvULjwU8hd1u7gLy5gSxsdEO2nJ2zyWV2ihg==", + "license": "MIT", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.0.1", + "lit": "^2.0.2" + } + }, + "node_modules/@rocket/drawer/node_modules/@lion/overlays": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@lion/overlays/-/overlays-0.29.1.tgz", + "integrity": "sha512-MtoPavlnSVbisPPK+VPOyvekE5STHOH3GubC63danjVbMC9Nf927kzLT19l89JPxseejpU0fXHSdz7PVhNGgIA==", + "license": "MIT", + "dependencies": { + "@lion/core": "0.19.0", + "@popperjs/core": "^2.5.4", + "singleton-manager": "1.4.2" + } + }, + "node_modules/@rocket/drawer/node_modules/singleton-manager": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/singleton-manager/-/singleton-manager-1.4.2.tgz", + "integrity": "sha512-3/K7K61TiN0+tw32HRC3AZQBacN0Ky/NmHEnhofFPEFROqZ5T6BXK45Z94OQsvuFD2euOVOU40XDNeTal63Baw==", + "license": "MIT" + }, "node_modules/@rocket/eleventy-plugin-mdjs-unified": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@rocket/eleventy-plugin-mdjs-unified/-/eleventy-plugin-mdjs-unified-0.6.0.tgz", @@ -5099,6 +5256,61 @@ "sax-wasm": "^2.0.0" } }, + "node_modules/@rocket/search/node_modules/@lion/combobox": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@lion/combobox/-/combobox-0.9.0.tgz", + "integrity": "sha512-FEOnuH+s9NSFZTcCEYvLIy6IWz4c8qUgGhackcXEGjDf5/Z8VItbhWdfPZ0WrA1bFnR+S0n4vovJWsYWSFovzw==", + "license": "MIT", + "dependencies": { + "@lion/core": "^0.21.0", + "@lion/form-core": "^0.16.0", + "@lion/listbox": "^0.12.0", + "@lion/overlays": "^0.31.0" + } + }, + "node_modules/@rocket/search/node_modules/@lion/core": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@lion/core/-/core-0.21.1.tgz", + "integrity": "sha512-6lCJ7ZLHQBcsZu/XBOEePG4KxxNFI1OD+1wSA4f9KMyHJVA4+FXZEv1mYniWVsfdPXyyAgKnmfB23xD4Z3kwng==", + "license": "MIT", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.0.1", + "lit": "^2.0.2" + } + }, + "node_modules/@rocket/search/node_modules/@lion/form-core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@lion/form-core/-/form-core-0.16.0.tgz", + "integrity": "sha512-b3Tw0y/5eoIkfowJUqH4JIPvleFOsN09MM6Pb8j7QIyweRk/YlSMbirAlEYmdeTo8aOgGRJhbmrOKmukpsPA/g==", + "license": "MIT", + "dependencies": { + "@lion/core": "^0.21.0", + "@lion/localize": "^0.23.0" + } + }, + "node_modules/@rocket/search/node_modules/@lion/localize": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@lion/localize/-/localize-0.23.0.tgz", + "integrity": "sha512-pGN2JzEPukvgtB3+BpeT13KZnI7mCqyq7m/a+A973XFhH1PJlAyEXdkv3bVJsIpNolqXRVP0lU4vgisMsO8IkQ==", + "license": "MIT", + "dependencies": { + "@bundled-es-modules/message-format": "6.0.4", + "@lion/core": "^0.21.0", + "singleton-manager": "^1.4.3" + } + }, + "node_modules/@rocket/search/node_modules/@lion/overlays": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@lion/overlays/-/overlays-0.31.0.tgz", + "integrity": "sha512-4jCoan6QjUARx7UddsZogqgQAVyacu82JaR8raMzIb1eZWo3m8w/hxDCssdYrsDbXJCiOgwgAfE0Kd929GBUpw==", + "license": "MIT", + "dependencies": { + "@lion/core": "^0.21.0", + "@popperjs/core": "^2.5.4", + "singleton-manager": "^1.4.3" + } + }, "node_modules/@rocket/search/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -6977,13 +7189,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/jsonfile": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", @@ -7009,16 +7214,16 @@ } }, "node_modules/@types/koa": { - "version": "2.13.6", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.6.tgz", - "integrity": "sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-3.0.2.tgz", + "integrity": "sha512-7TRzVOBcH/q8CfPh9AmHBQ8TZtimT4Sn+rw8//hXveI6+F41z93W8a+0B0O8L7apKQv+vKBIEZSECiL0Oo1JFA==", "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", "@types/cookies": "*", "@types/http-assert": "*", - "@types/http-errors": "*", + "@types/http-errors": "^2", "@types/keygrip": "*", "@types/koa-compose": "*", "@types/node": "*" @@ -7034,9 +7239,9 @@ } }, "node_modules/@types/koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.4.tgz", + "integrity": "sha512-uPcg5P2KfZ2lN6R2776UA0702lYPyrvcAk21H8TZxMRo9WGzQJNHohzyTvSjJ+ZyzB5gC5f/pc/ZPUk/o85e1w==", "dev": true, "license": "MIT", "dependencies": { @@ -7055,9 +7260,9 @@ } }, "node_modules/@types/koa-static": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", - "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.4.tgz", + "integrity": "sha512-j1AUzzl7eJYEk9g01hNTlhmipFh8RFbOQmaMNLvLcNNAkPw0bdTs3XTa3V045XFlrWN0QYnblbDJv2RzawTn6A==", "dev": true, "license": "MIT", "dependencies": { @@ -7200,17 +7405,6 @@ "@types/node": "*" } }, - "node_modules/@types/prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA==", - "deprecated": "This is a stub types definition. prettier provides its own type definitions, so you do not need this installed.", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier": "*" - } - }, "node_modules/@types/prismjs": { "version": "1.26.0", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.0.tgz", @@ -7275,13 +7469,6 @@ "@types/ws": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -7383,9 +7570,9 @@ "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" }, "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -7411,122 +7598,234 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.1.tgz", + "integrity": "sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.57.1", + "@typescript-eslint/type-utils": "8.57.1", + "@typescript-eslint/utils": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.57.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.1.tgz", + "integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.57.1", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "typescript": { + "supports-color": { "optional": true } } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.1.tgz", + "integrity": "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.57.1", + "@typescript-eslint/types": "^8.57.1", + "debug": "^4.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "typescript": { + "supports-color": { "optional": true } } }, + "node_modules/@typescript-eslint/project-service/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz", + "integrity": "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.1.tgz", + "integrity": "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.1.tgz", + "integrity": "sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1", + "@typescript-eslint/utils": "8.57.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "typescript": { + "supports-color": { "optional": true } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz", + "integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7534,78 +7833,152 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz", + "integrity": "sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@typescript-eslint/project-service": "8.57.1", + "@typescript-eslint/tsconfig-utils": "8.57.1", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/visitor-keys": "8.57.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, "peerDependenciesMeta": { - "typescript": { + "supports-color": { "optional": true } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.1.tgz", + "integrity": "sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.57.1", + "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/typescript-estree": "8.57.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz", + "integrity": "sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.57.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -8311,9 +8684,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -9261,6 +9634,12 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "license": "ISC" + }, "node_modules/archiver": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", @@ -9469,6 +9848,17 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -11829,6 +12219,15 @@ "type-is": "^1.6.16" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", @@ -11839,19 +12238,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -11877,24 +12263,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -12400,6 +12768,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" + }, "node_modules/constant-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", @@ -14284,9 +14658,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -14296,31 +14670,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/esbuild-register": { @@ -14335,6 +14710,22 @@ "esbuild": ">=0.12 <1" } }, + "node_modules/esbuild/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -14393,15 +14784,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14413,28 +14795,30 @@ } }, "node_modules/eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -14468,9 +14852,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, "license": "MIT", "bin": { @@ -14481,23 +14865,26 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -14580,33 +14967,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -14807,16 +15167,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -14830,21 +15180,10 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -15805,6 +16144,70 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/geckodriver": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-5.0.0.tgz", @@ -16468,6 +16871,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, "node_modules/has-yarn": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", @@ -21209,16 +21618,6 @@ "dev": true, "license": "ISC" }, - "node_modules/make-synchronized": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/make-synchronized/-/make-synchronized-0.8.0.tgz", - "integrity": "sha512-DZu4lwc0ffoFz581BSQa/BJl+1ZqIkoRQ+VejMlH0VrP4E86StAODnZujZ4sepumQj8rcP7wUnUBGM8Gu+zKUA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/fisker/make-synchronized?sponsor=1" - } - }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -23465,12 +23864,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -23478,13 +23871,6 @@ "dev": true, "license": "MIT" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true, - "license": "MIT" - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -23627,24 +24013,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-abi": { - "version": "3.73.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz", - "integrity": "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "license": "MIT" - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -23784,6 +24152,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -23796,6 +24177,15 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/nunjucks": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", @@ -25583,41 +25973,6 @@ "url": "https://opencollective.com/preact" } }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -25639,32 +25994,32 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "devOptional": true, "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-plugin-package": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-package/-/prettier-plugin-package-1.3.1.tgz", - "integrity": "sha512-/0x1ZJLaf+ru5TH0bTOZCcb7aVNWFqY4Pb4CHx1p56dS/HiNeQfCdrarMqwE8huqW7ohp8fMvQTyPjlqqzmw1Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-package/-/prettier-plugin-package-2.0.0.tgz", + "integrity": "sha512-d7v5sEUf9AIBYmsjn6kzy9xugvoutgk+pdt1/l3opACE5uHS30LzApezcoHYqDJtvcSPj8SCY/50WIiVYmH3+Q==", "dev": true, "license": "MPL-2.0", "engines": { - "node": ">=10.13.0" + "node": ">=20.19.0" }, "peerDependencies": { - "prettier": "^2.0.0" + "prettier": "^3.0.0" } }, "node_modules/pretty": { @@ -26447,15 +26802,35 @@ } }, "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -30597,9 +30972,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -30878,6 +31253,12 @@ "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", "license": "ISC" }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -30912,38 +31293,6 @@ "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", "license": "MIT" }, - "node_modules/sharp": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", - "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -31033,58 +31382,6 @@ ], "license": "MIT" }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -32546,6 +32843,54 @@ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tinyrainbow": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", @@ -32724,6 +33069,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -32802,29 +33160,6 @@ "node": ">=0.6.x" } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -32983,9 +33318,9 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -32993,7 +33328,7 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/typical": { @@ -34232,15 +34567,6 @@ "undici-types": "~6.19.2" } }, - "node_modules/webdriver/node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/webdriver/node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -34387,6 +34713,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -35693,7 +36057,7 @@ "puppeteer": "^24.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/config-loader": { @@ -35742,8 +36106,8 @@ "version": "0.7.5", "license": "MIT", "dependencies": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", + "@types/koa": "^3.0.1", + "@types/ws": "^8.5.13", "@web/parse5-utils": "^2.1.0", "chokidar": "^4.0.1", "clone": "^2.1.2", @@ -35751,7 +36115,7 @@ "get-stream": "^6.0.0", "is-stream": "^2.0.0", "isbinaryfile": "^5.0.0", - "koa": "^2.16.1", + "koa": "^3.1.1", "koa-etag": "^4.0.0", "koa-send": "^5.0.1", "koa-static": "^5.0.0", @@ -35759,20 +36123,19 @@ "mime-types": "^2.1.27", "parse5": "^6.0.1", "picomatch": "^2.2.2", - "ws": "^7.5.10" + "ws": "^8.18.3" }, "devDependencies": { "@types/clone": "^2.1.0", - "@types/koa-etag": "^3.0.0", - "@types/koa-static": "^4.0.1", - "@types/parse5": "^6.0.1", + "@types/koa-etag": "^3.0.4", + "@types/koa-static": "^4.0.4", "abort-controller": "^3.0.0", "express": "^4.21.2", "nanoid": "^3.1.25", "portfinder": "^1.0.32" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/dev-server-core/node_modules/chokidar": { @@ -35790,6 +36153,91 @@ "url": "https://paulmillr.com/funding/" } }, + "packages/dev-server-core/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "packages/dev-server-core/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/dev-server-core/node_modules/koa": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/koa/-/koa-3.1.2.tgz", + "integrity": "sha512-2LOQnFKu3m0VxpE+5sb5+BRTSKrXmNxGgxVRiKwD9s5KQB1zID/FRXhtzeV7RT1L2GVpdEEAfVuclFOMGl1ikA==", + "license": "MIT", + "dependencies": { + "accepts": "^1.3.8", + "content-disposition": "~1.0.1", + "content-type": "^1.0.5", + "cookies": "~0.9.1", + "delegates": "^1.0.0", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.5.0", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "packages/dev-server-core/node_modules/koa/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "packages/dev-server-core/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "packages/dev-server-core/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "packages/dev-server-core/node_modules/readdirp": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", @@ -35803,6 +36251,57 @@ "url": "https://paulmillr.com/funding/" } }, + "packages/dev-server-core/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/dev-server-core/node_modules/type-is/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "packages/dev-server-core/node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "packages/dev-server-esbuild": { "name": "@web/dev-server-esbuild", "version": "1.0.5", @@ -35810,7 +36309,7 @@ "dependencies": { "@mdn/browser-compat-data": "^4.0.0", "@web/dev-server-core": "^0.7.4", - "esbuild": "^0.27.0", + "esbuild": "^0.25.0", "parse5": "^6.0.1", "ua-parser-js": "^1.0.33" }, @@ -35821,7 +36320,7 @@ "preact": "^10.5.9" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/dev-server-esbuild/node_modules/@esbuild/aix-ppc64": { @@ -36277,7 +36776,7 @@ "puppeteer": "^24.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/dev-server-import-maps": { @@ -36286,7 +36785,6 @@ "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", @@ -36296,7 +36794,7 @@ "@web/test-runner": "^0.20.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/dev-server-legacy": { @@ -36328,7 +36826,7 @@ "@types/valid-url": "^1.0.3" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/dev-server-polyfill": { @@ -36350,7 +36848,7 @@ "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.2", - "nanocolors": "^0.2.1", + "nanocolors": "^0.2.13", "parse5": "^6.0.1", "rollup": "^4.4.0", "whatwg-url": "^14.0.0" @@ -36361,17 +36859,15 @@ "@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", "chai": "^4.2.0", - "mocha": "^10.8.2", "postcss": "^8.4.31", "rollup-plugin-postcss": "^4.0.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/dev-server-rollup/node_modules/@rollup/plugin-alias": { @@ -36842,14 +37338,13 @@ "version": "2.1.1", "license": "MIT", "dependencies": { - "@types/parse5": "^6.0.1", "parse5": "^6.0.1" }, "devDependencies": { "@types/html-minifier-terser": "^7.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/polyfills-loader": { @@ -36879,11 +37374,10 @@ }, "devDependencies": { "@types/babel__core": "^7.1.12", - "@types/parse5": "^6.0.1", "@types/valid-url": "^1.0.3" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/polyfills-loader/node_modules/@webcomponents/scoped-custom-element-registry": { @@ -36971,15 +37465,12 @@ "picomatch": "^2.2.2" }, "devDependencies": { - "@prettier/sync": "^0.6.1", "@types/html-minifier-terser": "^7.0.0", "@types/picomatch": "^2.2.1", - "@types/prettier": "^3.0.0", - "prettier": "^3.6.2", "rollup": "^4.4.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/rollup-plugin-html/node_modules/brace-expansion": { @@ -37025,22 +37516,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/rollup-plugin-html/node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "packages/rollup-plugin-import-meta-assets": { "name": "@web/rollup-plugin-import-meta-assets", "version": "2.3.3", @@ -37139,7 +37614,7 @@ "rollup": "^4.4.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/rollup-plugin-workbox": { @@ -39704,11 +40179,10 @@ "devDependencies": { "@web/test-runner-chrome": "^0.18.0", "@web/test-runner-playwright": "^0.11.0", - "@web/test-runner-webdriver": "^0.9.0", - "mocha": "^10.8.2" + "@web/test-runner-webdriver": "^0.9.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/test-runner-commands/node_modules/mkdirp": { @@ -39743,15 +40217,15 @@ "convert-source-map": "^2.0.0", "debounce": "^1.2.0", "dependency-graph": "^0.11.0", - "globby": "^11.0.1", + "globby": "^11.1.0", "internal-ip": "^6.2.0", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.0.2", "log-update": "^4.0.0", - "nanocolors": "^0.2.1", + "nanocolors": "^0.2.13", "nanoid": "^3.1.25", - "open": "^8.0.2", + "open": "^8.4.2", "picomatch": "^2.2.2", "source-map": "^0.7.3" }, @@ -39759,7 +40233,7 @@ "portfinder": "^1.0.32" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/test-runner-core/node_modules/chokidar": { @@ -39914,7 +40388,7 @@ "@web/test-runner-playwright": "^0.11.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/test-runner-mocha": { @@ -40346,11 +40820,10 @@ "devDependencies": { "@web/test-runner-chrome": "^0.18.0", "@web/test-runner-playwright": "^0.11.0", - "@web/test-runner-webdriver": "^0.9.0", - "mocha": "^10.8.2" + "@web/test-runner-webdriver": "^0.9.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" } }, "packages/test-runner-visual-regression/node_modules/mkdirp": { diff --git a/package.json b/package.json index 2e2048fbc2..7596f17228 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "node": ">=18.0.0" }, "scripts": { - "build": "npm run build:clean && tsc --build", + "build": "node scripts/fix-jridgewell-dcts.js && rm -rf packages/dev-server-core/node_modules/@types/koa packages/dev-server-core/node_modules/@types/ws && npm run build:clean && tsc --build", "build:clean": "rimraf --glob packages/*/tsconfig.tsbuildinfo && rimraf --glob packages/*/dist", "build:production": "node scripts/workspaces-scripts-bin.mjs build:production", "build:site": "npm run build && rocket build", @@ -18,11 +18,11 @@ "dev-to-git": "dev-to-git", "format": "npm run format:eslint && npm run format:prettier", "format:eslint": "eslint --ext .ts,.js,.mjs,.cjs . --fix", - "format:prettier": "node node_modules/prettier/bin-prettier.js \"**/*.{ts,js,mjs,cjs,md}\" \"**/package.json\" --write --ignore-path .eslintignore", + "format:prettier": "npx prettier \"**/*.{ts,js,mjs,cjs,md}\" \"**/package.json\" --write --ignore-path .eslintignore", "install-puppeteer-firefox": "cd node_modules/puppeteer && PUPPETEER_BROWSER=firefox node install.js", "lint": "npm run lint:eslint && npm run lint:prettier", "lint:eslint": "eslint --ext .ts,.js,.mjs,.cjs .", - "lint:prettier": "node node_modules/prettier/bin-prettier.js \"**/*.{ts,js,mjs,cjs,md}\" --check --ignore-path .eslintignore", + "lint:prettier": "npx prettier \"**/*.{ts,js,mjs,cjs,md}\" --check --ignore-path .eslintignore", "prepare": "husky", "reinstall-workspace": "rimraf --glob packages/*/node_modules && rimraf node_modules && npm install && npm run build", "release": "changeset publish && npm run format", @@ -57,29 +57,34 @@ "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", "@types/node": "*", - "@typescript-eslint/eslint-plugin": "^5.3.0", - "@typescript-eslint/parser": "^5.59.1", + "@typescript-eslint/eslint-plugin": "^8.48.0", + "@typescript-eslint/parser": "^8.48.0", "alex": "^11.0.0", "chai": "^4.3.4", "concurrently": "^8.0.1", "deepmerge": "^4.2.2", "dev-to-git": "^1.4.1", - "eslint": "^8.1.0", - "eslint-config-prettier": "^8.3.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", "hanbi": "^1.0.1", "husky": "^9.1.7", "lint-staged": "^15.2.11", "mocha": "^10.8.2", "nanocolors": "^0.2.1", - "prettier": "^2.4.1", - "prettier-plugin-package": "^1.3.0", + "prettier": "^3.7.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "prettier-plugin-package": "^2.0.0", "rimraf": "^4.4.1", "rollup": "^4.4.0", "ts-node": "^10.4.0", - "typescript": "~5.0.4", - "wireit": "^0.14.2" + "typescript": "^5.9.3", + "wireit": "^0.14.2", + "@types/koa": "^3.0.1", + "@types/ws": "^8.5.13" }, "eslintConfig": { + "root": true, "parser": "@typescript-eslint/parser", "plugins": [ "@typescript-eslint" @@ -100,8 +105,18 @@ "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "caughtErrors": "none", + "argsIgnorePattern": "^_" + } + ], "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-require-imports": "off", + "@typescript-eslint/no-unused-expressions": "off", + "@typescript-eslint/no-empty-object-type": "off", + "@typescript-eslint/no-unsafe-function-type": "off", "@typescript-eslint/ban-ts-comment": "off" } }, @@ -120,15 +135,8 @@ "retries": 3 }, "overrides": { - "@lion/accordion": "^0.11.1", - "@lion/combobox": "^0.11.1", - "@lion/core": "^0.24.0", - "@lion/form-core": "^0.18.3", - "@lion/overlays": "^0.33.2", - "@mdjs/core": "^0.9.0", - "@mdjs/mdjs-preview": "^0.5.5", - "@rocket/drawer": "^0.1.4", - "sharp": "^0.30.7" + "@types/koa": "^3.0.1", + "@types/ws": "^8.5.13" }, "prettier": { "singleQuote": true, diff --git a/packages/browser-logs/package.json b/packages/browser-logs/package.json index df72968a13..4cb87b717e 100644 --- a/packages/browser-logs/package.json +++ b/packages/browser-logs/package.json @@ -1,5 +1,6 @@ { "name": "@web/browser-logs", + "type": "module", "version": "0.4.1", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -32,7 +32,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], diff --git a/packages/browser-logs/src/browserScript.ts b/packages/browser-logs/src/browserScript.ts index 1953a728ac..22e1163692 100644 --- a/packages/browser-logs/src/browserScript.ts +++ b/packages/browser-logs/src/browserScript.ts @@ -11,10 +11,8 @@ const logUncaughtErrorsScript = fs .replace(REGEXP_SOURCE_MAP, ''); /** - * Create the browser script. This project is compiled as CJS because it also needs to run in node, so - * we create a small wrapper. - * - * It can't be ESM anyway, because it should work on older browsers as well. + * Create the browser script as an IIFE wrapper. + * It can't be ESM because it should work on older browsers as well. */ export const browserScript = '(function () { var module={};var exports={};\n' + diff --git a/packages/browser-logs/src/deserialize.ts b/packages/browser-logs/src/deserialize.ts index b483842ac7..890f8f8d28 100644 --- a/packages/browser-logs/src/deserialize.ts +++ b/packages/browser-logs/src/deserialize.ts @@ -1,4 +1,4 @@ -import { ParseStackTraceOptions, parseStackTrace } from './parseStackTrace.js'; +import { type ParseStackTraceOptions, parseStackTrace } from './parseStackTrace.ts'; const KEY_WTR_TYPE = '__WTR_TYPE__'; const KEY_CONSTRUCTOR_NAME = '__WTR_CONSTRUCTOR_NAME__'; diff --git a/packages/browser-logs/src/index.ts b/packages/browser-logs/src/index.ts index 8d655459f3..8182e3c830 100644 --- a/packages/browser-logs/src/index.ts +++ b/packages/browser-logs/src/index.ts @@ -1,8 +1,8 @@ -export { deserialize } from './deserialize.js'; -export { browserScript } from './browserScript.js'; +export { deserialize } from './deserialize.ts'; +export { browserScript } from './browserScript.ts'; export { MapBrowserUrl, parseStackTrace, StackLocation, MapStackLocation, -} from './parseStackTrace.js'; +} from './parseStackTrace.ts'; diff --git a/packages/browser-logs/src/serialize.ts b/packages/browser-logs/src/serialize.ts index 0a458468e0..0c50574148 100644 --- a/packages/browser-logs/src/serialize.ts +++ b/packages/browser-logs/src/serialize.ts @@ -2,7 +2,7 @@ var KEY_WTR_TYPE = '__WTR_TYPE__'; var KEY_CONSTRUCTOR_NAME = '__WTR_CONSTRUCTOR_NAME__'; -/* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable @typescript-eslint/no-empty-object-type */ function catchFallback(fn: (...args: any[]) => T, fallback = null) { try { return fn(); @@ -103,7 +103,7 @@ function createReplacer() { } if (type === 'symbol') { - return (value as Symbol).toString(); + return (value as symbol).toString(); } if (type === 'object') { diff --git a/packages/browser-logs/test/serialize-deserialize.test.ts b/packages/browser-logs/test/serialize-deserialize.test.ts index 5a3232684c..c8a7011e64 100644 --- a/packages/browser-logs/test/serialize-deserialize.test.ts +++ b/packages/browser-logs/test/serialize-deserialize.test.ts @@ -3,7 +3,7 @@ import puppeteer, { Browser, Page } from 'puppeteer'; import fs from 'fs'; import path from 'path'; -import { deserialize } from '../src/deserialize.js'; +import { deserialize } from '../src/deserialize.ts'; const serializeScript = fs.readFileSync(require.resolve('../dist/serialize.js'), 'utf-8'); const defaultOptions = { browserRootDir: __dirname, cwd: __dirname }; diff --git a/packages/browser-logs/tsconfig.json b/packages/browser-logs/tsconfig.json index b18369d422..95bcb3ed16 100644 --- a/packages/browser-logs/tsconfig.json +++ b/packages/browser-logs/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -18,5 +17,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/config-loader/tsconfig.json b/packages/config-loader/tsconfig.json index 27fc2e8749..592bde9a07 100644 --- a/packages/config-loader/tsconfig.json +++ b/packages/config-loader/tsconfig.json @@ -3,10 +3,13 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false, + "strict": false, "allowJs": true, "checkJs": true, "emitDeclarationOnly": true @@ -20,5 +23,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-core/package.json b/packages/dev-server-core/package.json index 1a74099f07..549d96b291 100644 --- a/packages/dev-server-core/package.json +++ b/packages/dev-server-core/package.json @@ -1,5 +1,6 @@ { "name": "@web/dev-server-core", + "type": "module", "version": "0.7.5", "publishConfig": { "access": "public" @@ -17,21 +18,23 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" }, "./dist/dom5": { "types": "./dist/dom5/index.d.ts", - "require": "./dist/dom5/index.js" + "default": "./dist/dom5/index.js" }, "./test-helpers": { "types": "./test-helpers.d.ts", - "import": "./test-helpers.mjs", - "require": "./dist/test-helpers.js" + "default": "./dist/test-helpers.js" + }, + "./test-helpers.js": { + "types": "./test-helpers.d.ts", + "default": "./dist/test-helpers.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -46,7 +49,6 @@ ".self-signed-dev-server-ssl.cert", ".self-signed-dev-server-ssl.key", "*.d.ts", - "*.mjs", "dist", "src" ], @@ -58,8 +60,8 @@ "core" ], "dependencies": { - "@types/koa": "^2.11.6", - "@types/ws": "^7.4.0", + "@types/koa": "^3.0.1", + "@types/ws": "^8.5.13", "@web/parse5-utils": "^2.1.0", "chokidar": "^4.0.1", "clone": "^2.1.2", @@ -67,7 +69,7 @@ "get-stream": "^6.0.0", "is-stream": "^2.0.0", "isbinaryfile": "^5.0.0", - "koa": "^2.16.1", + "koa": "^3.1.1", "koa-etag": "^4.0.0", "koa-send": "^5.0.1", "koa-static": "^5.0.0", @@ -75,13 +77,12 @@ "mime-types": "^2.1.27", "parse5": "^6.0.1", "picomatch": "^2.2.2", - "ws": "^7.5.10" + "ws": "^8.18.3" }, "devDependencies": { "@types/clone": "^2.1.0", - "@types/koa-etag": "^3.0.0", - "@types/koa-static": "^4.0.1", - "@types/parse5": "^6.0.1", + "@types/koa-etag": "^3.0.4", + "@types/koa-static": "^4.0.4", "abort-controller": "^3.0.0", "express": "^4.21.2", "nanoid": "^3.1.25", diff --git a/packages/dev-server-core/src/dom5/index.ts b/packages/dev-server-core/src/dom5/index.ts index c881b21795..94cdb0e2d9 100644 --- a/packages/dev-server-core/src/dom5/index.ts +++ b/packages/dev-server-core/src/dom5/index.ts @@ -11,7 +11,7 @@ * subject to an additional IP rights grant found at * http://polymer.github.io/PATENTS.txt */ -export * from './modification.js'; -export * from './predicates.js'; -export * from './util.js'; -export * from './walking.js'; +export * from './modification.ts'; +export * from './predicates.ts'; +export * from './util.ts'; +export * from './walking.ts'; diff --git a/packages/dev-server-core/src/dom5/iteration.ts b/packages/dev-server-core/src/dom5/iteration.ts index 33fb228a45..3be9304001 100644 --- a/packages/dev-server-core/src/dom5/iteration.ts +++ b/packages/dev-server-core/src/dom5/iteration.ts @@ -12,8 +12,10 @@ * http://polymer.github.io/PATENTS.txt */ -import { isElement, Predicate, predicates as p } from './predicates.js'; -import { defaultChildNodes, GetChildNodes } from './util.js'; +import { isElement, predicates as p } from './predicates.ts'; +import type { Predicate } from './predicates.ts'; +import { defaultChildNodes } from './util.ts'; +import type { GetChildNodes } from './util.ts'; /** * Applies `mapfn` to `node` and the tree below `node`, yielding a flattened diff --git a/packages/dev-server-core/src/dom5/modification.ts b/packages/dev-server-core/src/dom5/modification.ts index 55510004e2..1516c37839 100644 --- a/packages/dev-server-core/src/dom5/modification.ts +++ b/packages/dev-server-core/src/dom5/modification.ts @@ -13,8 +13,8 @@ */ import cloneObject from 'clone'; -import { isDocumentFragment, predicates as p } from './predicates.js'; -import { queryAll } from './walking.js'; +import { isDocumentFragment, predicates as p } from './predicates.ts'; +import { queryAll } from './walking.ts'; function newTextNode(value: string): any { return { @@ -22,7 +22,7 @@ function newTextNode(value: string): any { value: value, parentNode: undefined, attrs: [], - __location: undefined, + __location: undefined as any, }; } @@ -32,7 +32,7 @@ function newCommentNode(comment: string): any { data: comment, parentNode: undefined, attrs: [], - __location: undefined, + __location: undefined as any, }; } @@ -44,7 +44,7 @@ function newElement(tagName: string, namespace?: string): any { namespaceURI: namespace || 'http://www.w3.org/1999/xhtml', attrs: [], parentNode: undefined, - __location: undefined, + __location: undefined as any, }; } @@ -99,7 +99,10 @@ function insertNode(parent: any, index: number, newNode: any, replace?: boolean) removedNode = parent.childNodes[index]; } - Array.prototype.splice.apply(parent.childNodes, ([index, replace ? 1 : 0]).concat(newNodes)); + Array.prototype.splice.apply( + parent.childNodes, + ([index, replace ? 1 : 0] as any).concat(newNodes), + ); newNodes.forEach(function (n) { n.parentNode = parent; diff --git a/packages/dev-server-core/src/dom5/predicates.ts b/packages/dev-server-core/src/dom5/predicates.ts index bb66c426aa..f285116fe7 100644 --- a/packages/dev-server-core/src/dom5/predicates.ts +++ b/packages/dev-server-core/src/dom5/predicates.ts @@ -13,7 +13,7 @@ * http://polymer.github.io/PATENTS.txt */ -import { getAttribute, getAttributeIndex, getTextContent } from './util.js'; +import { getAttribute, getAttributeIndex, getTextContent } from './util.ts'; /** * Match the text inside an element, textnode, or comment diff --git a/packages/dev-server-core/src/dom5/util.ts b/packages/dev-server-core/src/dom5/util.ts index 9def72989e..915192b9bf 100644 --- a/packages/dev-server-core/src/dom5/util.ts +++ b/packages/dev-server-core/src/dom5/util.ts @@ -12,15 +12,15 @@ * http://polymer.github.io/PATENTS.txt */ -import { constructors } from './modification.js'; +import { constructors } from './modification.ts'; import { isCommentNode, isDocument, isDocumentFragment, isElement, isTextNode, -} from './predicates.js'; -import { nodeWalkAll } from './walking.js'; +} from './predicates.ts'; +import { nodeWalkAll } from './walking.ts'; /** * Return the text value of a node or element diff --git a/packages/dev-server-core/src/dom5/walking.ts b/packages/dev-server-core/src/dom5/walking.ts index 278615c5e1..15f0784fe3 100644 --- a/packages/dev-server-core/src/dom5/walking.ts +++ b/packages/dev-server-core/src/dom5/walking.ts @@ -12,9 +12,11 @@ * http://polymer.github.io/PATENTS.txt */ -import * as iteration from './iteration.js'; -import { isElement, Predicate, predicates as p } from './predicates.js'; -import { defaultChildNodes, GetChildNodes } from './util.js'; +import * as iteration from './iteration.ts'; +import { isElement, predicates as p } from './predicates.ts'; +import type { Predicate } from './predicates.ts'; +import { defaultChildNodes } from './util.ts'; +import type { GetChildNodes } from './util.ts'; /** * Applies `mapfn` to `node` and the tree below `node`, returning a flattened diff --git a/packages/dev-server-core/src/index.ts b/packages/dev-server-core/src/index.ts index e238c16b41..648b3c019b 100644 --- a/packages/dev-server-core/src/index.ts +++ b/packages/dev-server-core/src/index.ts @@ -5,17 +5,17 @@ export { Server } from 'net'; import WebSocket from 'ws'; export { WebSocket }; -export { DevServer } from './server/DevServer.js'; -export { Plugin, ServerStartParams, ResolveOptions } from './plugins/Plugin.js'; -export { DevServerCoreConfig, MimeTypeMappings } from './server/DevServerCoreConfig.js'; -export { WebSocketsManager, WebSocketData } from './web-sockets/WebSocketsManager.js'; +export { DevServer } from './server/DevServer.ts'; +export { Plugin, ServerStartParams, ResolveOptions } from './plugins/Plugin.ts'; +export { DevServerCoreConfig, MimeTypeMappings } from './server/DevServerCoreConfig.ts'; +export { WebSocketsManager, WebSocketData } from './web-sockets/WebSocketsManager.ts'; export { getRequestBrowserPath, getRequestFilePath, getResponseBody, getHtmlPath, isInlineScriptRequest, -} from './utils.js'; -export { Logger, ErrorWithLocation } from './logger/Logger.js'; -export { PluginSyntaxError } from './logger/PluginSyntaxError.js'; -export { PluginError } from './logger/PluginError.js'; +} from './utils.ts'; +export { Logger, ErrorWithLocation } from './logger/Logger.ts'; +export { PluginSyntaxError } from './logger/PluginSyntaxError.ts'; +export { PluginError } from './logger/PluginError.ts'; diff --git a/packages/dev-server-core/src/logger/PluginSyntaxError.ts b/packages/dev-server-core/src/logger/PluginSyntaxError.ts index 0cacb76998..d1287d09a8 100644 --- a/packages/dev-server-core/src/logger/PluginSyntaxError.ts +++ b/packages/dev-server-core/src/logger/PluginSyntaxError.ts @@ -1,12 +1,17 @@ export class PluginSyntaxError extends Error { - constructor( - public message: string, - public filePath: string, - public code: string, - public line: number, - public column: number, - ) { + public message: string; + public filePath: string; + public code: string; + public line: number; + public column: number; + + constructor(message: string, filePath: string, code: string, line: number, column: number) { super(message); + this.message = message; + this.filePath = filePath; + this.code = code; + this.line = line; + this.column = column; this.name = 'PluginSyntaxError'; } } diff --git a/packages/dev-server-core/src/middleware/PluginTransformCache.ts b/packages/dev-server-core/src/middleware/PluginTransformCache.ts index 9a6d5a3613..39232b417e 100644 --- a/packages/dev-server-core/src/middleware/PluginTransformCache.ts +++ b/packages/dev-server-core/src/middleware/PluginTransformCache.ts @@ -2,7 +2,7 @@ import LRUCache from 'lru-cache'; import { FSWatcher } from 'chokidar'; import fs from 'fs'; import { promisify } from 'util'; -import { RequestCancelledError } from '../utils.js'; +import { RequestCancelledError } from '../utils.ts'; const fsStat = promisify(fs.stat); @@ -29,7 +29,12 @@ export class PluginTransformCache { private lruCache: LRUCache; - constructor(private fileWatcher: FSWatcher, private rootDir: string) { + private fileWatcher: FSWatcher; + private rootDir: string; + + constructor(fileWatcher: FSWatcher, rootDir: string) { + this.fileWatcher = fileWatcher; + this.rootDir = rootDir; this.lruCache = new LRUCache({ sizeCalculation: (e, key) => e.body.length + (key ? key.length : 0), maxSize: 52428800, diff --git a/packages/dev-server-core/src/middleware/basePathMiddleware.ts b/packages/dev-server-core/src/middleware/basePathMiddleware.ts index 0a82c11e84..79c7f0ab36 100644 --- a/packages/dev-server-core/src/middleware/basePathMiddleware.ts +++ b/packages/dev-server-core/src/middleware/basePathMiddleware.ts @@ -1,4 +1,4 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; /** * Creates middleware which strips a base path from each request diff --git a/packages/dev-server-core/src/middleware/etagCacheMiddleware.ts b/packages/dev-server-core/src/middleware/etagCacheMiddleware.ts index 1b3f4e1e90..5d24795b1a 100644 --- a/packages/dev-server-core/src/middleware/etagCacheMiddleware.ts +++ b/packages/dev-server-core/src/middleware/etagCacheMiddleware.ts @@ -1,4 +1,4 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; /** * Returns 304 response for cacheable requests if etag matches diff --git a/packages/dev-server-core/src/middleware/historyApiFallbackMiddleware.ts b/packages/dev-server-core/src/middleware/historyApiFallbackMiddleware.ts index 7444e55133..aa24a4c579 100644 --- a/packages/dev-server-core/src/middleware/historyApiFallbackMiddleware.ts +++ b/packages/dev-server-core/src/middleware/historyApiFallbackMiddleware.ts @@ -1,7 +1,7 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; import path from 'path'; -import { toBrowserPath } from '../utils.js'; -import { Logger } from '../logger/Logger.js'; +import { toBrowserPath } from '../utils.ts'; +import type { Logger } from '../logger/Logger.ts'; /** * Serves index.html when a non-file request within the scope of the app index is made. diff --git a/packages/dev-server-core/src/middleware/pluginFileParsedMiddleware.ts b/packages/dev-server-core/src/middleware/pluginFileParsedMiddleware.ts index af8456c2e3..393aff8e44 100644 --- a/packages/dev-server-core/src/middleware/pluginFileParsedMiddleware.ts +++ b/packages/dev-server-core/src/middleware/pluginFileParsedMiddleware.ts @@ -1,5 +1,5 @@ -import { Middleware } from 'koa'; -import { Plugin } from '../plugins/Plugin'; +import type { Middleware } from 'koa'; +import type { Plugin } from '../plugins/Plugin.ts'; /** * Calls fileParsed hook on plugins. diff --git a/packages/dev-server-core/src/middleware/pluginMimeTypeMiddleware.ts b/packages/dev-server-core/src/middleware/pluginMimeTypeMiddleware.ts index c9ff072af2..fe8be1cab9 100644 --- a/packages/dev-server-core/src/middleware/pluginMimeTypeMiddleware.ts +++ b/packages/dev-server-core/src/middleware/pluginMimeTypeMiddleware.ts @@ -1,6 +1,6 @@ -import { Middleware } from 'koa'; -import { Logger } from '../logger/Logger'; -import { Plugin } from '../plugins/Plugin'; +import type { Middleware } from 'koa'; +import type { Logger } from '../logger/Logger.ts'; +import type { Plugin } from '../plugins/Plugin.ts'; /** * Sets up a middleware which allows plugins to resolve the mime type. diff --git a/packages/dev-server-core/src/middleware/pluginServeMiddleware.ts b/packages/dev-server-core/src/middleware/pluginServeMiddleware.ts index da3bac4b2f..473edf2aaa 100644 --- a/packages/dev-server-core/src/middleware/pluginServeMiddleware.ts +++ b/packages/dev-server-core/src/middleware/pluginServeMiddleware.ts @@ -1,7 +1,7 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; import path from 'path'; -import { Logger } from '../logger/Logger'; -import { Plugin } from '../plugins/Plugin'; +import type { Logger } from '../logger/Logger.ts'; +import type { Plugin } from '../plugins/Plugin.ts'; /** * Sets up a middleware which allows plugins to serve files instead of looking it up in the file system. @@ -33,7 +33,10 @@ export function pluginServeMiddleware(logger: Logger, plugins: Plugin[]): Middle if (response.headers) { for (const [k, v] of Object.entries(response.headers)) { - context.response.set(k, v); + // Koa v3 is stricter and doesn't allow undefined header values + if (v !== undefined) { + context.response.set(k, v); + } } } diff --git a/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts b/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts index f048670672..6591be3381 100644 --- a/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts +++ b/packages/dev-server-core/src/middleware/pluginTransformMiddleware.ts @@ -1,11 +1,11 @@ import { FSWatcher } from 'chokidar'; -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; -import { DevServerCoreConfig } from '../server/DevServerCoreConfig.js'; -import { PluginTransformCache } from './PluginTransformCache.js'; -import { getRequestFilePath, getResponseBody, RequestCancelledError } from '../utils.js'; -import { Logger } from '../logger/Logger.js'; -import type { PluginSyntaxError } from '../logger/PluginSyntaxError.js'; +import type { DevServerCoreConfig } from '../server/DevServerCoreConfig.ts'; +import { PluginTransformCache } from './PluginTransformCache.ts'; +import { getRequestFilePath, getResponseBody, RequestCancelledError } from '../utils.ts'; +import type { Logger } from '../logger/Logger.ts'; +import type { PluginSyntaxError } from '../logger/PluginSyntaxError.ts'; /** * Sets up a middleware which allows plugins to transform files before they are served to the browser. diff --git a/packages/dev-server-core/src/middleware/serveFilesMiddleware.ts b/packages/dev-server-core/src/middleware/serveFilesMiddleware.ts index f1f384d836..7238b8045e 100644 --- a/packages/dev-server-core/src/middleware/serveFilesMiddleware.ts +++ b/packages/dev-server-core/src/middleware/serveFilesMiddleware.ts @@ -1,7 +1,8 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; import send from 'koa-send'; -import koaStatic, { Options as KoaStaticOptions } from 'koa-static'; -import { isOutsideRootDir, resolvePathOutsideRootDir } from '../utils.js'; +import koaStatic from 'koa-static'; +import type { Options as KoaStaticOptions } from 'koa-static'; +import { isOutsideRootDir, resolvePathOutsideRootDir } from '../utils.ts'; /** * Creates multiple middleware used for serving files. diff --git a/packages/dev-server-core/src/middleware/watchServedFilesMiddleware.ts b/packages/dev-server-core/src/middleware/watchServedFilesMiddleware.ts index c05cb1e012..f5c46343f1 100644 --- a/packages/dev-server-core/src/middleware/watchServedFilesMiddleware.ts +++ b/packages/dev-server-core/src/middleware/watchServedFilesMiddleware.ts @@ -1,8 +1,8 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; import { FSWatcher } from 'chokidar'; import fs from 'fs'; -import { getRequestFilePath } from '../utils.js'; +import { getRequestFilePath } from '../utils.ts'; /** * Sets up a middleware which tracks served files and sends a reload message to any diff --git a/packages/dev-server-core/src/plugins/Plugin.ts b/packages/dev-server-core/src/plugins/Plugin.ts index 985b66c378..d093c19b63 100644 --- a/packages/dev-server-core/src/plugins/Plugin.ts +++ b/packages/dev-server-core/src/plugins/Plugin.ts @@ -2,10 +2,9 @@ import { FSWatcher } from 'chokidar'; import Koa, { Context } from 'koa'; import { type Server } from 'net'; -import type { DevServerCoreConfig } from '../server/DevServerCoreConfig'; -import type { Logger } from '../logger/Logger'; -import { WebSocketsManager } from '../web-sockets/WebSocketsManager'; - +import type { DevServerCoreConfig } from '../server/DevServerCoreConfig.ts'; +import type { Logger } from '../logger/Logger.ts'; +import { WebSocketsManager } from '../web-sockets/WebSocketsManager.ts'; export type ServeResult = | void | string diff --git a/packages/dev-server-core/src/plugins/mimeTypesPlugin.ts b/packages/dev-server-core/src/plugins/mimeTypesPlugin.ts index 5da9f8db40..f2894efa99 100644 --- a/packages/dev-server-core/src/plugins/mimeTypesPlugin.ts +++ b/packages/dev-server-core/src/plugins/mimeTypesPlugin.ts @@ -1,9 +1,9 @@ import picoMatch from 'picomatch'; import { isAbsolute, posix, sep } from 'path'; -import { MimeTypeMappings } from '../server/DevServerCoreConfig'; -import { Plugin } from './Plugin.js'; -import { getRequestFilePath } from '../utils.js'; +import type { MimeTypeMappings } from '../server/DevServerCoreConfig.ts'; +import type { Plugin } from './Plugin.ts'; +import { getRequestFilePath } from '../utils.ts'; function createMatcher(rootDir: string, pattern: string) { const resolvedPattern = diff --git a/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts b/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts index 83e8a0049e..9d8e461d30 100644 --- a/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts +++ b/packages/dev-server-core/src/plugins/transformModuleImportsPlugin.ts @@ -1,16 +1,16 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ import path from 'path'; -import { Context } from 'koa'; +import type { Context } from 'koa'; // @ts-ignore -import { parse, ParsedImport } from 'es-module-lexer'; +import { parse } from 'es-module-lexer'; -import { queryAll, predicates, getTextContent, setTextContent } from '../dom5/index.js'; +import { queryAll, predicates, getTextContent, setTextContent } from '../dom5/index.ts'; import { parse as parseHtml, serialize as serializeHtml } from 'parse5'; -import { Plugin } from './Plugin.js'; -import { PluginSyntaxError } from '../logger/PluginSyntaxError.js'; -import { toFilePath } from '../utils.js'; -import { Logger } from '../logger/Logger.js'; -import { parseDynamicImport } from './parseDynamicImport.js'; +import type { Plugin } from './Plugin.ts'; +import { PluginSyntaxError } from '../logger/PluginSyntaxError.ts'; +import { toFilePath } from '../utils.ts'; +import type { Logger } from '../logger/Logger.ts'; +import { parseDynamicImport } from './parseDynamicImport.ts'; export type ResolveImport = ( source: string, diff --git a/packages/dev-server-core/src/server/DevServer.ts b/packages/dev-server-core/src/server/DevServer.ts index f282651fa5..436293dfc4 100644 --- a/packages/dev-server-core/src/server/DevServer.ts +++ b/packages/dev-server-core/src/server/DevServer.ts @@ -1,25 +1,31 @@ import Koa from 'koa'; -import { ListenOptions, Server, Socket } from 'net'; -import chokidar from 'chokidar'; +import type { ListenOptions, Server, Socket } from 'net'; +import chokidar, { FSWatcher } from 'chokidar'; import { promisify } from 'util'; -import { DevServerCoreConfig } from './DevServerCoreConfig.js'; -import { createServer } from './createServer.js'; -import { Logger } from '../logger/Logger.js'; -import { WebSocketsManager } from '../web-sockets/WebSocketsManager.js'; +import type { DevServerCoreConfig } from './DevServerCoreConfig.ts'; +import { createServer } from './createServer.ts'; +import type { Logger } from '../logger/Logger.ts'; +import { WebSocketsManager } from '../web-sockets/WebSocketsManager.ts'; export class DevServer { public koaApp: Koa; public server?: Server; public webSockets?: WebSocketsManager; + public config: DevServerCoreConfig; + public logger: Logger; + public fileWatcher: FSWatcher; private started = false; private connections = new Set(); constructor( - public config: DevServerCoreConfig, - public logger: Logger, - public fileWatcher = chokidar.watch([], config.chokidarOptions), + config: DevServerCoreConfig, + logger: Logger, + fileWatcher = chokidar.watch([], config.chokidarOptions), ) { + this.config = config; + this.logger = logger; + this.fileWatcher = fileWatcher; if (!config) throw new Error('Missing config.'); if (!logger) throw new Error('Missing logger.'); diff --git a/packages/dev-server-core/src/server/DevServerCoreConfig.ts b/packages/dev-server-core/src/server/DevServerCoreConfig.ts index 4e5621354c..3230177e57 100644 --- a/packages/dev-server-core/src/server/DevServerCoreConfig.ts +++ b/packages/dev-server-core/src/server/DevServerCoreConfig.ts @@ -1,6 +1,6 @@ -import { Middleware } from 'koa'; -import { Plugin } from '../plugins/Plugin'; -import { Server } from 'net'; +import type { Middleware } from 'koa'; +import type { Plugin } from '../plugins/Plugin.ts'; +import type { Server } from 'net'; import type { ChokidarOptions } from 'chokidar'; export type MimeTypeMappings = Record; diff --git a/packages/dev-server-core/src/server/addPlugins.ts b/packages/dev-server-core/src/server/addPlugins.ts index 051e946efa..ba631cacf7 100644 --- a/packages/dev-server-core/src/server/addPlugins.ts +++ b/packages/dev-server-core/src/server/addPlugins.ts @@ -1,8 +1,8 @@ -import { DevServerCoreConfig } from './DevServerCoreConfig.js'; -import { transformModuleImportsPlugin } from '../plugins/transformModuleImportsPlugin.js'; -import { webSocketsPlugin } from '../web-sockets/webSocketsPlugin.js'; -import { mimeTypesPlugin } from '../plugins/mimeTypesPlugin.js'; -import { Logger } from '../logger/Logger.js'; +import type { DevServerCoreConfig } from './DevServerCoreConfig.ts'; +import { transformModuleImportsPlugin } from '../plugins/transformModuleImportsPlugin.ts'; +import { webSocketsPlugin } from '../web-sockets/webSocketsPlugin.ts'; +import { mimeTypesPlugin } from '../plugins/mimeTypesPlugin.ts'; +import type { Logger } from '../logger/Logger.ts'; export function addPlugins(logger: Logger, config: DevServerCoreConfig) { if (!config.plugins) { diff --git a/packages/dev-server-core/src/server/createMiddleware.ts b/packages/dev-server-core/src/server/createMiddleware.ts index 1bf5fdce1a..419fd52886 100644 --- a/packages/dev-server-core/src/server/createMiddleware.ts +++ b/packages/dev-server-core/src/server/createMiddleware.ts @@ -1,18 +1,18 @@ -import { Middleware } from 'koa'; +import type { Middleware } from 'koa'; import koaEtag from 'koa-etag'; import { FSWatcher } from 'chokidar'; -import { DevServerCoreConfig } from './DevServerCoreConfig.js'; -import { basePathMiddleware } from '../middleware/basePathMiddleware.js'; -import { etagCacheMiddleware } from '../middleware/etagCacheMiddleware.js'; -import { historyApiFallbackMiddleware } from '../middleware/historyApiFallbackMiddleware.js'; -import { pluginMimeTypeMiddleware } from '../middleware/pluginMimeTypeMiddleware.js'; -import { pluginServeMiddleware } from '../middleware/pluginServeMiddleware.js'; -import { pluginTransformMiddleware } from '../middleware/pluginTransformMiddleware.js'; -import { Logger } from '../logger/Logger.js'; -import { watchServedFilesMiddleware } from '../middleware/watchServedFilesMiddleware.js'; -import { pluginFileParsedMiddleware } from '../middleware/pluginFileParsedMiddleware.js'; -import { serveFilesMiddleware } from '../middleware/serveFilesMiddleware.js'; +import type { DevServerCoreConfig } from './DevServerCoreConfig.ts'; +import { basePathMiddleware } from '../middleware/basePathMiddleware.ts'; +import { etagCacheMiddleware } from '../middleware/etagCacheMiddleware.ts'; +import { historyApiFallbackMiddleware } from '../middleware/historyApiFallbackMiddleware.ts'; +import { pluginMimeTypeMiddleware } from '../middleware/pluginMimeTypeMiddleware.ts'; +import { pluginServeMiddleware } from '../middleware/pluginServeMiddleware.ts'; +import { pluginTransformMiddleware } from '../middleware/pluginTransformMiddleware.ts'; +import type { Logger } from '../logger/Logger.ts'; +import { watchServedFilesMiddleware } from '../middleware/watchServedFilesMiddleware.ts'; +import { pluginFileParsedMiddleware } from '../middleware/pluginFileParsedMiddleware.ts'; +import { serveFilesMiddleware } from '../middleware/serveFilesMiddleware.ts'; /** * Creates middlewares based on the given configuration. The middlewares can be diff --git a/packages/dev-server-core/src/server/createServer.ts b/packages/dev-server-core/src/server/createServer.ts index 69d5737458..3926f38936 100644 --- a/packages/dev-server-core/src/server/createServer.ts +++ b/packages/dev-server-core/src/server/createServer.ts @@ -1,16 +1,17 @@ import Koa from 'koa'; import path from 'path'; import { FSWatcher } from 'chokidar'; -import httpServer, { IncomingMessage, ServerResponse } from 'http'; +import httpServer from 'http'; +import type { IncomingMessage, ServerResponse } from 'http'; import http2Server from 'http2'; import fs from 'fs'; -import net, { Server, Socket, ListenOptions } from 'net'; - -import type { DevServerCoreConfig } from './DevServerCoreConfig.js'; -import { createMiddleware } from './createMiddleware.js'; -import type { Logger } from '../logger/Logger.js'; -import { addPlugins } from './addPlugins.js'; +import net from 'net'; +import type { Server, Socket, ListenOptions } from 'net'; +import type { DevServerCoreConfig } from './DevServerCoreConfig.ts'; +import { createMiddleware } from './createMiddleware.ts'; +import type { Logger } from '../logger/Logger.ts'; +import { addPlugins } from './addPlugins.ts'; /** * A request handler that returns a 301 HTTP Redirect to the same location as the original * request but using the https protocol diff --git a/packages/dev-server-core/src/test-helpers.ts b/packages/dev-server-core/src/test-helpers.ts index 74e19db790..989d0f03ae 100644 --- a/packages/dev-server-core/src/test-helpers.ts +++ b/packages/dev-server-core/src/test-helpers.ts @@ -2,10 +2,10 @@ import portfinder from 'portfinder'; import { expect } from 'chai'; import { green, red, yellow } from 'nanocolors'; -import { DevServer } from './server/DevServer.js'; -import { DevServerCoreConfig } from './server/DevServerCoreConfig.js'; -import { Logger } from './logger/Logger.js'; -import { Plugin } from './plugins/Plugin.js'; +import { DevServer } from './server/DevServer.ts'; +import { DevServerCoreConfig } from './server/DevServerCoreConfig.ts'; +import { Logger } from './logger/Logger.ts'; +import { Plugin } from './plugins/Plugin.ts'; const defaultConfig: Omit = { hostname: 'localhost', diff --git a/packages/dev-server-core/src/web-sockets/WebSocketsManager.ts b/packages/dev-server-core/src/web-sockets/WebSocketsManager.ts index cb04c70894..fd9eea6fd6 100644 --- a/packages/dev-server-core/src/web-sockets/WebSocketsManager.ts +++ b/packages/dev-server-core/src/web-sockets/WebSocketsManager.ts @@ -1,6 +1,6 @@ -import { Server } from 'net'; -import WebSocket from 'ws'; -import { EventEmitter } from './EventEmitter.js'; +import type { Server } from 'net'; +import WebSocket, { WebSocketServer } from 'ws'; +import { EventEmitter } from './EventEmitter.ts'; export const NAME_WEB_SOCKET_IMPORT = '/__web-dev-server__web-socket.js'; export const NAME_WEB_SOCKET_API = 'wds'; @@ -17,13 +17,13 @@ export interface Events { */ export class WebSocketsManager extends EventEmitter { public webSocketImport = NAME_WEB_SOCKET_IMPORT; - public webSocketServer: WebSocket.Server; + public webSocketServer: WebSocketServer; private openSockets = new Set(); constructor(server: Server) { super(); - this.webSocketServer = new WebSocket.Server({ + this.webSocketServer = new WebSocketServer({ noServer: true, path: `/${NAME_WEB_SOCKET_API}`, }); diff --git a/packages/dev-server-core/src/web-sockets/webSocketsPlugin.ts b/packages/dev-server-core/src/web-sockets/webSocketsPlugin.ts index ce760d4db4..bd59e78fdf 100644 --- a/packages/dev-server-core/src/web-sockets/webSocketsPlugin.ts +++ b/packages/dev-server-core/src/web-sockets/webSocketsPlugin.ts @@ -1,5 +1,5 @@ -import { Plugin } from '../plugins/Plugin.js'; -import { NAME_WEB_SOCKET_IMPORT, NAME_WEB_SOCKET_API } from './WebSocketsManager.js'; +import type { Plugin } from '../plugins/Plugin.ts'; +import { NAME_WEB_SOCKET_IMPORT, NAME_WEB_SOCKET_API } from './WebSocketsManager.ts'; import { appendToDocument, isHtmlFragment } from '@web/parse5-utils'; export const webSocketScript = ` diff --git a/packages/dev-server-core/test/helpers.ts b/packages/dev-server-core/test/helpers.ts index 398a0f9b2b..c9e826faf0 100644 --- a/packages/dev-server-core/test/helpers.ts +++ b/packages/dev-server-core/test/helpers.ts @@ -5,8 +5,8 @@ import { fetchText, expectIncludes, virtualFilesPlugin, -} from '../src/test-helpers.js'; -import { DevServerCoreConfig } from '../src/server/DevServerCoreConfig.js'; +} from '../src/test-helpers.ts'; +import { DevServerCoreConfig } from '../src/server/DevServerCoreConfig.ts'; export function createTestServer(config: Partial = {}) { return originalCreateTestServer({ diff --git a/packages/dev-server-core/test/middleware/basePathMiddleware.test.ts b/packages/dev-server-core/test/middleware/basePathMiddleware.test.ts index 4de47b14ed..ca7d509d58 100644 --- a/packages/dev-server-core/test/middleware/basePathMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/basePathMiddleware.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; -import { DevServer } from '../../src/server/DevServer.js'; -import { createTestServer } from '../helpers.js'; +import { DevServer } from '../../src/server/DevServer.ts'; +import { createTestServer } from '../helpers.ts'; describe('base path middleware', () => { describe('without a trailing /', () => { diff --git a/packages/dev-server-core/test/middleware/etagCacheMiddleware.test.ts b/packages/dev-server-core/test/middleware/etagCacheMiddleware.test.ts index 75838be21a..fb985b48a6 100644 --- a/packages/dev-server-core/test/middleware/etagCacheMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/etagCacheMiddleware.test.ts @@ -3,8 +3,8 @@ import path from 'path'; import fs from 'fs'; import { nanoid } from 'nanoid'; -import { createTestServer, timeout } from '../helpers.js'; -import { DevServer } from '../../src/server/DevServer.js'; +import { createTestServer, timeout } from '../helpers.ts'; +import { DevServer } from '../../src/server/DevServer.ts'; const fixtureDir = path.resolve(__dirname, '..', 'fixtures', 'basic'); const testFileAName = '/cached-file-a.js'; diff --git a/packages/dev-server-core/test/middleware/historyApiFallbackMiddleware.test.ts b/packages/dev-server-core/test/middleware/historyApiFallbackMiddleware.test.ts index ba511b2f2f..ede99416bb 100644 --- a/packages/dev-server-core/test/middleware/historyApiFallbackMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/historyApiFallbackMiddleware.test.ts @@ -1,8 +1,8 @@ import { expect } from 'chai'; import path from 'path'; -import { createTestServer } from '../helpers.js'; -import { DevServer } from '../../src/server/DevServer.js'; +import { createTestServer } from '../helpers.ts'; +import { DevServer } from '../../src/server/DevServer.ts'; describe('history api fallback middleware', () => { describe('index in root', () => { diff --git a/packages/dev-server-core/test/middleware/pluginFileParsedMiddleware.test.ts b/packages/dev-server-core/test/middleware/pluginFileParsedMiddleware.test.ts index 844287d97a..d1b4bdaf17 100644 --- a/packages/dev-server-core/test/middleware/pluginFileParsedMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/pluginFileParsedMiddleware.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { Context } from 'koa'; -import { createTestServer } from '../helpers.js'; +import { createTestServer } from '../helpers.ts'; describe('plugin-file-parsed middleware', () => { it('is called after other plugin hooks', async () => { diff --git a/packages/dev-server-core/test/middleware/pluginMimeTypeMiddleware.test.ts b/packages/dev-server-core/test/middleware/pluginMimeTypeMiddleware.test.ts index 49e7c55a5c..35649d3172 100644 --- a/packages/dev-server-core/test/middleware/pluginMimeTypeMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/pluginMimeTypeMiddleware.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import { createTestServer } from '../helpers.js'; +import { createTestServer } from '../helpers.ts'; describe('plugin-mime-type middleware', () => { it('can set the mime type of a file with a string', async () => { diff --git a/packages/dev-server-core/test/middleware/pluginServeMiddleware.test.ts b/packages/dev-server-core/test/middleware/pluginServeMiddleware.test.ts index baec7e2faf..41c1687480 100644 --- a/packages/dev-server-core/test/middleware/pluginServeMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/pluginServeMiddleware.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import { createTestServer } from '../helpers.js'; +import { createTestServer } from '../helpers.ts'; describe('plugin-serve middleware', () => { it('can serve non-existing files', async () => { diff --git a/packages/dev-server-core/test/middleware/pluginTransformMiddleware.test.ts b/packages/dev-server-core/test/middleware/pluginTransformMiddleware.test.ts index d0fc91f2b8..f807ec85c8 100644 --- a/packages/dev-server-core/test/middleware/pluginTransformMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/pluginTransformMiddleware.test.ts @@ -1,8 +1,8 @@ /* eslint-disable no-restricted-syntax, no-await-in-loop */ import { expect } from 'chai'; -import { createTestServer } from '../helpers.js'; -import { fetchText, expectIncludes } from '../../src/test-helpers.js'; +import { createTestServer } from '../helpers.ts'; +import { fetchText, expectIncludes } from '../../src/test-helpers.ts'; describe('plugin-transform middleware', () => { it('can transform a served file', async () => { diff --git a/packages/dev-server-core/test/middleware/serveFilesMiddleware.test.ts b/packages/dev-server-core/test/middleware/serveFilesMiddleware.test.ts index 453d11d2b1..39432a013a 100644 --- a/packages/dev-server-core/test/middleware/serveFilesMiddleware.test.ts +++ b/packages/dev-server-core/test/middleware/serveFilesMiddleware.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import path from 'path'; -import { createTestServer } from '../helpers.js'; +import { createTestServer } from '../helpers.ts'; describe('serveFilesMiddleware', () => { it('can serve files outside of the root directory', async () => { diff --git a/packages/dev-server-core/test/plugins/mimeTypesPlugin.test.ts b/packages/dev-server-core/test/plugins/mimeTypesPlugin.test.ts index 6411081904..88c25372af 100644 --- a/packages/dev-server-core/test/plugins/mimeTypesPlugin.test.ts +++ b/packages/dev-server-core/test/plugins/mimeTypesPlugin.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import { createTestServer } from '../helpers.js'; +import { createTestServer } from '../helpers.ts'; describe('mimeTypesPLugin', () => { it('can configure mime types for files', async () => { diff --git a/packages/dev-server-core/test/plugins/parseDynamicImport.test.ts b/packages/dev-server-core/test/plugins/parseDynamicImport.test.ts index 39b7bbb0d0..4ca285e32f 100644 --- a/packages/dev-server-core/test/plugins/parseDynamicImport.test.ts +++ b/packages/dev-server-core/test/plugins/parseDynamicImport.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { parseDynamicImport } from '../../src/plugins/parseDynamicImport.js'; +import { parseDynamicImport } from '../../src/plugins/parseDynamicImport.ts'; describe('parseDynamicImport', () => { function testParseDynamicImport(specifier: string) { diff --git a/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts b/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts index f1ce647d2c..471c1952b5 100644 --- a/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts +++ b/packages/dev-server-core/test/plugins/transformModuleImportsPlugin.test.ts @@ -1,8 +1,8 @@ import { expect } from 'chai'; -import { transformImports } from '../../src/plugins/transformModuleImportsPlugin.js'; -import type { PluginSyntaxError } from '../../src/logger/PluginSyntaxError.js'; -import { createTestServer } from '../helpers.js'; +import { transformImports } from '../../src/plugins/transformModuleImportsPlugin.ts'; +import type { PluginSyntaxError } from '../../src/logger/PluginSyntaxError.ts'; +import { createTestServer } from '../helpers.ts'; const defaultFilePath = '/root/my-file.js'; const defaultResolveImport = (src: string) => `RESOLVED__${src}`; diff --git a/packages/dev-server-core/test/server/DevServer.test.ts b/packages/dev-server-core/test/server/DevServer.test.ts index 6725579117..0d6de5a0c2 100644 --- a/packages/dev-server-core/test/server/DevServer.test.ts +++ b/packages/dev-server-core/test/server/DevServer.test.ts @@ -6,9 +6,9 @@ import { FSWatcher } from 'chokidar'; import { expect } from 'chai'; import portfinder from 'portfinder'; import { Stub, stubMethod } from 'hanbi'; -import { ServerStartParams } from '../../src/plugins/Plugin.js'; -import { DevServer } from '../../src/server/DevServer.js'; -import { createTestServer } from '../helpers.js'; +import { ServerStartParams } from '../../src/plugins/Plugin.ts'; +import { DevServer } from '../../src/server/DevServer.ts'; +import { createTestServer } from '../helpers.ts'; describe('basic', () => { let host: string; diff --git a/packages/dev-server-core/test/web-sockets/WebSocketsManager.test.ts b/packages/dev-server-core/test/web-sockets/WebSocketsManager.test.ts index 98d3d97208..808d962d41 100644 --- a/packages/dev-server-core/test/web-sockets/WebSocketsManager.test.ts +++ b/packages/dev-server-core/test/web-sockets/WebSocketsManager.test.ts @@ -1,8 +1,8 @@ import { expect } from 'chai'; import WebSocket from 'ws'; -import { NAME_WEB_SOCKET_API } from '../../src/web-sockets/WebSocketsManager.js'; +import { NAME_WEB_SOCKET_API } from '../../src/web-sockets/WebSocketsManager.ts'; -import { createTestServer } from '../helpers.js'; +import { createTestServer } from '../helpers.ts'; function waitFor(fn: (resolve: () => void) => void, msg: string) { return new Promise((resolve, reject) => { diff --git a/packages/dev-server-core/test/web-sockets/webSocketsPlugin.test.ts b/packages/dev-server-core/test/web-sockets/webSocketsPlugin.test.ts index 8c59fda77b..c08f0d844a 100644 --- a/packages/dev-server-core/test/web-sockets/webSocketsPlugin.test.ts +++ b/packages/dev-server-core/test/web-sockets/webSocketsPlugin.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; -import { createTestServer } from '../helpers.js'; -import { webSocketScript } from '../../src/web-sockets/webSocketsPlugin.js'; +import { createTestServer } from '../helpers.ts'; +import { webSocketScript } from '../../src/web-sockets/webSocketsPlugin.ts'; describe('webSocketsPlugin', () => { it('injects an event stream script if a plugin has inject set and event stream is enabled', async () => { diff --git a/packages/dev-server-core/tsconfig.json b/packages/dev-server-core/tsconfig.json index 4b7a7f52c4..f8a792dc54 100644 --- a/packages/dev-server-core/tsconfig.json +++ b/packages/dev-server-core/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -22,5 +21,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-esbuild/package.json b/packages/dev-server-esbuild/package.json index cfc0a07751..6469f156cb 100644 --- a/packages/dev-server-esbuild/package.json +++ b/packages/dev-server-esbuild/package.json @@ -1,5 +1,6 @@ { "name": "@web/dev-server-esbuild", + "type": "module", "version": "1.0.5", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -34,7 +34,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], @@ -53,7 +52,7 @@ "dependencies": { "@mdn/browser-compat-data": "^4.0.0", "@web/dev-server-core": "^0.7.4", - "esbuild": "^0.27.0", + "esbuild": "^0.25.0", "parse5": "^6.0.1", "ua-parser-js": "^1.0.33" }, diff --git a/packages/dev-server-esbuild/src/EsbuildPlugin.ts b/packages/dev-server-esbuild/src/EsbuildPlugin.ts index 5143101bc6..73c834b4b7 100644 --- a/packages/dev-server-esbuild/src/EsbuildPlugin.ts +++ b/packages/dev-server-esbuild/src/EsbuildPlugin.ts @@ -19,7 +19,7 @@ import { } from '@web/dev-server-core/dist/dom5'; import { parse as parseHtml, serialize as serializeHtml } from 'parse5'; -import { getEsbuildTarget } from './getEsbuildTarget.js'; +import { getEsbuildTarget } from './getEsbuildTarget.ts'; const filteredWarnings = ['Unsupported source map comment']; diff --git a/packages/dev-server-esbuild/src/esbuildPluginFactory.ts b/packages/dev-server-esbuild/src/esbuildPluginFactory.ts index 992a54871a..306c8f9316 100644 --- a/packages/dev-server-esbuild/src/esbuildPluginFactory.ts +++ b/packages/dev-server-esbuild/src/esbuildPluginFactory.ts @@ -1,6 +1,6 @@ import { Plugin } from '@web/dev-server-core'; import { Loader } from 'esbuild'; -import { EsbuildPlugin } from './EsbuildPlugin.js'; +import { EsbuildPlugin } from './EsbuildPlugin.ts'; export interface EsBuildPluginArgs { target?: string | string[]; diff --git a/packages/dev-server-esbuild/src/getEsbuildTarget.ts b/packages/dev-server-esbuild/src/getEsbuildTarget.ts index e06354a59a..bce9dad1c6 100644 --- a/packages/dev-server-esbuild/src/getEsbuildTarget.ts +++ b/packages/dev-server-esbuild/src/getEsbuildTarget.ts @@ -1,11 +1,11 @@ -import { parseUserAgent } from './parseUserAgent.js'; +import { parseUserAgent } from './parseUserAgent.ts'; import { TARGET_LATEST_MODERN, TARGET_LOWEST_ESM_SUPPORT, Browser, isLatestModernBrowser, isLatestSafari, -} from './browser-targets.js'; +} from './browser-targets.ts'; const cache = new Map(); diff --git a/packages/dev-server-esbuild/src/index.ts b/packages/dev-server-esbuild/src/index.ts index 414f2159ed..173f7764a4 100644 --- a/packages/dev-server-esbuild/src/index.ts +++ b/packages/dev-server-esbuild/src/index.ts @@ -1 +1 @@ -export { esbuildPlugin } from './esbuildPluginFactory.js'; +export { esbuildPlugin } from './esbuildPluginFactory.ts'; diff --git a/packages/dev-server-esbuild/test/banner-footer.test.ts b/packages/dev-server-esbuild/test/banner-footer.test.ts index d80849884f..5d1a062ded 100644 --- a/packages/dev-server-esbuild/test/banner-footer.test.ts +++ b/packages/dev-server-esbuild/test/banner-footer.test.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { createTestServer } from '@web/dev-server-core/test-helpers'; import { expectIncludes } from '@web/dev-server-core/test-helpers'; -import { esbuildPlugin } from '../src/index.js'; +import { esbuildPlugin } from '../src/index.ts'; describe('esbuildPlugin banner/footers', function () { this.timeout(5000); diff --git a/packages/dev-server-esbuild/test/browser-targets.test.ts b/packages/dev-server-esbuild/test/browser-targets.test.ts index 57ab9d857a..ee636288cf 100644 --- a/packages/dev-server-esbuild/test/browser-targets.test.ts +++ b/packages/dev-server-esbuild/test/browser-targets.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import { browsers } from '@mdn/browser-compat-data'; -import { isLatestModernBrowser, getLatestStableMajor } from '../src/browser-targets.js'; +import { isLatestModernBrowser, getLatestStableMajor } from '../src/browser-targets.ts'; describe('isLatestModernBrowser', () => { it('returns true for latest Chrome', async () => { diff --git a/packages/dev-server-esbuild/test/json.test.ts b/packages/dev-server-esbuild/test/json.test.ts index 0d98282a95..c52853459e 100644 --- a/packages/dev-server-esbuild/test/json.test.ts +++ b/packages/dev-server-esbuild/test/json.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { expectIncludes, createTestServer } from '@web/dev-server-core/test-helpers'; -import { esbuildPlugin } from '../src/index.js'; +import { esbuildPlugin } from '../src/index.ts'; describe('esbuildPlugin JSON', function () { it('transforms .json files', async () => { diff --git a/packages/dev-server-esbuild/test/jsx.test.ts b/packages/dev-server-esbuild/test/jsx.test.ts index 8f94ba45b6..d449dc3721 100644 --- a/packages/dev-server-esbuild/test/jsx.test.ts +++ b/packages/dev-server-esbuild/test/jsx.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { expectIncludes, createTestServer } from '@web/dev-server-core/test-helpers'; -import { esbuildPlugin } from '../src/index.js'; +import { esbuildPlugin } from '../src/index.ts'; describe('esbuildPlugin JSX', function () { it('transforms .jsx files', async () => { diff --git a/packages/dev-server-esbuild/test/target.test.ts b/packages/dev-server-esbuild/test/target.test.ts index d2e9ffbd36..11f4d5f026 100644 --- a/packages/dev-server-esbuild/test/target.test.ts +++ b/packages/dev-server-esbuild/test/target.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { createTestServer, expectIncludes } from '@web/dev-server-core/test-helpers'; -import { esbuildPlugin } from '../src/index.js'; +import { esbuildPlugin } from '../src/index.ts'; const modernJs = ` class MyClass { diff --git a/packages/dev-server-esbuild/test/ts.test.ts b/packages/dev-server-esbuild/test/ts.test.ts index ce2ec0295e..9a2cf477e5 100644 --- a/packages/dev-server-esbuild/test/ts.test.ts +++ b/packages/dev-server-esbuild/test/ts.test.ts @@ -5,7 +5,7 @@ import { expectIncludes, expectNotIncludes } from '@web/dev-server-core/test-hel import { Plugin as RollupPlugin } from 'rollup'; import { fromRollup } from '@web/dev-server-rollup'; -import { esbuildPlugin } from '../src/index.js'; +import { esbuildPlugin } from '../src/index.ts'; describe('esbuildPlugin TS', function () { this.timeout(5000); diff --git a/packages/dev-server-esbuild/test/tsx.test.ts b/packages/dev-server-esbuild/test/tsx.test.ts index 595e5e3cca..86c8b2d6bf 100644 --- a/packages/dev-server-esbuild/test/tsx.test.ts +++ b/packages/dev-server-esbuild/test/tsx.test.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { createTestServer } from '@web/dev-server-core/test-helpers'; import { expectIncludes, expectNotIncludes } from '@web/dev-server-core/test-helpers'; -import { esbuildPlugin } from '../src/index.js'; +import { esbuildPlugin } from '../src/index.ts'; describe('esbuildPlugin TSX', function () { this.timeout(5000); diff --git a/packages/dev-server-esbuild/tsconfig.json b/packages/dev-server-esbuild/tsconfig.json index 2fdcd256ec..3069287bf9 100644 --- a/packages/dev-server-esbuild/tsconfig.json +++ b/packages/dev-server-esbuild/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -43,5 +42,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-hmr/package.json b/packages/dev-server-hmr/package.json index dc918c965b..3ea28ebd66 100644 --- a/packages/dev-server-hmr/package.json +++ b/packages/dev-server-hmr/package.json @@ -1,5 +1,6 @@ { "name": "@web/dev-server-hmr", + "type": "module", "version": "0.4.1", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -34,7 +34,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "scripts", "src" diff --git a/packages/dev-server-hmr/src/hmrPluginFactory.ts b/packages/dev-server-hmr/src/hmrPluginFactory.ts index 79a79d708d..ffa8f168c6 100644 --- a/packages/dev-server-hmr/src/hmrPluginFactory.ts +++ b/packages/dev-server-hmr/src/hmrPluginFactory.ts @@ -1,5 +1,5 @@ import type { Plugin } from '@web/dev-server-core'; -import { HmrPlugin } from './HmrPlugin.js'; +import { HmrPlugin } from './HmrPlugin.ts'; export function hmrPlugin(): Plugin { return new HmrPlugin(); diff --git a/packages/dev-server-hmr/src/index.ts b/packages/dev-server-hmr/src/index.ts index 11770315f4..7b7104a9c8 100644 --- a/packages/dev-server-hmr/src/index.ts +++ b/packages/dev-server-hmr/src/index.ts @@ -1 +1 @@ -export { hmrPlugin } from './hmrPluginFactory.js'; +export { hmrPlugin } from './hmrPluginFactory.ts'; diff --git a/packages/dev-server-hmr/test/HmrPlugin.test.ts b/packages/dev-server-hmr/test/HmrPlugin.test.ts index dd5e3c3763..b9c9af77b9 100644 --- a/packages/dev-server-hmr/test/HmrPlugin.test.ts +++ b/packages/dev-server-hmr/test/HmrPlugin.test.ts @@ -3,9 +3,9 @@ import { stubMethod, restore as restoreStubs } from 'hanbi'; import { createTestServer, fetchText, expectIncludes } from '@web/dev-server-core/test-helpers'; import { posix as pathUtil } from 'path'; -import { hmrPlugin } from '../src/index.js'; -import { NAME_HMR_CLIENT_IMPORT } from '../src/HmrPlugin.js'; -import { mockFile, mockFiles } from './utils.js'; +import { hmrPlugin } from '../src/index.ts'; +import { NAME_HMR_CLIENT_IMPORT } from '../src/HmrPlugin.ts'; +import { mockFile, mockFiles } from './utils.ts'; describe('HmrPlugin', () => { afterEach(async () => { diff --git a/packages/dev-server-hmr/test/browser.test.ts b/packages/dev-server-hmr/test/browser.test.ts index 1f3b62ca33..a6386a004a 100644 --- a/packages/dev-server-hmr/test/browser.test.ts +++ b/packages/dev-server-hmr/test/browser.test.ts @@ -4,8 +4,8 @@ import { createTestServer, expectIncludes } from '@web/dev-server-core/test-help import { Browser, HTTPResponse, launch as launchPuppeteer, Page } from 'puppeteer'; import { posix as pathUtil } from 'path'; -import { hmrPlugin } from '../src/index.js'; -import { mockFiles } from './utils.js'; +import { hmrPlugin } from '../src/index.ts'; +import { mockFiles } from './utils.ts'; function trackErrors(page: Page) { const errors: any[] = []; diff --git a/packages/dev-server-hmr/tsconfig.json b/packages/dev-server-hmr/tsconfig.json index 7ecf08209e..161f402056 100644 --- a/packages/dev-server-hmr/tsconfig.json +++ b/packages/dev-server-hmr/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -25,5 +24,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-import-maps/package.json b/packages/dev-server-import-maps/package.json index 0fd9123ba9..25483a08bd 100644 --- a/packages/dev-server-import-maps/package.json +++ b/packages/dev-server-import-maps/package.json @@ -1,5 +1,6 @@ { "name": "@web/dev-server-import-maps", + "type": "module", "version": "0.2.1", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -33,7 +33,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], @@ -51,7 +50,6 @@ ], "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", diff --git a/packages/dev-server-import-maps/src/importMapsPlugin.ts b/packages/dev-server-import-maps/src/importMapsPlugin.ts index 11376b8f8e..3a8c1f19dc 100644 --- a/packages/dev-server-import-maps/src/importMapsPlugin.ts +++ b/packages/dev-server-import-maps/src/importMapsPlugin.ts @@ -17,7 +17,7 @@ import { shouldInject, mergeImportMaps, getDocumentBaseUrl, -} from './utils.js'; +} from './utils.ts'; import { ImportMap } from '@import-maps/resolve'; import { createElement, diff --git a/packages/dev-server-import-maps/src/index.ts b/packages/dev-server-import-maps/src/index.ts index fcfdc68a14..aea6e41f7b 100644 --- a/packages/dev-server-import-maps/src/index.ts +++ b/packages/dev-server-import-maps/src/index.ts @@ -1 +1 @@ -export { importMapsPlugin } from './importMapsPlugin.js'; +export { importMapsPlugin } from './importMapsPlugin.ts'; diff --git a/packages/dev-server-import-maps/src/utils.ts b/packages/dev-server-import-maps/src/utils.ts index f86991aa68..f0b03fb6db 100644 --- a/packages/dev-server-import-maps/src/utils.ts +++ b/packages/dev-server-import-maps/src/utils.ts @@ -4,7 +4,7 @@ import { Element as ElementAst } from 'parse5'; import { getAttribute } from '@web/parse5-utils'; import { ParsedImportMap } from '@import-maps/resolve'; -import { NormalizedInjectSetting, InjectSetting } from './importMapsPlugin.js'; +import { NormalizedInjectSetting, InjectSetting } from './importMapsPlugin.ts'; export const IMPORT_MAP_PARAM = 'wds-import-map'; diff --git a/packages/dev-server-import-maps/test/injection.test.ts b/packages/dev-server-import-maps/test/injection.test.ts index b55c2a42b1..1b32041f2a 100644 --- a/packages/dev-server-import-maps/test/injection.test.ts +++ b/packages/dev-server-import-maps/test/injection.test.ts @@ -1,7 +1,7 @@ import { createTestServer, expectNotIncludes } from '@web/dev-server-core/test-helpers'; import { fetchText, expectIncludes, virtualFilesPlugin } from '@web/dev-server-core/test-helpers'; -import { importMapsPlugin } from '../src/importMapsPlugin.js'; +import { importMapsPlugin } from '../src/importMapsPlugin.ts'; it('can inject an import map into any page', async () => { const { server, host } = await createTestServer({ diff --git a/packages/dev-server-import-maps/test/resolving.test.ts b/packages/dev-server-import-maps/test/resolving.test.ts index bc3368a78a..91ca73ca87 100644 --- a/packages/dev-server-import-maps/test/resolving.test.ts +++ b/packages/dev-server-import-maps/test/resolving.test.ts @@ -4,8 +4,8 @@ import { expect } from 'chai'; import { spy } from 'hanbi'; import path from 'path'; -import { importMapsPlugin } from '../src/importMapsPlugin.js'; -import { IMPORT_MAP_PARAM } from '../src/utils.js'; +import { importMapsPlugin } from '../src/importMapsPlugin.ts'; +import { IMPORT_MAP_PARAM } from '../src/utils.ts'; function createHtml(importMap: Record) { return ` diff --git a/packages/dev-server-import-maps/tsconfig.json b/packages/dev-server-import-maps/tsconfig.json index 4dc58f4f22..9ed6ecee9e 100644 --- a/packages/dev-server-import-maps/tsconfig.json +++ b/packages/dev-server-import-maps/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -73,5 +72,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-legacy/package.json b/packages/dev-server-legacy/package.json index 2edb604c8e..a58ba8794c 100644 --- a/packages/dev-server-legacy/package.json +++ b/packages/dev-server-legacy/package.json @@ -1,5 +1,6 @@ { "name": "@web/dev-server-legacy", + "type": "module", "version": "2.1.1", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -33,7 +33,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], diff --git a/packages/dev-server-legacy/src/babelTransform.ts b/packages/dev-server-legacy/src/babelTransform.ts index 069e2e1aae..606286b212 100644 --- a/packages/dev-server-legacy/src/babelTransform.ts +++ b/packages/dev-server-legacy/src/babelTransform.ts @@ -1,4 +1,5 @@ -import { transformAsync, TransformOptions } from '@babel/core'; +import { transformAsync } from '@babel/core'; +import type { TransformOptions } from '@babel/core'; export const es5Config: TransformOptions = { caller: { diff --git a/packages/dev-server-legacy/src/index.ts b/packages/dev-server-legacy/src/index.ts index a359009b1c..30ba767050 100644 --- a/packages/dev-server-legacy/src/index.ts +++ b/packages/dev-server-legacy/src/index.ts @@ -1 +1 @@ -export { legacyPlugin } from './legacyPlugin.js'; +export { legacyPlugin } from './legacyPlugin.ts'; diff --git a/packages/dev-server-legacy/src/injectPolyfillsLoader.ts b/packages/dev-server-legacy/src/injectPolyfillsLoader.ts index 58539f3d82..6cd93f435c 100644 --- a/packages/dev-server-legacy/src/injectPolyfillsLoader.ts +++ b/packages/dev-server-legacy/src/injectPolyfillsLoader.ts @@ -9,8 +9,8 @@ import { GeneratedFile, File, } from '@web/polyfills-loader'; -import { PARAM_TRANSFORM_SYSTEMJS } from './constants.js'; -import { findJsScripts } from './findJsScripts.js'; +import { PARAM_TRANSFORM_SYSTEMJS } from './constants.ts'; +import { findJsScripts } from './findJsScripts.ts'; function findScripts(indexUrl: string, documentAst: DocumentAst) { const scriptNodes = findJsScripts(documentAst); diff --git a/packages/dev-server-legacy/src/legacyPlugin.ts b/packages/dev-server-legacy/src/legacyPlugin.ts index 16ebff9c68..10ae1ced06 100644 --- a/packages/dev-server-legacy/src/legacyPlugin.ts +++ b/packages/dev-server-legacy/src/legacyPlugin.ts @@ -1,10 +1,10 @@ import { Plugin, Logger, getRequestFilePath, isInlineScriptRequest } from '@web/dev-server-core'; import { GeneratedFile, PolyfillsConfig } from '@web/polyfills-loader'; import path from 'path'; -import { isLegacyBrowser } from './isLegacyBrowser.js'; -import { babelTransform, es5Config, systemJsConfig } from './babelTransform.js'; -import { injectPolyfillsLoader } from './injectPolyfillsLoader.js'; -import { PARAM_TRANSFORM_SYSTEMJS } from './constants.js'; +import { isLegacyBrowser } from './isLegacyBrowser.ts'; +import { babelTransform, es5Config, systemJsConfig } from './babelTransform.ts'; +import { injectPolyfillsLoader } from './injectPolyfillsLoader.ts'; +import { PARAM_TRANSFORM_SYSTEMJS } from './constants.ts'; interface inlineScripts { lastModified: string; diff --git a/packages/dev-server-legacy/test/transform-html.test.ts b/packages/dev-server-legacy/test/transform-html.test.ts index 2fdd199512..1250362dc3 100644 --- a/packages/dev-server-legacy/test/transform-html.test.ts +++ b/packages/dev-server-legacy/test/transform-html.test.ts @@ -2,8 +2,8 @@ import { expect } from 'chai'; import { createTestServer } from '@web/dev-server-core/test-helpers'; import { fetchText, expectIncludes } from '@web/dev-server-core/test-helpers'; -import { legacyPlugin } from '../src/legacyPlugin.js'; -import { modernUserAgents, legacyUserAgents } from './userAgents.js'; +import { legacyPlugin } from '../src/legacyPlugin.ts'; +import { modernUserAgents, legacyUserAgents } from './userAgents.ts'; const htmlBody = ` diff --git a/packages/dev-server-legacy/test/transform-js.test.ts b/packages/dev-server-legacy/test/transform-js.test.ts index fd035680eb..148c2f24c3 100644 --- a/packages/dev-server-legacy/test/transform-js.test.ts +++ b/packages/dev-server-legacy/test/transform-js.test.ts @@ -2,8 +2,8 @@ import { expect } from 'chai'; import { createTestServer } from '@web/dev-server-core/test-helpers'; import { fetchText, expectIncludes, expectNotIncludes } from '@web/dev-server-core/test-helpers'; -import { legacyPlugin } from '../src/legacyPlugin.js'; -import { modernUserAgents, legacyUserAgents } from './userAgents.js'; +import { legacyPlugin } from '../src/legacyPlugin.ts'; +import { modernUserAgents, legacyUserAgents } from './userAgents.ts'; const modernCode = ` class Foo { diff --git a/packages/dev-server-legacy/tsconfig.json b/packages/dev-server-legacy/tsconfig.json index 8c75f7b5bd..42aab557b2 100644 --- a/packages/dev-server-legacy/tsconfig.json +++ b/packages/dev-server-legacy/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -28,5 +27,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-polyfill/tsconfig.json b/packages/dev-server-polyfill/tsconfig.json index cd2d7b29d7..3ee96aa8cf 100644 --- a/packages/dev-server-polyfill/tsconfig.json +++ b/packages/dev-server-polyfill/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "ESNext", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -52,5 +51,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-rollup/package.json b/packages/dev-server-rollup/package.json index 0b5322d5da..b2ecac5705 100644 --- a/packages/dev-server-rollup/package.json +++ b/packages/dev-server-rollup/package.json @@ -1,5 +1,6 @@ { "name": "@web/dev-server-rollup", + "type": "module", "version": "0.6.4", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "test:node": "mocha \"test/node/**/*.test.ts\" --require ts-node/register --exit --reporter dot", @@ -31,7 +31,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], @@ -50,7 +49,7 @@ "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.2", - "nanocolors": "^0.2.1", + "nanocolors": "^0.2.13", "parse5": "^6.0.1", "rollup": "^4.4.0", "whatwg-url": "^14.0.0" @@ -61,12 +60,10 @@ "@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", "chai": "^4.2.0", - "mocha": "^10.8.2", "postcss": "^8.4.31", "rollup-plugin-postcss": "^4.0.2" } diff --git a/packages/dev-server-rollup/src/fromRollup.ts b/packages/dev-server-rollup/src/fromRollup.ts index 5263566d5e..1f3014c6fa 100644 --- a/packages/dev-server-rollup/src/fromRollup.ts +++ b/packages/dev-server-rollup/src/fromRollup.ts @@ -1,5 +1,5 @@ import { InputOptions, Plugin as RollupPlugin } from 'rollup'; -import { rollupAdapter } from './rollupAdapter.js'; +import { rollupAdapter } from './rollupAdapter.ts'; type FnArgs = readonly unknown[]; type RollupPluginFn = (...args: T) => RollupPlugin; diff --git a/packages/dev-server-rollup/src/index.ts b/packages/dev-server-rollup/src/index.ts index 5b59fdbbea..b911780291 100644 --- a/packages/dev-server-rollup/src/index.ts +++ b/packages/dev-server-rollup/src/index.ts @@ -1,4 +1,4 @@ export { type RollupNodeResolveOptions, nodeResolve } from '@rollup/plugin-node-resolve'; -export { fromRollup } from './fromRollup.js'; -export { rollupAdapter } from './rollupAdapter.js'; -export { rollupBundlePlugin } from './rollupBundlePlugin.js'; +export { fromRollup } from './fromRollup.ts'; +export { rollupAdapter } from './rollupAdapter.ts'; +export { rollupBundlePlugin } from './rollupBundlePlugin.ts'; \ No newline at end of file diff --git a/packages/dev-server-rollup/src/rollupAdapter.ts b/packages/dev-server-rollup/src/rollupAdapter.ts index 94d2b95812..60f9a637a9 100644 --- a/packages/dev-server-rollup/src/rollupAdapter.ts +++ b/packages/dev-server-rollup/src/rollupAdapter.ts @@ -21,9 +21,9 @@ import { CustomPluginOptions, Plugin as RollupPlugin, TransformPluginContext } f import { InputOptions } from 'rollup'; import { red, cyan } from 'nanocolors'; -import { toBrowserPath, isAbsoluteFilePath, isOutsideRootDir } from './utils.js'; -import { createRollupPluginContextAdapter } from './createRollupPluginContextAdapter.js'; -import { createRollupPluginContexts, RollupPluginContexts } from './createRollupPluginContexts.js'; +import { toBrowserPath, isAbsoluteFilePath, isOutsideRootDir } from './utils.ts'; +import { createRollupPluginContextAdapter } from './createRollupPluginContextAdapter.ts'; +import { createRollupPluginContexts, RollupPluginContexts } from './createRollupPluginContexts.ts'; const NULL_BYTE_PARAM = 'web-dev-server-rollup-null-byte'; const VIRTUAL_FILE_PREFIX = '/__web-dev-server__/rollup'; @@ -34,7 +34,7 @@ const OUTSIDE_ROOT_REGEXP = /\/__wds-outside-root__\/([0-9]+)\/(.*)/; * Wraps rollup error in a custom error for web dev server. */ function wrapRollupError(filePath: string, context: Context, error: any) { - if (typeof error == null || typeof error !== 'object') { + if (error == null || typeof error !== 'object') { return error; } diff --git a/packages/dev-server-rollup/test/node/plugins/alias.test.ts b/packages/dev-server-rollup/test/node/plugins/alias.test.ts index 70e4509ccd..1a9bde66ed 100644 --- a/packages/dev-server-rollup/test/node/plugins/alias.test.ts +++ b/packages/dev-server-rollup/test/node/plugins/alias.test.ts @@ -1,7 +1,7 @@ import rollupAlias from '@rollup/plugin-alias'; -import { createTestServer, fetchText, expectIncludes } from '../test-helpers.js'; -import { fromRollup } from '../../../src/fromRollup.js'; +import { createTestServer, fetchText, expectIncludes } from '../test-helpers.ts'; +import { fromRollup } from '../../../src/fromRollup.ts'; const alias = fromRollup(rollupAlias); @@ -19,7 +19,7 @@ describe('@rollup/plugin-alias', () => { try { const text = await fetchText(`${host}/app.js`); - expectIncludes(text, "import moduleA from './module-a-stub.js'"); + expectIncludes(text, "import moduleA from './module-a-stub.ts'"); } finally { server.stop(); } diff --git a/packages/dev-server-rollup/test/node/plugins/babel.test.ts b/packages/dev-server-rollup/test/node/plugins/babel.test.ts index 0dbf5d9b60..0b60336da0 100644 --- a/packages/dev-server-rollup/test/node/plugins/babel.test.ts +++ b/packages/dev-server-rollup/test/node/plugins/babel.test.ts @@ -1,8 +1,8 @@ /// import rollupBabel from '@rollup/plugin-babel'; -import { createTestServer, fetchText, expectIncludes } from '../test-helpers.js'; -import { fromRollup } from '../../../src/index.js'; +import { createTestServer, fetchText, expectIncludes } from '../test-helpers.ts'; +import { fromRollup } from '../../../src/index.ts'; const babel = fromRollup(rollupBabel); diff --git a/packages/dev-server-rollup/test/node/plugins/commonjs.test.ts b/packages/dev-server-rollup/test/node/plugins/commonjs.test.ts index 25f29d7595..20c4942ccc 100644 --- a/packages/dev-server-rollup/test/node/plugins/commonjs.test.ts +++ b/packages/dev-server-rollup/test/node/plugins/commonjs.test.ts @@ -4,8 +4,8 @@ import { resolve } from 'path'; import { chromeLauncher } from '@web/test-runner-chrome'; import * as path from 'path'; -import { createTestServer, fetchText, expectIncludes } from '../test-helpers.js'; -import { fromRollup } from '../../../src/index.js'; +import { createTestServer, fetchText, expectIncludes } from '../test-helpers.ts'; +import { fromRollup } from '../../../src/index.ts'; import { nodeResolvePlugin } from '@web/dev-server'; const commonjs = fromRollup(rollupCommonjs); diff --git a/packages/dev-server-rollup/test/node/plugins/node-resolve.test.ts b/packages/dev-server-rollup/test/node/plugins/node-resolve.test.ts index 2c7912987e..a58179690e 100644 --- a/packages/dev-server-rollup/test/node/plugins/node-resolve.test.ts +++ b/packages/dev-server-rollup/test/node/plugins/node-resolve.test.ts @@ -2,8 +2,8 @@ import path from 'path'; import rollupNodeResolve from '@rollup/plugin-node-resolve'; import rollupCommonjs from '@rollup/plugin-commonjs'; -import { createTestServer, fetchText, expectIncludes } from '../test-helpers.js'; -import { fromRollup } from '../../../src/index.js'; +import { createTestServer, fetchText, expectIncludes } from '../test-helpers.ts'; +import { fromRollup } from '../../../src/index.ts'; import { expect } from 'chai'; const nodeResolve = fromRollup(rollupNodeResolve, {}, { throwOnUnresolvedImport: true }); @@ -17,7 +17,7 @@ describe('@rollup/plugin-node-resolve', () => { try { const text = await fetchText(`${host}/app.js`); - expectIncludes(text, "import moduleA from './node_modules/module-a/index.js'"); + expectIncludes(text, "import moduleA from './node_modules/module-a/index.ts'"); } finally { server.stop(); } diff --git a/packages/dev-server-rollup/test/node/plugins/postcss.test.ts b/packages/dev-server-rollup/test/node/plugins/postcss.test.ts index 38f1f237c4..516b4df0b3 100644 --- a/packages/dev-server-rollup/test/node/plugins/postcss.test.ts +++ b/packages/dev-server-rollup/test/node/plugins/postcss.test.ts @@ -4,8 +4,8 @@ import { chromeLauncher } from '@web/test-runner-chrome'; import { runTests } from '@web/test-runner-core/test-helpers'; import { resolve } from 'path'; -import { createTestServer, fetchText, expectIncludes } from '../test-helpers.js'; -import { fromRollup } from '../../../src/index.js'; +import { createTestServer, fetchText, expectIncludes } from '../test-helpers.ts'; +import { fromRollup } from '../../../src/index.ts'; const postcss = fromRollup(rollupPostcss); @@ -49,7 +49,7 @@ html { expectIncludes(text, 'export default'); expectIncludes( text, - "import styleInject from './node_modules/style-inject/dist/style-inject.es.js';", + "import styleInject from './node_modules/style-inject/dist/style-inject.es.ts';", ); expectIncludes(text, 'styleInject(css_248z);'); } finally { diff --git a/packages/dev-server-rollup/test/node/plugins/replace.test.ts b/packages/dev-server-rollup/test/node/plugins/replace.test.ts index 83a8b723a4..6bacde59ee 100644 --- a/packages/dev-server-rollup/test/node/plugins/replace.test.ts +++ b/packages/dev-server-rollup/test/node/plugins/replace.test.ts @@ -1,7 +1,7 @@ import rollupReplace from '@rollup/plugin-replace'; -import { createTestServer, fetchText, expectIncludes } from '../test-helpers.js'; -import { fromRollup } from '../../../src/index.js'; +import { createTestServer, fetchText, expectIncludes } from '../test-helpers.ts'; +import { fromRollup } from '../../../src/index.ts'; const replace = fromRollup(rollupReplace as any); diff --git a/packages/dev-server-rollup/test/node/rollupBundlePlugin.test.ts b/packages/dev-server-rollup/test/node/rollupBundlePlugin.test.ts index 658812a3aa..4554bd7c14 100644 --- a/packages/dev-server-rollup/test/node/rollupBundlePlugin.test.ts +++ b/packages/dev-server-rollup/test/node/rollupBundlePlugin.test.ts @@ -1,6 +1,6 @@ -import { rollupBundlePlugin } from '../../src/rollupBundlePlugin.js'; +import { rollupBundlePlugin } from '../../src/rollupBundlePlugin.ts'; import path from 'path'; -import { createTestServer, fetchText, expectIncludes } from './test-helpers.js'; +import { createTestServer, fetchText, expectIncludes } from './test-helpers.ts'; describe('rollupBundlePlugin', () => { it('can bundle a single entrypoint', async () => { @@ -47,17 +47,17 @@ describe('rollupBundlePlugin', () => { try { const textA1 = await fetchText(`${host}/a1.js`); - expectIncludes(textA1, "import { b as bc, d } from './__rollup-generated__d.js';"); + expectIncludes(textA1, "import { b as bc, d } from './__rollup-generated__d.ts';"); expectIncludes(textA1, 'var a1 = `a ${bc} ${d}`;'); expectIncludes(textA1, 'export { a1 as default };'); const textA2 = await fetchText(`${host}/a2.js`); - expectIncludes(textA2, "import { b as bc, d } from './__rollup-generated__d.js';"); + expectIncludes(textA2, "import { b as bc, d } from './__rollup-generated__d.ts';"); expectIncludes(textA2, 'var a2 = `a ${bc} ${d}`;'); expectIncludes(textA2, 'export { a2 as default };'); const textA3 = await fetchText(`${host}/a3.js`); - expectIncludes(textA3, "import { b as bc, d } from './__rollup-generated__d.js';"); + expectIncludes(textA3, "import { b as bc, d } from './__rollup-generated__d.ts';"); expectIncludes(textA3, 'var a3 = `a ${bc} ${d}`;'); expectIncludes(textA3, 'export { a3 as default };'); @@ -85,7 +85,7 @@ describe('rollupBundlePlugin', () => { try { const text = await fetchText(`${host}/not-bundled.js`); - expectIncludes(text, "import a from './a.js';"); + expectIncludes(text, "import a from './a.ts';"); expectIncludes(text, 'export default `not bundled ${a}`;'); } finally { server.stop(); diff --git a/packages/dev-server-rollup/test/node/unit.test.ts b/packages/dev-server-rollup/test/node/unit.test.ts index 073b2ab67f..df2fed815f 100644 --- a/packages/dev-server-rollup/test/node/unit.test.ts +++ b/packages/dev-server-rollup/test/node/unit.test.ts @@ -2,8 +2,8 @@ import { Plugin as RollupPlugin, AstNode } from 'rollup'; import { expect } from 'chai'; import path from 'path'; -import { createTestServer, fetchText, expectIncludes } from './test-helpers.js'; -import { fromRollup } from '../../src/index.js'; +import { createTestServer, fetchText, expectIncludes } from './test-helpers.ts'; +import { fromRollup } from '../../src/index.ts'; describe('@web/dev-server-rollup', () => { describe('resolveId', () => { @@ -77,7 +77,7 @@ describe('@web/dev-server-rollup', () => { try { const text = await fetchText(`${host}/app.js`); - expectIncludes(text, "import moduleA from './src/foo.js'"); + expectIncludes(text, "import moduleA from './src/foo.ts'"); } finally { server.stop(); } diff --git a/packages/dev-server-rollup/tsconfig.json b/packages/dev-server-rollup/tsconfig.json index 9006f902a4..5c2444925b 100644 --- a/packages/dev-server-rollup/tsconfig.json +++ b/packages/dev-server-rollup/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -40,5 +39,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/dev-server-storybook/src/build/build.ts b/packages/dev-server-storybook/src/build/build.ts index d83478d201..5330636961 100644 --- a/packages/dev-server-storybook/src/build/build.ts +++ b/packages/dev-server-storybook/src/build/build.ts @@ -1,14 +1,13 @@ -import { readStorybookConfig } from '../shared/config/readStorybookConfig.js'; -import { validatePluginConfig } from '../shared/config/validatePluginConfig.js'; - -import { createRollupConfig } from './rollup/createRollupConfig.js'; -import { buildAndWrite } from './rollup/buildAndWrite.js'; -import { createManagerHtml } from '../shared/html/createManagerHtml.js'; -import { createPreviewHtml } from '../shared/html/createPreviewHtml.js'; -import { findStories } from '../shared/stories/findStories.js'; -import { type StorybookPluginConfig } from '../shared/config/StorybookPluginConfig.js'; -import { type StorybookConfig } from '../shared/config/StorybookConfig.js'; +import { readStorybookConfig } from '../shared/config/readStorybookConfig.ts'; +import { validatePluginConfig } from '../shared/config/validatePluginConfig.ts'; +import { createRollupConfig } from './rollup/createRollupConfig.ts'; +import { buildAndWrite } from './rollup/buildAndWrite.ts'; +import { createManagerHtml } from '../shared/html/createManagerHtml.ts'; +import { createPreviewHtml } from '../shared/html/createPreviewHtml.ts'; +import { findStories } from '../shared/stories/findStories.ts'; +import { type StorybookPluginConfig } from '../shared/config/StorybookPluginConfig.ts'; +import { type StorybookConfig } from '../shared/config/StorybookConfig.ts'; interface BuildPreviewParams { type: string; storybookConfig: StorybookConfig; diff --git a/packages/dev-server-storybook/src/build/cli.ts b/packages/dev-server-storybook/src/build/cli.ts index ca951064ad..bc27cb4c10 100755 --- a/packages/dev-server-storybook/src/build/cli.ts +++ b/packages/dev-server-storybook/src/build/cli.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import commandLineArgs from 'command-line-args'; import path from 'path'; -import { build } from './build.js'; +import { build } from './build.ts'; async function main() { const args = commandLineArgs([ diff --git a/packages/dev-server-storybook/src/build/rollup/createRollupConfig.ts b/packages/dev-server-storybook/src/build/rollup/createRollupConfig.ts index 1f891d31d6..0e71d8f67c 100644 --- a/packages/dev-server-storybook/src/build/rollup/createRollupConfig.ts +++ b/packages/dev-server-storybook/src/build/rollup/createRollupConfig.ts @@ -1,21 +1,21 @@ -import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; import { type Plugin, type RollupOptions, type RollupLog } from 'rollup'; - import { nodeResolve as resolve } from '@rollup/plugin-node-resolve'; import { babel } from '@rollup/plugin-babel'; import { rollupPluginHTML as html } from '@web/rollup-plugin-html'; import { polyfillsLoader } from '@web/rollup-plugin-polyfills-loader'; import { DEFAULT_EXTENSIONS } from '@babel/core'; import terser from '@rollup/plugin-terser'; -import { mdxPlugin } from './mdxPlugin.js'; -import { mdjsPlugin } from './mdjsPlugin.js'; -import { injectExportsOrderPlugin } from './injectExportsOrderPlugin.js'; +import { mdxPlugin } from './mdxPlugin.ts'; +import { mdjsPlugin } from './mdjsPlugin.ts'; +import { injectExportsOrderPlugin } from './injectExportsOrderPlugin.ts'; -const require = createRequire(import.meta.url); +const resolveFile = (specifier: string) => fileURLToPath(import.meta.resolve(specifier)); -const prebuiltDir = require - .resolve('@web/storybook-prebuilt/package.json') - .replace('/package.json', ''); +const prebuiltDir = resolveFile('@web/storybook-prebuilt/package.json').replace( + '/package.json', + '', +); const ignoredWarnings = ['EVAL', 'THIS_IS_UNDEFINED']; @@ -62,7 +62,7 @@ export function createRollupConfig(params: CreateRollupConfigParams): RollupOpti inputSourceMap: false, presets: [ [ - require.resolve('@babel/preset-env'), + resolveFile('@babel/preset-env'), { targets: [ 'last 3 Chrome major versions', @@ -81,9 +81,9 @@ export function createRollupConfig(params: CreateRollupConfigParams): RollupOpti ], ], plugins: [ - [require.resolve('babel-plugin-bundled-import-meta'), { importStyle: 'baseURI' }], + [resolveFile('babel-plugin-bundled-import-meta'), { importStyle: 'baseURI' }], [ - require.resolve('babel-plugin-template-html-minifier'), + resolveFile('babel-plugin-template-html-minifier'), { modules: { // this is web component specific, but has no effect on other project styles diff --git a/packages/dev-server-storybook/src/build/rollup/injectExportsOrderPlugin.ts b/packages/dev-server-storybook/src/build/rollup/injectExportsOrderPlugin.ts index a2431f60a8..e60600ac6c 100644 --- a/packages/dev-server-storybook/src/build/rollup/injectExportsOrderPlugin.ts +++ b/packages/dev-server-storybook/src/build/rollup/injectExportsOrderPlugin.ts @@ -1,6 +1,5 @@ import { type Plugin } from 'rollup'; -import { injectExportsOrder } from '../../shared/stories/injectExportsOrder.js'; - +import { injectExportsOrder } from '../../shared/stories/injectExportsOrder.ts'; export function injectExportsOrderPlugin(storyFilePaths: string[]): Plugin { return { name: 'mdx', diff --git a/packages/dev-server-storybook/src/build/rollup/mdxPlugin.ts b/packages/dev-server-storybook/src/build/rollup/mdxPlugin.ts index 951e7d4639..b1a524854e 100644 --- a/packages/dev-server-storybook/src/build/rollup/mdxPlugin.ts +++ b/packages/dev-server-storybook/src/build/rollup/mdxPlugin.ts @@ -1,6 +1,5 @@ import { type Plugin } from 'rollup'; -import { transformMdxToCsf } from '../../shared/mdx/transformMdxToCsf.js'; - +import { transformMdxToCsf } from '../../shared/mdx/transformMdxToCsf.ts'; export function mdxPlugin(): Plugin { return { name: 'mdx', diff --git a/packages/dev-server-storybook/src/index.ts b/packages/dev-server-storybook/src/index.ts index f31c7526de..ab22b31c49 100644 --- a/packages/dev-server-storybook/src/index.ts +++ b/packages/dev-server-storybook/src/index.ts @@ -1 +1 @@ -export { storybookPlugin } from './serve/storybookPlugin.js'; +export { storybookPlugin } from './serve/storybookPlugin.ts'; diff --git a/packages/dev-server-storybook/src/serve/storybookPlugin.ts b/packages/dev-server-storybook/src/serve/storybookPlugin.ts index c1a7643c7b..cfb7723161 100644 --- a/packages/dev-server-storybook/src/serve/storybookPlugin.ts +++ b/packages/dev-server-storybook/src/serve/storybookPlugin.ts @@ -2,15 +2,14 @@ import { type DevServerCoreConfig, getRequestFilePath, type Plugin } from '@web/dev-server-core'; import { mdjsToCsf } from 'storybook-addon-markdown-docs'; -import { type StorybookPluginConfig } from '../shared/config/StorybookPluginConfig.js'; -import { createManagerHtml } from '../shared/html/createManagerHtml.js'; -import { createPreviewHtml } from '../shared/html/createPreviewHtml.js'; -import { readStorybookConfig } from '../shared/config/readStorybookConfig.js'; -import { validatePluginConfig } from '../shared/config/validatePluginConfig.js'; -import { findStories } from '../shared/stories/findStories.js'; -import { transformMdxToCsf } from '../shared/mdx/transformMdxToCsf.js'; -import { injectExportsOrder } from '../shared/stories/injectExportsOrder.js'; - +import { type StorybookPluginConfig } from '../shared/config/StorybookPluginConfig.ts'; +import { createManagerHtml } from '../shared/html/createManagerHtml.ts'; +import { createPreviewHtml } from '../shared/html/createPreviewHtml.ts'; +import { readStorybookConfig } from '../shared/config/readStorybookConfig.ts'; +import { validatePluginConfig } from '../shared/config/validatePluginConfig.ts'; +import { findStories } from '../shared/stories/findStories.ts'; +import { transformMdxToCsf } from '../shared/mdx/transformMdxToCsf.ts'; +import { injectExportsOrder } from '../shared/stories/injectExportsOrder.ts'; const regexpReplaceWebsocket = /(.|\s)*<\/script>/m; interface Context { diff --git a/packages/dev-server-storybook/src/shared/config/readStorybookConfig.ts b/packages/dev-server-storybook/src/shared/config/readStorybookConfig.ts index b7fe7c7ad1..10735ef2a3 100644 --- a/packages/dev-server-storybook/src/shared/config/readStorybookConfig.ts +++ b/packages/dev-server-storybook/src/shared/config/readStorybookConfig.ts @@ -2,10 +2,9 @@ import path from 'path'; import fs from 'fs'; import { pathToFileURL } from 'url'; -import { type StorybookPluginConfig } from './StorybookPluginConfig.js'; -import { createError } from '../utils.js'; -import { type MainJs, type StorybookConfig } from './StorybookConfig.js'; - +import { type StorybookPluginConfig } from './StorybookPluginConfig.ts'; +import { createError } from '../utils.ts'; +import { type MainJs, type StorybookConfig } from './StorybookConfig.ts'; const defaultConfigDir = path.join(process.cwd(), '.storybook'); function validateMainJs(mainJs: MainJs): MainJs { diff --git a/packages/dev-server-storybook/src/shared/config/validatePluginConfig.ts b/packages/dev-server-storybook/src/shared/config/validatePluginConfig.ts index 63b598d327..b12b12e2b5 100644 --- a/packages/dev-server-storybook/src/shared/config/validatePluginConfig.ts +++ b/packages/dev-server-storybook/src/shared/config/validatePluginConfig.ts @@ -1,6 +1,5 @@ -import { type StorybookPluginConfig } from '../config/StorybookPluginConfig.js'; -import { createError } from '../utils.js'; - +import { type StorybookPluginConfig } from '../config/StorybookPluginConfig.ts'; +import { createError } from '../utils.ts'; const types = ['preact', 'web-components']; export function validatePluginConfig(pluginConfig: StorybookPluginConfig) { diff --git a/packages/dev-server-storybook/src/shared/html/createManagerHtml.ts b/packages/dev-server-storybook/src/shared/html/createManagerHtml.ts index 5af45475bb..0e0a0b664e 100644 --- a/packages/dev-server-storybook/src/shared/html/createManagerHtml.ts +++ b/packages/dev-server-storybook/src/shared/html/createManagerHtml.ts @@ -1,7 +1,6 @@ import fs from 'fs'; -import { type StorybookConfig } from '../config/StorybookConfig.js'; -import { createBrowserImport } from '../utils.js'; - +import { type StorybookConfig } from '../config/StorybookConfig.ts'; +import { createBrowserImport } from '../utils.ts'; function createManagerImport(rootDir: string, managerJsPath: string) { if (!fs.existsSync(managerJsPath)) { return ''; diff --git a/packages/dev-server-storybook/src/shared/html/createPreviewHtml.ts b/packages/dev-server-storybook/src/shared/html/createPreviewHtml.ts index b963980d6f..4c89b120da 100644 --- a/packages/dev-server-storybook/src/shared/html/createPreviewHtml.ts +++ b/packages/dev-server-storybook/src/shared/html/createPreviewHtml.ts @@ -1,9 +1,8 @@ import fs from 'fs'; -import { type StorybookConfig } from '../config/StorybookConfig.js'; - -import { type StorybookPluginConfig } from '../config/StorybookPluginConfig.js'; -import { createBrowserImport } from '../utils.js'; +import { type StorybookConfig } from '../config/StorybookConfig.ts'; +import { type StorybookPluginConfig } from '../config/StorybookPluginConfig.ts'; +import { createBrowserImport } from '../utils.ts'; function createPreviewImport(rootDir: string, previewJsPath: string) { if (!fs.existsSync(previewJsPath)) { return ''; diff --git a/packages/dev-server-storybook/src/shared/mdx/transformMdxToCsf.ts b/packages/dev-server-storybook/src/shared/mdx/transformMdxToCsf.ts index 0f95d6f079..afb5a3d5dd 100644 --- a/packages/dev-server-storybook/src/shared/mdx/transformMdxToCsf.ts +++ b/packages/dev-server-storybook/src/shared/mdx/transformMdxToCsf.ts @@ -1,11 +1,9 @@ -import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; import mdx from '@mdx-js/mdx'; import { transformAsync } from '@babel/core'; // @ts-ignore import { createCompiler } from '@storybook/csf-tools/mdx.js'; -import { createError } from '../utils.js'; - -const require = createRequire(import.meta.url); +import { createError } from '../utils.ts'; const compilers = [createCompiler({})]; export async function transformMdxToCsf(body: string, filePath: string): Promise { @@ -20,7 +18,7 @@ export async function transformMdxToCsf(body: string, filePath: string): Promise const babelResult = await transformAsync(jsx, { filename: filePath, sourceMaps: true, - plugins: [require.resolve('@babel/plugin-transform-react-jsx')], + plugins: [fileURLToPath(import.meta.resolve('@babel/plugin-transform-react-jsx'))], }); if (!babelResult?.code) { diff --git a/packages/dev-server-storybook/src/shared/stories/findStories.ts b/packages/dev-server-storybook/src/shared/stories/findStories.ts index 328de31429..36b2ff035d 100644 --- a/packages/dev-server-storybook/src/shared/stories/findStories.ts +++ b/packages/dev-server-storybook/src/shared/stories/findStories.ts @@ -1,12 +1,12 @@ import globby from 'globby'; import path from 'path'; -import { createBrowserImport, createError } from '../utils.js'; +import { createBrowserImport, createError } from '../utils.ts'; export async function findStories( rootDir: string, mainJsPath: string, - // eslint-disable-next-line @typescript-eslint/ban-types + // eslint-disable-next-line @typescript-eslint/no-empty-object-type stories: string[] | Function, ) { const mainJsDir = path.dirname(mainJsPath); diff --git a/packages/dev-server-storybook/tsconfig.json b/packages/dev-server-storybook/tsconfig.json index 73f2de7351..c0a749dff9 100644 --- a/packages/dev-server-storybook/tsconfig.json +++ b/packages/dev-server-storybook/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "node16", "moduleResolution": "node16", "outDir": "./dist", "rootDir": "./src", @@ -57,5 +56,12 @@ "src/browser", "tests", "dist" - ] + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } } diff --git a/packages/dev-server/src/bin.ts b/packages/dev-server/src/bin.ts index 3b09dc8a85..b9ff1437e6 100644 --- a/packages/dev-server/src/bin.ts +++ b/packages/dev-server/src/bin.ts @@ -1,4 +1,4 @@ #!/usr/bin/env node -import { startDevServer } from './startDevServer.js'; +import { startDevServer } from './startDevServer.ts'; startDevServer(); diff --git a/packages/dev-server/src/config/mergeConfigs.ts b/packages/dev-server/src/config/mergeConfigs.ts index 84f3188af5..828b69abee 100644 --- a/packages/dev-server/src/config/mergeConfigs.ts +++ b/packages/dev-server/src/config/mergeConfigs.ts @@ -1,5 +1,4 @@ -import { type DevServerConfig } from './DevServerConfig.js'; - +import { type DevServerConfig } from './DevServerConfig.ts'; const arrayKeys = ['plugins', 'middleware']; export function mergeConfigs(...configs: Partial[]) { diff --git a/packages/dev-server/src/config/parseConfig.ts b/packages/dev-server/src/config/parseConfig.ts index 4fa7092bbe..96974d195a 100644 --- a/packages/dev-server/src/config/parseConfig.ts +++ b/packages/dev-server/src/config/parseConfig.ts @@ -1,14 +1,15 @@ -import { getPortPromise } from 'portfinder'; -import path from 'path'; +import portfinder from 'portfinder'; -import { type DevServerCliArgs } from './readCliArgs.js'; -import { mergeConfigs } from './mergeConfigs.js'; -import { type DevServerConfig } from './DevServerConfig.js'; -import { esbuildPlugin } from '../plugins/esbuildPlugin.js'; -import { watchPlugin } from '../plugins/watchPlugin.js'; -import { nodeResolvePlugin } from '../plugins/nodeResolvePlugin.js'; -import { DevServerStartError } from '../DevServerStartError.js'; +const { getPortPromise } = portfinder; +import path from 'path'; +import { type DevServerCliArgs } from './readCliArgs.ts'; +import { mergeConfigs } from './mergeConfigs.ts'; +import { type DevServerConfig } from './DevServerConfig.ts'; +import { esbuildPlugin } from '../plugins/esbuildPlugin.ts'; +import { watchPlugin } from '../plugins/watchPlugin.ts'; +import { nodeResolvePlugin } from '../plugins/nodeResolvePlugin.ts'; +import { DevServerStartError } from '../DevServerStartError.ts'; const defaultConfig: Partial = { rootDir: process.cwd(), hostname: 'localhost', diff --git a/packages/dev-server/src/config/readCliArgs.ts b/packages/dev-server/src/config/readCliArgs.ts index 01c82e3f43..017b130e73 100644 --- a/packages/dev-server/src/config/readCliArgs.ts +++ b/packages/dev-server/src/config/readCliArgs.ts @@ -1,8 +1,7 @@ import commandLineArgs from 'command-line-args'; import commandLineUsage, { OptionDefinition } from 'command-line-usage'; import camelCase from 'camelcase'; -import { type DevServerConfig } from './DevServerConfig.js'; - +import { type DevServerConfig } from './DevServerConfig.ts'; export interface DevServerCliArgs extends Partial< Pick< @@ -15,8 +14,7 @@ export interface DevServerCliArgs | 'watch' | 'esbuildTarget' > - > { - config?: string; + > { config?: string; } const options: (OptionDefinition & { description: string })[] = [ diff --git a/packages/dev-server/src/config/readFileConfig.ts b/packages/dev-server/src/config/readFileConfig.ts index cae64bfcda..8f0cb37fd4 100644 --- a/packages/dev-server/src/config/readFileConfig.ts +++ b/packages/dev-server/src/config/readFileConfig.ts @@ -1,5 +1,5 @@ import { readConfig, ConfigLoaderError } from '@web/config-loader'; -import { DevServerStartError } from '../DevServerStartError.js'; +import { DevServerStartError } from '../DevServerStartError.ts'; export interface ReadFileConfigParams { /** diff --git a/packages/dev-server/src/index.ts b/packages/dev-server/src/index.ts index 6c8c6cf4fa..cf855f0d42 100644 --- a/packages/dev-server/src/index.ts +++ b/packages/dev-server/src/index.ts @@ -1,9 +1,9 @@ export { RollupNodeResolveOptions } from '@web/dev-server-rollup'; -export { startDevServer } from './startDevServer.js'; -export { mergeConfigs } from './config/mergeConfigs.js'; -export { DevServerStartError } from './DevServerStartError.js'; -export { esbuildPlugin } from './plugins/esbuildPlugin.js'; -export { nodeResolvePlugin } from './plugins/nodeResolvePlugin.js'; +export { startDevServer } from './startDevServer.ts'; +export { mergeConfigs } from './config/mergeConfigs.ts'; +export { DevServerStartError } from './DevServerStartError.ts'; +export { esbuildPlugin } from './plugins/esbuildPlugin.ts'; +export { nodeResolvePlugin } from './plugins/nodeResolvePlugin.ts'; -import type { DevServerConfig as FullDevServerConfig } from './config/DevServerConfig.js'; +import type { DevServerConfig as FullDevServerConfig } from './config/DevServerConfig.ts'; export type DevServerConfig = Partial; diff --git a/packages/dev-server/src/logger/createLogger.ts b/packages/dev-server/src/logger/createLogger.ts index 26a778903c..7ea23378c4 100644 --- a/packages/dev-server/src/logger/createLogger.ts +++ b/packages/dev-server/src/logger/createLogger.ts @@ -1,7 +1,6 @@ import { type Plugin } from '@web/dev-server-core'; -import { DevServerLogger } from './DevServerLogger.js'; -import { logStartMessage } from './logStartMessage.js'; - +import { DevServerLogger } from './DevServerLogger.ts'; +import { logStartMessage } from './logStartMessage.ts'; const CLEAR_COMMAND = process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[H'; export interface LoggerArgs { diff --git a/packages/dev-server/src/logger/logStartMessage.ts b/packages/dev-server/src/logger/logStartMessage.ts index a3960a2000..977cef4a10 100644 --- a/packages/dev-server/src/logger/logStartMessage.ts +++ b/packages/dev-server/src/logger/logStartMessage.ts @@ -1,6 +1,9 @@ -import { type DevServerConfig } from '../config/DevServerConfig'; +import { type DevServerConfig } from '../config/DevServerConfig.ts'; import { type Logger } from '@web/dev-server-core'; -import internalIp from 'internal-ip'; +import * as internalIpModule from 'internal-ip'; + +const _internalIp = (internalIpModule as any).default ?? internalIpModule; +const { internalIpV4Sync } = _internalIp; import { bold, cyan, white } from 'nanocolors'; const createAddress = (config: DevServerConfig, host: string, path: string) => @@ -8,7 +11,7 @@ const createAddress = (config: DevServerConfig, host: string, path: string) => function logNetworkAddress(config: DevServerConfig, logger: Logger, openPath: string) { try { - const address = internalIp.v4.sync(); + const address = internalIpV4Sync(); if (typeof address === 'string') { logger.log(`${white('Network:')} ${cyan(createAddress(config, address, openPath))}`); } diff --git a/packages/dev-server/src/openBrowser.ts b/packages/dev-server/src/openBrowser.ts index 8c3dfa10c1..eb494b7bbe 100644 --- a/packages/dev-server/src/openBrowser.ts +++ b/packages/dev-server/src/openBrowser.ts @@ -1,6 +1,6 @@ import openBrowserWindow from 'open'; import path from 'path'; -import { DevServerConfig } from './config/DevServerConfig.js'; +import { DevServerConfig } from './config/DevServerConfig.ts'; function isValidURL(str: string) { try { diff --git a/packages/dev-server/src/startDevServer.ts b/packages/dev-server/src/startDevServer.ts index f4d65e71cc..71379b2394 100644 --- a/packages/dev-server/src/startDevServer.ts +++ b/packages/dev-server/src/startDevServer.ts @@ -1,12 +1,12 @@ import { DevServer } from '@web/dev-server-core'; -import { DevServerConfig } from './config/DevServerConfig.js'; -import { mergeConfigs } from './config/mergeConfigs.js'; -import { parseConfig } from './config/parseConfig.js'; -import { readCliArgs } from './config/readCliArgs.js'; -import { readFileConfig } from './config/readFileConfig.js'; -import { DevServerStartError } from './DevServerStartError.js'; -import { createLogger } from './logger/createLogger.js'; -import { openBrowser } from './openBrowser.js'; +import { DevServerConfig } from './config/DevServerConfig.ts'; +import { mergeConfigs } from './config/mergeConfigs.ts'; +import { parseConfig } from './config/parseConfig.ts'; +import { readCliArgs } from './config/readCliArgs.ts'; +import { readFileConfig } from './config/readFileConfig.ts'; +import { DevServerStartError } from './DevServerStartError.ts'; +import { createLogger } from './logger/createLogger.ts'; +import { openBrowser } from './openBrowser.ts'; export interface StartDevServerParams { /** diff --git a/packages/dev-server/tsconfig.json b/packages/dev-server/tsconfig.json index 2142d95b16..ba924292f4 100644 --- a/packages/dev-server/tsconfig.json +++ b/packages/dev-server/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -46,5 +45,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/mocks/storybook-addon/preset.js b/packages/mocks/storybook-addon/preset.js index e3f05ba102..1dce284f53 100644 --- a/packages/mocks/storybook-addon/preset.js +++ b/packages/mocks/storybook-addon/preset.js @@ -1,5 +1,6 @@ /** * @param {import('@web/dev-server').DevServerConfig} config + * @returns {Promise} */ export async function wdsFinal(config) { const { mockPlugin } = await import('@web/mocks/plugins.js'); diff --git a/packages/mocks/storybook/addon/register-addon.js b/packages/mocks/storybook/addon/register-addon.js index 4d74cb23d7..3b3ebc5591 100644 --- a/packages/mocks/storybook/addon/register-addon.js +++ b/packages/mocks/storybook/addon/register-addon.js @@ -116,13 +116,13 @@ export function registerAddon(addons, types, React, createAddon) { + JSON.stringify(data) ?? '' + }> + status ?? '' + }> `, () => html` diff --git a/packages/mocks/tsconfig.json b/packages/mocks/tsconfig.json index b2c630b638..e198542148 100644 --- a/packages/mocks/tsconfig.json +++ b/packages/mocks/tsconfig.json @@ -4,6 +4,19 @@ "outDir": "./dist-types", "rootDir": "." }, - "include": ["**/*.js", "**/*.ts"], - "exclude": ["dist-types", "test-browser"] + "include": [ + "**/*.js", + "**/*.ts" + ], + "exclude": [ + "dist-types", + "test-browser" + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } } diff --git a/packages/parse5-utils/package.json b/packages/parse5-utils/package.json index cfaf9a20a2..c7fadbf30f 100644 --- a/packages/parse5-utils/package.json +++ b/packages/parse5-utils/package.json @@ -1,5 +1,6 @@ { "name": "@web/parse5-utils", + "type": "module", "version": "2.1.1", "publishConfig": { "access": "public" @@ -22,7 +23,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -42,7 +43,6 @@ "utils" ], "dependencies": { - "@types/parse5": "^6.0.1", "parse5": "^6.0.1" }, "devDependencies": { diff --git a/packages/parse5-utils/tsconfig.json b/packages/parse5-utils/tsconfig.json index 27fc2e8749..cf4cd84775 100644 --- a/packages/parse5-utils/tsconfig.json +++ b/packages/parse5-utils/tsconfig.json @@ -3,12 +3,17 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false, + "strict": false, "allowJs": true, - "checkJs": true, + "checkJs": false, + "declaration": true, + "skipLibCheck": true, "emitDeclarationOnly": true }, "references": [], @@ -20,5 +25,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/polyfills-loader/package.json b/packages/polyfills-loader/package.json index 040b21f072..1b100c3af4 100644 --- a/packages/polyfills-loader/package.json +++ b/packages/polyfills-loader/package.json @@ -1,5 +1,6 @@ { "name": "@web/polyfills-loader", + "type": "module", "version": "2.3.1", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -33,7 +33,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], @@ -68,7 +67,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/createPolyfillsData.ts b/packages/polyfills-loader/src/createPolyfillsData.ts index 57094e17f4..d2172d39a8 100644 --- a/packages/polyfills-loader/src/createPolyfillsData.ts +++ b/packages/polyfills-loader/src/createPolyfillsData.ts @@ -1,8 +1,8 @@ import path from 'path'; import fs from 'fs'; import { minify } from 'terser'; -import { PolyfillsLoaderConfig, PolyfillConfig, PolyfillFile } from './types.js'; -import { createContentHash, noModuleSupportTest, hasFileOfType, fileTypes } from './utils.js'; +import type { PolyfillsLoaderConfig, PolyfillConfig, PolyfillFile } from './types.ts'; +import { createContentHash, noModuleSupportTest, hasFileOfType, fileTypes } from './utils.ts'; export async function createPolyfillsData(cfg: PolyfillsLoaderConfig): Promise { const { polyfills = {} } = cfg; @@ -158,9 +158,7 @@ export async function createPolyfillsData(cfg: PolyfillsLoaderConfig): Promise

=18.0.0" + "node": ">=24.0.0" }, "scripts": { "demo:mpa": "rm -rf demo/dist && rollup -c demo/mpa/rollup.config.js --watch & npm run serve-demo", @@ -33,7 +33,6 @@ }, "files": [ "*.js", - "*.mjs", "dist", "src" ], @@ -52,11 +51,8 @@ "picomatch": "^2.2.2" }, "devDependencies": { - "@prettier/sync": "^0.6.1", "@types/html-minifier-terser": "^7.0.0", "@types/picomatch": "^2.2.1", - "@types/prettier": "^3.0.0", - "prettier": "^3.6.2", "rollup": "^4.4.0" } } diff --git a/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts b/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts index 884f669fb5..132186e5ae 100644 --- a/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts +++ b/packages/rollup-plugin-html/src/RollupPluginHTMLOptions.ts @@ -1,5 +1,5 @@ -import { OutputChunk, OutputOptions, OutputBundle } from 'rollup'; -import { Attribute } from 'parse5'; +import type { OutputChunk, OutputOptions, OutputBundle } from 'rollup'; +import type { Attribute } from 'parse5'; export interface InputHTMLOptions { /** The html source code. If set, overwrites path. */ @@ -15,9 +15,9 @@ export interface RollupPluginHTMLOptions { input?: string | InputHTMLOptions | (string | InputHTMLOptions)[]; /** HTML file glob pattern or patterns to ignore */ exclude?: string | string[]; - /** Whether to minify the output HTML. Defaults to false. */ + /** Whether to minify the output HTML. */ minify?: boolean; - /** Whether to preserve or flatten the directory structure of the HTML file. Defaults to true. */ + /** Whether to preserve or flatten the directory structure of the HTML file. */ flattenOutput?: boolean; /** Directory to resolve absolute paths relative to, and to use as base for non-flatted filename output. */ rootDir?: string; @@ -27,17 +27,13 @@ export interface RollupPluginHTMLOptions { transformAsset?: TransformAssetFunction | TransformAssetFunction[]; /** Transform HTML file before output. */ transformHtml?: TransformHtmlFunction | TransformHtmlFunction[]; - /** Whether to extract and bundle assets referenced in HTML and CSS. Defaults to true. */ - extractAssets?: boolean | 'legacy-html' | 'legacy-html-and-css'; - /** Whether to bundle extracted CSS assets. Bundling is done via Lightning CSS. Defaults to true. */ - bundleCss?: boolean; - /** Whether to minify extracted CSS assets. Minificaiton is done via Lightning CSS. Defaults to false. */ - minifyCss?: boolean; + /** Whether to extract and bundle assets referenced in HTML. Defaults to true. */ + extractAssets?: boolean; /** Whether to ignore assets referenced in HTML and CSS with glob patterns. */ externalAssets?: string | string[]; /** Define a full absolute url to your site (e.g. https://domain.com) */ absoluteBaseUrl?: string; - /** Whether to set full absolute urls for ['meta[property=og:image]', 'link[rel=canonical]', 'meta[property=og:url]'] or not. Requires a absoluteBaseUrl to be set. Defaults to true. */ + /** Whether to set full absolute urls for ['meta[property=og:image]', 'link[rel=canonical]', 'meta[property=og:url]'] or not. Requires a absoluteBaseUrl to be set. Default to true. */ absoluteSocialMediaUrls?: boolean; /** Should a service worker registration script be injected. Defaults to false. */ injectServiceWorker?: boolean; @@ -47,6 +43,8 @@ export interface RollupPluginHTMLOptions { absolutePathPrefix?: string; /** When set to true, will insert meta tags for CSP and add script-src values for inline scripts by sha256-hashing the contents */ strictCSPInlineScripts?: boolean; + /** Bundle assets reference from CSS via `url` */ + bundleAssetsFromCss?: boolean; } export interface GeneratedBundle { diff --git a/packages/rollup-plugin-html/src/assets/utils.ts b/packages/rollup-plugin-html/src/assets/utils.ts index b6755784bb..b8448cd968 100644 --- a/packages/rollup-plugin-html/src/assets/utils.ts +++ b/packages/rollup-plugin-html/src/assets/utils.ts @@ -2,7 +2,7 @@ import type { Document, Element } from 'parse5'; import path from 'path'; import picomatch from 'picomatch'; import { findElements, getTagName, getAttribute } from '@web/parse5-utils'; -import { createError } from '../utils.js'; +import { createError } from '../utils.ts'; import { serialize } from 'v8'; const assetLinkRels = [ diff --git a/packages/rollup-plugin-html/src/index.ts b/packages/rollup-plugin-html/src/index.ts index 7661d05ba7..0a50fedb24 100644 --- a/packages/rollup-plugin-html/src/index.ts +++ b/packages/rollup-plugin-html/src/index.ts @@ -1,5 +1,4 @@ -import { rollupPluginHTML, type RollupPluginHtml } from './rollupPluginHTML.js'; - +import { rollupPluginHTML, type RollupPluginHtml } from './rollupPluginHTML.ts'; export type { InputHTMLOptions, RollupPluginHTMLOptions, @@ -8,7 +7,7 @@ export type { TransformHtmlArgs, TransformHtmlFunction, TransformAssetFunction, -} from './RollupPluginHTMLOptions.js'; +} from './RollupPluginHTMLOptions.ts'; export { rollupPluginHTML, type RollupPluginHtml }; export default rollupPluginHTML; diff --git a/packages/rollup-plugin-html/src/input/InputData.ts b/packages/rollup-plugin-html/src/input/InputData.ts index d08a217efd..1498fe4ebc 100644 --- a/packages/rollup-plugin-html/src/input/InputData.ts +++ b/packages/rollup-plugin-html/src/input/InputData.ts @@ -1,4 +1,4 @@ -import { ScriptModuleTag } from '../RollupPluginHTMLOptions'; +import type { ScriptModuleTag } from '../RollupPluginHTMLOptions.ts'; export interface InputAsset { filePath: string; diff --git a/packages/rollup-plugin-html/src/input/addRollupInput.ts b/packages/rollup-plugin-html/src/input/addRollupInput.ts index e0d0ba5975..8a6d7644f9 100644 --- a/packages/rollup-plugin-html/src/input/addRollupInput.ts +++ b/packages/rollup-plugin-html/src/input/addRollupInput.ts @@ -1,6 +1,6 @@ -import { InputOptions } from 'rollup'; -import { ScriptModuleTag } from '../RollupPluginHTMLOptions.js'; -import { createError } from '../utils.js'; +import type { InputOptions } from 'rollup'; +import type { ScriptModuleTag } from '../RollupPluginHTMLOptions.ts'; +import { createError } from '../utils.ts'; function fromEntries(entries: [string, V][]) { const obj: Record = {}; diff --git a/packages/rollup-plugin-html/src/input/extract/extractAssets.ts b/packages/rollup-plugin-html/src/input/extract/extractAssets.ts index bed321e752..b1dfbf4131 100644 --- a/packages/rollup-plugin-html/src/input/extract/extractAssets.ts +++ b/packages/rollup-plugin-html/src/input/extract/extractAssets.ts @@ -1,14 +1,13 @@ import { type Document, serialize } from 'parse5'; import fs from 'fs'; import path from 'path'; -import { type InputAsset } from '../InputData.js'; -import { +import { type InputAsset } from '../InputData.ts';import { findAssets, getSourcePaths, isHashedAsset, resolveAssetFilePath, createAssetPicomatchMatcher, -} from '../../assets/utils.js'; +} from '../../assets/utils.ts'; export interface ExtractAssetsParams { document: Document; diff --git a/packages/rollup-plugin-html/src/input/extract/extractModules.ts b/packages/rollup-plugin-html/src/input/extract/extractModules.ts index afba74165d..97990d4f5e 100644 --- a/packages/rollup-plugin-html/src/input/extract/extractModules.ts +++ b/packages/rollup-plugin-html/src/input/extract/extractModules.ts @@ -2,10 +2,9 @@ import { findElements, getAttribute, getTagName, getTextContent, remove } from ' import { type Document, type Attribute } from 'parse5'; import path from 'path'; import crypto from 'crypto'; -import { resolveAssetFilePath } from '../../assets/utils.js'; +import { resolveAssetFilePath } from '../../assets/utils.ts'; import { getAttributes } from '@web/parse5-utils'; -import { type ScriptModuleTag } from '../../RollupPluginHTMLOptions.js'; - +import { type ScriptModuleTag } from '../../RollupPluginHTMLOptions.ts'; export interface ExtractModulesParams { document: Document; htmlDir: string; diff --git a/packages/rollup-plugin-html/src/input/extract/extractModulesAndAssets.ts b/packages/rollup-plugin-html/src/input/extract/extractModulesAndAssets.ts index 0deea609f2..73906f4e06 100644 --- a/packages/rollup-plugin-html/src/input/extract/extractModulesAndAssets.ts +++ b/packages/rollup-plugin-html/src/input/extract/extractModulesAndAssets.ts @@ -1,7 +1,7 @@ import path from 'path'; import { parse, serialize } from 'parse5'; -import { extractModules } from './extractModules.js'; -import { extractAssets } from './extractAssets.js'; +import { extractModules } from './extractModules.ts'; +import { extractAssets } from './extractAssets.ts'; export interface ExtractParams { html: string; diff --git a/packages/rollup-plugin-html/src/input/getInputData.ts b/packages/rollup-plugin-html/src/input/getInputData.ts index 9d217c5f56..bbe61dbe06 100644 --- a/packages/rollup-plugin-html/src/input/getInputData.ts +++ b/packages/rollup-plugin-html/src/input/getInputData.ts @@ -1,13 +1,14 @@ import fs from 'fs'; import path from 'path'; -import { globSync, GlobOptionsWithFileTypesFalse } from 'glob'; +import { globSync } from 'glob'; +import type { GlobOptionsWithFileTypesFalse } from 'glob'; -import { createError } from '../utils.js'; -import { RollupPluginHTMLOptions } from '../RollupPluginHTMLOptions.js'; -import { InputData } from './InputData.js'; -import { normalizeInputOptions } from './normalizeInputOptions.js'; -import { extractModulesAndAssets } from './extract/extractModulesAndAssets.js'; -import { InputOption } from 'rollup'; +import { createError } from '../utils.ts'; +import type { RollupPluginHTMLOptions } from '../RollupPluginHTMLOptions.ts'; +import type { InputData } from './InputData.ts'; +import { normalizeInputOptions } from './normalizeInputOptions.ts'; +import { extractModulesAndAssets } from './extract/extractModulesAndAssets.ts'; +import type { InputOption } from 'rollup'; function resolveGlob(fromGlob: string, opts: GlobOptionsWithFileTypesFalse) { const files = globSync(fromGlob, { ...opts, absolute: true }); @@ -30,21 +31,14 @@ export interface CreateInputDataParams { html: string; rootDir: string; filePath?: string; - extractAssets: boolean | 'legacy-html' | 'legacy-html-and-css'; + extractAssets: boolean; externalAssets?: string | string[]; absolutePathPrefix?: string; } function createInputData(params: CreateInputDataParams): InputData { - const { - name, - html, - rootDir, - filePath, - extractAssets = true, - externalAssets, - absolutePathPrefix, - } = params; + const { name, html, rootDir, filePath, extractAssets, externalAssets, absolutePathPrefix } = + params; const htmlFilePath = filePath ? filePath : path.resolve(rootDir, name); const result = extractModulesAndAssets({ html, diff --git a/packages/rollup-plugin-html/src/input/normalizeInputOptions.ts b/packages/rollup-plugin-html/src/input/normalizeInputOptions.ts index 7ae9eba704..7de17dc57b 100644 --- a/packages/rollup-plugin-html/src/input/normalizeInputOptions.ts +++ b/packages/rollup-plugin-html/src/input/normalizeInputOptions.ts @@ -1,6 +1,6 @@ -import { InputOption } from 'rollup'; -import { InputHTMLOptions, RollupPluginHTMLOptions } from '../RollupPluginHTMLOptions.js'; -import { createError } from '../utils.js'; +import type { InputOption } from 'rollup'; +import type { InputHTMLOptions, RollupPluginHTMLOptions } from '../RollupPluginHTMLOptions.ts'; +import { createError } from '../utils.ts'; export function normalizeInputOptions( pluginOptions: RollupPluginHTMLOptions, diff --git a/packages/rollup-plugin-html/src/output/createHTMLOutput.ts b/packages/rollup-plugin-html/src/output/createHTMLOutput.ts index aa68f4da6d..04818a26db 100644 --- a/packages/rollup-plugin-html/src/output/createHTMLOutput.ts +++ b/packages/rollup-plugin-html/src/output/createHTMLOutput.ts @@ -1,22 +1,22 @@ -import * as path from 'path'; -import { getEntrypointBundles } from './getEntrypointBundles.js'; -import { getOutputHTML } from './getOutputHTML.js'; -import { createError } from '../utils.js'; -import { +import { getEntrypointBundles } from './getEntrypointBundles.ts'; +import { getOutputHTML } from './getOutputHTML.ts'; +import { createError } from '../utils.ts'; +import type { GeneratedBundle, RollupPluginHTMLOptions, TransformHtmlFunction, -} from '../RollupPluginHTMLOptions.js'; -import { EmittedFile } from 'rollup'; -import { InputData } from '../input/InputData.js'; -import { EmittedAssets } from './emitAssets.js'; +} from '../RollupPluginHTMLOptions.ts'; +import type { EmittedFile } from 'rollup'; +import type { InputData } from '../input/InputData.ts'; +import type { EmittedAssets } from './emitAssets.ts'; export interface CreateHTMLAssetParams { outputDir: string; input: InputData; emittedAssets: EmittedAssets; generatedBundles: GeneratedBundle[]; - externalTransformHtmlFns: TransformHtmlFunction[]; + inputExternalTransformHtmlFns: TransformHtmlFunction[]; + outputExternalTransformHtmlFns: TransformHtmlFunction[]; pluginOptions: RollupPluginHTMLOptions; defaultInjectDisabled: boolean; serviceWorkerPath: string; @@ -31,7 +31,8 @@ export async function createHTMLAsset(params: CreateHTMLAssetParams): Promise; @@ -40,10 +42,6 @@ export async function emitAssets( inputs: InputData[], options: RollupPluginHTMLOptions, ) { - const extractAssets = options.extractAssets ?? true; - const bundleCss = options.bundleCss ?? true; - const minifyCss = options.minifyCss ?? false; - const extractAssetsLegacyCss = options.extractAssets === 'legacy-html-and-css'; const emittedStaticAssets = new Map(); const emittedHashedAssets = new Map(); const emittedStaticAssetNames = new Set(); @@ -90,11 +88,12 @@ export async function emitAssets( const isExternal = createAssetPicomatchMatcher(options.externalAssets); const emittedExternalAssets = new Map(); if (asset.hashed) { - if (basename.endsWith('.css') && extractAssets) { - const { code } = await (bundleCss ? bundleAsync : transform)({ - filename: asset.filePath, + if (basename.endsWith('.css') && options.bundleAssetsFromCss) { + let updatedCssSource = false; + const { code } = await transform({ + filename: basename, code: asset.content, - minify: minifyCss, + minify: false, visitor: { Url: url => { // Support foo.svg#bar @@ -108,56 +107,27 @@ export async function emitAssets( // Avoid duplicates if (!emittedExternalAssets.has(assetLocation)) { - const basename = path.basename(filePath); - const fileRef = this.emitFile({ + const fontFileRef = this.emitFile({ type: 'asset', - name: extractAssetsLegacyCss ? `assets/${basename}` : basename, + name: path.basename(filePath), source: assetContent, }); - const emittedAssetFilepath = this.getFileName(fileRef); - const emittedAssetBasename = path.basename(emittedAssetFilepath); - emittedExternalAssets.set(assetLocation, emittedAssetFilepath); + const emittedAssetFilePath = this.getFileName(fontFileRef); + emittedExternalAssets.set(assetLocation, emittedAssetFilePath); // Update the URL in the original CSS file to point to the emitted asset file - if (extractAssetsLegacyCss) { - url.url = `assets/${emittedAssetBasename}`; - } else { - if (options.publicPath) { - url.url = toBrowserPath( - path.join(options.publicPath, emittedAssetFilepath), - ); - } else { - url.url = emittedAssetBasename; - } - } - if (idRef) { - url.url = `${url.url}#${idRef}`; - } + url.url = idRef ? `${emittedAssetFilePath}#${idRef}` : emittedAssetFilePath; } else { - const emittedAssetFilepath = emittedExternalAssets.get(assetLocation); - const emittedAssetBasename = path.basename(emittedAssetFilepath); - if (extractAssetsLegacyCss) { - url.url = `assets/${emittedAssetBasename}`; - } else { - if (options.publicPath) { - url.url = toBrowserPath( - path.join(options.publicPath, emittedAssetFilepath), - ); - } else { - url.url = emittedAssetBasename; - } - } - if (idRef) { - url.url = `${url.url}#${idRef}`; - } + const emittedAssetFilePath = emittedExternalAssets.get(assetLocation); + url.url = idRef ? `${emittedAssetFilePath}#${idRef}` : emittedAssetFilePath; } } + updatedCssSource = true; return url; }, }, }); - const codeBuffer = Buffer.from(code); - if (!asset.content.equals(codeBuffer)) { - source = codeBuffer; + if (updatedCssSource) { + source = Buffer.from(code); } } diff --git a/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts b/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts index 12c1bbb5ca..20a677fe1e 100644 --- a/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts +++ b/packages/rollup-plugin-html/src/output/getEntrypointBundles.ts @@ -1,15 +1,15 @@ -import { Attribute } from 'parse5'; +import type { Attribute } from 'parse5'; import path from 'path'; -import { OutputChunk } from 'rollup'; +import type { OutputChunk } from 'rollup'; -import { +import type { EntrypointBundle, GeneratedBundle, RollupPluginHTMLOptions, ScriptModuleTag, -} from '../RollupPluginHTMLOptions'; -import { createError, NOOP_IMPORT } from '../utils.js'; -import { toBrowserPath } from './utils.js'; +} from '../RollupPluginHTMLOptions.ts'; +import { createError, NOOP_IMPORT } from '../utils.ts'; +import { toBrowserPath } from './utils.ts'; export interface CreateImportPathParams { publicPath?: string; diff --git a/packages/rollup-plugin-html/src/output/getOutputHTML.ts b/packages/rollup-plugin-html/src/output/getOutputHTML.ts index 9b39ea7c40..60be896ca4 100644 --- a/packages/rollup-plugin-html/src/output/getOutputHTML.ts +++ b/packages/rollup-plugin-html/src/output/getOutputHTML.ts @@ -1,17 +1,17 @@ -import { injectBundles } from './injectBundles.js'; -import { InputData } from '../input/InputData'; -import { +import { injectBundles } from './injectBundles.ts'; +import type { InputData } from '../input/InputData.ts'; +import type { EntrypointBundle, RollupPluginHTMLOptions, TransformHtmlFunction, -} from '../RollupPluginHTMLOptions'; +} from '../RollupPluginHTMLOptions.ts'; import { parse, serialize } from 'parse5'; import { minify as minifyHTMLFunc } from 'html-minifier-terser'; -import { injectedUpdatedAssetPaths } from './injectedUpdatedAssetPaths.js'; -import { EmittedAssets } from './emitAssets.js'; -import { injectAbsoluteBaseUrl } from './injectAbsoluteBaseUrl.js'; -import { hashInlineScripts } from './hashInlineScripts.js'; -import { injectServiceWorkerRegistration } from './injectServiceWorkerRegistration.js'; +import { injectedUpdatedAssetPaths } from './injectedUpdatedAssetPaths.ts'; +import type { EmittedAssets } from './emitAssets.ts'; +import { injectAbsoluteBaseUrl } from './injectAbsoluteBaseUrl.ts'; +import { hashInlineScripts } from './hashInlineScripts.ts'; +import { injectServiceWorkerRegistration } from './injectServiceWorkerRegistration.ts'; export interface GetOutputHTMLParams { input: InputData; @@ -19,7 +19,8 @@ export interface GetOutputHTMLParams { emittedAssets: EmittedAssets; pluginOptions: RollupPluginHTMLOptions; entrypointBundles: Record; - externalTransformHtmlFns?: TransformHtmlFunction[]; + inputExternalTransformHtmlFns?: TransformHtmlFunction[]; + outputExternalTransformHtmlFns?: TransformHtmlFunction[]; defaultInjectDisabled: boolean; serviceWorkerPath: string; injectServiceWorker: boolean; @@ -31,7 +32,8 @@ export async function getOutputHTML(params: GetOutputHTMLParams) { const { pluginOptions, entrypointBundles, - externalTransformHtmlFns, + inputExternalTransformHtmlFns, + outputExternalTransformHtmlFns, input, outputDir, emittedAssets, @@ -44,8 +46,20 @@ export async function getOutputHTML(params: GetOutputHTMLParams) { const { default: defaultBundle, ...multiBundles } = entrypointBundles; const { absoluteSocialMediaUrls = true, rootDir = process.cwd() } = pluginOptions; + let inputHtml = input.html; + + // run transform functions on input HTML + const inputTransforms = [...(inputExternalTransformHtmlFns ?? [])]; + for (const transform of inputTransforms) { + inputHtml = await transform(inputHtml, { + bundle: defaultBundle, + bundles: multiBundles, + htmlFileName: input.name, + }); + } + // inject rollup output into HTML - let document = parse(input.html); + let document = parse(inputHtml); if (pluginOptions.extractAssets !== false) { injectedUpdatedAssetPaths({ document, @@ -53,7 +67,6 @@ export async function getOutputHTML(params: GetOutputHTMLParams) { outputDir, rootDir, emittedAssets, - extractAssets: pluginOptions.extractAssets, externalAssets: pluginOptions.externalAssets, absolutePathPrefix, publicPath: pluginOptions.publicPath, @@ -76,17 +89,17 @@ export async function getOutputHTML(params: GetOutputHTMLParams) { let outputHtml = serialize(document); - const transforms = [...(externalTransformHtmlFns ?? [])]; + const outputTransforms = [...(outputExternalTransformHtmlFns ?? [])]; if (pluginOptions.transformHtml) { if (Array.isArray(pluginOptions.transformHtml)) { - transforms.push(...pluginOptions.transformHtml); + outputTransforms.push(...pluginOptions.transformHtml); } else { - transforms.push(pluginOptions.transformHtml); + outputTransforms.push(pluginOptions.transformHtml); } } // run transform functions on output HTML - for (const transform of transforms) { + for (const transform of outputTransforms) { outputHtml = await transform(outputHtml, { bundle: defaultBundle, bundles: multiBundles, diff --git a/packages/rollup-plugin-html/src/output/injectBundles.ts b/packages/rollup-plugin-html/src/output/injectBundles.ts index 7a55ef5a80..ba91830c4a 100644 --- a/packages/rollup-plugin-html/src/output/injectBundles.ts +++ b/packages/rollup-plugin-html/src/output/injectBundles.ts @@ -1,9 +1,8 @@ import type { Document, Attribute } from 'parse5'; import { createScript, findElement, getTagName, appendChild } from '@web/parse5-utils'; -import { type EntrypointBundle } from '../RollupPluginHTMLOptions.js'; -import { createError } from '../utils.js'; - +import { type EntrypointBundle } from '../RollupPluginHTMLOptions.ts'; +import { createError } from '../utils.ts'; export function createLoadScript(src: string, format: string, attributes?: Attribute[]) { const attributesObject: Record = {}; if (attributes) { diff --git a/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts b/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts index 0943b84d97..e0c9c6caf3 100644 --- a/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts +++ b/packages/rollup-plugin-html/src/output/injectedUpdatedAssetPaths.ts @@ -9,12 +9,9 @@ import { isHashedAsset, resolveAssetFilePath, createAssetPicomatchMatcher, -} from '../assets/utils.js'; -import { type InputData } from '../input/InputData.js'; -import { createError } from '../utils.js'; -import { type EmittedAssets } from './emitAssets.js'; -import { toBrowserPath } from './utils.js'; - +} from '../assets/utils.ts'; +import { type InputData } from '../input/InputData.ts';import { createError } from '../utils.ts'; +import { type EmittedAssets } from './emitAssets.ts';import { toBrowserPath } from './utils.ts'; export interface InjectUpdatedAssetPathsArgs { document: Document; input: InputData; diff --git a/packages/rollup-plugin-html/src/rollupPluginHTML.ts b/packages/rollup-plugin-html/src/rollupPluginHTML.ts index 388c329675..c268cb28e8 100644 --- a/packages/rollup-plugin-html/src/rollupPluginHTML.ts +++ b/packages/rollup-plugin-html/src/rollupPluginHTML.ts @@ -1,24 +1,27 @@ -import { Plugin } from 'rollup'; +import type { Plugin } from 'rollup'; import path from 'path'; -import { addRollupInput } from './input/addRollupInput.js'; -import { getInputData } from './input/getInputData.js'; -import { InputData } from './input/InputData.js'; -import { createHTMLOutput } from './output/createHTMLOutput.js'; +import { addRollupInput } from './input/addRollupInput.ts'; +import { getInputData } from './input/getInputData.ts'; +import type { InputData } from './input/InputData.ts'; +import { createHTMLOutput } from './output/createHTMLOutput.ts'; -import { +import type { GeneratedBundle, RollupPluginHTMLOptions, ScriptModuleTag, TransformHtmlFunction, -} from './RollupPluginHTMLOptions.js'; -import { createError, NOOP_IMPORT } from './utils.js'; -import { emitAssets } from './output/emitAssets.js'; +} from './RollupPluginHTMLOptions.ts'; +import { createError, NOOP_IMPORT } from './utils.ts'; +import { emitAssets } from './output/emitAssets.ts'; export interface RollupPluginHtml extends Plugin { api: { getInputs(): InputData[]; - addHtmlTransformer(transformHtmlFunction: TransformHtmlFunction): void; + addHtmlTransformer( + transformHtmlFunction: TransformHtmlFunction, + transformStage?: 'input' | 'output', + ): void; disableDefaultInject(): void; addOutput(name: string): Plugin; }; @@ -28,7 +31,8 @@ export function rollupPluginHTML(pluginOptions: RollupPluginHTMLOptions = {}): R const multiOutputNames: string[] = []; let inputs: InputData[] = []; let generatedBundles: GeneratedBundle[] = []; - let externalTransformHtmlFns: TransformHtmlFunction[] = []; + let inputExternalTransformHtmlFns: TransformHtmlFunction[] = []; + let outputExternalTransformHtmlFns: TransformHtmlFunction[] = []; let defaultInjectDisabled = false; let serviceWorkerPath = ''; let injectServiceWorker = false; @@ -38,7 +42,8 @@ export function rollupPluginHTML(pluginOptions: RollupPluginHTMLOptions = {}): R function reset() { inputs = []; generatedBundles = []; - externalTransformHtmlFns = []; + inputExternalTransformHtmlFns = []; + outputExternalTransformHtmlFns = []; } return { @@ -72,6 +77,7 @@ export function rollupPluginHTML(pluginOptions: RollupPluginHTMLOptions = {}): R if (pluginOptions.strictCSPInlineScripts) { strictCSPInlineScripts = pluginOptions.strictCSPInlineScripts; } + pluginOptions.bundleAssetsFromCss = !!pluginOptions.bundleAssetsFromCss; if (pluginOptions.input == null) { // we are reading rollup input, so replace whatever was there @@ -145,7 +151,8 @@ export function rollupPluginHTML(pluginOptions: RollupPluginHTMLOptions = {}): R inputs, emittedAssets, generatedBundles, - externalTransformHtmlFns, + inputExternalTransformHtmlFns, + outputExternalTransformHtmlFns, pluginOptions, defaultInjectDisabled, serviceWorkerPath, @@ -164,8 +171,15 @@ export function rollupPluginHTML(pluginOptions: RollupPluginHTMLOptions = {}): R return inputs; }, - addHtmlTransformer(transformHtmlFunction: TransformHtmlFunction) { - externalTransformHtmlFns.push(transformHtmlFunction); + addHtmlTransformer( + transformHtmlFunction: TransformHtmlFunction, + transformStage: 'input' | 'output' = 'output', + ) { + if (transformStage === 'input') { + inputExternalTransformHtmlFns.push(transformHtmlFunction); + } else { + outputExternalTransformHtmlFns.push(transformHtmlFunction); + } }, disableDefaultInject() { @@ -204,7 +218,8 @@ export function rollupPluginHTML(pluginOptions: RollupPluginHTMLOptions = {}): R inputs, emittedAssets, generatedBundles, - externalTransformHtmlFns, + inputExternalTransformHtmlFns, + outputExternalTransformHtmlFns, pluginOptions, defaultInjectDisabled, serviceWorkerPath, diff --git a/packages/rollup-plugin-html/src/utils.ts b/packages/rollup-plugin-html/src/utils.ts index b6df2d15c7..fa91a1c4c2 100644 --- a/packages/rollup-plugin-html/src/utils.ts +++ b/packages/rollup-plugin-html/src/utils.ts @@ -1,4 +1,4 @@ -import { ScriptModuleTag } from './RollupPluginHTMLOptions.js'; +import { ScriptModuleTag } from './RollupPluginHTMLOptions.ts'; const PLUGIN = '[@web/rollup-plugin-html]'; diff --git a/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts b/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts index 564cb96c28..0327b8da7a 100644 --- a/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts +++ b/packages/rollup-plugin-html/test/rollup-plugin-html.test.ts @@ -1,8 +1,8 @@ import { rollup, OutputChunk, OutputOptions, Plugin } from 'rollup'; import { expect } from 'chai'; import path from 'path'; -import { rollupPluginHTML } from '../src/index.js'; -import { html, css, js, svg, generateTestBundle, createApp, cleanApp } from './utils.js'; +import { rollupPluginHTML } from '../src/index.ts'; +import { html, css, js, svg, generateTestBundle, createApp, cleanApp } from './utils.ts'; const outputConfig: OutputOptions = { format: 'es', diff --git a/packages/rollup-plugin-html/test/src/input/InputData.test.ts b/packages/rollup-plugin-html/test/src/input/InputData.test.ts index f1fab22f99..9d91a0c234 100644 --- a/packages/rollup-plugin-html/test/src/input/InputData.test.ts +++ b/packages/rollup-plugin-html/test/src/input/InputData.test.ts @@ -1,9 +1,9 @@ import { expect } from 'chai'; import path from 'path'; -import { cleanApp, createApp, html, js } from '../../utils.js'; +import { cleanApp, createApp, html, js } from '../../utils.ts'; -import { getInputData } from '../../../src/input/getInputData.js'; -import { InputData } from '../../../src/input/InputData.js'; +import { getInputData } from '../../../src/input/getInputData.ts'; +import { InputData } from '../../../src/input/InputData.ts'; function cleanupHtml(str: string) { return str.replace(/(\r\n|\n|\r| )/gm, ''); diff --git a/packages/rollup-plugin-html/test/src/input/extract/extractAssets.test.ts b/packages/rollup-plugin-html/test/src/input/extract/extractAssets.test.ts index 24a8dbd2bb..3d3c1f7e07 100644 --- a/packages/rollup-plugin-html/test/src/input/extract/extractAssets.test.ts +++ b/packages/rollup-plugin-html/test/src/input/extract/extractAssets.test.ts @@ -1,8 +1,8 @@ import { expect } from 'chai'; import { parse } from 'parse5'; import path from 'path'; -import { extractAssets } from '../../../../src/input/extract/extractAssets.js'; -import { html, css, js, svg, createApp, cleanApp } from '../../../utils.js'; +import { extractAssets } from '../../../../src/input/extract/extractAssets.ts'; +import { html, css, js, svg, createApp, cleanApp } from '../../../utils.ts'; describe('extractAssets', () => { afterEach(() => { diff --git a/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts b/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts index f560f339ee..7abf19c273 100644 --- a/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts +++ b/packages/rollup-plugin-html/test/src/input/extract/extractModules.test.ts @@ -1,10 +1,10 @@ import path from 'path'; import { parse, serialize } from 'parse5'; import { expect } from 'chai'; -import { html, js } from '../../../utils.js'; +import { html, js } from '../../../utils.ts'; -import { extractModules } from '../../../../src/input/extract/extractModules.js'; -import { ScriptModuleTag } from '../../../../src/RollupPluginHTMLOptions.js'; +import { extractModules } from '../../../../src/input/extract/extractModules.ts'; +import { ScriptModuleTag } from '../../../../src/RollupPluginHTMLOptions.ts'; const { sep } = path; diff --git a/packages/rollup-plugin-html/test/src/output/getEntrypointBundles.test.ts b/packages/rollup-plugin-html/test/src/output/getEntrypointBundles.test.ts index e7cf8d6478..619398e0b9 100644 --- a/packages/rollup-plugin-html/test/src/output/getEntrypointBundles.test.ts +++ b/packages/rollup-plugin-html/test/src/output/getEntrypointBundles.test.ts @@ -2,8 +2,8 @@ import { expect } from 'chai'; import { getEntrypointBundles, createImportPath, -} from '../../../src/output/getEntrypointBundles.js'; -import { GeneratedBundle, ScriptModuleTag } from '../../../src/RollupPluginHTMLOptions.js'; +} from '../../../src/output/getEntrypointBundles.ts'; +import { GeneratedBundle, ScriptModuleTag } from '../../../src/RollupPluginHTMLOptions.ts'; describe('createImportPath()', () => { it('creates a relative import path', () => { diff --git a/packages/rollup-plugin-html/test/src/output/getOutputHTML.test.ts b/packages/rollup-plugin-html/test/src/output/getOutputHTML.test.ts index 024635e434..1ea660dc8c 100644 --- a/packages/rollup-plugin-html/test/src/output/getOutputHTML.test.ts +++ b/packages/rollup-plugin-html/test/src/output/getOutputHTML.test.ts @@ -1,8 +1,8 @@ import { expect } from 'chai'; import path from 'path'; -import { getOutputHTML, GetOutputHTMLParams } from '../../../src/output/getOutputHTML.js'; -import { EntrypointBundle } from '../../../src/RollupPluginHTMLOptions.js'; -import { html } from '../../utils.js'; +import { getOutputHTML, GetOutputHTMLParams } from '../../../src/output/getOutputHTML.ts'; +import { EntrypointBundle } from '../../../src/RollupPluginHTMLOptions.ts'; +import { html } from '../../utils.ts'; describe('getOutputHTML()', () => { const defaultEntrypointBundles: Record = { diff --git a/packages/rollup-plugin-html/test/src/output/injectBundles.test.ts b/packages/rollup-plugin-html/test/src/output/injectBundles.test.ts index fb52cda0cf..21192f6a1e 100644 --- a/packages/rollup-plugin-html/test/src/output/injectBundles.test.ts +++ b/packages/rollup-plugin-html/test/src/output/injectBundles.test.ts @@ -1,9 +1,9 @@ import { getTextContent } from '@web/parse5-utils'; import { expect } from 'chai'; import { parse, serialize } from 'parse5'; -import { html } from '../../utils.js'; +import { html } from '../../utils.ts'; -import { injectBundles, createLoadScript } from '../../../src/output/injectBundles.js'; +import { injectBundles, createLoadScript } from '../../../src/output/injectBundles.ts'; describe('createLoadScript()', () => { it('creates a script for es modules', () => { diff --git a/packages/rollup-plugin-html/test/src/output/injectedUpdatedAssetPaths.test.ts b/packages/rollup-plugin-html/test/src/output/injectedUpdatedAssetPaths.test.ts index 9e720b1577..e9bccbfa4b 100644 --- a/packages/rollup-plugin-html/test/src/output/injectedUpdatedAssetPaths.test.ts +++ b/packages/rollup-plugin-html/test/src/output/injectedUpdatedAssetPaths.test.ts @@ -1,10 +1,10 @@ import { expect } from 'chai'; import path from 'path'; import { parse, serialize } from 'parse5'; -import { html } from '../../utils.js'; -import { InputData } from '../../../src/input/InputData.js'; +import { html } from '../../utils.ts'; +import { InputData } from '../../../src/input/InputData.ts'; -import { injectedUpdatedAssetPaths } from '../../../src/output/injectedUpdatedAssetPaths.js'; +import { injectedUpdatedAssetPaths } from '../../../src/output/injectedUpdatedAssetPaths.ts'; describe('injectedUpdatedAssetPaths()', () => { it('injects updated asset paths', () => { diff --git a/packages/rollup-plugin-html/tsconfig.json b/packages/rollup-plugin-html/tsconfig.json index 4b7a7f52c4..f8a792dc54 100644 --- a/packages/rollup-plugin-html/tsconfig.json +++ b/packages/rollup-plugin-html/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -22,5 +21,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/rollup-plugin-import-meta-assets/test/integration.test.js b/packages/rollup-plugin-import-meta-assets/test/integration.test.js index 88eb78b67e..9c1ac78be8 100644 --- a/packages/rollup-plugin-import-meta-assets/test/integration.test.js +++ b/packages/rollup-plugin-import-meta-assets/test/integration.test.js @@ -137,9 +137,8 @@ describe('rollup-plugin-import-meta-assets', () => { it('multiple level bundle (upward modules)', async () => { const config = { input: { - 'multi-level-bundle': require.resolve( - './fixtures/one/two/three/four/multi-level-entrypoint-deep.js', - ), + 'multi-level-bundle': + require.resolve('./fixtures/one/two/three/four/multi-level-entrypoint-deep.js'), }, plugins: [importMetaAssets()], }; @@ -159,9 +158,8 @@ describe('rollup-plugin-import-meta-assets', () => { it('different asset levels', async () => { const config = { input: { - 'different-asset-levels-bundle': require.resolve( - './fixtures/one/two/different-asset-levels-entrypoint.js', - ), + 'different-asset-levels-bundle': + require.resolve('./fixtures/one/two/different-asset-levels-entrypoint.js'), }, plugins: [importMetaAssets()], }; diff --git a/packages/rollup-plugin-import-meta-assets/tsconfig.json b/packages/rollup-plugin-import-meta-assets/tsconfig.json index ed459265dd..04dd828885 100644 --- a/packages/rollup-plugin-import-meta-assets/tsconfig.json +++ b/packages/rollup-plugin-import-meta-assets/tsconfig.json @@ -3,8 +3,11 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "node16", - "moduleResolution": "node16", + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false, + "strict": false, + "skipLibCheck": true, "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -21,5 +24,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/rollup-plugin-polyfills-loader/package.json b/packages/rollup-plugin-polyfills-loader/package.json index f652f87ca1..6af195e2f7 100644 --- a/packages/rollup-plugin-polyfills-loader/package.json +++ b/packages/rollup-plugin-polyfills-loader/package.json @@ -1,5 +1,6 @@ { "name": "@web/rollup-plugin-polyfills-loader", + "type": "module", "version": "2.1.3", "publishConfig": { "access": "public" @@ -16,13 +17,12 @@ "main": "dist/index.js", "exports": { ".": { - "import": "./index.mjs", - "require": "./dist/index.js", - "types": "./dist/index.d.ts" + "types": "./dist/index.d.ts", + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "test:node": "mocha test/**/*.test.ts --require ts-node/register --reporter dot", @@ -32,7 +32,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], diff --git a/packages/rollup-plugin-polyfills-loader/src/createPolyfillsLoaderConfig.ts b/packages/rollup-plugin-polyfills-loader/src/createPolyfillsLoaderConfig.ts index dae87d3f5b..516ca35a5e 100644 --- a/packages/rollup-plugin-polyfills-loader/src/createPolyfillsLoaderConfig.ts +++ b/packages/rollup-plugin-polyfills-loader/src/createPolyfillsLoaderConfig.ts @@ -2,8 +2,8 @@ import { EntrypointBundle } from '@web/rollup-plugin-html'; import { PolyfillsLoaderConfig, FileType, fileTypes } from '@web/polyfills-loader'; import { ModuleFormat } from 'rollup'; -import { RollupPluginPolyfillsLoaderConfig } from './types'; -import { createError } from './utils.js'; +import { RollupPluginPolyfillsLoaderConfig } from './types.ts'; +import { createError } from './utils.ts'; export function formatToFileType(format: ModuleFormat) { switch (format) { diff --git a/packages/rollup-plugin-polyfills-loader/src/index.ts b/packages/rollup-plugin-polyfills-loader/src/index.ts index c17f274c70..a3136f0034 100644 --- a/packages/rollup-plugin-polyfills-loader/src/index.ts +++ b/packages/rollup-plugin-polyfills-loader/src/index.ts @@ -1,4 +1,4 @@ -import { polyfillsLoader } from './rollupPluginPolyfillsLoader.js'; +import { polyfillsLoader } from './rollupPluginPolyfillsLoader.ts'; export default polyfillsLoader; export { polyfillsLoader }; diff --git a/packages/rollup-plugin-polyfills-loader/src/rollupPluginPolyfillsLoader.ts b/packages/rollup-plugin-polyfills-loader/src/rollupPluginPolyfillsLoader.ts index 7fe2085997..877252a4b0 100644 --- a/packages/rollup-plugin-polyfills-loader/src/rollupPluginPolyfillsLoader.ts +++ b/packages/rollup-plugin-polyfills-loader/src/rollupPluginPolyfillsLoader.ts @@ -3,9 +3,9 @@ import { Plugin } from 'rollup'; import { GeneratedFile, injectPolyfillsLoader, File, fileTypes } from '@web/polyfills-loader'; import path from 'path'; -import { RollupPluginPolyfillsLoaderConfig } from './types'; -import { createError, shouldInjectLoader } from './utils.js'; -import { createPolyfillsLoaderConfig, formatToFileType } from './createPolyfillsLoaderConfig.js'; +import { RollupPluginPolyfillsLoaderConfig } from './types.ts'; +import { createError, shouldInjectLoader } from './utils.ts'; +import { createPolyfillsLoaderConfig, formatToFileType } from './createPolyfillsLoaderConfig.ts'; export function polyfillsLoader(pluginOptions: RollupPluginPolyfillsLoaderConfig = {}): Plugin { let generatedFiles: GeneratedFile[] | undefined; diff --git a/packages/rollup-plugin-polyfills-loader/test/src/createPolyfillsLoaderConfig.test.ts b/packages/rollup-plugin-polyfills-loader/test/src/createPolyfillsLoaderConfig.test.ts index 3e15905d13..e82d59d517 100644 --- a/packages/rollup-plugin-polyfills-loader/test/src/createPolyfillsLoaderConfig.test.ts +++ b/packages/rollup-plugin-polyfills-loader/test/src/createPolyfillsLoaderConfig.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { createPolyfillsLoaderConfig } from '../../src/createPolyfillsLoaderConfig.js'; +import { createPolyfillsLoaderConfig } from '../../src/createPolyfillsLoaderConfig.ts'; describe('createPolyfillsLoaderConfig()', () => { it('creates a config for a single module build', () => { diff --git a/packages/rollup-plugin-polyfills-loader/test/src/rollupPluginPolyfillsLoader.test.ts b/packages/rollup-plugin-polyfills-loader/test/src/rollupPluginPolyfillsLoader.test.ts index 65e86d6b35..a575c4a4c3 100644 --- a/packages/rollup-plugin-polyfills-loader/test/src/rollupPluginPolyfillsLoader.test.ts +++ b/packages/rollup-plugin-polyfills-loader/test/src/rollupPluginPolyfillsLoader.test.ts @@ -4,7 +4,7 @@ import { expect } from 'chai'; import fs from 'fs'; import path from 'path'; import { rollupPluginHTML as html } from '@web/rollup-plugin-html'; -import polyfillsLoader from '../../src/index.js'; +import polyfillsLoader from '../../src/index.ts'; type Output = (OutputChunk | OutputAsset)[]; diff --git a/packages/rollup-plugin-polyfills-loader/test/src/utils.test.ts b/packages/rollup-plugin-polyfills-loader/test/src/utils.test.ts index 22ca42691a..cdb8b4c5fc 100644 --- a/packages/rollup-plugin-polyfills-loader/test/src/utils.test.ts +++ b/packages/rollup-plugin-polyfills-loader/test/src/utils.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import { fileTypes } from '@web/polyfills-loader'; -import { shouldInjectLoader } from '../../src/utils.js'; +import { shouldInjectLoader } from '../../src/utils.ts'; describe('shouldInjectLoader', () => { it('returns true when modern contains non-module or script', () => { diff --git a/packages/rollup-plugin-polyfills-loader/tsconfig.json b/packages/rollup-plugin-polyfills-loader/tsconfig.json index 0775fcc8ee..52215b846a 100644 --- a/packages/rollup-plugin-polyfills-loader/tsconfig.json +++ b/packages/rollup-plugin-polyfills-loader/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -28,5 +27,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/rollup-plugin-workbox/tsconfig.json b/packages/rollup-plugin-workbox/tsconfig.json index 9bc06410a7..8d1c3eac59 100644 --- a/packages/rollup-plugin-workbox/tsconfig.json +++ b/packages/rollup-plugin-workbox/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -20,5 +19,12 @@ "exclude": [ "dist", "demo" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/storybook-builder/src/generate-app-script.ts b/packages/storybook-builder/src/generate-app-script.ts index c88ec59f0a..d915f09ac8 100644 --- a/packages/storybook-builder/src/generate-app-script.ts +++ b/packages/storybook-builder/src/generate-app-script.ts @@ -3,7 +3,7 @@ import { normalizePath } from '@rollup/pluginutils'; import { loadPreviewOrConfigFile } from '@storybook/core-common'; import type { Options, PreviewAnnotation } from '@storybook/types'; -import { virtualSetupAddonsFilename, virtualStoriesFilename } from './virtual-file-names.js'; +import { virtualSetupAddonsFilename, virtualStoriesFilename } from './virtual-file-names.ts'; export async function generateAppScript(options: Options) { const { presets, configDir } = options; diff --git a/packages/storybook-builder/src/generate-iframe-html.ts b/packages/storybook-builder/src/generate-iframe-html.ts index 8f4e2235d3..27d94cffb8 100644 --- a/packages/storybook-builder/src/generate-iframe-html.ts +++ b/packages/storybook-builder/src/generate-iframe-html.ts @@ -3,7 +3,7 @@ import { normalizeStories } from '@storybook/core-common'; import type { DocsOptions, Options, TagsOptions } from '@storybook/types'; import { readFile } from 'node:fs/promises'; -import { virtualAppFilename } from './virtual-file-names.js'; +import { virtualAppFilename } from './virtual-file-names.ts'; export type PreviewHtml = string | undefined; diff --git a/packages/storybook-builder/src/generate-stories-script.ts b/packages/storybook-builder/src/generate-stories-script.ts index 2069dd2402..e7d0461e46 100644 --- a/packages/storybook-builder/src/generate-stories-script.ts +++ b/packages/storybook-builder/src/generate-stories-script.ts @@ -3,7 +3,7 @@ import { normalizePath } from '@rollup/pluginutils'; import type { Options } from '@storybook/types'; import { relative } from 'node:path'; -import { listStories } from './list-stories'; +import { listStories } from './list-stories.ts'; export async function generateStoriesScript(options: Options): Promise { // First we need to get an array of stories and their absolute paths. diff --git a/packages/storybook-builder/src/index.ts b/packages/storybook-builder/src/index.ts index 410e66d6d8..e8ded83046 100644 --- a/packages/storybook-builder/src/index.ts +++ b/packages/storybook-builder/src/index.ts @@ -1,5 +1,8 @@ -import rollupPluginNodeResolve from '@rollup/plugin-node-resolve'; -import rollupPluginReplace from '@rollup/plugin-replace'; +import * as _rollupPluginNodeResolve from '@rollup/plugin-node-resolve'; +const rollupPluginNodeResolve = + (_rollupPluginNodeResolve as any).default ?? _rollupPluginNodeResolve; +import * as _rollupPluginReplace from '@rollup/plugin-replace'; +const rollupPluginReplace = (_rollupPluginReplace as any).default ?? _rollupPluginReplace; import { getBuilderOptions } from '@storybook/core-common'; import { logger } from '@storybook/node-logger'; // Import both globals and globalsNameReferenceMap to prevent retrocompatibility. @@ -13,18 +16,19 @@ import { rollupPluginHTML } from '@web/rollup-plugin-html'; import { cp } from 'node:fs/promises'; import { join, parse, resolve } from 'node:path'; import { OutputOptions, RollupBuild, RollupOptions, rollup } from 'rollup'; +// @ts-ignore CJS module with export= syntax import rollupPluginExternalGlobals from 'rollup-plugin-external-globals'; import sirv from 'sirv'; -import { generateIframeHtml } from './generate-iframe-html.js'; -import { getNodeModuleDir } from './get-node-module-dir.js'; -import { readFileConfig } from './read-file-config.js'; -import { rollupPluginMdx } from './rollup-plugin-mdx.js'; +import { generateIframeHtml } from './generate-iframe-html.ts'; +import { getNodeModuleDir } from './get-node-module-dir.ts'; +import { readFileConfig } from './read-file-config.ts'; +import { rollupPluginMdx } from './rollup-plugin-mdx.ts'; import { PREBUNDLED_MODULES_DIR, rollupPluginPrebundleModules, -} from './rollup-plugin-prebundle-modules.js'; -import { rollupPluginStorybookBuilder } from './rollup-plugin-storybook-builder.js'; -import { stringifyProcessEnvs } from './stringify-process-envs.js'; +} from './rollup-plugin-prebundle-modules.ts'; +import { rollupPluginStorybookBuilder } from './rollup-plugin-storybook-builder.ts'; +import { stringifyProcessEnvs } from './stringify-process-envs.ts'; const wdsPluginExternalGlobals = fromRollup(rollupPluginExternalGlobals); const wdsPluginMdx = fromRollup(rollupPluginMdx); diff --git a/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts b/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts index ae2fb7cbdb..e7207831ec 100644 --- a/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts +++ b/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts @@ -3,8 +3,8 @@ import { build } from 'esbuild'; import { readFile, rm } from 'node:fs/promises'; import { dirname, isAbsolute, join, normalize } from 'node:path'; import type { Plugin } from 'rollup'; -import { esbuildPluginCommonjsNamedExports } from './esbuild-plugin-commonjs-named-exports.js'; -import { stringifyProcessEnvs } from './stringify-process-envs.js'; +import { esbuildPluginCommonjsNamedExports } from './esbuild-plugin-commonjs-named-exports.ts'; +import { stringifyProcessEnvs } from './stringify-process-envs.ts'; export const PREBUNDLED_MODULES_DIR = normalize('node_modules/.prebundled_modules'); diff --git a/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts b/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts index 05bf90dbf6..77d1ad7366 100644 --- a/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts +++ b/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts @@ -1,15 +1,15 @@ import type { Options } from '@storybook/types'; import type { Plugin } from 'rollup'; -import { generateAppScript } from './generate-app-script.js'; -import { generateSetupAddonsScript } from './generate-setup-addons-script.js'; -import { generateStoriesScript } from './generate-stories-script.js'; -import { injectExportsOrder } from './inject-exports-order.js'; -import { listStories } from './list-stories.js'; +import { generateAppScript } from './generate-app-script.ts'; +import { generateSetupAddonsScript } from './generate-setup-addons-script.ts'; +import { generateStoriesScript } from './generate-stories-script.ts'; +import { injectExportsOrder } from './inject-exports-order.ts'; +import { listStories } from './list-stories.ts'; import { virtualAppFilename, virtualSetupAddonsFilename, virtualStoriesFilename, -} from './virtual-file-names.js'; +} from './virtual-file-names.ts'; export function rollupPluginStorybookBuilder(options: Options): Plugin { let storyFilePaths: string[]; diff --git a/packages/storybook-builder/tsconfig.json b/packages/storybook-builder/tsconfig.json index 626f90654d..3c3c2183d1 100644 --- a/packages/storybook-builder/tsconfig.json +++ b/packages/storybook-builder/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -52,5 +51,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/storybook-framework-web-components/src/index.ts b/packages/storybook-framework-web-components/src/index.ts index d4702960d5..ff43d9202e 100644 --- a/packages/storybook-framework-web-components/src/index.ts +++ b/packages/storybook-framework-web-components/src/index.ts @@ -1 +1 @@ -export * from './types.js'; +export * from './types.ts'; diff --git a/packages/storybook-framework-web-components/src/preset.ts b/packages/storybook-framework-web-components/src/preset.ts index ea657f479a..54f3b55481 100644 --- a/packages/storybook-framework-web-components/src/preset.ts +++ b/packages/storybook-framework-web-components/src/preset.ts @@ -1,5 +1,5 @@ import type { PresetProperty } from '@storybook/types'; -import type { StorybookConfig } from './types.js'; +import type { StorybookConfig } from './types.ts'; export const core: PresetProperty<'core', StorybookConfig> = { builder: '@web/storybook-builder', diff --git a/packages/storybook-framework-web-components/tsconfig.json b/packages/storybook-framework-web-components/tsconfig.json index 5b296657f7..b1c7a73a92 100644 --- a/packages/storybook-framework-web-components/tsconfig.json +++ b/packages/storybook-framework-web-components/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -61,5 +60,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/storybook-utils/tsconfig.json b/packages/storybook-utils/tsconfig.json index 90c48fa743..2c51aa77ab 100644 --- a/packages/storybook-utils/tsconfig.json +++ b/packages/storybook-utils/tsconfig.json @@ -3,10 +3,13 @@ { "extends": "../../tsconfig.browser-base.json", "compilerOptions": { - "module": "ESNext", "outDir": "./dist", "rootDir": "./src", "composite": true, + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false, + "strict": false, "allowJs": true, "checkJs": true, "emitDeclarationOnly": true @@ -20,5 +23,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-browserstack/src/browserstackLauncher.ts b/packages/test-runner-browserstack/src/browserstackLauncher.ts index bf86abff84..cff05764d6 100644 --- a/packages/test-runner-browserstack/src/browserstackLauncher.ts +++ b/packages/test-runner-browserstack/src/browserstackLauncher.ts @@ -6,7 +6,7 @@ import { registerBrowserstackLocal, unregisterBrowserstackLocal, localId, -} from './browserstackManager.js'; +} from './browserstackManager.ts'; export interface BrowserstackLauncherArgs { capabilities: Record; diff --git a/packages/test-runner-browserstack/src/index.ts b/packages/test-runner-browserstack/src/index.ts index b0455aa2ab..6c1ed6f1ad 100644 --- a/packages/test-runner-browserstack/src/index.ts +++ b/packages/test-runner-browserstack/src/index.ts @@ -1 +1 @@ -export { browserstackLauncher } from './browserstackLauncher.js'; +export { browserstackLauncher } from './browserstackLauncher.ts'; diff --git a/packages/test-runner-browserstack/tsconfig.json b/packages/test-runner-browserstack/tsconfig.json index 46eb9c084b..a2d3413622 100644 --- a/packages/test-runner-browserstack/tsconfig.json +++ b/packages/test-runner-browserstack/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -40,5 +39,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-chrome/src/ChromeLauncher.ts b/packages/test-runner-chrome/src/ChromeLauncher.ts index 6c4c2181ce..442ec7aace 100644 --- a/packages/test-runner-chrome/src/ChromeLauncher.ts +++ b/packages/test-runner-chrome/src/ChromeLauncher.ts @@ -7,8 +7,8 @@ import { BrowserContext, } from 'puppeteer-core'; import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; -import { findExecutablePath } from './findExecutablePath.js'; -import { ChromeLauncherPage } from './ChromeLauncherPage.js'; +import { findExecutablePath } from './findExecutablePath.ts'; +import { ChromeLauncherPage } from './ChromeLauncherPage.ts'; function capitalize(str: string) { return `${str[0].toUpperCase()}${str.substring(1)}`; diff --git a/packages/test-runner-chrome/src/index.ts b/packages/test-runner-chrome/src/index.ts index 53636cc72d..5bfcc74d01 100644 --- a/packages/test-runner-chrome/src/index.ts +++ b/packages/test-runner-chrome/src/index.ts @@ -1,5 +1,5 @@ import * as puppeteerCore from 'puppeteer-core'; -import { ChromeLauncher, CreateBrowserContextFn, CreatePageFn } from './ChromeLauncher.js'; +import { ChromeLauncher, CreateBrowserContextFn, CreatePageFn } from './ChromeLauncher.ts'; import { LaunchOptions } from 'puppeteer-core'; export interface ChromeLauncherArgs { diff --git a/packages/test-runner-chrome/test/chromeLauncher.test.ts b/packages/test-runner-chrome/test/chromeLauncher.test.ts index 7e129d103a..6b68130715 100644 --- a/packages/test-runner-chrome/test/chromeLauncher.test.ts +++ b/packages/test-runner-chrome/test/chromeLauncher.test.ts @@ -1,5 +1,5 @@ -import { runIntegrationTests } from '../../../integration/test-runner/index.js'; -import { chromeLauncher } from '../src/index.js'; +import { runIntegrationTests } from '../../../integration/test-runner/index.ts'; +import { chromeLauncher } from '../src/index.ts'; describe('test-runner-chrome', function testRunnerChrome() { this.timeout(20000); diff --git a/packages/test-runner-chrome/tsconfig.json b/packages/test-runner-chrome/tsconfig.json index 99982d745e..a621e25184 100644 --- a/packages/test-runner-chrome/tsconfig.json +++ b/packages/test-runner-chrome/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -37,5 +36,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-commands/package.json b/packages/test-runner-commands/package.json index 2df75239d9..51707b3aa7 100644 --- a/packages/test-runner-commands/package.json +++ b/packages/test-runner-commands/package.json @@ -1,5 +1,6 @@ { "name": "@web/test-runner-commands", + "type": "module", "version": "0.9.0", "publishConfig": { "access": "public" @@ -13,7 +14,7 @@ }, "author": "modern-web", "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/test-runner-commands", - "main": "browser/commands.mjs", + "main": "dist/index.js", "exports": { ".": { "types": "./browser/commands.d.ts", @@ -21,12 +22,11 @@ }, "./plugins": { "types": "./plugins.d.ts", - "import": "./plugins.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -36,7 +36,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "browser", "dist", "src" @@ -55,7 +54,6 @@ "devDependencies": { "@web/test-runner-chrome": "^0.18.0", "@web/test-runner-playwright": "^0.11.0", - "@web/test-runner-webdriver": "^0.9.0", - "mocha": "^10.8.2" + "@web/test-runner-webdriver": "^0.9.0" } } diff --git a/packages/test-runner-commands/src/a11ySnapshotPlugin.ts b/packages/test-runner-commands/src/a11ySnapshotPlugin.ts index 99eee09dc3..bae69e5650 100644 --- a/packages/test-runner-commands/src/a11ySnapshotPlugin.ts +++ b/packages/test-runner-commands/src/a11ySnapshotPlugin.ts @@ -21,6 +21,7 @@ export function a11ySnapshotPlugin(): TestRunnerPlugin { options.root = root; } } + // @ts-ignore - accessibility API exists at runtime but types are outdated const snapshot = await page.accessibility.snapshot(options); return snapshot; } diff --git a/packages/test-runner-commands/src/index.ts b/packages/test-runner-commands/src/index.ts index 78e49c212a..d6bf7711b0 100644 --- a/packages/test-runner-commands/src/index.ts +++ b/packages/test-runner-commands/src/index.ts @@ -1,9 +1,9 @@ -export { Viewport, setViewportPlugin } from './setViewportPlugin.js'; -export { Media, emulateMediaPlugin } from './emulateMediaPlugin.js'; -export { selectOptionPlugin, SelectOptionPayload } from './selectOptionPlugin.js'; -export { setUserAgentPlugin } from './setUserAgentPlugin.js'; -export { sendKeysPlugin, SendKeysPayload } from './sendKeysPlugin.js'; -export { sendMousePlugin, SendMousePayload } from './sendMousePlugin.js'; -export { a11ySnapshotPlugin, A11ySnapshotPayload } from './a11ySnapshotPlugin.js'; -export { WriteFilePayload, ReadFilePayload, RemoveFilePayload, filePlugin } from './filePlugin.js'; -export { SaveSnapshotPayload, SnapshotPluginConfig, snapshotPlugin } from './snapshotPlugin.js'; +export { Viewport, setViewportPlugin } from './setViewportPlugin.ts'; +export { Media, emulateMediaPlugin } from './emulateMediaPlugin.ts'; +export { selectOptionPlugin, SelectOptionPayload } from './selectOptionPlugin.ts'; +export { setUserAgentPlugin } from './setUserAgentPlugin.ts'; +export { sendKeysPlugin, SendKeysPayload } from './sendKeysPlugin.ts'; +export { sendMousePlugin, SendMousePayload } from './sendMousePlugin.ts'; +export { a11ySnapshotPlugin, A11ySnapshotPayload } from './a11ySnapshotPlugin.ts'; +export { WriteFilePayload, ReadFilePayload, RemoveFilePayload, filePlugin } from './filePlugin.ts'; +export { SaveSnapshotPayload, SnapshotPluginConfig, snapshotPlugin } from './snapshotPlugin.ts'; diff --git a/packages/test-runner-commands/test/a11y-snapshot/a11ySnapshotPlugin.test.ts b/packages/test-runner-commands/test/a11y-snapshot/a11ySnapshotPlugin.test.ts index bc57f48537..61f7a36df1 100644 --- a/packages/test-runner-commands/test/a11y-snapshot/a11ySnapshotPlugin.test.ts +++ b/packages/test-runner-commands/test/a11y-snapshot/a11ySnapshotPlugin.test.ts @@ -3,7 +3,7 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { a11ySnapshotPlugin } from '../../src/a11ySnapshotPlugin.js'; +import { a11ySnapshotPlugin } from '../../src/a11ySnapshotPlugin.ts'; describe('a11ySnapshotPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/emulate-media/emulateMediaPlugin.test.ts b/packages/test-runner-commands/test/emulate-media/emulateMediaPlugin.test.ts index 276b150650..154754f410 100644 --- a/packages/test-runner-commands/test/emulate-media/emulateMediaPlugin.test.ts +++ b/packages/test-runner-commands/test/emulate-media/emulateMediaPlugin.test.ts @@ -3,7 +3,7 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { emulateMediaPlugin } from '../../src/emulateMediaPlugin.js'; +import { emulateMediaPlugin } from '../../src/emulateMediaPlugin.ts'; describe('emulateMediaPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/execute-server-command/executeServerCommand.test.ts b/packages/test-runner-commands/test/execute-server-command/executeServerCommand.test.ts index aa6019acea..c6cfb69dfd 100644 --- a/packages/test-runner-commands/test/execute-server-command/executeServerCommand.test.ts +++ b/packages/test-runner-commands/test/execute-server-command/executeServerCommand.test.ts @@ -1,10 +1,7 @@ import path from 'path'; import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; -import type { Logger } from '@web/dev-server-core'; - -describe('executeServerCommand', function test() { - this.timeout(20000); +import type { Logger } from '@web/dev-server-core';describe('executeServerCommand', function test() { this.timeout(20000); it('can execute commands', async () => { const logger: Logger = { diff --git a/packages/test-runner-commands/test/file/filePlugin.test.ts b/packages/test-runner-commands/test/file/filePlugin.test.ts index b53fc9007e..09c672eb9e 100644 --- a/packages/test-runner-commands/test/file/filePlugin.test.ts +++ b/packages/test-runner-commands/test/file/filePlugin.test.ts @@ -2,7 +2,7 @@ import path from 'path'; import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; -import { filePlugin } from '../../src/filePlugin.js'; +import { filePlugin } from '../../src/filePlugin.ts'; describe('filePlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/select-option/selectOptionPlugin.test.ts b/packages/test-runner-commands/test/select-option/selectOptionPlugin.test.ts index dc22342bde..2661f05c99 100644 --- a/packages/test-runner-commands/test/select-option/selectOptionPlugin.test.ts +++ b/packages/test-runner-commands/test/select-option/selectOptionPlugin.test.ts @@ -3,7 +3,7 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { selectOptionPlugin } from '../../src/selectOptionPlugin.js'; +import { selectOptionPlugin } from '../../src/selectOptionPlugin.ts'; describe('selectOptionPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/send-keys/sendKeysPlugin.test.ts b/packages/test-runner-commands/test/send-keys/sendKeysPlugin.test.ts index 3d823f37bd..0bcef18e19 100644 --- a/packages/test-runner-commands/test/send-keys/sendKeysPlugin.test.ts +++ b/packages/test-runner-commands/test/send-keys/sendKeysPlugin.test.ts @@ -3,7 +3,7 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { sendKeysPlugin } from '../../src/sendKeysPlugin.js'; +import { sendKeysPlugin } from '../../src/sendKeysPlugin.ts'; describe('sendKeysPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/send-mouse/sendMousePlugin.test.ts b/packages/test-runner-commands/test/send-mouse/sendMousePlugin.test.ts index a3d2b81305..ab9fc81fd9 100644 --- a/packages/test-runner-commands/test/send-mouse/sendMousePlugin.test.ts +++ b/packages/test-runner-commands/test/send-mouse/sendMousePlugin.test.ts @@ -4,8 +4,8 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { webdriverLauncher } from '@web/test-runner-webdriver'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { sendMousePlugin } from '../../src/sendMousePlugin.js'; -import { startSeleniumServer } from '../selenium-server.js'; +import { sendMousePlugin } from '../../src/sendMousePlugin.ts'; +import { startSeleniumServer } from '../selenium-server.ts'; describe('sendMousePlugin', function test() { this.timeout(50000); diff --git a/packages/test-runner-commands/test/set-user-agent/setUserAgentPlugin.test.ts b/packages/test-runner-commands/test/set-user-agent/setUserAgentPlugin.test.ts index 47af2f2c94..eb9d372ce0 100644 --- a/packages/test-runner-commands/test/set-user-agent/setUserAgentPlugin.test.ts +++ b/packages/test-runner-commands/test/set-user-agent/setUserAgentPlugin.test.ts @@ -2,7 +2,7 @@ import path from 'path'; import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; -import { setUserAgentPlugin } from '../../src/setUserAgentPlugin.js'; +import { setUserAgentPlugin } from '../../src/setUserAgentPlugin.ts'; describe('setUserAgentPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/set-viewport/setViewportPlugin.test.ts b/packages/test-runner-commands/test/set-viewport/setViewportPlugin.test.ts index 565efe6ffb..4c85069ca6 100644 --- a/packages/test-runner-commands/test/set-viewport/setViewportPlugin.test.ts +++ b/packages/test-runner-commands/test/set-viewport/setViewportPlugin.test.ts @@ -4,7 +4,7 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { setViewportPlugin } from '../../src/setViewportPlugin.js'; +import { setViewportPlugin } from '../../src/setViewportPlugin.ts'; describe('setViewportPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/test/snapshot/snapshotPlugin.test.ts b/packages/test-runner-commands/test/snapshot/snapshotPlugin.test.ts index 4d52f8ca32..00375c3213 100644 --- a/packages/test-runner-commands/test/snapshot/snapshotPlugin.test.ts +++ b/packages/test-runner-commands/test/snapshot/snapshotPlugin.test.ts @@ -2,7 +2,7 @@ import path from 'path'; import { runTests } from '@web/test-runner-core/test-helpers'; import { playwrightLauncher } from '@web/test-runner-playwright'; -import { snapshotPlugin } from '../../src/snapshotPlugin.js'; +import { snapshotPlugin } from '../../src/snapshotPlugin.ts'; describe('snapshotPlugin', function test() { this.timeout(20000); diff --git a/packages/test-runner-commands/tsconfig.json b/packages/test-runner-commands/tsconfig.json index d7bae1ca2e..ed095def56 100644 --- a/packages/test-runner-commands/tsconfig.json +++ b/packages/test-runner-commands/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -46,5 +45,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-core/package.json b/packages/test-runner-core/package.json index d0a2ea62a5..c0a7034abf 100644 --- a/packages/test-runner-core/package.json +++ b/packages/test-runner-core/package.json @@ -1,5 +1,6 @@ { "name": "@web/test-runner-core", + "type": "module", "version": "0.13.4", "publishConfig": { "access": "public" @@ -18,18 +19,16 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" }, "./test-helpers": { "types": "./dist/test-helpers.d.ts", - "import": "./test-helpers.mjs", - "require": "./dist/test-helpers.js" + "default": "./dist/test-helpers.js" }, "./browser/session.js": "./browser/session.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -39,7 +38,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "browser", "dist", "src" @@ -67,15 +65,15 @@ "convert-source-map": "^2.0.0", "debounce": "^1.2.0", "dependency-graph": "^0.11.0", - "globby": "^11.0.1", + "globby": "^11.1.0", "internal-ip": "^6.2.0", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.0.2", "log-update": "^4.0.0", - "nanocolors": "^0.2.1", + "nanocolors": "^0.2.13", "nanoid": "^3.1.25", - "open": "^8.0.2", + "open": "^8.4.2", "picomatch": "^2.2.2", "source-map": "^0.7.3" }, diff --git a/packages/test-runner-core/src/browser-launcher/BrowserLauncher.ts b/packages/test-runner-core/src/browser-launcher/BrowserLauncher.ts index 085c4488bd..2bc2381fc7 100644 --- a/packages/test-runner-core/src/browser-launcher/BrowserLauncher.ts +++ b/packages/test-runner-core/src/browser-launcher/BrowserLauncher.ts @@ -1,7 +1,6 @@ import type { CoverageMapData } from 'istanbul-lib-coverage'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig'; -import { type TestResultError } from '../test-session/TestSession'; - +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestResultError } from '../test-session/TestSession.ts'; export interface SessionResult { testCoverage?: CoverageMapData; errors?: TestResultError[]; diff --git a/packages/test-runner-core/src/cli/BufferedLogger.ts b/packages/test-runner-core/src/cli/BufferedLogger.ts index 999b743020..d0716c2df1 100644 --- a/packages/test-runner-core/src/cli/BufferedLogger.ts +++ b/packages/test-runner-core/src/cli/BufferedLogger.ts @@ -1,5 +1,4 @@ -import { type Logger, type ErrorWithLocation } from '../logger/Logger'; - +import { type Logger, type ErrorWithLocation } from '../logger/Logger.ts'; export class BufferedLogger implements Logger { public buffer: { method: keyof Logger; args?: any[] }[] = []; diff --git a/packages/test-runner-core/src/cli/TestRunnerCli.ts b/packages/test-runner-core/src/cli/TestRunnerCli.ts index 26ddf3ae39..2de1e37c99 100644 --- a/packages/test-runner-core/src/cli/TestRunnerCli.ts +++ b/packages/test-runner-core/src/cli/TestRunnerCli.ts @@ -3,20 +3,19 @@ import path from 'path'; import { bold, cyan, red } from 'nanocolors'; import openBrowser from 'open'; -import { writeCoverageReport } from './writeCoverageReport.js'; -import { getSelectFilesMenu } from './getSelectFilesMenu.js'; -import { getWatchCommands } from './getWatchCommands.js'; -import { DynamicTerminal } from './terminal/DynamicTerminal.js'; -import { BufferedLogger } from './BufferedLogger.js'; -import { getManualDebugMenu } from './getManualDebugMenu.js'; -import { ErrorWithLocation } from '../logger/Logger.js'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { type TestSessionManager } from '../test-session/TestSessionManager.js'; -import { SESSION_STATUS } from '../test-session/TestSessionStatus.js'; -import { type Logger } from '../logger/Logger.js'; -import { TestRunner } from '../runner/TestRunner.js'; -import { type TestCoverage } from '../coverage/getTestCoverage.js'; - +import { writeCoverageReport } from './writeCoverageReport.ts'; +import { getSelectFilesMenu } from './getSelectFilesMenu.ts'; +import { getWatchCommands } from './getWatchCommands.ts'; +import { DynamicTerminal } from './terminal/DynamicTerminal.ts'; +import { BufferedLogger } from './BufferedLogger.ts'; +import { getManualDebugMenu } from './getManualDebugMenu.ts'; +import { ErrorWithLocation } from '../logger/Logger.ts'; +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestSessionManager } from '../test-session/TestSessionManager.ts'; +import { SESSION_STATUS } from '../test-session/TestSessionStatus.ts'; +import { type Logger } from '../logger/Logger.ts'; +import { TestRunner } from '../runner/TestRunner.ts'; +import { type TestCoverage } from '../coverage/getTestCoverage.ts'; export type MenuType = 'none' | 'overview' | 'focus' | 'debug' | 'manual-debug'; export const MENUS = { diff --git a/packages/test-runner-core/src/cli/getManualDebugMenu.ts b/packages/test-runner-core/src/cli/getManualDebugMenu.ts index 1cf75f9b32..f61f95d913 100644 --- a/packages/test-runner-core/src/cli/getManualDebugMenu.ts +++ b/packages/test-runner-core/src/cli/getManualDebugMenu.ts @@ -1,8 +1,7 @@ import { cyan, gray } from 'nanocolors'; import internalIp from 'internal-ip'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig'; - +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; export function getManualDebugMenu(config: TestRunnerCoreConfig): string[] { const localAddress = `${config.protocol}//${config.hostname}:${config.port}/`; const networkAddress = `${config.protocol}//${internalIp.v4.sync()}:${config.port}/`; diff --git a/packages/test-runner-core/src/cli/terminal/DynamicTerminal.ts b/packages/test-runner-core/src/cli/terminal/DynamicTerminal.ts index 720bf69e3d..98b10442fa 100644 --- a/packages/test-runner-core/src/cli/terminal/DynamicTerminal.ts +++ b/packages/test-runner-core/src/cli/terminal/DynamicTerminal.ts @@ -1,8 +1,8 @@ import logUpdate from 'log-update'; import cliCursor from 'cli-cursor'; -import { BufferedConsole } from './BufferedConsole.js'; -import { EventEmitter } from '../../utils/EventEmitter.js'; +import { BufferedConsole } from './BufferedConsole.ts'; +import { EventEmitter } from '../../utils/EventEmitter.ts'; const CLEAR_COMMAND = process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H'; diff --git a/packages/test-runner-core/src/cli/writeCoverageReport.ts b/packages/test-runner-core/src/cli/writeCoverageReport.ts index 95f5b3491d..0f90afb979 100644 --- a/packages/test-runner-core/src/cli/writeCoverageReport.ts +++ b/packages/test-runner-core/src/cli/writeCoverageReport.ts @@ -1,9 +1,8 @@ import reports from 'istanbul-reports'; import libReport from 'istanbul-lib-report'; -import { type CoverageConfig } from '../config/TestRunnerCoreConfig'; -import { type TestCoverage } from '../coverage/getTestCoverage'; - +import { type CoverageConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestCoverage } from '../coverage/getTestCoverage.ts'; export function writeCoverageReport(testCoverage: TestCoverage, config: CoverageConfig) { // create a context for report generation const context = libReport.createContext({ diff --git a/packages/test-runner-core/src/config/TestRunnerCoreConfig.ts b/packages/test-runner-core/src/config/TestRunnerCoreConfig.ts index 20b638a385..a976227efa 100644 --- a/packages/test-runner-core/src/config/TestRunnerCoreConfig.ts +++ b/packages/test-runner-core/src/config/TestRunnerCoreConfig.ts @@ -1,11 +1,10 @@ import { type Middleware } from '@web/dev-server-core'; -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; -import { type TestFramework } from '../test-framework/TestFramework.js'; -import { type TestSession } from '../test-session/TestSession.js'; -import { type Reporter } from '../reporter/Reporter.js'; -import { type Logger } from '../logger/Logger.js'; -import { type TestRunnerPlugin } from '../server/TestRunnerPlugin.js'; -import type { ReportType } from 'istanbul-reports'; +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; +import { type TestFramework } from '../test-framework/TestFramework.ts'; +import { type TestSession } from '../test-session/TestSession.ts'; +import { type Reporter } from '../reporter/Reporter.ts'; +import { type Logger } from '../logger/Logger.ts'; +import { type TestRunnerPlugin } from '../server/TestRunnerPlugin.ts';import type { ReportType } from 'istanbul-reports'; export interface CoverageThresholdConfig { statements: number; diff --git a/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts b/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts index c8a1a6e726..da474a767d 100644 --- a/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts +++ b/packages/test-runner-core/src/config/TestRunnerGroupConfig.ts @@ -1,6 +1,5 @@ -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher'; -import { type TestRunnerCoreConfig } from './TestRunnerCoreConfig.js'; - +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; +import { type TestRunnerCoreConfig } from './TestRunnerCoreConfig.ts'; export interface TestRunnerGroupConfig { name: string; configFilePath?: string; diff --git a/packages/test-runner-core/src/coverage/getTestCoverage.ts b/packages/test-runner-core/src/coverage/getTestCoverage.ts index cdcb412a7c..ab1cd446ee 100644 --- a/packages/test-runner-core/src/coverage/getTestCoverage.ts +++ b/packages/test-runner-core/src/coverage/getTestCoverage.ts @@ -8,9 +8,8 @@ import { type Location, type Range, } from 'istanbul-lib-coverage'; -import { type TestSession } from '../test-session/TestSession'; -import { type CoverageConfig } from '../config/TestRunnerCoreConfig'; - +import { type TestSession } from '../test-session/TestSession.ts'; +import { type CoverageConfig } from '../config/TestRunnerCoreConfig.ts'; export const coverageTypes: (keyof CoverageSummaryData)[] = [ 'lines', 'statements', diff --git a/packages/test-runner-core/src/index.ts b/packages/test-runner-core/src/index.ts index c410f73b7f..d6fea7aa0f 100644 --- a/packages/test-runner-core/src/index.ts +++ b/packages/test-runner-core/src/index.ts @@ -1,8 +1,8 @@ export { CoverageMapData } from 'istanbul-lib-coverage'; -import * as constants from './utils/constants.js'; +import * as constants from './utils/constants.ts'; export { constants }; -export { BrowserLauncher, SessionResult } from './browser-launcher/BrowserLauncher.js'; +export { BrowserLauncher, SessionResult } from './browser-launcher/BrowserLauncher.ts'; export { Reporter, ReportTestResultsArgs, @@ -11,30 +11,30 @@ export { TestRunArgs, TestRunStartedArgs, TestRunFinishedArgs, -} from './reporter/Reporter.js'; -export { TestRunner } from './runner/TestRunner.js'; -export { TestRunnerCli } from './cli/TestRunnerCli.js'; -export { BufferedLogger } from './cli/BufferedLogger.js'; -export { TestRunnerPlugin } from './server/TestRunnerPlugin.js'; -export { TestFramework } from './test-framework/TestFramework.js'; +} from './reporter/Reporter.ts'; +export { TestRunner } from './runner/TestRunner.ts'; +export { TestRunnerCli } from './cli/TestRunnerCli.ts'; +export { BufferedLogger } from './cli/BufferedLogger.ts'; +export { TestRunnerPlugin } from './server/TestRunnerPlugin.ts'; +export { TestFramework } from './test-framework/TestFramework.ts'; export { TestRunnerCoreConfig, CoverageConfig, CoverageThresholdConfig, -} from './config/TestRunnerCoreConfig.js'; -export { TestRunnerGroupConfig } from './config/TestRunnerGroupConfig.js'; -export { TestCoverage } from './coverage/getTestCoverage.js'; -export { Logger, ErrorWithLocation } from './logger/Logger.js'; +} from './config/TestRunnerCoreConfig.ts'; +export { TestRunnerGroupConfig } from './config/TestRunnerGroupConfig.ts'; +export { TestCoverage } from './coverage/getTestCoverage.ts'; +export { Logger, ErrorWithLocation } from './logger/Logger.ts'; export { TestSession, TestResultError, TestResult, TestSuiteResult, -} from './test-session/TestSession.js'; -export { DebugTestSession } from './test-session/DebugTestSession.js'; -export { BasicTestSession } from './test-session/BasicTestSession.js'; -export { TestSessionManager } from './test-session/TestSessionManager.js'; -export { TestSessionStatus, SESSION_STATUS } from './test-session/TestSessionStatus.js'; -export { EventEmitter } from './utils/EventEmitter.js'; -export { isTestFilePath } from './utils/isTestFilePath.js'; -export { fetchSourceMap } from './utils/fetchSourceMap.js'; +} from './test-session/TestSession.ts'; +export { DebugTestSession } from './test-session/DebugTestSession.ts'; +export { BasicTestSession } from './test-session/BasicTestSession.ts'; +export { TestSessionManager } from './test-session/TestSessionManager.ts'; +export { TestSessionStatus, SESSION_STATUS } from './test-session/TestSessionStatus.ts'; +export { EventEmitter } from './utils/EventEmitter.ts'; +export { isTestFilePath } from './utils/isTestFilePath.ts'; +export { fetchSourceMap } from './utils/fetchSourceMap.ts'; diff --git a/packages/test-runner-core/src/reporter/Reporter.ts b/packages/test-runner-core/src/reporter/Reporter.ts index 787dfeb936..c7d35dbb56 100644 --- a/packages/test-runner-core/src/reporter/Reporter.ts +++ b/packages/test-runner-core/src/reporter/Reporter.ts @@ -1,10 +1,9 @@ -import { type TestSession } from '../test-session/TestSession'; -import { type TestSessionManager } from '../test-session/TestSessionManager'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig'; -import { type TestCoverage } from '../coverage/getTestCoverage'; -import { type Logger } from '../logger/Logger'; -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher'; - +import { type TestSession } from '../test-session/TestSession.ts'; +import { type TestSessionManager } from '../test-session/TestSessionManager.ts'; +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestCoverage } from '../coverage/getTestCoverage.ts'; +import { type Logger } from '../logger/Logger.ts'; +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; export interface ReporterArgs { config: TestRunnerCoreConfig; sessions: TestSessionManager; diff --git a/packages/test-runner-core/src/runner/TestRunner.ts b/packages/test-runner-core/src/runner/TestRunner.ts index 4e91564aa9..c132c55fdb 100644 --- a/packages/test-runner-core/src/runner/TestRunner.ts +++ b/packages/test-runner-core/src/runner/TestRunner.ts @@ -1,17 +1,16 @@ -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { createTestSessions } from './createSessionGroups.js'; -import { type TestSession } from '../test-session/TestSession.js'; -import { getTestCoverage, type TestCoverage } from '../coverage/getTestCoverage.js'; -import { TestScheduler } from './TestScheduler.js'; -import { TestSessionManager } from '../test-session/TestSessionManager.js'; -import { SESSION_STATUS } from '../test-session/TestSessionStatus.js'; -import { EventEmitter } from '../utils/EventEmitter.js'; -import { createSessionUrl } from './createSessionUrl.js'; -import { createDebugSessions } from './createDebugSessions.js'; -import { TestRunnerServer } from '../server/TestRunnerServer.js'; -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; -import { type TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig.js'; - +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { createTestSessions } from './createSessionGroups.ts'; +import { type TestSession } from '../test-session/TestSession.ts'; +import { getTestCoverage, type TestCoverage } from '../coverage/getTestCoverage.ts'; +import { TestScheduler } from './TestScheduler.ts'; +import { TestSessionManager } from '../test-session/TestSessionManager.ts'; +import { SESSION_STATUS } from '../test-session/TestSessionStatus.ts'; +import { EventEmitter } from '../utils/EventEmitter.ts'; +import { createSessionUrl } from './createSessionUrl.ts'; +import { createDebugSessions } from './createDebugSessions.ts'; +import { TestRunnerServer } from '../server/TestRunnerServer.ts'; +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; +import { type TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig.ts'; interface EventMap { 'test-run-started': { testRun: number }; 'test-run-finished': { testRun: number; testCoverage?: TestCoverage }; diff --git a/packages/test-runner-core/src/runner/TestScheduler.ts b/packages/test-runner-core/src/runner/TestScheduler.ts index 77f65576a4..e451d0873a 100644 --- a/packages/test-runner-core/src/runner/TestScheduler.ts +++ b/packages/test-runner-core/src/runner/TestScheduler.ts @@ -1,12 +1,11 @@ -import { createSessionUrl } from './createSessionUrl.js'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { type TestSessionManager } from '../test-session/TestSessionManager.js'; -import { type TestSession, type TestResultError } from '../test-session/TestSession.js'; -import { SESSION_STATUS } from '../test-session/TestSessionStatus.js'; -import { withTimeout } from '../utils/async.js'; -import { TestSessionTimeoutHandler } from './TestSessionTimeoutHandler.js'; -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; - +import { createSessionUrl } from './createSessionUrl.ts'; +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestSessionManager } from '../test-session/TestSessionManager.ts'; +import { type TestSession, type TestResultError } from '../test-session/TestSession.ts'; +import { SESSION_STATUS } from '../test-session/TestSessionStatus.ts'; +import { withTimeout } from '../utils/async.ts'; +import { TestSessionTimeoutHandler } from './TestSessionTimeoutHandler.ts'; +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; export class TestScheduler { private config: TestRunnerCoreConfig; private sessions: TestSessionManager; diff --git a/packages/test-runner-core/src/runner/TestSessionTimeoutHandler.ts b/packages/test-runner-core/src/runner/TestSessionTimeoutHandler.ts index 570e6d988a..409fac2284 100644 --- a/packages/test-runner-core/src/runner/TestSessionTimeoutHandler.ts +++ b/packages/test-runner-core/src/runner/TestSessionTimeoutHandler.ts @@ -1,9 +1,8 @@ -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { type TestSessionManager } from '../test-session/TestSessionManager.js'; -import { type TestSession, type TestResultError } from '../test-session/TestSession.js'; -import { SESSION_STATUS } from '../test-session/TestSessionStatus.js'; -import { TestScheduler } from './TestScheduler.js'; - +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestSessionManager } from '../test-session/TestSessionManager.ts'; +import { type TestSession, type TestResultError } from '../test-session/TestSession.ts'; +import { SESSION_STATUS } from '../test-session/TestSessionStatus.ts'; +import { TestScheduler } from './TestScheduler.ts'; export class TestSessionTimeoutHandler { private timeoutIdsPerSession = new Map(); private config: TestRunnerCoreConfig; diff --git a/packages/test-runner-core/src/runner/createDebugSessions.ts b/packages/test-runner-core/src/runner/createDebugSessions.ts index fd41534679..3c27ec5171 100644 --- a/packages/test-runner-core/src/runner/createDebugSessions.ts +++ b/packages/test-runner-core/src/runner/createDebugSessions.ts @@ -1,7 +1,6 @@ import { nanoid } from 'nanoid'; -import { type DebugTestSession } from '../test-session/DebugTestSession'; -import { type TestSession } from '../test-session/TestSession'; - +import { type DebugTestSession } from '../test-session/DebugTestSession.ts'; +import { type TestSession } from '../test-session/TestSession.ts'; export function createDebugSessions(sessions: TestSession[]): DebugTestSession[] { const debugSessions = []; diff --git a/packages/test-runner-core/src/runner/createSessionGroups.ts b/packages/test-runner-core/src/runner/createSessionGroups.ts index 5309727ed3..c4abce83d7 100644 --- a/packages/test-runner-core/src/runner/createSessionGroups.ts +++ b/packages/test-runner-core/src/runner/createSessionGroups.ts @@ -1,14 +1,13 @@ import { nanoid } from 'nanoid'; import path from 'path'; -import { SESSION_STATUS } from '../test-session/TestSessionStatus.js'; -import { type TestSession } from '../test-session/TestSession.js'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { type TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig.js'; -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; -import { collectTestFiles } from './collectTestFiles.js'; -import { type TestSessionGroup } from '../test-session/TestSessionGroup.js'; - +import { SESSION_STATUS } from '../test-session/TestSessionStatus.ts'; +import { type TestSession } from '../test-session/TestSession.ts'; +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig.ts'; +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; +import { collectTestFiles } from './collectTestFiles.ts'; +import { type TestSessionGroup } from '../test-session/TestSessionGroup.ts'; interface GroupConfigWithoutOptionals extends TestRunnerGroupConfig { name: string; configFilePath?: string; diff --git a/packages/test-runner-core/src/runner/createSessionUrl.ts b/packages/test-runner-core/src/runner/createSessionUrl.ts index 59eb53defa..cd1fa2bc24 100644 --- a/packages/test-runner-core/src/runner/createSessionUrl.ts +++ b/packages/test-runner-core/src/runner/createSessionUrl.ts @@ -1,8 +1,7 @@ import path from 'path'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { PARAM_SESSION_ID } from '../utils/constants.js'; -import { type BasicTestSession } from '../test-session/BasicTestSession.js'; - +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { PARAM_SESSION_ID } from '../utils/constants.ts'; +import { type BasicTestSession } from '../test-session/BasicTestSession.ts'; const toBrowserPathRegExp = new RegExp(path.sep === '\\' ? '\\\\' : path.sep, 'g'); export function toBrowserPath(filePath: string) { diff --git a/packages/test-runner-core/src/server/TestRunnerPlugin.ts b/packages/test-runner-core/src/server/TestRunnerPlugin.ts index a31ecd4fe6..223c22a9da 100644 --- a/packages/test-runner-core/src/server/TestRunnerPlugin.ts +++ b/packages/test-runner-core/src/server/TestRunnerPlugin.ts @@ -1,6 +1,5 @@ import { type Plugin } from '@web/dev-server-core'; -import { type BasicTestSession } from '../test-session/BasicTestSession'; - +import { type BasicTestSession } from '../test-session/BasicTestSession.ts'; export type ExecuteCommandResult = void | unknown | Promise | Promise; export interface ExecuteCommandArgs { diff --git a/packages/test-runner-core/src/server/TestRunnerServer.ts b/packages/test-runner-core/src/server/TestRunnerServer.ts index d179d43024..9a62adcd68 100644 --- a/packages/test-runner-core/src/server/TestRunnerServer.ts +++ b/packages/test-runner-core/src/server/TestRunnerServer.ts @@ -1,15 +1,14 @@ import { DevServer, type Plugin } from '@web/dev-server-core'; import chokidar from 'chokidar'; -import { type RunSessions, watchFilesMiddleware } from './middleware/watchFilesMiddleware.js'; -import { cacheMiddleware } from './middleware/cacheMiddleware.js'; -import { serveTestRunnerHtmlPlugin } from './plugins/serveTestRunnerHtmlPlugin.js'; -import { serveTestFrameworkPlugin } from './plugins/serveTestFrameworkPlugin.js'; -import { testRunnerApiPlugin } from './plugins/api/testRunnerApiPlugin.js'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig'; -import { type TestSessionManager } from '../test-session/TestSessionManager'; -import { TestRunner } from '../runner/TestRunner'; - +import { type RunSessions, watchFilesMiddleware } from './middleware/watchFilesMiddleware.ts'; +import { cacheMiddleware } from './middleware/cacheMiddleware.ts'; +import { serveTestRunnerHtmlPlugin } from './plugins/serveTestRunnerHtmlPlugin.ts'; +import { serveTestFrameworkPlugin } from './plugins/serveTestFrameworkPlugin.ts'; +import { testRunnerApiPlugin } from './plugins/api/testRunnerApiPlugin.ts'; +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestSessionManager } from '../test-session/TestSessionManager.ts'; +import { TestRunner } from '../runner/TestRunner.ts'; const CACHED_PATTERNS = [ 'node_modules/@web/test-runner-', 'node_modules/@esm-bundle/chai', diff --git a/packages/test-runner-core/src/server/middleware/watchFilesMiddleware.ts b/packages/test-runner-core/src/server/middleware/watchFilesMiddleware.ts index 0a6a8d8836..a7e55c8ef8 100644 --- a/packages/test-runner-core/src/server/middleware/watchFilesMiddleware.ts +++ b/packages/test-runner-core/src/server/middleware/watchFilesMiddleware.ts @@ -4,10 +4,9 @@ import debounce from 'debounce'; import path from 'path'; import { FSWatcher } from 'chokidar'; -import { type TestSessionManager } from '../../test-session/TestSessionManager.js'; -import { constants } from '../../index.js'; -import { type TestSession } from '../../test-session/TestSession.js'; - +import { type TestSessionManager } from '../../test-session/TestSessionManager.ts'; +import { constants } from '../../index.ts'; +import { type TestSession } from '../../test-session/TestSession.ts'; const IGNORED_404s = ['favicon.ico']; const { PARAM_SESSION_ID } = constants; diff --git a/packages/test-runner-core/src/server/plugins/api/createSourceMapFunction.ts b/packages/test-runner-core/src/server/plugins/api/createSourceMapFunction.ts index 98a25c9c2d..57ed0b501c 100644 --- a/packages/test-runner-core/src/server/plugins/api/createSourceMapFunction.ts +++ b/packages/test-runner-core/src/server/plugins/api/createSourceMapFunction.ts @@ -2,9 +2,8 @@ import path from 'path'; import type { SourceMapConverter } from 'convert-source-map'; import { SourceMapConsumer } from 'source-map'; -import { fetchSourceMap } from '../../../utils/fetchSourceMap.js'; +import { fetchSourceMap } from '../../../utils/fetchSourceMap.ts'; import { type StackLocation } from '@web/browser-logs'; - export type SourceMapFunction = ( loc: StackLocation, userAgent: string, diff --git a/packages/test-runner-core/src/server/plugins/api/parseBrowserErrors.ts b/packages/test-runner-core/src/server/plugins/api/parseBrowserErrors.ts index 7e81638db9..1460bf9851 100644 --- a/packages/test-runner-core/src/server/plugins/api/parseBrowserErrors.ts +++ b/packages/test-runner-core/src/server/plugins/api/parseBrowserErrors.ts @@ -1,15 +1,14 @@ import { MapStackLocation, parseStackTrace } from '@web/browser-logs'; import { type MapBrowserUrl } from '@web/browser-logs'; -import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.js'; +import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.ts'; import { type TestResult, type TestResultError, type TestSession, type TestSuiteResult, -} from '../../../test-session/TestSession.js'; -import { forEachAsync } from '../../../utils/async.js'; - +} from '../../../test-session/TestSession.ts'; +import { forEachAsync } from '../../../utils/async.ts'; export async function replaceErrorStack( error: TestResultError, mapBrowserUrl: MapBrowserUrl, diff --git a/packages/test-runner-core/src/server/plugins/api/parseBrowserLogs.ts b/packages/test-runner-core/src/server/plugins/api/parseBrowserLogs.ts index 2afc55dc0f..26481d56c6 100644 --- a/packages/test-runner-core/src/server/plugins/api/parseBrowserLogs.ts +++ b/packages/test-runner-core/src/server/plugins/api/parseBrowserLogs.ts @@ -1,10 +1,9 @@ import { deserialize, MapStackLocation } from '@web/browser-logs'; import { type MapBrowserUrl } from '@web/browser-logs'; -import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.js'; -import { type TestSession } from '../../../test-session/TestSession.js'; -import { mapAsync } from '../../../utils/async.js'; - +import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.ts'; +import { type TestSession } from '../../../test-session/TestSession.ts'; +import { mapAsync } from '../../../utils/async.ts'; interface BrowserLog { type: string; args: string[]; diff --git a/packages/test-runner-core/src/server/plugins/api/parseBrowserResult.ts b/packages/test-runner-core/src/server/plugins/api/parseBrowserResult.ts index 31715832a3..a007adc63a 100644 --- a/packages/test-runner-core/src/server/plugins/api/parseBrowserResult.ts +++ b/packages/test-runner-core/src/server/plugins/api/parseBrowserResult.ts @@ -1,11 +1,10 @@ import { type MapStackLocation, type StackLocation, type MapBrowserUrl } from '@web/browser-logs'; -import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig'; -import { type TestSession } from '../../../test-session/TestSession'; -import { type SourceMapFunction } from './createSourceMapFunction.js'; -import { parseSessionErrors, parseTestResults } from './parseBrowserErrors.js'; -import { parseBrowserLogs } from './parseBrowserLogs.js'; - +import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.ts'; +import { type TestSession } from '../../../test-session/TestSession.ts'; +import { type SourceMapFunction } from './createSourceMapFunction.ts'; +import { parseSessionErrors, parseTestResults } from './parseBrowserErrors.ts'; +import { parseBrowserLogs } from './parseBrowserLogs.ts'; function createMapStackLocation(smFn: SourceMapFunction, userAgent: string): MapStackLocation { return async function mapStackLocation(originalLoc: StackLocation) { const mappedLoc = await smFn(originalLoc, userAgent); diff --git a/packages/test-runner-core/src/server/plugins/api/testRunnerApiPlugin.ts b/packages/test-runner-core/src/server/plugins/api/testRunnerApiPlugin.ts index 130cb5ace1..4cf73818db 100644 --- a/packages/test-runner-core/src/server/plugins/api/testRunnerApiPlugin.ts +++ b/packages/test-runner-core/src/server/plugins/api/testRunnerApiPlugin.ts @@ -7,17 +7,16 @@ import { import { type MapBrowserUrl } from '@web/browser-logs'; import parse from 'co-body'; -import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.js'; -import { type TestSessionManager } from '../../../test-session/TestSessionManager.js'; -import { PARAM_SESSION_ID } from '../../../utils/constants.js'; -import { type TestRunnerPlugin } from '../../TestRunnerPlugin.js'; -import { SESSION_STATUS } from '../../../test-session/TestSessionStatus.js'; -import { type TestSession } from '../../../test-session/TestSession.js'; -import { parseBrowserResult } from './parseBrowserResult.js'; -import { TestRunner } from '../../../runner/TestRunner.js'; -import { createSourceMapFunction, type SourceMapFunction } from './createSourceMapFunction.js'; -import { type DebugTestSession } from '../../../test-session/DebugTestSession.js'; - +import { type TestRunnerCoreConfig } from '../../../config/TestRunnerCoreConfig.ts'; +import { type TestSessionManager } from '../../../test-session/TestSessionManager.ts'; +import { PARAM_SESSION_ID } from '../../../utils/constants.ts'; +import { type TestRunnerPlugin } from '../../TestRunnerPlugin.ts'; +import { SESSION_STATUS } from '../../../test-session/TestSessionStatus.ts'; +import { type TestSession } from '../../../test-session/TestSession.ts'; +import { parseBrowserResult } from './parseBrowserResult.ts'; +import { TestRunner } from '../../../runner/TestRunner.ts'; +import { createSourceMapFunction, type SourceMapFunction } from './createSourceMapFunction.ts'; +import { type DebugTestSession } from '../../../test-session/DebugTestSession.ts'; interface SessionMessage extends Record { sessionId: string; testFile: string; diff --git a/packages/test-runner-core/src/server/plugins/serveTestFrameworkPlugin.ts b/packages/test-runner-core/src/server/plugins/serveTestFrameworkPlugin.ts index 48f67820d9..0a86cac18b 100644 --- a/packages/test-runner-core/src/server/plugins/serveTestFrameworkPlugin.ts +++ b/packages/test-runner-core/src/server/plugins/serveTestFrameworkPlugin.ts @@ -2,8 +2,7 @@ import fs from 'fs'; import path from 'path'; import { promisify } from 'util'; import { type Plugin } from '@web/dev-server-core'; -import { type TestFramework } from '../../test-framework/TestFramework'; - +import { type TestFramework } from '../../test-framework/TestFramework.ts'; const TEST_FRAMEWORK_IMPORT_ROOT = '/__web-test-runner__/test-framework/'; async function readFile(codePath: string) { diff --git a/packages/test-runner-core/src/server/plugins/serveTestRunnerHtmlPlugin.ts b/packages/test-runner-core/src/server/plugins/serveTestRunnerHtmlPlugin.ts index 4fd7bef799..4fe9a29876 100644 --- a/packages/test-runner-core/src/server/plugins/serveTestRunnerHtmlPlugin.ts +++ b/packages/test-runner-core/src/server/plugins/serveTestRunnerHtmlPlugin.ts @@ -1,12 +1,11 @@ import { type Context, getRequestFilePath } from '@web/dev-server-core'; -import { PARAM_SESSION_ID, PARAM_TEST_FILE } from '../../utils/constants.js'; -import { type TestRunnerCoreConfig } from '../../config/TestRunnerCoreConfig.js'; -import { createTestFileImportPath } from '../utils.js'; -import { trackBrowserLogs } from './trackBrowserLogs.js'; -import { type TestSessionManager } from '../../test-session/TestSessionManager.js'; -import { type TestRunnerGroupConfig } from '../../config/TestRunnerGroupConfig.js'; - +import { PARAM_SESSION_ID, PARAM_TEST_FILE } from '../../utils/constants.ts'; +import { type TestRunnerCoreConfig } from '../../config/TestRunnerCoreConfig.ts'; +import { createTestFileImportPath } from '../utils.ts'; +import { trackBrowserLogs } from './trackBrowserLogs.ts'; +import { type TestSessionManager } from '../../test-session/TestSessionManager.ts'; +import { type TestRunnerGroupConfig } from '../../config/TestRunnerGroupConfig.ts'; const iframeModePage = ` diff --git a/packages/test-runner-core/src/server/utils.ts b/packages/test-runner-core/src/server/utils.ts index 32b068b8df..7d1cd4ac7a 100644 --- a/packages/test-runner-core/src/server/utils.ts +++ b/packages/test-runner-core/src/server/utils.ts @@ -1,8 +1,7 @@ import path from 'path'; import { type Context } from '@web/dev-server-core'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.js'; -import { PARAM_SESSION_ID, PARAM_MANUAL_SESSION } from '../utils/constants.js'; - +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { PARAM_SESSION_ID, PARAM_MANUAL_SESSION } from '../utils/constants.ts'; const toBrowserPathRegExp = new RegExp(path.sep === '\\' ? '\\\\' : path.sep, 'g'); const toFilePathRegeExp = new RegExp('/', 'g'); diff --git a/packages/test-runner-core/src/test-helpers.ts b/packages/test-runner-core/src/test-helpers.ts index fa87e633bd..e851c107c7 100644 --- a/packages/test-runner-core/src/test-helpers.ts +++ b/packages/test-runner-core/src/test-helpers.ts @@ -1,11 +1,11 @@ /* eslint-disable no-async-promise-executor, no-inner-declarations */ import { getPortPromise } from 'portfinder'; import path from 'path'; -import { TestRunner, TestRunnerCoreConfig } from './index.js'; -import { Logger } from './logger/Logger.js'; -import { TestResult, TestSession, TestSuiteResult } from './test-session/TestSession.js'; -import { SESSION_STATUS } from './test-session/TestSessionStatus.js'; -import { TestRunnerGroupConfig } from './config/TestRunnerGroupConfig.js'; +import { TestRunner, TestRunnerCoreConfig } from './index.ts'; +import { Logger } from './logger/Logger.ts'; +import { TestResult, TestSession, TestSuiteResult } from './test-session/TestSession.ts'; +import { SESSION_STATUS } from './test-session/TestSessionStatus.ts'; +import { TestRunnerGroupConfig } from './config/TestRunnerGroupConfig.ts'; const logger: Logger = { ...console, diff --git a/packages/test-runner-core/src/test-session/BasicTestSession.ts b/packages/test-runner-core/src/test-session/BasicTestSession.ts index 174e433332..2c54c1f363 100644 --- a/packages/test-runner-core/src/test-session/BasicTestSession.ts +++ b/packages/test-runner-core/src/test-session/BasicTestSession.ts @@ -1,6 +1,5 @@ -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher'; -import { type TestSessionGroup } from './TestSessionGroup.js'; - +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; +import { type TestSessionGroup } from './TestSessionGroup.ts'; export interface BasicTestSession { id: string; group: TestSessionGroup; diff --git a/packages/test-runner-core/src/test-session/DebugTestSession.ts b/packages/test-runner-core/src/test-session/DebugTestSession.ts index c3d6318373..ded8f1c616 100644 --- a/packages/test-runner-core/src/test-session/DebugTestSession.ts +++ b/packages/test-runner-core/src/test-session/DebugTestSession.ts @@ -1,5 +1,4 @@ -import { type BasicTestSession } from './BasicTestSession.js'; - +import { type BasicTestSession } from './BasicTestSession.ts'; export interface DebugTestSession extends BasicTestSession { debug: true; } diff --git a/packages/test-runner-core/src/test-session/TestSession.ts b/packages/test-runner-core/src/test-session/TestSession.ts index b7eb7def58..0d529bca28 100644 --- a/packages/test-runner-core/src/test-session/TestSession.ts +++ b/packages/test-runner-core/src/test-session/TestSession.ts @@ -1,7 +1,6 @@ import type { CoverageMapData } from 'istanbul-lib-coverage'; -import { type TestSessionStatus } from './TestSessionStatus.js'; -import { type BasicTestSession } from './BasicTestSession.js'; - +import { type TestSessionStatus } from './TestSessionStatus.ts'; +import { type BasicTestSession } from './BasicTestSession.ts'; export interface TestResultError { message: string; name?: string; diff --git a/packages/test-runner-core/src/test-session/TestSessionGroup.ts b/packages/test-runner-core/src/test-session/TestSessionGroup.ts index acbe82ed14..ab7124073d 100644 --- a/packages/test-runner-core/src/test-session/TestSessionGroup.ts +++ b/packages/test-runner-core/src/test-session/TestSessionGroup.ts @@ -1,7 +1,6 @@ -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher'; -import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig'; -import { type TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig'; - +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; +import { type TestRunnerCoreConfig } from '../config/TestRunnerCoreConfig.ts'; +import { type TestRunnerGroupConfig } from '../config/TestRunnerGroupConfig.ts'; export interface TestSessionGroup { name: string; testFiles: string[]; diff --git a/packages/test-runner-core/src/test-session/TestSessionManager.ts b/packages/test-runner-core/src/test-session/TestSessionManager.ts index 15b08c0ea7..1e77636178 100644 --- a/packages/test-runner-core/src/test-session/TestSessionManager.ts +++ b/packages/test-runner-core/src/test-session/TestSessionManager.ts @@ -1,10 +1,9 @@ -import { type TestSession } from './TestSession.js'; -import { type TestSessionStatus } from './TestSessionStatus.js'; -import { EventEmitter } from '../utils/EventEmitter.js'; -import { type DebugTestSession } from './DebugTestSession.js'; -import { type TestSessionGroup } from './TestSessionGroup.js'; -import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.js'; - +import { type TestSession } from './TestSession.ts'; +import { type TestSessionStatus } from './TestSessionStatus.ts'; +import { EventEmitter } from '../utils/EventEmitter.ts'; +import { type DebugTestSession } from './DebugTestSession.ts'; +import { type TestSessionGroup } from './TestSessionGroup.ts'; +import { type BrowserLauncher } from '../browser-launcher/BrowserLauncher.ts'; interface EventMap { 'session-status-updated': TestSession; 'session-updated': void; diff --git a/packages/test-runner-core/src/utils/fetchSourceMap.ts b/packages/test-runner-core/src/utils/fetchSourceMap.ts index 8d66336ce3..4669114277 100644 --- a/packages/test-runner-core/src/utils/fetchSourceMap.ts +++ b/packages/test-runner-core/src/utils/fetchSourceMap.ts @@ -3,11 +3,10 @@ import { fromSource, type SourceMapConverter, fromJSON, -} from 'convert-source-map'; -import path from 'path'; +} from 'convert-source-map';import path from 'path'; import { type RequestOptions } from 'http'; -import { request } from './request.js'; +import { request } from './request.ts'; function is2xxResponse(status?: number) { return typeof status === 'number' && status >= 200 && status < 300; diff --git a/packages/test-runner-core/src/utils/isTestFilePath.ts b/packages/test-runner-core/src/utils/isTestFilePath.ts index aa8faefa30..e7e1fc9661 100644 --- a/packages/test-runner-core/src/utils/isTestFilePath.ts +++ b/packages/test-runner-core/src/utils/isTestFilePath.ts @@ -1,4 +1,4 @@ -import { PARAM_MANUAL_SESSION, PARAM_SESSION_ID } from './constants.js'; +import { PARAM_MANUAL_SESSION, PARAM_SESSION_ID } from './constants.ts'; /** * Returns where a given path points to a test file. This should be diff --git a/packages/test-runner-core/test/src/runner/TestRunner.test.ts b/packages/test-runner-core/test/src/runner/TestRunner.test.ts index 9471a71f11..433e9863aa 100644 --- a/packages/test-runner-core/test/src/runner/TestRunner.test.ts +++ b/packages/test-runner-core/test/src/runner/TestRunner.test.ts @@ -3,12 +3,12 @@ import { expect } from 'chai'; import portfinder from 'portfinder'; import path from 'path'; -import { BrowserLauncher } from '../../../src/browser-launcher/BrowserLauncher.js'; -import { TestRunnerCoreConfig } from '../../../src/config/TestRunnerCoreConfig.js'; -import { TestRunner } from '../../../src/runner/TestRunner.js'; -import { Logger } from '../../../src/logger/Logger.js'; -import { SESSION_STATUS } from '../../../src/test-session/TestSessionStatus.js'; -import { TestRunnerGroupConfig } from '../../../src/index.js'; +import { BrowserLauncher } from '../../../src/browser-launcher/BrowserLauncher.ts'; +import { TestRunnerCoreConfig } from '../../../src/config/TestRunnerCoreConfig.ts'; +import { TestRunner } from '../../../src/runner/TestRunner.ts'; +import { Logger } from '../../../src/logger/Logger.ts'; +import { SESSION_STATUS } from '../../../src/test-session/TestSessionStatus.ts'; +import { TestRunnerGroupConfig } from '../../../src/index.ts'; interface BrowserStubs { stop: hanbi.Stub>; diff --git a/packages/test-runner-core/test/src/runner/TestScheduler.test.ts b/packages/test-runner-core/test/src/runner/TestScheduler.test.ts index 5433c76613..acb8a9ca72 100644 --- a/packages/test-runner-core/test/src/runner/TestScheduler.test.ts +++ b/packages/test-runner-core/test/src/runner/TestScheduler.test.ts @@ -1,13 +1,13 @@ import { expect } from 'chai'; import * as hanbi from 'hanbi'; -import { BrowserLauncher } from '../../../src/browser-launcher/BrowserLauncher.js'; +import { BrowserLauncher } from '../../../src/browser-launcher/BrowserLauncher.ts'; -import { TestRunnerCoreConfig } from '../../../src/config/TestRunnerCoreConfig.js'; -import { TestScheduler } from '../../../src/runner/TestScheduler.js'; -import { TestSession } from '../../../src/test-session/TestSession.js'; -import { TestSessionManager } from '../../../src/test-session/TestSessionManager.js'; -import { SESSION_STATUS } from '../../../src/test-session/TestSessionStatus.js'; +import { TestRunnerCoreConfig } from '../../../src/config/TestRunnerCoreConfig.ts'; +import { TestScheduler } from '../../../src/runner/TestScheduler.ts'; +import { TestSession } from '../../../src/test-session/TestSession.ts'; +import { TestSessionManager } from '../../../src/test-session/TestSessionManager.ts'; +import { SESSION_STATUS } from '../../../src/test-session/TestSessionStatus.ts'; function timeout(ms = 0): Promise { return new Promise(r => setTimeout(r, ms)); diff --git a/packages/test-runner-core/tsconfig.json b/packages/test-runner-core/tsconfig.json index ddc8cf4cc7..5779fe1bc9 100644 --- a/packages/test-runner-core/tsconfig.json +++ b/packages/test-runner-core/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -28,5 +27,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-coverage-v8/src/index.ts b/packages/test-runner-coverage-v8/src/index.ts index 306f53086c..b5dfcd8d57 100644 --- a/packages/test-runner-coverage-v8/src/index.ts +++ b/packages/test-runner-coverage-v8/src/index.ts @@ -7,7 +7,7 @@ import picoMatch from 'picomatch'; import LruCache from 'lru-cache'; import { readFile } from 'node:fs/promises'; -import { toFilePath } from './utils.js'; +import { toFilePath } from './utils.ts'; type V8Coverage = Profiler.ScriptCoverage; type Matcher = (test: string) => boolean; diff --git a/packages/test-runner-coverage-v8/tsconfig.json b/packages/test-runner-coverage-v8/tsconfig.json index cfc2218eeb..7453f67110 100644 --- a/packages/test-runner-coverage-v8/tsconfig.json +++ b/packages/test-runner-coverage-v8/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -31,5 +30,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-junit-reporter/package.json b/packages/test-runner-junit-reporter/package.json index 812b401b1f..2a86534b02 100644 --- a/packages/test-runner-junit-reporter/package.json +++ b/packages/test-runner-junit-reporter/package.json @@ -1,5 +1,6 @@ { "name": "@web/test-runner-junit-reporter", + "type": "module", "version": "0.8.0", "publishConfig": { "access": "public" @@ -17,12 +18,11 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./index.mjs", - "require": "./dist/index.js" + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -32,7 +32,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "dist", "src" ], diff --git a/packages/test-runner-junit-reporter/src/index.ts b/packages/test-runner-junit-reporter/src/index.ts index 2dff2aea24..698f852fd9 100644 --- a/packages/test-runner-junit-reporter/src/index.ts +++ b/packages/test-runner-junit-reporter/src/index.ts @@ -1 +1 @@ -export { junitReporter } from './junitReporter.js'; +export { junitReporter } from './junitReporter.ts'; diff --git a/packages/test-runner-junit-reporter/src/junitReporter.ts b/packages/test-runner-junit-reporter/src/junitReporter.ts index 7ba8d5b79d..2e8c07e99b 100644 --- a/packages/test-runner-junit-reporter/src/junitReporter.ts +++ b/packages/test-runner-junit-reporter/src/junitReporter.ts @@ -79,11 +79,10 @@ const assignSessionAndSuitePropertiesToTests = ({ const assignToSuite = (parentSuiteName: string) => - (suite: TestSuiteResult): TestResultWithMetadata[] => - [ - ...suite.tests.map(assignToTest(`${parentSuiteName} ${suite.name}`)), - ...(suite.suites?.flatMap?.(assignToSuite(`${parentSuiteName} ${suite.name}`)) ?? []), - ]; + (suite: TestSuiteResult): TestResultWithMetadata[] => [ + ...suite.tests.map(assignToTest(`${parentSuiteName} ${suite.name}`)), + ...(suite.suites?.flatMap?.(assignToSuite(`${parentSuiteName} ${suite.name}`)) ?? []), + ]; const suites = testResults?.suites ?? []; diff --git a/packages/test-runner-junit-reporter/test/junitReporter.test.ts b/packages/test-runner-junit-reporter/test/junitReporter.test.ts index 79e63fed3e..9b6c6b945e 100644 --- a/packages/test-runner-junit-reporter/test/junitReporter.test.ts +++ b/packages/test-runner-junit-reporter/test/junitReporter.test.ts @@ -6,7 +6,7 @@ import globby from 'globby'; import { chromeLauncher } from '@web/test-runner-chrome'; import { TestRunnerCoreConfig } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; -import { junitReporter } from '../src/junitReporter.js'; +import { junitReporter } from '../src/junitReporter.ts'; const NON_ZERO_TIME_VALUE_REGEX = /time="((\d\.\d+)|(\d))"/g; diff --git a/packages/test-runner-junit-reporter/tsconfig.json b/packages/test-runner-junit-reporter/tsconfig.json index 9cd7febd8a..7239cceea3 100644 --- a/packages/test-runner-junit-reporter/tsconfig.json +++ b/packages/test-runner-junit-reporter/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -43,5 +42,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-mocha/rollup.config.mjs b/packages/test-runner-mocha/rollup.config.mjs index 6305738154..7f50affe61 100644 --- a/packages/test-runner-mocha/rollup.config.mjs +++ b/packages/test-runner-mocha/rollup.config.mjs @@ -1,6 +1,9 @@ +import { createRequire } from 'module'; import deepmerge from 'deepmerge'; import createConfig from '../../rollup.browser.config.mjs'; +const require = createRequire(import.meta.url); + const REGEXP_DTS_MOCHA = /'..\/..\/..\/node_modules\/mocha\/mocha.js'/g; const REGEXP_DTS_CORE = /'..\/..\/test-runner-core\/browser\/session.js'/g; @@ -16,6 +19,51 @@ const rewriteDtsPlugin = { }, }; +const stripRewriteImportExtensionPlugin = { + name: 'strip-rewrite-import-extension', + renderChunk(code) { + // Remove the __rewriteRelativeImportExtension helper and its calls + // that TypeScript injects when rewriteRelativeImportExtensions is enabled + code = code.replace(/var __rewriteRelativeImportExtension[^;]*;/g, ''); + // Replace calls with their argument, handling nested parentheses + const fnName = '__rewriteRelativeImportExtension('; + let result = ''; + let i = 0; + while (i < code.length) { + const idx = code.indexOf(fnName, i); + if (idx === -1) { + result += code.slice(i); + break; + } + result += code.slice(i, idx); + // Find the matching closing paren + let depth = 1; + let j = idx + fnName.length; + while (j < code.length && depth > 0) { + if (code[j] === '(') depth++; + else if (code[j] === ')') depth--; + j++; + } + // Extract the argument (everything between the outer parens) + result += code.slice(idx + fnName.length, j - 1); + i = j; + } + return result; + }, +}; + +const resolveMochaPlugin = { + name: 'resolve-mocha', + resolveId(id) { + // Resolve mocha using Node's module resolution from this package, + // rather than relative path traversal which may land in the wrong + // node_modules in a monorepo + if (id.endsWith('node_modules/mocha/mocha.js')) { + return require.resolve('mocha/mocha.js'); + } + }, +}; + const rewriteWebSocketImportPlugin = { resolveId(id) { if (id === '/__web-dev-server__web-socket.js') { @@ -36,7 +84,12 @@ export default [ 'wds-socket': '/__web-dev-server__web-socket.js', }, }, - plugins: [rewriteDtsPlugin, rewriteWebSocketImportPlugin], + plugins: [ + resolveMochaPlugin, + rewriteDtsPlugin, + rewriteWebSocketImportPlugin, + stripRewriteImportExtensionPlugin, + ], }), deepmerge(createConfig('src/standalone.ts'), { output: { @@ -46,6 +99,11 @@ export default [ 'wds-socket': '/__web-dev-server__web-socket.js', }, }, - plugins: [rewriteDtsPlugin, rewriteWebSocketImportPlugin], + plugins: [ + resolveMochaPlugin, + rewriteDtsPlugin, + rewriteWebSocketImportPlugin, + stripRewriteImportExtensionPlugin, + ], }), ]; diff --git a/packages/test-runner-mocha/src/autorun.ts b/packages/test-runner-mocha/src/autorun.ts index 8f56deed9c..5c1d78087a 100644 --- a/packages/test-runner-mocha/src/autorun.ts +++ b/packages/test-runner-mocha/src/autorun.ts @@ -3,10 +3,10 @@ import { getConfig, sessionStarted, TestResultError, -} from '../../test-runner-core/browser/session.js'; +} from '../../test-runner-core/browser/session.ts'; import '../../../node_modules/mocha/mocha.js'; -import { collectTestResults } from './collectTestResults.js'; -import { setupMocha } from './mochaSetup.js'; +import { collectTestResults } from './collectTestResults.ts'; +import { setupMocha } from './mochaSetup.ts'; sessionStarted(); diff --git a/packages/test-runner-mocha/src/collectTestResults.ts b/packages/test-runner-mocha/src/collectTestResults.ts index 0189e27b68..6c873d248a 100644 --- a/packages/test-runner-mocha/src/collectTestResults.ts +++ b/packages/test-runner-mocha/src/collectTestResults.ts @@ -2,7 +2,7 @@ import { TestResult, TestSuiteResult, TestResultError, -} from '../../test-runner-core/browser/session.js'; +} from '../../test-runner-core/browser/session.ts'; // type only import, has to be a bare import import { Hook } from 'mocha'; diff --git a/packages/test-runner-mocha/src/mochaSetup.ts b/packages/test-runner-mocha/src/mochaSetup.ts index d5754a14d3..018a26f1e9 100644 --- a/packages/test-runner-mocha/src/mochaSetup.ts +++ b/packages/test-runner-mocha/src/mochaSetup.ts @@ -1,4 +1,4 @@ -import { styles } from './styles.js'; +import { styles } from './styles.ts'; const mocha = (window as any).mocha; const mochaExports = (window as any).Mocha; diff --git a/packages/test-runner-mocha/src/standalone.ts b/packages/test-runner-mocha/src/standalone.ts index 7f60bba206..bf06a20f53 100644 --- a/packages/test-runner-mocha/src/standalone.ts +++ b/packages/test-runner-mocha/src/standalone.ts @@ -3,10 +3,10 @@ import { sessionFinished as testRunnerOnSessionFinished, sessionFailed, getConfig, -} from '../../test-runner-core/browser/session.js'; +} from '../../test-runner-core/browser/session.ts'; import '../../../node_modules/mocha/mocha.js'; -import { collectTestResults } from './collectTestResults.js'; -import { setupMocha } from './mochaSetup.js'; +import { collectTestResults } from './collectTestResults.ts'; +import { setupMocha } from './mochaSetup.ts'; const mocha = (window as any).mocha as BrowserMocha; diff --git a/packages/test-runner-mocha/tsconfig.json b/packages/test-runner-mocha/tsconfig.json index 8eb7c546be..fdbe5b50fa 100644 --- a/packages/test-runner-mocha/tsconfig.json +++ b/packages/test-runner-mocha/tsconfig.json @@ -3,7 +3,6 @@ { "extends": "../../tsconfig.browser-base.json", "compilerOptions": { - "module": "ESNext", "outDir": "./dist", "rootDir": "./src", "composite": true, @@ -31,5 +30,12 @@ "src/browser", "tests", "dist" - ] -} \ No newline at end of file + ], + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + } +} diff --git a/packages/test-runner-module-mocking/src/index.ts b/packages/test-runner-module-mocking/src/index.ts index 5dd7295853..8953b02c8f 100644 --- a/packages/test-runner-module-mocking/src/index.ts +++ b/packages/test-runner-module-mocking/src/index.ts @@ -1 +1 @@ -export { moduleMockingPlugin } from './moduleMockingPlugin.js'; +export { moduleMockingPlugin } from './moduleMockingPlugin.ts'; diff --git a/packages/test-runner-module-mocking/src/moduleMockingPlugin.ts b/packages/test-runner-module-mocking/src/moduleMockingPlugin.ts index c826401e95..21dd1e53f4 100644 --- a/packages/test-runner-module-mocking/src/moduleMockingPlugin.ts +++ b/packages/test-runner-module-mocking/src/moduleMockingPlugin.ts @@ -1,7 +1,7 @@ import { Plugin } from '@web/dev-server-core'; import { parse } from 'es-module-lexer'; -import { createResolveImport, ResolveImport } from './createResolveImport.js'; -import { stripColor } from './stripColor.js'; +import { createResolveImport, ResolveImport } from './createResolveImport.ts'; +import { stripColor } from './stripColor.ts'; /** * Plugin that enables mocking of modules diff --git a/packages/test-runner-module-mocking/test/moduleMockingPlugin.test.ts b/packages/test-runner-module-mocking/test/moduleMockingPlugin.test.ts index 2b365dcc72..5e56ed346a 100644 --- a/packages/test-runner-module-mocking/test/moduleMockingPlugin.test.ts +++ b/packages/test-runner-module-mocking/test/moduleMockingPlugin.test.ts @@ -4,7 +4,7 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { chromeLauncher } from '@web/test-runner-chrome'; import { nodeResolvePlugin } from '@web/dev-server'; -import { moduleMockingPlugin } from '../src/moduleMockingPlugin.js'; +import { moduleMockingPlugin } from '../src/moduleMockingPlugin.ts'; import { expect } from 'chai'; const dirname = fileURLToPath(new URL('.', import.meta.url)); diff --git a/packages/test-runner-module-mocking/tsconfig.json b/packages/test-runner-module-mocking/tsconfig.json index fb43d8ab5d..0120d157c9 100644 --- a/packages/test-runner-module-mocking/tsconfig.json +++ b/packages/test-runner-module-mocking/tsconfig.json @@ -1,7 +1,13 @@ { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "node16", "moduleResolution": "node16", "outDir": "./dist", "rootDir": "./src", diff --git a/packages/test-runner-playwright/src/PlaywrightLauncher.ts b/packages/test-runner-playwright/src/PlaywrightLauncher.ts index 57d4d6ad90..e969c9b315 100644 --- a/packages/test-runner-playwright/src/PlaywrightLauncher.ts +++ b/packages/test-runner-playwright/src/PlaywrightLauncher.ts @@ -1,6 +1,6 @@ import playwright, { Browser, Page, LaunchOptions, BrowserContext } from 'playwright'; import { BrowserLauncher, TestRunnerCoreConfig, CoverageMapData } from '@web/test-runner-core'; -import { PlaywrightLauncherPage } from './PlaywrightLauncherPage.js'; +import { PlaywrightLauncherPage } from './PlaywrightLauncherPage.ts'; function capitalize(str: string) { return `${str[0].toUpperCase()}${str.substring(1)}`; @@ -89,7 +89,7 @@ export class PlaywrightLauncher implements BrowserLauncher { if (!this.debugBrowser) { this.debugBrowser = await playwright[this.product].launch({ ...this.launchOptions, - // devtools is only supported on chromium + // @ts-ignore devtools is only supported on chromium devtools: this.product === 'chromium', headless: false, }); diff --git a/packages/test-runner-playwright/src/PlaywrightLauncherPage.ts b/packages/test-runner-playwright/src/PlaywrightLauncherPage.ts index fa4de283ac..fac5cea28d 100644 --- a/packages/test-runner-playwright/src/PlaywrightLauncherPage.ts +++ b/packages/test-runner-playwright/src/PlaywrightLauncherPage.ts @@ -2,7 +2,7 @@ import { Page, BrowserContext } from 'playwright'; import { TestRunnerCoreConfig } from '@web/test-runner-core'; import { V8Coverage, v8ToIstanbul } from '@web/test-runner-coverage-v8'; import { SessionResult } from '@web/test-runner-core'; -import { ProductType } from './PlaywrightLauncher.js'; +import { ProductType } from './PlaywrightLauncher.ts'; export class PlaywrightLauncherPage { private config: TestRunnerCoreConfig; diff --git a/packages/test-runner-playwright/src/index.ts b/packages/test-runner-playwright/src/index.ts index 5d82bcf975..ab8e723374 100644 --- a/packages/test-runner-playwright/src/index.ts +++ b/packages/test-runner-playwright/src/index.ts @@ -5,7 +5,7 @@ import { ProductType, CreateBrowserContextFn, CreatePageFn, -} from './PlaywrightLauncher.js'; +} from './PlaywrightLauncher.ts'; const validProductTypes: ProductType[] = ['chromium', 'firefox', 'webkit']; diff --git a/packages/test-runner-playwright/test/playwrightLauncher.test.ts b/packages/test-runner-playwright/test/playwrightLauncher.test.ts index 37eceac5c1..955b331ca7 100644 --- a/packages/test-runner-playwright/test/playwrightLauncher.test.ts +++ b/packages/test-runner-playwright/test/playwrightLauncher.test.ts @@ -1,6 +1,6 @@ import os from 'os'; -import { runIntegrationTests } from '../../../integration/test-runner/index.js'; -import { playwrightLauncher } from '../src/index.js'; +import { runIntegrationTests } from '../../../integration/test-runner/index.ts'; +import { playwrightLauncher } from '../src/index.ts'; describe('test-runner-playwright chromium', function testRunnerPlaywright() { this.timeout(100000); diff --git a/packages/test-runner-playwright/tsconfig.json b/packages/test-runner-playwright/tsconfig.json index 99982d745e..ae3851251d 100644 --- a/packages/test-runner-playwright/tsconfig.json +++ b/packages/test-runner-playwright/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/packages/test-runner-puppeteer/src/index.ts b/packages/test-runner-puppeteer/src/index.ts index 606951000c..21c53a70d6 100644 --- a/packages/test-runner-puppeteer/src/index.ts +++ b/packages/test-runner-puppeteer/src/index.ts @@ -1 +1 @@ -export { puppeteerLauncher } from './puppeteerLauncher.js'; +export { puppeteerLauncher } from './puppeteerLauncher.ts'; diff --git a/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts b/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts index 718410a81a..73866bd09a 100644 --- a/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts +++ b/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts @@ -1,5 +1,5 @@ -import { runIntegrationTests } from '../../../integration/test-runner/index.js'; -import { puppeteerLauncher } from '../src/index.js'; +import { runIntegrationTests } from '../../../integration/test-runner/index.ts'; +import { puppeteerLauncher } from '../src/index.ts'; describe('test-runner-puppeteer', function testRunnerPuppeteer() { this.timeout(20000); diff --git a/packages/test-runner-puppeteer/tsconfig.json b/packages/test-runner-puppeteer/tsconfig.json index 9006f902a4..bbb79f4fb6 100644 --- a/packages/test-runner-puppeteer/tsconfig.json +++ b/packages/test-runner-puppeteer/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/packages/test-runner-saucelabs/src/SauceLabsLauncher.ts b/packages/test-runner-saucelabs/src/SauceLabsLauncher.ts index 9850608bc2..690c483aeb 100644 --- a/packages/test-runner-saucelabs/src/SauceLabsLauncher.ts +++ b/packages/test-runner-saucelabs/src/SauceLabsLauncher.ts @@ -2,7 +2,7 @@ import { TestRunnerCoreConfig } from '@web/test-runner-core'; import { Capabilities } from '@wdio/types'; import { WebdriverLauncher } from '@web/test-runner-webdriver'; import internalIp from 'internal-ip'; -import { SauceLabsLauncherManager } from './SauceLabsLauncherManager.js'; +import { SauceLabsLauncherManager } from './SauceLabsLauncherManager.ts'; const localIp = internalIp.v4.sync() as string; if (!localIp) { diff --git a/packages/test-runner-saucelabs/src/SauceLabsLauncherManager.ts b/packages/test-runner-saucelabs/src/SauceLabsLauncherManager.ts index 949cc42c07..336acfccf2 100644 --- a/packages/test-runner-saucelabs/src/SauceLabsLauncherManager.ts +++ b/packages/test-runner-saucelabs/src/SauceLabsLauncherManager.ts @@ -1,19 +1,24 @@ import { BrowserLauncher } from '@web/test-runner-core'; -import SaucelabsAPI, { - SauceLabsOptions, - SauceConnectOptions, - SauceConnectInstance, -} from 'saucelabs'; -import internalIp from 'internal-ip'; +import * as _SaucelabsModule from 'saucelabs'; +const SaucelabsAPI = (_SaucelabsModule as any).default ?? _SaucelabsModule; +type SauceLabsOptions = _SaucelabsModule.SauceLabsOptions; +type SauceConnectOptions = _SaucelabsModule.SauceConnectOptions; +type SauceConnectInstance = _SaucelabsModule.SauceConnectInstance; +import * as _internalIpModule from 'internal-ip'; +const _internalIp = (_internalIpModule as any).default ?? _internalIpModule; +const { internalIpV4Sync } = _internalIp; /** * Wraps a Promise with a timeout, rejecing the promise with the timeout. */ export function withTimeout(promise: Promise, message: string): Promise { return new Promise((resolve, reject) => { - const timeoutId = setTimeout(() => { - reject(new Error(message)); - }, 5 * 60 * 1000); + const timeoutId = setTimeout( + () => { + reject(new Error(message)); + }, + 5 * 60 * 1000, + ); promise .then(val => resolve(val)) @@ -22,7 +27,7 @@ export function withTimeout(promise: Promise, message: string): Promise }); } export class SauceLabsLauncherManager { - private api: SaucelabsAPI; + private api: any; private launchers = new Set(); private connectionPromise?: Promise; private connection?: SauceConnectInstance; @@ -53,9 +58,10 @@ export class SauceLabsLauncherManager { this.connectionPromise = withTimeout( this.api.startSauceConnect({ ...this.connectOptions, - tlsPassthroughDomains: `^(127\\.0\\.0\\.1|localhost|${internalIp.v4 - .sync() - ?.replace(/\./g, '\\.')})$`, + tlsPassthroughDomains: `^(127\\.0\\.0\\.1|localhost|${internalIpV4Sync()?.replace( + /\./g, + '\\.', + )})$`, }), '[Saucelabs] Timed out setting up Sauce Connect proxy after 5 minutes.', ); diff --git a/packages/test-runner-saucelabs/src/createSauceLabsLauncher.ts b/packages/test-runner-saucelabs/src/createSauceLabsLauncher.ts index bdcccd46c2..e5165b7adf 100644 --- a/packages/test-runner-saucelabs/src/createSauceLabsLauncher.ts +++ b/packages/test-runner-saucelabs/src/createSauceLabsLauncher.ts @@ -2,8 +2,8 @@ import { BrowserLauncher } from '@web/test-runner-core'; import { SauceLabsOptions, SauceConnectOptions } from 'saucelabs'; import { Capabilities, Options } from '@wdio/types'; import { nanoid } from 'nanoid'; -import { SauceLabsLauncher } from './SauceLabsLauncher.js'; -import { SauceLabsLauncherManager } from './SauceLabsLauncherManager.js'; +import { SauceLabsLauncher } from './SauceLabsLauncher.ts'; +import { SauceLabsLauncherManager } from './SauceLabsLauncherManager.ts'; export function createSauceLabsLauncher( saucelabsOptions: SauceLabsOptions, diff --git a/packages/test-runner-saucelabs/src/index.ts b/packages/test-runner-saucelabs/src/index.ts index 9bed2b7621..6f823d2979 100644 --- a/packages/test-runner-saucelabs/src/index.ts +++ b/packages/test-runner-saucelabs/src/index.ts @@ -1,3 +1,3 @@ -export { createSauceLabsLauncher } from './createSauceLabsLauncher.js'; -export type { SauceLabsLauncher } from './SauceLabsLauncher.js'; -export type { SauceLabsLauncherManager } from './SauceLabsLauncherManager.js'; +export { createSauceLabsLauncher } from './createSauceLabsLauncher.ts'; +export type { SauceLabsLauncher } from './SauceLabsLauncher.ts'; +export type { SauceLabsLauncherManager } from './SauceLabsLauncherManager.ts'; diff --git a/packages/test-runner-saucelabs/tsconfig.json b/packages/test-runner-saucelabs/tsconfig.json index 4c78a39c8a..7cdb87eb6a 100644 --- a/packages/test-runner-saucelabs/tsconfig.json +++ b/packages/test-runner-saucelabs/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/packages/test-runner-selenium/src/index.ts b/packages/test-runner-selenium/src/index.ts index 5cc923e824..93cd090422 100644 --- a/packages/test-runner-selenium/src/index.ts +++ b/packages/test-runner-selenium/src/index.ts @@ -1 +1 @@ -export { seleniumLauncher, SeleniumLauncher } from './seleniumLauncher.js'; +export { seleniumLauncher, SeleniumLauncher } from './seleniumLauncher.ts'; diff --git a/packages/test-runner-selenium/src/seleniumLauncher.ts b/packages/test-runner-selenium/src/seleniumLauncher.ts index 296646cb3e..48d9e74cde 100644 --- a/packages/test-runner-selenium/src/seleniumLauncher.ts +++ b/packages/test-runner-selenium/src/seleniumLauncher.ts @@ -1,7 +1,7 @@ import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; import { Builder, WebDriver } from 'selenium-webdriver'; -import { getBrowserLabel, getBrowserName } from './utils.js'; -import { IFrameManager } from './IFrameManager.js'; +import { getBrowserLabel, getBrowserName } from './utils.ts'; +import { IFrameManager } from './IFrameManager.ts'; export interface SeleniumLauncherArgs { driverBuilder: Builder; diff --git a/packages/test-runner-selenium/tsconfig.json b/packages/test-runner-selenium/tsconfig.json index cfc2218eeb..5bb6157920 100644 --- a/packages/test-runner-selenium/tsconfig.json +++ b/packages/test-runner-selenium/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/packages/test-runner-visual-regression/package.json b/packages/test-runner-visual-regression/package.json index 3e6f97f10b..5b0b85c346 100644 --- a/packages/test-runner-visual-regression/package.json +++ b/packages/test-runner-visual-regression/package.json @@ -1,5 +1,6 @@ { "name": "@web/test-runner-visual-regression", + "type": "module", "version": "0.10.0", "publishConfig": { "access": "public" @@ -13,20 +14,19 @@ }, "author": "modern-web", "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/test-runner-visual-regression", - "main": "browser/commands.mjs", + "main": "dist/index.js", "exports": { ".": { - "import": "./browser/commands.mjs", - "types": "./index.d.ts" + "types": "./index.d.ts", + "default": "./browser/commands.mjs" }, "./plugin": { - "import": "./plugin.mjs", - "require": "./dist/index.js", - "types": "./plugin.d.ts" + "types": "./plugin.d.ts", + "default": "./dist/index.js" } }, "engines": { - "node": ">=18.0.0" + "node": ">=24.0.0" }, "scripts": { "build": "tsc", @@ -36,7 +36,6 @@ "files": [ "*.d.ts", "*.js", - "*.mjs", "browser", "dist", "src" @@ -61,7 +60,6 @@ "devDependencies": { "@web/test-runner-chrome": "^0.18.0", "@web/test-runner-playwright": "^0.11.0", - "@web/test-runner-webdriver": "^0.9.0", - "mocha": "^10.8.2" + "@web/test-runner-webdriver": "^0.9.0" } } diff --git a/packages/test-runner-visual-regression/src/config.ts b/packages/test-runner-visual-regression/src/config.ts index ff0a5a4718..da5415dab6 100644 --- a/packages/test-runner-visual-regression/src/config.ts +++ b/packages/test-runner-visual-regression/src/config.ts @@ -2,8 +2,8 @@ import path from 'path'; import mkdirp from 'mkdirp'; import pixelmatch from 'pixelmatch'; -import { readFile, writeFile, fileExists } from './fs.js'; -import { pixelMatchDiff } from './pixelMatchDiff.js'; +import { readFile, writeFile, fileExists } from './fs.ts'; +import { pixelMatchDiff } from './pixelMatchDiff.ts'; type PixelMatchParams = Parameters; type PixelMatchOptions = PixelMatchParams[5]; diff --git a/packages/test-runner-visual-regression/src/index.ts b/packages/test-runner-visual-regression/src/index.ts index 47615cb764..5d26571115 100644 --- a/packages/test-runner-visual-regression/src/index.ts +++ b/packages/test-runner-visual-regression/src/index.ts @@ -1 +1 @@ -export { visualRegressionPlugin } from './visualRegressionPlugin.js'; +export { visualRegressionPlugin } from './visualRegressionPlugin.ts'; diff --git a/packages/test-runner-visual-regression/src/pixelMatchDiff.ts b/packages/test-runner-visual-regression/src/pixelMatchDiff.ts index 3e5be65987..cb650eb0a3 100644 --- a/packages/test-runner-visual-regression/src/pixelMatchDiff.ts +++ b/packages/test-runner-visual-regression/src/pixelMatchDiff.ts @@ -1,7 +1,7 @@ import pixelmatch from 'pixelmatch'; import { PNG, PNGWithMetadata } from 'pngjs'; -import { DiffArgs, DiffResult } from './config.js'; +import { DiffArgs, DiffResult } from './config.ts'; export function pixelMatchDiff({ baselineImage, image, options }: DiffArgs): DiffResult { let error = ''; diff --git a/packages/test-runner-visual-regression/src/visualDiffCommand.ts b/packages/test-runner-visual-regression/src/visualDiffCommand.ts index 0cdee0bfac..ffd498d00c 100644 --- a/packages/test-runner-visual-regression/src/visualDiffCommand.ts +++ b/packages/test-runner-visual-regression/src/visualDiffCommand.ts @@ -1,7 +1,7 @@ import path from 'path'; -import { VisualRegressionPluginOptions, DiffResult } from './config.js'; -import { VisualRegressionError } from './VisualRegressionError.js'; +import { VisualRegressionPluginOptions, DiffResult } from './config.ts'; +import { VisualRegressionError } from './VisualRegressionError.ts'; function resolveImagePath(baseDir: string, name: string) { const finalName = path.extname(name) ? name : `${name}.png`; diff --git a/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts b/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts index b5f5840bea..20a01b7948 100644 --- a/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts +++ b/packages/test-runner-visual-regression/src/visualRegressionPlugin.ts @@ -3,13 +3,13 @@ import type { ChromeLauncher } from '@web/test-runner-chrome'; import type { PlaywrightLauncher } from '@web/test-runner-playwright'; import type { WebdriverLauncher } from '@web/test-runner-webdriver'; -import { defaultOptions, VisualRegressionPluginOptions } from './config.js'; +import { defaultOptions, VisualRegressionPluginOptions } from './config.ts'; import { visualDiffCommand, VisualDiffCommandContext, VisualDiffCommandResult, -} from './visualDiffCommand.js'; -import { VisualRegressionError } from './VisualRegressionError.js'; +} from './visualDiffCommand.ts'; +import { VisualRegressionError } from './VisualRegressionError.ts'; interface Payload { id: string; diff --git a/packages/test-runner-visual-regression/test/visualRegressionPlugin.test.ts b/packages/test-runner-visual-regression/test/visualRegressionPlugin.test.ts index fa9606a474..ff52458a72 100644 --- a/packages/test-runner-visual-regression/test/visualRegressionPlugin.test.ts +++ b/packages/test-runner-visual-regression/test/visualRegressionPlugin.test.ts @@ -3,8 +3,8 @@ import { runTests } from '@web/test-runner-core/test-helpers'; import { expect } from 'chai'; import { chromeLauncher } from '@web/test-runner-chrome'; -import { visualRegressionPlugin } from '../src/visualRegressionPlugin.js'; -import { fileExists } from '../src/fs.js'; +import { visualRegressionPlugin } from '../src/visualRegressionPlugin.ts'; +import { fileExists } from '../src/fs.ts'; import { playwrightLauncher } from '@web/test-runner-playwright'; describe('visualRegressionPlugin', function test() { diff --git a/packages/test-runner-visual-regression/tsconfig.json b/packages/test-runner-visual-regression/tsconfig.json index 8d4f397d34..a0bbb7e02c 100644 --- a/packages/test-runner-visual-regression/tsconfig.json +++ b/packages/test-runner-visual-regression/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/packages/test-runner-webdriver/src/IFrameManager.ts b/packages/test-runner-webdriver/src/IFrameManager.ts index 7b941e4f7d..1b2514b3a6 100644 --- a/packages/test-runner-webdriver/src/IFrameManager.ts +++ b/packages/test-runner-webdriver/src/IFrameManager.ts @@ -1,6 +1,6 @@ import { TestRunnerCoreConfig } from '@web/test-runner-core'; import { Browser } from 'webdriverio'; -import { validateBrowserResult } from './coverage.js'; +import { validateBrowserResult } from './coverage.ts'; /** * Manages tests to be executed in iframes on a page. diff --git a/packages/test-runner-webdriver/src/SessionManager.ts b/packages/test-runner-webdriver/src/SessionManager.ts index 96051fa65b..8cdddbe219 100644 --- a/packages/test-runner-webdriver/src/SessionManager.ts +++ b/packages/test-runner-webdriver/src/SessionManager.ts @@ -1,6 +1,6 @@ import { TestRunnerCoreConfig } from '@web/test-runner-core'; import { Browser } from 'webdriverio'; -import { validateBrowserResult } from './coverage.js'; +import { validateBrowserResult } from './coverage.ts'; /** * Manages tests to be executed in one session (concurrency: 1). diff --git a/packages/test-runner-webdriver/src/index.ts b/packages/test-runner-webdriver/src/index.ts index 1d92d6b81d..f521474d6b 100644 --- a/packages/test-runner-webdriver/src/index.ts +++ b/packages/test-runner-webdriver/src/index.ts @@ -1 +1 @@ -export { webdriverLauncher, WebdriverLauncher } from './webdriverLauncher.js'; +export { webdriverLauncher, WebdriverLauncher } from './webdriverLauncher.ts'; diff --git a/packages/test-runner-webdriver/src/webdriverLauncher.ts b/packages/test-runner-webdriver/src/webdriverLauncher.ts index e23f0cad96..77e21b37fd 100644 --- a/packages/test-runner-webdriver/src/webdriverLauncher.ts +++ b/packages/test-runner-webdriver/src/webdriverLauncher.ts @@ -1,9 +1,9 @@ import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; import { Browser, remote } from 'webdriverio'; import { Capabilities } from '@wdio/types'; -import { IFrameManager } from './IFrameManager.js'; -import { SessionManager } from './SessionManager.js'; -import { getBrowserLabel } from './utils.js'; +import { IFrameManager } from './IFrameManager.ts'; +import { SessionManager } from './SessionManager.ts'; +import { getBrowserLabel } from './utils.ts'; type MouseButton = 'left' | 'middle' | 'right'; diff --git a/packages/test-runner-webdriver/tsconfig.json b/packages/test-runner-webdriver/tsconfig.json index cfc2218eeb..5bb6157920 100644 --- a/packages/test-runner-webdriver/tsconfig.json +++ b/packages/test-runner-webdriver/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/packages/test-runner/src/bin.ts b/packages/test-runner/src/bin.ts index b35c793ebb..39484d5834 100644 --- a/packages/test-runner/src/bin.ts +++ b/packages/test-runner/src/bin.ts @@ -1,4 +1,4 @@ #!/usr/bin/env node -import { startTestRunner } from './startTestRunner.js'; +import { startTestRunner } from './startTestRunner.ts'; startTestRunner(); diff --git a/packages/test-runner/src/config/collectGroupConfigs.ts b/packages/test-runner/src/config/collectGroupConfigs.ts index 620a9f64ad..d8e961f4f5 100644 --- a/packages/test-runner/src/config/collectGroupConfigs.ts +++ b/packages/test-runner/src/config/collectGroupConfigs.ts @@ -1,7 +1,7 @@ import { type TestRunnerGroupConfig } from '@web/test-runner-core'; import { readConfig, ConfigLoaderError } from '@web/config-loader'; import globby from 'globby'; -import { TestRunnerStartError } from '../TestRunnerStartError.js'; +import { TestRunnerStartError } from '../TestRunnerStartError.ts'; function validateGroupConfig(configFilePath: string, config: Partial) { if (config.browsers != null && !Array.isArray(config.browsers)) { diff --git a/packages/test-runner/src/config/loadLauncher.ts b/packages/test-runner/src/config/loadLauncher.ts index 0d24019149..29efce007c 100644 --- a/packages/test-runner/src/config/loadLauncher.ts +++ b/packages/test-runner/src/config/loadLauncher.ts @@ -1,4 +1,4 @@ -import { TestRunnerStartError } from '../TestRunnerStartError.js'; +import { TestRunnerStartError } from '../TestRunnerStartError.ts'; /* eslint-disable @typescript-eslint/no-var-requires */ const puppeteerBrowsers = ['chrome', 'firefox']; diff --git a/packages/test-runner/src/config/mergeConfigs.ts b/packages/test-runner/src/config/mergeConfigs.ts index 72a14f82a4..ff9413f826 100644 --- a/packages/test-runner/src/config/mergeConfigs.ts +++ b/packages/test-runner/src/config/mergeConfigs.ts @@ -1,5 +1,4 @@ -import { type TestRunnerConfig } from './TestRunnerConfig.js'; - +import { type TestRunnerConfig } from './TestRunnerConfig.ts'; const arrayKeys = ['plugins', 'middleware']; export function mergeConfigs(...configs: Partial[]) { diff --git a/packages/test-runner/src/config/parseConfig.ts b/packages/test-runner/src/config/parseConfig.ts index 27a8658303..914b849965 100644 --- a/packages/test-runner/src/config/parseConfig.ts +++ b/packages/test-runner/src/config/parseConfig.ts @@ -18,15 +18,14 @@ import { getPortPromise } from 'portfinder'; import path from 'path'; import { cpus } from 'os'; -import { type TestRunnerCliArgs } from './readCliArgs.js'; -import { mergeConfigs } from './mergeConfigs.js'; -import { type TestRunnerConfig } from './TestRunnerConfig.js'; -import { esbuildPlugin, nodeResolvePlugin } from '@web/dev-server'; -import { TestRunnerStartError } from '../TestRunnerStartError.js'; -import { collectGroupConfigs } from './collectGroupConfigs.js'; -import { playwrightLauncher, puppeteerLauncher } from './loadLauncher.js'; -import { defaultReporter } from '../reporter/defaultReporter.js'; -import { TestRunnerLogger } from '../logger/TestRunnerLogger.js'; +import { type TestRunnerCliArgs } from './readCliArgs.ts'; +import { mergeConfigs } from './mergeConfigs.ts'; +import { type TestRunnerConfig } from './TestRunnerConfig.ts';import { esbuildPlugin, nodeResolvePlugin } from '@web/dev-server'; +import { TestRunnerStartError } from '../TestRunnerStartError.ts'; +import { collectGroupConfigs } from './collectGroupConfigs.ts'; +import { playwrightLauncher, puppeteerLauncher } from './loadLauncher.ts'; +import { defaultReporter } from '../reporter/defaultReporter.ts'; +import { TestRunnerLogger } from '../logger/TestRunnerLogger.ts'; const secondMs = 1000; const minuteMs = secondMs * 60; diff --git a/packages/test-runner/src/config/readCliArgs.ts b/packages/test-runner/src/config/readCliArgs.ts index 59dad35720..ba4223aa46 100644 --- a/packages/test-runner/src/config/readCliArgs.ts +++ b/packages/test-runner/src/config/readCliArgs.ts @@ -2,8 +2,7 @@ import commandLineArgs from 'command-line-args'; import commandLineUsage, { OptionDefinition } from 'command-line-usage'; import camelCase from 'camelcase'; -import { type TestRunnerConfig } from './TestRunnerConfig.js'; - +import { type TestRunnerConfig } from './TestRunnerConfig.ts'; export interface TestRunnerCliArgs extends Partial< Pick< @@ -23,8 +22,7 @@ export interface TestRunnerCliArgs | 'debug' | 'esbuildTarget' > - > { - config?: string; + > { config?: string; groups?: string; group?: string; puppeteer?: boolean; diff --git a/packages/test-runner/src/config/readFileConfig.ts b/packages/test-runner/src/config/readFileConfig.ts index 863bf9dff6..ab40c7ff6e 100644 --- a/packages/test-runner/src/config/readFileConfig.ts +++ b/packages/test-runner/src/config/readFileConfig.ts @@ -1,6 +1,6 @@ import { readConfig, ConfigLoaderError } from '@web/config-loader'; -import { TestRunnerStartError } from '../TestRunnerStartError.js'; +import { TestRunnerStartError } from '../TestRunnerStartError.ts'; export interface ReadFileConfigParams { /** diff --git a/packages/test-runner/src/index.ts b/packages/test-runner/src/index.ts index 4704f16adc..963011059d 100644 --- a/packages/test-runner/src/index.ts +++ b/packages/test-runner/src/index.ts @@ -1,11 +1,11 @@ -import type { TestRunnerConfig as FullTestRunnerConfig } from './config/TestRunnerConfig.js'; +import type { TestRunnerConfig as FullTestRunnerConfig } from './config/TestRunnerConfig.ts'; export * from '@web/test-runner-core'; export { chromeLauncher } from '@web/test-runner-chrome'; -export { startTestRunner } from './startTestRunner.js'; -export { defaultReporter } from './reporter/defaultReporter.js'; -export { summaryReporter } from './reporter/summaryReporter.js'; -export { dotReporter } from './reporter/dotReporter.js'; -export { formatError } from './reporter/reportTestsErrors.js'; +export { startTestRunner } from './startTestRunner.ts'; +export { defaultReporter } from './reporter/defaultReporter.ts'; +export { summaryReporter } from './reporter/summaryReporter.ts'; +export { dotReporter } from './reporter/dotReporter.ts'; +export { formatError } from './reporter/reportTestsErrors.ts'; export type TestRunnerConfig = Partial; diff --git a/packages/test-runner/src/reporter/defaultReporter.ts b/packages/test-runner/src/reporter/defaultReporter.ts index 8af8fdb327..b3cc9b9824 100644 --- a/packages/test-runner/src/reporter/defaultReporter.ts +++ b/packages/test-runner/src/reporter/defaultReporter.ts @@ -5,8 +5,8 @@ import { type BufferedLogger, } from '@web/test-runner-core'; -import { reportTestFileResults } from './reportTestFileResults.js'; -import { getTestProgressReport } from './getTestProgress.js'; +import { reportTestFileResults } from './reportTestFileResults.ts'; +import { getTestProgressReport } from './getTestProgress.ts'; export interface DefaultReporterArgs { reportTestResults?: boolean; diff --git a/packages/test-runner/src/reporter/dotReporter.ts b/packages/test-runner/src/reporter/dotReporter.ts index ff568442da..ad30ff907a 100644 --- a/packages/test-runner/src/reporter/dotReporter.ts +++ b/packages/test-runner/src/reporter/dotReporter.ts @@ -1,9 +1,9 @@ import type { Reporter, ReporterArgs, TestSuiteResult } from '@web/test-runner-core'; -import { reportTestsErrors } from './reportTestsErrors.js'; -import { reportTestFileErrors } from './reportTestFileErrors.js'; +import { reportTestsErrors } from './reportTestsErrors.ts'; +import { reportTestFileErrors } from './reportTestFileErrors.ts'; -import { TestRunnerLogger } from '../logger/TestRunnerLogger.js'; +import { TestRunnerLogger } from '../logger/TestRunnerLogger.ts'; const color = ([x, y]: [number, number]) => diff --git a/packages/test-runner/src/reporter/getTestProgress.ts b/packages/test-runner/src/reporter/getTestProgress.ts index 77d6555c0d..2a163542f4 100644 --- a/packages/test-runner/src/reporter/getTestProgress.ts +++ b/packages/test-runner/src/reporter/getTestProgress.ts @@ -8,9 +8,9 @@ import { } from '@web/test-runner-core'; import { bold, gray, green, red } from 'nanocolors'; -import { getPassedFailedSkippedCount } from './utils/getPassedFailedSkippedCount.js'; -import { getCodeCoverage } from './getCodeCoverage.js'; -import { renderProgressBar } from './renderProgressBar.js'; +import { getPassedFailedSkippedCount } from './utils/getPassedFailedSkippedCount.ts'; +import { getCodeCoverage } from './getCodeCoverage.ts'; +import { renderProgressBar } from './renderProgressBar.ts'; export interface TestProgressArgs { browsers: BrowserLauncher[]; diff --git a/packages/test-runner/src/reporter/reportTestFileErrors.ts b/packages/test-runner/src/reporter/reportTestFileErrors.ts index a12c88511c..44feade23d 100644 --- a/packages/test-runner/src/reporter/reportTestFileErrors.ts +++ b/packages/test-runner/src/reporter/reportTestFileErrors.ts @@ -1,7 +1,7 @@ import { type TestSession, type TestResultError, type Logger } from '@web/test-runner-core'; import { gray, red } from 'nanocolors'; -import { getFailedOnBrowsers } from './utils/getFailedOnBrowsers.js'; +import { getFailedOnBrowsers } from './utils/getFailedOnBrowsers.ts'; function isSameError(a: TestResultError, b: TestResultError) { return a.message === b.message && a.stack === b.stack; diff --git a/packages/test-runner/src/reporter/reportTestFileResults.ts b/packages/test-runner/src/reporter/reportTestFileResults.ts index 616d359cd0..c820ef0291 100644 --- a/packages/test-runner/src/reporter/reportTestFileResults.ts +++ b/packages/test-runner/src/reporter/reportTestFileResults.ts @@ -2,10 +2,10 @@ import { type TestSession, type BufferedLogger } from '@web/test-runner-core'; import { bold, cyan } from 'nanocolors'; import { relative } from 'path'; -import { reportTestsErrors } from './reportTestsErrors.js'; -import { reportBrowserLogs } from './reportBrowserLogs.js'; -import { reportRequest404s } from './reportRequest404s.js'; -import { reportTestFileErrors } from './reportTestFileErrors.js'; +import { reportTestsErrors } from './reportTestsErrors.ts'; +import { reportBrowserLogs } from './reportBrowserLogs.ts'; +import { reportRequest404s } from './reportRequest404s.ts'; +import { reportTestFileErrors } from './reportTestFileErrors.ts'; export function reportTestFileResults( logger: BufferedLogger, diff --git a/packages/test-runner/src/reporter/reportTestsErrors.ts b/packages/test-runner/src/reporter/reportTestsErrors.ts index 1dacd95a63..768a320fcb 100644 --- a/packages/test-runner/src/reporter/reportTestsErrors.ts +++ b/packages/test-runner/src/reporter/reportTestsErrors.ts @@ -2,8 +2,8 @@ import { type TestResultError, type TestSession, type Logger } from '@web/test-r import { gray, green, red } from 'nanocolors'; import * as diff from 'diff'; -import { getFailedOnBrowsers } from './utils/getFailedOnBrowsers.js'; -import { getFlattenedTestResults } from './utils/getFlattenedTestResults.js'; +import { getFailedOnBrowsers } from './utils/getFailedOnBrowsers.ts'; +import { getFlattenedTestResults } from './utils/getFlattenedTestResults.ts'; function renderDiff(actual: string, expected: string) { function cleanUp(line: string) { diff --git a/packages/test-runner/src/reporter/summaryReporter.ts b/packages/test-runner/src/reporter/summaryReporter.ts index 8899e062b8..c69211376a 100644 --- a/packages/test-runner/src/reporter/summaryReporter.ts +++ b/packages/test-runner/src/reporter/summaryReporter.ts @@ -6,11 +6,11 @@ import type { TestSuiteResult, } from '@web/test-runner-core'; -import { reportTestsErrors } from './reportTestsErrors.js'; -import { reportTestFileErrors } from './reportTestFileErrors.js'; +import { reportTestsErrors } from './reportTestsErrors.ts'; +import { reportTestFileErrors } from './reportTestFileErrors.ts'; -import { TestRunnerLogger } from '../logger/TestRunnerLogger.js'; -import { reportBrowserLogs } from './reportBrowserLogs.js'; +import { TestRunnerLogger } from '../logger/TestRunnerLogger.ts'; +import { reportBrowserLogs } from './reportBrowserLogs.ts'; interface Options { flatten?: boolean; diff --git a/packages/test-runner/src/startTestRunner.ts b/packages/test-runner/src/startTestRunner.ts index 5214691ba2..ce6c1e1edd 100644 --- a/packages/test-runner/src/startTestRunner.ts +++ b/packages/test-runner/src/startTestRunner.ts @@ -2,12 +2,12 @@ import { TestRunner, TestRunnerCli } from '@web/test-runner-core'; import { red } from 'nanocolors'; -import { TestRunnerConfig } from './config/TestRunnerConfig.js'; -import { mergeConfigs } from './config/mergeConfigs.js'; -import { parseConfig } from './config/parseConfig.js'; -import { readCliArgs } from './config/readCliArgs.js'; -import { readFileConfig } from './config/readFileConfig.js'; -import { TestRunnerStartError } from './TestRunnerStartError.js'; +import { TestRunnerConfig } from './config/TestRunnerConfig.ts'; +import { mergeConfigs } from './config/mergeConfigs.ts'; +import { parseConfig } from './config/parseConfig.ts'; +import { readCliArgs } from './config/readCliArgs.ts'; +import { readFileConfig } from './config/readFileConfig.ts'; +import { TestRunnerStartError } from './TestRunnerStartError.ts'; export interface StartTestRunnerParams { /** diff --git a/packages/test-runner/tsconfig.json b/packages/test-runner/tsconfig.json index 8ebd3a78b5..5e7a1b34b3 100644 --- a/packages/test-runner/tsconfig.json +++ b/packages/test-runner/tsconfig.json @@ -1,9 +1,15 @@ // Don't edit this file directly. It is generated by generate-ts-configs script { + "ts-node": { + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } + }, "extends": "../../tsconfig.node-base.json", "compilerOptions": { - "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "composite": true, diff --git a/scripts/fix-jridgewell-dcts.js b/scripts/fix-jridgewell-dcts.js new file mode 100644 index 0000000000..dd0f2b79d9 --- /dev/null +++ b/scripts/fix-jridgewell-dcts.js @@ -0,0 +1,22 @@ +// Workaround for @jridgewell/remapping .d.cts syntax incompatible with TS 5.9+ +// The `export = function` syntax in .d.cts files causes TS1005 parse errors. +// See: https://github.com/jridgewell/remapping/issues/XXX +const fs = require('fs'); +const path = require('path'); + +const file = path.join( + __dirname, + '..', + 'node_modules', + '@jridgewell', + 'remapping', + 'types', + 'remapping.d.cts', +); +if (fs.existsSync(file)) { + let content = fs.readFileSync(file, 'utf8'); + if (content.includes('export = function')) { + content = content.replace('export = function', 'export default function'); + fs.writeFileSync(file, content); + } +} diff --git a/tsconfig.browser-base.json b/tsconfig.browser-base.json index 4f9f096f34..68aaa3c78b 100644 --- a/tsconfig.browser-base.json +++ b/tsconfig.browser-base.json @@ -38,15 +38,17 @@ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + "module": "nodenext" /* Emit ESM output for Node 24+ */, + "moduleResolution": "nodenext" /* Use Node.js ESM resolution */, // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ "typeRoots": ["@types", "./types"], - "types": ["mocha", "chai"] /* Type declaration files to be included in compilation. */, + // "types": [] /* Type declaration files to be included in compilation. */, "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + "rewriteRelativeImportExtensions": true /* Rewrite .ts/.tsx extensions to .js/.jsx in output */, // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ diff --git a/tsconfig.new.json b/tsconfig.new.json index 003b223e6c..b7054bb8cf 100644 --- a/tsconfig.new.json +++ b/tsconfig.new.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ESNext", - "module": "ESNext", + "module": "NodeNext", "moduleResolution": "NodeNext", "lib": ["es2017", "dom"], "allowJs": true, diff --git a/tsconfig.node-base.json b/tsconfig.node-base.json index 2a3d218b54..4562bc952c 100644 --- a/tsconfig.node-base.json +++ b/tsconfig.node-base.json @@ -1,11 +1,16 @@ { "ts-node": { - "experimentalResolver": true + "experimentalResolver": true, + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "rewriteRelativeImportExtensions": false + } }, "compilerOptions": { /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ - "target": "ES2017" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "target": "ES2020" /* Specify ECMAScript target version for Node 24 */, // "lib": [], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ @@ -41,15 +46,16 @@ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + "module": "nodenext" /* Emit ESM output for Node 24+ */, + "moduleResolution": "nodenext" /* Use Node.js ESM resolution */, // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ - "typeRoots": ["@types", "./types"], - "types": ["node", "mocha", "chai"] /* Type declaration files to be included in compilation. */, + // "types": ["node"] /* Type declaration files to be included in compilation. */, "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + "rewriteRelativeImportExtensions": true /* Rewrite .ts/.tsx extensions to .js/.jsx in output */, // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ diff --git "a/\342\206\222" "b/\342\206\222" new file mode 100644 index 0000000000..e69de29bb2