{"_id":"@dword-design/merge-options-fork","name":"@dword-design/merge-options-fork","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@dword-design/merge-options-fork","version":"0.0.1","description":"Merge Option Objects","license":"MIT","repository":{"type":"git","url":"git+https://github.com/schnittstabil/merge-options.git"},"author":{"name":"Michael Mayer","email":"michael@schnittstabil.de"},"engines":{"node":">=10"},"scripts":{"test":"xo && tsd && nyc ava","lint":"xo","unit":"ava","typecheck":"tsd","clean":"rimraf .nyc_output/ coverage/","coverage-html":"nyc ava && nyc report --reporter=html"},"main":"./index.js","exports":{"types":"./index.d.ts","require":"./index.js","import":"./index.mjs"},"keywords":["merge","options","deep","plain","object","extend","clone"],"devDependencies":{"ava":"^3.11.1","coveralls":"^3.1.0","nyc":"^15.1.0","rimraf":"^3.0.2","tsd":"^0.13.1","xo":"^0.33.0"},"dependencies":{"is-plain-obj":"^2.1.0"},"xo":{"rules":{"import/extensions":"off","import/no-useless-path-segments":"off","unicorn/import-index":"off"}},"_id":"@dword-design/merge-options-fork@0.0.1","gitHead":"19f833b857f0cac41f2e9b722f167c8a59cf6407","types":"./index.d.ts","bugs":{"url":"https://github.com/schnittstabil/merge-options/issues"},"homepage":"https://github.com/schnittstabil/merge-options#readme","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-W6dtBxFNUtqE4kdcKlE+u1O8G6QQZUWgzwl/lPvJg8OWM956QupDuQsQew4AvNd5tACu0hFRRMCXBRZfaLiagQ==","shasum":"420503e92ef6bea4b6d719fbe9d747e3444476e8","tarball":"https://registry.npmjs.org/@dword-design/merge-options-fork/-/merge-options-fork-0.0.1.tgz","fileCount":6,"unpackedSize":10715,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDociaRxUQO/jyQWFcZUnSLKPKDW/s5rDnobElKQvKVGAIgW/0QvuNpVAw9z5uo/2nglPHnFztGBBTKq0HH8YXij/Y="}]},"_npmUser":{"name":"dword-design","email":"info@sebastianlandwehr.com"},"directories":{},"maintainers":[{"name":"dword-design","email":"info@sebastianlandwehr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/merge-options-fork_0.0.1_1765055353549_0.8125343983553177"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-06T21:09:13.448Z","0.0.1":"2025-12-06T21:09:13.696Z","modified":"2025-12-06T21:09:14.041Z"},"maintainers":[{"name":"dword-design","email":"info@sebastianlandwehr.com"}],"description":"Merge Option Objects","homepage":"https://github.com/schnittstabil/merge-options#readme","keywords":["merge","options","deep","plain","object","extend","clone"],"repository":{"type":"git","url":"git+https://github.com/schnittstabil/merge-options.git"},"author":{"name":"Michael Mayer","email":"michael@schnittstabil.de"},"bugs":{"url":"https://github.com/schnittstabil/merge-options/issues"},"license":"MIT","readme":"# merge-options [![Build Status](https://travis-ci.org/schnittstabil/merge-options.svg?branch=master)](https://travis-ci.org/schnittstabil/merge-options) [![Coverage Status](https://coveralls.io/repos/schnittstabil/merge-options/badge.svg?branch=master&service=github)](https://coveralls.io/github/schnittstabil/merge-options?branch=master) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo)\n\n\n> Merge Option Objects\n\n`merge-options` considers [plain objects](https://github.com/sindresorhus/is-plain-obj) as *Option Objects*, everything else as *Option Values*.\n\n## Install\n\n```\n$ npm install --save merge-options\n```\n\n## Usage\n\n```js\nconst mergeOptions = require('merge-options');\n\nmergeOptions({foo: 0}, {bar: 1}, {baz: 2}, {bar: 3})\n//=> {foo: 0, bar: 3, baz: 2}\n\nmergeOptions({nested: {unicorns: 'none'}}, {nested: {unicorns: 'many'}})\n//=> {nested: {unicorns: 'many'}}\n\nmergeOptions({[Symbol.for('key')]: 0}, {[Symbol.for('key')]: 42})\n//=> {Symbol(key): 42}\n```\n\n### Usage with custom config\n\n```js\nconst mergeOptions = require('merge-options').bind({ignoreUndefined: true});\n\nmergeOptions({foo: 'bar'}, {foo: undefined})\n//=> {foo: 'bar'}\n```\n\n## API\n\n### mergeOptions(option1, ...options)<br/>mergeOptions.call(config, option1, ...options)<br/>mergeOptions.apply(config, [option1, ...options])\n\n`mergeOptions` recursively merges one or more *Option Objects* into a new one and returns that. The `options` are merged in order, thus *Option Values* of additional `options` take precedence over previous ones.\n\nThe merging does not alter the passed `option` arguments, taking roughly the following steps:\n* recursively cloning<sup><a href=\"#note1\">[1]</a></sup> *Option Objects* and [arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) until reaching *Option Values*\n* copying<sup><a href=\"#note1\">[1]</a></sup> references to *Option Values* to the result object\n\n\n```js\nconst defaultOpts = {\n\tfn:      () => false,                  // functions are Option Values\n\tpromise: Promise.reject(new Error()),  // all non-plain objects are Option Values\n\tarray:   ['foo'],                      // arrays are Option Values\n\tnested:  {unicorns: 'none'}            // {…} is plain, therefore an Option Object\n};\n\nconst opts = {\n\tfn:      () => true,                   // [1]\n\tpromise: Promise.resolve('bar'),       // [2]\n\tarray:   ['baz'],                      // [3]\n\tnested:  {unicorns: 'many'}            // [4]\n};\n\nmergeOptions(defaultOpts, opts)\n//=>\n{\n\tfn:      [Function],                   // === [1]\n\tpromise: Promise { 'bar' },            // === [2]\n\tarray:   ['baz'],                      // !== [3] (arrays are cloned)\n\tnested:  {unicorns: 'many'}            // !== [4] (Option Objects are cloned)\n}\n```\n\n#### config\n\nType: `object`\n\n##### config.concatArrays\n\nType: `boolean`<br/>Default: `false`\n\nConcatenate arrays:\n\n```js\nmergeOptions({src: ['src/**']}, {src: ['test/**']})\n//=> {src: ['test/**']}\n\n// Via call\nmergeOptions.call({concatArrays: true}, {src: ['src/**']}, {src: ['test/**']})\n//=> {src: ['src/**', 'test/**']}\n\n// Via apply\nmergeOptions.apply({concatArrays: true}, [{src: ['src/**']}, {src: ['test/**']}])\n//=> {src: ['src/**', 'test/**']}\n```\n\n##### config.ignoreUndefined\n\nType: `boolean`<br/>Default: `false`\n\nIgnore undefined values:\n\n```js\nmergeOptions({foo: 'bar'}, {foo: undefined})\n//=> {foo: undefined}\n\n// Via call\nmergeOptions.call({ignoreUndefined: true}, {foo: 'bar'}, {foo: undefined})\n//=> {foo: 'bar'}\n\n// Via apply\nmergeOptions.apply({ignoreUndefined: true}, [{foo: 'bar'}, {foo: undefined}])\n//=> {foo: 'bar'}\n```\n\n\n## Related\n\n* See [object-assign](https://github.com/sindresorhus/object-assign) if you need a ES2015 Object.assign() ponyfill\n* See [deep-assign](https://github.com/sindresorhus/deep-assign) if you need to do Object.assign() recursively\n\n## Notes\n\n<ol>\n\t<li id=\"note1\">copying and cloning take only enumerable own properties into account</li>\n</ol>\n\n## License\n\nMIT © [Michael Mayer](http://schnittstabil.de)\n","readmeFilename":"readme.md","_rev":"1-5afbdf4ea81b6938751c71fac63100d7"}