{"_id":"combos","_rev":"4-f0be4c62d59a053623d9166134c838b6","name":"combos","description":"Generate all possible permutations of an object's key-value pairs","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"combos","version":"0.1.0","description":"Generate all possible permutations of an object's key-value pairs","main":"lib/index.js","files":["src","lib"],"dependencies":{},"scripts":{"build":"babel src --out-dir lib","clean":"rm -rf lib","lint":"eslint ./src ./test","prepublish":"npm run clean && npm run build","test":"ava","watch:test":"ava -w"},"repository":{"type":"git","url":"git+https://github.com/jfairbank/combos.git"},"keywords":["testing","test","object","combo","combinations","combos","values","shapes"],"author":{"name":"Jeremy Fairbank","email":"elpapapollo@gmail.com","url":"http://jeremyfairbank.com"},"license":"MIT","bugs":{"url":"https://github.com/jfairbank/combos/issues"},"homepage":"https://github.com/jfairbank/combos#readme","devDependencies":{"ava":"^0.15.2","babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-preset-es2015-loose":"^7.0.0","eslint":"^3.2.2","eslint-config-airbnb-base":"^5.0.1","eslint-import-resolver-node":"^0.2.2","eslint-plugin-import":"^1.12.0"},"babel":{"presets":["es2015-loose"]},"eslintConfig":{"extends":["airbnb-base","plugin:import/errors","plugin:import/warnings"],"settings":{"import/resolver":"node"},"rules":{"no-underscore-dangle":0,"no-unused-vars":["error",{"args":"after-used","argsIgnorePattern":"^_"}],"import/no-extraneous-dependencies":["error",{"devDependencies":true}]}},"ava":{"require":"babel-register"},"gitHead":"9d94ffc33013b696c2163d6f82607ebf6ae2da23","_id":"combos@0.1.0","_shasum":"cd7a08df30929b4b05df56154d57c28beb20782b","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.0.0","_npmUser":{"name":"elpapapollo","email":"elpapapollo@gmail.com"},"maintainers":[{"name":"elpapapollo","email":"elpapapollo@gmail.com"}],"dist":{"shasum":"cd7a08df30929b4b05df56154d57c28beb20782b","tarball":"https://registry.npmjs.org/combos/-/combos-0.1.0.tgz","integrity":"sha512-4hnVNBIUxgvvsYnXfA2jeUE1sWU6wB/V7GIkU3Y4bBLTSFUwech1QpvYpBiHhlc1Z9+bb/6WMk3VNrSFtkNXtg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAt4d79jzE12HJ/0/43eFoS1xom9+XV7VtYhYRYCurvtAiBS7VqhIRtH1SKxTslDokwh0HfOO+z6ulQveHcs+D4O3g=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/combos-0.1.0.tgz_1470262274414_0.744258715538308"}},"0.2.0":{"name":"combos","version":"0.2.0","description":"Generate all possible permutations of an object's key-value pairs","main":"lib/index.js","files":["src","lib"],"dependencies":{},"scripts":{"build":"babel src --out-dir lib","clean":"rm -rf lib","lint":"eslint ./src ./test","prepublish":"npm run clean && npm run build","test":"ava","watch:test":"ava -w"},"repository":{"type":"git","url":"git+https://github.com/jfairbank/combos.git"},"keywords":["testing","test","object","combo","combinations","combos","values","shapes"],"author":{"name":"Jeremy Fairbank","email":"elpapapollo@gmail.com","url":"http://jeremyfairbank.com"},"license":"MIT","bugs":{"url":"https://github.com/jfairbank/combos/issues"},"homepage":"https://github.com/jfairbank/combos#readme","devDependencies":{"ava":"^0.15.2","babel-cli":"^6.11.4","babel-core":"^6.11.4","babel-preset-es2015-loose":"^7.0.0","babel-register":"^6.11.6","eslint":"^3.2.2","eslint-config-airbnb-base":"^5.0.1","eslint-import-resolver-node":"^0.2.2","eslint-plugin-import":"^1.12.0"},"babel":{"presets":["es2015-loose"]},"eslintConfig":{"extends":["airbnb-base","plugin:import/errors","plugin:import/warnings"],"settings":{"import/resolver":"node"},"rules":{"no-prototype-builtins":0,"no-underscore-dangle":0,"no-unused-vars":["error",{"args":"after-used","argsIgnorePattern":"^_"}],"import/no-extraneous-dependencies":["error",{"devDependencies":true}]}},"ava":{"require":"babel-register"},"gitHead":"c453679a163e418f1e9d326ae3b26000a20dbdea","_id":"combos@0.2.0","_shasum":"dc31c5a899b42293d55fe19c064d3e6e207ba4f7","_from":".","_npmVersion":"3.8.6","_nodeVersion":"6.0.0","_npmUser":{"name":"elpapapollo","email":"elpapapollo@gmail.com"},"maintainers":[{"name":"elpapapollo","email":"elpapapollo@gmail.com"}],"dist":{"shasum":"dc31c5a899b42293d55fe19c064d3e6e207ba4f7","tarball":"https://registry.npmjs.org/combos/-/combos-0.2.0.tgz","integrity":"sha512-Z6YfvgiTCERWJTj3wQiXamFhssdvz1n4ok447rS330lw3uL72WAx8IvrLU7xiE71uyb5WF8JEP+BWB5KhOoGeg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDlAiEinlzNS50U4sMkvNI7wScuYAhPheNQeVlwLTBbJAiEAwbU4hh9By+M306ofLfpm3OVNcdLEC+KfPkhhHL4yH0M="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/combos-0.2.0.tgz_1471300335033_0.4741593305952847"}}},"readme":"# combos\n\n[![Travis branch](https://img.shields.io/travis/jfairbank/combos/master.svg?style=flat-square)](https://travis-ci.org/jfairbank/combos)\n[![npm](https://img.shields.io/npm/v/combos.svg?style=flat-square)](https://www.npmjs.com/package/combos)\n\nGenerate all possible permutations of an object's key-value pairs. Combos\ntakes all the possible values an object's keys can have and creates all possible\ncombinations of those values for each key.\n\nThis is perfect for reducing duplication in tests when multiple versions of\nan object should produce the same test results. This could be especially useful\nwith React components and nontrivial prop combinations.\n\n## Install\n\n    $ npm install combos\n\n## Usage\n\nImport/require the `combos` function and provide it with an object. The keys of\nthe object are the keys you desire to have in your final objects. The values are\nan array, containing all possible values that given key can have. The return\nvalue is an array containing every version of the object with all possible\ncombinations of the values.\n\nA simple example helps explain:\n\n```js\n// Simple example\n// ES2015\nimport combos from 'combos';\n\n// ES5\nconst combos = require('combos');\n\n// Given an object shape of\n// {\n//   greeting: string,\n//   name: string,\n// }\n\n// Generate all possible combinations.\n// (Note: you don't have to restrict each\n// array of values to all have the same type.)\nconst permutations = combos({\n  greeting: ['Hello', 'Hi'],\n  name: ['Jeremy', 'Jet'],\n});\n\n// 'greeting' has 2 possible values\n// 'name' has 2 possible values\n// Therefore, the final array will have 2*2 = 4 possible objects.\n\n// Output with 4 different objects:\n// =================================\n// [ { greeting: 'Hello', name: 'Jeremy' },\n//   { greeting: 'Hi',    name: 'Jeremy' },\n//   { greeting: 'Hello', name: 'Jet'    },\n//   { greeting: 'Hi',    name: 'Jet'    } ]\n```\n\nMore complex example:\n\n```js\nimport combos from 'combos';\n\nconst permutations = combos({\n  greeting: ['Hello', 'Hi'],\n  isChecked: [true, false],\n  flag: [1, 2, 4],\n});\n\n// 'greeting' has 2 possible values\n// 'isChecked' has 2 possible values\n// 'flag' has 3 possible values\n// Therefore, the final array will have 2*2*3 = 12 possible objects.\n\n// Output with 12 different objects:\n// =================================\n// [ { greeting: 'Hello', isChecked: true,  flag: 1 },\n//   { greeting: 'Hi',    isChecked: true,  flag: 1 },\n//   { greeting: 'Hello', isChecked: false, flag: 1 },\n//   { greeting: 'Hi',    isChecked: false, flag: 1 },\n//   { greeting: 'Hello', isChecked: true,  flag: 2 },\n//   { greeting: 'Hi',    isChecked: true,  flag: 2 },\n//   { greeting: 'Hello', isChecked: false, flag: 2 },\n//   { greeting: 'Hi',    isChecked: false, flag: 2 },\n//   { greeting: 'Hello', isChecked: true,  flag: 4 },\n//   { greeting: 'Hi',    isChecked: true,  flag: 4 },\n//   { greeting: 'Hello', isChecked: false, flag: 4 },\n//   { greeting: 'Hi',    isChecked: false, flag: 4 } ]\n```\n\nKeeping a value constant:\n\n```js\nimport combos from 'combos';\n\nconst permutations = combos({\n  greeting: ['Hello', 'Hi'],\n  name: ['Jeremy'],\n});\n\n// 'greeting' has 2 possible values\n// 'name' has 1 possible value\n// Therefore, the final array will have 2*1 = 2 possible objects.\n\n// Output with 2 different objects:\n// =================================\n// [ { greeting: 'Hello', name: 'Jeremy' },\n//   { greeting: 'Hi',    name: 'Jeremy' } ]\n```\n\nMaking a value optional:\n\n```js\nimport combos from 'combos';\n\nconst permutations = combos({\n  greeting: ['Hello', 'Hi'],\n  name: ['Jeremy', combos.UNDEF],\n});\n\n// 'greeting' has 2 possible values\n// 'name' has 2 possible values where one state is being absent\n// Therefore, the final array will have 2*2 = 4 possible objects.\n\n// Output with 4 different objects:\n// =================================\n// [ { greeting: 'Hello', name: 'Jeremy' },\n//   { greeting: 'Hi',    name: 'Jeremy' },\n//   { greeting: 'Hello'                 },\n//   { greeting: 'Hi'                    } ]\n```\n","maintainers":[{"name":"elpapapollo","email":"elpapapollo@gmail.com"}],"time":{"modified":"2022-06-13T06:34:08.878Z","created":"2016-08-03T22:11:16.349Z","0.1.0":"2016-08-03T22:11:16.349Z","0.2.0":"2016-08-15T22:32:16.979Z"},"homepage":"https://github.com/jfairbank/combos#readme","keywords":["testing","test","object","combo","combinations","combos","values","shapes"],"repository":{"type":"git","url":"git+https://github.com/jfairbank/combos.git"},"author":{"name":"Jeremy Fairbank","email":"elpapapollo@gmail.com","url":"http://jeremyfairbank.com"},"bugs":{"url":"https://github.com/jfairbank/combos/issues"},"license":"MIT","readmeFilename":"README.md"}