{"_id":"extract-opts","_rev":"58-10e8ecb09f7401ca52b17c76daae62e6","name":"extract-opts","description":"Extract the options and callback from a function's arguments easily","dist-tags":{"latest":"5.9.0","next":"5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151"},"versions":{"2.0.0":{"name":"extract-opts","version":"2.0.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"author":{"name":"Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"http://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.4"},"dependencies":{"typechecker":"~2.0.1"},"devDependencies":{"coffee-script":"~1.6.2","joe":"~1.2.0","joe-reporter-console":"~1.2.1","chai":"~1.5.0","eachr":"~2.0.2"},"directories":{"lib":"./out/lib"},"scripts":{"test":"node ./out/test/extract-opts-test.js"},"main":"./out/lib/extract-opts.js","_id":"extract-opts@2.0.0","dist":{"shasum":"0de4098b6c6d958f9b8d7a1fb0f3ad7a8159107d","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-2.0.0.tgz","integrity":"sha512-gtjVJyiLJZ3UyVnXB2kw7UJlrmp2mGZbY9bRqi2FBAkhC0FJ7IVXc9FR7yhaOmqIr2tvWM9cW6O/xB/N5n5swQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHpbxqvtjNmrwE807gEVo2a7UXEBaFKvzuDEPWku8T+KAiEAyc9wD5/YVzS372t6IANnzdo5mpnaCXofYlPk4At2qWg="}]},"_from":".","_npmVersion":"1.2.32","_npmUser":{"name":"balupton","email":"b@lupton.cc"}},"2.2.0":{"name":"extract-opts","version":"2.2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"author":{"name":"Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"http://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.4"},"dependencies":{"typechecker":"~2.0.1"},"devDependencies":{"coffee-script":"~1.6.2","joe":"~1.2.0","joe-reporter-console":"~1.2.1","chai":"~1.5.0","eachr":"~2.0.2"},"directories":{"lib":"./out/lib"},"scripts":{"test":"node ./out/test/extract-opts-test.js"},"main":"./out/lib/extract-opts.js","_id":"extract-opts@2.2.0","dist":{"shasum":"1fa28eba7352c6db480f885ceb71a46810be6d7d","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-2.2.0.tgz","integrity":"sha512-6DLdrGn/6m2K0Rf/sMnFi/WqB5WPBeFR2nxpi2iwsf+PnXFuiz+5m0+m0YOcfFEoV4vFxl4kxZj8OG45vMp+pw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGnM3jjx9YqRqUN+6NpFg9lOIFFLZVM1CoDC7sl9EkkKAiA2OU9GbTHlMzLgmZ81M/OtTKy4rfgDzzzA1JZeUfMTvA=="}]},"_from":".","_npmVersion":"1.2.32","_npmUser":{"name":"balupton","email":"b@lupton.cc"}},"3.0.0":{"title":"Extract Options","name":"extract-opts","version":"3.0.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"travis":true,"npm":true,"npmdownloads":true,"david":true,"daviddev":true,"gratipay":"bevry","flattr":"344188/balupton-on-Flattr","paypal":"QB8GQPZAH84N6","bitcoin":"https://coinbase.com/checkouts/9ef59f5479eec1d97d63382c9ebcb93a","wishlist":"http://amzn.com/w/2F8TXKSNAFG4V"},"author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"http://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.4"},"dependencies":{"typechecker":"^2.0.8"},"devDependencies":{"coffee-script":"^1.9.1","joe":"^1.6.0","joe-reporter-console":"^1.2.1","chai":"^2.1.1","eachr":"^2.0.4"},"directories":{"lib":"./out/lib"},"scripts":{"test":"node ./out/test/extract-opts-test.js"},"main":"./out/lib/extract-opts.js","cakeConfiguration":{"COFFEE_SRC_PATH":"src"},"gitHead":"f8173ef3e1130a0008c6d3c1a6cb4d74c3b6d804","_id":"extract-opts@3.0.0","_shasum":"e293942b3c5665085aa02ee34606a9507d4286ff","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"balupton","email":"b@lupton.cc"},"dist":{"shasum":"e293942b3c5665085aa02ee34606a9507d4286ff","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.0.0.tgz","integrity":"sha512-J+mHNPssIutQ1PJJzaltVd25rBEIUpt8WjXTCjTnQktAZOkBe6S1o2dhtjO2fQAiEJHOv3qrWDftWacdKY1MTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDll87r3SnQgFakhfg2Enb2o+4ONFQHjNRYHkmqucdRKwIgLw1Z0f6EozlPSXKNJJI9o15w+kSw3csTpTF2hNV79xg="}]}},"3.0.1":{"title":"Extract Options","name":"extract-opts","version":"3.0.1","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","browsers":true,"keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"travis":true,"npm":true,"npmdownloads":true,"david":true,"daviddev":true,"gratipay":"bevry","flattr":"344188/balupton-on-Flattr","paypal":"QB8GQPZAH84N6","bitcoin":"https://coinbase.com/checkouts/9ef59f5479eec1d97d63382c9ebcb93a","wishlist":"http://amzn.com/w/2F8TXKSNAFG4V"},"author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"sfrdmn","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"http://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.4"},"dependencies":{"typechecker":"^2.0.8"},"devDependencies":{"chai":"^2.1.1","coffee-script":"^1.9.1","eachr":"^2.0.4","joe":"^1.6.0","joe-reporter-console":"^1.2.1","projectz":"^0.5.0"},"directories":{"lib":"./out/lib"},"scripts":{"test":"node ./out/test/extract-opts-test.js"},"main":"./out/lib/extract-opts.js","cakeConfiguration":{"COFFEE_SRC_PATH":"src"},"license":{"type":""},"gitHead":"76592401365aa7c03791a0239b1bfe6b305c4d68","_id":"extract-opts@3.0.1","_shasum":"0dfd896bbce88d382c92363e2c926808ad40bf7d","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"balupton","email":"b@lupton.cc"},"dist":{"shasum":"0dfd896bbce88d382c92363e2c926808ad40bf7d","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.0.1.tgz","integrity":"sha512-TMpx5r8wnRHSCuHVZ9SxyhdYBjfE9YC369D81wb+eMXeMnxSND5z/IA+LcrgnniBFV/t06jbltCGmYs46Bt0Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAUNF0LveK07fSbIvaYFUhxArH/CoQkqW5HIe5v1sni0AiEA8rZh8GpV4gMeqgBojBBH+lg7RJwFC+0jSGcHDv99ktY="}]}},"3.1.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.1.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","browsers":true,"license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","slackin","patreon","gratipay","flattr","paypal","bitcoin","wishlist"],"config":{"patreonUsername":"bevry","gratipayUsername":"bevry","flattrUsername":"balupton","paypalURL":"https://bevry.me/paypal","bitcoinURL":"https://bevry.me/bitcoin","wishlistURL":"https://bevry.me/wishlist","slackinURL":"https://slack.bevry.me"}},"author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+ssh://git@github.com/bevry/extract-opts.git"},"engines":{"node":">=0.12"},"main":"./esnextguardian.js","browser":"./es5/lib/index.js","jspm":{"main":"./es5/lib/index.js"},"dependencies":{"esnextguardian":"^1.2.0","typechecker":"^4.0.1"},"devDependencies":{"assert-helpers":"^4.1.0","babel-cli":"^6.4.0","babel-preset-es2015":"^6.3.13","eachr":"^3.1.0","eslint":"^1.10.3","joe":"^1.6.0","joe-reporter-console":"^1.2.1","projectz":"^1.0.9"},"scripts":{"clean":"node --harmony nakefile.js clean","setup":"node --harmony nakefile.js setup","compile":"node --harmony nakefile.js compile","watch":"node --harmony nakefile.js watch","verify":"node --harmony nakefile.js verify","meta":"node --harmony nakefile.js meta","prepare":"node --harmony nakefile.js prepare","release":"node --harmony nakefile.js release","test":"node --harmony ./es5/test/index-test.js"},"nakeConfiguration":{"BABEL_SRC_PATH":"esnext","ESLINT_SRC_PATH":"esnext","YUIDOC_SRC_PATH":"esnext"},"gitHead":"d1aa3a9b172406cdbca2c8d6f6300545e671c9b1","_id":"extract-opts@3.1.0","_shasum":"99600fb031efc33153749499d350db6ed3f98cfa","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.4.1","_npmUser":{"name":"balupton","email":"b@lupton.cc"},"dist":{"shasum":"99600fb031efc33153749499d350db6ed3f98cfa","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.1.0.tgz","integrity":"sha512-jF0Vu2hokRGLFCAvsBpCPtOGtW+ZSvHVls6Lpn0y/WyZaaeehkB/LZPwHYCcAZdjP0VpX0SlfkneB7HsrlacNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHlsefSmMMftHIsUaefaG3QXn0lNalPMKUu5yGZEw6AwIgbJUG9iHErgDGIREiUaS+FusGXM02froa3on1MVymBYI="}]},"directories":{}},"3.2.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","slackin","patreon","gratipay","flattr","paypal","bitcoin","wishlist"],"config":{"patreonUsername":"bevry","gratipayUsername":"bevry","flattrUsername":"balupton","paypalURL":"https://bevry.me/paypal","bitcoinURL":"https://bevry.me/bitcoin","wishlistURL":"https://bevry.me/wishlist","slackinURL":"https://slack.bevry.me"}},"author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+ssh://git@github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"browsers":true,"main":"./esnextguardian.js","browser":"./es5/lib/index.js","jspm":{"main":"./es5/lib/index.js"},"dependencies":{"eachr":"^3.1.0","esnextguardian":"^1.2.0","typechecker":"^4.0.1"},"devDependencies":{"assert-helpers":"^4.1.0","babel-cli":"^6.4.0","babel-preset-es2015":"^6.3.13","eachr":"^3.1.0","eslint":"^1.10.3","joe":"^1.6.0","joe-reporter-console":"^1.2.1","projectz":"^1.0.9"},"scripts":{"clean":"node --harmony nakefile.js clean","setup":"node --harmony nakefile.js setup","compile":"node --harmony nakefile.js compile","watch":"node --harmony nakefile.js watch","verify":"node --harmony nakefile.js verify","meta":"node --harmony nakefile.js meta","prepare":"node --harmony nakefile.js prepare","release":"node --harmony nakefile.js release","test":"node --harmony ./es5/test/index-test.js"},"nakeConfiguration":{"BABEL_SRC_PATH":"esnext","ESLINT_SRC_PATH":"esnext","YUIDOC_SRC_PATH":"esnext"},"gitHead":"bfb63aed7fe9472149a4b63db7d6192d86792da1","_id":"extract-opts@3.2.0","_shasum":"2274c238f8b162a6893aefb392080275d05e4553","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.4.1","_npmUser":{"name":"balupton","email":"b@lupton.cc"},"dist":{"shasum":"2274c238f8b162a6893aefb392080275d05e4553","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.2.0.tgz","integrity":"sha512-PKXxxa5ouvxo3mvAXy429OFz3LW1qR07me7g+GdZNPGBBb3HOauhNv8qWSqJAzmyvgZEcvthRT0eYTqEZ3Odeg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCeLXbQngAAOZMLJCSsB3FQRR4ijfdTOD+TYc4XOLFarQIhAPrkLKHLcGBUoAaFhSoAFt9v1MQYCm8Tk3bwtRrKuOkB"}]},"directories":{}},"3.3.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.3.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","slackin","patreon","gratipay","flattr","paypal","bitcoin","wishlist"],"config":{"patreonUsername":"bevry","gratipayUsername":"bevry","flattrUsername":"balupton","paypalURL":"https://bevry.me/paypal","bitcoinURL":"https://bevry.me/bitcoin","wishlistURL":"https://bevry.me/wishlist","slackinURL":"https://slack.bevry.me"}},"author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+ssh://git@github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"editions":[{"description":"Source + ESNext + Require","entry":"source/index.js","directory":"source","syntaxes":["javascript","esnext","require","let","const","destructuring","defaults","template strings"]},{"description":"Babel Compiled + ES2015 + Require","entry":"es2015/index.js","directory":"es2015","syntaxes":["javascript","es2015","require"]}],"main":"index.js","browser":"es2015/index.js","dependencies":{"eachr":"^3.2.0","editions":"^1.1.1","typechecker":"^4.3.0"},"devDependencies":{"assert-helpers":"^4.2.0","babel-cli":"^6.9.0","babel-preset-es2015":"^6.9.0","eachr":"^3.2.0","eslint":"^2.10.2","eslint-plugin-babel":"^3.2.0","joe":"^1.6.0","joe-reporter-console":"^1.2.1","projectz":"^1.1.5"},"scripts":{"setup":"npm install","clean":"rm -Rf ./docs ./es2015","compile":"npm run compile:es2015","compile:es2015":"babel ./source --out-dir ./es2015 --presets es2015","meta":"npm run meta:projectz","meta:projectz":"projectz compile","prepare":"npm run compile && npm run test && npm run meta","release":"npm run prepare && npm run release:publish && npm run release:tag && npm run release:push","release:publish":"npm publish","release:tag":"git tag v$npm_package_version -a","release:push":"git push origin master && git push origin --tags","pretest":"npm run test:eslint","test:eslint":"eslint ./source","test":"node --harmony -e \"require('editions').requirePackage(process.cwd(), require, 'test.js')\""},"gitHead":"b84142388fea341238f113a5fce7d6331e047d07","_id":"extract-opts@3.3.0","_shasum":"73d98215fbab90151958ab025decb4f0564c1a3c","_from":".","_npmVersion":"3.8.7","_nodeVersion":"6.0.0","_npmUser":{"name":"balupton","email":"b@lupton.cc"},"dist":{"shasum":"73d98215fbab90151958ab025decb4f0564c1a3c","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.3.0.tgz","integrity":"sha512-yA2jFbf7o3ORkDm6Yc0wxgCmAVmpU5z7nlL5LbvLzfDsNEAfSESEXJTs6Vuf5Dk1kSowxY5ctJqwmO3lg/RPVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFjnXKwRUacmXbCWXWoCQ1xDk+URxMQbu8rHd5s+cWPIAiApdvXQVJVt2rKxQgC4NC1fZBE5ZvVFFNrWwe5GFG5+rw=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/extract-opts-3.3.0.tgz_1464344676353_0.084539013216272"},"directories":{}},"3.3.1":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.3.1","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","slackin","patreon","gratipay","flattr","paypal","bitcoin","wishlist"],"config":{"patreonUsername":"bevry","gratipayUsername":"bevry","flattrUsername":"balupton","paypalURL":"https://bevry.me/paypal","bitcoinURL":"https://bevry.me/bitcoin","wishlistURL":"https://bevry.me/wishlist","slackinURL":"https://slack.bevry.me"}},"author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+ssh://git@github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"editions":[{"description":"Source + ESNext + Require","entry":"source/index.js","directory":"source","syntaxes":["javascript","esnext","require","const","destructuring","defaults"]},{"description":"Babel Compiled + ES2015 + Require","entry":"es2015/index.js","directory":"es2015","syntaxes":["javascript","es2015","require"]}],"main":"index.js","browser":"es2015/index.js","dependencies":{"eachr":"^3.2.0","editions":"^1.1.1","typechecker":"^4.3.0"},"devDependencies":{"assert-helpers":"^4.2.0","babel-cli":"^6.9.0","babel-preset-es2015":"^6.9.0","eachr":"^3.2.0","eslint":"^2.10.2","eslint-plugin-babel":"^3.2.0","joe":"^1.6.0","joe-reporter-console":"^1.2.1","projectz":"^1.1.5"},"scripts":{"setup":"npm install","clean":"rm -Rf ./docs ./es2015","compile":"npm run compile:es2015","compile:es2015":"babel ./source --out-dir ./es2015 --presets es2015","meta":"npm run meta:projectz","meta:projectz":"projectz compile","prepare":"npm run compile && npm run test && npm run meta","release":"npm run prepare && npm run release:publish && npm run release:tag && npm run release:push","release:publish":"npm publish","release:tag":"git tag v$npm_package_version -a","release:push":"git push origin master && git push origin --tags","pretest":"npm run test:eslint","test:eslint":"eslint ./source","test":"node --harmony -e \"require('editions').requirePackage(process.cwd(), require, 'test.js')\""},"gitHead":"87e349bbf92a6f95d1ecc8b064a1631def105dc8","_id":"extract-opts@3.3.1","_shasum":"5abbedc98c0d5202e3278727f9192d7e086c6be1","_from":".","_npmVersion":"3.8.7","_nodeVersion":"6.0.0","_npmUser":{"name":"balupton","email":"b@lupton.cc"},"dist":{"shasum":"5abbedc98c0d5202e3278727f9192d7e086c6be1","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.3.1.tgz","integrity":"sha512-VxpaKiA2ONJcwDeqw7STeHQUFsJUI3wdUNVRfjtBW0fStn/BV2tpOup1y3w7xKiImGppXDPBi2Q9MtlCm5CjjQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQWdE6kwGJuuci0Ofw+8L6wBEBaaKcqzvmKlbvmM4y2AIhAKiMHHruxCIU5y3supLHFSd84jVZMad+xwainitE1Agd"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/extract-opts-3.3.1.tgz_1464344858178_0.15363493445329368"},"directories":{}},"3.4.0-next.1573610226.be6ba5f1d865d3d547350fe3f379251792936ed8":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.4.0-next.1573610226.be6ba5f1d865d3d547350fe3f379251792936ed8","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 13","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"esnext compiled for node.js 0.10 with require for modules","directory":"edition-node-0.10","entry":"index.js","tags":["javascript","require"],"engines":{"node":"0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13","browsers":false}}],"main":"index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^3.2.0","editions":"^2.2.0","typechecker":"^4.9.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"4.10.0","eachr":"^3.2.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.5.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^3.2.0","prettier":"^1.19.1","projectz":"^1.9.0","valid-directory":"^1.0.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.10","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-0.10":"env BABEL_ENV=edition-node-0.10 babel --out-dir ./edition-node-0.10 ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-0.10":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"0.10"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"be6ba5f1d865d3d547350fe3f379251792936ed8","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.js</code> which uses <a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a> to automatically select the correct edition for the consumers environment</li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li>\n<li><code>extract-opts/edition-node-0.10/index.js</code> is esnext compiled for node.js 0.10 with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@3.4.0-next.1573610226.be6ba5f1d865d3d547350fe3f379251792936ed8","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-zNvOI0YNMO4vJ89l3T/dLedgDVjuAq440EwiNez7PY/fH0y2Pid6A40Hv8IY6f902YGwYeDOl75eYIHekg4K1A==","shasum":"3b4b9bcd12e45e2af02ccb89b5b7aae3ac4d7552","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0-next.1573610226.be6ba5f1d865d3d547350fe3f379251792936ed8.tgz","fileCount":10,"unpackedSize":23601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdy2L0CRA9TVsSAnZWagAAMUgP/1306L9CIvVwEVripgfT\nYSsEMTRZARxh7uKv+52pVBRKxFiN4MCig2T34vDBfSXEVECYppKR8WWXw1Ac\nyWLgN7F8M+iIouFOa+RoikuwG5gyOWReXt3i2s5ZOK8PySAA0QJmp4dxCWtT\nUMmGFaqy77SAUqtHRzcXyhJ2iysLYCNzp9k6Pk6ok/cfOqJ8RWZ/V7+YJjzr\ncS6YOhn2PHUPFInyD+8rkrngG26NNt4QTWGPXyX8PdTQUoU3kVCe4es1R+Ut\n9pXD8KVkeqsmx2KSKeeMfTFpgIlAdijpPX6LqvSZPBj1yCG8IWpCCLeyW1Js\nK8lWoRFzfyFblFVhupgP898pKYSXtwwQVt6TvjTMkr7EX86C7Aoog3SzIYDf\nGaUw8agi7JUGD7qJCnAleQ0sgWxLYlG0VAXWJ1xbVLw5Pss85aua2BI+g/Gs\nnabu/QwgCQt7Td6PN6Fpk06m8bNAkDfD66ntgycVH6PEuli/YTsGu5trM8kb\n9VVDs/a7eNPk1+3xefVTbAcmts3IuYbX8XvQ6NBaDSReHFn30ha8LhRH0J2M\n9duX5yWUwYcIKWEhY/GfDn9txuLuFVxrH4d2jK2H7emZdyo1GfHtFdVU2kkH\n8KyTruS5+kUfkpm4uk6p9w7rtGoPru7kgU4GCuaLLfeJ8KwyeCeY/qH4hyOe\nU3rS\r\n=AHRD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaugWnFPuSGKpS0TYYAvv8iuYnRDrgayvvhYldufUe1wIhAM+N6h0UjH8Q9S76Is0qisr4dJDlAIVZS7YVq06uVksr"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_3.4.0-next.1573610226.be6ba5f1d865d3d547350fe3f379251792936ed8_1573610227765_0.5106142650272327"},"_hasShrinkwrap":false},"3.4.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.4.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 13","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"esnext compiled for node.js 0.10 with require for modules","directory":"edition-node-0.10","entry":"index.js","tags":["javascript","require"],"engines":{"node":"0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13","browsers":false}}],"main":"index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^3.2.0","editions":"^2.2.0","typechecker":"^4.9.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"4.10.0","eachr":"^3.2.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.5.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^3.2.0","prettier":"^1.19.1","projectz":"^1.9.0","valid-directory":"^1.0.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.10","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-0.10":"env BABEL_ENV=edition-node-0.10 babel --out-dir ./edition-node-0.10 ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-0.10":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"0.10"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"be6ba5f1d865d3d547350fe3f379251792936ed8","_id":"extract-opts@3.4.0","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-M7Y+1cJDkzOWqvGH5F/V2qgkD6+uitW3NV9rQGl+pLSVuXZ4IDDQgxxMeLPKcWUyfypBWczIILiroSuhXG7Ytg==","shasum":"ab07a7873896a1a7e350f27e2d52645c2ceba9ac","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0.tgz","fileCount":10,"unpackedSize":23544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdy2NQCRA9TVsSAnZWagAAVYYP/2xjB2C+susfaCF/Jbdg\noVmeLFs/4sf6ldHzaYQHskPNTQmAY3Av4J+aBlscW/k7Gc9eLCph8CfD7J7G\nloS7mVTg0loXws39IUDbHfhyKib0drdh7XQCzqdOy9UjPugT6wWVlSnsPSQL\nNHeb6VNRyQqF859G7mmyLb9Q1mpUNLeSUn/DLi3ejH7sNtfyQC+f8ZfdS51j\n2z1yCP+c4f61TIjvuNjL9d5ZykeRbjCQkDYhEmLpm5WShqxEfU6COQDisfMF\n0EybWvkdlEVRePVhyIclbPqm0qJ6opvTf2ODZsK49dXcJd0jTHtf0Tg0IhIZ\nWwdnpj7DT/gQ1aQmltq4oKLsjdUx0TInnTLuKpFnac3SMoaM2UsFrkDPJqJM\nf2bk2e81P6VPV5PmB0SrIr1zTVFRWr1gmurO4su4d9kTEPObxQEU7LMsEwOL\nr6mvfR1k19VhmSJli34g8Pj9P6Cfl1XRfmHmuilWvwXdvelSdGtya9pZ1Yr7\nYNZuBEEu1IGNGGOcBBgNG1fryD3HZwF5a8s6URe1HZawnt6jELcf+puRUyMM\n6wRyghZsDkRmtvLCH1eDzT7LfZ2mWIMw6wcfP5q9H4Qa/M55vPenBPQtr2YP\nNp/BwiNwziRwS8nbLuf8ncr/ED9LI12RCwEk9M7d2o9K2H7353j62CMZkkpt\neP5O\r\n=p6n0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYWG4hLQMq9L3nEwQsdb1TZc3aNLh3vKLJvWS78wR9agIger0KiWuGQ4dFFNJrFX5D2Ci/o6OVBT8T4CO5giVYktc="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_3.4.0_1573610320262_0.5435974217373143"},"_hasShrinkwrap":false},"3.4.0-next.1573687647.64c1ed5a1326b8a4cdd828e478dc28e081765777":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.4.0-next.1573687647.64c1ed5a1326b8a4cdd828e478dc28e081765777","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 13","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"esnext compiled for node.js 0.10 with require for modules","directory":"edition-node-0.10","entry":"index.js","tags":["javascript","require"],"engines":{"node":"0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13","browsers":false}}],"main":"index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^3.2.0","editions":"^2.2.0","typechecker":"^4.9.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"4.10.0","eachr":"^3.2.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.5.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^3.2.0","prettier":"^1.19.1","projectz":"^1.9.0","valid-directory":"^1.0.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.10","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-0.10":"env BABEL_ENV=edition-node-0.10 babel --out-dir ./edition-node-0.10 ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-0.10":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"0.10"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"64c1ed5a1326b8a4cdd828e478dc28e081765777","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.js</code> which uses <a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a> to automatically select the correct edition for the consumers environment</li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li>\n<li><code>extract-opts/edition-node-0.10/index.js</code> is esnext compiled for node.js 0.10 with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@3.4.0-next.1573687647.64c1ed5a1326b8a4cdd828e478dc28e081765777","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-uxEPoSRWE+KbLp055V3Man+qi5Tz5rtJ87aG1qAauQPVI/vistyxsXw/E98L30si9xavcMFxLPIJIbAmZD8/vQ==","shasum":"1dfbd4c1f42f51c19e7add31a28cb6ac93debcba","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0-next.1573687647.64c1ed5a1326b8a4cdd828e478dc28e081765777.tgz","fileCount":10,"unpackedSize":23601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzJFhCRA9TVsSAnZWagAA/u8P/RGua0zDLffUWDuq5/Ul\niUvzPemUsgLTunT4/OazQIa0zBAi9aF/OUjd4i7HDgyiLNxbZCC6z0u8TVA/\nPwPUKkvf4/11w3FcJnHUAZH8ofQPu5Z4I5tkwjnH9BQK932IgnNoPDYTW7KV\nx18SQCQbTNd4T0HL1gxMwalPv2Aoclc+IbdfWvaaIuwrM5ascRlLrSQMIBRH\nwJXEgxWQAetMzRz4WWLUWPNVNDjF7e3CRTb0wu3o/Lf35reCZv5KeUPrkLNU\nxE5hMNIR2gPOqUh9lHmA8S3dvim5f37mg1m9eJCplTxsDNXa7NMz1QbjZvX5\n/yknnTQGz1lWi1xNMWmhNiHgn1ncQD0n4g4E62m/JXsxDFTJGECGofSO/vdG\neiKJRNrlsfu0r2zgGgZHzbcDWr0pNu4OPayz2saZoGfkHbD9FSgqrzhfgHwZ\n221umtMvIw6Gxuu0eI8CuZwoxC8eyFBo8mZFOhuSQhSca43Xc4lgbie5noQ8\nkHMsAw6ZJfr/MSBvVP2cTIzx/K+pJmN8D8obG8/i8JJCTW/JMaxo3Koy1NGR\nJKGBTCjqMJWjXt/Ol7pjVDSMHhmckidhsu0kMgZ6hbnoBX2WW22UZ6D+dThq\nJwZtcbdjSykbrCRB++aABwkOWAzjMQDBFUlgPV+jdN61efJyJDnwOHPlblg6\nMMTo\r\n=4rDh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4TAgbSIFq4MrgGXyqKjcLYER9HbCvoCkfOrEogoSlDwIgQLrlDcPgUNTVeqoBvOwN44Gb1cKc95SmWeKtNcdap88="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_3.4.0-next.1573687647.64c1ed5a1326b8a4cdd828e478dc28e081765777_1573687648838_0.6774635245908789"},"_hasShrinkwrap":false},"3.4.0-next.1573738703.9b68cedee47761550ae2b220938637083933f68e":{"title":"Extract Options & Callback","name":"extract-opts","version":"3.4.0-next.1573738703.9b68cedee47761550ae2b220938637083933f68e","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=0.10"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 13","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"esnext compiled for node.js 0.10 with require for modules","directory":"edition-node-0.10","entry":"index.js","tags":["javascript","require"],"engines":{"node":"0.10 || 0.12 || 4 || 6 || 8 || 10 || 12 || 13","browsers":false}}],"main":"index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^3.2.0","editions":"^2.2.0","typechecker":"^4.9.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"4.10.0","eachr":"^3.2.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.5.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^3.2.0","prettier":"^1.19.1","projectz":"^1.9.0","valid-directory":"^1.0.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-0.10","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-0.10":"env BABEL_ENV=edition-node-0.10 babel --out-dir ./edition-node-0.10 ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-0.10":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"0.10"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"9b68cedee47761550ae2b220938637083933f68e","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.js</code> which uses <a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a> to automatically select the correct edition for the consumers environment</li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li>\n<li><code>extract-opts/edition-node-0.10/index.js</code> is esnext compiled for node.js 0.10 with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@3.4.0-next.1573738703.9b68cedee47761550ae2b220938637083933f68e","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-c+SaW0quLFppg4hdZauvSDR77ccYyWDE3IE8kL3RQVo5CMR/UQCetz3GrizlDhEC3cdvtbQCKqoko41T4BquPg==","shasum":"29831d7efa195b7449885b652c0bcbda228b4d30","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-3.4.0-next.1573738703.9b68cedee47761550ae2b220938637083933f68e.tgz","fileCount":10,"unpackedSize":23601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzVjRCRA9TVsSAnZWagAAMMIP/A4yyxJonISAZhRHvZjq\n/skpSuZvt09cKqcyq8RYgW9JndRJXBFWoAYSYspshMQorUvNb3/Y4QNDc2hr\n8pypFCXC9DjFAdeMj6b3+qLL70WJIROL5W8dlIF/MVg4iCszhodKz6xB72ft\nbG14k2Yxbu8p8RQJqfXDhcfod0uAcC1kFhRadSP+IavNFDY1rSCwe52ZuYfK\ncF8Yxo/Y4z3hkl41Od9ErhTtkZ8J5G+Q9kghbUngUyTg5oAHTVBTSrGu/YB5\ntQKrBhg11K+9LtNF4i8ty3E7S+n7nV4zqj8lkV/wj48kT/JYnoE928eBOwy5\ng/4hGki/QPqT5++9ViRaEINXF6+GtIOTBQoBlsgF7UfmJ5v56yOYw5Add37U\ni9lwN5HaynKdABtIequZ7PQqJY957ynHaH6vij96ojI6m2doqhfNNBgjb2tI\n6EUvzlh+U8Eqp3YP5HTcyJXkSJgHLHQeCkmszj64CXpZG6GKGnxEinJej+te\nrqrm2H84QVvtgLfTyjB9Z31Ip7nek0bKeZZl9uGS7voQ/jTAPIRmKRMXpr4z\nU13qUeSnEQIv+AfG+JiXxa0KAnZ4dXUTnvRQae4k02Sf1pGk2jgvTuwRFi3K\nHZmj/ytXgbWIRstQpSUCFJ943Y9S8rVZU+fwRZbaQv/WWkHS92tS3QHQxMBx\nmjSp\r\n=SV7Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdjKiH2YFQUUyLqqLjz5G+mFCR/Gu+4Xktk9Cjr5p2UAIgawOIf2VfnlOmlmq+bB8x1Lhs/dt+nRdIsNKnKxQQUeY="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_3.4.0-next.1573738703.9b68cedee47761550ae2b220938637083933f68e_1573738705057_0.5967689242390071"},"_hasShrinkwrap":false},"4.0.0-next.1574048582.9b70d87f2dc565aa977f0c56099474b49fa13eed":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.0.0-next.1574048582.9b70d87f2dc565aa977f0c56099474b49fa13eed","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.1.0","typechecker":"^4.10.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"5.4.0","eachr":"^4.1.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.6.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"4.0.0","prettier":"^1.19.1","projectz":"^1.10.0","valid-directory":"^1.1.1"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"9b70d87f2dc565aa977f0c56099474b49fa13eed","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.0.0-next.1574048582.9b70d87f2dc565aa977f0c56099474b49fa13eed","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-5cobfkj53EhI0foy0UgmcrZ+42VXfiHhwAQQJ4vwKK0EOfY1Oo9OxnIRLjm+bD5t98Fir5rpOT3Jjn79p0f/HQ==","shasum":"32bc6d6b5ba940de21543dc582dcb3c0b8cfd8e7","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.0.0-next.1574048582.9b70d87f2dc565aa977f0c56099474b49fa13eed.tgz","fileCount":8,"unpackedSize":21539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0hNICRA9TVsSAnZWagAAmxcP/38a/w2p23X3TbP0i2HG\n470mbEqNTK7j7WAYjLJfRJtshRfZnZ77XO/bo/dxuud5TLI0/e8bjMflfzk6\nW1HjfjJqF0jGsh/YE6UcgXAsaH4hy4c8Xcb0VqFlLMhn9yqFW4o0TRkIIX9V\n9vE4T1Lmek+uK23YNtrm5kgN/fEUALp/QWGffXYeMSjgbWSfT3Zg88RFoOQ1\nd09ehOuJ4mZal0vYyIz0H1Q4ZsE+uXMvE5XC/zK0T03M2Hd7hOJn30/x0NHB\nboPA7cbq2Genu2fkYv9jVeyztrsPLJI+y5WKpqWX5cKHlbX8O1yB8ImrhbEJ\nCpGkcYxtdq4wub6Kmxva5O/PpU1HmnbKGqRnRTC9fV4IjCVBttSZSYzbUbPI\npdDVBa4CmXhQ2dfQhPUJ0HxVqTI2pWAwz7rVeZ+G6EsmchgLQNwGdJNvGhrO\nou9jNADoTcGCgDlnTqZZxBz0nnmbESoZGNi2DZcOC9/r82izZ+8ZP9lPbdKI\n5x0DdLZWnVTTiOW8XH2XKEL47UeEQYZCyoCjHCswftKe/Jj0wMdFCuVE6sOE\nJ31qx7lPriHi86k9ajFsE/Rj7erlX6jr5TSr9B5C9o71qan0vSqiBcz/bzmH\n3c0oIQyjFnb8gx/lOT25uN1RQLi5Gh3V8tgb5+nPcUjMn4wUBl5zp5moOkhN\n+d3s\r\n=oGl2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGM80U01YoEekvkUxWL87dkCNoRzqk1mDyLessyPbQuRAiEAgUvkmX9EwA0vlv3s5vJ5UhigVJMwXe/0Ssjuwefn9yU="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.0.0-next.1574048582.9b70d87f2dc565aa977f0c56099474b49fa13eed_1574048583944_0.9832772711145612"},"_hasShrinkwrap":false},"4.0.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.0.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.1.0","typechecker":"^4.10.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"5.4.0","eachr":"^4.1.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.6.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"4.0.0","prettier":"^1.19.1","projectz":"^1.10.0","valid-directory":"^1.1.1"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"9b70d87f2dc565aa977f0c56099474b49fa13eed","_id":"extract-opts@4.0.0","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-pJ0bU8fESg03OkpCjiBFPQbIM0eXcbH+Dlkiy7oA19QAgKXzW2dDXhyx+3N2jtrQDRxE7vrlkRP8eKpWmONcJw==","shasum":"8b5bd0dfc9fcbc633bedc2bc5850edcb0f5ad276","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.0.0.tgz","fileCount":8,"unpackedSize":21482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd0hNwCRA9TVsSAnZWagAASDcQAJzLgyBtL5Vr61G2NXF1\nUFeMAk5XhJAmFrfvB/iWvJchbhLWKWAbV8MD6umb9OuwTy74wkxKp/vcPk0H\n9DJuegnNX+A/VzJTX/ZwY11+N1eOhcfWPp1IGmKUCkVnO48CfCb/pVq5oWwB\nZMz3k9MMaEPxSW+gR/jbOatt0S72IZ33/usirvHrp5wCqAehA55bFPrpFfrU\n4mb7DTzvBL8J9oJsT0hnwTGiLRqUBLUmP/TgEqgbDX+N9OqdE99weDsBxCoD\nNdTEhnTKx1Ri3hfCMvoHi0pIh6/eLK1z0AuyUOfZ2XVBo83hCQXX7ZU+vB+C\nKC81Jku1YG/1ovPj3PPCfF/Sd8xvg7wcooUCIM9ahXGrYeLrghG4RqtXr+RZ\nrDfdnGECheAjeBOglQVbTKNaQX3X+OJKBLoLNb3Gmf3zZT9/yDAAVsIR8YWc\n/V7z81ySIhd4mG16EUEhaP8/Eg/8gQRYBDiKx31mC/bmZAapmQf5SzA3f7EK\nFoblqEErdS7+TB9YIVjN2qdLEnSc6x+vM4zIO/cIxUxChnnLkXX5adazI9jn\n8N4rKvbqcQUmZ49blKucHd9wUx/7eX/P6bmPVH/kjXphk3XU1nStsIplknjS\nG3W7Zc1dMFgxBtsGZQwEIpn10kOZMtE1DIWS761N6+S3x4OsbQrdSdOie2sK\nXR4o\r\n=b+ee\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCH1YI+/4woaNZvSLvDBN7rgP4bm8oL3mBsLpVdspSx1gIhAOi2/J5fBZ7IDNWBwwnKfePfWASZackXmyNZ97k7RT/c"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.0.0_1574048624545_0.11903507517273626"},"_hasShrinkwrap":false},"4.0.0-next.1574656381.940571fb802b734414b77516ab96a3724971b0fe":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.0.0-next.1574656381.940571fb802b734414b77516ab96a3724971b0fe","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.1.0","typechecker":"^5.0.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"5.4.0","eachr":"^4.1.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.6.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"4.1.0","prettier":"^1.19.1","projectz":"^1.10.0","valid-directory":"^1.1.1"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"940571fb802b734414b77516ab96a3724971b0fe","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.0.0-next.1574656381.940571fb802b734414b77516ab96a3724971b0fe","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-ESwDxrCgnQK3xwbqVAm6jAWzLZMV/3ed3Zpsbpdsl95b3jkWwOY+wN0HxAzZJ9q0MJEmbdVm2vQUH7+q7bxT+A==","shasum":"ed701e91535f0794d53a1fc9224b1d51158624bb","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.0.0-next.1574656381.940571fb802b734414b77516ab96a3724971b0fe.tgz","fileCount":8,"unpackedSize":21538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd21mQCRA9TVsSAnZWagAAo/0P/i5KUpCg159q+LWGWvEd\n3IjVRuRAS+e1ZLq1fzi48v/Rm4nhlvt2PmdgENlSkA5qOoRBLJACj+VLXVv0\ne75u7wlfoiVrxvxs8JWhkqlt/ljF4C78BTPYC9y9YiYRSmZvifASqX4LRqIS\ncb0qYK2r+Y+fors1SOJf5h10W1jV0X4WDkzmUdvEZCcXmsw2GslnbzAhwH9i\nr3QsTYLX9UmuoM38RY3aQ60LBFEISs50sxmuc694F0ongpfQqQGr/HfsXxyC\nEB/PC7fVKqUZIEK3rIhKp7O25xXTRBGjScOwFWE2IuDbsgZsa2jSP4+JvW0J\nZmr3faYmHSrs21PSd51on2qg24qLy3XbMsqL4aurPnT2cehftaSvMwu/j+sL\nP1Xeu37RGQlfQiwT3EsmFyLLSS0JSkvvLS5JUh44yQTavyWoq8dVh0P3cf5J\nJqfJv3DaiglM19GA2UbuRlGx1hqy3ZhWdi4bkFYVqlZhD9B680J9iG70qH96\nphlzaPYAgQsX/lXy+3KMoDThb2QM/A6RE7yeLtqZYdQNr/NxKK1Ltjevm6GD\nUtopbOsb4OaAGD3QFjSot7iUKnsztwdPc8sl5zhcTbOqeGNEBdy0wdnCO3Cw\nmRXNt/QCk0T6S1fel28jPeTJnKeQ2pfAbmQVJ4AVGuNYg4MiuJOahJOc3c6V\nWH6n\r\n=Fp3n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDoZI22u10OmHfEKgbFT1UQNk9GHHLgU99D0aZaABYpwAIgGH4Tauau7fdYS1PMTajr5WA+LbvEUREN3/J9Gj6G+CM="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.0.0-next.1574656381.940571fb802b734414b77516ab96a3724971b0fe_1574656400293_0.9813175130429024"},"_hasShrinkwrap":false},"4.0.0-next.1574660357.da69c777fc96775a1b7563ece70baed7cd5fadd1":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.0.0-next.1574660357.da69c777fc96775a1b7563ece70baed7cd5fadd1","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.1.0","typechecker":"^5.0.0"},"devDependencies":{"@babel/cli":"^7.7.0","@babel/core":"^7.7.2","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.7.1","assert-helpers":"5.4.0","eachr":"^4.1.0","eslint":"^6.6.0","eslint-config-bevry":"^1.2.1","eslint-config-prettier":"^6.6.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"4.1.0","prettier":"^1.19.1","projectz":"^1.10.0","valid-directory":"^1.1.1"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"da69c777fc96775a1b7563ece70baed7cd5fadd1","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.0.0-next.1574660357.da69c777fc96775a1b7563ece70baed7cd5fadd1","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-BmhLzH3seE4/toU49pO0X5zDoF/7e9gUhuZPTmW6a1Zs/4+vnFJXrQw+0tHwk52SatrNRTEWKkwX1RM/ewBYGg==","shasum":"c98fb874008059f43c133540906cffe0ac995f5c","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.0.0-next.1574660357.da69c777fc96775a1b7563ece70baed7cd5fadd1.tgz","fileCount":8,"unpackedSize":21538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd22kHCRA9TVsSAnZWagAA8ogP/i9vG7oqLGyHpCGKrSh0\nqrP/vAC/zR4UpASv54nTeUxwWMrm8HayN8NPq6yf+y8L6WT7xfb3HHrEWwAs\ndgmYL4bQNZYY0lBjAEcdWR02aZ5rpOTM9y4SRi3q+5XpWr2/mTIvL2gPCHt1\nXWIkrXIJVZbu9NT8ii+oPSibtV2piQsCTPM/Kx76qFnqZNpLktF+W26p/SxZ\n8Nd8XAk6oipdz4kxRSVF0nIfh/XVSKRIk48NFybVmlRTWviJdPj07rWREEXG\n3oQniXiJGP4hJ3YizYvefW3xLD8IoVzZkC+zgqJ5jOFtdXX8N94v2A772fkd\nKQzkBBRRCYuY9d3lKcwOC4wE/brbWvNVQ+8tzJBYXRVHTV4Exks2CvokxRQi\naSbQLF/tQcDyYK2xDhCFAgpct2Ks8gq9Hx9Ehzw64WZX0wgOktuKjBH3SC40\non02V+hwP5AGt7UW1ntgQEVRSntv/VUPBaPWBFojQ/MTXWkNZl0XMO551XWN\nlUNFfxQzCb/VpHTPr4FooVR3JWhmfmCa3LJKj3h/Lp4gSXBawmOrC2WePbBi\nn6ROvIQ0KphfRcCjCSn6va7HpTBwD7yAHhOTjajBFgfswEoms1PGbe+bli8y\nRpcxJJVVPhwz6QxP68OINS7DO2SXYH1Tq1P42YHN/S2WsQZux5yPh/56LUzu\nSkIY\r\n=ua7x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEqVUSitt0ox0vm17ZuFwd0AODZf+QjLYZsho0uGr3ikAiATtB6o8T4nn/rqvis6vV0VYItGGfkoaYmbgmQ2wIzo/g=="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.0.0-next.1574660357.da69c777fc96775a1b7563ece70baed7cd5fadd1_1574660359573_0.5907170623831683"},"_hasShrinkwrap":false},"4.1.0-next.1575147230.db6ad70e775308ad833bdaaf561dcbffeba7581d":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.1.0-next.1575147230.db6ad70e775308ad833bdaaf561dcbffeba7581d","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.3.0","typechecker":"^5.0.0"},"devDependencies":{"@babel/cli":"^7.7.4","@babel/core":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.4","assert-helpers":"^5.6.0","eachr":"^4.3.0","eslint":"^6.7.2","eslint-config-bevry":"^2.1.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.1.0","prettier":"^1.19.1","projectz":"^1.12.0","valid-directory":"^1.3.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"db6ad70e775308ad833bdaaf561dcbffeba7581d","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})   // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n# The readFile method as before\n\n# Test it\nreadFile('package.json', {next: log})        # works the standard completion callback name\nreadFile('package.json', {complete: log})    # works with our custom completion callback name\nreadFile('package.json', {done: log})        # works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.1.0-next.1575147230.db6ad70e775308ad833bdaaf561dcbffeba7581d","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-PKGHwDInx7D2bcwJy2yqP+QDeDbMZKdTYBG4coy3G2nPIQbBqpsWcL571QqY7i22PjeJYhMpk3oQVg3mpDRtGQ==","shasum":"67e17afba954efdb323c68875c79a12ccb710160","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.1.0-next.1575147230.db6ad70e775308ad833bdaaf561dcbffeba7581d.tgz","fileCount":8,"unpackedSize":21742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4tbgCRA9TVsSAnZWagAAoGEP/ivTJGxYNf1flxJXSZ9H\nghhkboE3wG80/MEed5GFSR/Ibhv+hzsFed4aCJvynxjEkCeygrqwbpbJtl56\noNPjcaiai3Er457TJViuWWs9ldU4mXdKFrUaIMzUhXhBmFdqyawWpJmFwxhs\nVNEFMKpx0UvLykzRhwqWcjEB6ghjnA9Cu6DpGZlZk8+kOEorsK2o2lmjdB57\nTvlEvh0vsMDrcZ7qqU5YNxW/SJ+G5sPmRAeoBKmIOUX0erQSbsw3RXRtG6wh\n/vUdFbuBz6JpcNT7XA80K/v2l1GFzl22hAbtXsThOtNsUSybdDukYw63aSWn\ncYpGLudeHrZeP7bXeRZbx9TvR7eQWug4x28oY1EEs4PQqWKDGDkaegZZjclB\nqAju05aZLjaRpBjPHQJ/juBBZPwh5HnUyNXlIZqPhE1yCTD4YijDR8EUskZd\nsf5uoHg9fEPOVJAao4LXa070I7uKyEXE9p1b3lppmWOrTFJZxt0BZHrLJJld\n8t1h4EapGlw/QtbiuMDHECoubDKwdx3oK8tDt2jCArW5lRUNCFQFzafKN6HY\ndJHI9mqSZ1q9IsA7ELZ96cdLgSXH5dHHS8B3ZPNPFek/ZeyUti2EBPfYlbBE\n2xEFZ3mwQRRHiZ9Vx07sQj1k5hqMCz8XidYGlGjn2720p5u9Ei4ARusOGq2Y\nqqw0\r\n=0BC6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXSLNE9U/FH+84h8Vu0N/hn/EeAv46bEQFnk5ILhIQzAIhANmjr7TAGgfeJwKxAxxzeerZ3uIncj1oafP5oCTwauRN"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.1.0-next.1575147230.db6ad70e775308ad833bdaaf561dcbffeba7581d_1575147232048_0.7675207590264104"},"_hasShrinkwrap":false},"4.1.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.1.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.3.0","typechecker":"^5.0.0"},"devDependencies":{"@babel/cli":"^7.7.4","@babel/core":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.4","assert-helpers":"^5.6.0","eachr":"^4.3.0","eslint":"^6.7.2","eslint-config-bevry":"^2.1.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.1.0","prettier":"^1.19.1","projectz":"^1.12.0","valid-directory":"^1.3.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"db6ad70e775308ad833bdaaf561dcbffeba7581d","_id":"extract-opts@4.1.0","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-93LuMQ5aOwKAL+bGyTDsaPp4DblEVjbUxrvnML9EppDGQHC+kK+0aVCUmn1aD6lAh19qCuEFgQpmR/E8GQMTOg==","shasum":"d84d07fadbe16c3e09154419700e00d4a8783447","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.1.0.tgz","fileCount":8,"unpackedSize":21685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4tcICRA9TVsSAnZWagAA3lsQAJmNRdJFWokQgtdC1L29\niWajdKrMKBWsNfTCDedo2zXiPWl1HaojzIO/U6g2KiwxH8xHva+5O+/eNCTu\nrXrKMwTaVpM0opifN9Oa3mTw3e/Gd6VJkPo0vvttRGl2VrDpM1/hKeQlxvDp\nPH9t6zdfo3+Da/qp0QjqYJv3l0G8/YW7QICUv07zKh/s3gED2jGWJkrvbkcO\nnLygtnwkn3gMOynFvWE7gmPh/9cTq71AUYm3FI4pM4uxEoL2mxEQJlvab8Mn\nmtCu81feo7PQGJYmjmfA2vRPc+ctYp8zCt3p5o5OBxc8LTMk8aCP030/5osl\nHiUiS4eVLsqg2wNYrZ5QAetJ71tQuH608ZTRKN3aCPoVMdzsKxmVELUMGQc5\nJJtjNHnSXeVtvgbiNOAHV2/ENSBpj1fcMi1GoWVFAwr2lST4g0XkkQJ9UqT7\nBOTA2iFvgj3OZwsrq0cw+xWKCDOWuaVNVtPL42b+UrX34jpb9PdbykRJckIJ\n/gvoiBsVIZzi1l2NX7N0y+I1xxacy1EHsiBKj+y9G8fRlMQqwJLe4dp9MLaj\nVCtYH/o3KmKqObqAhxmk5u+LEKFtlj5eJJQgzpviHZO7S8y0pGYX4gsbgQBf\nlPvXvNiZGIw9UcJFL69LbvIOSgmROwTVuCkO8yzzivl16sai9Z/7iP/lS5kk\nNybe\r\n=Qsfz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo7BxDTnI/mWzU7gTFeSWbRhyPsygJh1dDTJu3RFBzGgIhALh6Ya6t4P1ZrKxG8zauhUE+IcBcwvyhbv0+4kZB+/i/"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.1.0_1575147271605_0.43866583251466906"},"_hasShrinkwrap":false},"4.1.0-next.1575147896.bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.1.0-next.1575147896.bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.3.0","typechecker":"^5.0.0"},"devDependencies":{"@babel/cli":"^7.7.4","@babel/core":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.4","assert-helpers":"^5.6.0","eachr":"^4.3.0","eslint":"^6.7.2","eslint-config-bevry":"^2.1.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.1.0","prettier":"^1.19.1","projectz":"^1.12.0","valid-directory":"^1.3.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})  // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', {next: log})        // works the standard completion callback name\nreadFile('package.json', {complete: log})    // works with our custom completion callback name\nreadFile('package.json', {done: log})        // works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.1.0-next.1575147896.bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-wBIQZNbjMleJQJP9C12ZXs8I2dB83VRGNSXkw/8Izik25J/TpdFclsy05TiYEtltpj3IWR95laBAR5JiZSKOQg==","shasum":"a7450ad768334400c770357b559a364a787f2e46","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.1.0-next.1575147896.bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea.tgz","fileCount":8,"unpackedSize":21746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4tl5CRA9TVsSAnZWagAA1KIP/3hZ8bRsfSTdkW4OPxS+\nQhlMJypTypYC1T6D6PIPaQwEF4enfTnFN1pm47NtANrVWzAjA9pfO2Y1mDLs\nk3h5PjcE0We9sCdTw/l0QPgrGKCpITMEqyL4Y1Uy7OVrkM/iezg/e1tDG6KP\nn/Ub6CBOD39gCrlZQn8kH3YXHw077E8O2lyHQ/LP/Ss7NFc0IrYeNn4fA9/f\n9l+lcjOSJNuSoCyTlnQ5dSmy65zF4xVG61+RFPGMjPA0oSMIBF51SkBIexz8\nP4eIEkot9lTJwBKLAdFAzWYvmYUJB5CJbbr4kQa2nQ/Wu75CJf/4I/eOmB7b\ntEWyucd0ZJf3GUn604XS+zpYnmXu6UNdcY5IwDbyKCwFqatxEmuYzlbaPUZT\nFuojYLdGeUQq4PK2Z/gVzPNEsD9a8GBV4w+I4qXFuvrhbwDaliVWzaCCXWfI\nk5I0Iuy+WFF0yZO/ZQpF98yNaPlk/H/nZEM8SzYscvi5MY0fgEUgCE9YpfpM\nqWQHQqYp+o76nwXZtRkbz4CRFqhqSNL4rg8N/52yKB9tLSod0w3MGAe6xqt0\nykeEzPn22xFYyk1jTYoxNPpEw/0OsLG1WGySRPfc+h+rLpa4n1t/gm4Lkg7A\nRxSkv2AGP2J2NyeWr8hUsOMOzU5hWMB3YzPiwaE7jjGvmNv9OPstK3N1d+nm\n0Zlg\r\n=fNQo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDku9+/vEKTcJA+E7B93JcOjzr/pg5xA9cbz0/ea4J13gIhAM2TV0h4cqkfse+6xVrNtfJ0krS2VPHr0Xt3Uiir0eKO"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.1.0-next.1575147896.bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea_1575147897241_0.8081163414830879"},"_hasShrinkwrap":false},"4.2.0-next.1575171153.743d8176883deec82307aeba7026073241aa62a2":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.2.0-next.1575171153.743d8176883deec82307aeba7026073241aa62a2","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.4.0","typechecker":"^5.1.0"},"devDependencies":{"@babel/cli":"^7.7.4","@babel/core":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.4","assert-helpers":"^5.7.0","eachr":"^4.4.0","eslint":"^6.7.2","eslint-config-bevry":"^2.1.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.2.0","prettier":"^1.19.1","projectz":"^1.13.0","valid-directory":"^1.4.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"743d8176883deec82307aeba7026073241aa62a2","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})  // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', {next: log})        // works the standard completion callback name\nreadFile('package.json', {complete: log})    // works with our custom completion callback name\nreadFile('package.json', {done: log})        // works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.2.0-next.1575171153.743d8176883deec82307aeba7026073241aa62a2","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-hmtyyamPN/DLxJ8gansP18wkHR00JjSDy5QCCnQ+5K34s2iOhX2yFwlF6OfZg4fsDD/16hwCqJDeZoRDirGWcw==","shasum":"4b77529db40d3a9b2318c8e2c79b4237e5a03dc3","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.2.0-next.1575171153.743d8176883deec82307aeba7026073241aa62a2.tgz","fileCount":8,"unpackedSize":21951,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4zRTCRA9TVsSAnZWagAARasP/jpZycabs4kr9cWHoQ24\nE8f6lSP4kMQQaLidYYFAwhKO5QqlwdMrH8Cq2UXD0znrLlxr47R2Z+0eDEuG\nm4kTsmNDf2WdycBBCD6PI/DlXhPhMbJHCwHfduf1d3QehX4QyPGthAkqE3OO\nbhv8S8XH+Ke9hir/3roURN5RpJrznIHpcWC6B+ujFEokWV0OpBtwETXIptH9\nGk5SBZ4v7Yd1/Y7V31Lzksrar71MSlLclNH/J76IZuGoXHvKaMY/gaovfKGb\nyDNUqsdICiQbXNRFbU2aV8NFrm3rWfTXulNKxtsi1PkAsbk4iYXV97tx7wAf\nPv/PwcdbaiTNL4jKl0s9a6yERbtAaIBsSPZCVvxVxZHPXmT6o3bN7Ao1t81j\n731N2WAtIEhj9rGzriz+gkbs8IaF/H3Cj4rd9yYhtnCSDhw9rmy7IQ/1ZuMW\n4rEMlyHf7Pyb4QZuNmnRtQPjqWpoa2MDYPnxoffQgBFZkvg2o6vDiZIS+ox+\nb9RudJ6KwQ9UsKuowNfIU6rFdKhMYv4zDzMXz+z3YEwdtjTfb6AWldW2058w\n4gL5ze5D4ouJfvknXJBA9f78sPT6R5qUmkNTbkRQ/QPXpCsOO/QipR63kPBM\nz5wGfziRO1rLigIDYLeSibSTwMRuuJSjTVAQ4F0DNYngRRv0qhOuri4CTamC\n93gb\r\n=Ggqq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCef126winXh1z2kmEd2mV+mfXWhnKymzU+Bk7x2eibYAIhAMDsqd/63NS2NlpC7Be8Ji7aDcD2Z+O4FcIw4aFPOSf2"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.2.0-next.1575171153.743d8176883deec82307aeba7026073241aa62a2_1575171155036_0.2950509072356682"},"_hasShrinkwrap":false},"4.2.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.4.0","typechecker":"^5.1.0"},"devDependencies":{"@babel/cli":"^7.7.4","@babel/core":"^7.7.4","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.4","assert-helpers":"^5.7.0","eachr":"^4.4.0","eslint":"^6.7.2","eslint-config-bevry":"^2.1.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.2.0","prettier":"^1.19.1","projectz":"^1.13.0","valid-directory":"^1.4.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"743d8176883deec82307aeba7026073241aa62a2","_id":"extract-opts@4.2.0","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-pIYBHaqvWm3qEn0dCqrOXQpC9ee7bVJuhs9RzyAa2wj3E/1/cRs+k/dg75PPbtoc1HmSaBfvvYRxLo9djXDECQ==","shasum":"3c2b0e25d298780c3652d5a2728118a8f73f2fd4","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.2.0.tgz","fileCount":8,"unpackedSize":21894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4zR3CRA9TVsSAnZWagAAhb0P/3Ju58oX+NbQv0FSd948\ntrDWalG+wIt/Y09hPESuH2O5P/wz28aygOgmOXKmwQryMp2S8gYRP77tERWD\nQIRYVOpF8rgchImyJ/oS/2uuMtT7nLHKIZyZNSz5wpkjT8u81YiOZe/sVkY7\nTsy7bbSWZPDB4zTaVgVD9gN7pxuJwD3FhtzlAS4GwzhIsLpWDo8W0aWkYdNJ\nZSyTEa6PHd3gZR7oDpzpkat83clhzNgyCWFp01PZ3vp1VSzLTEdELlUHXT6D\nPpP1pNE6S9QepnhOop/q7PDTbosYvczK4C4+d6EouKyOn09EvAgNAqDhQUHX\nfndlP/qNlEvlceCeqwWvERUoRgIdCCAIDdvc9T3eianNHhlTXppuEPJuGAuS\nATxXjbRGle1L9TVoQB4aWFXfViDVOsnFIQI5DnVUU9eETRBAbnO/jB4lzXiN\n19GsyRQuc3TWtf0/qUSq4+EMmt5xpiioPSOBMMQSzPPheWBWl22gHFAv+ZCP\nZX3VhQeYlbj+MTypv/liQKj+5zFToCU0uxd8B0pmEaKm8WZ76qzavWXT1lor\n0gffVHZomtph508e+VdrYuyJEAc4LUnpjwxhIq6umX/x8O5iBsFq/thvVxPw\nBxfFofwlxgCmS23Q3N2YdpCFJnHRxTMEiiwMnBiZs5iBFik9TaUAIOv+e+YU\n/0NB\r\n=IC/k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEmExtLd8y5PMx+hbD9x7CmNF4sh4ZGjW/hWEASlqMMQIhAMHTrf0B+ZOKj5zFcH8lLZ0GrlxRtgadYH9E71UCUbX7"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.2.0_1575171190590_0.7219326301844884"},"_hasShrinkwrap":false},"4.3.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.3.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","githubsponsors","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubSponsorsUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"type":"commonjs","main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.5.0","typechecker":"^6.2.0"},"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.6","assert-helpers":"^5.8.0","eachr":"^4.5.0","eslint":"^6.7.2","eslint-config-bevry":"^2.2.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.3.0","prettier":"^1.19.1","projectz":"^1.15.0","valid-directory":"^1.5.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":false}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"fd190477a5f30c8517ff89b49ad5b2e74ffcb812","_id":"extract-opts@4.3.0","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-Dmssi1tgKJkQsVmbP7TgW/kbdc42SAsNf6h9ClweP+dS7O24YYMTXsNwPelxhx0LF15npiWwY5ahKtyQiNgxWA==","shasum":"ee0a797249abb77e449bdaaba66ebeff4775505e","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.3.0.tgz","fileCount":8,"unpackedSize":22731,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7gh0CRA9TVsSAnZWagAAyOUP/3lvR3o+pmtdCo6t6a2n\nIiEOIKOZKMr5wkQW4F1IDBAvYH/pvUfdAbUG7dHVyPajzbYO+peO/EF/mrCQ\nLs97u7ZOk8+ehBQH+7duH1ZQfEXihpx5SX9iU7q6gBWK4r9zk/OqQQGUzSQG\n9RQ9tk53rpvcVJHtrCo6DaAvdB2L0HaL77Xmei4VnUjZ0tMAvqZ4IbJWp5cu\njid5eDbYyIQx7ECMMFi2riy1o/vBOnQO+NHUFwEpZFUnfBoqMckBpE6Ql4Ip\nm+FXE62an1VBYAWmLK+7AAJixVLDVXUgBUXobUe2izaSw8T62V3MpbDH8Gcq\nrEddSsIpzFP4Q1tUwzrn2+dvKNmunYVOybLelNv/zM8/Kgz1jmZ2MVbsua5x\ngzGOofA+bBRfKyIyarOj9/9xtBvAmLApK1IDp0x+cotMwzwbGoBn188ZprYC\ndSvdQRip8GpA4sJj1Yi79y9MkAqLxb/TGLRiBd63Vi8gfO9DUY/orX4kEb3Y\naUlQpd3Ej5KXMtbovnGEpWeC+UcEKLrbaTZ+7jl0HoqKgvUXj3knzaFFsqId\nE21kP2tbe8lzl8AFWVTimf6W8pZwCU7rOk7AkzdpSwyc3wmtpsxrSiTCN0Sh\nY56dirEQrl1Jx27w/vCoXLTSYqn/at9oiDdT+OR/SpYj7REaTakvmYeSJFZK\nlsxz\r\n=bhL4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGft5UHYpzmyIlrxR1/djqj+3KHGYz8eDUGK7FCDGHk+AiEAvd7ydYdGIU3qh4yB6HAFVMfnRVH4ia3vpyLL4ZDiFsM="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.3.0_1575880820352_0.9521000689749255"},"_hasShrinkwrap":false},"4.3.0-next.1575880873.fd190477a5f30c8517ff89b49ad5b2e74ffcb812":{"title":"Extract Options & Callback","name":"extract-opts","version":"4.3.0-next.1575880873.fd190477a5f30c8517ff89b49ad5b2e74ffcb812","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"MIT","keywords":["opts","options","cb","callback","next","flow","args","optional","arguments","extract"],"badges":{"list":["travisci","npmversion","npmdownloads","daviddm","daviddmdev","---","githubsponsors","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubSponsorsUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","travisTLD":"com"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"email":"b@lupton.cc","name":"balupton"},{"email":"us@bevry.me","name":"bevryme"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"http://balupton.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"http://seanfridman.com"},{"name":"Matt Bierner","url":"http://mattbierner.com"},{"name":"dependabot-preview[bot]","url":"http://github.com/apps/dependabot-preview"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=8"},"editions":[{"description":"esnext source code with require for modules","directory":"source","entry":"index.js","tags":["javascript","esnext","require"],"engines":{"node":"8 || 10 || 12","browsers":false}},{"description":"esnext compiled for browsers with require for modules","directory":"edition-browsers","entry":"index.js","tags":["javascript","require"],"engines":{"node":false,"browsers":"defaults"}}],"type":"commonjs","main":"source/index.js","browser":"edition-browsers/index.js","dependencies":{"eachr":"^4.5.0","typechecker":"^6.2.0"},"devDependencies":{"@babel/cli":"^7.7.5","@babel/core":"^7.7.5","@babel/plugin-proposal-object-rest-spread":"^7.7.4","@babel/preset-env":"^7.7.6","assert-helpers":"^5.8.0","eachr":"^4.5.0","eslint":"^6.7.2","eslint-config-bevry":"^2.2.0","eslint-config-prettier":"^6.7.0","eslint-plugin-babel":"^5.3.0","eslint-plugin-prettier":"^3.1.1","kava":"^4.3.0","prettier":"^1.19.1","projectz":"^1.15.0","valid-directory":"^1.5.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:deploy":"echo no need for this project","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep v$npm_package_version || (echo add a changelog entry for v$npm_package_version && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin master && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (echo 'proper changelog entry not found' && exit -1) && git tag v$npm_package_version -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"npx valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write ./source/**","test":"node ./source/test.js"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":"defaults","modules":false}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"gitHead":"fd190477a5f30c8517ff89b49ad5b2e74ffcb812","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-travisci\"><a href=\"http://travis-ci.com/bevry/extract-opts\" title=\"Check this project's build status on TravisCI\"><img src=\"https://img.shields.io/travis/com/bevry/extract-opts/master.svg\" alt=\"Travis CI Build Status\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<span class=\"badge-daviddm\"><a href=\"https://david-dm.org/bevry/extract-opts\" title=\"View the status of this project's dependencies on DavidDM\"><img src=\"https://img.shields.io/david/bevry/extract-opts.svg\" alt=\"Dependency Status\" /></a></span>\n<span class=\"badge-daviddmdev\"><a href=\"https://david-dm.org/bevry/extract-opts#info=devDependencies\" title=\"View the status of this project's development dependencies on DavidDM\"><img src=\"https://img.shields.io/david/dev/bevry/extract-opts.svg\" alt=\"Dev Dependency Status\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Require: <code>require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/source/index.js</code></li>\n<li><code>extract-opts/source/index.js</code> is esnext source code with require for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is esnext compiled for browsers with require for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n## Usage\n\n``` javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile (filename, opts, next) {\n\t// Extract options and callback\n\tvar args = extractOptsAndCallback(opts, next)\n\topts = args[0]\n\tnext = args[1]\n\n\t// Forward for simplicities sake\n\trequire('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log)          // works with no options\nreadFile('package.json', null, log)    // works with null options\nreadFile('package.json', {next: log})  // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n``` javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback (opts, next, config) {\n\tif ( config == null )  config = {}\n\tif ( config.completionCallbackNames == null )  config.completionCallbackNames = ['next', 'complete', 'done']\n\treturn require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', {next: log})        // works the standard completion callback name\nreadFile('package.json', {complete: log})    // works with our custom completion callback name\nreadFile('package.json', {done: log})        // works with our custom completion callback name\n```\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"http://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://seanfridman.com\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://mattbierner.com\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"http://github.com/apps/dependabot-preview\">dependabot-preview[bot]</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=dependabot-preview[bot]\" title=\"View the GitHub contributions of dependabot-preview[bot] on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"http://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/MIT.html\">MIT License</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","_id":"extract-opts@4.3.0-next.1575880873.fd190477a5f30c8517ff89b49ad5b2e74ffcb812","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-8ma6J0r4vQtl4+aIYUOVRvdTtgo3Smsb0FQb39zMtx9ORRzwqyMQ6hduuzvtY9QYRtxwkLSVcl+T8vfQmuvy6Q==","shasum":"3b5ad874f4dc8f0e99ff2ee315388385f38f12cf","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-4.3.0-next.1575880873.fd190477a5f30c8517ff89b49ad5b2e74ffcb812.tgz","fileCount":8,"unpackedSize":22788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7girCRA9TVsSAnZWagAAT8IQAISjR9GII8NQLC7EOWTB\nbeJT9OWgizMZOD0wGQlK6hP13tTC7h2mk17brh04iwERnvq1azMXOYYOL+N9\nM8bb59uc0Kow84BBryQwC8HkHAWhKXZ1FztwNi4wCf7ZSOgr8FvU7jFPVNQf\nj175E/zXY97byj1HkO6gU+gE6zq+V9ffQDtYEvhxEIauLNdYDzM2jYfWRaLC\neGiIM7t9+t293a6d1m9mcNmx5p7103o3vZMDRSdM+gHlRHXW9zF3BErxme7k\n14VsabvVoYCzKahV1QbgN3O88WaB7pjbediF0LnMsgu3e63l+ug1/ZIkwvOr\naRJ98NWSEGu08JiL8x8SvPwLTqd9kCs8psFAlJRltJ7/ZTTj97impEiJ3RuV\nwLaDm1bpCRUFQF8wRHSaBNIU67gqO+eO4CHvGowsnfj9H+yDVu8ZSZT7DZdy\nEt4H/h32i8V5iCH4ORJn2xmdMLr6SMyifM6pa7VSyzMKKPRpJ5CrJPLYSfWe\nasZYuFsIjBAlRn6HUtHjqT6Ewbs0OLglzuU2W+5MWDc2pIfCuZz1WMzTHkUq\n/0zAFXyGE0TTHLBbYBFCm6TFUzrgDn2urXuK077XEZeoRtsno4R5pGQq6JI7\nf2OCaW0ICNj7Km1dExXUohvhJ46NdTSXWOwC9ZMI3yxdn0e09nCrzUKTBgaJ\ndWEq\r\n=D5Ji\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACVGaVhZwIMHSR0KXpX+LlxQvyux/gPFaEJ2nj11i8FAiEA9Jnq/9pMBY3brhmMjgDUGWa++IYkmZ6AYBL1OqWHMMo="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_4.3.0-next.1575880873.fd190477a5f30c8517ff89b49ad5b2e74ffcb812_1575880874854_0.8488767635467007"},"_hasShrinkwrap":false},"5.0.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.0.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"},{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.0.0","editions":"^6.10.0","typechecker":"^8.0.0"},"devDependencies":{"@babel/cli":"^7.23.0","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.1.0","eslint":"^8.53.0","eslint-config-bevry":"^3.29.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"3.2.0","prettier":"^3.0.3","projectz":"^2.23.0","valid-directory":"^4.1.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.0.0","gitHead":"6d2f92b55d986b61055f7df0cbc1c597bb5278cf","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-jo4mhBR/eR5So9U7aXTeNTtsJVFTQp3tSap0SkD6gjZ3OzIIN48SEsF7QeItya+gsxOmtiI+CJeGcksrsyzu8Q==","shasum":"9f665ded56de6141cba447bfc6cb610e1243bba9","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.0.0.tgz","fileCount":9,"unpackedSize":32824,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC/MW4dkAgZPYFiMqzD7Friz7a4KhIyhmmcgikhw+fjPAiAe1coEE3p0Tzgzj0yEAn5WYU+DcNx5Bm9Bu9NeFSuz9A=="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.0.0_1699829963386_0.21428932357414254"},"_hasShrinkwrap":false},"5.0.0-next.1699829970.6d2f92b55d986b61055f7df0cbc1c597bb5278cf":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.0.0-next.1699829970.6d2f92b55d986b61055f7df0cbc1c597bb5278cf","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"},{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.0.0","editions":"^6.10.0","typechecker":"^8.0.0"},"devDependencies":{"@babel/cli":"^7.23.0","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.1.0","eslint":"^8.53.0","eslint-config-bevry":"^3.29.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"3.2.0","prettier":"^3.0.3","projectz":"^2.23.0","valid-directory":"^4.1.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.0.0-next.1699829970.6d2f92b55d986b61055f7df0cbc1c597bb5278cf","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/balupton\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.0.0'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/balupton\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"6d2f92b55d986b61055f7df0cbc1c597bb5278cf","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-YO2P5AXi0omf8d1v+fx9uTHY6C59cN598fOUDrwCu5YSo84zwOoT93qes6rDXmvXYuY0h84FzWHG0ue00c/RjQ==","shasum":"c896afbc81da1f61bd22d31f0b1cf21faf41cdc0","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.0.0-next.1699829970.6d2f92b55d986b61055f7df0cbc1c597bb5278cf.tgz","fileCount":9,"unpackedSize":32882,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOkGmoEo/jD2D35OjUoG+TmqUh7j1Tmazsfp+dwkLpfQIgSRi6JTxOwbwI0BLHQXlLdxq0K2i7jHLiZzMVt5h2HGM="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.0.0-next.1699829970.6d2f92b55d986b61055f7df0cbc1c597bb5278cf_1699829971786_0.9276674183148077"},"_hasShrinkwrap":false},"5.1.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.1.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"},{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.1.0","editions":"^6.11.0","typechecker":"^8.1.0"},"devDependencies":{"@babel/cli":"^7.23.0","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.2.0","eslint":"^8.53.0","eslint-config-bevry":"^3.29.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.0.0","prettier":"^3.1.0","projectz":"^2.23.0","valid-directory":"^4.1.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.1.0","gitHead":"6cec1f9f0fac1ede06b63b9c19eafb17fe657411","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-Z1dZDOcwWTeeBpcVKIWXpsRMHBmk0xkD8/gZn3gmF+W3HnakA96wKeqvuASvcqvTVtDO3pxSP3jGuPnSBmpVUA==","shasum":"ab42613b5bedc3bf8b372c15d46b400123450396","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.1.0.tgz","fileCount":9,"unpackedSize":32853,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtHVBpbk8sDGmD5J7vRpYnB9Z3uxNlLpIlpq2V3ZvBkwIgWmqQSvv9FoNQ43hXS2hpBXkO4qrKfo18YHxQrM0VgzM="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.1.0_1699876892850_0.5307179319257429"},"_hasShrinkwrap":false},"5.1.0-next.1699876894.6cec1f9f0fac1ede06b63b9c19eafb17fe657411":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.1.0-next.1699876894.6cec1f9f0fac1ede06b63b9c19eafb17fe657411","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"balupton","email":"b@lupton.cc"},{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.1.0","editions":"^6.11.0","typechecker":"^8.1.0"},"devDependencies":{"@babel/cli":"^7.23.0","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.2.0","eslint":"^8.53.0","eslint-config-bevry":"^3.29.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.0.0","prettier":"^3.1.0","projectz":"^2.23.0","valid-directory":"^4.1.0"},"scripts":{"our:clean":"rm -Rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.1.0-next.1699876894.6cec1f9f0fac1ede06b63b9c19eafb17fe657411","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/balupton\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.1.0'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/balupton\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"6cec1f9f0fac1ede06b63b9c19eafb17fe657411","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-Rq5U4d/XeORKYzbeA71WBvEYyQnkRLoSP5Bj+JT6bMaFg0cAsYn3RhzmF6YHe/65uMPJdIRWsuPvtBMpUe4rew==","shasum":"c35c2961a441dd8d1670313d3f355f3a4464f00d","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.1.0-next.1699876894.6cec1f9f0fac1ede06b63b9c19eafb17fe657411.tgz","fileCount":9,"unpackedSize":32911,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEzWdt+fjWyTQbotOVsN06pl1OZvL/2jQS07Grkn/BGJAiEA0CaDcWJAQcoNRX4PxO5XqkZdojpVnJKSGf1WoJnp8jI="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.1.0-next.1699876894.6cec1f9f0fac1ede06b63b9c19eafb17fe657411_1699876897923_0.3713368013967293"},"_hasShrinkwrap":false},"5.2.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.3.0","editions":"^6.13.0","typechecker":"^8.2.0"},"devDependencies":{"@babel/cli":"^7.23.0","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.4.0","eslint":"^8.53.0","eslint-config-bevry":"^4.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.1.0","prettier":"^3.1.0","projectz":"^3.0.0","valid-directory":"^4.2.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.2.0","gitHead":"f314f4d82abe279471515de91ca4486a0b935a00","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-aaJT0KtC/Qf0fDgRE+NAzgQrogNPfSNjesxA/mNdF8p9J0qmvQMTa3brZZTbfQzPanH43/lnSG6PtBUuMgy1gA==","shasum":"3be7c40fbd3681b7841a7f050c9a27fa4161b0a5","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.2.0.tgz","fileCount":10,"unpackedSize":34572,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/Z2DwUUA3QU7LUsr3mg0/r/zWaW3QsxgpvBjEuVxY4AiA67LAI2QUDTtGO4ozaVSD4dlTYXS9iPv3NFBcQ5J+DLQ=="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.2.0_1699978519879_0.5227321198219619"},"_hasShrinkwrap":false},"5.2.0-next.1699978532.f314f4d82abe279471515de91ca4486a0b935a00":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.2.0-next.1699978532.f314f4d82abe279471515de91ca4486a0b935a00","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","flattr","liberapay","buymeacoffee","opencollective","crypto","paypal","wishlist"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"balupton","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.3.0","editions":"^6.13.0","typechecker":"^8.2.0"},"devDependencies":{"@babel/cli":"^7.23.0","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.4.0","eslint":"^8.53.0","eslint-config-bevry":"^4.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.1.0","prettier":"^3.1.0","projectz":"^3.0.0","valid-directory":"^4.2.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.2.0-next.1699978532.f314f4d82abe279471515de91ca4486a0b935a00","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/balupton\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.2.0'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/balupton\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-flattr\"><a href=\"https://flattr.com/profile/balupton\" title=\"Donate to this project using Flattr\"><img src=\"https://img.shields.io/badge/flattr-donate-yellow.svg\" alt=\"Flattr donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<span class=\"badge-wishlist\"><a href=\"https://bevry.me/wishlist\" title=\"Buy an item on our wishlist for us\"><img src=\"https://img.shields.io/badge/wishlist-donate-yellow.svg\" alt=\"Wishlist browse button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"f314f4d82abe279471515de91ca4486a0b935a00","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-OAsPb+f6gdddXQtLTWvD6OhF4SNn3OM+15Q4N69QtlnxCQnj0PLqTxAikfN3+2vI7rnaml8+2UeMCH+zhJ2+kA==","shasum":"f368b601d39b0a932070c6942bdaaa57cf162c2d","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.2.0-next.1699978532.f314f4d82abe279471515de91ca4486a0b935a00.tgz","fileCount":10,"unpackedSize":34630,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkNmzel9bY2eAlZ4xZkf6FNvDMgDs5Pzvu3M6hyAZp+wIgHdGWeB6ZKphAUGSo0a8XJ2JnXEdwVnknZx0e1mrWxKU="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.2.0-next.1699978532.f314f4d82abe279471515de91ca4486a0b935a00_1699978533886_0.6731219262541992"},"_hasShrinkwrap":false},"5.3.0-next.1700543634.b359719a87658aa052b2ec820d0f3f77550907cf":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.3.0-next.1700543634.b359719a87658aa052b2ec820d0f3f77550907cf","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.5.0","editions":"^6.13.0","typechecker":"^8.5.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.5.0","eslint":"^8.54.0","eslint-config-bevry":"^5.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.2.0","prettier":"^3.1.0","projectz":"^3.2.0","valid-directory":"^4.4.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.3.0-next.1700543634.b359719a87658aa052b2ec820d0f3f77550907cf","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.3.0'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"b359719a87658aa052b2ec820d0f3f77550907cf","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-ELzaGmaCL+oPznzP9e3bYT0elZgY8vaqljtDbcnHgZnbxWwbsYqJTNBPihb3zm1TT6VcFd4T/K9dwZAl3qyK5w==","shasum":"afb3179ebe44bdd9206d820c6eb011a74efacd19","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.3.0-next.1700543634.b359719a87658aa052b2ec820d0f3f77550907cf.tgz","fileCount":10,"unpackedSize":34368,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHaRCytG2aKMDldH10ai7N6L28HbVAzFAUUZr+EGqtGAiEAo/zvxT2RReOdeFxV5VNfyU98hDAMwTCPzHAM4DaxyUQ="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.3.0-next.1700543634.b359719a87658aa052b2ec820d0f3f77550907cf_1700543635691_0.4051037083803415"},"_hasShrinkwrap":false},"5.3.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.3.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.5.0","editions":"^6.13.0","typechecker":"^8.5.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.5.0","eslint":"^8.54.0","eslint-config-bevry":"^5.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.2.0","prettier":"^3.1.0","projectz":"^3.2.0","valid-directory":"^4.4.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.3.0","gitHead":"b359719a87658aa052b2ec820d0f3f77550907cf","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-bpahJj1yS2hQzO6VaBySxz8kAipKFM3mygAhpHfaojrrlwhCWfWgWeUmMEwuzqugKaOfDh63uvhvB4YmT8eT5A==","shasum":"2de70f1121733d51b8d2a15766eb56f76334078e","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.3.0.tgz","fileCount":10,"unpackedSize":34310,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFxRGG6uOdrmHHN8SKt/Z2pQvd9D5+pfMNmPCOUFUhJQIhAI14nF/PYKBZtS3cM3ozeTtzlmS55pkvWQCMMnZIaGGP"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.3.0_1700543647080_0.3145082458060269"},"_hasShrinkwrap":false},"5.4.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.4.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.6.0","editions":"^6.16.0","typechecker":"^8.5.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.6.0","eslint":"^8.54.0","eslint-config-bevry":"^5.2.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.3.0","prettier":"^3.1.0","projectz":"^3.3.0","valid-directory":"^4.5.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.4.0","gitHead":"08f98e6531b14e213278591f1e22a8639187faed","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-tTA++0tB5UNdiLORAYv0zSq6oMyNvj3poIxvVPrc69HBd3pVHvXcmLwskbPLDCTV0o2+jo03C1wwEaeNx2ulaQ==","shasum":"587e5dbd8c0562efdd19c44fd89d74b8e2e9387a","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.4.0.tgz","fileCount":10,"unpackedSize":34310,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCDddJf8RqFicXK69j140pcsJqeATetZ1iCaaBXi5T+TgIgXY11l/Te4GmKWaoAu1UCwlnSe9K/cgelefpUcPKS8po="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.4.0_1700839953314_0.9025499105271673"},"_hasShrinkwrap":false},"5.4.0-next.1700839953.08f98e6531b14e213278591f1e22a8639187faed":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.4.0-next.1700839953.08f98e6531b14e213278591f1e22a8639187faed","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^6.6.0","editions":"^6.16.0","typechecker":"^8.5.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.3","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.3","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.6.0","eslint":"^8.54.0","eslint-config-bevry":"^5.2.0","eslint-config-prettier":"^9.0.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.3.0","prettier":"^3.1.0","projectz":"^3.3.0","valid-directory":"^4.5.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.4.0-next.1700839953.08f98e6531b14e213278591f1e22a8639187faed","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.4.0'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"08f98e6531b14e213278591f1e22a8639187faed","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-rioP8ciJS3+xKttYF/JvOGvPd2fQIBQQsyoXHay9K7fLXJRysznfielBbn8cZEDK6ieFJEbg/nGkCbjlcKbLvw==","shasum":"0405f83d4becd6e25c0b1a64308934b7701aa22d","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.4.0-next.1700839953.08f98e6531b14e213278591f1e22a8639187faed.tgz","fileCount":10,"unpackedSize":34368,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqjOxJ5P/hrz7QXKWL4500I3DlKHx67+51CrDMd1oL4AIgCI777zQQRSyfGcUJz/N6luWZwk+imZkurgLHIwjL3hk="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.4.0-next.1700839953.08f98e6531b14e213278591f1e22a8639187faed_1700840017251_0.9158272507498493"},"_hasShrinkwrap":false},"5.4.1-next.1701782418.5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.4.1-next.1701782418.5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.1.0","editions":"^6.18.0","typechecker":"^9.1.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.5","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.5","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.8.0","eslint":"^8.55.0","eslint-config-bevry":"^5.2.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.4.0","prettier":"^3.1.0","projectz":"^3.4.0","valid-directory":"^4.6.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.4.1-next.1701782418.5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.4.1'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-M73gPE4JnfD9NpahKamk2tm/TXPubD+4zbtyRC2XQnILBwAL/3Z7xGvsrw4vmx7pTQKsNMncrGKS68dtQRd1gg==","shasum":"45bf3b35826a9e31584457811675ffed5092bb60","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.4.1-next.1701782418.5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca.tgz","fileCount":10,"unpackedSize":34392,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFOAIJmmcVzcu6f88g28c++aPDls9qd1pIIrRDqImKPRAiBilcEFBPUXuwH9aA+wBtnNir4kUd2gQojwxOWA+8z6Vw=="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.4.1-next.1701782418.5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca_1701782420114_0.27452449465208173"},"_hasShrinkwrap":false},"5.4.1":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.4.1","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.1.0","editions":"^6.18.0","typechecker":"^9.1.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.5","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.5","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.8.0","eslint":"^8.55.0","eslint-config-bevry":"^5.2.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.4.0","prettier":"^3.1.0","projectz":"^3.4.0","valid-directory":"^4.6.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.4.1","gitHead":"5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-LOJdAT82Y3+/sfbAZkw1kwYt8OW6sRyx4UmeoZUtgfvdNZZMWk9VZj1EaCa31wNrutmBiIPfHLwCwTtGXVqaRA==","shasum":"2466998a6b11c6fee2c139d86564f167d73d4079","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.4.1.tgz","fileCount":10,"unpackedSize":34334,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAGHjHKeoTQrQoryogkxwmiLq5tQJmiY+F1VEnf6LUrMAiEAlzoXWEuOZQzO38WBn9r1iYc9z/P1TjioGsr/J1K1yHg="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.4.1_1701782430133_0.4420049406597155"},"_hasShrinkwrap":false},"5.5.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.5.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.2.0","editions":"^6.19.0","typechecker":"^9.2.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.5","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.5","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.9.0","eslint":"^8.55.0","eslint-config-bevry":"^5.2.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.4.0","prettier":"^3.1.0","projectz":"^3.4.0","valid-directory":"^4.6.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.5.0","gitHead":"7caa0a307aa16d8b2c1224a87aeedc77cd25b843","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-idbs8/KK4ZFB+Q5m5mCK8rMOOfwtEvfn/60q3zN8HzIlvn/kGdcqV+IbAqqJwtYPm1TvbbSJZxcyOYEXvn2zuA==","shasum":"6db4befb5b153c462749c70bfc81c19fc30d6c8c","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.5.0.tgz","fileCount":10,"unpackedSize":34383,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHU1sxdOKsbRxZtNA7I4mOGGlzZiZw0hjAwAZAX49A70AiEAkw4xhJAKkpehVAJuDesFrzDg+XnpwmuaPg0JccJZmrs="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.5.0_1701793870550_0.5496439445564678"},"_hasShrinkwrap":false},"5.5.0-next.1701793904.7caa0a307aa16d8b2c1224a87aeedc77cd25b843":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.5.0-next.1701793904.7caa0a307aa16d8b2c1224a87aeedc77cd25b843","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","license":"Artistic-2.0","keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"funding":"https://bevry.me/fund","author":{"name":"2013+ Bevry Pty Ltd","email":"us@bevry.me","url":"http://bevry.me"},"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://github.com/balupton"},{"name":"Matt Bierner","url":"https://github.com/mjbvz"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://github.com/sfrdmn"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.2.0","editions":"^6.19.0","typechecker":"^9.2.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.5","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.5","@bevry/update-contributors":"^1.23.0","assert-helpers":"^11.9.0","eslint":"^8.55.0","eslint-config-bevry":"^5.2.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.0.1","kava":"^7.4.0","prettier":"^3.1.0","projectz":"^3.4.0","valid-directory":"^4.6.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:contributors && npm run our:meta:projectz","our:meta:contributors":"update-contributors","our:meta:projectz":"projectz compile","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:directory && npm run our:verify:eslint && npm run our:verify:prettier","our:verify:directory":"valid-directory","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"esmodules":false,"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"_id":"extract-opts@5.5.0-next.1701793904.7caa0a307aa16d8b2c1224a87aeedc77cd25b843","readme":"<!-- TITLE/ -->\n\n<h1>Extract Options & Callback</h1>\n\n<!-- /TITLE -->\n\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n<h2>Install</h2>\n\n<a href=\"https://npmjs.com\" title=\"npm is a package manager for javascript\"><h3>npm</h3></a>\n<ul>\n<li>Install: <code>npm install --save extract-opts</code></li>\n<li>Import: <code>import * as pkg from ('extract-opts')</code></li>\n<li>Require: <code>const pkg = require('extract-opts')</code></li>\n</ul>\n\n<a href=\"https://jspm.io\" title=\"Native ES Modules CDN\"><h3>jspm</h3></a>\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.5.0'\n</script>\n```\n\n<h3><a href=\"https://editions.bevry.me\" title=\"Editions are the best way to produce and consume packages you care about.\">Editions</a></h3>\n\n<p>This package is published with the following editions:</p>\n\n<ul><li><code>extract-opts</code> aliases <code>extract-opts/index.cjs</code> which uses the <a href=\"https://github.com/bevry/editions\" title=\"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\">Editions Autoloader</a> to automatically select the correct edition for the consumer's environment</li>\n<li><code>extract-opts/source/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> source code for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-browsers/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for web browsers with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li>\n<li><code>extract-opts/edition-node-4/index.js</code> is <a href=\"https://en.wikipedia.org/wiki/ECMAScript#ES.Next\" title=\"ECMAScript Next\">ESNext</a> compiled for <a href=\"https://nodejs.org\" title=\"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\">Node.js</a> 4 with <a href=\"https://nodejs.org/dist/latest-v5.x/docs/api/modules.html\" title=\"Node/CJS Modules\">Require</a> for modules</li></ul>\n\n<!-- /INSTALL -->\n\n\n<!-- HISTORY/ -->\n\n<h2>History</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/HISTORY.md#files\">Discover the release history by heading on over to the <code>HISTORY.md</code> file.</a>\n\n<!-- /HISTORY -->\n\n\n<!-- CONTRIBUTE/ -->\n\n<h2>Contribute</h2>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /CONTRIBUTE -->\n\n\n<!-- BACKERS/ -->\n\n<h2>Backers</h2>\n\n<h3>Maintainers</h3>\n\nThese amazing people are maintaining this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<h3>Sponsors</h3>\n\nNo sponsors yet! Will you be the first?\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n<h3>Contributors</h3>\n\nThese amazing people have contributed code to this project:\n\n<ul><li><a href=\"https://balupton.com\">Benjamin Lupton</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=balupton\" title=\"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/mjbvz\">Matt Bierner</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=mjbvz\" title=\"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\">view contributions</a></li>\n<li><a href=\"https://github.com/sfrdmn\">Sean Fridman</a> — <a href=\"https://github.com/bevry/extract-opts/commits?author=sfrdmn\" title=\"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\">view contributions</a></li></ul>\n\n<a href=\"https://github.com/bevry/extract-opts/blob/master/CONTRIBUTING.md#files\">Discover how you can contribute by heading on over to the <code>CONTRIBUTING.md</code> file.</a>\n\n<!-- /BACKERS -->\n\n\n<!-- LICENSE/ -->\n\n<h2>License</h2>\n\nUnless stated otherwise all works are:\n\n<ul><li>Copyright &copy; 2013+ <a href=\"http://bevry.me\">Bevry Pty Ltd</a></li>\n<li>Copyright &copy; 2011+ <a href=\"https://balupton.com\">Benjamin Lupton</a></li></ul>\n\nand licensed under:\n\n<ul><li><a href=\"http://spdx.org/licenses/Artistic-2.0.html\">Artistic License 2.0</a></li></ul>\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"7caa0a307aa16d8b2c1224a87aeedc77cd25b843","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-+UOxZW1EFOyTezQJ8JhD2haD1GpTf+95iDGWH8+Shjs+ybJQvRLm0cOGcrOr0zSEvuk46TfSD8dDD/Vix3Dv4A==","shasum":"2c4927f459103e808c9bb9b419a4ac9a09b84283","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.5.0-next.1701793904.7caa0a307aa16d8b2c1224a87aeedc77cd25b843.tgz","fileCount":10,"unpackedSize":34441,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvq5sfwazz0jzaWF0I59YKpexRV2zsROZCEu48WeKxgAIhAKp/t6EwAU9J9hfX1VWsrvpZ8PLtLzNZRHoLXVX04dvM"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.5.0-next.1701793904.7caa0a307aa16d8b2c1224a87aeedc77cd25b843_1701793905257_0.9537149852399871"},"_hasShrinkwrap":false},"5.6.0-next.1703664900.44a63877e208b45a2ce523406ae291905a938a7e":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.6.0-next.1703664900.44a63877e208b45a2ce523406ae291905a938a7e","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io/) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io/) (https://github.com/codecov)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://bevry.me) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.3.0","editions":"^6.20.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.6","assert-helpers":"^11.11.0","eslint":"^8.56.0","eslint-config-bevry":"^5.3.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.5.0","prettier":"^3.1.1","projectz":"^4.0.0","valid-directory":"^4.7.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.6.0-next.1703664900.44a63877e208b45a2ce523406ae291905a938a7e","readme":"<!-- TITLE/ -->\n\n# Extract Options & Callback\n\n<!-- /TITLE -->\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n## Install\n\n### [npm](https://npmjs.com \"npm is a package manager for javascript\")\n\n-   Install: `npm install --save extract-opts`\n-   Import: `import * as pkg from ('extract-opts')`\n-   Require: `const pkg = require('extract-opts')`\n\n### [jspm](https://jspm.io \"Native ES Modules CDN\")\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.6.0'\n</script>\n```\n### [Editions](https://editions.bevry.me \"Editions are the best way to produce and consume packages you care about.\")\n\nThis package is published with the following editions:\n-   `extract-opts` aliases `extract-opts/index.cjs` which uses the [Editions Autoloader](https://github.com/bevry/editions \"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\") to automatically select the correct edition for the consumer's environment\n-   `extract-opts/source/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") source code for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-browsers/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for web browsers with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-node-4/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n\n<!-- /INSTALL -->\n\n<!-- HISTORY/ -->\n\n## History\n\n[Discover the release history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/HISTORY.md#files)\n\n<!-- /HISTORY -->\n\n<!-- BACKERS/ -->\n\n## Backers\n\n### Code\n\n[Discover how to contribute via the `CONTRIBUTING.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/CONTRIBUTING.md#files)\n\n#### Authors\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Maintainers\n\n-   [Benjamin Lupton](https://github.com/balupton) — Accelerating collaborative wisdom.\n\n#### Contributors\n\n-   [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/extract-opts/commits?author=balupton \"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\")\n-   [Matt Bierner](https://github.com/mjbvz) — [view contributions](https://github.com/bevry/extract-opts/commits?author=mjbvz \"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\")\n-   [Sean Fridman](https://github.com/sfrdmn) — [view contributions](https://github.com/bevry/extract-opts/commits?author=sfrdmn \"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\")\n\n### Finances\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n#### Sponsors\n\n-   [Andrew Nesbitt](https://nesbitt.io) — Software engineer and researcher\n-   [Balsa](https://balsa.com) — We're Balsa, and we're building tools for builders.\n-   [Codecov](https://codecov.io/) — Empower developers with tools to improve code quality and testing.\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Sentry](https://sentry.io) — Real-time crash reporting for your web apps, mobile apps, and games.\n-   [Syntax](https://syntax.fm) — Syntax Podcast\n\n#### Donors\n\n-   [Andrew Nesbitt](https://nesbitt.io)\n-   [Balsa](https://balsa.com)\n-   [Chad](https://opencollective.com/chad8)\n-   [Codecov](https://codecov.io/)\n-   [entroniq](https://gitlab.com/entroniq)\n-   [Jean-Luc Geering](https://github.com/jlgeering)\n-   [Michael Duane Mooring](https://bevry.me)\n-   [Mohammed Shah](https://github.com/smashah)\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Sentry](https://sentry.io)\n-   [ServieJS](https://github.com/serviejs)\n-   [Skunk Team](https://skunk.team)\n-   [Syntax](https://syntax.fm)\n\n<!-- /BACKERS -->\n\n<!-- LICENSE/ -->\n\n## License\n\nUnless stated otherwise all works are:\n\n-   Copyright &copy; [Benjamin Lupton](https://balupton.com)\n\nand licensed under:\n\n-   [Artistic License 2.0](http://spdx.org/licenses/Artistic-2.0.html)\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"44a63877e208b45a2ce523406ae291905a938a7e","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-gFgOdt50TFlhajODsXQChZ1lEo2yeCoX3KtEybLaUZjIQMQc2/CPWaMT/kYhE+9I4VNFgSROuc62WxbumkdtTQ==","shasum":"d2080b599fd46f3496694aaccecaa808d6f5700b","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.6.0-next.1703664900.44a63877e208b45a2ce523406ae291905a938a7e.tgz","fileCount":10,"unpackedSize":36416,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOU6nctZG2x3p2u57FNuhruwRwEe59omntHW27T1LCVgIhAIZjHvQBHMI3EcNAEvwspl6ULNyBkWfDqolIj13FansR"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.6.0-next.1703664900.44a63877e208b45a2ce523406ae291905a938a7e_1703664902539_0.7193563088368684"},"_hasShrinkwrap":false},"5.6.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.6.0","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io/) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io/) (https://github.com/codecov)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://bevry.me) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.3.0","editions":"^6.20.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.6","assert-helpers":"^11.11.0","eslint":"^8.56.0","eslint-config-bevry":"^5.3.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.5.0","prettier":"^3.1.1","projectz":"^4.0.0","valid-directory":"^4.7.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.6.0","gitHead":"44a63877e208b45a2ce523406ae291905a938a7e","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-OdXTaXcIa9lAzOEOc5/TqEwSp3tT21pRAWDEOUhyUve69R+zMqwVS7n6k0uWI3pdGejIursf6FF2v0EkQEONiQ==","shasum":"67e837a22652166a70ea8846e9cc3bdccd778718","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.6.0.tgz","fileCount":10,"unpackedSize":36359,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJDfz3t+rpHFthcd0dNzw9rCww2F9DXbQvt3oIuCjNsAiB9BMY8S8/ZwpXaHHDKhrSzTZmwO0VGGvmIYpodGnMe2A=="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.6.0_1703664913412_0.38329221700582505"},"_hasShrinkwrap":false},"5.7.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.7.0","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Armen Mkrtchian (https://mogoni.dev) (https://github.com/Armenm)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov)","dr.dimitru (https://veliovgroup.com) (https://github.com/dr-dimitru)","Elliott Ditman (https://elliottditman.com) (https://github.com/elliottditman)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","GitHub (https://github.com/about) (https://github.com/github)","Hunter Beast (https://cryptoquick.com) (https://github.com/cryptoquick)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://mdm.cc) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Michael Harry Scepaniak <mhs1.sys@gmail.com> (https://michaelscepaniak.com) (https://github.com/hispanic)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Mr. Henry <hello@mrhenry.be> (https://mrhenry.be) (https://github.com/mrhenry)","Nermal <nermalcat69@skiff.com> (https://arjunaditya.vercel.app) (https://github.com/nermalcat69)","Pleo (https://www.pleo.io) (https://github.com/pleo-io)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Robert de Forest <guitar.robot@gmail.com> (https://github.com/rdeforest)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)","WriterJohnBuck (https://github.com/WriterJohnBuck)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.4.0","editions":"^6.21.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.6","assert-helpers":"^11.12.0","eslint":"^8.56.0","eslint-config-bevry":"^5.3.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.6.0","prettier":"^3.1.1","projectz":"^4.1.1","valid-directory":"^4.8.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz --offline","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.7.0","gitHead":"333a8b3a3dade1b5fe6eb418376bb4631456e319","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-M+hJgbpQFV1nBmACynVt2D09zqd+OsTauN3k+VHCGe/Ze2KxmZoerGgIbMiHDl6spktiTMwzI9VmSiXNStoj4Q==","shasum":"8b4cac0a76beb46c09a3f40f4783bf8c79fae459","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.7.0.tgz","fileCount":10,"unpackedSize":37740,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHbI7i9ITYpPxJBxiiUubnRYSxQa3r+PMG+RieIcklkAiEA7gSUFnGVvLfD0SR8poTbw9obs/6QqgNGjeVSFHqKQ9Y="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.7.0_1703780694939_0.5011997932912937"},"_hasShrinkwrap":false},"5.7.0-next.1703780663.333a8b3a3dade1b5fe6eb418376bb4631456e319":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.7.0-next.1703780663.333a8b3a3dade1b5fe6eb418376bb4631456e319","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Armen Mkrtchian (https://mogoni.dev) (https://github.com/Armenm)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov)","dr.dimitru (https://veliovgroup.com) (https://github.com/dr-dimitru)","Elliott Ditman (https://elliottditman.com) (https://github.com/elliottditman)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","GitHub (https://github.com/about) (https://github.com/github)","Hunter Beast (https://cryptoquick.com) (https://github.com/cryptoquick)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://mdm.cc) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Michael Harry Scepaniak <mhs1.sys@gmail.com> (https://michaelscepaniak.com) (https://github.com/hispanic)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Mr. Henry <hello@mrhenry.be> (https://mrhenry.be) (https://github.com/mrhenry)","Nermal <nermalcat69@skiff.com> (https://arjunaditya.vercel.app) (https://github.com/nermalcat69)","Pleo (https://www.pleo.io) (https://github.com/pleo-io)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Robert de Forest <guitar.robot@gmail.com> (https://github.com/rdeforest)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)","WriterJohnBuck (https://github.com/WriterJohnBuck)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.4.0","editions":"^6.21.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.6","assert-helpers":"^11.12.0","eslint":"^8.56.0","eslint-config-bevry":"^5.3.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.6.0","prettier":"^3.1.1","projectz":"^4.1.1","valid-directory":"^4.8.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz --offline","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.7.0-next.1703780663.333a8b3a3dade1b5fe6eb418376bb4631456e319","readme":"<!-- TITLE/ -->\n\n# Extract Options & Callback\n\n<!-- /TITLE -->\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n## Install\n\n### [npm](https://npmjs.com \"npm is a package manager for javascript\")\n\n-   Install: `npm install --save extract-opts`\n-   Import: `import * as pkg from ('extract-opts')`\n-   Require: `const pkg = require('extract-opts')`\n\n### [jspm](https://jspm.io \"Native ES Modules CDN\")\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.7.0'\n</script>\n```\n### [Editions](https://editions.bevry.me \"Editions are the best way to produce and consume packages you care about.\")\n\nThis package is published with the following editions:\n-   `extract-opts` aliases `extract-opts/index.cjs` which uses the [Editions Autoloader](https://github.com/bevry/editions \"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\") to automatically select the correct edition for the consumer's environment\n-   `extract-opts/source/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") source code for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-browsers/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for web browsers with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-node-4/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n\n<!-- /INSTALL -->\n\n<!-- HISTORY/ -->\n\n## History\n\n[Discover the release history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/HISTORY.md#files)\n\n<!-- /HISTORY -->\n\n<!-- BACKERS/ -->\n\n## Backers\n\n### Code\n\n[Discover how to contribute via the `CONTRIBUTING.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/CONTRIBUTING.md#files)\n\n#### Authors\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Maintainers\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Contributors\n\n-   [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/extract-opts/commits?author=balupton \"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\")\n-   [Matt Bierner](https://github.com/mjbvz) — [view contributions](https://github.com/bevry/extract-opts/commits?author=mjbvz \"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\")\n-   [Sean Fridman](https://github.com/sfrdmn) — [view contributions](https://github.com/bevry/extract-opts/commits?author=sfrdmn \"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\")\n\n### Finances\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n#### Sponsors\n\n-   [Andrew Nesbitt](https://nesbitt.io) — Software engineer and researcher\n-   [Balsa](https://balsa.com) — We're Balsa, and we're building tools for builders.\n-   [Codecov](https://codecov.io) — Empower developers with tools to improve code quality and testing.\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Sentry](https://sentry.io) — Real-time crash reporting for your web apps, mobile apps, and games.\n-   [Syntax](https://syntax.fm) — Syntax Podcast\n\n#### Donors\n\n-   [Andrew Nesbitt](https://nesbitt.io)\n-   [Armen Mkrtchian](https://mogoni.dev)\n-   [Balsa](https://balsa.com)\n-   [Chad](https://opencollective.com/chad8)\n-   [Codecov](https://codecov.io)\n-   [dr.dimitru](https://veliovgroup.com)\n-   [Elliott Ditman](https://elliottditman.com)\n-   [entroniq](https://gitlab.com/entroniq)\n-   [GitHub](https://github.com/about)\n-   [Hunter Beast](https://cryptoquick.com)\n-   [Jean-Luc Geering](https://github.com/jlgeering)\n-   [Michael Duane Mooring](https://mdm.cc)\n-   [Michael Harry Scepaniak](https://michaelscepaniak.com)\n-   [Mohammed Shah](https://github.com/smashah)\n-   [Mr. Henry](https://mrhenry.be)\n-   [Nermal](https://arjunaditya.vercel.app)\n-   [Pleo](https://www.pleo.io)\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Robert de Forest](https://github.com/rdeforest)\n-   [Sentry](https://sentry.io)\n-   [ServieJS](https://github.com/serviejs)\n-   [Skunk Team](https://skunk.team)\n-   [Syntax](https://syntax.fm)\n-   [WriterJohnBuck](https://github.com/WriterJohnBuck)\n\n<!-- /BACKERS -->\n\n<!-- LICENSE/ -->\n\n## License\n\nUnless stated otherwise all works are:\n\n-   Copyright &copy; [Benjamin Lupton](https://balupton.com)\n\nand licensed under:\n\n-   [Artistic License 2.0](http://spdx.org/licenses/Artistic-2.0.html)\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"333a8b3a3dade1b5fe6eb418376bb4631456e319","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-lnKzH1cjLnSlgWPEGYqNr57Ae4q6LiTllMW/YSmKVz56veeuqAbAYnmNCmZ+j/DqoacA6C4lk3mZX9dsLQBQmw==","shasum":"0b92d904749187883810b0478eb52ad63a4a2137","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.7.0-next.1703780663.333a8b3a3dade1b5fe6eb418376bb4631456e319.tgz","fileCount":10,"unpackedSize":37797,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOtThlEJve5LjCtNWpyRHE+gInP2PQoEeNcx7LPZmpwQIhAJfYVFpPJ/9xIiOSUVvy4MQ3lIjFLbfBLL0GGc7AqbOI"}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.7.0-next.1703780663.333a8b3a3dade1b5fe6eb418376bb4631456e319_1703780721884_0.4564492612936417"},"_hasShrinkwrap":false},"5.8.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.8.0","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Armen Mkrtchian (https://mogoni.dev) (https://github.com/Armenm)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov)","dr.dimitru (https://veliovgroup.com) (https://github.com/dr-dimitru)","Elliott Ditman (https://elliottditman.com) (https://github.com/elliottditman)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","GitHub (https://github.com/about) (https://github.com/github)","Hunter Beast (https://cryptoquick.com) (https://github.com/cryptoquick)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://mdm.cc) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Michael Harry Scepaniak <mhs1.sys@gmail.com> (https://michaelscepaniak.com) (https://github.com/hispanic)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Mr. Henry <hello@mrhenry.be> (https://mrhenry.be) (https://github.com/mrhenry)","Nermal <nermalcat69@skiff.com> (https://arjunaditya.vercel.app) (https://github.com/nermalcat69)","Pleo (https://www.pleo.io) (https://github.com/pleo-io)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Robert de Forest <guitar.robot@gmail.com> (https://github.com/rdeforest)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)","WriterJohnBuck (https://github.com/WriterJohnBuck)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.4.0","editions":"^6.21.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.6","assert-helpers":"^11.12.0","eslint":"^8.56.0","eslint-config-bevry":"^5.3.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.7.0","prettier":"^3.1.1","projectz":"^4.1.1","valid-directory":"^4.8.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz --offline","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.8.0","gitHead":"0f53e729d2f0ef0391a7e2241d5b3554c38d2d42","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-kaF77bAeRRDW0mtfP1VhNdapxeJaDO82hG+mkfE8ZJh/FFJKDuCUwzgnLwdoI3PqAro6WBwNOhhieDDuwwzsng==","shasum":"d4778b130c53f7385290044cb1857d88412ea078","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.8.0.tgz","fileCount":10,"unpackedSize":37740,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYMecG2PyPhAYoNx/FrPzlPIX0GmSuJqyiLYl0K2jvcgIgEBfpbajkV3uOuw8is9mIfOL8TERaXh+z1Txd1WelsQ4="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.8.0_1703831887581_0.24005294696763668"},"_hasShrinkwrap":false},"5.8.0-next.1703831852.0f53e729d2f0ef0391a7e2241d5b3554c38d2d42":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.8.0-next.1703831852.0f53e729d2f0ef0391a7e2241d5b3554c38d2d42","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Armen Mkrtchian (https://mogoni.dev) (https://github.com/Armenm)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov)","dr.dimitru (https://veliovgroup.com) (https://github.com/dr-dimitru)","Elliott Ditman (https://elliottditman.com) (https://github.com/elliottditman)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","GitHub (https://github.com/about) (https://github.com/github)","Hunter Beast (https://cryptoquick.com) (https://github.com/cryptoquick)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://mdm.cc) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Michael Harry Scepaniak <mhs1.sys@gmail.com> (https://michaelscepaniak.com) (https://github.com/hispanic)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Mr. Henry <hello@mrhenry.be> (https://mrhenry.be) (https://github.com/mrhenry)","Nermal <nermalcat69@skiff.com> (https://arjunaditya.vercel.app) (https://github.com/nermalcat69)","Pleo (https://www.pleo.io) (https://github.com/pleo-io)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Robert de Forest <guitar.robot@gmail.com> (https://github.com/rdeforest)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)","WriterJohnBuck (https://github.com/WriterJohnBuck)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.4.0","editions":"^6.21.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.23.6","assert-helpers":"^11.12.0","eslint":"^8.56.0","eslint-config-bevry":"^5.3.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.7.0","prettier":"^3.1.1","projectz":"^4.1.1","valid-directory":"^4.8.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz --offline","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/proposal-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.8.0-next.1703831852.0f53e729d2f0ef0391a7e2241d5b3554c38d2d42","readme":"<!-- TITLE/ -->\n\n# Extract Options & Callback\n\n<!-- /TITLE -->\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n## Install\n\n### [npm](https://npmjs.com \"npm is a package manager for javascript\")\n\n-   Install: `npm install --save extract-opts`\n-   Import: `import * as pkg from ('extract-opts')`\n-   Require: `const pkg = require('extract-opts')`\n\n### [jspm](https://jspm.io \"Native ES Modules CDN\")\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.8.0'\n</script>\n```\n### [Editions](https://editions.bevry.me \"Editions are the best way to produce and consume packages you care about.\")\n\nThis package is published with the following editions:\n-   `extract-opts` aliases `extract-opts/index.cjs` which uses the [Editions Autoloader](https://github.com/bevry/editions \"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\") to automatically select the correct edition for the consumer's environment\n-   `extract-opts/source/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") source code for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-browsers/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for web browsers with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-node-4/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n\n<!-- /INSTALL -->\n\n<!-- HISTORY/ -->\n\n## History\n\n[Discover the release history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/HISTORY.md#files)\n\n<!-- /HISTORY -->\n\n<!-- BACKERS/ -->\n\n## Backers\n\n### Code\n\n[Discover how to contribute via the `CONTRIBUTING.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/CONTRIBUTING.md#files)\n\n#### Authors\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Maintainers\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Contributors\n\n-   [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/extract-opts/commits?author=balupton \"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\")\n-   [Matt Bierner](https://github.com/mjbvz) — [view contributions](https://github.com/bevry/extract-opts/commits?author=mjbvz \"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\")\n-   [Sean Fridman](https://github.com/sfrdmn) — [view contributions](https://github.com/bevry/extract-opts/commits?author=sfrdmn \"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\")\n\n### Finances\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n#### Sponsors\n\n-   [Andrew Nesbitt](https://nesbitt.io) — Software engineer and researcher\n-   [Balsa](https://balsa.com) — We're Balsa, and we're building tools for builders.\n-   [Codecov](https://codecov.io) — Empower developers with tools to improve code quality and testing.\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Sentry](https://sentry.io) — Real-time crash reporting for your web apps, mobile apps, and games.\n-   [Syntax](https://syntax.fm) — Syntax Podcast\n\n#### Donors\n\n-   [Andrew Nesbitt](https://nesbitt.io)\n-   [Armen Mkrtchian](https://mogoni.dev)\n-   [Balsa](https://balsa.com)\n-   [Chad](https://opencollective.com/chad8)\n-   [Codecov](https://codecov.io)\n-   [dr.dimitru](https://veliovgroup.com)\n-   [Elliott Ditman](https://elliottditman.com)\n-   [entroniq](https://gitlab.com/entroniq)\n-   [GitHub](https://github.com/about)\n-   [Hunter Beast](https://cryptoquick.com)\n-   [Jean-Luc Geering](https://github.com/jlgeering)\n-   [Michael Duane Mooring](https://mdm.cc)\n-   [Michael Harry Scepaniak](https://michaelscepaniak.com)\n-   [Mohammed Shah](https://github.com/smashah)\n-   [Mr. Henry](https://mrhenry.be)\n-   [Nermal](https://arjunaditya.vercel.app)\n-   [Pleo](https://www.pleo.io)\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Robert de Forest](https://github.com/rdeforest)\n-   [Sentry](https://sentry.io)\n-   [ServieJS](https://github.com/serviejs)\n-   [Skunk Team](https://skunk.team)\n-   [Syntax](https://syntax.fm)\n-   [WriterJohnBuck](https://github.com/WriterJohnBuck)\n\n<!-- /BACKERS -->\n\n<!-- LICENSE/ -->\n\n## License\n\nUnless stated otherwise all works are:\n\n-   Copyright &copy; [Benjamin Lupton](https://balupton.com)\n\nand licensed under:\n\n-   [Artistic License 2.0](http://spdx.org/licenses/Artistic-2.0.html)\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"0f53e729d2f0ef0391a7e2241d5b3554c38d2d42","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-9WmtJN4ELXeCk4NYW2hIWXPKC0b0MZcP2GmgzpWddJWdAIlehst3f9zPWfLagknWBou+lJuwP4MG+IOuYKpQ5Q==","shasum":"b8c6381ade3e5b729e40868a368e5a7d0f8035b8","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.8.0-next.1703831852.0f53e729d2f0ef0391a7e2241d5b3554c38d2d42.tgz","fileCount":10,"unpackedSize":37797,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2HRUU7JkmN6B+uPu9NGXa7ffssuB4kD6D/HSH393cXgIgITn5ofPQcPWNg4s1FgYq9G8E8uFqxLaXjLYE90cebYY="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.8.0-next.1703831852.0f53e729d2f0ef0391a7e2241d5b3554c38d2d42_1703831912299_0.01332745858229667"},"_hasShrinkwrap":false},"5.9.0":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.9.0","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Armen Mkrtchian (https://mogoni.dev) (https://github.com/Armenm)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov)","dr.dimitru (https://veliovgroup.com) (https://github.com/dr-dimitru)","Elliott Ditman (https://elliottditman.com) (https://github.com/elliottditman)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","GitHub (https://github.com/about) (https://github.com/github)","Hunter Beast (https://cryptoquick.com) (https://github.com/cryptoquick)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://mdm.cc) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Michael Harry Scepaniak <mhs1.sys@gmail.com> (https://michaelscepaniak.com) (https://github.com/hispanic)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Mr. Henry <hello@mrhenry.be> (https://mrhenry.be) (https://github.com/mrhenry)","Nermal <nermalcat69@skiff.com> (https://arjunaditya.vercel.app) (https://github.com/nermalcat69)","Pleo (https://pleo.io) (https://github.com/pleo-io)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Robert de Forest <guitar.robot@gmail.com> (https://github.com/rdeforest)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)","WriterJohnBuck (https://github.com/WriterJohnBuck)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.4.0","editions":"^6.21.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.7","@babel/plugin-transform-object-rest-spread":"^7.23.4","@babel/preset-env":"^7.23.7","assert-helpers":"^11.12.0","eslint":"^8.56.0","eslint-config-bevry":"^5.5.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.8.0","prettier":"^3.1.1","projectz":"^4.2.0","valid-directory":"^4.9.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz --offline","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/plugin-transform-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/plugin-transform-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.9.0","gitHead":"5bd0f119cd9a664e5e7424e155a561d720e12151","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-UN5d1xtD3cQQNmE2OVsP5ij1dCDgpK5bmOxyMEXc8KaZ/YLCV0ge/RxBGG3fy7KVnxsjekwutzmzRVInQtaB4Q==","shasum":"85f3c2a638c1ddad2ede80c064614f8cbb21cbc8","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.9.0.tgz","fileCount":10,"unpackedSize":37762,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/EyRyalZSvDTRW/dYWfXBeOFo6Wnxrg0HE4M/RqytBwIgVaZwMDYF4HNC5kCGrmJnwWQY0ST9VXqFnogIW+WerkE="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.9.0_1704166727222_0.8447385591760581"},"_hasShrinkwrap":false},"5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151":{"title":"Extract Options & Callback","name":"extract-opts","version":"5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151","license":"Artistic-2.0","description":"Extract the options and callback from a function's arguments easily","homepage":"https://github.com/bevry/extract-opts","funding":"https://bevry.me/fund","repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"badges":{"list":["githubworkflow","npmversion","npmdownloads","---","githubsponsors","thanksdev","patreon","liberapay","buymeacoffee","opencollective","crypto","paypal","---","discord","twitch"],"config":{"githubWorkflow":"bevry","githubSponsorsUsername":"balupton","thanksdevGithubUsername":"bevry","buymeacoffeeUsername":"balupton","cryptoURL":"https://bevry.me/crypto","flattrUsername":"balupton","liberapayUsername":"bevry","opencollectiveUsername":"bevry","patreonUsername":"bevry","paypalURL":"https://bevry.me/paypal","wishlistURL":"https://bevry.me/wishlist","discordServerID":"1147436445783560193","discordServerInvite":"nQuXddV7VP","twitchUsername":"balupton","githubUsername":"bevry","githubRepository":"extract-opts","githubSlug":"bevry/extract-opts","npmPackageName":"extract-opts"}},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"authors":["Benjamin Lupton <b@lupton.cc> (https://balupton.com) (https://github.com/balupton): Accelerating collaborative wisdom."],"maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"sponsors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew): Software engineer and researcher","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa): We're Balsa, and we're building tools for builders.","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov): Empower developers with tools to improve code quality and testing.","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Sentry (https://sentry.io) (https://github.com/getsentry): Real-time crash reporting for your web apps, mobile apps, and games.","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm): Syntax Podcast"],"donors":["Andrew Nesbitt (https://nesbitt.io) (https://github.com/andrew)","Armen Mkrtchian (https://mogoni.dev) (https://github.com/Armenm)","Balsa <hello@balsa.com> (https://balsa.com) (https://github.com/balsa)","Chad (https://opencollective.com/chad8)","Codecov <hello-codecov@sentry.io> (https://codecov.io) (https://github.com/codecov)","dr.dimitru (https://veliovgroup.com) (https://github.com/dr-dimitru)","Elliott Ditman (https://elliottditman.com) (https://github.com/elliottditman)","entroniq (https://gitlab.com/entroniq) (https://thanks.dev/d/gl/entroniq)","GitHub (https://github.com/about) (https://github.com/github)","Hunter Beast (https://cryptoquick.com) (https://github.com/cryptoquick)","Jean-Luc Geering (https://github.com/jlgeering) (https://opencollective.com/jlgeering) (https://twitter.com/jlgeering)","Michael Duane Mooring (https://mdm.cc) (https://github.com/mikeumus) (https://opencollective.com/mikeumus) (https://twitter.com/mikeumus)","Michael Harry Scepaniak <mhs1.sys@gmail.com> (https://michaelscepaniak.com) (https://github.com/hispanic)","Mohammed Shah <shah@idk.uno> (https://github.com/smashah) (https://thanks.dev/d/gh/smashah) (https://twitter.com/smashah)","Mr. Henry <hello@mrhenry.be> (https://mrhenry.be) (https://github.com/mrhenry)","Nermal <nermalcat69@skiff.com> (https://arjunaditya.vercel.app) (https://github.com/nermalcat69)","Pleo (https://pleo.io) (https://github.com/pleo-io)","Poonacha Medappa (https://poonachamedappa.com) (https://github.com/km-Poonacha)","Rob Morris <rob@prismatik.com.au> (https://github.com/Rob-Morris)","Robert de Forest <guitar.robot@gmail.com> (https://github.com/rdeforest)","Sentry (https://sentry.io) (https://github.com/getsentry)","ServieJS (https://github.com/serviejs) (https://thanks.dev/d/gh/serviejs)","Skunk Team (https://skunk.team) (https://github.com/skunkteam)","Syntax <scott@syntax.fm> (https://syntax.fm) (https://github.com/syntaxfm)","WriterJohnBuck (https://github.com/WriterJohnBuck)"],"engines":{"node":">=4"},"editions":[{"description":"ESNext source code for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"source","entry":"index.js","tags":["source","javascript","esnext","require"],"engines":{"node":"6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}},{"description":"ESNext compiled for web browsers with Require for modules","directory":"edition-browsers","entry":"index.js","tags":["compiled","javascript","require"],"engines":{"node":false,"browsers":"defaults"}},{"description":"ESNext compiled for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modules","directory":"edition-node-4","entry":"index.js","tags":["compiled","javascript","es5","require"],"engines":{"node":"4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21","browsers":false}}],"type":"commonjs","main":"index.cjs","browser":"edition-browsers/index.js","dependencies":{"eachr":"^7.4.0","editions":"^6.21.0","typechecker":"^9.3.0"},"devDependencies":{"@babel/cli":"^7.23.4","@babel/core":"^7.23.7","@babel/plugin-transform-object-rest-spread":"^7.23.4","@babel/preset-env":"^7.23.7","assert-helpers":"^11.12.0","eslint":"^8.56.0","eslint-config-bevry":"^5.5.0","eslint-config-prettier":"^9.1.0","eslint-plugin-babel":"^5.3.1","eslint-plugin-prettier":"^5.1.2","kava":"^7.8.0","prettier":"^3.1.1","projectz":"^4.2.0","valid-directory":"^4.9.0"},"scripts":{"our:clean":"rm -rf ./docs ./edition* ./es2015 ./es5 ./out ./.next","our:compile":"npm run our:compile:edition-browsers && npm run our:compile:edition-node-4","our:compile:edition-browsers":"env BABEL_ENV=edition-browsers babel --out-dir ./edition-browsers ./source","our:compile:edition-node-4":"env BABEL_ENV=edition-node-4 babel --out-dir ./edition-node-4 ./source && printf '%s' '{\"type\": \"commonjs\"}' > edition-node-4/package.json","our:deploy":"printf '%s\n' 'no need for this project'","our:meta":"npm run our:meta:projectz","our:meta:projectz":"projectz --offline","our:release":"npm run our:release:prepare && npm run our:release:check-changelog && npm run our:release:check-dirty && npm run our:release:tag && npm run our:release:push","our:release:check-changelog":"cat ./HISTORY.md | grep \"v$npm_package_version\" || (printf '%s\n' \"add a changelog entry for v$npm_package_version\" && exit -1)","our:release:check-dirty":"git diff --exit-code","our:release:prepare":"npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta","our:release:push":"git push origin && git push origin --tags","our:release:tag":"export MESSAGE=$(cat ./HISTORY.md | sed -n \"/## v$npm_package_version/,/##/p\" | sed 's/## //' | awk 'NR>1{print buf}{buf = $0}') && test \"$MESSAGE\" || (printf '%s\n' 'proper changelog entry not found' && exit -1) && git tag \"v$npm_package_version\" -am \"$MESSAGE\"","our:setup":"npm run our:setup:install","our:setup:install":"npm install","our:test":"npm run our:verify && npm test","our:verify":"npm run our:verify:eslint && npm run our:verify:prettier","our:verify:eslint":"eslint --fix --ignore-pattern '**/*.d.ts' --ignore-pattern '**/vendor/' --ignore-pattern '**/node_modules/' --ext .mjs,.js,.jsx,.ts,.tsx ./source","our:verify:prettier":"prettier --write .","test":"node ./test.cjs"},"babel":{"env":{"edition-browsers":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"browsers":"defaults"},"modules":"commonjs"}]],"plugins":["@babel/plugin-transform-object-rest-spread"]},"edition-node-4":{"sourceType":"script","presets":[["@babel/preset-env",{"targets":{"node":"4"},"modules":"commonjs"}]],"plugins":["@babel/plugin-transform-object-rest-spread"]}}},"eslintConfig":{"extends":["bevry"]},"prettier":{"semi":false,"singleQuote":true,"trailingComma":"es5","endOfLine":"lf"},"_id":"extract-opts@5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151","readme":"<!-- TITLE/ -->\n\n# Extract Options & Callback\n\n<!-- /TITLE -->\n\n<!-- BADGES/ -->\n\n<span class=\"badge-githubworkflow\"><a href=\"https://github.com/bevry/extract-opts/actions?query=workflow%3Abevry\" title=\"View the status of this project's GitHub Workflow: bevry\"><img src=\"https://github.com/bevry/extract-opts/workflows/bevry/badge.svg\" alt=\"Status of the GitHub Workflow: bevry\" /></a></span>\n<span class=\"badge-npmversion\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/v/extract-opts.svg\" alt=\"NPM version\" /></a></span>\n<span class=\"badge-npmdownloads\"><a href=\"https://npmjs.org/package/extract-opts\" title=\"View this project on NPM\"><img src=\"https://img.shields.io/npm/dm/extract-opts.svg\" alt=\"NPM downloads\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n<br class=\"badge-separator\" />\n<span class=\"badge-discord\"><a href=\"https://discord.gg/nQuXddV7VP\" title=\"Join this project's community on Discord\"><img src=\"https://img.shields.io/discord/1147436445783560193?logo=discord&amp;label=discord\" alt=\"Discord server badge\" /></a></span>\n<span class=\"badge-twitch\"><a href=\"https://www.twitch.tv/balupton\" title=\"Join this project's community on Twitch\"><img src=\"https://img.shields.io/twitch/status/balupton?logo=twitch\" alt=\"Twitch community badge\" /></a></span>\n\n<!-- /BADGES -->\n\n<!-- DESCRIPTION/ -->\n\nExtract the options and callback from a function's arguments easily\n\n<!-- /DESCRIPTION -->\n\n\n## Usage\n\n```javascript\nvar log = console.log.bind(console)\nvar extractOptsAndCallback = require('extract-opts')\n\n// fs.readFile(filename, [options], callback)\nfunction readFile(filename, opts, next) {\n    // Extract options and callback\n    var args = extractOptsAndCallback(opts, next)\n    opts = args[0]\n    next = args[1]\n\n    // Forward for simplicities sake\n    require('fs').readFile(filename, opts, next)\n}\n\n// Test it\nreadFile('package.json', log) // works with no options\nreadFile('package.json', null, log) // works with null options\nreadFile('package.json', { next: log }) // works with just options\n```\n\n### Customisation\n\nExtract Options and Callback also supports a third argument.\nYou can use this third argument to customize the `completionCallbackNames` property that defaults to `['next']`.\nThis is useful if your completion callback has other names besides `next`.\nAllowing you to do the following:\n\n```javascript\nvar log = console.log.bind(console)\nfunction extractOptsAndCallback(opts, next, config) {\n    if (config == null) config = {}\n    if (config.completionCallbackNames == null)\n        config.completionCallbackNames = ['next', 'complete', 'done']\n    return require('extract-opts')(opts, next, config)\n}\n\n// The readFile method as before\n\n// Test it\nreadFile('package.json', { next: log }) // works the standard completion callback name\nreadFile('package.json', { complete: log }) // works with our custom completion callback name\nreadFile('package.json', { done: log }) // works with our custom completion callback name\n```\n\n<!-- INSTALL/ -->\n\n## Install\n\n### [npm](https://npmjs.com \"npm is a package manager for javascript\")\n\n-   Install: `npm install --save extract-opts`\n-   Import: `import * as pkg from ('extract-opts')`\n-   Require: `const pkg = require('extract-opts')`\n\n### [jspm](https://jspm.io \"Native ES Modules CDN\")\n\n``` html\n<script type=\"module\">\n    import * as pkg from '//dev.jspm.io/extract-opts@5.9.0'\n</script>\n```\n### [Editions](https://editions.bevry.me \"Editions are the best way to produce and consume packages you care about.\")\n\nThis package is published with the following editions:\n-   `extract-opts` aliases `extract-opts/index.cjs` which uses the [Editions Autoloader](https://github.com/bevry/editions \"You can use the Editions Autoloader to autoload the appropriate edition for your consumers environment\") to automatically select the correct edition for the consumer's environment\n-   `extract-opts/source/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") source code for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-browsers/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for web browsers with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n-   `extract-opts/edition-node-4/index.js` is [ESNext](https://en.wikipedia.org/wiki/ECMAScript#ES.Next \"ECMAScript Next\") compiled for [Node.js](https://nodejs.org \"Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine\") 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html \"Node/CJS Modules\") for modules\n\n<!-- /INSTALL -->\n\n<!-- HISTORY/ -->\n\n## History\n\n[Discover the release history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/HISTORY.md#files)\n\n<!-- /HISTORY -->\n\n<!-- BACKERS/ -->\n\n## Backers\n\n### Code\n\n[Discover how to contribute via the `CONTRIBUTING.md` file.](https://github.com/bevry/extract-opts/blob/HEAD/CONTRIBUTING.md#files)\n\n#### Authors\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Maintainers\n\n-   [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.\n\n#### Contributors\n\n-   [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/extract-opts/commits?author=balupton \"View the GitHub contributions of Benjamin Lupton on repository bevry/extract-opts\")\n-   [Matt Bierner](https://github.com/mjbvz) — [view contributions](https://github.com/bevry/extract-opts/commits?author=mjbvz \"View the GitHub contributions of Matt Bierner on repository bevry/extract-opts\")\n-   [Sean Fridman](https://github.com/sfrdmn) — [view contributions](https://github.com/bevry/extract-opts/commits?author=sfrdmn \"View the GitHub contributions of Sean Fridman on repository bevry/extract-opts\")\n\n### Finances\n\n<span class=\"badge-githubsponsors\"><a href=\"https://github.com/sponsors/balupton\" title=\"Donate to this project using GitHub Sponsors\"><img src=\"https://img.shields.io/badge/github-donate-yellow.svg\" alt=\"GitHub Sponsors donate button\" /></a></span>\n<span class=\"badge-thanksdev\"><a href=\"https://thanks.dev/u/gh/bevry\" title=\"Donate to this project using ThanksDev\"><img src=\"https://img.shields.io/badge/thanksdev-donate-yellow.svg\" alt=\"ThanksDev donate button\" /></a></span>\n<span class=\"badge-patreon\"><a href=\"https://patreon.com/bevry\" title=\"Donate to this project using Patreon\"><img src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /></a></span>\n<span class=\"badge-liberapay\"><a href=\"https://liberapay.com/bevry\" title=\"Donate to this project using Liberapay\"><img src=\"https://img.shields.io/badge/liberapay-donate-yellow.svg\" alt=\"Liberapay donate button\" /></a></span>\n<span class=\"badge-buymeacoffee\"><a href=\"https://buymeacoffee.com/balupton\" title=\"Donate to this project using Buy Me A Coffee\"><img src=\"https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg\" alt=\"Buy Me A Coffee donate button\" /></a></span>\n<span class=\"badge-opencollective\"><a href=\"https://opencollective.com/bevry\" title=\"Donate to this project using Open Collective\"><img src=\"https://img.shields.io/badge/open%20collective-donate-yellow.svg\" alt=\"Open Collective donate button\" /></a></span>\n<span class=\"badge-crypto\"><a href=\"https://bevry.me/crypto\" title=\"Donate to this project using Cryptocurrency\"><img src=\"https://img.shields.io/badge/crypto-donate-yellow.svg\" alt=\"crypto donate button\" /></a></span>\n<span class=\"badge-paypal\"><a href=\"https://bevry.me/paypal\" title=\"Donate to this project using Paypal\"><img src=\"https://img.shields.io/badge/paypal-donate-yellow.svg\" alt=\"PayPal donate button\" /></a></span>\n\n#### Sponsors\n\n-   [Andrew Nesbitt](https://nesbitt.io) — Software engineer and researcher\n-   [Balsa](https://balsa.com) — We're Balsa, and we're building tools for builders.\n-   [Codecov](https://codecov.io) — Empower developers with tools to improve code quality and testing.\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Sentry](https://sentry.io) — Real-time crash reporting for your web apps, mobile apps, and games.\n-   [Syntax](https://syntax.fm) — Syntax Podcast\n\n#### Donors\n\n-   [Andrew Nesbitt](https://nesbitt.io)\n-   [Armen Mkrtchian](https://mogoni.dev)\n-   [Balsa](https://balsa.com)\n-   [Chad](https://opencollective.com/chad8)\n-   [Codecov](https://codecov.io)\n-   [dr.dimitru](https://veliovgroup.com)\n-   [Elliott Ditman](https://elliottditman.com)\n-   [entroniq](https://gitlab.com/entroniq)\n-   [GitHub](https://github.com/about)\n-   [Hunter Beast](https://cryptoquick.com)\n-   [Jean-Luc Geering](https://github.com/jlgeering)\n-   [Michael Duane Mooring](https://mdm.cc)\n-   [Michael Harry Scepaniak](https://michaelscepaniak.com)\n-   [Mohammed Shah](https://github.com/smashah)\n-   [Mr. Henry](https://mrhenry.be)\n-   [Nermal](https://arjunaditya.vercel.app)\n-   [Pleo](https://pleo.io)\n-   [Poonacha Medappa](https://poonachamedappa.com)\n-   [Rob Morris](https://github.com/Rob-Morris)\n-   [Robert de Forest](https://github.com/rdeforest)\n-   [Sentry](https://sentry.io)\n-   [ServieJS](https://github.com/serviejs)\n-   [Skunk Team](https://skunk.team)\n-   [Syntax](https://syntax.fm)\n-   [WriterJohnBuck](https://github.com/WriterJohnBuck)\n\n<!-- /BACKERS -->\n\n<!-- LICENSE/ -->\n\n## License\n\nUnless stated otherwise all works are:\n\n-   Copyright &copy; [Benjamin Lupton](https://balupton.com)\n\nand licensed under:\n\n-   [Artistic License 2.0](http://spdx.org/licenses/Artistic-2.0.html)\n\n<!-- /LICENSE -->\n","readmeFilename":"README.md","gitHead":"5bd0f119cd9a664e5e7424e155a561d720e12151","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-KONiYkmINElr/GAL6FH7XLJCah86ERMcwv363w7u2g2KgzenyCj/ynU/VDXAd7tPYtGvh+xDFN7FEe6FwonY4A==","shasum":"8da27d95ff5d1b26b7daf9061c1862587450d110","tarball":"https://registry.npmjs.org/extract-opts/-/extract-opts-5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151.tgz","fileCount":10,"unpackedSize":37819,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcSWZuYMXrONHcOYSAIY4JkwNtqp+0lOyFcr090zA28wIgbrdKWzLcuJZ7GXHBLwTFIOVfeq6dZm9jTgC9lk7UgGc="}]},"_npmUser":{"name":"bevryme","email":"us@bevry.me"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/extract-opts_5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151_1704166760008_0.7955311818852555"},"_hasShrinkwrap":false}},"readme":"","maintainers":[{"name":"bevryme","email":"us@bevry.me"}],"time":{"modified":"2024-01-02T03:39:20.406Z","created":"2013-06-23T06:57:31.630Z","2.0.0":"2013-06-23T06:57:36.831Z","2.2.0":"2013-06-24T03:16:37.343Z","3.0.0":"2015-03-13T10:07:31.301Z","3.0.1":"2015-03-13T10:11:29.715Z","3.1.0":"2016-01-14T10:34:10.591Z","3.2.0":"2016-01-15T03:29:17.451Z","3.3.0":"2016-05-27T10:24:39.329Z","3.3.1":"2016-05-27T10:27:38.621Z","3.4.0-next.1573610226.be6ba5f1d865d3d547350fe3f379251792936ed8":"2019-11-13T01:57:07.937Z","3.4.0":"2019-11-13T01:58:40.446Z","3.4.0-next.1573687647.64c1ed5a1326b8a4cdd828e478dc28e081765777":"2019-11-13T23:27:28.947Z","3.4.0-next.1573738703.9b68cedee47761550ae2b220938637083933f68e":"2019-11-14T13:38:25.174Z","4.0.0-next.1574048582.9b70d87f2dc565aa977f0c56099474b49fa13eed":"2019-11-18T03:43:04.106Z","4.0.0":"2019-11-18T03:43:44.638Z","4.0.0-next.1574656381.940571fb802b734414b77516ab96a3724971b0fe":"2019-11-25T04:33:20.398Z","4.0.0-next.1574660357.da69c777fc96775a1b7563ece70baed7cd5fadd1":"2019-11-25T05:39:19.701Z","4.1.0-next.1575147230.db6ad70e775308ad833bdaaf561dcbffeba7581d":"2019-11-30T20:53:52.164Z","4.1.0":"2019-11-30T20:54:31.773Z","4.1.0-next.1575147896.bb0ab7cdda585834d7ecf8f60a010bd4d873a4ea":"2019-11-30T21:04:57.342Z","4.2.0-next.1575171153.743d8176883deec82307aeba7026073241aa62a2":"2019-12-01T03:32:35.222Z","4.2.0":"2019-12-01T03:33:10.731Z","4.3.0":"2019-12-09T08:40:20.463Z","4.3.0-next.1575880873.fd190477a5f30c8517ff89b49ad5b2e74ffcb812":"2019-12-09T08:41:14.988Z","5.0.0":"2023-11-12T22:59:23.554Z","5.0.0-next.1699829970.6d2f92b55d986b61055f7df0cbc1c597bb5278cf":"2023-11-12T22:59:31.970Z","5.1.0":"2023-11-13T12:01:33.063Z","5.1.0-next.1699876894.6cec1f9f0fac1ede06b63b9c19eafb17fe657411":"2023-11-13T12:01:38.154Z","5.2.0":"2023-11-14T16:15:20.080Z","5.2.0-next.1699978532.f314f4d82abe279471515de91ca4486a0b935a00":"2023-11-14T16:15:34.152Z","5.3.0-next.1700543634.b359719a87658aa052b2ec820d0f3f77550907cf":"2023-11-21T05:13:55.927Z","5.3.0":"2023-11-21T05:14:07.263Z","5.4.0":"2023-11-24T15:32:33.465Z","5.4.0-next.1700839953.08f98e6531b14e213278591f1e22a8639187faed":"2023-11-24T15:33:37.429Z","5.4.1-next.1701782418.5381e879a9d6452dc7ddd3e7dbb929ffb817a6ca":"2023-12-05T13:20:20.355Z","5.4.1":"2023-12-05T13:20:30.317Z","5.5.0":"2023-12-05T16:31:10.882Z","5.5.0-next.1701793904.7caa0a307aa16d8b2c1224a87aeedc77cd25b843":"2023-12-05T16:31:45.489Z","5.6.0-next.1703664900.44a63877e208b45a2ce523406ae291905a938a7e":"2023-12-27T08:15:02.741Z","5.6.0":"2023-12-27T08:15:13.590Z","5.7.0":"2023-12-28T16:24:55.138Z","5.7.0-next.1703780663.333a8b3a3dade1b5fe6eb418376bb4631456e319":"2023-12-28T16:25:22.056Z","5.8.0":"2023-12-29T06:38:07.759Z","5.8.0-next.1703831852.0f53e729d2f0ef0391a7e2241d5b3554c38d2d42":"2023-12-29T06:38:32.558Z","5.9.0":"2024-01-02T03:38:47.399Z","5.9.0-next.1704166718.5bd0f119cd9a664e5e7424e155a561d720e12151":"2024-01-02T03:39:20.172Z"},"author":{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},"repository":{"type":"git","url":"git+https://github.com/bevry/extract-opts.git"},"users":{"markstos":true},"homepage":"https://github.com/bevry/extract-opts","keywords":["args","arguments","browser","callback","cb","es5","esnext","extract","flow","next","node","optional","options","opts"],"contributors":[{"name":"Benjamin Lupton","email":"b@lupton.cc","url":"https://balupton.com"},{"name":"Matt Bierner","url":"https://mattbierner.com"},{"name":"Sean Fridman","email":"mail@seanfridman.com","url":"https://seanfridman.com"}],"bugs":{"url":"https://github.com/bevry/extract-opts/issues"},"readmeFilename":"","license":"Artistic-2.0"}