{"_id":"reduce-configs","_rev":"4456973","name":"reduce-configs","description":"Merge an initial configuration object with one or more configuration objects, functions, or arrays of configuration objects/functions.","dist-tags":{"latest":"1.1.2"},"maintainers":[{"name":"chenjiahan","email":""}],"time":{"modified":"2026-04-08T14:35:49.000Z","created":"2024-07-03T13:03:12.263Z","1.1.2":"2026-04-05T00:15:12.687Z","1.1.1":"2025-08-04T05:05:19.964Z","1.1.0":"2024-11-22T02:18:26.751Z","1.0.0":"2024-07-03T14:15:47.862Z","0.0.0":"2024-07-03T13:03:12.263Z"},"users":{},"repository":{"type":"git","url":"git+https://github.com/rstackjs/reduce-configs.git"},"versions":{"1.1.2":{"name":"reduce-configs","version":"1.1.2","repository":{"type":"git","url":"git+https://github.com/rstackjs/reduce-configs.git"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"rslib","dev":"rslib -w","lint":"biome check .","lint:write":"biome check . --write","prepare":"simple-git-hooks && npm run build","test":"rstest","bump":"npx bumpp"},"simple-git-hooks":{"pre-commit":"npx nano-staged"},"nano-staged":{"*.{js,jsx,ts,tsx,mjs,cjs}":["biome check --write --no-errors-on-unmatched"]},"devDependencies":{"@biomejs/biome":"^2.4.9","@rslib/core":"^0.20.1","@rstest/core":"0.9.5","@types/node":"^24.12.0","nano-staged":"^0.9.0","simple-git-hooks":"^2.13.1","typescript":"6.0.2"},"packageManager":"pnpm@10.33.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"gitHead":"527231a7629a71235117229a9d661cb02f124894","_id":"reduce-configs@1.1.2","description":"Merge an initial configuration object with one or more configuration objects, functions, or arrays of configuration objects/functions.","bugs":{"url":"https://github.com/rstackjs/reduce-configs/issues"},"homepage":"https://github.com/rstackjs/reduce-configs#readme","_nodeVersion":"24.14.1","_npmVersion":"11.12.1","dist":{"shasum":"9a2a323429b025582f05e932870441114d4662a6","size":3420,"noattachment":false,"key":"/reduce-configs/-/reduce-configs-1.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/reduce-configs/download/reduce-configs-1.1.2.tgz"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:75090828-f347-41b1-b32a-fcda915764e6"}},"directories":{},"maintainers":[{"name":"chenjiahan","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/reduce-configs_1.1.2_1775348112537_0.9756048032401436"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-04-05T00:15:12.687Z","publish_time":1775348112687,"_source_registry_name":"default","_cnpm_publish_time":1775348112687},"1.1.1":{"name":"reduce-configs","version":"1.1.1","repository":{"type":"git","url":"git+https://github.com/rspack-contrib/reduce-configs.git"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"rslib build","dev":"rslib build --watch","lint":"biome check .","lint:write":"biome check . --write","prepare":"simple-git-hooks && npm run build","test":"rstest run","bump":"npx bumpp"},"simple-git-hooks":{"pre-commit":"npx nano-staged"},"nano-staged":{"*.{js,jsx,ts,tsx,mjs,cjs}":["biome check --write --no-errors-on-unmatched"]},"devDependencies":{"@biomejs/biome":"^1.9.4","@rslib/core":"^0.11.0","@rstest/core":"0.0.10","@types/node":"^22.17.0","nano-staged":"^0.8.0","simple-git-hooks":"^2.13.1","typescript":"^5.9.2"},"packageManager":"pnpm@10.14.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"reduce-configs@1.1.1","gitHead":"a629a3e093d4237e9e4bb0c4846b4d40446425b5","description":"Merge an initial configuration object with one or more configuration objects, functions, or arrays of configuration objects/functions.","bugs":{"url":"https://github.com/rspack-contrib/reduce-configs/issues"},"homepage":"https://github.com/rspack-contrib/reduce-configs#readme","_nodeVersion":"22.17.1","_npmVersion":"11.5.2","dist":{"shasum":"b6d920e79cdf9f88c3daaabddf06f93a749334be","size":3378,"noattachment":false,"key":"/reduce-configs/-/reduce-configs-1.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/reduce-configs/download/reduce-configs-1.1.1.tgz"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:843099e3-b0b2-472a-8cc4-ba52d3ffbe25"}},"directories":{},"maintainers":[{"name":"chenjiahan","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/reduce-configs_1.1.1_1754283919786_0.3527931550179222"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-08-04T05:05:19.964Z","publish_time":1754283919964,"_source_registry_name":"default","_cnpm_publish_time":1754283919964},"1.1.0":{"name":"reduce-configs","version":"1.1.0","repository":{"type":"git","url":"git+https://github.com/rspack-contrib/reduce-configs.git"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"rslib build","dev":"rslib build --watch","lint":"biome check .","lint:write":"biome check . --write","prepare":"simple-git-hooks && npm run build","test":"node ./test/index.js","bump":"npx bumpp"},"simple-git-hooks":{"pre-commit":"npx nano-staged"},"nano-staged":{"*.{js,jsx,ts,tsx,mjs,cjs}":["biome check --write --no-errors-on-unmatched"]},"devDependencies":{"@biomejs/biome":"^1.8.3","@rslib/core":"^0.1.0","@types/node":"^20.14.1","nano-staged":"^0.8.0","simple-git-hooks":"^2.11.1","typescript":"^5.5.2"},"packageManager":"pnpm@9.2.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_id":"reduce-configs@1.1.0","gitHead":"8ead62caa244984a8078e92beb4ce977bd34abd1","description":"Merge an initial configuration object with one or more configuration objects, functions, or arrays of configuration objects/functions.","bugs":{"url":"https://github.com/rspack-contrib/reduce-configs/issues"},"homepage":"https://github.com/rspack-contrib/reduce-configs#readme","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"shasum":"6601bc10bbe60ec0900763c67680d56e3e9d356e","size":3456,"noattachment":false,"key":"/reduce-configs/-/reduce-configs-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/reduce-configs/download/reduce-configs-1.1.0.tgz"},"_npmUser":{"name":"chenjiahan","email":"416417567@163.com"},"directories":{},"maintainers":[{"name":"chenjiahan","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reduce-configs_1.1.0_1732241906577_0.8226138611612863"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-11-22T02:18:26.751Z","publish_time":1732241906751,"_source_registry_name":"default","_cnpm_publish_time":1732241906751},"1.0.0":{"name":"reduce-configs","version":"1.0.0","repository":{"type":"git","url":"git+https://github.com/rspack-contrib/reduce-configs.git"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"build":"tsup","dev":"tsup --watch","lint":"biome check .","lint:write":"biome check . --write","prepare":"simple-git-hooks && npm run build","test":"node ./test/index.js"},"simple-git-hooks":{"pre-commit":"npx nano-staged"},"nano-staged":{"*.{js,jsx,ts,tsx,mjs,cjs}":["biome check --write --no-errors-on-unmatched"]},"dependencies":{"browserslist":"^4.23.1"},"devDependencies":{"@biomejs/biome":"^1.8.3","@types/node":"^20.14.1","nano-staged":"^0.8.0","simple-git-hooks":"^2.11.1","tsup":"^8.0.2","typescript":"^5.5.2"},"packageManager":"pnpm@9.2.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"reduce-configs@1.0.0","gitHead":"fc5fe7460ca9851d8c4e3ba716015773e3462fe7","description":"Merge an initial configuration object with one or more configuration objects, functions, or arrays of configuration objects/functions.","bugs":{"url":"https://github.com/rspack-contrib/reduce-configs/issues"},"homepage":"https://github.com/rspack-contrib/reduce-configs#readme","_nodeVersion":"18.20.2","_npmVersion":"10.5.0","dist":{"shasum":"8686ed87104ed32d22051dcd652d0f4db876b429","size":3549,"noattachment":false,"key":"/reduce-configs/-/reduce-configs-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/reduce-configs/download/reduce-configs-1.0.0.tgz"},"_npmUser":{"name":"chenjiahan","email":"416417567@163.com"},"directories":{},"maintainers":[{"name":"chenjiahan","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reduce-configs_1.0.0_1720016147693_0.2376513340832096"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-07-03T14:15:47.862Z","publish_time":1720016147862,"_source_registry_name":"default","_cnpm_publish_time":1720016147862},"0.0.0":{"name":"reduce-configs","version":"0.0.0","main":"index.js","author":"","license":"MIT","_id":"reduce-configs@0.0.0","_nodeVersion":"18.20.2","_npmVersion":"10.5.0","dist":{"shasum":"dd6dc481667144dc5e433f6dc16e14b8e501d71f","size":190,"noattachment":false,"key":"/reduce-configs/-/reduce-configs-0.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/reduce-configs/download/reduce-configs-0.0.0.tgz"},"_npmUser":{"name":"chenjiahan","email":"416417567@163.com"},"directories":{},"maintainers":[{"name":"chenjiahan","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/reduce-configs_0.0.0_1720011792095_0.30770736733892545"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-07-03T13:03:12.263Z","publish_time":1720011792263,"_source_registry_name":"default","_cnpm_publish_time":1720011792263}},"readme":"# reduce-configs\n\nMerge an initial configuration object with one or more configuration objects, functions, or arrays of configuration objects/functions.\n\n<p>\n  <a href=\"https://npmjs.com/package/reduce-configs\">\n   <img src=\"https://img.shields.io/npm/v/reduce-configs?style=flat-square&colorA=564341&colorB=EDED91\" alt=\"npm version\" />\n  </a>\n  <img src=\"https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square&colorA=564341&colorB=EDED91\" alt=\"license\" />\n</p>\n\n## Install\n\n```bash\nnpm add reduce-configs -D\n```\n\n## reduceConfigs\n\nThe `reduceConfigs` function merges one or more configuration objects into a final configuration. It also allows modification of the configuration object via functions.\n\n- **Type:**\n\n```ts\ntype OneOrMany<T> = T | T[];\ntype ConfigChain<T> = OneOrMany<T | ((config: T) => T | void)>;\n\nfunction reduceConfigs<T>(options: {\n  /**\n   * Initial configuration object.\n   */\n  initial: T;\n  /**\n   * The configuration object, function, or array of configuration objects/functions\n   * to be merged into the initial configuration\n   */\n  config?: ConfigChain<T> | undefined;\n  /**\n   * The function used to merge configuration objects.\n   * @default Object.assign\n   */\n  mergeFn?: typeof Object.assign;\n}): T;\n```\n\n- **Example:**\n\n```ts\nimport { reduceConfigs } from \"@rsbuild/core\";\n\nconst initial = { a: 1, b: 2 };\n\n// Merging an object\nconst finalConfig1 = reduceConfigs({\n  initial: initial,\n  config: { b: 3, c: 4 },\n});\n// -> { a: 1, b: 3, c: 4 }\n\n// Using a function to modify the config\nconst finalConfig2 = reduceConfigs({\n  initial: initial,\n  config: (config) => ({ ...config, b: 5, d: 6 }),\n});\n// -> { a: 1, b: 5, d: 6 }\n\n// Merging an array of objects/functions\nconst finalConfig3 = reduceConfigs({\n  initial: initial,\n  config: [\n    { b: 7 },\n    (config) => ({ ...config, c: 8 }),\n    (config) => ({ ...config, d: 9 }),\n  ],\n});\n// -> { a: 1, b: 7, c: 8, d: 9 }\n```\n\n## reduceConfigsWithContext\n\nThe `reduceConfigsWithContext` function is similar to `reduceConfigs`, which allows you to pass an additional `context` object to the configuration function.\n\n- **Type:**\n\n```ts\ntype OneOrMany<T> = T | T[];\ntype ConfigChainWithContext<T, Ctx> = OneOrMany<\n  T | ((config: T, ctx: Ctx) => T | void)\n>;\n\nfunction reduceConfigsWithContext<T, Ctx>(options: {\n  /**\n   * Initial configuration object.\n   */\n  initial: T;\n  /**\n   * The configuration object, function, or array of configuration objects/functions\n   * to be merged into the initial configuration\n   */\n  config?: ConfigChain<T> | undefined;\n  /**\n   * Context object that can be used within the configuration functions.\n   */\n  ctx?: Ctx;\n  /**\n   * The function used to merge configuration objects.\n   * @default Object.assign\n   */\n  mergeFn?: typeof Object.assign;\n}): T;\n```\n\n- **Example:**\n\n```ts\nimport { reduceConfigsWithContext } from \"@rsbuild/core\";\n\nconst initial = { a: 1, b: 2 };\nconst context = { user: \"admin\" };\n\nconst finalConfig = reduceConfigsWithContext({\n  initial,\n  config: [\n    { b: 3 },\n    (config, ctx) => ({ ...config, c: ctx.user === \"admin\" ? 99 : 4 }),\n  ],\n  ctx: context,\n});\n// -> { a: 1, b: 3, c: 99 }\n```\n\n## License\n\n[MIT](./LICENSE).\n","_attachments":{},"homepage":"https://github.com/rstackjs/reduce-configs#readme","bugs":{"url":"https://github.com/rstackjs/reduce-configs/issues"},"license":"MIT"}