{"_id":"webpack-v5-chain","_rev":"7-d4536c3a0ce1b0ff065f68d755ed8a92","name":"webpack-v5-chain","dist-tags":{"latest":"2.1.0"},"versions":{"0.0.1":{"name":"webpack-v5-chain","version":"0.0.1","keywords":["webpack","config","chain"],"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","_id":"webpack-v5-chain@0.0.1","maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"homepage":"https://github.com/Mister-Hope/webpack-v5-chain#readme","bugs":{"url":"https://github.com/Mister-Hope/webpack-v5-chain/issues"},"dist":{"shasum":"66c5ee39dfb3f53f3a8dcc92586a0d70debc6fd2","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-0.0.1.tgz","fileCount":6,"integrity":"sha512-ZXrX1Qwj7QhC46f9STpKNU7saW6Vp+QZrXUYUjIsUbz5xT7joMOXyEbyovw7OhKvBCLEtrqFBHlmdog4Qt90aA==","signatures":[{"sig":"MEYCIQDvls7ZjLNVF4Vh5GICfeBJpqULjqpPcLXdZeG8mWtJEQIhAM256gn7rItmBpGLkT5bkesC48sFrHbizHHwt308Fopy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138249},"main":"./dist/index.js","_from":"file:webpack-v5-chain-0.0.1.tgz","engines":{"node":">=20"},"scripts":{"lint":"prettier --check --write . && eslint . --fix","test":"vitest","build":"rollup -c rollup.config.mts --configPlugin esbuild","clean":"rimraf ./dist"},"typings":"./dist/index.d.ts","_npmUser":{"name":"mister-hope","email":"mister-hope@outlook.com"},"_resolved":"/tmp/8ac86e21aaf880ba069099c24c5c7b86/webpack-v5-chain-0.0.1.tgz","_integrity":"sha512-ZXrX1Qwj7QhC46f9STpKNU7saW6Vp+QZrXUYUjIsUbz5xT7joMOXyEbyovw7OhKvBCLEtrqFBHlmdog4Qt90aA==","repository":{"url":"git+https://github.com/Mister-Hope/webpack-v5-chain.git","type":"git"},"_npmVersion":"11.3.0","description":"Use a chaining API to generate and simplify the modification of webpack 5 configurations.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.26.0","rimraf":"6.0.1","rollup":"4.40.1","vitest":"3.1.2","webpack":"5.99.7","prettier":"3.5.3","typescript":"5.8.3","@types/tapable":"2.2.7","@types/webpack":"5.28.5","enhanced-resolve":"5.18.1","rollup-plugin-dts":"6.2.1","webpack-dev-server":"5.2.1","rollup-plugin-esbuild":"6.2.1","eslint-config-mister-hope":"0.9.3"},"_npmOperationalInternal":{"tmp":"tmp/webpack-v5-chain_0.0.1_1746354766600_0.23250751122674895","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"webpack-v5-chain","version":"0.0.2","keywords":["webpack","config","chain"],"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","_id":"webpack-v5-chain@0.0.2","maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"homepage":"https://github.com/Mister-Hope/webpack-v5-chain#readme","bugs":{"url":"https://github.com/Mister-Hope/webpack-v5-chain/issues"},"dist":{"shasum":"49d01cdc2ab56d3302e3c3d0dd7688e3c1467b8f","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-0.0.2.tgz","fileCount":6,"integrity":"sha512-w8AEy7j+fqLUxlNwD/N+wMgcUrE0anArA539huTD0NDRg3hUhWAFKEdrVX8vaP5gCdRVwz7UVk6rrK/KQxFQQQ==","signatures":[{"sig":"MEYCIQCV9EXhEjpOI2/oUX0kFJAEe6QMCX9FoODJbtOXMJOswAIhAOLruTU9nR/PZIlAt0ux/s+WNBCTrlPRWXPBGlYg0w5d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138312},"main":"./dist/index.js","_from":"file:webpack-v5-chain-0.0.2.tgz","engines":{"node":">=10.13.0"},"scripts":{"lint":"prettier --check --write . && eslint . --fix","test":"vitest","build":"rollup -c rollup.config.mts --configPlugin esbuild","clean":"rimraf ./dist","prepublish":"pnpm clean && pnpm build"},"typings":"./dist/index.d.ts","_npmUser":{"name":"mister-hope","email":"mister-hope@outlook.com"},"_resolved":"/tmp/a06f1f7ce5774d5895d7607874817ace/webpack-v5-chain-0.0.2.tgz","_integrity":"sha512-w8AEy7j+fqLUxlNwD/N+wMgcUrE0anArA539huTD0NDRg3hUhWAFKEdrVX8vaP5gCdRVwz7UVk6rrK/KQxFQQQ==","repository":{"url":"git+https://github.com/Mister-Hope/webpack-v5-chain.git","type":"git"},"_npmVersion":"10.9.2","description":"Use a chaining API to generate and simplify the modification of webpack 5 configurations.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.26.0","rimraf":"6.0.1","rollup":"4.40.1","vitest":"3.1.2","webpack":"5.99.7","prettier":"3.5.3","typescript":"5.8.3","@types/tapable":"2.2.7","@types/webpack":"5.28.5","enhanced-resolve":"5.18.1","rollup-plugin-dts":"6.2.1","webpack-dev-server":"5.2.1","rollup-plugin-esbuild":"6.2.1","eslint-config-mister-hope":"0.9.3"},"_npmOperationalInternal":{"tmp":"tmp/webpack-v5-chain_0.0.2_1746445063301_0.5298453076541585","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"webpack-v5-chain","version":"1.0.0","keywords":["webpack","config","chain"],"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","_id":"webpack-v5-chain@1.0.0","maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"homepage":"https://github.com/Mister-Hope/webpack-v5-chain#readme","bugs":{"url":"https://github.com/Mister-Hope/webpack-v5-chain/issues"},"dist":{"shasum":"a1252c9638aace03e11bf61fc0a5397a90098155","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-1.0.0.tgz","fileCount":6,"integrity":"sha512-YtFduE7cIRW2v/Ofqmac68UNLk8C8ZnwQTBuClynJfGlMn4LgcDo5utFAx+Y5f8k5aG+yreUmEdXxwTsb3zxYQ==","signatures":[{"sig":"MEYCIQCZnZ5pFIANl6D0KMNDUQUOMbKdpXY93Hrn6il57WbDIwIhAPCe1xEKqPP1MefvMjEnFJPwREbDS6eP97ChAzaOO+Yu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138312},"main":"./dist/index.js","_from":"file:webpack-v5-chain-1.0.0.tgz","engines":{"node":">=10.13.0"},"scripts":{"lint":"prettier --check --write . && eslint . --fix","test":"vitest","build":"rollup -c rollup.config.mts --configPlugin esbuild","clean":"rimraf ./dist","prepublish":"pnpm clean && pnpm build"},"typings":"./dist/index.d.ts","_npmUser":{"name":"mister-hope","email":"mister-hope@outlook.com"},"_resolved":"/tmp/7a4422fae50f51197c0755f06100f48e/webpack-v5-chain-1.0.0.tgz","_integrity":"sha512-YtFduE7cIRW2v/Ofqmac68UNLk8C8ZnwQTBuClynJfGlMn4LgcDo5utFAx+Y5f8k5aG+yreUmEdXxwTsb3zxYQ==","repository":{"url":"git+https://github.com/Mister-Hope/webpack-v5-chain.git","type":"git"},"_npmVersion":"10.9.2","description":"Use a chaining API to generate and simplify the modification of webpack 5 configurations.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.26.0","rimraf":"6.0.1","rollup":"4.40.1","vitest":"3.1.2","webpack":"5.99.7","prettier":"3.5.3","typescript":"5.8.3","@types/tapable":"2.2.7","@types/webpack":"5.28.5","enhanced-resolve":"5.18.1","rollup-plugin-dts":"6.2.1","webpack-dev-server":"5.2.1","rollup-plugin-esbuild":"6.2.1","eslint-config-mister-hope":"0.9.3"},"_npmOperationalInternal":{"tmp":"tmp/webpack-v5-chain_1.0.0_1746446200392_0.5637654482540899","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"webpack-v5-chain","version":"1.0.1","keywords":["webpack","config","chain"],"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","_id":"webpack-v5-chain@1.0.1","maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"homepage":"https://github.com/Mister-Hope/webpack-v5-chain#readme","bugs":{"url":"https://github.com/Mister-Hope/webpack-v5-chain/issues"},"dist":{"shasum":"0a2cd86c01a5d3c8df83dbd8c195bd3d7f49bba3","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-1.0.1.tgz","fileCount":6,"integrity":"sha512-sUep0F7+6WQVSDeC5dSI4CNjaNuhsUntwEmE/vgh+xc6CsHAeajD1oT82q+Uj/25jM7MU/Sjtq9gVAw7xWSVpA==","signatures":[{"sig":"MEUCIQDRTw3XpEc/gGVEtS6tPgTCZxZrAJ+HckGInXyNFHrPgAIgNQ8CqD2Y6EBzjroyqWLnZr5sDzpLXmXbUZng+oa1+Y8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138443},"main":"./dist/index.js","_from":"file:webpack-v5-chain-1.0.1.tgz","engines":{"node":">=10.13.0"},"scripts":{"lint":"prettier --check --write . && eslint . --fix","test":"vitest","build":"rollup -c rollup.config.mts --configPlugin esbuild","clean":"rimraf ./dist","prepublish":"pnpm clean && pnpm build"},"typings":"./dist/index.d.ts","_npmUser":{"name":"mister-hope","email":"mister-hope@outlook.com"},"_resolved":"/tmp/2076f61911426d0dc47abc17ed81cdc0/webpack-v5-chain-1.0.1.tgz","_integrity":"sha512-sUep0F7+6WQVSDeC5dSI4CNjaNuhsUntwEmE/vgh+xc6CsHAeajD1oT82q+Uj/25jM7MU/Sjtq9gVAw7xWSVpA==","repository":{"url":"git+https://github.com/Mister-Hope/webpack-v5-chain.git","type":"git"},"_npmVersion":"11.6.2","description":"Use a chaining API to generate and simplify the modification of webpack 5 configurations.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.37.0","rimraf":"6.0.1","rollup":"4.52.4","vitest":"3.2.4","webpack":"5.102.1","prettier":"3.6.2","typescript":"5.9.3","@types/tapable":"2.3.0","@types/webpack":"5.28.5","enhanced-resolve":"5.18.3","rollup-plugin-dts":"6.2.3","webpack-dev-server":"5.2.2","rollup-plugin-esbuild":"6.2.1","eslint-config-mister-hope":"0.9.6"},"_npmOperationalInternal":{"tmp":"tmp/webpack-v5-chain_1.0.1_1760445290702_0.9014309020002964","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"webpack-v5-chain","version":"1.1.0","keywords":["webpack","config","chain"],"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","_id":"webpack-v5-chain@1.1.0","maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"homepage":"https://github.com/Mister-Hope/webpack-v5-chain#readme","bugs":{"url":"https://github.com/Mister-Hope/webpack-v5-chain/issues"},"dist":{"shasum":"b2c1a407f2c1adf3eb964a18551efafa3a28bab4","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-1.1.0.tgz","fileCount":6,"integrity":"sha512-GX6NmPpCPoKgjHxAzAhPOzDSMfdX3JzGRcppeYPSmwLmPjiqUDxGZ3rt8h4qsNsZ299rMUMIrHTk5QrIGjwW2g==","signatures":[{"sig":"MEUCICiriS5BD2zcXw14AfMI+3XJEkZl9e+xfBJE/B+tocviAiEAzYfFhGHV+iR8O0qm5xu+rJMRVts5AGcIWdOCaH8Lfd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webpack-v5-chain@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":138592},"main":"./dist/index.js","_from":"file:webpack-v5-chain-1.1.0.tgz","engines":{"node":">=10.13.0"},"scripts":{"lint":"prettier --check --write . && eslint . --fix","test":"vitest","build":"rollup -c rollup.config.mts --configPlugin esbuild","clean":"rimraf ./dist","prepublish":"pnpm clean && pnpm build"},"typings":"./dist/index.d.ts","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:87fcdb2c-2486-4616-9fae-9f4e96d7488a"}},"_resolved":"/tmp/4f505978266aa3cc938d0e2f9ad4f19f/webpack-v5-chain-1.1.0.tgz","_integrity":"sha512-GX6NmPpCPoKgjHxAzAhPOzDSMfdX3JzGRcppeYPSmwLmPjiqUDxGZ3rt8h4qsNsZ299rMUMIrHTk5QrIGjwW2g==","repository":{"url":"git+https://github.com/Mister-Hope/webpack-v5-chain.git","type":"git"},"_npmVersion":"11.6.2","description":"Use a chaining API to generate and simplify the modification of webpack 5 configurations.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.1","rimraf":"6.1.2","rollup":"4.53.3","vitest":"4.0.14","webpack":"5.103.0","prettier":"3.7.3","typescript":"5.9.3","@types/tapable":"2.3.0","@types/webpack":"5.28.5","enhanced-resolve":"5.18.3","rollup-plugin-dts":"6.3.0","webpack-dev-server":"5.2.2","rollup-plugin-esbuild":"6.2.1","eslint-config-mister-hope":"0.9.6"},"_npmOperationalInternal":{"tmp":"tmp/webpack-v5-chain_1.1.0_1764654953939_0.08495505294544681","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"webpack-v5-chain","version":"2.0.0","keywords":["chain","config","webpack"],"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","_id":"webpack-v5-chain@2.0.0","maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"dist":{"shasum":"646c6e700831d49e37ed5ca740d13c62d3ceb2e8","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-2.0.0.tgz","fileCount":6,"integrity":"sha512-oEnfblV6xa9CpS/LScUnDWudTHPWQuCOwEpf70TFwK1Gt8cKEn9eyxk/GaGwXAgwyosRm6i6a3jJ84jF0fHALQ==","signatures":[{"sig":"MEUCIQCNm5twYHzaEOxmONAqfegOCXF5Jj2j+FijFQmHReYxcgIgcSQmRG4tjW/7zJMJEka/yi/tEkDGPQ3bBDDADPfyGc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webpack-v5-chain@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":175596},"main":"./dist/index.js","engines":{"node":">=22.12.0"},"scripts":{"dev":"tsdown -w","lint":"NODE_NO_WARNINGS=1 oxlint --fix --type-aware --type-check --report-unused-disable-directives --deny-warnings && NODE_NO_WARNINGS=1 oxfmt","test":"vitest --coverage","build":"tsc && tsdown","clean":"rimraf ./dist","changelog":"conventional-changelog -p conventionalcommits","lint:check":"NODE_NO_WARNINGS=1 oxlint --type-aware --type-check --report-unused-disable-directives --deny-warnings && NODE_NO_WARNINGS=1 oxfmt --check","prepublish":"pnpm clean && pnpm build"},"typings":"./dist/index.d.ts","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:87fcdb2c-2486-4616-9fae-9f4e96d7488a"}},"devEngines":{"runtime":{"name":"node","onFail":"error","version":"^22.22.0 || ^24.16.0 || ^26.3.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"11.11.0"}},"repository":{"url":"https://github.com/Mister-Hope/webpack-v5-chain","type":"git"},"directories":{},"nano-staged":{"**/*":"oxfmt --no-error-on-unmatched-pattern","*.{js,ts}":"oxlint --fix --type-aware --type-check --deny-warnings --report-unused-disable-directives"},"_nodeVersion":"24.18.0","dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.1.7","oxfmt":"0.58.0","unrun":"0.3.1","oxlint":"1.73.0","rimraf":"6.1.3","tsdown":"0.22.4","vitest":"4.1.10","webpack":"5.108.4","picocolors":"1.1.1","typescript":"7.0.2","@types/node":"^22.20.1","nano-staged":"1.0.2","@types/tapable":"2.3.0","@types/webpack":"5.28.5","oxc-config-hope":"0.3.9","oxlint-tsgolint":"0.24.0","enhanced-resolve":"5.24.2","@mr-hope/tsconfig":"0.0.4","webpack-dev-server":"6.0.0","@codecov/rollup-plugin":"2.0.1","conventional-changelog":"8.0.1","@vitest/coverage-istanbul":"4.1.10","conventional-changelog-conventionalcommits":"10.2.1"},"_npmOperationalInternal":{"tmp":"tmp/webpack-v5-chain_2.0.0_1783664384795_0.08759185604473285","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"_id":"webpack-v5-chain@2.1.0","dist":{"shasum":"f8759958e55fb037cca0c7d5e9cdaa71c16c606b","tarball":"https://registry.npmjs.org/webpack-v5-chain/-/webpack-v5-chain-2.1.0.tgz","fileCount":6,"integrity":"sha512-8FBwtZyQND+Ug81TGjxTOEax6r9ZbtBg1RhMDPjrigpzwmR1BEGPRV8VpTN7dwDp0Qy4JV5t4VgK/MwYHFjyMg==","signatures":[{"sig":"MEYCIQCZ/QsVtru2tAy482uVQgPQGF+Hwh10b8iv2sIp60IFuAIhAKBa6COKor58XjE5kC4siulGm5CFMibol9hktL+FlMdG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBFoWp4dkWJQpkfZT8kKiQVyfyvNW7u/PqpSLoP5e/qzAiEA4cihtLeR1V69ZfKSRbiPRUUsTy/I1vejxJQDJNZ4E5o="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webpack-v5-chain@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179157},"main":"./dist/index.js","name":"webpack-v5-chain","author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"engines":{"node":">=22.12.0"},"license":"MPL-2.0","scripts":{"dev":"tsdown -w","lint":"cross-env NODE_NO_WARNINGS=1 oxlint --fix --report-unused-disable-directives --deny-warnings && cross-env NODE_NO_WARNINGS=1 oxfmt","test":"vitest --coverage","build":"tsc && tsdown","clean":"rimraf ./dist","changelog":"conventional-changelog -p conventionalcommits","lint:check":"cross-env NODE_NO_WARNINGS=1 oxlint --report-unused-disable-directives --deny-warnings && cross-env NODE_NO_WARNINGS=1 oxfmt --check","prepublish":"pnpm clean && pnpm build"},"typings":"./dist/index.d.ts","version":"2.1.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:87fcdb2c-2486-4616-9fae-9f4e96d7488a"}},"keywords":["chain","config","webpack"],"devEngines":{"runtime":{"name":"node","onFail":"error","version":"^22.22.0 || ^24.18.0 || ^26.3.0"},"packageManager":{"name":"pnpm","onFail":"download","version":"12.6.0"}},"repository":{"url":"https://github.com/Mister-Hope/webpack-v5-chain","type":"git"},"directories":{},"maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"nano-staged":{"**/*":"cross-env NODE_NO_WARNINGS=1 oxfmt --no-error-on-unmatched-pattern","*.{js,ts,mts}":"cross-env NODE_NO_WARNINGS=1 oxlint --fix --deny-warnings --report-unused-disable-directives"},"dependencies":{"deepmerge":"^4.3.1","javascript-stringify":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.1.7","oxfmt":"0.70.0","unrun":"0.3.1","oxlint":"1.85.0","rimraf":"6.1.3","tsdown":"0.23.0","vitest":"5.0.1","webpack":"5.111.1","cross-env":"^10.1.0","picocolors":"1.1.1","typescript":"7.0.2","@types/node":"22.20.4","nano-staged":"1.0.2","@types/tapable":"2.3.0","@types/webpack":"5.28.5","oxc-config-hope":"0.3.13","oxlint-tsgolint":"7.0.2003","enhanced-resolve":"5.25.1","@mr-hope/tsconfig":"0.0.4","webpack-dev-server":"6.0.0","@codecov/rollup-plugin":"2.0.1","conventional-changelog":"8.1.3","@vitest/coverage-istanbul":"5.0.1","conventional-changelog-conventionalcommits":"10.4.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/webpack-v5-chain_2.1.0_1790303935537_0.801216958058695"}}},"time":{"created":"2025-05-04T10:32:46.599Z","modified":"2026-09-25T02:38:55.916Z","0.0.1":"2025-05-04T10:32:46.802Z","0.0.2":"2025-05-05T11:37:43.515Z","1.0.0":"2025-05-05T11:56:40.596Z","1.0.1":"2025-10-14T12:34:50.866Z","1.1.0":"2025-12-02T05:55:54.172Z","2.0.0":"2026-07-10T06:19:44.950Z","2.1.0":"2026-09-25T02:38:55.618Z"},"author":{"url":"https://mister-hope.com","name":"Mister-Hope","email":"mister-hope@outlook.com"},"license":"MPL-2.0","keywords":["chain","config","webpack"],"repository":{"url":"https://github.com/Mister-Hope/webpack-v5-chain","type":"git"},"maintainers":[{"name":"mister-hope","email":"mister-hope@outlook.com"}],"readme":"# webpack-v5-chain\n\n[![npm version](https://img.shields.io/npm/v/webpack-v5-chain)](https://www.npmjs.com/package/webpack-v5-chain)\n[![codecov](https://codecov.io/gh/Mister-Hope/webpack-v5-chain/graph/badge.svg?token=Zq5yZGNjjA)](https://codecov.io/gh/Mister-Hope/webpack-v5-chain)\n\nA chaining API to generate and simplify webpack 5 configurations.\n\n## Why `webpack-v5-chain`\n\n- [`webpack-chain`](https://github.com/neutrinojs/webpack-chain) is archived and unmaintained.\n- [`webpack-5-chain`](https://github.com/nicholasxuu/webpack-5-chain) is a fork with some fixes, but has many API mismatches with the latest webpack and is not actively maintained.\n\n`webpack-v5-chain` keeps the API **up to date with the latest webpack**, is rewritten in TypeScript, and has **100% test coverage**.\n\n> The source uses ESM syntax, so update your require:\n>\n> ```diff\n> - const Config = require('webpack-chain');\n> + const { Config } = require('webpack-v5-chain');\n> ```\n\n## Introduction\n\nWebpack's core configuration is a plain JavaScript object. While fine for single projects, sharing and modifying these objects across projects requires deep knowledge of the internal structure.\n\n`webpack-v5-chain` provides a chainable API for creating and modifying webpack configurations. Named references let you standardize modifications across projects.\n\n## Getting Started\n\n\n```js\n// imports the webpack-v5-chain module.\nconst { Config } = require('webpack-v5-chain');\n\n// Instantiate the configuration with a new API\nconst config = new Config();\n\n// Make configuration changes using the chain API.\n// Every API call tracks a change to the stored configuration.\n\nconfig\n  // Interact with entry points\n  .entry('index')\n    .add('src/index.js')\n    .end()\n  // Modify output settings\n  .output\n    .path('dist')\n    .filename('[name].bundle.js');\n\n// Create named rules which can be modified later\nconfig.module\n  .rule('lint')\n    .test(/\\.js$/)\n    .pre()\n    .include\n      .add('src')\n      .end()\n    // Even create named uses (loaders)\n    .use('eslint')\n      .loader('eslint-loader')\n      .options({\n        rules: {\n          semi: 'off'\n        }\n      });\n\nconfig.module\n  .rule('compile')\n    .test(/\\.js$/)\n    .include\n      .add('src')\n      .add('test')\n      .end()\n    .use('babel')\n      .loader('babel-loader')\n      .options({\n        presets: [\n          ['@babel/preset-env', { modules: false }]\n        ]\n      });\n\n// Create named plugins too!\nconfig\n  .plugin('clean')\n    .use(CleanPlugin, [['dist'], { root: '/dir' }]);\n\n// Export the completed configuration object to be consumed by webpack\nmodule.exports = config.toConfig();\n```\n\n### Shared Configurations\n\nExport the config and call `.toConfig()` before passing to webpack:\n\n```js\n// webpack.core.js\nconst { Config } = require('webpack-v5-chain');\nconst config = new Config();\n// ...shared configuration\nmodule.exports = config;\n\n// webpack.dev.js\nconst config = require('./webpack.core');\n// ...dev-specific configuration\nmodule.exports = config.toConfig();\n\n// webpack.prod.js\nconst config = require('./webpack.core');\n// ...prod-specific configuration\nmodule.exports = config.toConfig();\n```\n\n## Core Interfaces\n\n### ChainedMap\n\nA `ChainedMap` behaves like a JavaScript `Map` with chaining conveniences. Unless stated otherwise, all methods return the instance for chaining.\n\n| Method                              | Description                                                                                                           |\n| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------- |\n| `clear()`                           | Remove all entries.                                                                                                   |\n| `delete(key)`                       | Remove a single entry by key.                                                                                         |\n| `get(key)` → `value`                | Fetch the value at the given key.                                                                                     |\n| `getOrCompute(key, fn)` → `value`   | Get the value, or compute and set it via `fn()` if missing.                                                           |\n| `set(key, value)`                   | Set a value at the given key.                                                                                         |\n| `has(key)` → `boolean`              | Whether the map has a value at the key.                                                                               |\n| `values()` → `Array`                | All values in the map.                                                                                                |\n| `entries()` → `Object \\| undefined` | All entries as an object. Returns `undefined` if empty. Keys are ordered by `.before()` / `.after()` when applicable. |\n| `merge(obj, omit?)`                 | Merge an object's properties into the map. The optional `omit` array skips specified keys.                            |\n| `batch(handler)`                    | Invoke `handler` with the current instance.                                                                           |\n| `when(condition, truthy, falsy?)`   | Conditionally invoke `truthy` or `falsy` handler with the current instance.                                           |\n\n### ChainedValueMap\n\n`ChainedValueMap` extends `ChainedMap` and is callable. Calling it as a function sets its value and clears all map entries. Conversely, setting any key clears the callable value. The call returns the instance for chaining.\n\n```js\n// Callable — sets a direct value\nconfig.optimization.splitChunks(false);\n\n// ChainedMap usage\nconfig.optimization.splitChunks.set('amd', true);\n```\n\n### ChainedSet\n\nA `ChainedSet` behaves like a JavaScript `Set` with chaining conveniences. Unless stated otherwise, all methods return the instance.\n\n| Method                            | Description                                               |\n| --------------------------------- | --------------------------------------------------------- |\n| `add(value)`                      | Append a value.                                           |\n| `prepend(value)`                  | Add a value to the beginning.                             |\n| `clear()`                         | Remove all values.                                        |\n| `delete(value)`                   | Remove a specific value.                                  |\n| `has(value)` → `boolean`          | Whether the set contains the value.                       |\n| `values()` → `Array`              | All values in the set.                                    |\n| `merge(arr)`                      | Concatenate an array to the end.                          |\n| `batch(handler)`                  | Invoke `handler` with the current instance.               |\n| `when(condition, truthy, falsy?)` | Conditionally invoke a handler with the current instance. |\n\n## Shorthand Methods\n\nMany `ChainedMap` properties have shorthand methods named after the key. They are chainable and equivalent to calling `.set(key, value)`:\n\n```js\ndevServer.hot(true);\n// equivalent to:\ndevServer.set('hot', true);\n```\n\n## API Reference\n\nNavigate the API by chaining — use `.end()` to return to the parent context. For valid values, refer to the [webpack documentation](https://webpack.js.org/configuration/).\n\n### Config\n\n```js\nconst config = new Config();  // extends ChainedMap\n```\n\n#### Shorthand methods\n\n```js\nconfig\n  .context(context)\n  .mode(mode)\n  .cache(cache)\n  .devtool(devtool)\n  .target(target)\n  .watch(watch)\n  .watchOptions(watchOptions)\n  .externals(externals)\n  .externalsType(externalsType)\n  .externalsPresets(externalsPresets)\n  .dotenv(dotenv)\n  .node(node)\n  .stats(stats)\n  .experiments(experiments)\n  .infrastructureLogging(infrastructureLogging)\n  .amd(amd)\n  .bail(bail)\n  .dependencies(dependencies)\n  .extends(extends)\n  .ignoreWarnings(ignoreWarnings)\n  .loader(loader)\n  .name(name)\n  .parallelism(parallelism)\n  .profile(profile)\n  .recordsInputPath(recordsInputPath)\n  .recordsOutputPath(recordsOutputPath)\n  .recordsPath(recordsPath)\n  .snapshot(snapshot)\n  .validate(validate)\n```\n\n#### Entry points\n\n```js\n// Backed at config.entryPoints : ChainedMap\nconfig.entry(name) : ChainedSet\n\nconfig\n  .entry(name)\n    .add(value)\n    .add(value)\n\nconfig\n  .entry(name)\n    .clear()\n\n// Using low-level config.entryPoints:\n\nconfig.entryPoints\n  .get(name)\n    .add(value)\n    .add(value)\n\nconfig.entryPoints\n  .get(name)\n    .clear()\n```\n\n#### Output\n\n\n```js\nconfig.output : ChainedMap\n\nconfig.output\n  .amdContainer(amdContainer)\n  .assetModuleFilename(assetModuleFilename)\n  .asyncChunks(asyncChunks)\n  .auxiliaryComment(auxiliaryComment)\n  .charset(charset)\n  .chunkFilename(chunkFilename)\n  .chunkFormat(chunkFormat)\n  .chunkLoadTimeout(chunkLoadTimeout)\n  .chunkLoadingGlobal(chunkLoadingGlobal)\n  .chunkLoading(chunkLoading)\n  .clean(clean)\n  .compareBeforeEmit(compareBeforeEmit)\n  .copy(copy)\n  .crossOriginLoading(crossOriginLoading)\n  .cssChunkFilename(cssChunkFilename)\n  .cssFilename(cssFilename)\n  .devtoolFallbackModuleFilenameTemplate(devtoolFallbackModuleFilenameTemplate)\n  .devtoolModuleFilenameTemplate(devtoolModuleFilenameTemplate)\n  .devtoolNamespace(devtoolNamespace)\n  .enabledChunkLoadingTypes(enabledChunkLoadingTypes)\n  .enabledLibraryTypes(enabledLibraryTypes)\n  .enabledWasmLoadingTypes(enabledWasmLoadingTypes)\n  .environment(environment)\n  .filename(filename)\n  .globalObject(globalObject)\n  .hashDigest(hashDigest)\n  .hashDigestLength(hashDigestLength)\n  .hashFunction(hashFunction)\n  .hashSalt(hashSalt)\n  .hotUpdateChunkFilename(hotUpdateChunkFilename)\n  .hotUpdateGlobal(hotUpdateGlobal)\n  .hotUpdateMainFilename(hotUpdateMainFilename)\n  .html(html)\n  .htmlChunkFilename(htmlChunkFilename)\n  .htmlFilename(htmlFilename)\n  .iife(iife)\n  .ignoreBrowserWarnings(ignoreBrowserWarnings)\n  .importFunctionName(importFunctionName)\n  .importMetaName(importMetaName)\n  .library(library)\n  .libraryExport(libraryExport)\n  .libraryTarget(libraryTarget)\n  .module(module)\n  .path(path)\n  .pathinfo(pathinfo)\n  .publicPath(publicPath)\n  .resourceHints(resourceHints)\n  .scriptType(scriptType)\n  .sourceMapFilename(sourceMapFilename)\n  .sourcePrefix(sourcePrefix)\n  .strictModuleErrorHandling(strictModuleErrorHandling)\n  .strictModuleExceptionHandling(strictModuleExceptionHandling)\n  .strictModuleResolution(strictModuleResolution)\n  .trustedTypes(trustedTypes)\n  .umdNamedDefine(umdNamedDefine)\n  .uniqueName(uniqueName)\n  .wasmLoading(wasmLoading)\n  .wasmStreamingFallback(wasmStreamingFallback)\n  .webassemblyModuleFilename(webassemblyModuleFilename)\n  .workerChunkFilename(workerChunkFilename)\n  .workerChunkLoading(workerChunkLoading)\n  .workerPublicPath(workerPublicPath)\n  .workerWasmLoading(workerWasmLoading)\n```\n\n#### Resolve\n\n`config.resolve : ChainedMap`\n\nShorthand: `.cache .cachePredicate .cacheWithContext .enforceExtension .fileSystem .fullySpecified .preferAbsolute .preferRelative .resolver .symlinks .tsconfig .unsafeCache .useSyncFileSystemCalls`\n\n**ChainedSet properties:** `.aliasFields .conditionNames .descriptionFiles .exportsFields .extensions .importsFields .mainFields .mainFiles .modules .restrictions .roots`\n\n**ChainedMap properties:** `.alias .byDependency .extensionAlias .fallback`\n\n```js\nconfig.resolve.alias.set(key, value);\nconfig.resolve.extensions.add('.js').prepend('.ts');\nconfig.resolve.fallback.set('path', 'path-browserify');\n```\n\n#### Resolve plugins\n\n```js\nconfig.resolve.plugin(name) → Plugin\n\n// Adding — do not use `new`\nconfig.resolve.plugin(name).use(Plugin, args);\nconfig.resolve.plugin(name).use(require.resolve('plugin-path'), args);\n\n// Modify arguments\nconfig.resolve.plugin(name).tap(args => newArgs);\n\n// Modify instantiation\nconfig.resolve.plugin(name).init((Plugin, args) => new Plugin(...args));\n\n// Remove\nconfig.resolve.plugins.delete(name);\n\n// Ordering\nconfig.resolve.plugin(name).before(otherName);\nconfig.resolve.plugin(name).after(otherName);\n```\n\n#### ResolveLoader\n\nIdentical to `config.resolve` with additional **ChainedSet** properties: `.modules .moduleExtensions .packageMains`\n\n#### Performance\n\n`config.performance : ChainedValueMap`\n\n```js\nconfig.performance(false);  // callable — disables performance hints\n\nconfig.performance\n  .assetFilter(fn)\n  .hints('warning')\n  .maxEntrypointSize(250000)\n  .maxAssetSize(250000);\n```\n\n#### Optimization\n\n`config.optimization : ChainedMap`\n\nShorthand: `.checkWasmTypes .chunkIds .concatenateModules .emitOnErrors .avoidEntryIife .flagIncludedChunks .inlineExports .innerGraph .mangleExports .mangleWasmImports .mergeDuplicateChunks .minimize .minimizeOptions .moduleIds .nodeEnv .noEmitOnErrors .portableRecords .providedExports .realContentHash .removeAvailableModules .removeEmptyChunks .runtimeChunk .sideEffects .usedExports`\n\n**SplitChunks:** `config.optimization.splitChunks : ChainedValueMap`\n\n```js\nconfig.optimization.splitChunks({ chunks: 'all' });\nconfig.optimization.splitChunks.set('minSize', 10000);\n```\n\n**Minimizers:**\n\n```js\nconfig.optimization.minimizer(name) → Plugin\n\nconfig.optimization.minimizer(name).use(Plugin, args);\nconfig.optimization.minimizer(name).tap(args => newArgs);\nconfig.optimization.minimizer(name).init((Plugin, args) => new Plugin(...args));\nconfig.optimization.minimizers.delete(name);\n```\n\n#### Plugins\n\n```js\nconfig.plugin(name) → Plugin\n\nconfig.plugin(name).use(Plugin, args);\nconfig.plugin(name).use(require.resolve('plugin-path'), args);\nconfig.plugin(name).tap(args => newArgs);\nconfig.plugin(name).init((Plugin, args) => new Plugin(...args));\nconfig.plugins.delete(name);\nconfig.plugin(name).before(otherName);  // cannot also use .after()\nconfig.plugin(name).after(otherName);   // cannot also use .before()\n```\n\n#### DevServer\n\n`config.devServer : ChainedMap`\n\nShorthand: `.app .bonjour .compress .devMiddleware .headers .historyApiFallback .host .hot .ipc .liveReload .onListening .open .port .proxy .server .setupExitSignals .setupMiddlewares .static .watchFiles .webSocketServer`\n\n**ChainedMap:** `.client`\n\n**ChainedSet:** `.allowedHosts`\n\n#### Module\n\n`config.module : ChainedMap`\n\nShorthand: `.noParse .unsafeCache .exprContextCritical .exprContextRecursive .exprContextRegExp .exprContextRequest .unknownContextCritical .unknownContextRecursive .unknownContextRegExp .unknownContextRequest .wrappedContextCritical .wrappedContextRecursive .wrappedContextRegExp .strictExportPresence .strictThisContextOnImports`\n\n#### Module rules\n\n`config.module.rule(name) : Rule`\n\nShorthand: `.assert .compiler .dependency .descriptionData .descriptionRelativePath .enforce .issuer .issuerLayer .layer .loader .extractSourceMap .glob .mimetype .options .parser .generator .phase .realResource .resource .resourceFragment .resourceQuery .scheme .sideEffects .test .type .with`\n\n```js\nconfig.module.rule(name) → Rule\n\nconfig.module.rule(name)\n  .test(/\\.js$/)\n  .pre()          // enforce: 'pre'\n  .post()         // enforce: 'post'\n  .enforce(value) // enforce: value\n\n// Nested rules\nconfig.module.rule(name).rule(name) → Rule\nconfig.module.rule(name).rule(name).before(otherName);\nconfig.module.rule(name).rule(name).after(otherName);\n\n// OneOf rules\nconfig.module.rule(name).oneOf(name) → Rule\nconfig.module.rule(name).oneOf(name).before(otherName);\nconfig.module.rule(name).oneOf(name).after(otherName);\n\n// Resolve override (webpack ≥ 4.36.1)\nconfig.module.rule(name).resolve.symlinks(true);\n```\n\n#### Rule uses (loaders)\n\n```js\nconfig.module.rule(name).use(name) → Use\n\nconfig.module.rule(name).use(name)\n  .loader('babel-loader')\n  .options({ presets: ['@babel/preset-env'] });\n\n// Modify options\nconfig.module.rule(name).use(name).tap(options => mergedOptions);\n```\n\n## Merging Config\n\nMerge an object matching the chain schema layout. Note: this schema uses named keys (not webpack's raw config format).\n\n```js\nconfig.merge({ devtool: 'source-map' });\nconfig.get('devtool'); // \"source-map\"\n```\n\n<details>\n<summary>Full merge schema</summary>\n\n```js\nconfig.merge({\n  amd, bail, cache, context, dependencies, devtool, dotenv,\n  experiments, extends, externals, externalsPresets, externalsType,\n  ignoreWarnings, infrastructureLogging, loader, mode, name,\n  parallelism, profile, recordsPath, recordsInputPath, recordsOutputPath,\n  snapshot, stats, target, validate, watch, watchOptions, node: {},\n\n  entry: { name: [...] },\n\n  output: { /* shorthand keys */ },\n\n  plugin: { name: { plugin, args, before, after } },\n\n  devServer: { /* shorthand keys */ },\n\n  optimization: {\n    /* shorthand keys */,\n    minimizer: { name: { plugin, args, before, after } },\n    splitChunks: {}\n  },\n\n  performance: { hints, maxEntrypointSize, maxAssetSize, assetFilter },\n\n  resolve: {\n    /* shorthand keys */,\n    alias: { key: value },\n    aliasFields: [...], byDependency: {}, conditionNames: [...],\n    descriptionFiles: [...], exportsFields: [...], extensionAlias: {},\n    extensions: [...], fallback: {}, importsFields: [...],\n    mainFields: [...], mainFiles: [...], modules: [...],\n    restrictions: [...], roots: [...],\n    plugin: { name: { plugin, args, before, after } }\n  },\n\n  resolveLoader: {\n    /* same as resolve */,\n    moduleExtensions: [...], packageMains: [...]\n  },\n\n  module: {\n    /* shorthand keys */,\n    rule: {\n      name: {\n        /* shorthand keys */,\n        include: [...], exclude: [...],\n        rules: { name: Rule },\n        oneOf: { name: Rule },\n        use: { name: { loader, options, before, after } }\n      }\n    }\n  }\n})\n```\n\n</details>\n\n## Conditional Configuration\n\nUse `.when()` on any `ChainedMap` or `ChainedSet`:\n\n```js\nconfig.when(\n  process.env.NODE_ENV === 'production',\n  config => config.plugin('minify').use(BabiliWebpackPlugin),\n  config => config.devtool('source-map')\n);\n```\n\n## Inspecting Config\n\nUse `config.toString()` to generate a commented, stringified config:\n\n```js\nconfig.module\n  .rule('compile')\n    .test(/\\.js$/)\n    .use('babel')\n      .loader('babel-loader');\n\nconfig.toString();\n{\n  module: {\n    rules: [\n      /* config.module.rule('compile') */\n      {\n        test: /\\.js$/,\n        use: [\n          /* config.module.rule('compile').use('babel') */\n          { loader: 'babel-loader' }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Stringifying objects & plugins\n\nBy default the output is not directly usable as webpack config. Set a `__expression` property on objects to control how they are stringified:\n\n```js\nconst sass = require('sass');\nsass.__expression = `require('sass')`;\n\nclass MyPlugin {}\nMyPlugin.__expression = `require('my-plugin')`;\n\nfunction myFunction() {}\nmyFunction.__expression = `require('my-function')`;\n\nconfig.plugin('example').use(MyPlugin, [{ fn: myFunction, implementation: sass }]);\n\nconfig.toString();\n/*\n{\n  plugins: [\n    new (require('my-plugin'))({\n      fn: require('my-function'),\n      implementation: require('sass')\n    })\n  ]\n}\n*/\n```\n\nPlugins specified by path auto-generate `require()`:\n\n```js\nconfig.plugin('env').use(require.resolve('webpack/lib/ProvidePlugin'), [{ jQuery: 'jquery' }]);\n\nconfig.toString();\n/*\n{\n  plugins: [\n    new (require('/foo/bar/node_modules/webpack/lib/EnvironmentPlugin.js'))({ jQuery: 'jquery' })\n  ]\n}\n*/\n```\n\n### Static `Config.toString()`\n\nCall `Config.toString()` statically to modify the config before stringifying:\n\n```js\nConfig.toString({\n  ...config.toConfig(),\n  module: {\n    defaultRules: [{\n      use: [{ loader: 'banner-loader', options: { prefix: 'banner-prefix.txt' } }]\n    }]\n  }\n})\n```\n","readmeFilename":""}