From f1e0c653724dfade15b043ddddb43cc6827567ac Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 27 Oct 2026 16:35:11 +0900 Subject: [PATCH 1/8] NXT-20982: Upgrade chalk to v6; drop import-fresh for inlined uncached require - chalk ^5.6.2 -> ^6.0.1. No code change needed: all usages already use the ESM-compatible dynamic import('chalk') / new Chalk() patterns. - Remove the import-fresh dependency. import-fresh 4 is ESM-only and exposes an asynchronous, module-loader-hook based importer, which is incompatible with the synchronous prerender path in vdom-server-render (invoked inside webpack's synchronous chunkAsset SyncHook). Inline the small, CommonJS-only behavior the code relied on (resolve, drop from require.cache incl. parent linkage, require again) so render() stays synchronous and PrerenderPlugin is unchanged. --- npm-shrinkwrap.json | 371 +++++++++--------- package.json | 23 +- plugins/PrerenderPlugin/vdom-server-render.js | 33 +- 3 files changed, 230 insertions(+), 197 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 93e7d44..321754e 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -9,33 +9,32 @@ "version": "7.0.6", "license": "Apache-2.0", "dependencies": { - "browserslist": "^4.28.2", - "chalk": "^5.6.2", + "browserslist": "^4.29.5", + "chalk": "^6.0.1", "console.mute": "^0.3.0", "core-js": "3.22.8", "fast-glob": "^3.3.3", "fbjs": "^3.0.5", "find-cache-directory": "^6.0.0", "graceful-fs": "^4.2.11", - "import-fresh": "^3.3.1", "loader-utils": "^3.3.1", "mock-require": "^3.0.3", - "resolve": "^1.22.12", + "resolve": "^1.22.13", "tapable": "^2.3.3", - "webpack-bundle-analyzer": "^5.3.0", - "webpack-sources": "^3.5.0" + "webpack-bundle-analyzer": "^5.4.0", + "webpack-sources": "^3.6.0" }, "devDependencies": { "eslint": "^9.39.4", "eslint-config-enact": "^5.1.3", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-prettier": "^5.5.6", - "globals": "^17.6.0", - "html-webpack-plugin": "^5.6.7", - "prettier": "^3.8.4", - "react": "^19.2.7", - "webpack": "^5.107.2" + "eslint-plugin-prettier": "^5.5.7", + "globals": "^17.13.0", + "html-webpack-plugin": "^5.6.8", + "prettier": "^3.9.10", + "react": "^19.3.1", + "webpack": "^5.112.2" }, "engines": { "node": "^20.9.0 || >=21.1.0" @@ -62,6 +61,17 @@ "node": ">=14.17.0" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", + "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/JounQin" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", @@ -146,9 +156,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", - "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.7.tgz", + "integrity": "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==", "dev": true, "license": "MIT", "dependencies": { @@ -158,7 +168,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.3.0", + "js-yaml": "^4.3.2", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, @@ -318,9 +328,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", "dev": true, "license": "MIT" }, @@ -425,13 +435,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.2.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", - "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~8.3.0" + "undici-types": "~8.9.0" } }, "node_modules/@webassemblyjs/ast": { @@ -610,9 +620,9 @@ "license": "Apache-2.0" }, "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -661,9 +671,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { @@ -753,18 +763,18 @@ } }, "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.2.0.tgz", + "integrity": "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "es-shim-unscopables": "^1.1.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" }, @@ -897,9 +907,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.16", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.16.tgz", - "integrity": "sha512-H/bNPUFHewJHyCTdjn1n3Pit5+2GmWT6mmeHImPX+8MA9NA6b67jO4gYmi4jTbCJb2otq34KMZnovndDPqJwhQ==", + "version": "2.11.33", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz", + "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -916,9 +926,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "dev": true, "license": "MIT", "dependencies": { @@ -939,9 +949,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "version": "4.29.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.5.tgz", + "integrity": "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==", "funding": [ { "type": "opencollective", @@ -958,11 +968,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" + "baseline-browser-mapping": "^2.11.33", + "caniuse-lite": "^1.0.30001819", + "electron-to-chromium": "^1.5.464", + "node-releases": "^2.0.60", + "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" @@ -1032,6 +1042,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1049,9 +1060,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "version": "1.0.30001819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", + "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", "funding": [ { "type": "opencollective", @@ -1069,12 +1080,12 @@ "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.1.tgz", + "integrity": "sha512-/Ce6KNm3vIbWdMlNna6RVIZ/ICQxnJxCicet5LBKK9ZffBkqzDw0xh9EiKSljdRtiIQ1S1z4YgcscUUGzNCWrA==", "license": "MIT", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=22" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" @@ -1442,15 +1453,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.412", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.412.tgz", - "integrity": "sha512-z4rMe3esBzlzovKHj4gxJnsCGZRK5l4baUvm+gCGJBPE+gsyUMKsuU9tnEUtI1dOebXz1ytAPGjvXhmQ7rIPwA==", + "version": "1.5.465", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.465.tgz", + "integrity": "sha512-zg4iUpbeGw7YNZsswc2xKr2uiBex2d8dELAXo92Icw3but1ULbrvK8USe6wVLaWjgJnKBARv0pchx9Owktx6wQ==", "license": "ISC" }, "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz", + "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==", "dev": true, "license": "MIT", "dependencies": { @@ -8166,14 +8177,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", - "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", + "version": "5.5.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.7.tgz", + "integrity": "sha512-WjHyn3GrFd+ZR0rzsLiM4zJZ35PZMOE0SUIxzGmnWNG0126yNfJKJzObmmkYDwHJfGlkz3PSlzyG9ez/LJntwg==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.13" + "synckit": "^0.12.3" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -8387,9 +8398,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz", + "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==", "dev": true, "funding": [ { @@ -8404,9 +8415,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -8670,9 +8681,9 @@ } }, "node_modules/globals": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz", - "integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==", + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz", + "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==", "dev": true, "license": "MIT", "engines": { @@ -8916,6 +8927,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -9038,12 +9050,12 @@ } }, "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.3" + "hasown": "^2.0.4" }, "engines": { "node": ">= 0.4" @@ -9393,9 +9405,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -9607,16 +9619,16 @@ } }, "node_modules/minimizer-webpack-plugin": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", - "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.13.1.tgz", + "integrity": "sha512-1mhAfvachWYYOm8tpmany5NLuvP+F2wxZWBSX8DC0uFS2wJpM9q3rWgN9wBooAH9d5V12wX0BjyJe4fMjHMarQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", + "@jridgewell/trace-mapping": "^0.3.31", "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" + "schema-utils": "^4.6.0", + "terser": "^5.51.0" }, "engines": { "node": ">= 10.13.0" @@ -9632,6 +9644,9 @@ "@minify-html/node": { "optional": true }, + "@napi-rs/image": { + "optional": true + }, "@swc/core": { "optional": true }, @@ -9656,12 +9671,21 @@ "html-minifier-terser": { "optional": true }, + "imagemin": { + "optional": true + }, "lightningcss": { "optional": true }, "postcss": { "optional": true }, + "sharp": { + "optional": true + }, + "svgo": { + "optional": true + }, "uglify-js": { "optional": true } @@ -9703,13 +9727,6 @@ "dev": true, "license": "MIT" }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -9761,9 +9778,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "version": "2.0.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz", + "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==", "license": "MIT", "engines": { "node": ">=18" @@ -10009,6 +10026,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -10108,9 +10126,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz", + "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==", "dev": true, "license": "MIT", "bin": { @@ -10187,9 +10205,9 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", - "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "version": "19.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.1.tgz", + "integrity": "sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==", "dev": true, "license": "MIT", "engines": { @@ -10281,13 +10299,13 @@ } }, "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "version": "1.22.13", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", + "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", + "is-core-module": "^2.17.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10305,6 +10323,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -10399,23 +10418,34 @@ } }, "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.8.1.tgz", + "integrity": "sha512-x39pYlJPyH7Uge5QO64B9XGP9zLDc9WNmiQZc+CE3IzZPvMu3lHOuAMGpYNoPixEL7MSWlGhYTg5UlLSL8G6iw==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", + "@types/json-schema": "^7.0.15", + "ajv": "^8.20.0", + "ajv-formats": "^3.0.1", "ajv-keywords": "^5.1.0" }, + "bin": { + "schema-utils": "bin/schema-utils.js" + }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.112.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/schema-utils/node_modules/ajv": { @@ -10793,12 +10823,13 @@ } }, "node_modules/synckit": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", - "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.12.3.tgz", + "integrity": "sha512-U+/AXT6LWsxnj2vz9HeUuPWBNgdWxjyIEjEPdbJARC9txmgPzo2VEdqnFo4hHaNyMPtycyVJrSaQYeQv/PoyyA==", "dev": true, "license": "MIT", "dependencies": { + "@dual-bundle/import-meta-resolve": "^4.2.1", "@pkgr/core": "^0.3.6" }, "engines": { @@ -10822,9 +10853,9 @@ } }, "node_modules/terser": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.50.0.tgz", - "integrity": "sha512-CN9BVxWhgS/hRxtUMjtC2uRWSTcSfQFHMDWma6sKKfIivCD91sM+FOPfvwoaRMqCSrUpe1nv3jDamd9eEQ4y+w==", + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10943,19 +10974,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz", + "integrity": "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", + "call-bind": "^1.0.9", + "for-each": "^0.3.5", "gopd": "^1.2.0", - "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" @@ -11031,16 +11061,16 @@ } }, "node_modules/undici-types": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", - "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", "dev": true, "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", - "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", "funding": [ { "type": "opencollective", @@ -11085,9 +11115,9 @@ "license": "MIT" }, "node_modules/watchpack": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", - "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.6.3.tgz", + "integrity": "sha512-s3NZy0QpTY9qGqzc0wtz4qI28z3+5qKbbAec4MV4G9N3CfgZ9wgvQRr0cl2jh/tqkWG1NWHkmVMHZpCamev5Wg==", "dev": true, "license": "MIT", "dependencies": { @@ -11104,9 +11134,9 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.109.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.109.2.tgz", - "integrity": "sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==", + "version": "5.112.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.112.2.tgz", + "integrity": "sha512-B2tp1LI9D8GVpPDqprdt12ukTkXXahj9MzqSWJq4faSPgOUM7CdZaGAB6HrL/8E6UwbBpdj4vzWDbKoFnVoU6g==", "dev": true, "license": "MIT", "dependencies": { @@ -11115,21 +11145,18 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.24.4", + "enhanced-resolve": "^5.26.0", "es-module-lexer": "^2.1.0", - "eslint-scope": "5.1.1", "events": "^3.2.0", "graceful-fs": "^4.2.11", "mime-db": "^1.54.0", - "minimizer-webpack-plugin": "^5.6.1", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", + "minimizer-webpack-plugin": "^5.13.0", + "schema-utils": "^4.8.1", "tapable": "^2.3.0", - "watchpack": "^2.5.2", - "webpack-sources": "^3.5.1" + "watchpack": "^2.6.3", + "webpack-sources": "^3.6.0" }, "bin": { "webpack": "bin/webpack.js" @@ -11148,9 +11175,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.3.1.tgz", - "integrity": "sha512-wP2EusncRGL1tZyMHC/umLkjPdYMkTL9nPEKh8G8dkYCJ9TyF6xnXFqjhdqmv5J900irN/g0P5jMvLT22krEXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.4.0.tgz", + "integrity": "sha512-6OjsEFQIwcRT1nId/O7OyHjDvrE0JSFAef/XCwGarrf9MF5/CaD0lhDvoySbus57dYEdJ3vrRVj5F3i30c4ozw==", "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.6.3", @@ -11193,38 +11220,14 @@ } }, "node_modules/webpack-sources": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", - "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.6.0.tgz", + "integrity": "sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA==", "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/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==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/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" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -11319,9 +11322,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", - "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.24.tgz", + "integrity": "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11351,9 +11354,9 @@ } }, "node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index f73ec6c..601e789 100644 --- a/package.json +++ b/package.json @@ -26,21 +26,20 @@ "arrowParens": "avoid" }, "dependencies": { - "browserslist": "^4.28.2", - "chalk": "^5.6.2", + "browserslist": "^4.29.5", + "chalk": "^6.0.1", "console.mute": "^0.3.0", "core-js": "3.22.8", "fast-glob": "^3.3.3", "fbjs": "^3.0.5", "find-cache-directory": "^6.0.0", "graceful-fs": "^4.2.11", - "import-fresh": "^3.3.1", "loader-utils": "^3.3.1", "mock-require": "^3.0.3", - "resolve": "^1.22.12", + "resolve": "^1.22.13", "tapable": "^2.3.3", - "webpack-bundle-analyzer": "^5.3.0", - "webpack-sources": "^3.5.0" + "webpack-bundle-analyzer": "^5.4.0", + "webpack-sources": "^3.6.0" }, "peerDependencies": { "html-webpack-plugin": ">=5.0.0", @@ -62,11 +61,11 @@ "eslint-config-enact": "^5.1.3", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-prettier": "^5.5.6", - "globals": "^17.6.0", - "html-webpack-plugin": "^5.6.7", - "prettier": "^3.8.4", - "react": "^19.2.7", - "webpack": "^5.107.2" + "eslint-plugin-prettier": "^5.5.7", + "globals": "^17.13.0", + "html-webpack-plugin": "^5.6.8", + "prettier": "^3.9.10", + "react": "^19.3.1", + "webpack": "^5.112.2" } } \ No newline at end of file diff --git a/plugins/PrerenderPlugin/vdom-server-render.js b/plugins/PrerenderPlugin/vdom-server-render.js index d79d0f0..26471d6 100644 --- a/plugins/PrerenderPlugin/vdom-server-render.js +++ b/plugins/PrerenderPlugin/vdom-server-render.js @@ -7,7 +7,6 @@ const fs = require('fs'); const path = require('path'); -const requireUncached = require('import-fresh'); const reroute = require('mock-require'); const FileXHR = require('./FileXHR'); @@ -16,6 +15,38 @@ require('console.mute'); let chunkTarget; let prerenderCache; +// Synchronously require a module while bypassing the require cache. +// +// This previously used the `import-fresh` package (v3). import-fresh 4 is +// ESM-only and exposes an asynchronous, module-loader-hook based importer, +// which is incompatible with this synchronous prerender path (it runs inside +// webpack's synchronous `chunkAsset` hook). The behavior relied on here is +// small and purely CommonJS, so it is inlined: resolve the module, drop it +// (and its stale parent linkage) from `require.cache`, then require it again +// to obtain a fresh instance. +function requireUncached(moduleId) { + if (typeof moduleId !== 'string') { + throw new TypeError('Expected a string'); + } + + const filePath = require.resolve(moduleId); + const oldModule = require.cache[filePath]; + + // Detach the stale module from its parent's children to avoid leaking it. + if (oldModule && oldModule.parent) { + let i = oldModule.parent.children.length; + while (i--) { + if (oldModule.parent.children[i].id === filePath) { + oldModule.parent.children.splice(i, 1); + } + } + } + + delete require.cache[filePath]; + + return require(filePath); +} + import('find-cache-directory').then(({default: findCacheDirectory}) => { prerenderCache = path.join( findCacheDirectory({ From 57b0a781996aaedb7ab9f706676cbbae891fa476 Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 27 Oct 2026 17:09:45 +0900 Subject: [PATCH 2/8] NXT-20982: Use public webpack API for RuntimeGlobals webpack 5.112 relocated RuntimeGlobals from webpack/lib/RuntimeGlobals to webpack/lib/runtime/RuntimeGlobals, so the deep require broke framework builds ('Cannot find module webpack/lib/RuntimeGlobals') on webpack >= 5.112. Switch to the public API (require('webpack').RuntimeGlobals), which resolves across webpack 5 versions. The other deep webpack/lib requires in the dll plugins (DllEntryPlugin, DllModule, Delegated*, ExternalsPlugin) still exist in 5.112 and are left unchanged. --- plugins/dll/EnactFrameworkPlugin.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/dll/EnactFrameworkPlugin.js b/plugins/dll/EnactFrameworkPlugin.js index a427975..8f64b64 100644 --- a/plugins/dll/EnactFrameworkPlugin.js +++ b/plugins/dll/EnactFrameworkPlugin.js @@ -2,7 +2,12 @@ const fs = require('fs'); const path = require('path'); const DllEntryPlugin = require('webpack/lib/dll/DllEntryPlugin'); const DllModule = require('webpack/lib/dll/DllModule'); -const RuntimeGlobals = require('webpack/lib/RuntimeGlobals'); +// Use the public webpack API for RuntimeGlobals. The internal path moved from +// `webpack/lib/RuntimeGlobals` to `webpack/lib/runtime/RuntimeGlobals` in +// webpack 5.112, so requiring the deep path directly breaks on newer webpack. +// `require('webpack').RuntimeGlobals` resolves to the same module across +// webpack 5 versions. +const {RuntimeGlobals} = require('webpack'); const {RawSource} = require('webpack-sources'); const app = require('../../option-parser'); From 663a65f81e23d69de06756bcc3066da35997b69d Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 27 Oct 2026 17:22:31 +0900 Subject: [PATCH 3/8] NXT-20982: Fix relocated webpack internals in EnactFrameworkRefPlugin webpack 5.112 moved internal modules, breaking the external-framework build ('Cannot find module webpack/lib/dependencies/DelegatedSourceDependency'): - ExternalsPlugin: use the public API require('webpack').ExternalsPlugin (its internal path moved to lib/externals/). - DelegatedSourceDependency: moved from lib/dependencies/ to lib/dll/. It has no public API, so resolve it tolerantly across both locations. - DelegatedModule: wrapped with the same tolerant resolver for robustness. Keeps compatibility with both older (5.109) and newer (5.112+) webpack 5. --- plugins/dll/EnactFrameworkRefPlugin.js | 27 +++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/plugins/dll/EnactFrameworkRefPlugin.js b/plugins/dll/EnactFrameworkRefPlugin.js index f1d29b7..a694544 100644 --- a/plugins/dll/EnactFrameworkRefPlugin.js +++ b/plugins/dll/EnactFrameworkRefPlugin.js @@ -1,9 +1,30 @@ const fs = require('fs'); const path = require('path'); const gracefulFs = require('graceful-fs'); -const DelegatedSourceDependency = require('webpack/lib/dependencies/DelegatedSourceDependency'); -const DelegatedModule = require('webpack/lib/dll/DelegatedModule'); -const ExternalsPlugin = require('webpack/lib/ExternalsPlugin'); +// `ExternalsPlugin` is available on the public webpack API, which is stable +// across webpack 5 versions (its internal path moved to lib/externals/ in +// webpack 5.112). +const {ExternalsPlugin} = require('webpack'); +// `DelegatedSourceDependency` and `DelegatedModule` are internal and not +// exposed on the public API. webpack 5.112 relocated +// `DelegatedSourceDependency` from lib/dependencies/ to lib/dll/, so try the +// known locations in order to stay compatible with both older and newer +// webpack 5 releases. +const requireFirst = candidates => { + for (const id of candidates) { + try { + return require(id); + } catch (err) { + if (err && err.code !== 'MODULE_NOT_FOUND') throw err; + } + } + throw new Error('Unable to resolve any of: ' + candidates.join(', ')); +}; +const DelegatedSourceDependency = requireFirst([ + 'webpack/lib/dll/DelegatedSourceDependency', + 'webpack/lib/dependencies/DelegatedSourceDependency' +]); +const DelegatedModule = requireFirst(['webpack/lib/dll/DelegatedModule']); const app = require('../../option-parser'); const findParentMain = function (dir) { From f4f330412c950dc9e2803d525135200a814ae33a Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 27 Oct 2026 17:26:23 +0900 Subject: [PATCH 4/8] NXT-20982: Simplify webpack internal imports for webpack 5.112 Drop the webpack 5.109 compatibility fallback and target webpack 5.112 directly: - DelegatedSourceDependency / DelegatedModule: require from lib/dll/ directly. - ExternalsPlugin / RuntimeGlobals: use the public webpack API. --- plugins/dll/EnactFrameworkPlugin.js | 5 ----- plugins/dll/EnactFrameworkRefPlugin.js | 25 ++----------------------- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/plugins/dll/EnactFrameworkPlugin.js b/plugins/dll/EnactFrameworkPlugin.js index 8f64b64..ecd6d12 100644 --- a/plugins/dll/EnactFrameworkPlugin.js +++ b/plugins/dll/EnactFrameworkPlugin.js @@ -2,11 +2,6 @@ const fs = require('fs'); const path = require('path'); const DllEntryPlugin = require('webpack/lib/dll/DllEntryPlugin'); const DllModule = require('webpack/lib/dll/DllModule'); -// Use the public webpack API for RuntimeGlobals. The internal path moved from -// `webpack/lib/RuntimeGlobals` to `webpack/lib/runtime/RuntimeGlobals` in -// webpack 5.112, so requiring the deep path directly breaks on newer webpack. -// `require('webpack').RuntimeGlobals` resolves to the same module across -// webpack 5 versions. const {RuntimeGlobals} = require('webpack'); const {RawSource} = require('webpack-sources'); const app = require('../../option-parser'); diff --git a/plugins/dll/EnactFrameworkRefPlugin.js b/plugins/dll/EnactFrameworkRefPlugin.js index a694544..3b68b44 100644 --- a/plugins/dll/EnactFrameworkRefPlugin.js +++ b/plugins/dll/EnactFrameworkRefPlugin.js @@ -1,30 +1,9 @@ const fs = require('fs'); const path = require('path'); const gracefulFs = require('graceful-fs'); -// `ExternalsPlugin` is available on the public webpack API, which is stable -// across webpack 5 versions (its internal path moved to lib/externals/ in -// webpack 5.112). +const DelegatedSourceDependency = require('webpack/lib/dll/DelegatedSourceDependency'); +const DelegatedModule = require('webpack/lib/dll/DelegatedModule'); const {ExternalsPlugin} = require('webpack'); -// `DelegatedSourceDependency` and `DelegatedModule` are internal and not -// exposed on the public API. webpack 5.112 relocated -// `DelegatedSourceDependency` from lib/dependencies/ to lib/dll/, so try the -// known locations in order to stay compatible with both older and newer -// webpack 5 releases. -const requireFirst = candidates => { - for (const id of candidates) { - try { - return require(id); - } catch (err) { - if (err && err.code !== 'MODULE_NOT_FOUND') throw err; - } - } - throw new Error('Unable to resolve any of: ' + candidates.join(', ')); -}; -const DelegatedSourceDependency = requireFirst([ - 'webpack/lib/dll/DelegatedSourceDependency', - 'webpack/lib/dependencies/DelegatedSourceDependency' -]); -const DelegatedModule = requireFirst(['webpack/lib/dll/DelegatedModule']); const app = require('../../option-parser'); const findParentMain = function (dir) { From 7dbd3250ac7f371083bd13b51c25ceb901a5b95c Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Wed, 28 Oct 2026 10:03:10 +0900 Subject: [PATCH 5/8] NXT-20982: Fix CI lint failure for chalk 6 import resolution chalk 6 ships a conditional `exports` map that eslint-import-resolver-node (via eslint-plugin-import) cannot resolve, so the dynamic `import('chalk')` calls produced false `import/no-unresolved` errors and failed the CI lint (run with --max-warnings 0). Ignore `chalk` in the import/no-unresolved rule; the import resolves correctly at runtime. --- eslint.config.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/eslint.config.js b/eslint.config.js index 9dff0e8..005d6cd 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -26,7 +26,12 @@ module.exports = [ ignores: ['plugins/SnapshotPlugin/snapshot-helper.js', 'plugins/SnapshotPlugin/mock-window.js'], rules: { // import plugin rules - 'import/no-unresolved': ['error', {commonjs: true, caseSensitive: true}], + // `chalk` is ESM-only and, since v6, ships a conditional `exports` + // map that eslint-import-resolver-node (used by eslint-plugin-import) + // cannot resolve, producing false `import/no-unresolved` errors for + // our dynamic `import('chalk')` calls. The import resolves fine at + // runtime, so ignore it here. + 'import/no-unresolved': ['error', {commonjs: true, caseSensitive: true, ignore: ['^chalk$']}], 'import/named': 'error', 'import/first': 'warn', 'import/no-duplicates': 'error', From 75d36a9793563276ddb48c1e805e8a7e77f46cfd Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Wed, 28 Oct 2026 11:22:58 +0900 Subject: [PATCH 6/8] NXT-20982: Add CHANGELOG entry --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fae498..52ea312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# unreleased + +* `PrerenderPlugin`: Removed the `import-fresh` dependency and inlined its synchronous uncached-require behavior, since `import-fresh` 4 is ESM-only and asynchronous, which is incompatible with the synchronous prerender path. +* `EnactFrameworkPlugin`: Used the public `require('webpack').RuntimeGlobals` API, as `webpack` 5.112 relocated the internal `webpack/lib/RuntimeGlobals` module. +* `EnactFrameworkRefPlugin`: Used the public `require('webpack').ExternalsPlugin` API and updated the `DelegatedSourceDependency` import path, as `webpack` 5.112 relocated those internal modules. +* Updated dependencies, including a major update to `chalk` (v6). + # 7.0.6 (August 21, 2026) * Updated dependencies. From a57fba7a4bb15d5f055e09febb741f2a100f0a0f Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" <35059065+hong6316@users.noreply.github.com> Date: Fri, 30 Oct 2026 09:57:44 +0900 Subject: [PATCH 7/8] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 601e789..97bf6ae 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ }, "peerDependencies": { "html-webpack-plugin": ">=5.0.0", - "webpack": ">=5.0.0" + "webpack": ">=5.112.0" }, "peerDependenciesMeta": { "html-webpack-plugin": { @@ -68,4 +68,4 @@ "react": "^19.3.1", "webpack": "^5.112.2" } -} \ No newline at end of file +} From 25db9be094ea78c9906099fb2b3ab43356de21e5 Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Fri, 30 Oct 2026 10:06:41 +0900 Subject: [PATCH 8/8] update npm-shrinkwrap.json --- npm-shrinkwrap.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 321754e..ac648db 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -41,7 +41,7 @@ }, "peerDependencies": { "html-webpack-plugin": ">=5.0.0", - "webpack": ">=5.0.0" + "webpack": ">=5.112.0" }, "peerDependenciesMeta": { "html-webpack-plugin": { @@ -407,9 +407,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.10.tgz", + "integrity": "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==", "dev": true, "license": "MIT" }, @@ -435,9 +435,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", - "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", + "version": "26.6.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.6.tgz", + "integrity": "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==", "dev": true, "license": "MIT", "dependencies": { @@ -907,9 +907,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.33", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz", - "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==", + "version": "2.11.34", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.34.tgz", + "integrity": "sha512-Aqr8mA1kIvyJ3UY5YAY7ib8LSo1DmDMbMnVqGPtsKW1LxaFQFwn9Eb3yvq2fUKJsRvaXjnAV7R5osqETapzNiA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -1060,9 +1060,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001819", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", - "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", + "version": "1.0.30001820", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001820.tgz", + "integrity": "sha512-gfWD6MxqVCqAOwmODfZf7DchWvlrA+SRdNX7ceLfg3xRqe5ssjjpF7EgslC/0tiLiNTajdaNN/q8c/5u/7Gz8w==", "funding": [ { "type": "opencollective", @@ -1453,9 +1453,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.465", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.465.tgz", - "integrity": "sha512-zg4iUpbeGw7YNZsswc2xKr2uiBex2d8dELAXo92Icw3but1ULbrvK8USe6wVLaWjgJnKBARv0pchx9Owktx6wQ==", + "version": "1.5.467", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.467.tgz", + "integrity": "sha512-Nw9X371rtZmYcBSnEijnCDONILjs93biCZO34juC7MBOmK8E+GFnyD4T/WvyrlJkppul7oxg6TwvtKst9SODTw==", "license": "ISC" }, "node_modules/enhanced-resolve": { @@ -9778,9 +9778,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz", - "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==", + "version": "2.0.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.61.tgz", + "integrity": "sha512-5NUN6QCxNFrS9oEA9RPS+d0AP+ooGBzzovY2JhIpDRHacPvOhHjXjUsUMX9qp4nLHZ+5jVgXB2jj/P4arGOE/g==", "license": "MIT", "engines": { "node": ">=18"