{"_id":"breadboard","_rev":"77-43a9963aac4f798fad7a1e72866bb678","name":"breadboard","dist-tags":{"latest":"9.0.3"},"versions":{"1.0.1":{"name":"breadboard","version":"1.0.1","author":{"name":"Marek Stasikowski and Simon Adcock","email":"marekstasikowski+simonadcock@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@1.0.1","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js"]},"dist":{"shasum":"128419c611643aaff4aa982c293e38f93821b37c","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-1.0.1.tgz","integrity":"sha512-GUAv2CMyovBZoSlYY7tFE1wz/Gvatg9w38KVZc0y/mqVfweuLzRC7vjqy4i+Ml93WxTgAbqt0NkA/8UjbKku7g==","signatures":[{"sig":"MEUCIA7yEj76vhJ9Q/ld0NoTt6CchZLIB8leX5VP9MiC5kdZAiEA8HxZjNmPpixy4LxXjCpBHO6JSRBE9k8soAEa44ROTqM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"128419c611643aaff4aa982c293e38f93821b37c","gitHead":"31c99ecf4af3a9527a03144dc1e04a3616b2aca3","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"2.14.12","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"4.3.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"4.5.1","harmony-reflect":"1.4.4"},"devDependencies":{"ava":"0.13.0","nyc":"6.0.0","sinon":"1.17.3","chance":"1.0.1","eslint":"2.4.0","tap-xunit":"1.3.1","pre-commit":"1.1.2","babel-eslint":"6.0.0","mock-require":"1.2.1","codeclimate-test-reporter":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-1.0.1.tgz_1459439128395_0.7009341306984425","host":"packages-12-west.internal.npmjs.com"}},"2.0.0":{"name":"breadboard","version":"2.0.0","author":{"name":"Marek Stasikowski and Simon Adcock","email":"marekstasikowski+simonadcock@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@2.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"cf9332a8518d26f67995a90e3e64831be548e807","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-2.0.0.tgz","integrity":"sha512-DK5VjY4j16TVTEejsihxgg2RVFDAHfjvkhFvk41gruSxAND+5v8vJAmgNTeAPccsMYGYRzYxPbJoqiHheRw12w==","signatures":[{"sig":"MEUCIQCxq/7znlK0yT4aW6yHDWTfoaHfBQpC/8ylWi+zsMxtnAIgBMgh9j8R4knqkotakIt3OEHNLjZjIZOeCVQ/oXmqXxw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"cf9332a8518d26f67995a90e3e64831be548e807","engines":{"node":"~4.4"},"gitHead":"085a6775e84b103a9932ff5913ff49ab943e9967","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"2.15.1","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"4.4.3","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"4.5.1","harmony-reflect":"1.4.4"},"devDependencies":{"ava":"0.13.0","nyc":"6.0.0","sinon":"1.17.3","chance":"1.0.1","eslint":"2.4.0","tap-xunit":"1.3.1","pre-commit":"1.1.2","babel-eslint":"6.0.0","mock-require":"1.2.1","codeclimate-test-reporter":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-2.0.0.tgz_1461060014270_0.5760842803865671","host":"packages-16-east.internal.npmjs.com"}},"3.0.0":{"name":"breadboard","version":"3.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@3.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"4421b051d0559df6cd74a98fa8a23bbf5a1c867b","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-3.0.0.tgz","integrity":"sha512-9RpN01x+q2HOlgjEvOZ+xLMkwU5VH4nbbLGqQYI2SoiwX8dGGatFNgzGJAaMjv9cpH14gwdMYetQ23T46zjLyg==","signatures":[{"sig":"MEUCIELFpe9+SeVbq/XD1swvSF8hjpKunmab/FpiwdvsZq07AiEAigm5GZd0S/5TWwJ8Rlt1KIivdY1RXHLRXGqBgcnaa4g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"4421b051d0559df6cd74a98fa8a23bbf5a1c867b","engines":{"node":"~4.4"},"gitHead":"7f366e747f67472038a387a4abfbea0b72ee0203","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"2.15.1","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"4.4.3","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"4.5.1","harmony-reflect":"1.4.4"},"devDependencies":{"ava":"0.13.0","nyc":"6.0.0","sinon":"1.17.3","chance":"1.0.1","eslint":"2.4.0","tap-xunit":"1.3.1","pre-commit":"1.1.2","babel-eslint":"6.0.0","mock-require":"1.2.1","codeclimate-test-reporter":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-3.0.0.tgz_1461340950166_0.8622439703904092","host":"packages-16-east.internal.npmjs.com"}},"3.0.1":{"name":"breadboard","version":"3.0.1","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@3.0.1","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"2975511da2ff835c8ae6ca7da5854ca2e597e4f9","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-3.0.1.tgz","integrity":"sha512-7gWCs43dFCDNEpNZWJVjIWAG2jL9e/neqbjNpAfb6lwgZPfrgTddNUkO4YXEwsMGjY94xu9gI/IlzDv4wY/sOQ==","signatures":[{"sig":"MEQCIAsbFQ5zd57EDTYSuEUyA+0ts9wQM2uB6DmJsKik65ZfAiBaKfaUTYmagh5J3WM8cOVMb9kwfs3wYUVwnOORmxpv9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"2975511da2ff835c8ae6ca7da5854ca2e597e4f9","engines":{"node":"~4.4"},"gitHead":"d5340cbd3c506d1254af24ccf2daeb8200318b5a","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"2.15.1","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"4.4.3","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"4.11.1","harmony-reflect":"1.4.6"},"devDependencies":{"ava":"0.14.0","nyc":"6.4.0","sinon":"1.17.3","chance":"1.0.2","eslint":"2.8.0","pre-commit":"1.1.2","babel-eslint":"6.0.3","mock-require":"1.2.1","codeclimate-test-reporter":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-3.0.1.tgz_1461414305566_0.2057333302218467","host":"packages-16-east.internal.npmjs.com"}},"4.0.0":{"name":"breadboard","version":"4.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@4.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"3d491f03e602ad375517e7560627a27a203f13c1","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-4.0.0.tgz","integrity":"sha512-WrpVO9f7ypgJlgYA58IqGJ4d57CZlZQZH5LMX6Cd7xcEOuQrrmwryqX4UJ+7v9gVwnJ5WMh0np4TeAwn8VN/Pg==","signatures":[{"sig":"MEQCIEuiuWQ5/2iUcZp5FPa46JBec2TNSnnNKgqJf5Uu2wXMAiBa0Y5a1K6lahd/ce9kiYoNVfD8XpYaQmc9AnR8oApyow==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"3d491f03e602ad375517e7560627a27a203f13c1","engines":{"node":"~6.2"},"gitHead":"783af38ee1c7914d4e31a48778744b55dfacbb70","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.3","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.1","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"4.11.1"},"devDependencies":{"ava":"0.14.0","nyc":"6.4.0","sinon":"1.17.3","chance":"1.0.2","eslint":"2.8.0","pre-commit":"1.1.2","babel-eslint":"6.0.3","mock-require":"1.2.1","codeclimate-test-reporter":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-4.0.0.tgz_1465487991866_0.3585460518952459","host":"packages-16-east.internal.npmjs.com"}},"5.0.0":{"name":"breadboard","version":"5.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@5.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"c7a4b30b559420797131ad89bff8fa45f01d9a1b","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-5.0.0.tgz","integrity":"sha512-LEScBZae8cgCTyT3nqR9RWWrAbkOPG3xJkV/d9hgDtgtf9cS+aIDttw7N2dOJ1mOGK/ieHJNYtHvWDLxq+fQhQ==","signatures":[{"sig":"MEYCIQCUN+5NfoQ6CeP49c04dYJpSrcWPoRml297ZdD9Tjcb9QIhANEyiaXyKSqJ4UNFRy2J5aGnKFOi/3XfKTfvrQXNGZj1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"c7a4b30b559420797131ad89bff8fa45f01d9a1b","engines":{"node":"~6.2"},"gitHead":"414c46f0dd757a8f7562ea54e74dba21c5293806","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-5.0.0.tgz_1466700234671_0.6190675294492394","host":"packages-16-east.internal.npmjs.com"}},"6.0.0":{"name":"breadboard","version":"6.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@6.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"f8b35338adb2bf443bcdafc0394a87160f11b477","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-6.0.0.tgz","integrity":"sha512-n35gGxfWmn7YVRUD1ULIcYfcmcVfXX7RtgAf/2g9Fr2y5KpSN6x9F5tDdJxmo712QbyFXnWLDxLJ7e5Yb4UthA==","signatures":[{"sig":"MEUCIQDYs6vLaCYQZ5ySqOFF/xuc0tvv2Twzgaiec0xt5JlWMwIgduUZ4aSOy8+9nb35sS4ECdqHqmwjAdxucqfvouNfmoU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"f8b35338adb2bf443bcdafc0394a87160f11b477","engines":{"node":"~6.2"},"gitHead":"07ac077555950667ee37f83eead2730837f915bc","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-6.0.0.tgz_1468932960143_0.11309152748435736","host":"packages-16-east.internal.npmjs.com"}},"6.0.1":{"name":"breadboard","version":"6.0.1","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@6.0.1","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"34b2d56fd7f485b0c53656ea689be6358b1c4c68","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-6.0.1.tgz","integrity":"sha512-XTS7EmbRYF3XKSJKy9KKN+tvORGVskAucRwy8gApAdMHumzleUKogNnK/mUAKOd5euseu6HNkmYHc5pRKORRlg==","signatures":[{"sig":"MEUCIF0lhKkVQD/3OuXX/VEQWNOPcsf9a9hfzWbV9k3tnihcAiEAlYd016TDHZfH2B9nmxYuhBL7UysYht2BmyCI++7eXhs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"34b2d56fd7f485b0c53656ea689be6358b1c4c68","engines":{"node":"~6.2"},"gitHead":"ac79ef35fbad13bbc70761cc0b04e5773c19adcb","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-6.0.1.tgz_1469021462040_0.7711857797112316","host":"packages-16-east.internal.npmjs.com"}},"7.0.0":{"name":"breadboard","version":"7.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@7.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"0cba589becb3606431561caf2e4bd51298187304","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-7.0.0.tgz","integrity":"sha512-6kHiKwNCn8ISE1dFQEdL6Zt/rZaga6cUB0Ko6Sq0hP10xA4bt02Q5nb9siZ2kvzRt/TblLW8L1EK8reDgSGeEA==","signatures":[{"sig":"MEUCIQCA68anrDsmLxQ3l1RklSs/rmiF6uZYpzLBDubBUjWAQgIgb17fQxJtt79fNJGrl9E57J/oU8X4cd7U6dGi/Fxhmec=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"0cba589becb3606431561caf2e4bd51298187304","engines":{"node":"~6.2"},"gitHead":"361241bb207afe015ce299e6b80295b45a4c8161","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-7.0.0.tgz_1469093861353_0.33470632787793875","host":"packages-12-west.internal.npmjs.com"}},"8.0.0":{"name":"breadboard","version":"8.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@8.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"97b12a9324e432c38de7c6b5a03f941c6289feef","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-8.0.0.tgz","integrity":"sha512-hh9Y0Vx3uOgzpTd1KfT2hFTP43dHTES/as84ks5Pn4SWUS2OIiJMaRjBJeZ/fjBHpTefBTfRFjfwBSl2xY8akA==","signatures":[{"sig":"MEYCIQCvTKcrA4mXBUrY/v5OasCnI638ck5I12TpFWrA7s/sMQIhAO71OZmwzM2qLwDpIRxca+/hYmJebjmQT8g+AtLL/Ia/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"97b12a9324e432c38de7c6b5a03f941c6289feef","engines":{"node":"~6.2"},"gitHead":"ee362be9d0b861ff0f86a735ebb8991fe29c2637","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-8.0.0.tgz_1473865591835_0.9679633968044072","host":"packages-12-west.internal.npmjs.com"}},"9.0.0":{"name":"breadboard","version":"9.0.0","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@9.0.0","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"e15b8700728651043b616df70bd202eaba398e0e","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-9.0.0.tgz","integrity":"sha512-+LxpniFrw2zBKWTd45RyHyUphHJpAVewHfEp40S1TdtQ7Gb+roOe93Yj1kmiVFpGeJU95WxH/EC9GxVWzy4i1w==","signatures":[{"sig":"MEQCIDVRiENbY+q6kt/ut05sP8bx+n5cD6A/NuJEmP0QQV3QAiAb0+aqJKCzD3PjHqhJ/xS1CqyMDG2dpteVw5MnNWw3Zg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"e15b8700728651043b616df70bd202eaba398e0e","engines":{"node":"~6.2"},"gitHead":"763f8fe604fe4720905fb6c3181f5627dcea8c58","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-9.0.0.tgz_1474464660240_0.7223212411627173","host":"packages-12-west.internal.npmjs.com"}},"9.0.1":{"name":"breadboard","version":"9.0.1","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@9.0.1","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"4deb8f62574bc38b5dfbe5e6c9084bfa30e5e366","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-9.0.1.tgz","integrity":"sha512-GnXc7+0x97ayBQb+00yxpDlGIRzYQyexWbA5kCvGtK11t5sdbhREE552nybSzkL/bnkl39KncjOEIixnry/mHw==","signatures":[{"sig":"MEUCIQCgpmDMggte/KfThFsw8ejCcqeyafYxu7RQJ8dAVa+rgwIgHfwM01Oum5mfhl9RYDUfQG31j6XEuVPvysMh3NhTChM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"4deb8f62574bc38b5dfbe5e6c9084bfa30e5e366","engines":{"node":">=6.2"},"gitHead":"6f949598d1fd0e1c77b76c58d6f630770a2bc56a","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-9.0.1.tgz_1476693419508_0.01680616196244955","host":"packages-16-east.internal.npmjs.com"}},"9.0.2":{"name":"breadboard","version":"9.0.2","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@9.0.2","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"6b675931f9610233581d3e9023253fc31b45a93a","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-9.0.2.tgz","integrity":"sha512-TOZPIWkbwI6dUP3fTj1tlh1V4xfF6DwzKrgXZ35RaKVi9MqBEs4RTBX7lE7BaPEOeYjmGTd7idxyLkg2tfHhqw==","signatures":[{"sig":"MEYCIQDgRiJFmKQdQp8KOVOE+EljE/FKHDYtz7prpIAID/GMaQIhAMFXmAAezj8CrqDU/uBrlUgX08rgbjCer95h/FyvufuW","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"6b675931f9610233581d3e9023253fc31b45a93a","engines":{"node":">=6.2"},"gitHead":"4eef95184fe17e159c540d8644110bf23442824a","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"2.2.0","sinon":"1.17.3","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.4","chance":"^1.0.3","eslint":"^2.13.1","pre-commit":"^1.1.3","babel-eslint":"^6.0.5","mock-require":"^1.3.0","eslint-plugin-react":"^5.2.2","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-9.0.2.tgz_1476693429966_0.9766539451666176","host":"packages-16-east.internal.npmjs.com"}},"9.0.3":{"name":"breadboard","version":"9.0.3","author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","_id":"breadboard@9.0.3","maintainers":[{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"}],"homepage":"https://github.com/notonthehighstreet/breadboard#readme","bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"ava":{"files":["**/*.spec.js"]},"nyc":{"exclude":["lib/autoMock.js"],"include":["lib/**/*.js","index.js"]},"dist":{"shasum":"ffe1cb8d071e195d554be15cbcb2fb61288241ad","tarball":"https://registry.npmjs.org/breadboard/-/breadboard-9.0.3.tgz","integrity":"sha512-B6krmRS/IQ9/RDInplxww2VxFzfK3oQ/tZgxbBAMiXJs1653Smp551ejy6g/Z3vIYM7/J7OmiMVQDryyusyyQQ==","signatures":[{"sig":"MEYCIQCW2bhGRjV+FOiQmQz1DTb+uJs1Li6v4eZDBlTxoMM/sgIhAMyr1+ECiQASK2lSD03TX2WBnLlRgtrdfW5vXPKGFpx+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"ffe1cb8d071e195d554be15cbcb2fb61288241ad","engines":{"node":">=6.2"},"gitHead":"1687bff1a416c01f0e93c9728c3ffe44a9523af6","scripts":{"lint":"./node_modules/eslint/bin/eslint.js .","test":"./node_modules/ava/cli.js --serial","report":"npm run coverage && ./node_modules/.bin/nyc report --reporter=html","coverage":"nyc ./node_modules/ava/cli.js --serial --all","codeclimate":"npm run coverage -- --reporter=lcov --reporter=text-lcov | ./node_modules/codeclimate-test-reporter/bin/codeclimate.js"},"_npmUser":{"name":"notonthehighstreet","email":"technical.team@notonthehighstreet.com"},"pre-commit":["lint","test"],"repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"_npmVersion":"3.9.5","description":"Lightweight IOC container for Node.js","directories":{},"_nodeVersion":"6.2.2","dependencies":{"walk":"2.3.9","debug":"^2.6.0","lodash":"^4.13.1"},"devDependencies":{"ava":"^0.15.2","nyc":"^6.6.1","sinon":"^1.17.7","chance":"^1.0.3","eslint":"^3.13.1","pre-commit":"^1.1.3","babel-eslint":"^7.1.1","mock-require":"^1.3.0","eslint-plugin-react":"^6.9.0","codeclimate-test-reporter":"^0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/breadboard-9.0.3.tgz_1484742504256_0.46672974596731365","host":"packages-18-east.internal.npmjs.com"}}},"time":{"created":"2014-06-04T13:12:56.711Z","modified":"2026-05-15T10:15:58.442Z","0.0.1":"2014-06-04T13:12:56.711Z","0.0.2":"2014-06-04T18:38:46.535Z","0.0.3":"2014-06-11T14:47:55.271Z","1.0.1":"2016-03-31T15:45:30.546Z","2.0.0":"2016-04-19T10:00:15.773Z","3.0.0":"2016-04-22T16:02:31.838Z","3.0.1":"2016-04-23T12:25:07.345Z","4.0.0":"2016-06-09T15:59:54.135Z","5.0.0":"2016-06-23T16:43:56.782Z","6.0.0":"2016-07-19T12:56:01.362Z","6.0.1":"2016-07-20T13:31:03.544Z","7.0.0":"2016-07-21T09:37:43.354Z","8.0.0":"2016-09-14T15:06:33.458Z","9.0.0":"2016-09-21T13:31:02.096Z","9.0.1":"2016-10-17T08:37:01.246Z","9.0.2":"2016-10-17T08:37:11.702Z","9.0.3":"2017-01-18T12:28:25.024Z"},"bugs":{"url":"https://github.com/notonthehighstreet/breadboard/issues"},"author":{"name":"notonthehighstreet.com","email":"technical.team@notonthehighstreet.com"},"license":"MIT","homepage":"https://github.com/notonthehighstreet/breadboard#readme","repository":{"url":"git+https://github.com/notonthehighstreet/breadboard.git","type":"git"},"description":"Lightweight IOC container for Node.js","maintainers":[{"email":"danielcremer@notonthehighstreet.com","name":"danielc-noths"},{"email":"tech.contact.npmjs@notonthehighstreet.com","name":"noths-tech"},{"email":"dansearle@notonthehighstreet.com","name":"dansearle-noths"},{"email":"emanuelaianc@notonthehighstreet.com","name":"emanuelaianc"},{"email":"dorubudai@notonthehighstreet.com","name":"codingiam"},{"email":"chenboyi@notonthehighstreet.com","name":"chenboyi"},{"email":"szymonskrzek@notonthehighstreet.com","name":"sskrzek-noths"},{"email":"tombruggenwirth@notonthehighstreet.com","name":"tombruggenwirth"},{"email":"frankthamel@notonthehighstreet.com","name":"frankthamel"},{"email":"javiergarcia-ext@notonthehighstreet.com","name":"javignoths"},{"email":"simmyd91@gmail.com","name":"simmyd91"},{"email":"sangeetharajasekaran@notonthehighstreet.com","name":"sangeethar"},{"email":"gregorybecker@notonthehighstreet.com","name":"gregorybecker-noths"},{"email":"technical.team@notonthehighstreet.com","name":"notonthehighstreet"}],"readme":"![](http://i.imgur.com/3lFs20I.png)\n\n# Breadboard\n[![Code Climate](https://codeclimate.com/github/notonthehighstreet/breadboard/badges/gpa.svg)](https://codeclimate.com/github/notonthehighstreet/breadboard)\n[![Test Coverage](https://codeclimate.com/github/notonthehighstreet/breadboard/badges/coverage.svg)](https://codeclimate.com/github/notonthehighstreet/breadboard/coverage)\n[![Build Status](https://travis-ci.org/notonthehighstreet/breadboard.svg?branch=master)](https://travis-ci.org/notonthehighstreet/breadboard)\n\nBreadboard is an opinionated inversion of control container for Node.js applications.\n\n## Motivation\n* Working with `require` is less than ideal.\n  * The same module will have a different key depending on the path of the requiring module.\n  * Testing a module in isolation, ie. mocking its dependencies, requires hacky solutions that hijack `require` calls. This approach is indeterministic, depending on various seemingly unrelated conditions around how the the module you want to mock was defined.\n* Discouraging managing state of the app through side effects when `require`ing.\n* Single function call to auto-mock a module's dependencies in your tests.\n\nBreadboard will lazily require all your application's dependencies defined in `package.json`, all Node native modules and all of your application's modules and store them in a `dependencies` object. The object is exposed to your application's modules by calling the modules as functions, passing the dependencies as an argument. As such, your modules are expected to be wrapped in an extra function returning the desired export value, which Breadboard then calls on application start.\n\n## Install\n```\nnpm install breadboard\n```\n\n## Example of a module in your application\n\nConsider this CommonJS module:\n```js\n//startServer.js\n\nconst d = require('debug')('myApp');\nconst createServer = require('./lib/createServer');\n\nmodule.exports = () => {\n  const server = createServer();\n\n  server.listen(80, () => {\n    d('Server listening on port 80');\n  });\n\n  return server;\n};\n```\n\nThe Breadboard equivalent would be:\n```js\n//startServer.js\n\n// wrap module in factory function\nmodule.exports = ({ // destructure dependencies to get the modules needed\n    debug,\n    '/lib/createServer': createServer\n  }) => {\n  // return the core functionality of the module as a function\n  return () => {\n    const server = createServer();\n    const d = debug('myApp');\n\n    server.listen(80, () => {\n      d('Server listening on port 80');\n    });\n\n    return server;\n  };\n};\n```\n\nTo start your application:\n```js\n\nconst breadboard = require('breadboard');\n\nbreadboard({\n  entry: '/index',\n  containerRoot: 'app',\n  initialState: {\n    arbitrary: 'state data'\n  },\n  blacklist: ['newrelic']\n}).then(({deps, entryResolveValue}) => {\n  console.log('Application started', deps, entryResolveValue);\n});\n```\n\n## Further examples\n\nTake a look at `examples/kitchen`. To run, `npm install` then `npm start`.\n\n## Module keys\nModule keys in a Breadboard app are static, ie. are always relative to the container's root folder, starting with `/`, and always using `/` as path separators, no matter the platform. Consider these example module keys:\n```\n/lib/getUser\n/middleware/getUser\n/logger\n```\nKeys for native Node.js modules and 3rd party modules remain the same as if you were using `require`.\nBreadboard also loads all JSON files. To access them, append `.json` to the end of the key, eg. `/data/userPasswords.json`.\n\n## API\n`breadboard(options)`\n\nReturns a promise chained to the return value of your application's entry point, which might be another promise or a concrete value.\n### `options`\n#### `options.entry` (String | Function&lt;Object&gt;)\n##### String\nModule key for the entry point of the application.\n##### Function&lt;Object&gt;\nWill be called as the entry point module, with resolved dependencies as the argument.\n#### `options.containerRoot` (String)\nPath relative to the current working directory, from which all module keys will be resolved\n#### `options.initialState` (Object)\nThe argument the `entry` function will be called with.\n#### `options.blacklist` (Array&lt;String&gt;)\nList of modules from your `package.json` which you wish Breadboard not to load. If you want to defer a `require` call to a 3rd party module, put it in the `blacklist` and `require` manually in your code.\n#### `options.substitutes` (Object)\nA Breadboard module-key to module mapping to indicate which modules you want to substitute across the whole application with your custom implementation. Useful when testing integration of multiple modules. You could substitute eg. a database connector with a stub to remove a running database as a dependency of your tests.\n\n## Testing\nIn tests require your Breadboard modules as if they were CommonJS modules. You can then supply your own stubs and spies as test doubles. Consider the following example:\n### Test subject module `/index`\n```js\nmodule.exports = (deps) => {\n  return () => {\n    const {\n      '/widgets/createDough': createDough,\n      '/pasta/createPapardelle': createPapardelle,\n      'debug': debug\n    } = deps;\n    const d = debug('pasta');\n\n    d(createPapardelle(createDough()));\n  };\n};\n```\n### Test for `/index`\n```js\nimport { expect } from 'chai';\nimport mainFactory from '../../app/index';\nimport sinon from 'sinon';\n\ndescribe('Main', () => {\n  const sandbox = sinon.sandbox.create();\n  const debugSpy = sandbox.spy();\n  const mockDough = 'dough';\n  const mockDependencies = {\n    debug: sandbox.stub().returns(debugSpy),\n    '/widgets/createDough': sandbox.stub().returns(mockDough),\n    '/pasta/createPapardelle': sandbox.spy()\n  };\n  let main;\n\n  beforeEach(() => {\n    main = mainFactory(mockDependencies);\n  });\n  afterEach(() => {\n    sandbox.reset();\n  });\n  it('calls debug', () => {\n    main();\n    expect(mockDependencies.debug.calledOnce).to.be.true;\n  });\n  it('calls createDough', () => {\n    main();\n    expect(mockDependencies['/widgets/createDough'].calledOnce).to.be.true;\n  });\n  it('calls createPapardelle with createDough return value', () => {\n    main();\n    expect(mockDependencies['/pasta/createPapardelle'].calledWith(mockDough)).to.be.true;\n  });\n});\n```\n\n### `autoMock`\n`autoMock` automatically replaces every dependency of a given Breadboard module with a [Sinon.JS stub](http://sinonjs.org/docs/#stubs).\n\n### `autoMock` API\n\n`autoMock(factory, options)`\n#### `factory` (Function)\nThe Breadboard factory function to build the subject to test.\n#### `options` (Object)\n##### `options.mocks` (Object)\nA Breadboard module-key to module mapping to indicate which modules you want to mock manually.\n#### returns Object&lt;subject, deps, sandbox&gt;\n##### `subject`\nThe module returned by `factory`.\n##### `deps`\nThe mock dependencies injected into `subject`.\n##### `sandbox`\nInstance of a [Sinon.JS sandbox](http://sinonjs.org/docs/#sandbox).\n\n### `autoMock` example\n#### Test subject module `/index`\n```js\nmodule.exports = (deps) => {\n  return function main() {\n    const {\n      '/widgets/createDough': createDough,\n      '/pasta/createPapardelle': createPapardelle,\n      'debug': debug\n    } = deps;\n    const d = debug('pasta');\n\n    d(createPapardelle(createDough()));\n  };\n};\n```\n#### Test for module `/index`\n```js\nimport { expect } from 'chai';\nimport mainFactory from '../../app/index';\nimport autoMock from 'breadboard/lib/autoMock';\n\nconst mockDough = 'dough';\nconst {subject: main, sandbox, deps} = autoMock(mainFactory);\nconst debugSpy = sandbox.spy();\n\ndeps.debug.returns(debugSpy);\ndeps['/widgets/createDough'].returns(mockDough);\ndescribe('Main', () => {\n  afterEach(() => {\n    sandbox.reset();\n  });\n  it('calls debug', () => {\n    main();\n    expect(deps.debug.calledOnce).to.be.true;\n  });\n  it('calls createDough', () => {\n    main();\n    expect(deps['/widgets/createDough'].calledOnce).to.be.true;\n  });\n  it('calls createPapardelle with createDough return value', () => {\n    main();\n    expect(deps['/pasta/createPapardelle'].calledWith(mockDough)).to.be.true;\n  });\n});\n```\n","readmeFilename":"README.md","users":{"notonthehighstreet":true}}