{"_id":"shades","_rev":"44-fe732b5df68e7be8b2f306b1e227d1f3","name":"shades","dist-tags":{"beta":"2.1.0-beta.2","latest":"2.2.1"},"versions":{"0.0.1":{"name":"shades","version":"0.0.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@0.0.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"0b1e1e0b1a5fc29005ae0f23ae66b279d2639de7","tarball":"https://registry.npmjs.org/shades/-/shades-0.0.1.tgz","integrity":"sha512-bYiNd5TKN/R/RzFBllX2N/SKtedzdmFN/VQI2FTHHdsOKec4uWn8PVhrOjxaboHLQADvxWM20aa49frmTROrRw==","signatures":[{"sig":"MEYCIQCI7tBuvEaY1meXjodKVM+cOzAbLoFpvAzTPIULBjP6/AIhAPGdD1nH4LzZhKuijkPGwMY3EcBrcOz+XPB1gjQ1hvQd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"0b1e1e0b1a5fc29005ae0f23ae66b279d2639de7","gitHead":"ca204b6fc833ffbe23ce68b7d5e37c5255c987d0","scripts":{"test":"mocha --compilers js:babel-register"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6"},"_npmOperationalInternal":{"tmp":"tmp/shades-0.0.1.tgz_1473664075208_0.8516901172697544","host":"packages-16-east.internal.npmjs.com"}},"0.0.5":{"name":"shades","version":"0.0.5","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@0.0.5","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"bb963a773560855337e909f5a8eb369f2986c139","tarball":"https://registry.npmjs.org/shades/-/shades-0.0.5.tgz","integrity":"sha512-Hn3GgyTFWF/pNIYtUNupnSPPSLhaEqK8/khmbEuv2v+hKksX7zuWeUJgLEcrzvNiZOhbdfv3gDcs+rGthLXemQ==","signatures":[{"sig":"MEUCIEuRev7+tEmUbUSsCeQLr5r8cm5g0+9meqkkZYsrazCwAiEAnruQzPsdOu+RdUmTvXtBsR0+rAprEscvhhcgGVXsEIY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"bb963a773560855337e909f5a8eb369f2986c139","gitHead":"30e2c4d042cf98f9464af6041aba9decb4e55656","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-0.0.5.tgz_1473665666196_0.6865339388605207","host":"packages-12-west.internal.npmjs.com"}},"0.0.6":{"name":"shades","version":"0.0.6","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@0.0.6","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"e400b0fb37fc934dce8684c22a7d279bbf9fab4e","tarball":"https://registry.npmjs.org/shades/-/shades-0.0.6.tgz","integrity":"sha512-vfG2Nl2t8KSAwoW5jfPp83km0jvDU1C+DAFFctruOqQGYQcVaPhqC6lFcpDz25R76BJUnZLwJa7eMeoe7L7XZA==","signatures":[{"sig":"MEQCIGY1w3pQ7/cVf3bEZkpPnX0SLQgSXSV8OKvbhWOupn/oAiAuWBYGZpTGY8/szWVDiDgxNkOxvs/D2wtsEifFg6vQFQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"e400b0fb37fc934dce8684c22a7d279bbf9fab4e","gitHead":"6629867e4fbf43e0fc1e8738c066e34d8cae45e4","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-0.0.6.tgz_1473665815442_0.6270602652803063","host":"packages-16-east.internal.npmjs.com"}},"0.1.0":{"name":"shades","version":"0.1.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@0.1.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"ba08ab5181388de0bf163ac9878d3ffe3bf2127b","tarball":"https://registry.npmjs.org/shades/-/shades-0.1.0.tgz","integrity":"sha512-8aW/eGT4VqmeLoEarXIIc7xJG6joC8ce2damhd7X3wRgRIaGiQWS87ZBxKZUt/YPRu1x4GCZbk1KkWuUM1hPow==","signatures":[{"sig":"MEUCIQC840UKwqiVehEHpQ02EhAuzFNbx7lQNDgrQoE4BJ7EoAIgAyk39hpcAJh9cBIsa1ajqdZXzjKg0nXph1K+TdK4Q8s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"ba08ab5181388de0bf163ac9878d3ffe3bf2127b","gitHead":"2a4a33abb64e03da856a16e3c388b7721e4be408","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-0.1.0.tgz_1476495568276_0.10134450299665332","host":"packages-12-west.internal.npmjs.com"}},"1.0.0":{"name":"shades","version":"1.0.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.0.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"8cec6584ac274548c4d0d14e0515bbcc718fa98a","tarball":"https://registry.npmjs.org/shades/-/shades-1.0.0.tgz","integrity":"sha512-9YBk0AEo168w8PI83HmoxOpM2ckTSsTYFrGh5Wt7dXzm83jkurgfXBF9sG1rWz43hFijJSFRGYjGFh8l1Kcldw==","signatures":[{"sig":"MEUCIEHMPDx/F//l0GXx3tzY2DJfzRs/q7secschQLsbkx9NAiEAg0Gllv+e6ZtxU6YeMFjcYdBOTto3Y0kmEHKth4vRgVU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"8cec6584ac274548c4d0d14e0515bbcc718fa98a","gitHead":"e0a74b5c0ef452dde4a9a42d70bcc1c505a63efb","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.8.6","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"5.12.0","dependencies":{},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.0.0.tgz_1478285768892_0.14985108468681574","host":"packages-18-east.internal.npmjs.com"}},"1.1.0":{"name":"shades","version":"1.1.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.1.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"71829d812d20af1b593efc453685bd19eb44846b","tarball":"https://registry.npmjs.org/shades/-/shades-1.1.0.tgz","integrity":"sha512-0XybDM40CqbW7pyCehwOLeaERvWm1ZcDEdOwmpYMDX4BrOe9hHHlw23G1/J+7eZ6d4jTOsEXI0W60scUQDEllA==","signatures":[{"sig":"MEQCIArNQRyNHaaEm+md7XZivLoBuDfq8hFOVFXKOpmNw5xnAiBoqgQQV+bk+CXhkaUgQSQHjgqQBki3HxuGuRQtl6ypqg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"71829d812d20af1b593efc453685bd19eb44846b","gitHead":"db9a6e0388697b790fef5bb81f8ea455a18eaa82","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.8.6","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"5.12.0","dependencies":{},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.1.0.tgz_1478290602835_0.6502365921624005","host":"packages-18-east.internal.npmjs.com"}},"1.1.1":{"name":"shades","version":"1.1.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.1.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"a49b922509524353436d8694897f72b31a14da1e","tarball":"https://registry.npmjs.org/shades/-/shades-1.1.1.tgz","integrity":"sha512-I+lwNvmicOUwh56WSJa3mzxd2zQr0zExlU7KDTBkMCBNdlXPV2hAuSLEG01/gFj40gWfgOOBD3UjXvfZHiU7LQ==","signatures":[{"sig":"MEUCIQChTsJt3S6YsnKuVGlNnPp5Nu2yHWsAuQfbnItjl6RPWwIgD0NsQJ7r0/yUPtqYNvOzPduDFcQOp+MiF0pMlmbH4+8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"a49b922509524353436d8694897f72b31a14da1e","gitHead":"bcdf1fb9237e79ec52f97fae50dd1b60aa6fdb04","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.1.1.tgz_1479443973053_0.9561542868614197","host":"packages-12-west.internal.npmjs.com"}},"1.1.2":{"name":"shades","version":"1.1.2","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.1.2","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"0a2068204fccd858c5570c0a56d585dcd474e906","tarball":"https://registry.npmjs.org/shades/-/shades-1.1.2.tgz","integrity":"sha512-mX+aHkhdDORZOrzlMgbTS206lNQ3N+bCtXD2JIJE0sXb0612edMr2A1P0k2W/v9tweQHZG18WlfcnWO74tFdpw==","signatures":[{"sig":"MEUCIE1tlLY+R6JYT/94fyJmCEWdL0drBQGBSCiQjnlLQL7VAiEA7ZYl86Wfl6yuS9xpxRNReHZk5YK/fJJnaIhAlgc1WEc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"0a2068204fccd858c5570c0a56d585dcd474e906","gitHead":"91027ca99b74210f5e00acb3aa75d7a187ec9557","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.1.2.tgz_1479765510910_0.3059768204111606","host":"packages-12-west.internal.npmjs.com"}},"1.1.3":{"name":"shades","version":"1.1.3","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.1.3","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"dddc4cd9ed30727d1c779d3893a801a8f729de29","tarball":"https://registry.npmjs.org/shades/-/shades-1.1.3.tgz","integrity":"sha512-q3FLDrETGuXRTEndyel8ss2D4VLBRjDrNk7nnAYRnYrlLBv/DTKQTCgzPv277iEwYqzD7pLrxuVSoooJuqMcNw==","signatures":[{"sig":"MEQCIDXUY+6yc6vrM0dCr0pSsXKxsph9jA00phPliOGXBEK6AiAHaVxVTfXwtXRBM9vSR254TK9O3CLepZkJWOO5PoT+KQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"dddc4cd9ed30727d1c779d3893a801a8f729de29","gitHead":"826ccdba9f1b4c7c69ebfc716d0c0600e70b4750","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.1.3.tgz_1479766848792_0.7451108016539365","host":"packages-18-east.internal.npmjs.com"}},"1.2.0":{"name":"shades","version":"1.2.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.2.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"3d7a98e1eb1aa1a66c0cc8fa29c29ca565956214","tarball":"https://registry.npmjs.org/shades/-/shades-1.2.0.tgz","integrity":"sha512-Nv2WUyWaz4pFGfP1cTNISjvPXFuirkb6m0KDOxlpTAPvBm0MKUeewtJ/gqmmXrWj//bjawzH3sluxHvJJb3mDQ==","signatures":[{"sig":"MEUCIEGMjVrhFLU35r0LlmqsudDmPhArp9DLpdwOE3prbFKiAiEA7NqxmOAxJLR5YnvvN+BGLoMiAOdWErmoMybhn6yU5I8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"3d7a98e1eb1aa1a66c0cc8fa29c29ca565956214","gitHead":"1dd72d73ba8790db0e3e00a6157be1b5eb378eb3","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.2.0.tgz_1479877861376_0.8753466235939413","host":"packages-12-west.internal.npmjs.com"}},"1.2.1":{"name":"shades","version":"1.2.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.2.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"a3bd1d3245d3bd4a4f9f525dc5a4222c8a397b35","tarball":"https://registry.npmjs.org/shades/-/shades-1.2.1.tgz","integrity":"sha512-7i4F6rFwmk0Op45KEmtonfpYPbIn9R3g1BMWwcQoeh+KOrOtxwAtr38bJdC4HkCmCCIAwaZN1EZupK3YFipa+Q==","signatures":[{"sig":"MEUCIDK8EsSM5G42A8ahWdmF4+kQTZjpuNN8lQHwY268/m0TAiEA4WWuaZ0ha7Q3ZhKeBOW18mBBQ8FJGnyvZTbwOzLDcHg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"a3bd1d3245d3bd4a4f9f525dc5a4222c8a397b35","gitHead":"82d1171a7949c67bc13d45f9674a41cac162b570","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.2.1.tgz_1480715721396_0.09276598924770951","host":"packages-12-west.internal.npmjs.com"}},"1.3.0":{"name":"shades","version":"1.3.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.3.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"a418b72dae03695cf5882e27faf285a5f5412d61","tarball":"https://registry.npmjs.org/shades/-/shades-1.3.0.tgz","integrity":"sha512-5+JzusE8kPaQmhqGXHeMAwABkwyETjKqWZP5hUO3DCW9wwYN2I87hI0+kg8yghyFtimOx3WcZ9bh0F2/RZu+Iw==","signatures":[{"sig":"MEYCIQCOrtGWYNI0pbyBiVbbIWImIsf0yq18cdKrgq3cuQ1v7QIhAOY6JC9Yi+8navzuvaHEX9zzwX6tsNBFUSO958Pg1W6n","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"a418b72dae03695cf5882e27faf285a5f5412d61","gitHead":"b464a85f41116dcfaead69a296b8ac9eb201e9e0","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.3.0.tgz_1481347482271_0.4777389906812459","host":"packages-18-east.internal.npmjs.com"}},"1.3.1":{"name":"shades","version":"1.3.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.3.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"6d41194a4cd74b6646fd4d1f34930b00a97f75a5","tarball":"https://registry.npmjs.org/shades/-/shades-1.3.1.tgz","integrity":"sha512-K05l3wB8lpu1aDO5aI6WLIiKX6nP5uZFh2gdXNyYllnZkFZSMKuJxfPJTMJUj54kOUaTk1olj48CiyQv8cf4Eg==","signatures":[{"sig":"MEQCIEHmC3CZRI3JYnCrChLdylXC2lNlr5IKtSLLdMcBH30CAiA8SlcXAaXwAo1CpEn0xhB9fsGyVJBrYILh5++0OpuuVA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"6d41194a4cd74b6646fd4d1f34930b00a97f75a5","gitHead":"f8978a5453c20790d85f3025e54de3d5a46b67b5","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.3.1.tgz_1481670198513_0.30524099594913423","host":"packages-12-west.internal.npmjs.com"}},"1.4.0":{"name":"shades","version":"1.4.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.4.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"57c408c6d19c2413c2a1561f872ef9a8d6b14298","tarball":"https://registry.npmjs.org/shades/-/shades-1.4.0.tgz","integrity":"sha512-cmgax1VM3Z6VG2+wTQTeFHeY5zP06yA18aHesZMKlXI0+CqhEGM1FXCLyHjjlgOchoaxdM0QA9cAAlFLfqW3zw==","signatures":[{"sig":"MEYCIQDoo45U7qV6OGrGQMLhDtk8HL3fI/a5ZYCOvs0q7I63bgIhAP5RbyUj+Mf8rYho0yhrq0uOQyUHtG8WTXAzIKo6Nkh7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"57c408c6d19c2413c2a1561f872ef9a8d6b14298","gitHead":"07b8091c3eb206e855379693a144307c0df283d4","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.8","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.9.1","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.4.0.tgz_1482788424075_0.08647118671797216","host":"packages-12-west.internal.npmjs.com"}},"1.5.0":{"name":"shades","version":"1.5.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.5.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"d4ee5a14d5f19eee0d2fc24eafef447cba835160","tarball":"https://registry.npmjs.org/shades/-/shades-1.5.0.tgz","integrity":"sha512-YaqeHplnxtMghfCsVkHs29e2H5/+kxn1b0TdV6f8zjZERO0BtgL/f1TfPRoawpY6uy9w1ebiBlVQ1bRRDuRBTQ==","signatures":[{"sig":"MEUCIQC7p1wcUUxr9SjBDeYvDPs+djDo1c/aChUevxESE0k/SgIgHRvbWeY2UYzCDj0GfiLvFYh99G7Lvy4ggvQjFQl6Fq4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"d4ee5a14d5f19eee0d2fc24eafef447cba835160","gitHead":"a5f9a2bc7c0a3094e713cbd05597830b55c0c8c8","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.8.6","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"5.12.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.5.0.tgz_1483646674068_0.09621613146737218","host":"packages-18-east.internal.npmjs.com"}},"1.6.0":{"name":"shades","version":"1.6.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.6.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"bc463da7b9fe4dca5d07e044b6ea48bb0e69c759","tarball":"https://registry.npmjs.org/shades/-/shades-1.6.0.tgz","integrity":"sha512-4G9X2LeoyejXvA9LZsx+45XVOx+KJqIGzGCXPmbgBRJtcHIgS+dnpNyc81Zo23GzKmdh28Sz0lj8AuJki9lfpA==","signatures":[{"sig":"MEUCIBqlIUMW/TcW1ns2UVeg2gii891oQin16rZ02vE8Qq5MAiEA9ZSfw9H4kQskEUd+gG0ML+I+IBjcbYiBT//zk3Aplds=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"bc463da7b9fe4dca5d07e044b6ea48bb0e69c759","gitHead":"1e1b807b1e648a05ebe172d4055c60a301ca95d4","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.6.0.tgz_1510184862387_0.9218009663745761","host":"s3://npm-registry-packages"}},"1.6.1":{"name":"shades","version":"1.6.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.6.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"f73807e650c92d96dbd12bf00038e16627a98d84","tarball":"https://registry.npmjs.org/shades/-/shades-1.6.1.tgz","integrity":"sha512-nFuDUj2xVioEfs7fEN4Jk6mG73vyLn3Bk7Q1JiUW5JqKoCpuRJY2CGw+Uze2tL07e57YgWfe83Wa3ZeC8LUoIQ==","signatures":[{"sig":"MEYCIQDX3P5/KCWDSoP4bs402YZ1wEfvrTG5WpOrVzUmYvNfugIhANCU90pzDNUqHQMfgBI3PuA8grs19c99pWcHDpbU8ClO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"f73807e650c92d96dbd12bf00038e16627a98d84","gitHead":"89f7625bd47694e658a98e271f858c9f13bb3f2a","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.6.1.tgz_1510186167631_0.5777707695960999","host":"s3://npm-registry-packages"}},"1.7.0":{"name":"shades","version":"1.7.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.7.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"60c5975f3ee214f66b788a91d836c2385bd9e5c1","tarball":"https://registry.npmjs.org/shades/-/shades-1.7.0.tgz","integrity":"sha512-/ft299iPTPx0gd94ijITTl351z9Yc3Y2PSqM8i5YXC5PEtwTlj/BpqO9EnLqqGA3KH8/duDD2GYzJmfzL6Zf8Q==","signatures":[{"sig":"MEYCIQCS8n4zOYaw97ln33jvUfOZkLHITRKshYxp6sUX5py4OQIhAPE9QSRJi2DXGLpbeUeBFStjWQ0NHzmSpVIrIDTglsTx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"60c5975f3ee214f66b788a91d836c2385bd9e5c1","gitHead":"2fab810881a45c21f0abfaa4bebe51a7a205cd2a","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.7.0.tgz_1512169804750_0.5787933128885925","host":"s3://npm-registry-packages"}},"1.7.1":{"name":"shades","version":"1.7.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.7.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"792095f731a91e0283aa3f9a6d83fd2218910bd6","tarball":"https://registry.npmjs.org/shades/-/shades-1.7.1.tgz","integrity":"sha512-gWZOwPX75V1c8o80awpMDDvoV2UP9hRUaFBOfvBhSMav6woLBsfb53w0L3eJLkgcwUm/uxpZicXZcAGtk2XjWQ==","signatures":[{"sig":"MEUCIH8ZpEpeWx6wFdCaVT9Ys1jxl5esOOsopYnwv579M6KaAiEA3rOR9nioYApYWhqa4Ta7EkOOqHmtNDyIrg+VFsJh+nM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"792095f731a91e0283aa3f9a6d83fd2218910bd6","gitHead":"d4e118cbe940e24b6bc0065d04df57e7604e3dcd","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.7.1.tgz_1512171440294_0.5126563743688166","host":"s3://npm-registry-packages"}},"1.8.0":{"name":"shades","version":"1.8.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.8.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"b791863837d58a670e456611202108d7a9d42996","tarball":"https://registry.npmjs.org/shades/-/shades-1.8.0.tgz","integrity":"sha512-euTrFOYvwlDuAEM0RBNXi/DdFk9bZ4pvHxerXV8DNSD4aWKRs2QK4hTYMviRY8PsYL0FRgO7WXed11oolksHWw==","signatures":[{"sig":"MEYCIQCBSFqHqBa6BhzZN7EjEsAOBd6Bonj59fHqfihAbF3LTAIhAMhrb4dK7ZHA9w0tZSUkhnpgLnWC7PkllZlaeKlmb8Dy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"lib/index.js","_from":".","_shasum":"b791863837d58a670e456611202108d7a9d42996","gitHead":"0fca2dcaab4f69e2df4233652eab31f3e5989c17","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"3.10.3","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"6.5.0","dependencies":{"is-array":"^1.0.1"},"devDependencies":{"mocha":"^3.0.2","pegjs":"^0.10.0","babel-register":"^6.11.6","babel-preset-es2015":"^6.13.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades-1.8.0.tgz_1515622256790_0.299664088524878","host":"s3://npm-registry-packages"}},"1.9.0":{"name":"shades","version":"1.9.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.9.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"dist":{"shasum":"13dc26428ca3f09007d6c380d20b59ceefa2a936","tarball":"https://registry.npmjs.org/shades/-/shades-1.9.0.tgz","fileCount":23,"integrity":"sha512-C6RyKfemUFY6NkIWDjswKWBKWOZ5LaseXa+T1G/euAWMPIC1HW79O8uw9HW9mGNqzuVnyI6jzkJOsVNucbCmbA==","signatures":[{"sig":"MEUCIByNHBxehQkvQwe4YY0bzOe84miWpXhSd2WjjSIiBvrIAiEAn+zksN5YBdxLWouoDhCbNdoy3xOCN5/wpEORkLjgM1o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":131996},"main":"lib/index.js","gitHead":"11c6cd804da310f16970e77658b6232b47d173cf","scripts":{"test":"mocha --compilers js:babel-register","compile":"babel src --out-dir lib","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"5.6.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"9.5.0","dependencies":{"lodash.get":"^4.4.2","lodash.pickby":"^4.6.0","lodash.isequal":"^4.5.0","lodash.mapvalues":"^4.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","mocha":"^3.0.2","pegjs":"^0.10.0","babel-cli":"^6.26.0","babel-register":"^6.11.6","babel-preset-env":"^1.6.1","babel-plugin-lodash":"^3.3.2","babel-preset-stage-0":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_1.9.0_1519241228074_0.365550198256374","host":"s3://npm-registry-packages"}},"1.10.0":{"name":"shades","version":"1.10.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.10.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"0380994e14f685c3b7896ab1349fc87701dd4ee5","tarball":"https://registry.npmjs.org/shades/-/shades-1.10.0.tgz","fileCount":10,"integrity":"sha512-Qh6cEVRSC5aJDc+qn+/biEdIF0ecAqsDszxegoHZU3MdLsFsicwxSnddAOGNNy3DJjZmxy37GQBiYswwbuCCFg==","signatures":[{"sig":"MEUCIQDHB2AdEDinuVUonBWV/wbOO8+51y5MHSP2aFzzgQZLDAIgZm6OUDvqBKq5t0eaXo8+SwHdTUvwTo0wE3QKtoW/j3s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":346683},"main":"lib/bundle.js","module":"lib/bundle.es.js","gitHead":"749acac8a4e9d5daa61f0d464072b7440491cf84","scripts":{"test":"BABEL_ENV=test mocha --require babel-core/register","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","inspect":"BABEL_ENV=test mocha --require babel-core/register --inspect","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"5.6.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"9.5.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","mocha":"5.0.4","pegjs":"^0.10.0","lodash":"^4.17.5","rollup":"^0.56.5","babel-cli":"^6.26.0","babel-core":"6","babel-register":"^6.11.6","babel-preset-env":"^1.6.1","babel-plugin-lodash":"^3.3.2","rollup-plugin-babel":"^3.0.3","babel-preset-stage-0":"^6.5.0","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","babel-plugin-external-helpers":"^6.22.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_1.10.0_1520573544826_0.7256828352221929","host":"s3://npm-registry-packages"}},"1.10.1":{"name":"shades","version":"1.10.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.10.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"bd6f44ce8dd909ad650b3f0708398c74d918f4a9","tarball":"https://registry.npmjs.org/shades/-/shades-1.10.1.tgz","fileCount":6,"integrity":"sha512-MBmQGw92Tbcp8Pky57HBPCIov0s2nwEfVUOa+0QSqX2Y39Z9hfSi/UO7x0ZLOYdF6HC00Amm04yeDyNx6ENvQw==","signatures":[{"sig":"MEUCIQCwilIFhcyJttCQLrTs2VCvRTT1ezzcCrbYuaLSNxQonQIgBR+T5xmTm8zFv70hXPySqVs46huV739BLSDg8q2ppIU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":330951},"main":"lib/bundle.js","module":"lib/bundle.es.js","gitHead":"b7b5963f87fe9dbf26539774637376d8dd40b009","scripts":{"test":"BABEL_ENV=test mocha --require babel-core/register","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","inspect":"BABEL_ENV=test mocha --require babel-core/register --inspect","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"5.6.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"9.5.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","mocha":"5.0.4","pegjs":"^0.10.0","lodash":"^4.17.5","rollup":"^0.56.5","babel-cli":"^6.26.0","babel-core":"6","babel-register":"^6.11.6","babel-preset-env":"^1.6.1","babel-plugin-lodash":"^3.3.2","rollup-plugin-babel":"^3.0.3","babel-preset-stage-0":"^6.5.0","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","babel-plugin-external-helpers":"^6.22.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_1.10.1_1520574094439_0.2188184641853872","host":"s3://npm-registry-packages"}},"1.11.0":{"name":"shades","version":"1.11.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.11.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"8a86c747d9223f3baa5a49b1a4aac92c5d234e30","tarball":"https://registry.npmjs.org/shades/-/shades-1.11.0.tgz","fileCount":7,"integrity":"sha512-0dxy/2UsH5heOQNLkkF9C8h39LPXX8KykN58NTRQ1sUYL7g6zxWrYQiO54e7KvHJNr93tXf/q81epEcHSNgtLA==","signatures":[{"sig":"MEUCIQD/JbGZnGQ4w56ntwel+6KPK/jihv5yAjsqrTdAY6LnLwIgBj8mAuE0Le8coBpJsSf2/H9gBA2crYtR1JDezKZqNuM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":332088},"main":"lib/bundle.js","module":"lib/bundle.es.js","gitHead":"6101b2c950d20f7f6fe887ec47e15c30fdd77bc1","scripts":{"test":"BABEL_ENV=test mocha --require babel-core/register","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","inspect":"BABEL_ENV=test mocha --require babel-core/register --inspect","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"5.5.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.9.3","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","mocha":"5.0.4","pegjs":"^0.10.0","lodash":"^4.17.5","rollup":"^0.56.5","babel-cli":"^6.26.0","babel-core":"6","babel-register":"^6.11.6","babel-preset-env":"^1.6.1","babel-plugin-lodash":"^3.3.2","rollup-plugin-babel":"^3.0.3","babel-preset-stage-0":"^6.5.0","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","babel-plugin-external-helpers":"^6.22.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_1.11.0_1522104999520_0.11632484448099789","host":"s3://npm-registry-packages"}},"1.12.0":{"name":"shades","version":"1.12.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.12.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"2b3324baa36a821bbb0312d2111094c287f3b3a9","tarball":"https://registry.npmjs.org/shades/-/shades-1.12.0.tgz","fileCount":8,"integrity":"sha512-CnpF15876cp5sI2+vJwygyhNnirjw4hp5+8fnFWDxWYlQ8nIU2v0tQDB+q3FdYyPWuHrmTt0vxmCcPihmuQ8ZA==","signatures":[{"sig":"MEUCIGrqRstIRnZrw+WTOq8hMpoNr6yohbVvT6gTibCZfEPEAiEAwk+6q4BfQNUtQWxSwH1p9GIfFPMmxle722QaDS5s0AE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":331626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBwUkCRA9TVsSAnZWagAAG4AQAKL1wmmvQeaOj3ulXf/d\nc2d8Si0J5tm2MNaZYkL7IE2q8N91SRgOv316iNsUhfdsxnHhQ+g2OKjYnW9E\nIxn/yClPRdOagz0V3XhtjkZKC0aHX7eqGkhiWVBDofLRDHBubU9glrSJNrPA\nGouFxQfAVki37IbooeZpAHJB2twMTvyOEdT3XEKUDbwPSedXRmv03iL9QTMX\ndJzGXLg2nNKrXNiBQzG75jj/JuNjn8hI7gm2cbVUjWhMqPgp/TQbf9BOaDXK\nDywwHDUI3FzS9VP/KtglZbOl0QcCK/jTw9zXD6JNfcmbZ41S2lhzpW9c/ulN\ne+iFQluivoRzXArkLShnBLGxIapIXHsDxAtkEcPsBBsQgFIBgUh+fEyMUUKy\nUxiCjrfQiGE1yNlbJgzbFr2gtavcWh3vYbXqBwbhJbRRnzUlKyq/Cz+NaXss\n4znVzmazfNXvcRLGFQJnOp7gJkm1SWCTvDyQmB/oWenjNmYIF/wOEl3q71+X\ner3kASCO90hIFVTmYa9iIuXUWp0Ip30YB2i7aqvlsOUCp9H34uPih+VROMCL\n2h/wgnXjdAfXPyBy8EmlbhCwpJ0kHVSvvhoTZhM8S4OGr8yZN1hGC/cfFb0j\nXvDsjor1ORZNTKB5Ww9lsS175J9lVh2bp9xR3Ct0p2hksi9oo4/lQo/H5Ome\na8Ks\r\n=Pkqo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","module":"lib/bundle.es.js","gitHead":"7287bc60d3e22054217c396b862c8bced2b946ac","scripts":{"test":"BABEL_ENV=test mocha --require babel-core/register","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","inspect":"BABEL_ENV=test mocha --require babel-core/register --inspect","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"5.8.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"9.5.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","mocha":"5.0.4","pegjs":"^0.10.0","lodash":"^4.17.5","rollup":"^0.56.5","babel-cli":"^6.26.0","babel-core":"6","babel-register":"^6.11.6","babel-preset-env":"^1.6.1","babel-plugin-lodash":"^3.3.2","rollup-plugin-babel":"^3.0.3","babel-preset-stage-0":"^6.5.0","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","babel-plugin-external-helpers":"^6.22.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_1.12.0_1527186723295_0.673473065432695","host":"s3://npm-registry-packages"}},"1.13.0":{"name":"shades","version":"1.13.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@1.13.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"0e9fcecf6053d85e491c2c5c485a46a1a633f655","tarball":"https://registry.npmjs.org/shades/-/shades-1.13.0.tgz","fileCount":10,"integrity":"sha512-kpHVDjwEPKSAFhxS3WapRxEReHMfQ7cBkSpVIH0gqOdNYF8PfysGbg7YU6OiRcih5BcO4HGsyYxhApEeS8EpQA==","signatures":[{"sig":"MEUCIQDiAKIoFeJevSYulZw0lwQf6EaHNbAa0weUSQX7kRSVQQIgY3M2WrPW4mCLodi97vvSkFqzNSioCmLMJFvvaXDDCSo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1139028,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblAKMCRA9TVsSAnZWagAAvNwP/1lqNhj1HEVI0V4oZi4N\nAmhLacvqTkL75sdGTY0Q6VsvdJ/hnLlMCw0O+NE8xaha6kREqR+D3CfBb5NZ\n7NEeauO7f+dsnEZkSCBaOo07I2spgFMqTIg6sBBraNkX4jD4/f2vM7iuDN9u\ncFmVri9LwdFnmYsQ8LbIXDpBan+6x+mYgGtbRZAf1urgFIED2YSkUrKXOjDY\nARMhgaRk+k7Pz9sWhQGPvRGbm0h5pU9umPi0lHQ+tX7gpZodim3erSs5hIvU\nZxloFIrFsDO5mTLgKgKgYzPGPWgXa6AdBDRFgXwfFvb7pYsbxH0kEKcUS7qc\nt54Jp4qhDcJCP6viBh0VTxN31ZRlscCHtT6HxbWn+BfgYjYU7CPDhAsTguoH\n3o8CqrYlMU0qSny9NvuKrDZ8RiCrN86CPpLwLePDIYVsAVXObqFvgFcBUkY8\ndpD9nKKHkKZPm4k4p80Y4sK48IjHts0y8KdefIChMDAimKux3lzwuFzB/6hI\nXSsPMhrGfjTiIDiw+HTZ+eriQSrxriS2Qw/BKc+RH/uxHpr/q3O4qfBLaj/e\nMxkkM0/mlnaQNSxhS0bQocHY1Hs1qJDv/1ArNcMNzCSEqZD3zgNWymLSZbIK\nHzLF1wwUr+ufzQkAgu5wNnArsCz4Ko4grh8M1S6lLsN4ct8oLnxDVKU/soNN\nRfPe\r\n=Zjj+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","module":"lib/bundle.es.js","gitHead":"deb0aa6f26982d9ff8dc2abdaf651a2c80217bb2","scripts":{"blah":"BABEL_ENV=build node","test":"BABEL_ENV=test mocha --require babel-core/register","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","inspect":"BABEL_ENV=test mocha --require babel-core/register --inspect","typings":"BABEL_ENV=build jscodeshift -t scripts/typings.js src/utils/list/index.js","version":"npm run compile","preversion":"npm test"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"5.5.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.9.3","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","mocha":"5.0.4","pegjs":"^0.10.0","lodash":"^4.17.5","rollup":"^0.56.5","babel-cli":"^6.26.0","immutable":"^3.8.2","babel-core":"6","jscodeshift":"^0.5.1","@babel/parser":"^7.0.0-beta.51","babel-register":"^6.11.6","babel-preset-env":"^1.6.1","babel-plugin-lodash":"^3.3.2","rollup-plugin-babel":"^3.0.3","babel-preset-stage-0":"^6.5.0","rollup-plugin-commonjs":"^9.0.0","rollup-plugin-node-resolve":"^3.2.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-typescript":"^7.0.0-alpha.19","babel-plugin-transform-flow-strip-types":"^6.22.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_1.13.0_1536426635219_0.32553164416243097","host":"s3://npm-registry-packages"}},"2.0.0-beta.0":{"name":"shades","version":"2.0.0-beta.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"e63d74ac6727abf11c6aeffdd809a531a1692539","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.0.tgz","fileCount":40,"integrity":"sha512-w6oToM6xI+POAs9/+aUVz4yfWeTRXeo0qsMo7n/VNTDwagRlIqgZ8voc8/TIQ2bqYQyJuK2MI6ClTp22/uhSfQ==","signatures":[{"sig":"MEQCIBpbmgCiAENK7/F7nGn5amLlMLIfFuG/kwgL1FiXgtwjAiArWXC/fg05klhRM9LylsGDwrpdBuAkbJvENuKEYzFQSw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1466906,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEOO7CRA9TVsSAnZWagAAUlkP+wdK6e9fYBsUSdzWQ7wv\n9R4rFNWqwPF2CCkYZ2Ldle3F/+Oap7XZfxIaErNGypAgnCMqhq9N3Tu+EWH6\nZDz9ec+BGJtybISeGAvPah12XjlC90+e6aNTXX9ym1AC9D8jrKGcwBbnZRCS\n1DXFd1Oj1iwe7ZEygcoSkYYtaJfIVc4048ORpbOchEBLxjDG8XScxSK7YlbB\njmu/+u25LrYDurpZ7P0WWO/sK2lXoi0iFszFhMeJoyWM0BCvZw+L+svRC3/v\nPCQCtn0waytNS71B//0iKWwokDARyRRUAQhNtGFSwqPTevLWNLsgfembMB9/\nGge+iDwq6+gCeh1oyvH5kIkselgNofA/o9K8iWcSVLI6hgjcIWzwjrAsVr9x\n9TuutELYYfY2PF9p93z+LwGRUt4OwWF+8hpfYvMu5BPrFelVHc3DOKi3E6Qs\nHdHtAZpfGnWBvCPtcKaGal6AbQdqwVIJU2GrrnYC8k1QSu+wuUeiedfQzlY7\nB88kBN4o4+LaRpJuTV+9Wj24wqtHxoX5ualdmH7hE5eF+q7htpGmWijSCUij\nCIZD118WmHf4NBrR+GxjJXBerYuvsNT3zfkrvikaFnIGMDbhNdIik6XzS8CG\nmtzM4SGhdX7zSbujs1oajts0kEHcLjJve/EcsmNha7EfWU3/sTHx/e6suFuk\nymFA\r\n=XwFw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"f5a463e95ae99217c6809d2ac45c0d80b857fd7f","scripts":{"doc":"run-s compile:doc; run-p doc:*","test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc:use":"run-s doc:use:*","version":"npm run compile","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"prettier --write types/index.d.ts","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n 6 >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.4.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.0_1544610746677_0.09612234874003622","host":"s3://npm-registry-packages"}},"2.0.0-beta.1":{"name":"shades","version":"2.0.0-beta.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"6e80b2715f7bc6fa2e394ef2e5b9cfa0049163b1","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.1.tgz","fileCount":10,"integrity":"sha512-lnjoHfL/76gNo+SBzQtEVmp6E7Cjv3whLmU7kA9OwbDev50A3wkfb3mtIPN6Wb2D5Fo0gwzotYZjsjzv0QItcQ==","signatures":[{"sig":"MEMCH2qPnIYG56YpbZd7KLNpyO78oYz9oRZj2y5l7A+e1RUCIBUURo9znJsMbEXnbOdFIcZMxzS2plHhsIDA9Nov6DEq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1348662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEOTpCRA9TVsSAnZWagAAPkkP/i+Tk3xHcmZeEWZo5N6q\nR0plgzLfCcmgLZWDkIn4a1Zq2+AgsmKXELJwjoiAXHIhfgT4Q1yFya9LTtw4\njOQOANQPZ0ETqOtnWrVV8SK5rkwf50AhYjfGImck6S198p5DZDfUt8bnJg2S\nPJlg+T9dbZvoQ/Eww0C0YAX+0JlyR7PCb+mOKsxIUZ9UqSdx+3Pus4lk2zEz\nEUdU17dE4RvCdVycjolSGdezT4IlbB8+SowBrxXexuC9OIG8tmNTu2N5xkt2\nVR5ltpTBDBVO/JszdHusWJV2eMpxuYwciTwCdu60dvqMsQZ0ipSXBWt89AyM\ndGC47gcQVkCIAYqce++i7cL+bFrWiO7VZrJ3kI2l74D/AETEd7HsupZey79c\npn8cVszCwieFbnlFStM9OFfIHzcweLrgkeCG7RVqef6WPmO1/yrbNbmX8zaD\ntJl3VegTo7xXVyf5vs4S1y/OLcawkhvHw9X8b+19oLpARXZrpWO9XA5nKcjS\nUmHBrrZNhq7WPqQcEyLOHJK5K97dJ5AcUCdJaj9Mc7dKssUhKtqSv367g8H+\nyimV8BPErx+51ZEIE9NYDVdTtYzzTJAbR7Fc1sUeOql8veOyZ0BIc+4vYEVD\n9eu7vuWqUbqJu/zAVlrHIL0EQ+oBw0J4JFV9OuBUwWaqt3jiJlz5ZA0UoI99\nSQRW\r\n=XmTR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"35131f345862b89383ccb6c28c18312cadd0d9eb","scripts":{"doc":"run-s compile:doc; run-p doc:*","test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc:use":"run-s doc:use:*","version":"npm run compile","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"prettier --write types/index.d.ts","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n 6 >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.4.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.1_1544611048590_0.5210384281276577","host":"s3://npm-registry-packages"}},"2.0.0-beta.2":{"name":"shades","version":"2.0.0-beta.2","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.2","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"19379ce90a9f919a454b6761dba38ba87df1af2c","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.2.tgz","fileCount":10,"integrity":"sha512-oFbOa+pebyueK9DQXcxliVuxE7+mUxHAHyQygMs1aBakEma+3keQ/+novltulD7Vv90h3MVinC1+t9aS7MpIxA==","signatures":[{"sig":"MEQCIA5G/iX6CB98Gd8YyUPbzxguImfQpOP1iQwpQ13qygwuAiAEHVG4yb9N5IWWRmfYyT9vhsG7F+5e8QNYl0ZpwC3SNg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1348658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEOYtCRA9TVsSAnZWagAAPRQQAI27uHI7S7gMJKo0yrgY\nca6h+B5CXeC1NxbwvBVX23XkeOwEHy8c/uRkUZb1fpxjA3cCjq8/WdnZT6g8\nG439aLtZhjq+vbvveUEC6RTnkGi0I/DS4JySo981gwFIVDzI2aJgwGhoSuVf\nxHEeWbEdUlBYNMFRjRqRai2LHF9KpNg2+yZ7UVGzxMClN+0USefmYZ2hL4f1\nvX0b82Bci16J7sQw2K4nL60w6nUv/Y51ZmS7noL8Tcb45xcNLkFAevsbqEhQ\n0jkM2NfczaIcjw8ue7FhKzOLACCRuk/KtoQLMKBxo2cVEYwiUNy/xGjBF0nG\ndH4Aj1B6bC2+gFKDJZtVfIlK3BI/fspqM/frY5tsagA91ufxBsj3WnhG07FB\npNGpYEdalR8kVxqELeqeBiaWO0caIA2RIJWKDv36VkSIDWAHEfZ4xiLNwxAZ\nOQuWv2IQXhPCeYViLRU8hTJgzLWw1R1HOjFuwyRxv8yTaegA4xiUQl349iNy\nLvnHjMYaq/JMFoZzW8jUghbS8MI9nUqZvIZZyFsp2Zst+mLd5+CY1OTcYLmQ\nido3wEWmlD7gReSz3GJEoDKam3gk4oNDfwQiWM3c5HBLBkeSx/iAoP6jWw7o\nlnWpvxgkj+E0t6rInI5BQUxcfcEkyMe/4v5uZffrzQdsUeVcfBOV9PjrFfA+\nI/+1\r\n=N4XJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"ab43df82aac99adcfefadadd8144f56a4a1a47f4","scripts":{"doc":"run-s compile:doc; run-p doc:*","test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc:use":"run-s doc:use:*","version":"npm run compile","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"prettier --write types/index.d.ts","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n 6 >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.4.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.2_1544611373421_0.1935487851651292","host":"s3://npm-registry-packages"}},"2.0.0-beta.3":{"name":"shades","version":"2.0.0-beta.3","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.3","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"3c423fbcc91b2c0632f7b4be3eeb2e950bb0a5e5","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.3.tgz","fileCount":11,"integrity":"sha512-bxCBPGk35n3uslUjwf8HYnaQslikre2bXfkIllb4wFW1J/Y2cW59Pry4dNDeXm1me4ipVnpaFHljAKI2VBq6MA==","signatures":[{"sig":"MEYCIQCXJLER1tl+AXkRzIBlMIC+h/Va9V/8WMH41AF9Jea+aQIhAKNudzL/h5uxiTI7kbJ6A497NQAqnVle/SDT6r7twggo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4786921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFDJbCRA9TVsSAnZWagAAjLIP/iB7UoD59ideeHNmPgrk\n54hG+juCZkhwG9e7ck03UCsvxBoA5EyBUNJd+IFF10Bmz6sS/c3wzj7cYrzT\nmgWgC+B18yRIMMKeImOCuz9AcKW7IW9pkmpnxlHlRDFtrZAUvilMaPavOnKS\nHnqQGZIrhlRs1N2NXOs7G6oy+BQ1+KnM4rV9/WpgeYxODp9iujShxDAfeRXY\nXies6MaZ/Jr+RyD2sysvnDbRs40Fl+yce5XIxRNyKxjfE5h4H388bBTfJ0jH\nrr7b5ZdkklxmIy7l39w91R2QAUqMb6Q70cuTsO0F7SKB71KY1UKJOPhCMuOw\nVgTBJx3J6BammnaBFSC0WsDh3IOYWcfTc5xzwMa+Wvk5BsfY/CQagv/3fQq0\nMmUEeJ8fXL/4QHwcbqWBv8Mo91oP2ata4sCapGVqEiZwRmbLBHIrk+dDyrbN\nVBvyfjeOHSBhgOii6x4hI++26+NCI2PUngAFGk1zsENnibvGnlZl4D/+Bq+3\nli8ivA1W9IsElIqs57g/JwptBuacde+jcd4exUuP2+x3AYYGP+c7g8VG6Ysd\na+o6G6fxqW7vMGiCNL6vRXLCzOC1yBQE+4E8jk3f4R4ANR1OMdhJ0Gj1mMUS\nnc3b2hXUzPWdxrHKUcEj+/D/qAprXDSUYNUICnD0DIV6t/Y0LRDRfkHqFYnO\ngjeT\r\n=MW0T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"878c3c158f98f0bb2bbd09ac2fcf0138a42c3a21","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","prepublishOnly":"npm run doc-dev && npm test && npm run doc-prod","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.4.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.3_1544827483165_0.23118785577153633","host":"s3://npm-registry-packages"}},"2.0.0-beta.4":{"name":"shades","version":"2.0.0-beta.4","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.4","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"10d6971c0be0a5e70a89476c70a4d4ff94d5e071","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.4.tgz","fileCount":11,"integrity":"sha512-9cd0ot4GgMAuhFsmrIiPdIp6fgqYBOpLdoXWp3cVvPlbr+WM7aPeMfybhMBJoRdgUvifOinoisaVAZ2OPgAl/Q==","signatures":[{"sig":"MEUCIQDFBY7uyslb5sZpT1n8RzLlt+IzUK5jGqOlBQckvFlXTwIgSc7vhA3ke/kdHE8VPFyZ33zhcHZY5C+2faIjVgFt5Pk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4787607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFDXuCRA9TVsSAnZWagAAzQsP/AsD19cLjc0ceheoHlUI\n3qFWIBFbLZQnPU4WI7BgYTBJ3BhJVP4Ojs3mfHBOixQizv6nrE+1o+LN2YIh\njWbpjKYKsQYDz804KUBg8BPlpuZEMNoQxV4X2Dytc5aCvP3psEl1m+uSZY2t\nxOBXlYRul0w6nTieVVF836EDSjzztm4GvmwhPohvgYjBqdtJaXUttzwpzrNu\npl2JOVjVTA2FRF8DDFiu7eKAIZ8Q3+IXX8E9G6vIMRkxm7koXNlsT5CzUm5f\nj/lL2cmQBITAJLQohkC5PD596EjpP/EQla2hWeXfWz0+esjYh9FKu7NQiykG\nFfC2G7b/pwaFjlQghI8gi228EpW/h74ehydYuUFF2ZLV7rNLDCng3t9G5pWq\ndgfXCaWxO2twpfQGQXeGrvQLhiXvcvJ63jbdySidCt9ALJHtDN9J6rNo+vsJ\nDV8omxXzxWrOXBSkR5stm4dXaQiS1d84WcsirvnZo3yLkJtrUnOVpzYznhA5\nd3BRm3DN8tYnmRb1nOfmFBq9UZIWCzKXdFFdAB8SHyZdhuq+KJGw+pvgTa7e\ndcshJOvi0xkVJwyOqWp08B/6Udpk1PBoDxa9qi8WwpEO87d4gA/2qbB9XZ1v\nKVYvbw8OrTBfMF28DiSRnshQZwp1IQT4/TjpqB+FyDYR3+SLR7wRSF7hXCmD\nDnbv\r\n=Qrcl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"a0a1ce5f97eb379874316f3a19c36ff0858e1853","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.4.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.4_1544828398362_0.5066118448626797","host":"s3://npm-registry-packages"}},"2.0.0-beta.5":{"name":"shades","version":"2.0.0-beta.5","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.5","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"7591df94e69a8eee88861b8ea8cbf0fe6fbb7eeb","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.5.tgz","fileCount":11,"integrity":"sha512-8yagonsdJAkSyoKgks9QdYNltb1TNS/6dZmlnlb1lbPxSPc5TzXvxxBYICrN8DCmj6kHC7xc2/IIsuBRnkIdpA==","signatures":[{"sig":"MEQCIHstyh2EYHVsQgwfU2RSu0PfjXLj9xq729innEdVrslIAiBamCynSaVaqzZgkBbZL7/zfcoNosvroJ2b7rHMQwU3LA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4787476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcFEW2CRA9TVsSAnZWagAAGZEP/1HBozGDCQ8wWn7QcKiU\np1054uhsNi9QEjVloy/YnZzSkcQnzLDo3bf+ioNWr0a8QMGqRQwOUnvsz6ou\nq8idEhZ9qR7k/sOGAjGyyCUr4aOU6SdHSgnNuzYlRVEVYntbtZW8xqHV0i2d\nV9J+UZtvZ1rl3jCCF7F3Y9GymYZh1Vp0lZk0EZRd2BqBmlGGzPONWiLfEMji\nzl/lgT4D3yXjYuVUz8isrTz5jHXoNdVB89UeNDg30WAn4rl2irp/VM1uEDH2\n/8f/YQMFX5qMt84bSubU6raDNJVFWYZFszneQsy2trwc+CVUGhoQqELvmtqD\n1wRJ6s7TzQ7fNyYu9QmZGkoMDLqSdfh6TPny1enp9OeMjCixJOKChRu3jmK1\nqzimgWWxHSUqaYri98iY68tFvm1DPVTR0BY4C0kBCJ55yCeytor0BKgIreww\nzeXiegt0kMfJCcOTGUknaDEliT341NyqWh6pbB8jqRK+F+e4mPr4/11BmyRS\n+bIQR/D08Ki45n3yruUfzZg5+BrbpEESFaRjCEO8MtSrpjBO6MQ4mPfsQpn4\nkjSPdCBPdfyIvlFFFtjYHvW/kwh7lpvMtdckA4LF+ZzeViaozJQcMaaHKJaA\nM6FxF4VTif+aLndoFz5Z3YuhCoorYKJeD7RH4u+NYdsjHfcv/1+lpidze6qb\nsJQh\r\n=HYf6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"e5e354a452f45da713524f68832254ea870df7de","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.4.1","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.5_1544832438013_0.45954635833052215","host":"s3://npm-registry-packages"}},"2.0.0-beta.6":{"name":"shades","version":"2.0.0-beta.6","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0-beta.6","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"e55137ed43f7a863ea1be190f4e0aa94a9f37241","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0-beta.6.tgz","fileCount":11,"integrity":"sha512-lsCzQ8+dZ+NkmS3YHfL52hx+EGGLTOH8qjqkMHIXYEz00jt0PZsy30YfKs7B6QgKR6GHCOoQUk5LJKZblEkR2g==","signatures":[{"sig":"MEUCIQCC8yGx6aFoqY00lo/p0GmTHO8r+l3d8kn5907llC7z3QIgB/nsvYUITKu8UjSNTZWdupWEsmpzgXrULPdt6BJU5yA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4787864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOQ6cCRA9TVsSAnZWagAAG4gP/RWJudN2MGx3qTOA6XOz\nAmHMtgQ5pl9R9hNqC37+sWqZ5Cvi/zcRavPrtmwv5gVcml8CwMybqx73aoI4\nuR9QjKry1X3m1KxchPQIFkt+wjTyGkJComeGOn/eztftrmFtthZB25F2q4/Y\nLTf5KEAwd+Y0QDTeJuaPxLiL/zVNaHoAawyW5zewTEGUirPO0X5/2D/B5aTa\nEm1jtZaLsvw+JQRv54He7fJDiIE5C4DrvwbpXMHoDKUaU/4TnIZQTkVWnPxf\n9NaYGMbp28feLtktqjyxXhtfNuv5zPdlLaL9bd0o/ccUSp08cRmQtTVhMTc9\nj3ZPdGRhn0uGpHnuFVF9NOVUcMeSorQ9ukK+QKl95CAEEHllUav6+CYrR04q\n5fwQAC9xHTEPOdcoUijurkvlPevRUum9FhAuOspc+pj1LCLXoWgXKDF7Foyf\nXAAwTaCdIPN1fkN8kXcHvs7+ZJmBBdqLpBfwLaw/vxD2GtuMGstiZmgA1peQ\nzPIj229/ODPbYLpnCYLF5pKfgdZmjgZMONnqx0F908HH61ulpjckyU+4CuYO\nbzsccrak8lA7oWoH4sCb7DTHZ4HHSoq84lKhM59NY5C70vkFdnhAT6DGmZqD\nihRU//Tq9mA0hv1EfIxz27kiJ+NrGjUULkDgMZ2C4shhYsRfCSmM51YahQlI\n1P5u\r\n=49zk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"e174897fb2ef5c53c1928236fa43e288dea5a4a9","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.5.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0-beta.6_1547243164175_0.6136414357949391","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"shades","version":"2.0.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.0.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"ad00cb4dc4ec2c78fc9beb1b3856451a7ad1e236","tarball":"https://registry.npmjs.org/shades/-/shades-2.0.0.tgz","fileCount":11,"integrity":"sha512-LcHfvQyv5Wzjj0XpkbLvlPiXmQ8ZaXMscBajZVuyjybxYFa/8QdW1iEKJ5XuFx6oufUB2dgUkFimV3H5MLAz9A==","signatures":[{"sig":"MEYCIQDNH5s8XcZ1zmzMMLgILEc1Gy74/4hTCVY9ot5v4xAHwwIhAOLMfocQdwcHZt73Y0rHAXAMzC6yZvFU7jtzpT/BhYOK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4787857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcSJpeCRA9TVsSAnZWagAAOvEP/3FwGwTqrMx6b9DpFHyw\n7U9KI/xfbe7j6aUoKKvCrPb/YGqRUz9Q1dqbYTCy18jtmiMaILWrLu4yLtKN\n8oWYRODRg8QUHM271xGcQubUfUqL5LtU05Fw/uq9f+DeMMG5+rMMo2nDtG1I\nfguusEUoKRLEOtdN220zvlr5z9tfRoPlEYuFNi/coXlO2L2V/ZCiy0BV2b9l\nOeS8pgEWxnGnYCGvc8DDpfwM6OKFUCuaNlL+3g/w7wbiOrhB2BC2xLk0p4hu\neRjo/9T/nVAEyoc9AiEhaD2OgzbSuobtM8mCFula6iezCffZcmFuWjR0y6mz\nS87CcorJPpxiozWT71YGtakLYkJUcSzC9hh9DouFYS4sYTg0X+Zf3VCCbnov\nwaGW5I7NEsya3EgbFWgcFJX68yOWKNlLp3GCU+WQcicIg993iGomRU0un5mV\ncW6AjYqNJgCeBDpimDHF//fsdt9vcbybL7OYQ53VY0/nhad8O3jvQJHgWPgn\nHVwOGD4blci5Atsqez8QpIvWDK6mL7r2g2Yju7JqS8fV70BJjEDoTQyiWDhI\nN2LNwJq25hHHagxLzopJ6PDnsWshVCRTFlAFEwXdFX4CHFPZYCU1Pucxoc6e\nODnbbfXDnkrZqNArc57qztUAboUm2AdAn2Hy3w4bBCCN8CpJTJSZiBIlZJlI\nGciP\r\n=IO/L\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"665363eb5e4955165df5ec3ece280e892566b47f","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.5.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"8.14.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.2.0","pulp":"^12.3.0","bower":"^1.8.4","mocha":"5.0.4","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.3","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.0.0_1548261981470_0.0963719731387489","host":"s3://npm-registry-packages"}},"2.1.0-beta.0":{"name":"shades","version":"2.1.0-beta.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.1.0-beta.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"f48dc11d89f82a6305548befefad6171822c2a3e","tarball":"https://registry.npmjs.org/shades/-/shades-2.1.0-beta.0.tgz","fileCount":10,"integrity":"sha512-l8kH1Yy/oLcNefFhSH9leufD7pGaFI2lAXsFeZksx6+0hcXm1jzkcG0lu9mc5IrVAKfbvZBoljUCJRXRZYpMIg==","signatures":[{"sig":"MEQCIHIJeDA20NjkrWEJihiWuBhd9Ap/Vo0QKnY07OAU7NWDAiBP3spqyI1N7KJdJG/8PkjstQHbeY6Qp2LlmEaFAkzqaw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4599108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0hYKCRA9TVsSAnZWagAAuAwQAKG5d4cdGUq3Xu1zSDJW\nPmXDJIcnJXS312Neubx6OBMa/612J6zQ1fbKCKDQhq0zNpdvBXwNsx384ZcQ\nIFDgo/k3ozqIJlIHBCZxoIRVdRAMd1XWV0eo9Rc6GWE2i+/5iHa39jLOgYBJ\nwFtB4l+Xu1dze31+wezhDiWeFns3u8aF3PnSajjNUrJ2DPOBo36CD1dhYgN6\nUPbxQj2yb+NQzSDdwJfgMcLJzN9QWuajpmaaw7GMT1KlaR+I+tjEQDYfOO5A\nGrnsTJJ6DieqLBg26FNwRXse1mi9dIUyJ/bz/6S8Xsoc1IHt0kIDMAeeLBvK\nsIIC/QQ1M5Li++Sn73tkYJitWeoSIhhiuvuZfDPv0eBzSoe16zWzrNrWfpeB\nPZqeqmk3guCyIUIbxIenqvEewCsuFHfeyizMx/ZOMcSgLiNV79J86Mj4rzb0\nrkg9EJim/ir+RnD4ON7UxdmlYkyon7sdbDalhOrBI7ehOUtxDrK0RnoXUl3b\ndtKZ/T6CrvjJnS2wL/VR23g/4HY6eY37uKrNBvPqmk4Zii9TR0hxicEGygYg\nkAsLviq1INierCiKH+bj5RpwtOCZETG+3PMdcaCgGahrXExh/mm8J7U1CMvX\n4yj5MhQvmnqgtABOgVzG/NJKPTE4hkHrZBsloLw+L/qhtwm7kTAznBfliVPg\nVmDv\r\n=XKDs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"36778d89f71915f4f857f86de1d2bca6b4d6a7a4","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.9.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"11.9.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.1","bower":"^1.8.4","mocha":"^5.2.0","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.5","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.1.0-beta.0_1557272073707_0.5533478088523585","host":"s3://npm-registry-packages"}},"2.1.0-beta.1":{"name":"shades","version":"2.1.0-beta.1","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.1.0-beta.1","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"e8bc9649bbe7fd994a5b6b42f7bef045188ff306","tarball":"https://registry.npmjs.org/shades/-/shades-2.1.0-beta.1.tgz","fileCount":10,"integrity":"sha512-ADKqzYcPrZ5GBnMYd+/r/cq0byzdIFgnPfgUvQQMU03ml3e2WY16vAJEmGzdeAtvM+r5cGmZhdhpkoiChl+AIg==","signatures":[{"sig":"MEQCICdL+HvrlhbmqkrVqomiiZVGp0vVzNXEDHZRlKaC1u7qAiBKInjHjX2JRYhlFjRzuCOZ+OHkiTMMHsxWzMvP4wFWsQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4603400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc114FCRA9TVsSAnZWagAAW4wP/1jv6xcHZ/We83Iqkw34\nyMjZXkhPGzh0/XVWDKj5rOfdAfnM6tKZxwz+ra1yEpEDaoH/1Q01memHSWwx\n5fdTUXFN3ntavVDUo85FuABtwRBK1hb012lrHqXVXSLYOpjs4yS1JbRva2GY\n64H79G5z9+kcSiTweFnrJDwNAFdtuRySXj/Mh01oOSuiZWg53CmAEkcUdFEX\nNXJ6ggEt3z+ZSIr9AWIpLAnmS2+/ACDCEOaJh53TAYHfbXoIBcODSlyPd3F2\npJaZ2dzXjUKxkA75/OhnzCfMPNBKSp7rGzxmvjh9ittFmmq8qRfrFQYzLDXl\nkIHu1uIRUTiABY/uqC4sCd6cywdl2P1kq+aerkxSklKxHStMAW974vHwsN53\nJlvea9Ny+/usKz/LSwbUgp62j5XQ8HfLAob9BRLzV6lQgYZxPV1dJrz9CRL+\nrh9S/VNWombcfvZfmgC1uMjnpxpj3ia3iNjEJcRswsxDZBgroQPzNM82y8sy\nD6bSzzR1cTQzglAWpqXArBbo6wsuxnkAQ1FKjod0SQ1DHMLRZxnX+8roM9NF\nkxvmtXDcuX2Uf37ZyeqxISVn04Hgx+flSu1cl+6TU14lLlTtMj1FJ7UuSHC4\n7zVaUqK6n+D3gFV+wyaGPFcIVJ+GdunW/jr80PuT3Squv0CloGLvvX4oaIQf\n/vR4\r\n=qgRn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"00fa366b15619e9a9e8a77fc2db820cf5d97b07d","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.9.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"11.9.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.1","bower":"^1.8.4","mocha":"^5.2.0","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.5","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.1.0-beta.1_1557618180875_0.7713962496295383","host":"s3://npm-registry-packages"}},"2.1.0-beta.2":{"name":"shades","version":"2.1.0-beta.2","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.1.0-beta.2","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"04a0efd1ceb963dd955a6fbffce868846dd60dac","tarball":"https://registry.npmjs.org/shades/-/shades-2.1.0-beta.2.tgz","fileCount":10,"integrity":"sha512-NHqK3wAyBu9Rch4PUuTYpo7Ektivv7YBpnX+VfIN5ebfwuErRwTwdbQfmW9G47Jn5Yq+4j9nV3lNk3hTQNe2HA==","signatures":[{"sig":"MEUCIBHMA202JV5Sh3zpCzetXLKiJzT2Ep7kw9A+CJd53Gl6AiEAjPVXH7dkS/srISopOI6ZTkgOWZodDYFB8csMv/BSS3c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4605560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2HTGCRA9TVsSAnZWagAAPqUP/3xVtKlk8skxac8gIugc\n+9Qh2Fx+PaP6TVxZn36zp9a8rVWg66Y2FoIlGOCBQ3EN4dRqRRiwytiTw9HY\nZG+zIGYp/DQBz8ruq3kwmtCU58aKycnWk9GcFen7DQcZ0hosX4ArWVEEWZY7\n5qbfj4sFrjtHxBCurpfM6V2+OlT3LL8RgVtwF3fu1IjhpNiYd9af7OVG+S8y\nkPoHNx05iAshEWc5GaIsuviVxhu6ayGBaSGuqHN/u5kD8vUlSuXIfyK5dV5E\nJTOZCGI60+JSidHk2oveb1Us82pakTzOiLA/DCLC9Z9FUpcABw1CnRu96L3z\nQOAn4yc8MKHWL6VrWxIOHJtyu15w+L0srKv7ztDpaS8tx2dBJ15SQ/Yd2bxj\n6lxTcrbihdBxrsVUgX8qAStyn95VJKEjowZDFJkfx8dwlEwI20aJkJbmG41X\nK1WhVH2A00vk8ynMgq6q9oxsr/gYxqRq3PQQCgAEZdVR0Qw0Bl3hqb0DxJ9z\nS8MKOL5ezhAOez9VG7DnFxK30h1q0pxRid/L5MZaQR4v3jpUh4QGjH8S5quF\nkaNzMH2MWJwcfYdEfGPBIeEGW0L4ho2OK6NoVYNKfa4kzQTBeTn/v7ZIdyi1\nn996UMdWegIJ+N813nkXExbYAfJdmZ7HBSoodq3+cKX/g0SJsn0Uyv9/fqfK\nx4Xf\r\n=Kc9B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"b99a7316a27c33a0f895cbefe2a58eb13d4a198c","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.9.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"11.9.0","dependencies":{},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.2.0","pulp":"^12.3.1","bower":"^1.8.4","mocha":"^5.2.0","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.5","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.1.0-beta.2_1557689541908_0.6948330978381778","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"shades","version":"2.1.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.1.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"5cefc51f6294769e3413d4e4050c9d4e7b00b245","tarball":"https://registry.npmjs.org/shades/-/shades-2.1.0.tgz","fileCount":10,"integrity":"sha512-6D+4+lPBjc95ptStD9PzOfrEc2d7zwxWVn2SFEbYaI4EXB5+tcChhyGwOEvbEjGb+d1QS44AcYcSYgWNz5grzg==","signatures":[{"sig":"MEUCIQDkLvbzl57+MNYsBGq857ak/F+JaMbn2/tdiIP/TcKbaAIgYwY+/ht/3kNohp7PLTlm2ZK6DdNo1oIJ5cF6X7EgnAk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4606521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdN4+nCRA9TVsSAnZWagAABjsP/35tnYh6ZK7xWZwDAMxt\nwYoiZfldiINlpGDxQCVThFyZIDuIACh5WfNtZsKpUGMmXDo5A/pEHIdDWT83\naMXcqZ3U4/DzwqFeGt/tPaLumRgtuYGda7Io31HFksklRiq+H1/Qty3sed4v\nfXrxr7NFMM5uM8lpYAe/+FnX18NYuOh1HnmdGBSQvVjaXi1QHwIzuBUXI0ry\n+1wn+9ERJtpxmViWSXao+/F5kXGGMoOW91Z585jdQ4fHxqTzYsMfRmi+kLQ+\nFirBow88pR+ZevVOqHo7nXvoGDo9WvaWCG6FX+DwFxLtCtyJvVCm6ubv0xU6\n8I+oBoadD9PUFDyUfCV64w4yFQbArwlfpVOPdFe1HyxQa/nJFdC03VB4bl0r\nXzI4Cm0AOyL61jl8tMOeTXmuxkmrLvMAIKyyzGZ+1/KnmWqdyk51UZygsYgo\nj5JKATDXv/rQJNWPlhguRr3no9URABwrsGEGjcG1AVHqm2zkF4+xh+GMd+/X\n66lyAwq27Fh3YHYVHlnKSspI48Z530m4YuKDglLnFSg9/ZOOM7qAi2QS6fAp\nIQnsUcVIx5CfzE+/zG+7UCnlZQ3fRjz+yAIfyeuj6bxtBafcOBRSSB5zI+Ad\nseTcvQw1N3pcjep7+m8i1mlkiQuSkL86DGqJxe2bsTh5zjzUNoap7COmmTbl\n/pd1\r\n=hh/x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"7da8165e962c662c60a7aff7d75ea619e5f749b9","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepare":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"dtslint types","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/test.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/test.ts","doc:use:create-header":"cat templates/test.ts > types/test.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- -n $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.9.0","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"11.9.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.2.0","pulp":"^12.3.1","bower":"^1.8.4","mocha":"^5.2.0","yargs":"^12.0.2","lodash":"^4.17.11","rollup":"^0.56.5","dtslint":"0.3.0","prettier":"^1.14.3","immutable":"^3.8.2","@babel/cli":"^7.1.2","purescript":"^0.12.0","typescript":"^3.1.3","@babel/core":"^7.1.2","jscodeshift":"^0.5.1","npm-run-all":"^4.1.5","@babel/parser":"^7.1.3","typescript-cli":"^0.1.0","@babel/register":"^7.0.0","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.1.0","rollup-plugin-babel":"^4.0.1","rollup-plugin-cleanup":"^3.0.0","rollup-plugin-commonjs":"^9.2.0","@babel/plugin-syntax-flow":"^7.0.0","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.0.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-export-namespace-from":"^7.0.0","@babel/plugin-proposal-logical-assignment-operators":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.1.0_1563922342505_0.12568297987794708","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"shades","version":"2.2.0","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","_id":"shades@2.2.0","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"homepage":"https://github.com/jamesmcnamara/shades#readme","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"bin":{"shades":"playground/index.js"},"dist":{"shasum":"0c9baf13649168f9d81992179f966438cd343993","tarball":"https://registry.npmjs.org/shades/-/shades-2.2.0.tgz","fileCount":10,"integrity":"sha512-MXdFzFoYCQgL+YV1jLRall9AONOKnbEez97GEfCTPSACNR/Pnh+qC1M54YfV9LYDP4UNzL+1SjK1gZFNfsbM7Q==","signatures":[{"sig":"MEUCIHEYz4HrG+tgrpMC/zQz6eWnwayGZb9AzZ1jQm+EJxJVAiEA2Hek5QKDV6sHfPsAruerafrcSNev7BVvOt4fze+e4io=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4552678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+rCVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrt8A/+Nszt/9ZFJz4uhtbulrMepvlhlQ7KqB1glKMhJnvu5EtsolvP\r\ndZdsj0+XiQrWOzUbwfzGWj+jwqX0Szh+qf0DPIm3ThFsFkrcqdcrJkCgg0iH\r\nYxFz9CXoN6EFW4BphfCzs/0LZUs2K39EHbs2uILCELddU9DYpKvWt6cnUOq2\r\nkwhRQzkiipvzLOr3WLHNgrw6rfFHwYrj/2LVo7n/7ofjcwElbDoF+b47LWni\r\nWxD/ZSr/X5tPre8WA9ms+siIf+qFVZPx8tc/4iuYroyAyJaEvvzbh2jq7E9a\r\nQ8lzAFHvK1l3MNGEuTz5iO6zwyQigGAeIGKiy5oxsoHbJzosLT5oEec2SkfP\r\nbh40GFJb8okvC8Wcp9PEj3jSm4JRmPdaPPxiM4O1zuzzLHfI2aBZU0YCWvEN\r\nWjOGnFYxlIEaN9f+EuIWwpl5HE6UsMefsZZOmgsd0YXu825IfbC2F2TOhjJ9\r\nyRYAuzVYy+gSMSXgDYQfy9tfv45jYHPrc/x+aImkzG77A7VpceEeVPx+skBt\r\nRxChnerL1HHLeb75Ze0VaQcG+/QHZIGvLpDjMCxPDYIeOLfQgKIGlGp0oDtA\r\nu9ak8NsN/EYHNsTNaThud5gc9AUpX446zcPMF6EnznLAwxXo5+Yh3vWNSmV5\r\nMfQzUgkU8Eoi9l2cIyhddb2STEWskFDEaA4=\r\n=Z+EY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/bundle.js","types":"types/index.d.ts","module":"lib/bundle.es.js","gitHead":"bde58c0d8058a1a50b0829a589f692498d671a7c","scripts":{"test":"run-s test:*","compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc:use":"run-s doc:use:*","prepack":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:test":"run-s doc:test:*","debug:doc":"run-s doc:compile debug:doc:generate","doc:readme":"run-s doc:readme:*","playground":"node playground/index.js","preversion":"npm run doc-dev && npm test","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"tsd","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","doc:typings":"run-s doc:typings:*","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc:use:prettier":"prettier --write types/index.test-d.ts","doc:test:prettier":"prettier --write test/test.js","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","test:lens-generator":"cd lens-gen/; pulp test","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/index.test-d.ts","doc:use:create-header":"cat templates/index.test-d.ts > types/index.test-d.ts","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; pulp run -- $N >> ../types/index.d.ts"},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"repository":{"url":"git+https://github.com/jamesmcnamara/shades.git","type":"git"},"_npmVersion":"6.14.11","description":"Lens-like functionality with a lodash-style interface.","directories":{},"_nodeVersion":"14.16.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsd":"^0.22.0","chai":"^4.3.6","pulp":"^16.0.2","bower":"^1.8.14","mocha":"^10.0.0","yargs":"^17.5.1","lodash":"^4.17.21","rollup":"^2.77.3","prettier":"^2.7.1","immutable":"^4.1.0","@babel/cli":"^7.18.10","purescript":"^0.15.4","typescript":"^4.7.4","@babel/core":"^7.18.10","jscodeshift":"^0.13.1","npm-run-all":"^4.1.5","@babel/parser":"^7.18.11","typescript-cli":"^0.1.0","@babel/register":"^7.18.9","chai-as-promised":"^7.1.1","@babel/preset-env":"^7.18.10","rollup-plugin-babel":"^4.4.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-commonjs":"^9.3.4","@babel/plugin-syntax-flow":"^7.18.6","rollup-plugin-node-resolve":"^3.4.0","@babel/plugin-proposal-do-expressions":"^7.18.6","@babel/plugin-proposal-optional-chaining":"^7.18.9","@babel/plugin-transform-flow-strip-types":"^7.18.9","@babel/plugin-proposal-export-default-from":"^7.18.10","@babel/plugin-proposal-export-namespace-from":"^7.18.9","@babel/plugin-proposal-logical-assignment-operators":"^7.18.9"},"_npmOperationalInternal":{"tmp":"tmp/shades_2.2.0_1660596373371_0.5466676379046873","host":"s3://npm-registry-packages"}},"2.2.1":{"name":"shades","version":"2.2.1","description":"Lens-like functionality with a lodash-style interface.","main":"lib/bundle.js","module":"lib/bundle.es.js","types":"types/index.d.ts","scripts":{"compile":"BABEL_ENV=build rollup -c && BABEL_ENV=build rollup -c --output.format=es --output.file=\"lib/bundle.es.js\"","compile:doc":"mkdir -p compiled && BABEL_ENV=build babel scripts/doc.js > compiled/doc.js","preversion":"npm run doc-dev && npm test","prepack":"npm run doc-dev && npm test && npm run doc-prod","version":"npm run compile","test":"run-s test:*","test:mocha":"BABEL_ENV=test mocha --require @babel/register","test:types":"tsd","test:lens-generator":"cd lens-gen/; pulp test","inspect:test":"BABEL_ENV=test mocha --require @babel/register --inspect","doc-dev":"run-s compile:doc; N=4 run-p doc:*","doc-prod":"run-s compile:doc; N=6 run-p doc:*","doc:typings":"run-s doc:typings:*","doc:typings:create-header":"cat templates/index.d.ts > types/index.d.ts","doc:typings:generate-typings":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TYPE >> types/index.d.ts","doc:typings:generate-lens-typings":"cd lens-gen; node --stack-size=10000 --max-old-space-size=4096 -e \"import('./output/Main/index.js').then(m => m.main())\" $N >> ../types/index.d.ts","doc:typings:prettier":"[ \"$N\" -lt 5 ] && prettier --write types/index.d.ts || exit 0","doc:use":"run-s doc:use:*","doc:use:create-header":"cat templates/index.test-d.ts > types/index.test-d.ts","doc:use:generate-use":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass USE  >> types/index.test-d.ts","doc:use:prettier":"prettier --write types/index.test-d.ts","doc:test":"run-s doc:test:*","doc:test:create-header":"cat templates/test.js > test/test.js","doc:test:generate-tests":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass TEST >> test/test.js","doc:test:prettier":"prettier --write test/test.js","doc:readme":"run-s doc:readme:*","doc:readme:create-header":"cat templates/README.md > README.md","doc:readme:generate-docs":"cat toc | xargs jscodeshift --run-in-band -s -t compiled/doc.js --pass DOC >> README.md","debug:doc":"run-s doc:compile debug:doc:generate","debug:doc:generate":"node --inspect ./node_modules/jscodeshift/bin/jscodeshift.sh -s --run-in-band -t compiled/doc.js --pass DOC src/utils/reducers.js","playground":"node playground/index.js"},"bin":{"shades":"playground/index.js"},"repository":{"type":"git","url":"git+https://github.com/jamesmcnamara/shades.git"},"keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"author":{"name":"James McNamara"},"license":"ISC","bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"homepage":"https://github.com/jamesmcnamara/shades#readme","dependencies":{},"devDependencies":{"@babel/cli":"^7.18.10","@babel/core":"^7.18.10","@babel/parser":"^7.18.11","@babel/plugin-proposal-do-expressions":"^7.18.6","@babel/plugin-proposal-export-default-from":"^7.18.10","@babel/plugin-proposal-export-namespace-from":"^7.18.9","@babel/plugin-proposal-logical-assignment-operators":"^7.18.9","@babel/plugin-proposal-optional-chaining":"^7.18.9","@babel/plugin-syntax-flow":"^7.18.6","@babel/plugin-transform-flow-strip-types":"^7.18.9","@babel/preset-env":"^7.18.10","@babel/register":"^7.18.9","bower":"^1.8.14","chai":"^4.3.6","chai-as-promised":"^7.1.1","immutable":"^4.1.0","jscodeshift":"^0.13.1","lodash":"^4.17.21","mocha":"^10.0.0","npm-run-all":"^4.1.5","prettier":"^2.7.1","pulp":"^16.0.2","purescript":"^0.15.4","rollup":"^2.77.3","rollup-plugin-babel":"^4.4.0","rollup-plugin-cleanup":"^3.2.1","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-node-resolve":"^3.4.0","tsd":"^0.22.0","typescript":"^4.7.4","typescript-cli":"^0.1.0","yargs":"^17.5.1"},"_id":"shades@2.2.1","gitHead":"3adf26a63c3420ca2dffd8fdf6bdc3fc2c3d6ca6","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-jLfHedCVmTYjyK2iS5zGfBd0R7jQJEs5awvlI9m/IwS3JEv6Xm01p7nQxH6xtgXz6hHdFtL+N5KWD9WVymzyiQ==","shasum":"22d03ee9cb6f3a50cf2fc028025ffbca027e19fe","tarball":"https://registry.npmjs.org/shades/-/shades-2.2.1.tgz","fileCount":11,"unpackedSize":4609813,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC1YiLJrQ8QyB0I5GrOGIRGjFE8fZ+A99JNtQtlkJedHQIhAL9W3pK5nRWijKHPrcpMo9yWPg5+PJSQNn8N3NKYjf0P"}]},"_npmUser":{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"},"directories":{},"maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shades_2.2.1_1770430126012_0.818744554789522"},"_hasShrinkwrap":false}},"time":{"created":"2016-09-12T07:07:58.017Z","modified":"2026-02-07T02:08:46.313Z","0.0.1":"2016-09-12T07:07:58.017Z","0.0.5":"2016-09-12T07:34:26.423Z","0.0.6":"2016-09-12T07:36:58.480Z","0.1.0":"2016-10-15T01:39:28.531Z","1.0.0":"2016-11-04T18:56:09.435Z","1.1.0":"2016-11-04T20:16:43.340Z","1.1.1":"2016-11-18T04:39:33.275Z","1.1.2":"2016-11-21T21:58:31.134Z","1.1.3":"2016-11-21T22:20:50.761Z","1.2.0":"2016-11-23T05:11:01.612Z","1.2.1":"2016-12-02T21:55:21.645Z","1.3.0":"2016-12-10T05:24:44.412Z","1.3.1":"2016-12-13T23:03:18.747Z","1.4.0":"2016-12-26T21:40:26.157Z","1.5.0":"2017-01-05T20:04:34.655Z","1.6.0":"2017-11-08T23:47:42.594Z","1.6.1":"2017-11-09T00:09:27.752Z","1.7.0":"2017-12-01T23:10:04.842Z","1.7.1":"2017-12-01T23:37:20.393Z","1.8.0":"2018-01-10T22:10:56.867Z","1.9.0":"2018-02-21T19:27:08.162Z","1.10.0":"2018-03-09T05:32:25.587Z","1.10.1":"2018-03-09T05:41:34.516Z","1.11.0":"2018-03-26T22:56:39.618Z","1.12.0":"2018-05-24T18:32:03.587Z","1.13.0":"2018-09-08T17:10:35.919Z","2.0.0-beta.0":"2018-12-12T10:32:26.900Z","2.0.0-beta.1":"2018-12-12T10:37:28.801Z","2.0.0-beta.2":"2018-12-12T10:42:53.562Z","2.0.0-beta.3":"2018-12-14T22:44:43.467Z","2.0.0-beta.4":"2018-12-14T22:59:58.505Z","2.0.0-beta.5":"2018-12-15T00:07:18.181Z","2.0.0-beta.6":"2019-01-11T21:46:04.348Z","2.0.0":"2019-01-23T16:46:21.597Z","2.1.0-beta.0":"2019-05-07T23:34:33.919Z","2.1.0-beta.1":"2019-05-11T23:43:01.028Z","2.1.0-beta.2":"2019-05-12T19:32:22.093Z","2.1.0":"2019-07-23T22:52:22.769Z","2.2.0":"2022-08-15T20:46:13.598Z","2.2.1":"2026-02-07T02:08:46.170Z"},"bugs":{"url":"https://github.com/jamesmcnamara/shades/issues"},"author":{"name":"James McNamara"},"license":"ISC","homepage":"https://github.com/jamesmcnamara/shades#readme","keywords":["lens","lodash","functional","immutable","cursor","reducer","profunctor","state management"],"repository":{"type":"git","url":"git+https://github.com/jamesmcnamara/shades.git"},"description":"Lens-like functionality with a lodash-style interface.","maintainers":[{"name":"jamesmcnamara","email":"jamesscottmcnamara@gmail.com"}],"readme":"![shades](imgs/shades.svg)\n\n## shades\n\n1. [intro](#intro)\n2. [playground](#try)\n3. [guide](#guide)\n   1. [Traversals](#traversals)\n   2. [Folds](#folds)\n   3. [Virtual Lenses](#virtual)\n4. [api](#api)\n\n## _New in v2!_\n\n- Rich and fully type-safe Typescript support!\n- 0 dependencies!\n- < 5kb (gzipped) build!\n\n## Watch an Introduction\n\n[![Video Introduction](https://img.youtube.com/vi/_D3IPecC0S8/0.jpg)](https://www.youtube.com/watch?v=_D3IPecC0S8)\n\n<a name=\"intro\"></a>\nShades is a [lodash](https://github.com/lodash/lodash) inspired [lens](https://www.schoolofhaskell.com/school/to-infinity-and-beyond/pick-of-the-week/basic-lensing)-like library.\n_(Psst! Don't want to learn about lenses? Start with the [collection functions](#collection-transformations) to see how you can clean up your Iterable code, or check out the magic of [`into`](#into))._\n\nA lens is a path into an object, which can be used to extract its values, or even \"modify\" them in place (by creating a new object with the value changed).\n\nWhen writing immutable code, we very commonly end up with nested data stores, e.g.:\n\n```js\nconst store = {\n  users: [\n    {\n      name: 'Jack Sparrow',\n      posts: [\n        {\n          title: 'Why is the rum always gone? An analysis of Carribean trade surplus'\n        }\n      ],\n      ...\n    },\n  ...\n  ]\n}\n```\n\nAnd updating a nested structure will require heavy usage of the spread operator (or `Object.assign`). E.g. To capitalize the title of the first post of the first user, you would write:\n\n```js\nconst userIdx = 0;\nconst postIdx = 0;\nconst capitalize = (string) => {...}\n\n{...store,\n  users: store.users.map((user, idx) => (\n    idx === userIdx\n    ? {...user,\n        posts: user.posts.map((post, idx) =>\n          idx === postIdx\n          ? {\n              ...post,\n              title: capitalize(post.title)\n            }\n          : post)\n      }\n    : user\n    ))\n}\n```\n\nThis is an enormous amount of obfuscating boiler plate code for a very simple update.\n\nWith lenses, we could write this update much more declaratively:\n\n```js\nmod('users', userIdx, 'posts', postIdx, 'title')\n  (capitalize)\n  (store);\n```\n\n![Deal with it](imgs/deal-with-it.gif)\n\n### Typings\n\nIf you're using TypeScript, you'll benefit from very robust type-checking. For example if we had typed the above as:\n\n```js\nmod('users', userIdx, 'pots', postIdx, 'title')(capitalize)(store)\n```\n\nTS will error on `store` because it doesn't have an attribute `pots`. Similarly,\n\n```typescript\nmod('users', userIdx, 'posts', postIdx, 'title')((x: number) => x + 1)(store);\n```\n\nwill error because the type of `title` is `string` and not `number`\n\n## <a name=\"try\"></a>Try It Out\n\nshades contains a little node playground that you can use to follow along with the guide or generally mess around with it.\n\nYou can run it with [`npx`](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b)(which you already have if you're running `npm@^5.2.x`):\n\n```sh\nnpx shades\n```\n\nOr the old fashioned way\n\n```sh\nnpm install --global shades\nshades\n```\n\n## <a name=\"guide\"></a> Let's Talk About Lens, Baby\n\nFor reference, we will use the following objects:\n<a name=\"store\"></a>\n\n```js\nconst jack = {\n  name: 'Jack Sparrow',\n  goldMember: false,\n  posts: [\n    {\n      title:\n        'Why is the rum always gone? An analysis of Carribean trade surplus',\n      likes: 5\n    },\n    {\n      title: 'Sea Turtles - The Tortoise and the Hair',\n      likes: 70\n    }\n  ]\n};\n\nconst liz = {\n  name: 'Elizabeth Swan',\n  goldMember: true,\n  posts: [\n    {\n      title: 'Bloody Pirates - My Life Aboard the Black Pearl',\n      likes: 10000\n    },\n    {\n      title:\n        'Guidelines - When YOU need to be disinclined to acquiesce to their request',\n      likes: 5000\n    }\n  ]\n};\n\nconst bill = {\n  name: 'Bill Turner',\n  goldMember: false,\n  posts: [\n    {\n      title: 'Bootstraps Bootstraps - UEFI, GRUB and the Linux Kernel',\n      likes: 3000\n    }\n  ]\n};\n\nconst store = {\n  users: [jack, liz, bill],\n  byName: {\n    jack,\n    liz,\n    bill\n  }\n};\n```\n\n#### Baby's first lens\n\nConceptually, a lens is something that represents a path through an object.\n\nThe simplest lens is a string or number path like `'name'` or `0`. Strings represent object properties and numbers represent Array or Object indexes.\n\n`get` is the simplest lens consumer. It takes a lens into an object and produces a function that will take an object and produce the _focus_ of that lens (focus = final value referenced by the lens, i.e. `name` or `posts`). Using the examples from above:\n\n```js\n> const getName = get('name')\n> getName(jack)\n'Jack Sparrow'\n```\n\nor more succinctly:\n\n```js\n> get('name')(jack)\n'Jack Sparrow'\n```\n\nMultiple lenses can be passed in to `get` and they will be composed left-to-right:\n\n```js\n> get('users', 0, 'name')(store)\n'Jack Sparrow'\n```\n\nThis is all well and good, but that `0` is unrealistic. We rarely know _which_ index of an array we need to edit, instead we want to update all elements that match some criterion. Thus we need a way to focus on multiple points in an array (or object).\n\n#### <a name=\"traversals\"></a>Baby's first traversal\n\nThis is where stuff starts to get interesting.\n\n[Traversals](#traversals) split the focus of lenses into _multiple_ focus points. These can be particularly helpful when working with arrays.\n\nThe simplest traversal is [`all`](#all). `all` focuses on every element of an array (or every value in an object).\n\n```js\n> get('users', all, 'posts')(store)\n[\n  [ { title: 'Why is the rum always gone? An analysis of Carribean trade surplus', likes: 5} ],\n  [ { title: 'Bloody Pirates - My Life Aboard the Black Pearl', likes: 10000 } ]\n]\n```\n\n_Note: if you are using the TypeScript bindings, you MUST call `all` as a function, e.g. `get('users', all(), 'posts')`. It behaves exactly the same way._\n\nTraversals can be used anywhere a lens is used. However, as you can see above, when `all` appears in a composition, everything after is applied to every element of a collection, instead of on a single object. In this way, traversals act like prisms:\n\n![Dark Side](imgs/dark-side.jpg)\n\nMultiple traversals can be composed into a single lens. Each traversal in the lens will result to a further level of nesting in the output\n\n```js\n> get('users', all, 'posts', all, 'likes')(store)\n[[5], [100000]]\n```\n\nAbove, we focused on the `users` key of the store, then for every user in the `users` array we focused on the posts array, and then for every post in THAT array we focused on the `likes` key.\n\n`all` will always produce an array in the output, and so we got an array for when we traversed over `users`, and another nested array when we traversed over `posts`. Pretty neat, huh?\n\n#### Modifications\n\n`get`ting data is all well and good, but where shades really shines is performing immutable updates. The good news is everything we have learned up until now translates seamlessly.\n\nMeet `mod`. `mod` is a lot like `get`: it accepts lenses and produces a function. The difference is, before we pass `mod` an object to act on, we pass it a function that transforms the focus of the lens. Then we pass it an object, and instead of producing the focus of the object (like `get`) it will produce a copy of the entire object, with the focus of the lens transformed by your function.\n\n```js\n> const transformer = mod('users', 0, 'posts', 0, 'likes')(likes => likes + 1)\n> transformer(store)\n{\n  users: [\n    {\n      name: 'Jack Sparrow',\n      goldMember: false,\n      posts: [\n        {\n          title: 'Why is the rum always gone? An analysis of Carribean trade surplus',\n          likes: 6, // <---- Incremented!!\n        }\n      ]\n    },\n    { ... },\n    { ... }\n  ]\n}\n```\n\nThis transform was done immutably, so our original `store` is unmodified.\n\n`mod` also works with traversals:\n\n```js\n> mod('users', all, 'posts', all, 'likes')(likes => likes + 1)(store)\n{\n  users: [\n    {\n      name: 'Jack Sparrow',\n      goldMember: false,\n      posts: [\n        {\n          title: 'Why is the rum always gone? An analysis of Carribean trade surplus',\n          likes: 6, // <---- Incremented!!\n        }\n      ]\n    },\n    {\n      name: 'Elizabeth Swan',\n      goldMember: true,\n      posts: [\n        {\n          title: 'Bloody Pirates - My Life Aboard the Black Pearl',\n          likes: 10001, // <---- Also Incremented!! Wow!\n        }\n      ]\n    },\n    { ... }\n  ]\n}\n```\n\nNow you're ready to start cooking with gas! If you wanna see an even cooler traversal, check out [`matching`](#matching). Or just check out some of the API below, there's a\nlot of really great stuff we didn't even get a chance to touch on.\n\n### Epilogue: Folds and Virtual Lenses\n\nYou'll be able to get pretty dang far with just the built in lenses and traversals described above. But if you really want to dive down the rabbit hole, there's even more\nyou can do with lenses.\n\n#### <a name=\"folds\"></a>Folds\n\nTraversals allowed us to focus on multiple elements from a collection at once, but what if we just want to focus on a single element in a collection; one that fits some\ncriterion. This is a fold. Think of `Array::reduce`; folds operate very similarly. There are some built-in folds that should help you get the hang of it. For instance, [`findBy`](#findBy):\n\n```js\n> get('users', findBy(user => user.name === 'Jack Sparrow'), 'name')\n'Jack Sparrow'\n```\n\nThere are other folding lenses such as `maxBy`, and `minBy` (guess what they do). They all support the [`into` shorthand](#into):\n\n```js\n> get('users', findBy({name: includesi('jack')}), 'name')(store)\n'Jack Sparrow'\n\n> get('users', findBy('Elizabeth Swan'), 'posts', maxBy('likes'), 'title')\n'Bloody Pirates - My Life Aboard the Black Pearl'\n```\n\n#### <a name=\"virtual\"></a>Virtual Lenses\n\nLenses are not magic. They are just objects with a `get` and a `mod` field. You can create easily create your own; in fact, this is how [folds](#folds) are implemented.\n\nFor example, let's say that your data represents temperature in Celsius, but being an American, you only understand Fahrenheit. We just need to create a `get`\nfunction that takes a temperature in Celsius transforms it to Fahrenheit, and then a function `mod` that takes a _function_ from Fahrenheit to Fahrenheit, and produces\na Celsius to Celsius function.\n\nlet's start with some conversion functions:\n\n```javascript\nconst ftoc = f => (f - 32) / 1.8;\nconst ctof = c => c * 1.8 + 32;\n```\n\nour `get` function is just `ctof` (by definition it is a Celsius to Fahrenheit function), but our `mod` function is more complicated. We will get an updater that works on Fahrenheit, but we need to produce a Celsius updater. So we will create a function that takes the temperature in Celsius, converts it to Fahrenheit, runs it through the updater, and converts the result back to Celsius:\n\n```js\nconst inF = {\n  get: ctof,\n  mod: ftof => c => ftoc(ftof(ctof(c)))\n};\n```\n\nNow we have a lens that will let us view and update temperatures in Celsius as if they are in Fahrenheit\n\n```js\nconst weather = { temp: 35 }\n\n> get('temp')(weather)\n35\n\n> get('temp', inF)(weather)\n95\n\n> mod('temp', inF)(x => x + 1)(weather)\n{ temp: 35.56 }\n\n> set('temp', inF)(23)(weather)\n{ temp: -5 }\n```\n\nFor more details on virtual lenses, watch my talk at Reactathon:\n\n[![Video Introduction](https://img.youtube.com/vi/_D3IPecC0S8/0.jpg)](https://www.youtube.com/watch?v=_D3IPecC0S8)\n\n## <a name=\"api\">API</a>\n\n#### _A Note on Type Signatures_\n\nIt's not necessary to fully grok the type signatures when you read them, but if you do want to understand some of the custom types,\nthey can be found in [types/utils.ts](types/utils.ts)\n## <a href=collection-transformations>Collection Transformations</a>\nWe all love `Array::map`, `Array::filter`, etc. but what do you do when you have an object, or a Map? \nEven if you're just using arrays, defining an arrow function to just extract a property, or test if a\nkey has a certain value is clunky.\n\nEnter shades. Shades provides collection functions that work polymorphically over many different object\ntypes, and are powered by [`into`](#into). _(And they're pretty fast, too)_.\n\n```js\n> map('name')(store.users)\n['jack', 'liz', 'bill']\n\n> map('goldMember')(store.byName)\n{\n    jack: false, \n    liz: true, \n    bill: false\n  }\n\n> filter({name: 'jack'})(store.users)\n[jack]\n```\n\n### <a href='filter'>filter</a>\n```typescript\nexport function filter<K extends string>(k: K): <F extends Collection<HasKey<K>>>(f: F) => F;\nexport function filter<A>(f: (a: A) => any): <F>(f: F) => F;\nexport function filter<Pattern>(p: Pattern): <F extends Collection<HasPattern<Pattern>>>(f: F) => F;\n```\n\nTakes an [into pattern](#into) from `A => boolean` and produces a function that takes a [Collection](types/utils.ts)\nand produces a collection of the same type, with all items that failed the test removed.\n\n```js\n> filter(isEven)([1, 2, 3, 4])\n[2, 4]\n\n> filter((value, key) => isEven(key) && isOdd(value))({2: 1, 3: 1})\n{2: 1}\n\n> filter(isEven)(new Set([1, 2, 3, 4]))\nSet({2, 4})\n\n> filter('goldMember')(store.users)\n[liz]\n\n> filter({posts: includes({likes: lessThan(10)})})(store.users)\n[jack]\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<User[]>(filter((user: User) => user.friends.length > 0)(users));\nexpectType<{ [name: string]: User; }>(filter((user: User) => user.name)(byName));\nexpectType<User[]>(filter('name')(users));\nexpectType<{ [name: string]: User; }>(filter('name')(byName));\nexpectError(filter('butts')(users));\nexpectType<User[]>(filter({ name: 'john' })(users));\nexpectType<{ [name: string]: User; }>(filter({ name: 'john' })(byName));\nexpectError(filter({\n  settings: (settings: string) => settings\n})(users));\nexpectType<User[]>(filter({\n  settings: (settings: Settings) => settings\n})(users));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should work on lists', () => {\n  filter(greaterThan(2))([1, 2, 3]).should.deep.equal([3]);\n});\n\nit('should work on objects', () => {\n  filter(greaterThan(2))({ a: 1, b: 2, c: 3 }).should.deep.equal({ c: 3 })\n});\n\nit('should work on Maps', () => {\n  filter('goldMember')(\n    new Map(Object.entries(store.byName))\n  ).should.deep.equal(new Map([['liz', liz]]));\n});\n\n```\n\n</p>\n</details>\n\n### <a href='map'>map</a>\n```typescript\nexport function map<K extends string>(k: K): <F extends Container<HasKey<K>>>(f: F) => Functor<F, Unpack<F>, KeyAt<Unpack<F>, K>>;\nexport function map(i: number): <F extends Container<Indexable>>(f: F) => Functor<F, Unpack<F>, Index<Unpack<F>>>;\nexport function map<A, B>(f: (a: A, key: string) => B): <F extends Container<A>>(f: F) => Functor<F, A, B>;\nexport function map<Pattern>(p: Pattern): <A extends HasPattern<Pattern>, F extends Container<A>>(f: F) => Functor<F, A, boolean>;\n```\n\nTakes an [into pattern](#into) from `A => B` and produces a function that takes a [Container](types/utils.ts)\nof `A`s and produces the same type of container with `B`s\n\n```js\n> map(inc)([1, 2, 3, 4])\n[2, 3, 4, 5]\n\n> map((value, key) => `${value} was at {key}`)({a: 1, b: 2})\n{a: '1 was at a', b: '2 was at b'}\n\n> map((value, key) => `${value} was at {key}`)(new Map([['a', 1], ['b', 2]])\nMap {a => '1 was at a', b => '2 was at b'}\n\n> map('goldMember')(store.byName)\n  {jack: false, liz: true, bill: false}\n\n> map({name: includes('Bill')})(store.users)\n[false, false, true]\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<string[]>(map('name')(users));\nexpectType<{ [key: string]: string; }>(map('name')(byName));\nexpectError(map('not-a-key')(users));\nexpectError(map('not-a-key')(byName));\nexpectType<(User | undefined)[]>(map('bestFriend')(users))\nconst usersFriends = map('friends')(users)\nexpectType<User[][]>(usersFriends);\nexpectType<User[]>(map(1)(usersFriends));\nexpectError(map(1)(users));\nconst usersFriendsByName = map('friends')(byName)\nexpectType<{ [key: string]: User[]; }>(usersFriendsByName);\nexpectType<{ [key: string]: User; }>(map(2)(usersFriendsByName));\nexpectType<string[]>(map((x: User) => x.name)(users));\nexpectType<boolean[]>(map({ name: 'john', settings: (settings: Settings) => !!settings })(users));\nexpectType<{ [key: string]: boolean; }>(map({ name: 'john', settings: (settings: Settings) => !!settings })(byName));\n\ndeclare const fetchUsers: Promise<User[]>\n// Nested maps require type annotations, but still provide safety\nexpectType<Promise<string[]>>(map<User[], string[]>(map('name'))(fetchUsers))\nexpectError(map<User[], boolean[]>(map('name'))(fetchUsers))\n\ndeclare const userMap: Map<string, User>\ndeclare const userSet: Set<User>\nexpectType<Map<string, string>>(map('name')(userMap))\nexpectType<Set<string>>(map('name')(userSet))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should work on lists', () => {\n  map(inc)([1, 2, 3]).should.deep.equal([2, 3, 4])\n});\n\nit('should work on objects', () => {\n  map(inc)({ a: 1, b: 2, c: 3 }).should.deep.equal({ a: 2, b: 3, c: 4 })\n})\n\nit('should receive key as second param', () => {\n  map((value, key) => value + key)({a: 1}).should.deep.equal({a: '1a'})\n})\n\nit('should work on maps', () => {\n  const input = new Map([['a', 1], ['b', 2], ['c', 3]])\n  const output = new Map([['a', 2], ['b', 3], ['c', 4]])\n  map(inc)(input).should.deep.equal(output)\n})\n\nit('should work on sets', () => {\n  const input = new Set([1, 2, 3])\n  const output = new Set([2, 3, 4])\n  map(inc)(input).should.deep.equal(output)\n})\n\nit('should work on promises', () => {\n  const p = Promise.resolve({a: 1})\n  return map('a')(p).should.eventually.equal(1)\n})\n\nit('should work with shorthand', () => {\n  map('a')([{ a: 1 }, { a: 2 }, { a: 3 }]).should.deep.equal([1, 2, 3]);\n\n  map('a')({ d: { a: 1 }, c: { a: 2 }, e: { a: 3 } }).should.deep.equal({\n    d: 1,\n    c: 2,\n    e: 3\n  });\n  \n  map({ a: 1 })([{ a: 1 }, { a: 2 }, { a: 3 }]).should.deep.equal([\n    true,\n    false,\n    false\n  ]);\n});\n\n```\n\n</p>\n</details>\n\n### <a href='find'>find</a>\n```typescript\nexport function find<Key extends string>(f: Key): <A extends HasKey<Key>>(f: Collection<A>) => (A | undefined);\nexport function find<A>(f: (a: A) => any): (f: Collection<A>) => (A | undefined);\nexport function find<Pattern>(p: Pattern): <A extends HasPattern<Pattern>>(f: Collection<A>) => (A | undefined);\n```\n\nTakes an [into pattern](#into) from `A => any` and produces a function that takes a \n[`Collection`](#collection-type) returns the first item in the collection that returns \na truthy value for the test (or `undefined` if none match)\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<User | undefined>(find('name')(users));\nexpectError(find('fart')(users));\nexpectType<User | undefined>(find((user: User) => user.friends)(users));\nexpectType<User | undefined>(find((user: User) => user.friends.length > 0)(users));\nexpectType<User | undefined>(find({ name: 'barg' })(users));\nexpectError(find({ name: false })(users));\nexpectType<User | undefined>(find({ name: (s: string) => !!'barg' })(users));\nexpectError(find({ name: (s: Settings) => !!'barg' })(users));\nconst a = find({\n  friends: find({ name: 'silent bob' })\n})(users);\nexpectType<User | undefined>(a);\nexpectError(find({ settings: { permissions: false } })(users));\nexpectError(find({\n  settings: { permissions: false }\n})(users));\nexpectType<User | undefined>(find({\n  settings: { permissions: (perm: string) => !!perm }\n})(users));\nexpectError(find({\n  settings: { permissions: (perm: boolean) => !!perm }\n})(users));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should work on lists', () => {\n  find(user => user.isLive)([\n    { isLive: true, name: 'jack' }\n  ]).name.should.equal('jack');\n  find('isLive')([{ isLive: true, name: 'jack' }]).name.should.equal(\n    'jack'\n  );\n  find({ name: 'jack' })([{ isLive: true, name: 'jack' }]).isLive.should\n    .be.true;\n});\n\nit('should work on objects', () => {\n  find(user => user.isLive)({\n    jack: { isLive: true, name: 'jack' }\n  }).name.should.equal('jack');\n  find('isLive')({\n    jack: { isLive: true, name: 'jack' }\n  }).name.should.equal('jack');\n  find({ name: 'jack' })({ jack: { isLive: true, name: 'jack' } }).isLive\n    .should.be.true;\n});\n\nit('should work on Maps', () => {\n  find('goldMember')(\n    new Map(Object.entries(store.byName))\n  ).should.deep.equal(liz);\n});\n\nit('should work on Sets', () => {\n  find('goldMember')(\n    new Set(Object.values(store.byName))\n  ).should.deep.equal(liz);\n});\n\n```\n\n</p>\n</details>\n\n### <a href='some'>some</a>\n```typescript\nexport function some<Key extends string>(f: Key): (f: Collection<HasKey<Key>>) => boolean;\nexport function some<A>(f: (a: A) => any): (f: Collection<A>) => boolean;\nexport function some<Pattern>(p: Pattern): (f: Collection<HasPattern<Pattern>>) => boolean;\n```\n\nTakes an [into pattern](#into) and returns a function that takes a [`Collection`](#collection-type)\nand returns true if there is any member in the collection that returns `true` for the test\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<boolean>(some('name')(users));\nexpectType<boolean>(some((user: User) => user.friends)(users));\nexpectType<boolean>(some((user: User) => user.friends.length > 0)(users));\nexpectType<boolean>(some({ name: 'barg' })(users));\nexpectError(some({ name: false })(users));\nexpectType<boolean>(some({ name: (s: string) => !!'barg' })(users));\nexpectError(some({ name: (s: boolean) => !!'barg' })(users));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should work on lists', () => {\n  some(user => user.isLive)([\n    { isLive: true, name: 'jack' }\n  ]).should.be.true\n  some('isLive')([{ isLive: true, name: 'jack' }]).should.be.true\n  some({ name: 'jack' })([{ isLive: true, name: 'jack' }]).should.be.true\n  some({ name: 'john' })([{ isLive: true, name: 'jack' }]).should.be.false\n  some(user => user.isLive)([{ isLive: true, name: 'jack' }]).should.be.true\n  some(user => !user.isLive)([{ isLive: true, name: 'jack' }]).should.be.false\n});\n\nit('should work on objects', () => {\n  some(user => user.isLive)({\n    jack: { isLive: true, name: 'jack' }\n  }).should.be.true\n  some('isLive')({\n    jack: { isLive: true, name: 'jack' }\n  }).should.be.true\n  some({ name: 'jack' })({ jack: { isLive: true, name: 'jack' } }).should.be.true;\n});\n\nit('should work on Maps', () => {\n  some('goldMember')(\n    new Map(Object.entries(store.byName))\n  ).should.be.true\n});\n\nit('should work on Sets', () => {\n  some('goldMember')(\n    new Set(store.users)\n  ).should.be.true\n\n  some({name: s => s.includes('z')})(\n    new Set(store.users)\n  ).should.be.true\n\n  some({name: s => s.includes('x')})(\n    new Set(store.users)\n  ).should.be.false\n});\n\n```\n\n</p>\n</details>\n\n### <a href='cons'>cons</a>\n```typescript\nexport function cons<A>(a: A): (as: A[]) => A[]\n```\n\nConsumes an element `x` and an array `xs` and returns a new array with `x` \nAPPENDED to `xs` (not prepended, which is more typical with `cons` and lists. This \nis to make it easier to use in pipelined scenarios)\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number[]>(cons(1)([1, 2, 3]));\nexpectType<string[]>(cons('a')(['a', 'b', 'c']));\nexpectError(cons(1)(2));\nexpectError(cons(1)(['a', 'b', 'c']));\nexpectError(cons('1')([1, 2, 3]));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should concat lists', () => {\n  cons(1)([1, 2, 3]).should.deep.equal([1, 2, 3, 1]);\n  expect(() => cons(1)(2)).to.throw(\n    'Invalid attempt to spread non-iterable instance'\n  );\n});\n\n```\n\n</p>\n</details>\n\n### <a href='unshift'>unshift</a>\n```typescript\nexport function unshift<A>(a: A): (as: A[]) => A[]\n```\n\nConsumes an element `x` and an array `xs` and returns a new array with `x` \nprepended to `xs`.\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number[]>(unshift(1)([1, 2, 3]));\nexpectType<string[]>(unshift('a')(['a', 'b', 'c']));\nexpectError(unshift(1)(2));\nexpectError(unshift(1)(['a', 'b', 'c']));\nexpectError(unshift('1')([1, 2, 3]));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should prepend items to a list', () => {\n  unshift(1)([1, 2, 3]).should.deep.equal([1, 1, 2, 3]);\n  expect(() => unshift(1)(2)).to.throw(\n    'Invalid attempt to spread non-iterable instance'\n  );\n});\n\n```\n\n</p>\n</details>\n\n### <a href='first'>first</a>\n```typescript\nexport function first(s: string): string\nexport function first<A>(xs: A[]): A\n```\n\nExtracts the first element of a collection\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(first([1, 3, 4]));\nexpectType<User>(first(users));\nexpectType<string>(first('hi'));\nexpectError(first(true));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should extract the first element', () => {\n  first([1, 2, 3]).should.equal(1);\n  first('hello').should.equal('h');\n  should.not.exist(first([]));\n});\n\n```\n\n</p>\n</details>\n\n### <a href='rest'>rest</a>\n```typescript\nexport function rest<A>(xs: A[]): A[]\n```\n\nExtracts everything from the list except for the head\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number[]>(rest([1, 3, 4]));\nexpectType<User[]>(rest(users));\nexpectError(rest('hi'));\nexpectError(rest(true));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should extract the tail', () => {\n  rest([1, 2, 3]).should.deep.equal([2, 3]);\n  rest([]).should.deep.equal([]);\n});\n\n```\n\n</p>\n</details>\n\n### <a href='push'>push</a>\n```typescript\nexport function push<A>(a: A): (as: A[]) => A[]\n```\n\nAlias for [`cons`](#cons)\n\n\n\n\n### <a href='concat'>concat</a>\n```typescript\nexport function concat<A>(as: A[]): (bs: A[]) => A[]\n```\n\nTakes two arrays and concatenates the first on to the second.\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number[]>(concat([1, 2, 3])([2, 3]));\n// [2, 3, 1, 2, 3]\nexpectType<string[]>(concat(['hi'])(['wo']));\n// ['wo', 'hi']\nexpectError(concat(['hi'])([1, 2, 3]));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should concatenate lists in reverse order', () => {\n  concat([1, 2, 3])([2, 3]).should.deep.equal([2, 3, 1, 2, 3]);\n})\n\n```\n\n</p>\n</details>\n\n### <a href='append'>append</a>\n```typescript\nexport function append<A>(as: A[]): (bs: A[]) => A[]\n```\n\nAlias for [`concat`](#concat)\n\n\n\n\n### <a href='prepend'>prepend</a>\n```typescript\nexport function prepend<A>(as: A[]): (bs: A[]) => A[]\n```\n\nTakes two arrays and concatenates the second on to the first.\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number[]>(prepend([1, 2, 3])([2, 3]));\n// [1, 2, 3, 2, 3]\nexpectType<string[]>(prepend(['hi'])(['wo']));\n// ['hi', 'wo']\nexpectError(prepend(['hi'])([1, 2, 3]));\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should concatenate lists in lexical order', () => {\n  prepend([1, 2, 3])([2, 3]).should.deep.equal([1, 2, 3, 2, 3]);\n})\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='into'>into</a>\n```typescript\nexport function into<Fn extends (...a: any[]) => any>(f: Fn): Fn;\nexport function into<Key extends string>(f: Key): <Obj extends HasKey<Key>>(s: Obj) => Obj[Key];\nexport function into<Pattern extends object>(p: Pattern): (o: HasPattern<Pattern>) => boolean;\n```\n\n`into` is the engine of much of shades' magical goodness. It takes either a string or object \n(or function) and turns it into a useful function. All of shades [collection functions](#collection-transformations)\nwill automatically pass their inputs into `into`, creating a useful shorthand.\n\nThe transformation follows one of the following 3 rules:\n* a **function** is returned as is (easy enough)\n* a **string** or **number** is converted into a lens accessor with [`get`](#get)\n* an **object** is converted into a predicate function using the function [`has`](#has). This one is the most interesting, and\nrequires some explanation.\n\nIn the simplest form, a pattern of keys and values will produce a function that takes a test \nvalue and returns `true` if the given test value has at least the equivalent keys and values \nof the pattern. Using the [store](#store) example from above:\n\n```js\n// Tests if an object passed to it has the key goldMember mapped to true\n> const isGoldMember = into({goldMember: true})\n> isGoldMember(jack)\nfalse\n\n// test multiple values\n> into({goldMember: true, name: \"Elizabeth Swan\"})(liz)\ntrue\n```\n\nNested values work just as you'd expect:\n```js\n> into({jack: {goldMember: false}})(store.byName)\ntrue\n```\n\nWhere it REALLY gets interesting is when the _values_ in your pattern are predicate functions. \nIn this case, the value at that key in the test object is passed to the function, and validation \nonly continues if that function returns `true`\n\n```js\n// Tests if the object passed to it has a title attribute that is less than 50 letters long\n> const hasShortTitle = into({title: title => title.length < 50})\n> hasShortTitle(jack.posts[0])\nfalse\n```\nThis pattern is especially useful with [lenses and traversals](#guide)\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(into('a')({a: 10}))\nexpectError(into('b')({a: 10}))\nexpectType<boolean>(into({a: 10})({a: 10}))\nexpectError(into({a: 10})({b: 10}))\nexpectType<number>(into((x: number) => x + 1)(10))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should use into to create functions', () => {\n  into('a')({ a: 10 }).should.equal(10);\n  into({ a: 10 })({ a: 10 }).should.be.true;\n  into(x => x + 1)(10).should.equal(11);\n});\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='has'>has</a>\n```typescript\nexport function has<Pattern>(p: Pattern): (obj: HasPattern<Pattern>) => boolean\n```\n\n`has` takes a pattern and transforms it into a predicate function. In the simplest form, it takes a pattern of keys \nand values and produces a function that takes a test value and returns `true` if the given test value has at least \nthe equivalent keys and values of the pattern. Using the [store](#store) example from above:\n\n```js\n// Tests if an object passed to it has the key goldMember mapped to true\n> const isGoldMember = has({goldMember: true})\n> isGoldMember(jack)\nfalse\n\n// test multiple values\n> has({goldMember: true, name: \"Elizabeth Swan\"})(liz)\ntrue\n```\n\nNested values work just as you'd expect:\n```js\n> has({jack: {goldMember: false}})(store.byName)\ntrue\n```\n\nWhere it REALLY gets interesting is when the _values_ in your pattern are predicate functions. \nIn this case, the value at that key in the test object is passed to the function, and validation \nonly continues if that function returns `true`\n\n```js\n// Tests if the object passed to it has a title attribute that is less than 50 letters long\n> const hasShortTitle = has({title: title => title.length < 50})\n> hasShortTitle(jack.posts[0])\nfalse\n```\nThis pattern is especially useful with [lenses and traversals](#guide)\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<(obj: HasPattern<{ a: number; }>) => boolean>(has({a: 1}))\nexpectType<(obj: HasPattern<{ a: false; }>) => boolean>(has({a: false}))\nexpectType<boolean>(has({a: 1})({a: 10}))\nexpectError(has({a: 1})({a: false}))\nexpectType<boolean>(has({a: (n: number) => n > 10})({a: 5}))\nexpectError(has({a: (n: number) => n > 10})({a: false}))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should handle multiple patterns and nested keys', () => {\n    has({ a: { b: 2 }, c: 3 })({ a: { b: 2, f: 5 }, c: 3, d: 4 }).should.be.true\n});\n\nit('should return false if not true', () => {\n    has({ a: { b: 2 }, c: 3 })({ a: { b: 6, f: 5 }, d: 4 }).should.be.false\n});\n\nit('should handle null values', () => {\n  has({ a: null })({ a: null }).should.be.true\n});\n\nit('should handle scalars', () => {\n  has('three')('three').should.be.true;\n  has('three')('four').should.be.false;\n  has(true)(true).should.be.true;\n  has(false)(false).should.be.true;\n  has(true)(false).should.be.false;\n  has(undefined)(undefined).should.be.true;\n  has(null)(null).should.be.true;\n  has(undefined)(null).should.be.false;\n  has(3)(3).should.be.true;\n  has(3)(4).should.be.false;\n});\n\nit('should handle lists', () => {\n  has([1, 2])([1, 2]).should.be.true;\n  has({ a: [1, 2] })({ a: [1, 2], b: 3 }).should.be.true;\n});\n\nit('should handle predicate functions', () => {\n  has(_.isString)('hello').should.be.true;\n  has(_.isString)(5).should.be.false;\n  has({ a: _.isString })({ a: 'hello' }).should.be.true;\n  has({ a: _.isString })({ a: 5 }).should.be.false;\n  has({ a: n => n % 2 == 1, b: { c: _.isString } })({\n    a: 5,\n    b: { c: 'hello' }\n  }).should.be.true;\n  has({ a: n => n % 2 == 0, b: { c: _.isString } })({\n    a: 5,\n    b: { c: 'hello' }\n  }).should.be.false\n});\n\nit('should handle unbalanced patterns and objects', () => {\n  has({ a: { b: { c: 12 } } })(null).should.be.false;\n  has({ a: { b: { c: 12 } } })({ a: { b: null } }).should.be.false;\n});\n\nit('should handle binding', () => {\n  const base = {\n    IDTag() {\n      return this.tag;\n    }\n  };\n\n  const extended = {\n    ...base,\n    tag: 'hi'\n  };\n\n  has({ IDTag: returns('hi') })(extended).should.be.true;\n});\n\n```\n\n</p>\n</details>\n\n### <a href='greaterThan'>greaterThan</a>\n```typescript\nexport function greaterThan(a: number): (b: number) => boolean\nexport function greaterThan(a: string): (b: string) => boolean\n```\n\nCurried function to compare greater than for two values. NOTE: All logical functions \nin shades are reversed; i.e. `greaterThan(a)(b) === b > a`. This might seem confusing,\nbut think of it as predicate factories, that take a value `n` and produce a function \nthat tests 'Is this value greater than `n`?'\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<(b: number) => boolean>(greaterThan(2))\nexpectType<(b: string) => boolean>(greaterThan('a'))\nexpectType<boolean>(greaterThan('a')('b'))\nexpectError(greaterThan('a')(1))\nexpectError(greaterThan({a: 1}))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should compare greaterThan', () => {\n  greaterThan(2)(3).should.be.true;\n  greaterThan(3)(2).should.be.false;\n})\n\nit('should compare strings value', () => {\n  greaterThan('a')('b').should.be.true;\n  greaterThan('b')('a').should.be.false;\n})\n\n```\n\n</p>\n</details>\n\n### <a href='lessThan'>lessThan</a>\n```typescript\nexport function lessThan(a: number): (b: number) => boolean\nexport function lessThan(a: string): (b: string) => boolean\n```\n\nCurried function to compare less than for two values. NOTE: All logical functions \nin shades are reversed; i.e. `lessThan(a)(b) === b > a`. This might seem confusing,\nbut think of it as predicate factories, that take a value `n` and produce a function \nthat tests 'Is this value less than `n`?'\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<(b: number) => boolean>(lessThan(2))\nexpectType<(b: string) => boolean>(lessThan('a'))\nexpectType<boolean>(lessThan('a')('b'))\nexpectError(lessThan('a')(1))\nexpectError(lessThan({a: 1}))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should compare lessThan', () => {\n  lessThan(2)(3).should.be.false;\n  lessThan(3)(2).should.be.true;\n})\n\nit('should compare strings value', () => {\n  lessThan('a')('b').should.be.false;\n  lessThan('b')('a').should.be.true;\n})\n\n```\n\n</p>\n</details>\n\n### <a href='greaterThanEq'>greaterThanEq</a>\n```typescript\n```\n\nSame as [`greaterThan`](#greaterThan) but `>=` instead of `>`\n\n\n\n\n### <a href='lessThanEq'>lessThanEq</a>\n```typescript\n```\n\nSame as [`greaterThan`](#greaterThan) but `>=` instead of `>`\n\n\n\n\n### <a href='toggle'>toggle</a>\n```typescript\nexport function toggle(b: boolean): boolean\n```\n\nThe `!` operator as a function. Takes a boolean and flips the value. Very useful as an updater function:\n```js\n> mod('byName', jack, 'goldMember')(toggle)(store)\n{\n  byName: {\n    jack: {\n      goldMember: true,\n      ...\n    }\n    ...\n  }\n  ...\n}\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<boolean>(toggle(false))\nexpectError(toggle('a'))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should toggle values', () => {\n  toggle(true).should.be.false;\n  toggle(false).should.be.true;\n})\n\n```\n\n</p>\n</details>\n\n### <a href='returns'>returns</a>\n```typescript\nexport function returns<A>(a: A): (f: () => A) => boolean\n```\n\nA curried function that takes a value `a` of type `A` and a function of no arguments that\nreturns a value of type `A`. These two values are then compared for equality.\n\nThis is very useful with [`has`](#has) or [`into`](#into) when your test value has \ngetter functions, and you want to see if those getters produce a certain value:\n\n```js\n> const a = {\n  ID() {\n    return '10'\n  }\n}\n\n> has({a: returns(10)})(a)\ntrue\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<boolean>(returns(10)(() => 10))\nexpectError(returns(10)(() => 'hi'))\ndeclare const getID: {\n  ID(): string\n}\nexpectType<boolean>(has({ID: returns('blah')})(getID))\nexpectError(has({ID: returns(10)})(getID))\n\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('works', () => {\n  returns(10)(() => 10).should.be.true;\n  returns(7)(() => 10).should.be.false;\n})\n\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='identity'>identity</a>\n```typescript\nexport function identity<A>(a: A): A\n```\n\nIdentity function. Not much to say about this one. You give it something,\nit gives it back. Nice easy no-op for higher order functions.\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<10>(identity(10))\nexpectType<\"butts\">(identity(\"butts\"))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('just gives stuff back', () => {\n  identity(10).should.be.equal(10)\n  identity('hi').should.be.equal('hi')\n})\n\n```\n\n</p>\n</details>\n\n### <a href='flip'>flip</a>\n```typescript\nexport function flip<A, B, Out>(f: (a: A) => (b: B) => Out): (b: B) => (a: A) => Out\n```\n\nTakes a 2-curried function and flips the order of the arguments\n\n```js\n> const lessThanEq = flip(greaterThanEq)\n\n> const first = a => b => a\n> const second = flip(first)\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\ntype Flipped = <A>(b: any) => (a: A) => A\nexpectAssignable<Flipped>(flip(always))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('flips argument order', () => {\n  flip(lessThan)(3)(9).should.be.true\n  flip(sub)(1)(9).should.equal(-8)\n})\n\n```\n\n</p>\n</details>\n\n### <a href='always'>always</a>\n```typescript\nexport function always<A>(a: A): (b: any) => A\n```\n\nA constant function. This is particularly useful when you want\nto just produce a value, but are working with higher order functions\nthat expect to call a function for a result.\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(always(10)(map))\nexpectType<string>(always('10')(map))\nexpectType<(b: any) => number>(always(10))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should be constant', () => {\n  const fifteen = always(15)\n  fifteen(20).should.be.equal(15)\n  fifteen('asdfasdf').should.be.equal(15)\n})\n\n```\n\n</p>\n</details>\n\n### <a href='not'>not</a>\n```typescript\nexport function not<Key extends string>(k: Key): (obj: HasKey<Key>) => boolean\nexport function not<A>(a: Fn1<A, any>): Fn1<A, boolean>;\nexport function not<A, B>(a: Fn2<A, B, any>): Fn2<A, B, boolean>;\nexport function not<A, B, C>(a: Fn3<A, B, C, any>): Fn3<A, B, C, boolean>;\nexport function not<A, B, C, D>(a: Fn4<A, B, C, D, any>): Fn4<A, B, C, D, boolean>;\nexport function not<A, B, C, D, E>(a: Fn5<A, B, C, D, E, any>): Fn5<A, B, C, D, E, boolean>;\nexport function not<Pattern>(p: Pattern): (obj: HasPattern<Pattern>) => boolean\n```\n\nA function level equivalent of the `!` operator. It consumes a function or [into pattern](#into), and returns a \nfunction that takes the same arguments, and returns the negation of the output\n\n```js\n> const isOdd = not(isEven);\n> isOdd(3)\ntrue\n\n> not('goldMember')(jack)\ntrue\n\n> not({name: \"Jack Sparrow\"})(liz)\ntrue\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\ndeclare function notFn1(a: number): string \ndeclare function notFn4(a: number, b: string, c: boolean, d: number): string \nexpectType<Fn1<number, boolean>>(not(notFn1))\nexpectType<Fn4<number, string, boolean, number, boolean>>(not(notFn4))\nexpectType<boolean>(not(\"name\")(users[0]))\nexpectError(not(\"butt\")(users[0]))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should negate functions of various arities', () => {\n  const isEven = n => n % 2 == 0\n  const plus = (a, b) => a + b\n  not(isEven)(3).should.be.true\n  not(plus)(2, 3).should.be.false\n  not(plus)(2, -2).should.be.true\n})\n\nit('should handle shorthand', () => {\n  not('goldMember')(jack).should.be.true\n  not({name: 'Jack Sparrow'})(jack).should.be.false\n})\n\n```\n\n</p>\n</details>\n\n### <a href='and'>and</a>\n```typescript\nexport function and<A, Out>(a?: Fn1<A, Out>, b?: Fn1<A, Out>, c?: Fn1<A, Out>, d?: Fn1<A, Out>, e?: Fn1<A, Out>, f?: Fn1<A, Out>): Fn1<A, Out>\nexport function and<A, B, Out>(a?: Fn2<A, B, Out>, b?: Fn2<A, B, Out>, c?: Fn2<A, B, Out>, d?: Fn2<A, B, Out>, e?: Fn2<A, B, Out>, f?: Fn2<A, B, Out>): Fn2<A, B, Out>\nexport function and<A, B, C, Out>(a?: Fn3<A, B, C, Out>, b?: Fn3<A, B, C, Out>, c?: Fn3<A, B, C, Out>, d?: Fn3<A, B, C, Out>, e?: Fn3<A, B, C, Out>, f?: Fn3<A, B, C, Out>): Fn3<A, B, C, Out>\nexport function and<A, B, C, D, Out>(a?: Fn4<A, B, C, D, Out>, b?: Fn4<A, B, C, D, Out>, c?: Fn4<A, B, C, D, Out>, d?: Fn4<A, B, C, D, Out>, e?: Fn4<A, B, C, D, Out>, f?: Fn4<A, B, C, D, Out>): Fn4<A, B, C, D, Out>\nexport function and<A, B, C, D, E, Out>(a?: Fn5<A, B, C, D, E, Out>, b?: Fn5<A, B, C, D, E, Out>, c?: Fn5<A, B, C, D, E, Out>, d?: Fn5<A, B, C, D, E, Out>, e?: Fn5<A, B, C, D, E, Out>, f?: Fn5<A, B, C, D, E, Out>): Fn5<A, B, C, D, E, Out>\n```\n\nA function level equivalent of the `&&` operator. It consumes an arbitrary number of \nfunctions that take the same argument types and produce booleans, and returns a \nsingle function that takes the same arguments, and returns a truthy value if all of \nthe functions are truthy (Return value mimics the behavior of `&&`)\n\n```js\n> and(isEven, greaterThan(3))(6)\ntrue\n> [42, 2, 63].filter(and(isEven, greaterThan(3)))\n[42]\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\ndeclare function andFn1(a: number): number\ndeclare function andFn2(a: number, b: string): number\ndeclare function andFn3(a: number, b: string, c: boolean): number\ndeclare function andFn3Bad(a: number, b: string, c: boolean): boolean\nexpectType<Fn3<number, string, boolean, number>>(and(andFn3, andFn3, andFn3))\nexpectType<Fn3<number, string, boolean, number>>(and(andFn1, andFn2, andFn3))\nexpectType<Fn2<number, string, number>>(and(andFn1, andFn2, identity))\nexpectType<Fn1<number, number>>(and(andFn1))\nexpectError(and(andFn1, andFn2, andFn3Bad))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nconst isEven = n => n % 2 == 0;\nconst isPositive = n => n > 0;\nconst plus = (a, b) => a + b\nconst lt = (a, b) => a < b\nconst gt = (a, b) => a > b\n\nit('handles multiple functions', () => {\n  and(isEven, isPositive)(4).should.be.true;\n  and(isEven, isPositive)(3).should.be.false;\n  and(isEven, isPositive)(-1).should.be.false \n})\n\nit('handles functions with different arities', () => {\n  and(lt, isEven)(4, 9).should.be.true;\n  and(lt, isEven)(4, 9).should.be.true;\n  and(lt, isEven)(3, 9).should.be.false;\n})\n\nit('returns the final value or short circuits', () => {\n  and(isEven, plus)(4, 9).should.equal(13);\n  and(gt, isEven, plus)(3, 9).should.be.false;\n  and(lt, sub(3), isEven)(3, 9).should.equal(0);\n})\n\nit('execution stops after a false', () => {\n  const boomMsg = 'boom'\n  const boom = () => {throw new Error(boomMsg)}\n  and(always(false), boom)(false).should.be.false\n  expect(() => and(always(true), boom)(false)).throws(boomMsg)\n})\n\n```\n\n</p>\n</details>\n\n### <a href='or'>or</a>\n```typescript\nexport function or<A, Out>(a?: Fn1<A, Out>, b?: Fn1<A, Out>, c?: Fn1<A, Out>, d?: Fn1<A, Out>, e?: Fn1<A, Out>, f?: Fn1<A, Out>): Fn1<A, Out>\nexport function or<A, B, Out>(a?: Fn2<A, B, Out>, b?: Fn2<A, B, Out>, c?: Fn2<A, B, Out>, d?: Fn2<A, B, Out>, e?: Fn2<A, B, Out>, f?: Fn2<A, B, Out>): Fn2<A, B, Out>\nexport function or<A, B, C, Out>(a?: Fn3<A, B, C, Out>, b?: Fn3<A, B, C, Out>, c?: Fn3<A, B, C, Out>, d?: Fn3<A, B, C, Out>, e?: Fn3<A, B, C, Out>, f?: Fn3<A, B, C, Out>): Fn3<A, B, C, Out>\nexport function or<A, B, C, D, Out>(a?: Fn4<A, B, C, D, Out>, b?: Fn4<A, B, C, D, Out>, c?: Fn4<A, B, C, D, Out>, d?: Fn4<A, B, C, D, Out>, e?: Fn4<A, B, C, D, Out>, f?: Fn4<A, B, C, D, Out>): Fn4<A, B, C, D, Out>\nexport function or<A, B, C, D, E, Out>(a?: Fn5<A, B, C, D, E, Out>, b?: Fn5<A, B, C, D, E, Out>, c?: Fn5<A, B, C, D, E, Out>, d?: Fn5<A, B, C, D, E, Out>, e?: Fn5<A, B, C, D, E, Out>, f?: Fn5<A, B, C, D, E, Out>): Fn5<A, B, C, D, E, Out>\n```\n\nA function level equivalent of the `||` operator. It consumes an arbitrary number \nof functions that take the same argument types and produce truthy values, and returns \na single function that takes the same arguments, and returns a truthy value if any of \nthe functions produce truthy values (Return value mimics the behavior of `||`)\n```js\n> or(isEven, greaterThan(3))(5)\ntrue\n> or(isEven, greaterThan(3))(1)\nfalse\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\ndeclare function orFn1(a: number): number\ndeclare function orFn2(a: number, b: string): number\ndeclare function orFn3(a: number, b: string, c: boolean): number\ndeclare function orFn3Bad(a: number, b: string, c: boolean): boolean\nexpectType<Fn3<number, string, boolean, number>>(or(orFn3, orFn3, orFn3))\nexpectType<Fn3<number, string, boolean, number>>(or(orFn1, orFn2, orFn3))\nexpectType<Fn2<number, string, number>>(or(orFn1, orFn2, identity))\nexpectType<Fn1<number, number>>(or(orFn1))\nexpectError(or(orFn1, orFn2, orFn3Bad))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nconst isEven = n => n % 2 == 0;\nconst isPositive = n => n > 0;\nconst plus = (a, b) => a + b\nconst lt = (a, b) => a < b\nconst gt = (a, b) => a > b\n\nit('handles multiple functions', () => {\n  or(isEven, isPositive)(4).should.be.true;\n  or(isEven, isPositive)(3).should.be.true;\n  or(isEven, isPositive)(-1).should.be.false \n})\n\nit('handles functions with different arities', () => {\n  or(lt, isEven)(4, 9).should.be.true;\n  or(lt, isEven)(4, 9).should.be.true;\n  or(lt, isEven)(3, 9).should.be.true;\n  or(lt, isEven)(3, 1).should.be.false;\n})\n\nit('returns the final value or short circuits', () => {\n  or(isEven, plus)(3, 9).should.equal(12);\n  or(gt, isEven, plus)(3, 9).should.equal(12)\n  or(lt, sub(3), isEven)(3, 9).should.be.true\n})\n\nit('execution stops after a true', () => {\n  const boomMsg = 'boom'\n  const boom = () => {throw new Error(boomMsg)}\n  or(always(true), boom)(false).should.be.true\n  expect(() => or(always(false), boom)(false)).throws(boomMsg)\n})\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='fill'>fill</a>\n```typescript\nexport function fill<P extends object>(pat: P): <T extends FillingPattern<P>>(value: T) => Fill<T, P>\n```\n\nMerging function that can be used to fill potentially undefined holes in an object. Deep merges objects with a preference for the original, so:\n```ts\nfill({a: {b: 10, c: 20}})({a: {c: 30}})\n```\nproduces:\n```ts\n{a: {b: 10, c: 30}}\n```\nMost importantly, this will also update the output type to erase any `T | undefined | null` that were filled by the given\npattern. Useful before applying a lens function to ensure that the result will be defined.\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(fill({a: 10})({a: undefined, b: 5}).a)\nexpectType<number>(fill({a: 10})({}).a)\n// 'bestFriend' is an optional `User` property on the `User` object\nexpectType<ErrorCannotLensIntoOptionalKey<User | undefined, \"name\">>(get('bestFriend', 'name')(user))\nconst friendsWithMyself = fill({bestFriend: user})(user)\nexpectType<string>(get('bestFriend', 'name')(friendsWithMyself))\nexpectType<ErrorCannotLensIntoOptionalKey<ErrorCannotLensIntoOptionalKey<User | undefined, \"bestFriend\">, \"name\">>(get('bestFriend', 'bestFriend', 'name')(user))\nconst deepFriendsWithMyself = fill({bestFriend: friendsWithMyself})(user)\nexpectType<string>(get('bestFriend', 'bestFriend', 'name')(deepFriendsWithMyself))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('fills in keys on an object', () => {\n  fill({a: 10})({b: 5}).a.should.equal(10)\n  fill({a: 10})({b: 5}).b.should.equal(5)\n  fill({a: 10})({a: null}).a.should.equal(10)\n  should.not.exist(fill({b: 10})({a: null}).a)\n})\n\nit('should not overwrite existing keys', () => {\n  fill({a: 10})({a: 5}).a.should.equal(5)\n  fill({a: {b: 10}})({a: 5}).a.should.equal(5)\n})\n\nit('should merge nested keys', () => {\n  const out = fill({a: {b: 10, c: 15}})({a: {c: 20}})\n  out.a.b.should.be.equal(10)\n  out.a.c.should.be.equal(20)\n})\n\nit('should not overwrite falsey values', () => {\n  fill({a: 10})({a: false}).a.should.equal(false)\n  fill({a: 10})({a: 0}).a.should.equal(0)\n  fill({a: 10})({a: ''}).a.should.equal('')\n})\n\n```\n\n</p>\n</details>\n\n\n## <a href=reducer-generators>Reducer generators</a>\nReducer generators are functions that take [`into patterns`](#into) and produce specialized\nreducer functions (`(A, S) => A`):\n\n```js\n> jack.posts.reduce(maxOf('likes'))\n{\n  title: 'Sea Turtles - The Tortoise and the Hair',\n  likes: 70\n}\n```\n\n### <a href='maxOf'>maxOf</a>\n```typescript\nexport function maxOf<Key extends string>(k: Key): <Item extends HasKey<Key, number>>(acc: Item, current: Item) => Item\nexport function maxOf<A>(f: (a: A) => number): (acc: A, current: A) => A\n```\n\nA reducer generator that takes either a path or a getter function and producers \na reducer that will find the element in the collection that has the max of that\nproperty\n\n```js\n> [{a: 1}, {a: 3}, {a: 2}].reduce(maxOf('a'))\n{ a: 3 }\n\n> store.users.reduce(maxOf(user => user.name.length))\n{ name: 'Elizabeth Swan', ...}\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<Post>(users[0].posts.reduce(maxOf('likes')))\nexpectError(users[0].posts.reduce(maxOf('title')))\nexpectError(users[0].posts.reduce(maxOf('farts')))\nexpectType<User>(users.reduce(maxOf(user => user.name.length)))\nexpectError(users.reduce(maxOf(user => user.name)))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should find largest elements', () => {\n  store.users.reduce(maxOf(user => user.name.length)).should.be.equal(liz)\n  jack.posts.reduce(maxOf('likes')).likes.should.be.equal(70)\n})\n\n```\n\n</p>\n</details>\n\n### <a href='minOf'>minOf</a>\n```typescript\nexport function minOf<Key extends string>(k: Key): <Item extends HasKey<Key, number>>(acc: Item, current: Item) => Item\nexport function minOf<Item>(f: (a: Item) => number): (acc: Item, current: Item) => Item\n```\n\nThe opposite of [`maxOf`](#maxOf).\n\n\n\n\n### <a href='findOf'>findOf</a>\n```typescript\nexport function findOf<Key extends string>(k: Key): <Item extends HasKey<Key>>(acc: Item, item: Item) => Item\nexport function findOf<Item>(f: (a: Item) => any): (acc: Item, current: Item) => Item\nexport function findOf<Pattern>(p: Pattern): <Item extends HasPattern<Pattern>>(acc: Item, item: Item) => Item\n```\n\nTakes an [into pattern](#into) and produces a reducer that returns either the accumulated item\nor the current item if it passes the given test.\n\n```js\n> store.users.reduce(findOf('goldMember'))\nliz\n\n> store.users.reduce(findOf({goldMember: false}))\njack\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<User>(users.reduce(findOf('name')))\nexpectType<User>(users.reduce(findOf({name: 'butt'})))\nexpectError(users.reduce(findOf({butt: 'name'})))\nexpectType<User>(users.reduce(findOf(user => user.name)))\nexpectError(users.reduce(findOf(user => user.butt)))\nexpectError(users.map(findOf(user => user.butt)))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('finds elements given a pattern', () => {\n  store.users.reduce(findOf('name')).should.be.equal(store.users[0])\n  store.users.reduce(findOf({name: liz.name})).should.be.equal(liz)\n})\n\n```\n\n</p>\n</details>\n\n### <a href='sumOf'>sumOf</a>\n```typescript\nexport function sumOf<Key extends string>(k: Key): (acc: number, current: HasKey<Key, number>) => number\nexport function sumOf<A>(f: (a: A) => number): (acc: number, current: A) => number\n```\n\nA reducer generator that takes either a path or a getter function and producers \na reducer that will sum all of the values produced by the getter\n\n```js\n> [{a: 1}, {a: 3}, {a: 2}].reduce(sumOf('a'), 0)\n6\n\n> liz.posts.reduce(sumOf('likes'))\n15000\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(users[0].posts.reduce(sumOf('likes'), 0))\nexpectError(users[0].posts.reduce(sumOf('title'), 0))\nexpectError(users[0].posts.reduce(sumOf('farts'), 0))\nexpectType<number>(users.reduce(sumOf(user => user.name.length), 0))\nexpectError(users.reduce(sumOf(user => user.name), 0))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should sum all elements specified by pattern', () => {\n  store.users.reduce(sumOf(user => user.name.length)).should.be.equal(37)\n  liz.posts.reduce(sumOf('likes')).should.be.equal(15000)\n})\n\n```\n\n</p>\n</details>\n\n### <a href='productOf'>productOf</a>\n```typescript\nexport function productOf<Key extends string>(k: Key): (acc: number, current: HasKey<Key, number>) => number\nexport function productOf<A>(f: (a: A) => number): (acc: number, current: A) => number\n```\n\nA reducer generator that takes either a path or a getter function and producers \na reducer that will multiply all of the values produced by the getter\n\n```js\n> [{a: 1}, {a: 30}, {a: 2}].reduce(productOf('a'), 1)\n60\n\n> liz.posts.reduce(productOf('likes'))\n50000000\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(users[0].posts.reduce(productOf('likes'), 1))\nexpectError(users[0].posts.reduce(productOf('title'), 1))\nexpectError(users[0].posts.reduce(productOf('farts'), 1))\nexpectType<number>(users.reduce(productOf(user => user.name.length), 1))\nexpectError(users.reduce(productOf(user => user.name), 1))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should multiply all elements specified by pattern', () => {\n  store.users.reduce(productOf(user => user.name.length)).should.be.equal(1848)\n  liz.posts.reduce(productOf('likes')).should.be.equal(50000000)\n})\n\n```\n\n</p>\n</details>\n\n\n## <a href=lens-consumers>Lens Consumers</a>\n\n### <a href='get'>get</a>\n```typescript\n```\n\n`get` takes any number of lenses, and returns a function that takes an object and applies\neach of those lenses in order to extract the focus from the lens. (If you are using TypeScript,\nyou'll be pleased to know it's typesafe, and can track the type of lenses and catch many errors).\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<string>(get('name')(user))\nexpectType<string>(get(0, 'name')(users))\nexpectError(get(0, 'fart')(users))\nexpectType<User | undefined>(get('bestFriend')(user))\nexpectType<ErrorCannotLensIntoOptionalKey<User | undefined, \"name\">>(get('bestFriend', 'name')(user))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit(\"is an accessor\", () => {\n    get('name')(jack).should.equal('Jack Sparrow')\n})\n\nit(\"is composable\", () => {\n    get('users', 0, 'name')(store).should.equal('Jack Sparrow')\n});\n\nit(\"extracts matching elements\", () => {\n    get(matching(\"goldMember\"))(store.users).should.deep.equal([liz])\n})\n\nit(\"composes with traversals\", () => {\n    get(\"users\", all, \"posts\")(store).should.deep.equal([jack.posts, liz.posts, bill.posts])\n})\n\nit(\"preserves structure with traversals\", () => {\n    get(\"byName\", all, \"goldMember\")(store).should.deep.equal({jack: false, liz: true, bill: false})\n})\n\nit(\"nests traverals in output\", () => {\n    get(\"users\", all, \"posts\", all, \"likes\")(store).should.deep.equal([[5, 70], [10000, 5000], [3000]])\n})\n\nit(\"handles folds as lenses\", () => {\n    get(\"users\", 0, \"posts\", maxBy('likes'), 'likes')(store).should.equal(70)\n})\n\n```\n\n</p>\n</details>\n\n\n\n\n\n### <a href='add'>add</a>\n```typescript\nexport function add(a: number): (b: number) => number\n```\n\nCurried `+` operator\n\n```js\n> add(5)(2)\n7\n\n> [1, 2, 3].map(add(5))\n[6, 7, 8]\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(add(1)(3))\nexpectError(add(1)('s'))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('works', () => {\n  add(5)(2).should.be.equal(7);\n  [1, 2, 3].map(add(5)).should.deep.equal([6, 7, 8]);\n})\n\n```\n\n</p>\n</details>\n\n### <a href='sub'>sub</a>\n```typescript\nexport function sub(a: number): (b: number) => number\n```\n\nCurried `-` operator. _NOTE_: Like the [logical](#logical) functions, `sub` is \nreversed; i.e. `sub(a)(b) === b - a`, so `sub(3)` means \"Take a number and subtract\n3 from it\"\n\n```js\n> sub(5)(2)\n3\n\n> [1, 2, 3].map(sub(5))\n[-4, -3, -2]\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<number>(sub(1)(3))\nexpectError(sub(1)('s'))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('works', () => {\n  sub(5)(2).should.be.equal(-3);\n  [1, 2, 3].map(sub(5)).should.deep.equal([-4, -3, -2]);\n})\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='includes'>includes</a>\n```typescript\nexport function includes(snippet: string): (text: string) => boolean\n```\n\nReversed version of `String::includes`. Takes a snippet, and produces a function that will take a string,\nand produce a boolean if that string contains the snippet. Very useful when working with [`into`](#into)\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<boolean>(includes('hello')('hello'))\nexpectError(includes('hello')(false))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('checks for inclusion', () => {\n  includes('he')('hello').should.be.true\n  includes('hello')('he').should.be.false\n})\n\n```\n\n</p>\n</details>\n\n### <a href='includesi'>includesi</a>\n```typescript\nexport function includesi(snippet: string): (text: string) => boolean\n```\n\nReversed, case-insensitive version of `String::includes`. Takes a snippet, and produces a function that will take a string,\nand produce a boolean if that string contains the snippet, ignoring case. Very useful when working with [`into`](#into)\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<boolean>(includesi('hello')('hello'))\nexpectError(includesi('hello')(false))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('checks for inclusion', () => {\n  includesi('he')('hello').should.be.true\n  includesi('hello')('he').should.be.false\n})\n\nit('ignores case', () => {\n  includesi('HE')('hello').should.be.true\n  includesi('He')('hEllo').should.be.true\n  includesi('hello')('he').should.be.false\n})\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='all'>all</a>\n```typescript\nexport function all<A>(): Traversal<A>; // tslint:disable-line\n```\n\n`all` is the simplest traversal; it simply signifies that this traversal wi\nin a collection. It is the lens equivalent of the `map` function. \n```js\n> get('users', all(), 'name')(store)\n['Jack Sparrow', 'Elizabeth Swan', 'Bootstrap Bill']\n```\nAs you can see above, the `'name'` lens didn't apply directly to the array of users, and try to extract\na `name` property from the array, but instead mapped it over the array.\n\nIf you're _not_ using typescript, you'll find that you can just use the `all` function itself as\nthe traversal, and there's no need to call it:\n```js\n> set('users', all, 'name')('butt')(store)\n{ users: [...] } // All users will have the name butt\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<string[]>(get('friends', all<User>(), 'name')(user))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('should act as identity with get', () => {\n    get(all)([1, 2, 3, 4]).should.deep.equal([1, 2, 3, 4]);\n    get(all)({ a: 1, b: 2, c: 3, d: 4 }).should.deep.equal({ a: 1, b: 2, c: 3, d: 4 });\n});\n\nit('should allow multifoci gets', () => {\n    get('a', all, 'b')({ a: [{ b: 1 }, { b: 2 }] }).should.deep.equal([ 1, 2 ]);\n});\n\nit('should allow deep multifoci gets', () => {\n    const store = {\n    users: [\n        {\n        blog: {\n            posts: [\n            {\n                title: 'Hi'\n            }\n            ]\n        }\n        }\n    ]\n    };\n    get('users', all, 'blog', 'posts', all, 'title')(store).should.deep.equal(\n    [['Hi']]\n    );\n});\n\nit('should allow deep multifoci mods', () => {\n    const store = {\n    users: [\n        {\n        blog: {\n            posts: [\n            {\n                title: 'Hi'\n            }\n            ]\n        }\n        }\n    ]\n    };\n    mod('users', all, 'blog', 'posts', all, 'title')(s => s.toLowerCase())(\n    store\n    ).users[0].blog.posts[0].title.should.equal('hi');\n});\n\nit('should act as map with mod', () => {\n    assert.deepStrictEqual([2, 3, 4, 5], mod(all)(inc)([1, 2, 3, 4]));\n    assert.deepStrictEqual(\n    { a: 2, b: 3, c: 4, d: 5 },\n    mod(all)(inc)({ a: 1, b: 2, c: 3, d: 4 })\n    );\n});\n\n\nit('should compose in the middle of a lens and act as map', () => {\n    assert.deepStrictEqual(\n    [{ n: 1, c: 5 }, { n: 2, c: 7 }],\n    mod(all, 'c')(inc)([{ n: 1, c: 4 }, { n: 2, c: 6 }])\n    );\n});\n\nit('should compose in the middle of multiple lenses', () => {\n    mod(all, 'c', all)(inc)([\n        { n: 1, c: { d: 1, e: 7 } },\n        { n: 2, c: { d: 1, e: 7 } }\n    ]).should.deep.equal(\n    [{ n: 1, c: { d: 2, e: 8 } }, { n: 2, c: { d: 2, e: 8 } }]\n    );\n});\n\nit('should work in function form as well', () => {\n  Object.entries(all).should.deep.equal(Object.entries(all()))\n});\n\n```\n\n</p>\n</details>\n\n\n\n### <a href='findBy'>findBy</a>\n```typescript\nexport interface FindBy {\n  <Key extends string>(k: Key): Lens<Collection<HasKey<Key>>, HasKey<Key>>\n  <A>(f: (a: A) => any): Lens<Collection<A>, A>\n  <Pattern>(p: Pattern): Lens<Collection<HasPattern<Pattern>>, HasPattern<Pattern>>\n\n  of: <A>(pattern: any) => Lens<Collection<A>, A>\n}\n\n```\n\n`findBy` is a folding lens that focuses on the element of a collection that matches the\ngiven [`into` pattern](#into). For example, in our store example, we could find Jack Sparrows\n`goldMember` status with:\n```js\n> get('users', findBy({name: contains('Jack')}), 'goldMember')(store)\nfalse\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<string>(get('friends', findBy.of<User>({name: 'john'}), 'name')(user))\nexpectType<Post[]>(get('friends', findBy.of<User>('goldMember'), 'posts')(user))\nexpectType<Post[]>(get('friends', findBy((user: User) => user.settings), 'posts')(user))\nexpectError(get('friends', findBy((user: User) => user.settings), 'pots')(user))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascript\nit('acts as a reducer', () => {\n    get('users', findBy({name: 'Jack Sparrow'}), 'name')(store).should.equal('Jack Sparrow')\n    get('users', findBy('goldMember'), 'name')(store).should.equal('Elizabeth Swan')\n})\n\nit('uses of as an alias', () => {\n    get('users', findBy.of({name: 'Jack Sparrow'}), 'name')(store).should.equal('Jack Sparrow')\n    get('users', findBy.of('goldMember'), 'name')(store).should.equal('Elizabeth Swan')\n})\n\nit('produces undefined when it cant find something', () => {\n    should.not.exist(get('users', findBy({name: 'frank'}))(store))\n})\n\n```\n\n</p>\n</details>\n\n### <a href='maxBy'>maxBy</a>\n```typescript\nexport interface MinBy {\n  <Key extends string>(k: Key): Lens<Collection<HasKey<Key>>, HasKey<Key>>\n  <A>(f: (a: A) => any): Lens<Collection<A>, A>\n\n  of: <A>(pattern: any) => Lens<Collection<A>, A>\n}\n\n```\n\n`maxBy` is a folding lens that focuses on the element of a collection that has the\nmaximum value for the given [`into` pattern](#into). For example, in our store example, \nwe could find Jack Sparrows most liked post title with:\n```js\n> get('users', findBy({name: icontains('jack')}), 'posts', maxBy('likes'), 'title')(store)\n'Sea Turtles - The Tortoise and the Hair'\n```\n\n\n<details><summary><em>TypeScript Usage</em></summary>\n<p>\n\n```typescript\nexpectType<string>(get('friends', maxBy.of<User>({name: 'john'}), 'name')(user))\nexpectType<Post[]>(get('friends', maxBy.of<User>('goldMember'), 'posts')(user))\nexpectType<Post[]>(get('friends', maxBy((user: User) => user.settings), 'posts')(user))\nexpectError(get('friends', maxBy((user: User) => user.settings), 'pots')(user))\n\n```\n\n</p>\n</details>\n\n<details><summary><em>Tests</em></summary>\n<p>\n\n```javascri","readmeFilename":"README.md"}