{"_id":"bottender-compose","_rev":"45-f373489278f9208694343b923660a2d0","name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","dist-tags":{"latest":"1.0.0-beta.0","next":"1.0.0-alpha.2"},"versions":{"0.0.3":{"name":"bottender-compose","version":"0.0.3","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"main":"src/index","license":"MIT","engines":{"node":">=6"},"devDependencies":{"eslint":"^4.3.0","eslint-config-prettier":"^2.3.0","eslint-config-yoctol-base":"^0.13.0","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^2.1.2","husky":"^0.14.3","jest":"^20.0.4","lint-staged":"^4.0.2","prettier":"^1.5.3"},"scripts":{"lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","precommit":"lint-staged","testonly":"jest","testonly:watch":"jest --watch","test":"yarn run lint && yarn run testonly"},"lint-staged":{"*.js":"eslint --fix"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node"},"dependencies":{"random-item":"^1.0.0"},"gitHead":"4319982d7b92d18505d7490e584535018db8138f","description":"## License","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.0.3","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-PjnE62QsTMSpc3PnZ0Nf+Pj8CqEx6Em+iUS/O4s3W7krJAPI6lpeQa3SI5H/8L9FWRHm3IOo1B/4AjYqr88Qvw==","shasum":"3bec509c70646075e45bbe61c3538c5aa88d9d44","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.0.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHMZKcqqzbDfe/il1CjazhFTo0KulsuuEWy541TTa4RXAiEArbBBPnH1u456164D8XPjwID0KX+GevMxIB92cSf09SA="}]},"maintainers":[{"name":"chentsulin","email":"chentsulin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.0.3.tgz_1508811104095_0.0013986455742269754"},"directories":{}},"0.1.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","version":"0.1.0","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"main":"src/index","license":"MIT","engines":{"node":">=7.6"},"keywords":["bot","bottender","compose"],"devDependencies":{"delay":"^2.0.0","eslint":"^4.3.0","eslint-config-prettier":"^2.3.0","eslint-config-yoctol-base":"^0.13.0","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^2.1.2","husky":"^0.14.3","jest":"^20.0.4","lint-staged":"^4.0.2","prettier":"^1.5.3"},"scripts":{"lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","precommit":"lint-staged","testonly":"jest","testonly:watch":"jest --watch","test":"yarn run lint && yarn run testonly"},"lint-staged":{"*.js":"eslint --fix"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"dependencies":{"random-item":"^1.0.0"},"gitHead":"c65e95691956e6887ebe3bb43b5c27b07e0d6085","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.1.0","_npmVersion":"5.4.2","_nodeVersion":"8.8.0","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-+o0RpPgK4xN3ibzWy7cXRh6bpnLwlOuR66r/c5W40OPup/za8/HrYelvEew2yUAIzHCaoKXT78NJXOmVGhmaHw==","shasum":"a4749b87d366f137d561fc8b4f84a8280000b356","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.1.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCG6R8YbXppAEu22wGVgRc0r/rSxdcbVGYAsNidn5KGmwIgButbPunlhsDZPt9o7c/6JYv+AaghYsWILaETGuKltMo="}]},"maintainers":[{"name":"chentsulin","email":"chentsulin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.1.0.tgz_1512020632553_0.03552978695370257"},"directories":{}},"0.1.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","version":"0.1.1","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"main":"src/index","license":"MIT","engines":{"node":">=7.6"},"keywords":["bot","bottender","compose"],"devDependencies":{"delay":"^2.0.0","eslint":"^4.3.0","eslint-config-prettier":"^2.3.0","eslint-config-yoctol-base":"^0.13.0","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^2.1.2","husky":"^0.14.3","jest":"^20.0.4","lint-staged":"^4.0.2","prettier":"^1.5.3"},"scripts":{"lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","precommit":"lint-staged","testonly":"jest","testonly:watch":"jest --watch","test":"yarn run lint && yarn run testonly"},"lint-staged":{"*.js":"eslint --fix"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"dependencies":{"random-item":"^1.0.0"},"gitHead":"694bcac9b420ebb32c5fc1e1934e0c7fea56430c","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.1.1","_npmVersion":"5.5.1","_nodeVersion":"9.2.0","_npmUser":{"name":"kpman","email":"s92f002@gmail.com"},"dist":{"integrity":"sha512-6IABsN5ubRLmKWPk7Z05leX0vhcFFiaxiyI4ykRHrF9YCbTMN1TgV3KiMy7rN0PtO4ZqADxpyqgj+Pb3fi6p5g==","shasum":"9af03d8e1835aaa3a896184a535f2ed0b5137a49","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.1.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDJT71uEWin5kABPxflsIzRmsj9d2ISGGF0Tv2fi5fzGAiEAlr03EQ5vOKt1R0HQDV3wByULdeeQt/kAnRou+tqP0zI="}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.1.1.tgz_1512026513097_0.14816041523590684"},"directories":{}},"0.2.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","version":"0.2.0","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"main":"src/index","license":"MIT","engines":{"node":">=7.6"},"keywords":["bot","bottender","compose"],"devDependencies":{"delay":"^2.0.0","eslint":"^4.3.0","eslint-config-prettier":"^2.3.0","eslint-config-yoctol-base":"^0.13.0","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^2.1.2","husky":"^0.14.3","jest":"^20.0.4","lint-staged":"^4.0.2","prettier":"^1.5.3"},"scripts":{"lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","precommit":"lint-staged","testonly":"jest","testonly:watch":"jest --watch","test":"yarn run lint && yarn run testonly"},"lint-staged":{"*.js":"eslint --fix"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"dependencies":{"random-item":"^1.0.0"},"gitHead":"c432c5dc5f03ac5eb6f374cbc30c391b9d7d076d","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.2.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-Mn7m0kMUYzeFbp6CmmS96hwspgwy8fNU8jY0/AcCn+DujmmOjERbBFrk9nLpUpgCYBLsinDWhbit9yst2Iuzsg==","shasum":"09e6238b230c6963e0238312e3f2d73ba49f3553","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.2.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHNU8SHTHzuSqcW4CPQkCb3mWtE6w2Q9TWDlo3vP3J9hAiBWkLXE8dUqB67zaozT8dKXJ5qqkrHHyfckKBPxUNzYqg=="}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.2.0.tgz_1512643351035_0.08775509498082101"},"directories":{}},"0.3.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","version":"0.3.0","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"main":"src/index","license":"MIT","engines":{"node":">=7.6"},"keywords":["bot","bottender","compose"],"devDependencies":{"delay":"^2.0.0","eslint":"^4.3.0","eslint-config-prettier":"^2.3.0","eslint-config-yoctol-base":"^0.13.0","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^2.1.2","husky":"^0.14.3","jest":"^20.0.4","lint-staged":"^4.0.2","prettier":"^1.5.3"},"scripts":{"lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","precommit":"lint-staged","testonly":"jest","testonly:watch":"jest --watch","test":"yarn run lint && yarn run testonly"},"lint-staged":{"*.js":"eslint --fix"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"dependencies":{"random-item":"^1.0.0"},"gitHead":"c08e4862d3b9b3dae1e861446a46d97e89670227","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.3.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-i0BPbbtq02L5dzqfU4cnAUAgJFIY9TAD+5xbi9aFbcCtt39BV/2bWikp6MFxRloUwP677FMfxx2MXVHETj7QRQ==","shasum":"9fdab4e2fe7489f3f4c356789a53924afca3d4fd","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.3.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+XFmM8bvUKB9TbYqDqDBW0vT1nhknFqSUNgtNb3cN5QIhAJLVzHh7T+FCTj0TdGAqIZBcg754vJ4Ne1KuKYR8Fi8j"}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.3.0.tgz_1512968485471_0.9533548976760358"},"directories":{}},"0.3.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","version":"0.3.1","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"main":"src/index","license":"MIT","engines":{"node":">=7.6"},"keywords":["bot","bottender","compose"],"devDependencies":{"delay":"^2.0.0","eslint":"^4.3.0","eslint-config-prettier":"^2.3.0","eslint-config-yoctol-base":"^0.13.0","eslint-plugin-import":"^2.7.0","eslint-plugin-prettier":"^2.1.2","husky":"^0.14.3","jest":"^20.0.4","lint-staged":"^4.0.2","prettier":"^1.5.3"},"scripts":{"lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","precommit":"lint-staged","testonly":"jest","testonly:watch":"jest --watch","test":"yarn run lint && yarn run testonly"},"lint-staged":{"*.js":"eslint --fix"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"dependencies":{"random-item":"^1.0.0"},"gitHead":"95086694df50de4cada770d572ea8a746e6a8755","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.3.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-JT+VaRKecZWKSbANLX3IyC6KfsMOvH1YDi3+aPOP2eycfO3MirSr616urx4XcvgcY6vX/dXZftmBwkQSwiJXiw==","shasum":"54793d25cea2f4501d0888814e9f92a2e1c7943d","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.3.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBiJY0UfJCeLpWbsEzVKWo34dNmLkR5TeA0KNzyYrYs6AiBNCHPqxRVquD+UqkmPBWNHR863U/KMUwp4RTC164hxdQ=="}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.3.1.tgz_1513141071777_0.00101203634403646"},"directories":{}},"0.4.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"0.4.0","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:watch":"jest --watch"},"dependencies":{"noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"delay":"^2.0.0","eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"gitHead":"275ec089ffad2832bd11107b28a3efeb680bb51d","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.4.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-Ztc36s8L78ngj3cqANNF2hmd+XRhrtE/TMXStlVVoFHsTuTJdwZrQURjH+h9V3Aex1Dm0dWRLCj+cjjoyiEMEw==","shasum":"e3ab874362720fca556800e3eb521b32aac79d86","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.4.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCK3vaKL1zvxMKTf2aBPf83uy0nqwMNhgk7XuW2GHjxxgIgWCh2BbAvEiObYAzuWfmaAQSVsLsgnOko3hp5b/oBb8Q="}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.4.0.tgz_1513221106756_0.8430614860262722"},"directories":{}},"0.5.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"0.5.0","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"gitHead":"13adfbef972a103bc18141f0946ccb24c85baeef","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.5.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-V9MYOapUSpOY6PBOuOHRfI8KHTgAFH4TioW+q0Ez3qRoalNUACzTgIteTZuLvTzSpLYf/7WSIbhUrhXNfi4xyA==","shasum":"bfff62d03ab744e80df9217dd568710b65b86225","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.5.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEbcvryXa2f4RUhlu5iEzKqpirzCBoMvWWGopGX4E4oVAiEArMLL10ybd58oEbCkNT2Bs4EHD8G9DsDlGHdhEtc0vvY="}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.5.0.tgz_1513753098191_0.31104201963171363"},"directories":{}},"0.5.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"0.5.1","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"gitHead":"071d8ca821923f6285db44503dfdc2d66693e068","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.5.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.3","_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"dist":{"integrity":"sha512-SJtKtDTDJVDNU3KQZxMRRS/m/N/EZPlhONWW+tovg7Bqr95DSIQ53xk5tnh5wjns8F0CFnq9WinIOluFhuJLlA==","shasum":"a8e9a1b0f334375ba221fe4eaf190ef39ff35cb6","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.5.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE/Xca5pJI5Ss1wwIPq0nHiNXbAByQz/d1+7Byic+8THAiAZMvCvg+w+AWXOjJDyfF+qnR43/WXd2W1kSczUca4fHg=="}]},"maintainers":[{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"chentsulin@gmail.com","name":"chentsulin"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose-0.5.1.tgz_1513762799538_0.7394264698959887"},"directories":{}},"0.6.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.6.0","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.6.0","dist":{"shasum":"ff89b8c1f6dc78fe334efe6a5fbc6db04504c68b","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.6.0.tgz","fileCount":35,"unpackedSize":29748,"integrity":"sha512-aY1TGBzssDM1FVh84GFhKoXHnGhxcdfNSy0z+YWFR4rAS6jkdqgbN9P6LR0cJabSVSwWRwS+BU7+OnENGd+n8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGDng1oJODKUk5xPBnRsguO8hKw6ZFELpI0lYc0ZMrCAiB1JogBwWfHQNw6KJWI24w+UA4bg1oBnt100tAN2Icp8A=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.6.0_1521612829708_0.8388374826808076"},"_hasShrinkwrap":false},"0.6.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.6.1","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.6.1","dist":{"shasum":"31b8e336fa503c8aad7d38adeec04accf9a0ee29","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.6.1.tgz","fileCount":35,"unpackedSize":31900,"integrity":"sha512-q4Y7rYP0qFRe0ZjPC/heB1WZph2Bdr+D6QDNJ6F2fN2g+EB9MtqUbZ2dV+vmlBkntJZZeVd2up9JhTFbPDAzTg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGaYBRNA6C+XBz6Ll7V0vdAKqEZkGEj9eJtqSPQVCzVmAiEA4NYfluCcQF2KHVYEPopgipobUtfTCBWRKd8NVrCYUnE="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.6.1_1521622543164_0.5189539150716802"},"_hasShrinkwrap":false},"0.6.2":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.6.2","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.6.2","dist":{"shasum":"8a1123fb30d9ecbd7f34e1880f99f83b42964c92","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.6.2.tgz","fileCount":35,"unpackedSize":32817,"integrity":"sha512-3aE1KYyXZtmwcgGM/jtMdwlFFSicHdZGfueBmVF/FCN6RbVAsda0DC5Cxqg4zKBEEmd4hAdUD8PmyFrpiCxmSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9EMOv3e4ImUfowBkRFjRi44LqOY+yEaCTdoQEIo7C9AiB3BxG/mdm20xHpRLnb17WvRgVm8ujIl+f0yUCCSG++Mw=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.6.2_1521711331576_0.45821217305543605"},"_hasShrinkwrap":false},"0.7.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.7.0","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.4","noop2":"^2.0.0","random-item":"^1.0.0"},"devDependencies":{"eslint":"^4.13.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.14.2","eslint-plugin-import":"^2.8.0","eslint-plugin-prettier":"^2.3.1","husky":"^0.14.3","jest":"^21.2.1","lint-staged":"^6.0.0","prettier":"^1.9.2","prettier-package-json":"^1.4.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.7.0","dist":{"shasum":"718ba0a3f550047de1b7c4eca2de9be05e42e0b8","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.7.0.tgz","fileCount":38,"unpackedSize":42655,"integrity":"sha512-gUleIOb0xbTqOrgFGUdyIWXdl0/5JTUYa+5Pd531wp4p5WrNy+WheXYUwxXIa5bZ+EvaZue87xx5cYcq/vN5/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFwLrzOI5zmSjFSM+F4mwkeli1ObsQDUDB8G1Leb/CbxAiEAvrOuhv4/UBebeU/GlVODB+6DcFHD4etxIwalcT45LMc="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.7.0_1522486162007_0.9704193177619738"},"_hasShrinkwrap":false},"0.8.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.8.0","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.8.0","dist":{"shasum":"0cac922feb07b8bf6d2fb0a4c93648f256990d49","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.8.0.tgz","fileCount":43,"unpackedSize":55588,"integrity":"sha512-+LU9QpaP99qV44ZixjlrLWDS8PGonlF8z+dHB5fGNsDNw+WG03CQVjINy78Dl2o4ovEZCyV4+tehloNNN9tFsw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHTBRGlDt3BN1LqnwHQkoK83UIGNizNuh0Zyzfi2QCoOAiBCiCX08gWSlYAvoHrviVt3iNvHgFzlqiIlnSALBMfYHg=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.8.0_1522662708130_0.22802032838573205"},"_hasShrinkwrap":false},"0.8.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"0.8.1","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"gitHead":"09ce86b350c29bd7ff3d19e56edd001c53318394","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@0.8.1","_npmVersion":"5.6.0","_nodeVersion":"9.4.0","_npmUser":{"name":"kpman","email":"s92f002@gmail.com"},"dist":{"integrity":"sha512-aUp5qddZtj7JvJ6TD+SZFLf3aX94bAElqKJlkH20UtD1RLt2OcRsdxhqrki4rb5KKd7PL+SHeiUIva9Q5hTWwA==","shasum":"7bb561178227cca42626f0f79a4830137881568b","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.8.1.tgz","fileCount":40,"unpackedSize":200423,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWYu/ZmWrw9uKSMlSnw9v5kjDnMDc3sKhRUUAMLbeUIAIhAOdTe395y0lCHhKuHB9XDFlz8AHHiqlqw8qBZYIbSDEt"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.8.1_1522666091357_0.3655529363089969"},"_hasShrinkwrap":false},"0.8.2":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.8.2","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.8.2","dist":{"shasum":"37efface78474913869f970fa1f772c044d621b2","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.8.2.tgz","fileCount":45,"unpackedSize":57492,"integrity":"sha512-1IAqnaUufqCIUolU6+M8zWJxPRLk9ifAFL/EnCG9jtOiYmM1SldeqXjYpN9VfBchZ32YHM0tEgYaLvvWVB0adg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCucXJ3+l4+jN7Qlo/t9XYVHgEhXBr3v3CzENgo3UCDIQIhANS0+lA7KSYqLkAxLjK9CblPX9c2szoslEoajE9fJNZ0"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.8.2_1523205694451_0.43700001964010626"},"_hasShrinkwrap":false},"0.8.3":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.8.3","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.8.3","dist":{"shasum":"50b56db4c9e639d54524d7414a1ff1f7406e4ae2","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.8.3.tgz","fileCount":45,"unpackedSize":58412,"integrity":"sha512-NTtu4hn5va0rfo5CzdigH+gNcDLGiFUOlp3IjQ9DfpZUaZ74zaKzd93mendUT0sJHqbsP8YEpbehV/A+7plYTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAlyFOf9ZYoJ8HxoXIDNivGkVI3CK8ZbE86sJzvcePaQIgEnsKEuU4Ot9dG9oFXJbIYJ4/hzlLllOmHxOhdwSlpCA="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.8.3_1523529144093_0.6948524676454553"},"_hasShrinkwrap":false},"0.8.4":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.8.4","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.8.4","dist":{"shasum":"ae677077e94341034df5e9ac5883ab78034e6510","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.8.4.tgz","fileCount":45,"unpackedSize":58608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4YHjCRA9TVsSAnZWagAA+gcP/jkBNyzxWF5QU3fDV1Fz\nmjS39uCQv9ioBXZf/T0uslDHUmb4Y8a3mRIa5Hp8KpasTkCnLkrZnVUPEbNr\nzX3LqYulTCAbnJp2/d0xihfzGNXg42mzCp2v2mwEW2l+/ycRxIfQd19iQxTF\nHTJwIUnIVl9Xu3rVsXWwLWHIxbaXjljemaHnE3nKWfr4ZbsGBwYnBtTx7KMo\nKJObuJ6eQf5bBQHQOTHUNTorAk6TFtvi4jpthWHcFwMQ3cnGUMtnrJqRAPnK\n3ytYwg/lKDHOs55EERttN6RmNm/A7+WsVTacGWgeILvwsPYi5bGhF3dPtcCD\nFqbbSO/qwquq/+Ojfm4x8cEPc0WtqHqdxBLGlL/SVOLnQhw+jphvfFc9ZyOc\nS8EjuWhzQwaiouW76kmzKIaHeADUj8DoMNd0HXUGc9W6oVIRUH4TU8l/SrU2\nd+DL9pI/RLqR84Yi16yyQEcBlhuia//bu3w5ijckGka6XuvZf0MFsH8cSCGL\noQmccSlPhOWtGoOq2vrdcQ7MP/dY3eoxIsWOz/r7zUd5PStnQM17YZz1bQ87\nnF40WX+eW1oL9bFtDHfK5F8d6fe/oQwscQwcZB/r7WrRjpI9hhh0Ixckl0/W\nG2bFhXJO7oqH9Skycz+56UIxC5zFPAz+V9gcxV/ihtlTNjn0iPVEt31ZNptR\nfa3x\r\n=MnnS\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-nT0QaxwVSjWf5zX/yVwKIA+QnBmvydVeeksT9P8OrVr9d2SNRuhA5cLCCy9QJ8NX6KVgY4V64MHnhIWGz8646w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9m/va+wjERY3ZUzDcmFbIMqWl+JvFZSnYmqbY13Q4IwIgE6/nY9AtP99kKdahZP9kaQyLqkODSByjyRf3sAjY4Os="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.8.4_1524728290813_0.17480852087480225"},"_hasShrinkwrap":false},"0.9.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.9.0","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.9.0","dist":{"shasum":"6ff2ed1c677ee106de76ff9b243efedc2f4e0e54","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.9.0.tgz","fileCount":47,"unpackedSize":63148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa7wHDCRA9TVsSAnZWagAAMxcQAIhr1I77DC3y75xH59RP\nuOOYuhcIFcRWBGn5lcPLlrthzbcDjkso/EQ/cOgUQ4SR239hyUYikyMuh9M8\n+MdgSJMB9iCLrqWu7jA8/soreKMjZHD/eNX0wrBjL8lRbqsiD5ae4lVVH1JG\nXSu8jXRxqfZh30El0Zu36TpUYwfu90/zxGiRgXALcEM4JVgcA2Gf6aQf1Muq\n+HjLeH5Wrg98KZGnqWoNTaEoKqjsX51FKSDSqUE8/jmDrqUOkXko96xeJUtw\nIBMSX4c3C9q9B0vPo4ipYAaG1mk1rs8e3t2VVpvR8TccMv+wl1oMvFTd609U\njkEKXwSYN19h5M/nLOkkns/I1as3u6p8JCTPhe8pP4BrIF26wM0p3bBExKZ2\n6duj59ZpGXB3ATKyD2lfDP+YSPGKYDzidLsuoRG4bICn31UregYGMXGOcq4s\nnRQ8vLrrvJoh0/Qv9Fyv8pL5QPpUEQhuZGbQbpWUKIYvch7tW7paPeeygw7h\n6IYiAeAujjGTGuZKfLDag78+ojmBi4/dQi1W1rmMBTYv94PY+jsAzZluy/sR\nrfk92kO4xuI5QFObzC0/vcUcK9iSGBE0D9hSGr+MZ1vNWn5h4o3VsBXLKOC1\nEo9e74+FLY+N+wuGt0NaAvnfSOclL2j9JwoUnyADngEG9oSHMaHhDWMjhu8O\n08ya\r\n=KyOE\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-24Vto3/zkVWpKVHHwYm62S3ey6FYoWmbg48pX8/MrTLhybCmD9I3DL+qXIXhmJzBIJUopISY4MoRjnS06DcaeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH2SW6Qt8AyVX/UadNMGGs7Y8UFlCivO4GmslYRr4nQXAiAqEkwNo7RFcl9QMGA0IRV3ZD/47Ct0uWIGWlcmA3Ycww=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.9.0_1525612993312_0.9229119568332202"},"_hasShrinkwrap":false},"0.9.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.9.1","main":"src/index","scripts":{"precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.9.1","dist":{"shasum":"d6d14a79e4ed8b93d2f30b71acdf7a749a1ad591","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.9.1.tgz","fileCount":49,"unpackedSize":67534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa78Z9CRA9TVsSAnZWagAAukkQAJu3pp3s/DKX4Fsx6Wjd\n0rP7BywMjZNshOK6NHm8GhtRAMVYQKhfBTJ7Cp/lr6Ed82ljRcGnUaGHRiFK\nljMgjLpf5rVdgFRTLeqKzTbEFIWQKZq8BO2KBNHI4DvdSRNytZJBiDU7b0/P\ncaEHQ5UEuR/rLYntWEFOOUu1d1ydXWwya/MK9PF30uZVghyBxSQG3+8uXjKT\nhPY5Zyd8h+ZKopjQRQieXi6fC4K6hcs60c/x8rWMBFadQAXPhMjXbY6md3tC\n8F2byqMT9biZPE75CwbVovqBcSQEG4rPCp7+/HERFeIYr27mDcBcqvez3AxF\nwBhzQrpZqIVyCfCodjAaKtP6S4p8z8I9tXp6yJcGqzVKLbv63w6tH0m2r0pE\nP2Msp4CmKvx3LX7az8JUNVV484E1HebGsLtIZvhULv/NMZy8hePO7ZcO1pd4\nGWp5XqvMDci+Dzd3RNJ/ORjMf2jeDRFQzMvuNIrTbvzwSlxV26AXZOCY14Uv\nIR1FTefdVQQazxhnQp5SME27TUBbV0wAIWqiehgsF80R1jEGL/rWvIDWCR6G\ndhDjXLOtENOXL/9TSEN/NkF6czWgDlFT6+VRQzVdGRnnxWkfF5ivPhYdJyTX\nYlJrxj+dXLqXjdO0AfYaeli0qlRea7CeKPiEXRSJwucYikLvWz5xDC6tq3Da\nxyem\r\n=rgpR\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-nEYulrRDwgPkVjcj6SYdwsHqs0AfBzQty+32oSjpfBMKKuZW6TSkl72ys8b0HahLgxwsxTUnI8l/M8NxRXqg4A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9ek12vZwXtlm9Ye9bJbWF/s3yNUfHKw8ZJG3AWiTQiwIgMOYNyky+H79ZAaYV6zE7vS94sVqta/a8YqcZ9daJG0o="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.9.1_1525663356723_0.46754954408159954"},"_hasShrinkwrap":false},"0.10.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.10.0","main":"lib/index","files":["lib"],"scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"@babel/cli":"^7.0.0-beta.47","@babel/core":"^7.0.0-beta.47","@babel/plugin-proposal-class-properties":"^7.0.0-beta.47","@babel/plugin-proposal-object-rest-spread":"^7.0.0-beta.47","@babel/preset-env":"^7.0.0-beta.47","babel-core":"^7.0.0-0","babel-jest":"^22.4.3","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.10.0","dist":{"shasum":"b9db3307bcb57093516712956512207db1f88e3f","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.10.0.tgz","fileCount":5,"unpackedSize":19296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+5fpCRA9TVsSAnZWagAAG7QP/i76atAdVHV82/DBqBn8\n1jq26VyXgJy4qsz/Tl1li8Gbmnd4nsn1AVJCI3peX5FCmJHa+Aq7kUO3gLo2\nJ3jMn4ufiIz7+GFHLxaKwngGmpiNbK4CasNbfOWgRj+Q6kab8LmSLTUCDGog\nfZT329xDfXU7+oV+H3isAfHLktnfj83/2jN7fYQ8cLeBkhQ+tvVm/XPktcv9\nrB2iNE5HqnH858pYdhXzj2T4lvBn4Rs4+tYbBR2YrMrPGnnGoJDv1ObqdZFF\no6mEeHOOLQkQN2SQTSih3vsUCwyMpchqSgeVe72JVc4kkZiWa0GEZFksRXGg\nemjIRng2XrSgd2GcHG54U4mhMmE+cWPsAxTwURBP8+HivWKXbU99dHXzvDbO\njOpeLrRVppWFD4qhyFcRtnUimbRmbf9tiJWG6KMCSe39p6YHng6vrDxn6QyS\nsKidh8iR3k25PSCnBEEHfwd0/1BetcN5CrhjnNFO0OCtsbi5m7AjY9feIdFF\nlcvs1uV0fVJBuh+d/9Ph/0wKCv0E0U2OCqllEcvsLFVq/1WslStiObVvTd3x\ndxJEwGSURcr++Ph8EUOWQYNgkTJRe8GnUa7Aqz5Cw/OLVNBiFRpjxO35DWq/\nhEb44KO5k6LG6qJJU2jca8U1UCgPRrLkVTKVE+fdYn8d2zsiAjL98M0h4/BY\na9B5\r\n=aKiu\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-3UQ79E6Rd55Fy5IiWxd+hO2FVTCW2qWRD5dT4EtoXZwExosggn20w1eR3mObLbWGzNHYJBd2RXOAvcchcik/MA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+yIPoR8/885+gcJ7xJ5sHvZeeFMPp9O8+UFMDypapVgIhAPiXzsk3UEIuVKW6dXUylgjf3Gl2k25PsANA9Ua538X2"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.10.0_1526437863858_0.1807559279530091"},"_hasShrinkwrap":false},"0.10.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.10.1","main":"lib/index","files":["lib"],"scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint -- --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^2.0.0","lodash":"^4.17.5","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^3.0.0"},"devDependencies":{"@babel/cli":"^7.0.0-beta.47","@babel/core":"^7.0.0-beta.47","@babel/plugin-proposal-class-properties":"^7.0.0-beta.47","@babel/plugin-proposal-object-rest-spread":"^7.0.0-beta.47","@babel/preset-env":"^7.0.0-beta.47","babel-core":"^7.0.0-0","babel-jest":"^22.4.3","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.15.1","eslint-plugin-import":"^2.10.0","eslint-plugin-prettier":"^2.6.0","husky":"^0.14.3","jest":"^22.4.3","lint-staged":"^7.0.2","prettier":"^1.11.1","prettier-package-json":"^1.5.1","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.10.1","dist":{"shasum":"01cee093fce181fb9e21bc9795157fe51d71462e","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.10.1.tgz","fileCount":44,"unpackedSize":67037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+7I5CRA9TVsSAnZWagAAvY4P/AuDbjhAxh8/DTKw5kvh\n3Mn+1CvaUbZLvSPWU7I+gQH//g+fS73rknaPT19Y7B4dDCkCo+V+3MfkKcKk\nCu5HnNpswyQT4952YE3w8HuJySLfh1aydEw+UDvlSDxDVQuHP0K4ufxRV66y\nSAbTWEzvQ8K/0d/cPGaWm2ggI2fIIBXzYcU45G9Q0XVnsx3TMTrEeERY+Fpk\nbIMUdIoFHsFibg89mqr4xYy4WTIf+witeJa93dXfVp7PtwGjTfghR/K/LLWF\nA/ANCnFxzHkR4kbme9yobA6WRCsYNdU2Dm0FOTuw4eGITBtQd3H3Cq03ue8B\nnLBQ/ekNUuxNG4ouChtatgfIDBlsidpasbAzp3snx8LqMZb8MXxe1dHzUf6X\nK955u6bTS+VIbCmVc2cmm9DoYIVNXY1YrPv6cXw/+pTK3I6zdx3X8R/zxH/a\nTAauu/gU+gDxtfDYCgIcJ+npB/nv8LfOSsfwBDwIMu59bGT12dNRNHCCENHl\nPq15FbzWLm9g9bfLw4i0qXx+a685ZuMrugq7pwRzMxnz73E2hJUaC3V7Qzf1\nXTM2HcXpQC+UKRxeK+qX4QCQg00O8c0DKSAU0VT6/vXsUamUfncGKglm/cVV\npTMLRq11M2+AzJG8ZN1DcTZBU07dcl6BmY3zlW3cViaC6IUVxNiWUSWttgLJ\nSffm\r\n=XOGF\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-7xTnnQ0Nn5ORPVmUyF8vZy71HNPTiNSbaF5Aef+f6/lyWAA4RTn4qRtKdy0+c2HPTttis1PWsvxmGqHbdRKbDQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaN2ctgnSFdBFSyvS6ltiJHz4MjLt+IQxwkt1n1Sd/VAIhAOMz2qWvE3Pju/w+K7pVRyqqrY16g3IbLtu4vlcVG1wz"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.10.1_1526444600442_0.8860500368961346"},"_hasShrinkwrap":false},"0.10.2":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.10.2","main":"lib/index","files":["lib"],"scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.0.0","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.1"},"devDependencies":{"@babel/cli":"^7.0.0-beta.54","@babel/core":"^7.0.0-beta.54","@babel/plugin-proposal-class-properties":"^7.0.0-beta.54","@babel/plugin-proposal-object-rest-spread":"^7.0.0-beta.54","@babel/preset-env":"^7.0.0-beta.54","babel-core":"^7.0.0-0","babel-jest":"^23.4.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.17.0","eslint-plugin-import":"^2.13.0","eslint-plugin-prettier":"^2.6.0","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.4.1","lint-staged":"^7.2.0","prettier":"^1.13.7","prettier-package-json":"^1.6.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.10.2","dist":{"shasum":"a437ab20c4d7b22d3d13eb489a1de3471b634571","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.10.2.tgz","fileCount":44,"unpackedSize":67467,"integrity":"sha512-P+eSlPyZuF0XlxByjhc0FL+AshsUlxPbTZeHTEeS065IKoqXz6xD13/TgQqQ+Tb/blposZb0SpPZb1zsugj/aA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDi/HA7UZgGAWMtQRpeM0AFmc5b5cnM6boZwP4bDwwj9gIgehzu7VTmKMYbNZJ1OWaojeNKgXbO+b4ScyD1NDIaFsE="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.10.2_1532514826235_0.9589500176236185"},"_hasShrinkwrap":false},"0.10.3":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.10.3","main":"lib/index","files":["lib"],"scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.0.0","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.1"},"devDependencies":{"@babel/cli":"^7.0.0-beta.54","@babel/core":"^7.0.0-beta.54","@babel/plugin-proposal-class-properties":"^7.0.0-beta.54","@babel/plugin-proposal-object-rest-spread":"^7.0.0-beta.54","@babel/preset-env":"^7.0.0-beta.54","babel-core":"^7.0.0-0","babel-jest":"^23.4.0","eslint":"^4.19.1","eslint-config-prettier":"^2.9.0","eslint-config-yoctol-base":"^0.17.0","eslint-plugin-import":"^2.13.0","eslint-plugin-prettier":"^2.6.0","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.4.1","lint-staged":"^7.2.0","prettier":"^1.13.7","prettier-package-json":"^1.6.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.10.3","dist":{"shasum":"977fd6faacba46b027e350ee615093c040bb67c2","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.10.3.tgz","integrity":"sha512-WtpqCNkKEOkRDk0D9IGUutA6e/rGq9b9JXM4D9TCvo72ZGB4lkUlrl4riU7qbENrA4Hkup1FJkBSf7cbiMOs9w==","fileCount":44,"unpackedSize":67705,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbacQvCRA9TVsSAnZWagAAMIQQAJ4WyRiR1CBPb26o/tRY\n6O/XkhJHhwOmDi0pdWAE2IE8MePbNtYFUs6grK1bLI23WKoz4Gr+sInrfY/v\nUba82VJLYhUbNa5A94z8K6y9jGworc85SD+0SUnOuCw4hSdiE7ORbRyxoJgl\nkUu5ypNvVY+TQImyeecybUOAIJwaQYsAbRkpn/KoFwlm4d9dV4phiw7bwoqP\nAgRUk+ToV1IuvtkUMeIPm4+APm4ITivEFS4X5g2GVVS7owRkCEt6i01VssK6\no7XcR4uZGHrUthCUvHn1ZegmwmO7iFD0aWbpWvv78Fvq92FoPaV9yEikMuGm\nN/8Oz5rPFjkFcUdaJkUdAw7nenAauc8lBcV+4FVSbvifrgtCO976VsSZ2voH\ncEJ3NZskhydAHX6SYQV3UGuMP1rfKi+IAEmldGyy/wA9IxOBA6JH9Zl67x7D\nzhOjyMTPOq0p5RunsLvXOSLsekkeIg28JQjvK4BVT+7tKKBOjf9uRV4BYRIo\nsSwvC7KJDamq4aMtRcT1HnHfrhq3yIINpASXF/JGBKLWUfTQW599/uo6LCVz\noOnlN/W5xPeSjqVvq+IVfph2mACazpbnf4Hh9WPsnVqnGjajEpD+likRwXHr\nfYqUX+rh6Of38lqzydtTS+CUdTo8nvAWFO51thaDiKrHYBcOtyIqbj+LTa9L\nLRYp\r\n=S/8+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG6I3QeidZNJGL9XyAlvcRH08ID2yIfZJ82+tRDgXXfXAiEAhu7pJMo9cdBz6dR5F9lWOrxwoQfP987q5R1YEviAD/M="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.10.3_1533658148025_0.3443837756238586"},"_hasShrinkwrap":false},"0.11.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.11.0","main":"lib/index","files":["lib"],"scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.11.0","dist":{"shasum":"6f25c1bf418ea7d7ec4a81a6df5b8d45de344a02","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.11.0.tgz","integrity":"sha512-kxqRji4kzBvn8k7t0UBt5kdlcFHlXhc+Hpv6LFPCNNGh5MWJEfHVJIeWvOQBU8JRhUbSQoXCSP51CajM6U/Vug==","fileCount":48,"unpackedSize":93104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbg8ZZCRA9TVsSAnZWagAAfR0P/1wxfYBwbXWCD664kxam\n0q01WrVkCYKyqwNzFLag/JfBT0uoSRkD0Xt2UgBOWZd9fAIp7dEONhjCMYAs\nrQCX5eKjtDo5832nqYQCnz0yLvx4jYUod1z7VQKBf/7WOLhpIftNwHAhYhJm\nTiBvMEkh5qGYe8CmWEzc6WgpU+bHNSHf3c+7tlIgBdWWnSzKxnDKn4QeUSr+\n13bZq+yWjWszSr95xdZ7m1yNgGtBEdRXou/X4uGnAztxSG+rypqYuDbbVL+e\nX6AaIh4xowJnHp0X3al7jVSPOro1QrMTYlmNfZWgTx3btwjAWo+1ct0E0dvD\nKwer83PK66d9tiVckBTvqnHOR81xgobiUvrP+XE6+wzafp1DPOl+1JYXHfPd\n0vdnbZkgEeD6Gf4cvoDNMo18siIG33abddmVgIm2FooILwpkaNECLvYRmS/R\n3bsa5I3h0vjMnxWw8KIdpI4LjSZRmkwr6NRt6kHLzlzepaHWY9u3SABzl+Z2\ns+tK9MBOKmHFp3wW53KM3kUPOKP2F1hdgIzBjTlUt3Egf1mVwX4fMz6iY2+8\n/TMGQhCAZI1bQ9nC8q+m/3gukh4LHXuiXQNR1BdsJnpiT78g1hkAWuHRjsKx\nyVTuFAv32sGpQxXcegCA6I/W01tI9yMnFSH8GK9+wBqH8lMxAaZYvi7GocM+\nNebn\r\n=CXfb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH2eQv/i1XFHp9N5VfafrYLYHebT4E1KOyPEL8e4LEpECID5UdLyjXOqZyI7fi2NpmuprYh8I/1SWsP53dF7vVNZ+"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.11.0_1535362649169_0.9858492768705922"},"_hasShrinkwrap":false},"0.12.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.0","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.0","dist":{"shasum":"9e35e03a4dec72f13460551d62c3b145713f95fe","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.0.tgz","integrity":"sha512-FB5UhTI6f89AS+cC29+88l5t8S4mbZpb3LsTS7TolK/LdN6sNIQaUApf02x3gPJVwHdAzxTW/imvHk7qovouZw==","fileCount":50,"unpackedSize":105114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj2KYCRA9TVsSAnZWagAA19kQAJ1GSI4xWimm8F8FgIOM\nIMG5o9U+nrImZo0AstdlFnkx+KOggD2fPlh8isrWIbGiYUmsoiV0mwDF7FKQ\nYC8x46jKMhCkOQeLkjWzJqSx362lBoL9nX8qKxXJDTTFfCypF6c02fVubAA/\nVzUrw0wCFBPB22TTeT9PYFmWF7A5f+MEI0jGIfhSKaFp3ok7xkhx+kLehXb+\nFBX2c0p56S8oIFlQH5Kpbxj3uv4g/1X8DqYOWMCjCMfQCbOYZYE9KIUg4Ft3\n51cH85VJc5wnRZYI6ruixDsPwp7wQCWSAUX0/rguVkmXqxuh+aZhnToio0bY\n4GvLyF+bcygixX+Daeixa0CHIzGdxA8yUmz1LioxKbmNl0SLy/Vuf/FSHtkk\nAEpEFhIBq8uPsv0buF//jlV9baOpaU1biJQA/WxvltuA4yaZ3se/POrLikMQ\n7dYvj6CEh0LtiKbheVg7fANKj335oA/Y96RVeqn/y98wPs0DHdWKPK+gGvje\naeIFfO4mHZhCqZT3d7+/Rp7QT+bBKUyV2qEK01FkA+Bh/tq+jh6tKCFKzv1+\nTzG2c0GoYG5sjqr+N9myp9N1vezF650Sr9+oE8eWAMKjl9ghNhdbSS9JtFYq\nP5FLiJSV2Gp5IQloBYeE0xal2NPwiMLahqIvHFPSkuQ8eT/LYDG2gYT1rXmH\n4DBm\r\n=Sino\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCJTw+5B7vdIDsD4AIZ7Sdq5qZ1gVOM2gq+gRgeqFpYXgIgBmc0C+G/GK5dayPMw6gZBgriw94uMtvLb1uZS73bAbA="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.0_1536123543857_0.8121994024212809"},"_hasShrinkwrap":false},"0.12.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.1","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.1","dist":{"shasum":"dd0ae0829c8140f66fd016b37e3cdf66fd4590e2","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.1.tgz","integrity":"sha512-c9KCwsBK/QosOD7zdjIOSjRo4CsOGJG6jEqqacJiI6LOFaBMHslV4jGY40K4z1G9vdGM+aBhHWkH50FRDX2tjA==","fileCount":50,"unpackedSize":105279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj2h8CRA9TVsSAnZWagAAZloQAJXCT/ju1OuEH5lpRCcF\n5KtQjhHyzVrcF6wblXCFVm2BV1m2VMd4dL3dQhsGMAiaUvr7pXSW6MJBkJcP\nVaTcNk1jrXth+z15ZWA2lA50WpwUWraD8IlicuKAU3uu8a3aJWPAe3QHoY7z\nLze8d0zDlgx0MKy+lBi5STOs1QKNiCND42bLO0D8XRxX/6mnzVuy8mWOuds/\nP7TFM3CP5FjL6CzEgmyVj7kkxe2h4At4RDp0SjPqskX7qnJT6m5Bk5l9kuv+\nPDtSPS9HEz1b/KzpnsFLTBUGLfiGT400nuFulw4NGe4dyPVJrf8wQEbSyqk4\nWlO7q6edGlGmmxOF7yPrg9gZ5ZPckrNhKx8Q3JFt7LpTVNgOG+3SUsUQPJ/i\n0YFCDntNO4jfcqnZ6qhWSvqzXRmMgiGHCZyaTRaP12VLxWMSZHQXd9nK8Qy2\n/IYjdfgS2iyEMcczux6dG7RiT3iksYoJcELqrUvJ96+oN+yWgXv55gE/gzng\npjPYxGSUzOcEQgBbXNCLhuW4j79KFSileLMqv09nlH2/KdDys4LdTbS9sy/A\n+k3PRbdJI5seNJ9PPRzhdpdiO1RlJiBpeJYrp1FCLNwUWqVjXqUlmklaiOa5\nXmPCAobSVywkc91T/pz990klZnlGfpHHQH++L6xLXrHyJOmJgfwzCLjHnbza\nNhOZ\r\n=QQaT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzDd8uRLmddvPj5TC+RMWrohOeegmpSt+UoH+iKbuOAAiBS8L4T5xP6RQ9pb/OQ4XHh8AynFt49Q42mELjD0bUhlg=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.1_1536125051782_0.8813788426738272"},"_hasShrinkwrap":false},"0.12.2":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.2","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.2","dist":{"shasum":"86900693d6473d656e63f778b03ca664560265c5","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.2.tgz","integrity":"sha512-iJsG9pgRUP9gz0lpP3C2QqABuWVyHfnyAodsrmpEQSA+NPT84XJzKKfxFfXZH4J2URdOVe4aNUxATLqjygEgHw==","fileCount":50,"unpackedSize":106118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbj6jaCRA9TVsSAnZWagAAFgcP/iDW89LMQO72RpA1hYM8\nBx5NjdUbi5sG0EGhhJ+HcyRDsFBO2VCK+qI8WqZJSewCMbdo0DofTZ5bHJh7\n4kQLjEiBfj2ScPri5p9kJUxt/77MUcgPMTvZA47G7U97Ip2EnNRxnumwJ2S5\naTAME3VqFVZE+aJ/iUYbZHBhTSSY069FPbpdZ5hgHE/YALT/QO5YMgcE3trc\nYhJcuNpIjlY2daOzIox38Ic/ja/M56W0tOq86u0LgbaJe76149B85YpRq2lq\nzHGVrvR0gt/dCFZertnogofT+0HdIJvvTTAfGwo7UzBRRsFUb3WjOci7dXFC\n9jo0BnnVCFa5dxZHZYPqh0Fp3qvFvr7KHPE4xtQg/kLiJYfMin6Q1lP2+Auj\nPNKb+nVR9GW9xQdVjtB/l6M3eQShVNbWvk4G0LQ3pAbGnkkzYVmLrn4p5JCV\nKMUnbc/DdtV09DgscBmBJZyWNl5H6PEQtxvC0/Ib9fmWAo3OszmpOtlF37rr\nkn/XbGAReFhub0JONPsMg+MGhv5sfvlgo5foFWrAmqS5EXAKignKF7cmNLlB\nudbqXXVyTLWM5+Kb8kMEXwrn4sSo8xem9HxaD8AeDC+zFj7x1wj5aiKvdEzn\nXQrPbo8t/3RvC99bxMOndegsPUYkGOXRDVVHgnap4PG29CFECy+GhEDjR/u/\nGjIV\r\n=KXAZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoolqWpW2kGP7YWw7SqCbwvqKGc2Ijn6vMk+FNbJQr8gIhAPbps2stFMsFiJoerwLLdPzGysPP7FKMnjU5IB6Icrts"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.2_1536141529806_0.5510866470769302"},"_hasShrinkwrap":false},"0.12.3":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.3","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.3","dist":{"shasum":"ef274b530ca8e9fde6ba909a1926ffdf0c8750f4","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.3.tgz","integrity":"sha512-VPWsJFbu7zcXoqYdY9aVrth9jJH1/1hCcx8EXpCz0YlEYbwHImqDLD086opTyF+MLwouMsw011KKZcTwbMxXAA==","fileCount":50,"unpackedSize":106630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkKYCCRA9TVsSAnZWagAA2VgP/jh1/Gmy2BIraYOKTF7o\nNZkgsPXQ+Oww2v3xbfmo6IkZSeSQV9ujOZsAGP7sQo4z62hMbQVxB1RPb0YA\n3ftx9t6jJQR0iArnTFO7gP1KCDsijwMZsqZafmDmagajDqoOLdUiBtP9Rrug\nQG5KXkhbrG+P6RdNP/3jIlt9Fg1kK+10keIVwBGYQ1fpQ4eD1sCntHG75bt8\n9n3bkP4qgDhClXVG/c5J/GNmFqob9MKavmwT5qIJIEHtFHUboAckgzEoWthP\n5t5Yj9vMo8eUSWDGLyvAmv6672+hazjrHzpTQKY85Bp8QIoMkErXtk6pc82Q\n9leoPxa1VL9Wtis+HTMknjxDVrvdP0gtoSeFyRHSw9MLgygv9fZaE1qjSzoD\nik0kLTfVnRZlQjjKxkMpOK+QyZROl2qknDB4JgUb1pirCLwwptXFftCAo1Um\nWFehT2dJIb3imIqzNy/zTi6g2oL9Ar88IUUZXW1xYf6x4FFmJCpmqrcempcY\nXOgPNEOMgncIS4McVY4bWNRm1tBtF9fg3NjNK5zMm4zYys0k/bhmTovUc9i8\nS2rNzhSuC5qyfltGRC3r/AYeSbAIkmEPAtLHd4Izg8w5BCLIoRSjrnIstfE/\n7Qfs7hEKvxIsuNlHvg89KiO8gsEElbKpAeMQTLg3miinkGTDrrfARkIprZDy\nhEHl\r\n=UZtk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID8BA7SnUT2CfKOVEd5ha3HYHSFv83bK/XPuUSuzMexLAiEA2ni/tDVYI1+KD8fFqdfD+bpXxS5ecQwY9cXOF9558nU="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.3_1536206337519_0.6727131454756405"},"_hasShrinkwrap":false},"0.12.4":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.4","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.4","dist":{"shasum":"568fbba051708f5cc9a742b3b98304a27f379d70","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.4.tgz","integrity":"sha512-zqLzUvsoIJRvrWDydpHc3P/TsR+xbb3zJR36E4B6RlqTBqFIgn7kAv4hfcq//48+78qXtHUN4BOlgYjA6RhNCQ==","fileCount":50,"unpackedSize":106719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkOQMCRA9TVsSAnZWagAAAHoP/iP5m6Ab6x+jkEBqqop3\nc2lRyVdKDwGDwNBEAjCTPqbM5YCQkCBYYELT1Ukf7NhaZm43wDFPNgM8igep\nCvgWXgGMaetDKi4fk0Ohd7agGhO4aCWBhYl0YmQ5k6DCOSFpjTD0RFyMtGaQ\n+lsMJQeDeIpOxzxLXCpfXK4th9fPAaNeSGBp4iR6EvaCI+HRvxdTtmMxXJ8Z\nN9DHfPzZw8ijPCsuYSfWnrg0up9pNpzXUtekaPVzlcRifNYQhuq6QAtANMp2\n3pPo+eXvMHWNqROIhme5OfenPQTXn2Z4DkOuDMLZTBytxEl+bFIug4OW+BQg\nD4jdoweqtVRyF1zMurDiANuXVzkwA9MqkWqoI86StpuwOwI5rgcQ5H7Vtf5T\n1g5rl6h9r1UkuEnkoLmqFfWEI2g8Gvb05QGrZKny+Fgf6ZpOEhlzhDsUbKTf\nfjvrMrNOAeHju2kWGBjFHrCNLAoXhACXVdYIQ0dqzXBDp9vHv0k6qgtyai7l\nKZsY9gcvTZJvwV14LSyyr32VS10Br1TkT8orcu9w9ndttlglHedZmq4ME3Bg\n38yPQX6wU1vgKx3t/FXZh7sTaEsiJncYA0S9Rtfx+U8kVqTky95q0Y3oD8+6\n2FgSSneT5ZdspW7y9diBtD1QfChaUunfBAW0XGBoB45EKMRnT+nJDUYCSkL1\nz3jI\r\n=v4GM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF8MRAqC4hILSChHqCAcY3urMvQ0ajwSfviRrWQ+PQNrAiAUjfCkqGqeaY6UJ8ceE3wbI2GSoaw059IQLdTQSU7l7w=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.4_1536222220040_0.10809188461630082"},"_hasShrinkwrap":false},"0.12.5":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.5","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","precommit":"lint-staged","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^3.1.0","invariant":"^2.2.4","lodash":"^4.17.10","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.0.0-rc.3","@babel/core":"^7.0.0-rc.3","@babel/plugin-proposal-class-properties":"^7.0.0-rc.3","@babel/plugin-proposal-object-rest-spread":"^7.0.0-rc.3","@babel/preset-env":"^7.0.0-rc.3","babel-core":"^7.0.0-0","babel-jest":"^23.4.2","eslint":"^5.4.0","eslint-config-prettier":"^3.0.1","eslint-config-yoctol-base":"^0.17.1","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^2.6.2","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^0.14.3","jest":"^23.5.0","lint-staged":"^7.2.2","prettier":"^1.14.2","prettier-package-json":"^2.0.0","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.5","dist":{"shasum":"629d26b45b078e9a10650d003681883a9d25ecd5","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.5.tgz","integrity":"sha512-koUA2T9dSlrHX4seCydZtvF/Y28JpxIGkUTjY4qaarsbMPScwt24kPretiUZ5DMlK9ATqvL22JZHM1hBlAnOFw==","fileCount":50,"unpackedSize":108450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboN5LCRA9TVsSAnZWagAAvAIP/R338Y3Ox8njk1DWmzGO\n+acuBtSLPJYM7lzjgDz0dSOvie19raBxSo7QGPYZTFObvxFSre/cJJZuoHEB\n7QXV6wCwMuR2n1wsn4gOJbZ8smvmpSiDIQZrwb8is2bx4tsV/vmLYgPgbWrC\nDh+uvoLYqqOxTm9G7yclt5VAi96uMtZ47kI+hHnarjbonIZE/6/F1RBWwqAH\nw72DLerJra4wAng7J1TXL6F9VcQzaBpJ9e7+JCNGsjJButxY6XpclilAaAXH\nV1FFERbUjEoAdRyDV2uDVuwTBX19FxT+RtAoaHA0l9KlUbxyon0zC+cLTY8E\nK+2O0W7hNnJEyn10qaMrcHtevTwZ+DwEf4FWi2HbV2lfkzY1M4jPTrwKLv7j\nJ5B1oxL9wAyR3t/b7BfVbZ3lm4WtFev+Lo+oKnof+FnaQDigYlWaFeFQOp8+\nK2O5H3pYrpuZUd1U/AbHbQmb2hM4LOS3Fa6PnuGY9ITSX5L+w+9tSbb43Bi8\nJsquRhbAPpyCYaPZj3Cf30bbpqkTNDrDictMItn70SsowK9EM76lheotK+Nd\n2WiJDLLztq/KtWmU5nrGl/D6HOsl0HjVSwmsCyZEBvzYjlEmwAbaXXzHhVzq\n6Mxk5Ww/sqrzQYrudUH8oGzOc28kcDNsWRCrms9noterM08X/J4uKrVD+POH\no3pQ\r\n=WMTp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXhOif4CKa5ERaQL9oWmTOvHOBbkCQqY8vKWfrRoRnaQIhAK5U3YDDWBGpwTvEFY6hghtTnj413dMAocRE76ds7tnC"}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.5_1537269322913_0.8016864118450862"},"_hasShrinkwrap":false},"0.12.6":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.6","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.1.0","invariant":"^2.2.4","lodash":"^4.17.11","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.1","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/preset-env":"^7.2.0","babel-core":"^7.0.0-0","babel-jest":"^23.6.0","eslint":"^5.10.0","eslint-config-prettier":"^3.3.0","eslint-config-yoctol-base":"^0.18.0","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^3.0.0","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^1.2.0","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"^1.15.3","prettier-package-json":"^2.0.1","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.6","dist":{"shasum":"ae85bd62bc1e6ddd25190a442294c81190d20707","integrity":"sha512-6rmU4Lr4jf3QvV+Ek7UFYCnKdFBkKsjDodIpP846+He5b8tZZt9tK/CYVxkMNVqb6yZWXzF4eUFk6a4N6qqh2Q==","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.6.tgz","fileCount":50,"unpackedSize":108941,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcD5oqCRA9TVsSAnZWagAAW0wP/1vE+O2Uyh8M6CRUohRL\nRaZ3vcZxcfjTJXSMfRKJuwgSUWMLeE3RMW1Dq/rAfq9Mte43QnjWT/wf+38Z\n4ggtQrZYPf+D8aireXLXHBYFsj5gZmPRcjbi2WzKrj1ZRrt4DQMFEe0k3UFm\nuTQk6ekesX3psBxWU2kMzldLJFcCSKOinSvBL6d2uBzAquOy35ODxtGJ7lmt\ndEYoJHD70G8LK2MJCaDbCyF0IsG37SkKjp2m+XDglreHJ9qg/Fy53+VFUtct\n87sbgirexw8l4gPKhUHYd6hELSqC+ZkQjzFBYdppe5uKnhS7mVjjrYmOsyc0\nsWPQJwNawpzNBGU9M1aQDMCyU7SP4mZXpS8IuuWcpABe6Q5rILTJPTOHShgn\naYcjiHJxdeB7RTDvTfZy/0lxMi2uipGZ/O1CikI4ESOx+eBPnVZnFwJxUqO9\n9TJ/KCFaS3VIr04thsPpcDiukVzfcyTVUq2Rn9/m+ZXaJplHPDnqlTE3Zalu\n9vFHDoJ1Cd6huffhkDKhq8bNao5sD6yUq0tGVeoa5AD1m6ZEyhrwAk+pwkt/\n1WHjbM9Gee7QYnD47EcU2CjvvGolEIK+XeBSbldTL+eplEnk+uwZidlI3DY+\nw6MxrlolWqWkrDVwI94agq2l0fYd3520ipWQjETFKspKzLbeA59QQ+l+qWJo\nl8Oe\r\n=6Rep\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKM1Mxg7bURE+VH0JYkdl20CQTT8139jGbigqQe+FatAiEAggP7rRTd+U7Fn5IKYXT7BzT703bir5bk7uoa7HDI9ro="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.6_1544526378017_0.8639762861871989"},"_hasShrinkwrap":false},"0.12.7":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.12.7","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.1.0","invariant":"^2.2.4","lodash":"^4.17.11","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"peerDependencies":{"bottender":">= 0.15.17"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.1","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/preset-env":"^7.2.0","babel-core":"^7.0.0-0","babel-jest":"^23.6.0","eslint":"^5.10.0","eslint-config-prettier":"^3.3.0","eslint-config-yoctol-base":"^0.18.0","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^3.0.0","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^1.2.0","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"^1.15.3","prettier-package-json":"^2.0.1","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.12.7","dist":{"shasum":"22c34cc6344b11f986e05dae35e5e2462e85aded","integrity":"sha512-o69EItfKzwUmlABBGdVDq8hlxljnIW6QZljjelyhKzYrMeGLUh30lfBnjw6Pi817TqZVdMRq1RlvGgfzDg3tKg==","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.12.7.tgz","fileCount":50,"unpackedSize":109251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVCHyCRA9TVsSAnZWagAA7oIQAIJb5uUAszJUlSPzxM9z\nc50+9et94diL+3lQmPPhKnSU8wcoKnk0KCkrK3Qq7FuhloeMEJ4VxkLb6c6F\nWcDUP9ygTnaUBWq8SdUMN5kmgmH2Hq68pF7VbJe+RWpg3pZB5DDS1KLq/CiC\nT04ZUxaJ/ez16UYgUdmkFNCHBrdgJHhsiy/yNNcFKs4CRLMySEn9UwLHSClO\nGcTxD4L1YI8+mgTvliMutF+dUP0eh+2gsLaDTAhvDFti+p9g7HTEtdbpEH3k\nTVEt9s1m9z4a5hyviTFX+Tn8f/FUgIlYaUmbL3Aj1VmPYxEe+A8VOpqrGoY4\nTXnjmK16QPEUBKnA1xJlLC73dpCvC2lqkNvFgybfegxPNyXMhBWyGJMOUMTA\n4xIe4AGZwi9iVwmxRIwHSARcvobYkidfiBR0vYNF9nzqMXHqZmVqfwEdoEs5\nAPYSOkvZXa6aG8ZwDxFcAOhiMBfxrVTCrwwLUkKHAu1MY/h25N6qnQB4Hn4V\nUilnAYqnNNhyrzQ6HemFMexDZHTLQjC5uZY9VyETppCFERV34lftA0+YVbGv\n+Ssc/atg3KiUhgsZTNetS5NFapXj9sYJbanLlYAjq+TDhQoFEK1R+IN7Krsf\ncM/ykBFxuRpEzoaYss5S6p6iAb2Fy6SRfurSMMpEICSRQwErNZoeoXH2YlDo\n0gAS\r\n=Dnak\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqVYUz5E5r5PJDkYPY6zXVdeXM6YlMejQIIjiQ7UZyUAIgbnbd0lyucoZK0RGiHg6ZfwWhEFiYz1KvLSgyUdC4ReM="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.12.7_1549017585880_0.12585800253161028"},"_hasShrinkwrap":false},"0.13.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.13.0","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.1.0","invariant":"^2.2.4","lodash":"^4.17.11","noop2":"^2.0.0","random-item":"^1.0.0","warning":"^4.0.2"},"peerDependencies":{"bottender":">= 0.15.17"},"devDependencies":{"@babel/cli":"^7.2.0","@babel/core":"^7.2.0","@babel/plugin-proposal-class-properties":"^7.2.1","@babel/plugin-proposal-object-rest-spread":"^7.2.0","@babel/preset-env":"^7.2.0","babel-core":"^7.0.0-0","babel-jest":"^23.6.0","eslint":"^5.10.0","eslint-config-prettier":"^3.3.0","eslint-config-yoctol-base":"^0.18.0","eslint-plugin-import":"^2.14.0","eslint-plugin-prettier":"^3.0.0","eslint-plugin-sort-imports-es6-autofix":"^0.3.0","husky":"^1.2.0","jest":"^23.6.0","lint-staged":"^8.1.0","prettier":"^1.15.3","prettier-package-json":"^2.0.1","rimraf":"^2.6.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.13.0","dist":{"shasum":"76729a81885ff1bebd41210a14902e81ec7e4a3f","integrity":"sha512-s2eLREwXeVznlBPd3E1eUwib1KNuLm7lUa16QkwjltIIztox7jI8vjMVriIoni83x1NPii9NwG78Yx5dDHjR8Q==","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.13.0.tgz","fileCount":50,"unpackedSize":111694,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca6QNCRA9TVsSAnZWagAAo8YQAJvltgUDKPSg0ksZgyjb\nHwyY3Nt5RTjbFS4T6EicetAxJChbBg1JVnWvHgr8aQ1kEj7HtD3XFOL7nZCF\nk6euMFBjFXba3z2DPOaHzroXpLYpQm8mJ565cbEncbHknah6UsEOecfr3uzo\ncKcMpjSqoCBc6V+97fYPbw4ISDDB+juwkB4Po1hAFTHNDxC+DXF+tmb8QwT3\nth0mLnpsaHja2lDqaXc00YUnjJJBuyCA8SDpvg7ewUBAPEeRSLiuB9VQ2FMm\nt3b4pMMoJMOPopYmKveg4gtlfYpkfz3C289uxZGUyHAZfHg6bhWmBXYdZ8Oi\nswHg65Q7hqRbSE7yhZh7BOoxdSvRJgTzZot0LPftvfvph7k5wns7YfMCzjmn\nCYL9o9DS3Q4kW6umYR8VbvtJg7ZM1dIhWNcVltO5eQdA3mYWPkKVsooyAQWd\nW6Tsz4HIGUtHs0ptxw4vStUhXk+ausRgsDi8U0KaVyR/8pg5mAiTmeAA+w5f\nmCmHjnxdMIOM6baLjEh6kvP8IJYeYOiiDsgvSH6YTH8/HF5Pe6FrcQapqFPN\nn9lTVv11JuJ5mIzG4Q94AAYA5M9wwsdG7ttCAb3NYDzDEJ6E2SI3kbMCsAim\nzIOFtgBf0XcwM+Vi0COBdAwTA3Di40+U5xPrWLndiTMc9Ce3oseXBy5N/0eg\n+buH\r\n=SlL3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH0vZ90CRDZgWT9S+opYrb+Mev/v8gp/eqK9H6bt+GE4AiEAyuKXEZWcdtiCMGNq6D5huMbA0Y+AlkT9Zow2/jcBLbM="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.13.0_1550558221091_0.8077318977307433"},"_hasShrinkwrap":false},"0.14.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"https://github.com/Yoctol/bottender-compose.git"},"version":"0.14.0","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.3.0","invariant":"^2.2.4","lodash":"^4.17.15","pascal-case":"^2.0.1","random-item":"^3.0.0","warning":"^4.0.3"},"peerDependencies":{"bottender":">= 0.15.17"},"devDependencies":{"@babel/cli":"^7.6.0","@babel/core":"^7.6.0","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","babel-core":"^7.0.0-0","babel-jest":"^24.9.0","eslint":"^6.3.0","eslint-config-prettier":"^6.2.0","eslint-config-yoctol-base":"^0.21.2","eslint-plugin-import":"^2.18.2","eslint-plugin-prettier":"^3.1.0","eslint-plugin-sort-imports-es6-autofix":"^0.5.0","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","prettier":"^1.18.2","prettier-package-json":"^2.1.0","rimraf":"^3.0.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"licenseText":"The MIT License (MIT)\n\nCopyright (c) 2017-present Yoctol (github.com/Yoctol/bottender-compose)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","_id":"bottender-compose@0.14.0","dist":{"shasum":"3ead0d595547f2859cd8c00b8cc39285b335a61a","integrity":"sha512-jG8EopBZOrgS3/g1Kbrr5KnsxPidhsnC2/ivPgml/DyDbELfGsv1pI95AWXNbHBn2sMDPjCCkBvjncuVV+vlVg==","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-0.14.0.tgz","fileCount":50,"unpackedSize":119746,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdhJ4eCRA9TVsSAnZWagAAtasQAIk61P8x3pTwAOKYnRDW\nGiZxSnrAVwnOBfv4F9DcM5hMCWM0HSV82rzjR6iTf/FrCUZQwnB/1N/TGa3c\nWdGEljHWgM+6E3b8xbNDPZjeL3IBhOu91cSjZ8voRFXDjZoNp90Ze2qlNI/6\nopCHZk3XjdzDnqFZzG9ik1itD2J0jvrYeQpn1734tAk+F7vuKo1uW02RYB5S\nr+giLAFLzRsO53caNRn0wgOeHWSXkZdnAVbNaz61O9vk1vCfdwAFCiKbEw00\nQl8PyP9ok+HZehM3aqm3poOcmp53MWdp+OegZwn+aQy5lUYuydFD7g8A5wX2\nQeA7O2ykr1cHA0jvesQSgg5cmCgWGFr1OMmQQM0ZojDua6Ni3VdjbB89xKhV\nUceix3qZ1+wpLoTULfdifuKhnB5SWuRWmd0GiJUCLVLeye7iMhRnvSozyNbf\nZI6Q/APN7beqdbkHOPyBfQiiUJJi2ar9z1BvZmXQZQSB47QdHcI2gb2/OoiN\nmaYbX08LfKPwBtzNI/kz/W24fDopBafJnBmc+wYPQRtrZQcPMFeJWtKb4wpw\nrnb44pJNW0bVqkAB4scusOYHBoHO/02xzREkgBriwPkGF4bBvqB9hLkSteH+\nKBva479ZsMvlNnhkZiQ8IKtXdo0nzKNj5WMVZ4fU3BL8dkfDw9/EsdS5uL6Q\nitme\r\n=7Qqw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBZCfd+yLd5gxugErt3vqHmlbWEcZ4p1qSqUIJu5t3aEAiAuOr4mCZKRDi1a3KHLhIyRAztT1vTAtJnJHp+0pLiiWw=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_0.14.0_1568972318103_0.2589397339126136"},"_hasShrinkwrap":false},"1.0.0-alpha.1":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"1.0.0-alpha.1","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.3.0","invariant":"^2.2.4","lodash":"^4.17.15","pascal-case":"^2.0.1","random-item":"^3.0.0","warning":"^4.0.3"},"peerDependencies":{"bottender":">= 0.15.17"},"devDependencies":{"@babel/cli":"^7.6.0","@babel/core":"^7.6.0","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","babel-core":"^7.0.0-0","babel-jest":"^24.9.0","eslint":"^6.3.0","eslint-config-prettier":"^6.2.0","eslint-config-yoctol-base":"^0.21.2","eslint-plugin-import":"^2.18.2","eslint-plugin-prettier":"^3.1.0","eslint-plugin-sort-imports-es6-autofix":"^0.5.0","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","prettier":"^1.18.2","prettier-package-json":"^2.1.0","rimraf":"^3.0.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"gitHead":"ed5d86acf36c6fcb3ced323916fa3e13a9523019","readme":"# bottender-compose\n\n[![npm](https://img.shields.io/npm/v/bottender-compose.svg?style=flat-square)](https://www.npmjs.com/package/bottender-compose)\n[![CircleCI](https://circleci.com/gh/Yoctol/bottender-compose.svg?style=shield&circle-token=baa90bb904477834fedf0788e3ff6cbc9708ff43)](https://circleci.com/gh/Yoctol/bottender-compose)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n> An utility library for [Bottender](https://github.com/Yoctol/bottender) and higher-order handlers\n\n![](https://user-images.githubusercontent.com/3382565/45618583-d116bb00-baa8-11e8-9661-b36d8eb834c2.png)\n\n## Installation\n\n```sh\nnpm install bottender-compose\n```\n\n## API Reference\n\n### TOC\n\n- [Actions](#actions)\n  - [`series()`](#series)\n  - [`parallel()`](#parallel)\n  - [`random()`](#random)\n  - [`branch()`](#branch)\n  - [`condition()`](#condition)\n  - [`match()`](#match)\n  - [`platform()`](#platform)\n  - [`tryCatch()`](#trycatch)\n  - [`weight()`](#weight)\n  - [`doNothing()`](#donothing)\n  - [`repeat()`](#repeat)\n  - [`delay()`](#delay)\n  - [`setDisplayName()`](#setdisplayName)\n  - [`effect()`](#effect)\n  - [`attachOptions()`](#attachoptions)\n  - [Logger Methods](#logger-methods)\n  - [Context Methods](#context-methods)\n- [Predicates](#predicates)\n  - [`isTextMatch()`](#istextmatch)\n  - [`isPayloadMatch()`](#ispayloadmatch)\n  - [`hasStateEqual()`](#hasstateequal)\n  - [`not()`](#not)\n  - [`and()`](#and)\n  - [`or()`](#or)\n  - [`alwaysTrue()`](#alwaystrue)\n  - [`alwaysFalse()`](#alwaysfalse)\n  - [Event Predicates](#event-predicates)\n\n### Actions\n\n### `series()`\n\nCreates a function that executes methods in series.\n\n```js\nconst { series, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  series([\n    sendText('1. First Item'),\n    sendText('2. Second Item'),\n    sendText('3. Third Item'),\n  ])\n);\n```\n\n### `parallel()`\n\nCreates a function that executes methods in parallel.\n\n```js\nconst { parallel, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  parallel([\n    sendText('- You got one of Items'),\n    sendText('- You got one of Items'),\n    sendText('- You got one of Items'),\n  ])\n);\n```\n\n### `random()`\n\nCreates a function that executes one of method randomly.\n\n```js\nconst { random, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  random([\n    sendText('You got a random item: A'),\n    sendText('You got a random item: B'),\n    sendText('You got a random item: C'),\n  ])\n);\n```\n\n### `branch()`\n\nCreates a function that will process either the `onTrue` or the `onFalse` function depending upon the result of the condition predicate.  \nFurthermore, `branch` can be sued as curry function.\n\n```js\nconst { branch, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  branch(\n    context => true,\n    sendText('You are the lucky one.'),\n    sendText('Too bad.')\n  )\n);\n\n// curry function\nconst trueConditionBranch = branch(context => true);\n\nbot.onEvent(\n  trueConditionBranch(sendText('You are the lucky one.'), sendText('Too bad.'))\n);\n```\n\nOr you can executes function on `true` and do nothing when received `false`.\n\n```js\nbranch(context => true, sendText('You are the lucky one.'));\n```\n\n`branch` works well with [predicates](#predicates).\n\n### `condition()`\n\nCreates a function that encapsulates `if/else`, `if/else`, ... logic.\n\n```js\nconst { condition, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  condition([\n    [context => false, sendText('a')],\n    [context => false, sendText('b')],\n    [context => true, sendText('c')],\n  ])\n);\n```\n\n`condition` works well with [predicates](#predicates).\n\n### `match()`\n\nCreates a function that encapsulates value matching logic.\n\n```js\nconst { match, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  match('a', [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ])\n);\n```\n\nIt accepts function with `context` argument:\n\n```js\nbot.onEvent(\n  match(context => context.state.answer, [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ])\n);\n\n// curry function\nconst matchAnswer = match(context => context.state.answer);\n\nbot.onEvent(\n  matchAnswer([\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ])\n);\n```\n\nTo assign default action, use `_` as pattern:\n\n```js\nconst { _, match, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  match('a', [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n    [_, sendText('You got something')],\n  ])\n);\n```\n\n### `platform()`\n\nCreates a function that will process function depending upon the platform context.\n\n```js\nconst {\n  platform,\n  sendGenericTemplate,\n  sendImagemap,\n} = require('bottender-compose');\n\nbot.onEvent(platform({\n  messenger: sendGenericTemplate(...),\n  line: sendImagemap(...),\n}));\n```\n\nOr you can use `others` key to match other platforms:\n\n```js\nplatform({\n  messenger: sendGenericTemplate(...),\n  line: sendImagemap(...),\n  others: sendText('Unsupported.'),\n});\n```\n\n### `tryCatch()`\n\nCreates a function that calls error handler on error.  \nFurthermore, `tryCatch` can be used as curry function.\n\n```js\nconst { tryCatch, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  tryCatch(doSomethingMayFail(), sendText('Error Happened~~~~~~~~~~~!'))\n);\n\n// curry function\nconst mayFailTryCatch = tryCatch(doSomethingMayFail());\n\nbot.onEvent(mayFailTryCatch(sendText('Error Happened~~~~~~~~~~~!')));\n```\n\n### `weight()`\n\nCreates a function that randomly executes one of method by its weight.\n\n```js\nconst { weight, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  weight([\n    [0.2, sendText('20%')],\n    [0.4, sendText('40%')],\n    [0.4, sendText('40%')],\n  ])\n);\n```\n\n### `doNothing()`\n\nCreates a no-op function.\n\n```js\nconst { branch, sendText, doNothing } = require('bottender-compose');\n\nbot.onEvent(\n  branch(\n    context => false,\n    sendText('You are the lucky one.'),\n    doNothing() // do exactly nothing...\n  )\n);\n```\n\n### `repeat()`\n\nCreates a function that executes the method repeatedly.  \nFurthermore, `repeat` can be sued as curry function.\n\n```js\nconst { repeat, sendText } = require('bottender-compose');\n\nbot.onEvent(repeat(3, sendText('This will be sent 3 times.')));\n\n// curry function\nconst repeatFiveTimes = repeat(5);\n\nbot.onEvent(repeatFiveTimes(sendText('This will be sent 5 times.')));\n```\n\n### `delay()`\n\nCreates a function that executes methods after a number of milliseconds.\n\n```js\nconst { series, delay, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  series([\n    sendText('1. First Item'),\n    delay(1000),\n    sendText('2. Second Item'),\n    delay(1000),\n    sendText('3. Third Item'),\n  ])\n);\n```\n\n### `setDisplayName()`\n\nAssigns to the `displayName` property on the action.\n\n```js\nconst { setDisplayName, sendText } = require('bottender-compose');\n\nsetDisplayName('sayHello', sendText('hello'));\n\n// curry function\nsetDisplayName('sayHello')(sendText('hello'));\n```\n\n### `effect()`\n\nDoes side effects and mutate state or props.\n\n```js\nconst { effect } = require('bottender-compose');\n\nbot.onEvent(\n  effect(\n    // function has side effects\n    async context => {\n      await doSomeSideEffects();\n      return {\n        derivedState: {\n          x: 1,\n        },\n        derivedProps: {\n          y: 2,\n        },\n      };\n    },\n\n    // action\n    async (context, props) => {\n      console.log(context.state.x); // 1\n      console.log(props.y); // 2\n    }\n  )\n);\n```\n\n### `attachOptions()`\n\nAttaches additional options to the action.\n\n```js\nconst { attachOptions, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  attachOptions({ tag: 'ISSUE_RESOLUTION' }, sendText('Issue Resolved'))\n);\n\n// curry function\nconst attachIssueResolutionTag = attachOptions({ tag: 'ISSUE_RESOLUTION' });\n\nbot.onEvent(attachIssueResolutionTag(sendText('Issue Resolved')));\n```\n\n### Logger Methods\n\n```js\nB.series([\n  B.log('sending hello'),\n  B.info('sending hello'),\n  B.warn('sending hello'),\n  B.error('sending hello'),\n\n  B.sendText('hello'),\n]);\n```\n\nIt supports template too.\n\n```js\nB.series([\n  B.log('user: {{ session.user.id }} x: {{ state.x }}'),\n  B.sendText('hello'),\n]);\n```\n\nYou can use your owner adapter for the logger:\n\n```js\nconst { log, info, warn, error } = B.createLogger({\n  log: debug('log'),\n  info: debug('info'),\n  warn: debug('warn'),\n  error: debug('error'),\n});\n\nB.series([log('sending hello'), B.sendText('hello')]);\n```\n\n### Context Methods\n\n#### Common\n\n- `setState()`\n- `resetState()`\n- `typing()`\n\n#### Messenger\n\n- `sendMessage()`\n- `sendText()`\n- `sendAttachment()`\n- `sendAudio()`\n- `sendImage()`\n- `sendVideo()`\n- `sendFile()`\n- `sendTemplate()`\n- `sendButtonTemplate()`\n- `sendGenericTemplate()`\n- `sendListTemplate()`\n- `sendOpenGraphTemplate()`\n- `sendMediaTemplate()`\n- `sendReceiptTemplate()`\n- `sendAirlineBoardingPassTemplate()`\n- `sendAirlineCheckinTemplate()`\n- `sendAirlineItineraryTemplate()`\n- `sendAirlineFlightUpdateTemplate()`\n- `sendSenderAction()`\n- `markSeen()`\n- `typingOn()`\n- `typingOff()`\n- `passThreadControl()`\n- `passThreadControlToPageInbox()`\n- `takeThreadControl()`\n- `requestThreadControl()`\n- `associateLabel()`\n- `dissociateLabel()`\n\n#### LINE\n\n- `sendText()`\n- `sendImage()`\n- `sendVideo()`\n- `sendAudio()`\n- `sendLocation()`\n- `sendSticker()`\n- `sendImagemap()`\n- `sendButtonTemplate()`\n- `sendConfirmTemplate()`\n- `sendCarouselTemplate()`\n- `sendImageCarouselTemplate()`\n- `reply()`\n- `replyText()`\n- `replyImage()`\n- `replyVideo()`\n- `replyAudio()`\n- `replyLocation()`\n- `replySticker()`\n- `replyImagemap()`\n- `replyButtonTemplate()`\n- `replyConfirmTemplate()`\n- `replyCarouselTemplate()`\n- `replyImageCarouselTemplate()`\n- `push()`\n- `pushText()`\n- `pushImage()`\n- `pushVideo()`\n- `pushAudio()`\n- `pushLocation()`\n- `pushSticker()`\n- `pushImagemap()`\n- `pushButtonTemplate()`\n- `pushConfirmTemplate()`\n- `pushCarouselTemplate()`\n- `pushImageCarouselTemplate()`\n- `linkRichMenu()`\n- `unlinkRichMenu()`\n\n#### Slack\n\n- `sendText()`\n- `postMessage()`\n- `postEphemeral()`\n\n#### Telegram\n\n- `sendText()`\n- `sendMessage()`\n- `sendPhoto()`\n- `sendAudio()`\n- `sendDocument()`\n- `sendSticker()`\n- `sendVideo()`\n- `sendVoice()`\n- `sendVideoNote()`\n- `sendMediaGroup()`\n- `sendLocation()`\n- `sendVenue()`\n- `sendContact()`\n- `sendChatAction()`\n- `editMessageText()`\n- `editMessageCaption()`\n- `editMessageReplyMarkup()`\n- `deleteMessage()`\n- `editMessageLiveLocation()`\n- `stopMessageLiveLocation()`\n- `forwardMessageFrom()`\n- `forwardMessageTo()`\n- `kickChatMember()`\n- `unbanChatMember()`\n- `restrictChatMember()`\n- `promoteChatMember()`\n- `exportChatInviteLink()`\n- `setChatPhoto()`\n- `deleteChatPhoto()`\n- `setChatTitle()`\n- `setChatDescription()`\n- `setChatStickerSet()`\n- `deleteChatStickerSet()`\n- `pinChatMessage()`\n- `unpinChatMessage()`\n- `leaveChat()`\n- `sendInvoice()`\n- `answerShippingQuery()`\n- `answerPreCheckoutQuery()`\n- `answerInlineQuery()`\n- `sendGame()`\n- `setGameScore()`\n\n#### Viber\n\n- `sendMessage()`\n- `sendText()`\n- `sendPicture()`\n- `sendVideo()`\n- `sendFile()`\n- `sendContact()`\n- `sendLocation()`\n- `sendURL()`\n- `sendSticker()`\n- `sendCarouselContent()`\n\n#### Facebook\n\n- `sendComment()`\n- `sendPrivateReply()`\n- `sendLike()`\n\n### Passing Function as Argument to Context Method\n\nYou can pass function as argument to handle time-specified or context-specified case, for example:\n\n```js\n// Lazy execution\nB.sendText(() => `Now: ${new Date()}`);\n\n// Use user information on context\nB.sendText(\n  context =>\n    `${context.session.user.first_name} ${\n      context.session.user.last_name\n    }, You are the lucky one.`\n);\n\n// Use event information\nB.sendText(context => `Received: ${context.event.text}`);\n```\n\n### Use Template in String\n\nYou can use `context`, `session`, `event`, `state`, `user` to access values in your template string:\n\n```js\nB.sendText('Hi, {{session.user.first_name}} {{session.user.last_name}}');\nB.sendText('Received: {{event.text}}');\nB.sendText('State: {{state.xxx}}');\nB.sendText('User: {{user.first_name}} {{user.last_name}}');\n```\n\nOr use `props` to access object values that provided as props when calling action:\n\n```js\nB.sendText('User: {{props.name}}')(context, { name: 'Super User' });\n```\n\n### Predicates\n\n### `isTextMatch()`\n\nCreates a predicate function to return true when text matches.\n\n```js\nconst { isTextMatch } = require('bottender-compose');\n\nisTextMatch('abc')(context); // boolean\nisTextMatch(/abc/)(context); // boolean\n```\n\n### `isPayloadMatch()`\n\nCreates a predicate function to return true when payload matches.\n\n```js\nconst { isPayloadMatch } = require('bottender-compose');\n\nisPayloadMatch('abc')(context); // boolean\nisPayloadMatch(/abc/)(context); // boolean\n```\n\n### `hasStateEqual()`\n\nCreates a predicate function to return true when state matches.\n\n```js\nconst { hasStateEqual } = require('bottender-compose');\n\nhasStateEqual('x', 1)(context); // boolean\nhasStateEqual('x.y.z', 1)(context); // boolean\nhasStateEqual('x', { y: { z: 1 } })(context); // boolean\n```\n\n### `not()`\n\nCreates a predicate function with **not** condition.\n\n```js\nconst { not, hasStateEqual } = require('bottender-compose');\n\nconst predicate = not(hasStateEqual('x', 1));\n\npredicate(context); // boolean\n```\n\n### `and()`\n\nCreates a predicate function with **and** condition.\n\n```js\nconst { and, hasStateEqual } = require('bottender-compose');\n\nconst predicate = and([\n  isTextMatch('abc'),\n  hasStateEqual('x', 1))\n]);\n\npredicate(context) // boolean\n```\n\n### `or()`\n\nCreates a predicate function with **or** condition.\n\n```js\nconst { or, hasStateEqual } = require('bottender-compose');\n\nconst predicate = or([\n  isTextMatch('abc'),\n  hasStateEqual('x', 1))\n]);\n\npredicate(context) // boolean\n```\n\n### `alwaysTrue`\n\nCreates a predicate function that always return `true`.\n\n```js\nconst { alwaysTrue } = require('bottender-compose');\n\nconst predicate = alwaysTrue();\n\npredicate(context); // true\n```\n\n### `alwaysFalse`\n\nCreates a predicate function that always return `false`.\n\n```js\nconst { alwaysFalse } = require('bottender-compose');\n\nconst predicate = alwaysFalse();\n\npredicate(context); // false\n```\n\n### Event Predicates\n\n#### Messenger\n\n- `isMessage()`\n- `isText()`\n- `hasAttachment()`\n- `isImage()`\n- `isAudio()`\n- `isVideo()`\n- `isLocation()`\n- `isFile()`\n- `isFallback()`\n- `isSticker()`\n- `isLikeSticker()`\n- `isQuickReply()`\n- `isEcho()`\n- `isPostback()`\n- `isGamePlay()`\n- `isOptin()`\n- `isPayment()`\n- `isCheckoutUpdate()`\n- `isPreCheckout()`\n- `isRead()`\n- `isDelivery()`\n- `isPayload()`\n- `isPolicyEnforcement()`\n- `isAppRoles()`\n- `isStandby()`\n- `isPassThreadControl()`\n- `isTakeThreadControl()`\n- `isRequestThreadControl()`\n- `isRequestThreadControlFromPageInbox()`\n- `isFromCustomerChatPlugin()`\n- `isReferral()`\n- `isBrandedCamera()`\n\n#### LINE\n\n- `isMessage()`\n- `isText()`\n- `isImage()`\n- `isVideo()`\n- `isAudio()`\n- `isLocation()`\n- `isSticker()`\n- `isFollow()`\n- `isUnfollow()`\n- `isJoin()`\n- `isLeave()`\n- `isPostback()`\n- `isPayload()`\n- `isBeacon()`\n- `isAccountLink()`\n\n#### Slack\n\n- `isMessage()`\n- `isChannelsMessage()`\n- `isGroupsMessage()`\n- `isImMessage()`\n- `isMpimMessage()`\n- `isText()`\n- `isInteractiveMessage()`\n- `isAppUninstalled()`\n- `isChannelArchive()`\n- `isChannelCreated()`\n- `isChannelDeleted()`\n- `isChannelHistoryChanged()`\n- `isChannelRename()`\n- `isChannelUnarchive()`\n- `isDndUpdated()`\n- `isDndUpdated_user()`\n- `isEmailDomainChanged()`\n- `isEmojiChanged()`\n- `isFileChange()`\n- `isFileCommentAdded()`\n- `isFileCommentDeleted()`\n- `isFileCommentEdited()`\n- `isFileCreated()`\n- `isFileDeleted()`\n- `isFilePublic()`\n- `isFileShared()`\n- `isFileUnshared()`\n- `isGridMigrationFinished()`\n- `isGridMigrationStarted()`\n- `isGroupArchive()`\n- `isGroupClose()`\n- `isGroupHistoryChanged()`\n- `isGroupOpen()`\n- `isGroupRename()`\n- `isGroupUnarchive()`\n- `isImClose()`\n- `isImCreated()`\n- `isImHistoryChanged()`\n- `isImOpen()`\n- `isLinkShared()`\n- `isMemberJoinedChannel()`\n- `isMemberLeftChannel()`\n- `isPinAdded()`\n- `isPinRemoved()`\n- `isReactionAdded()`\n- `isReactionRemoved()`\n- `isStarAdded()`\n- `isStarRemoved()`\n- `isSubteamCreated()`\n- `isSubteamMembersChanged()`\n- `isSubteamSelfAdded()`\n- `isSubteamSelfRemoved()`\n- `isSubteamUpdated()`\n- `isTeamDomainChange()`\n- `isTeamJoin()`\n- `isTeamRename()`\n- `isTokensRevoked()`\n- `isUrlVerification()`\n- `isUserChange()`\n\n#### Telegram\n\n- `isMessage()`\n- `isText()`\n- `isAudio()`\n- `isDocument()`\n- `isGame()`\n- `isPhoto()`\n- `isSticker()`\n- `isVideo()`\n- `isVoice()`\n- `isVideoNote()`\n- `isContact()`\n- `isLocation()`\n- `isVenue()`\n- `isEditedMessage()`\n- `isChannelPost()`\n- `isEditedChannelPost()`\n- `isInlineQuery()`\n- `isChosenInlineResult()`\n- `isCallbackQuery()`\n- `isPayload()`\n- `isShippingQuery()`\n- `isPreCheckoutQuery()`\n\n#### Viber\n\n- `isMessage()`\n- `isText()`\n- `isPicture()`\n- `isVideo()`\n- `isFile()`\n- `isSticker()`\n- `isContact()`\n- `isURL()`\n- `isLocation()`\n- `isSubscribed()`\n- `isUnsubscribed()`\n- `isConversationStarted()`\n- `isDelivered()`\n- `isSeen()`\n- `isFailed()`\n\n#### Facebook\n\n- `isFeed()`\n- `isStatus()`\n- `isStatusAdd()`\n- `isStatusEdited()`\n- `isPost()`\n- `isPostRemove()`\n- `isComment()`\n- `isCommentAdd()`\n- `isCommentEdited()`\n- `isCommentRemove()`\n- `isLike()`\n- `isLikeAdd()`\n- `isLikeRemove()`\n- `isReaction()`\n- `isReactionAdd()`\n- `isReactionEdit()`\n- `isReactionRemove()`\n\n## License\n\nMIT © [Yoctol](https://github.com/Yoctol/bottender-compose)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@1.0.0-alpha.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-uLfX5VoS+hUzuqloFoVarn6nR8MglkoKL9KTtaXL4ObyvH/W3JTL/kumVSGjKN3uVSN2mD4kBPh+a1OfemkIYw==","shasum":"ed21963cf6e077b6809c7788e2724ebccb4b8752","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-1.0.0-alpha.1.tgz","fileCount":43,"unpackedSize":109782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdldPTCRA9TVsSAnZWagAATDEP+wVUXeU5irpr0I0HSpgs\nqfMzIMGqXHLQVvNG4dUmPrIlCf6HLAMrQnZ4XIkrx++tLZZWc11NREyjxyqP\nUQeLTujA/Wiomu4vrLKpXsFc1it6PfXjKIdKUq3v/sANWXRpcY8UjAweXhdw\nA/XZnXy/d2NJxGb7ms5dgLesyEY2Qj6k25olxI7rJlbVF9TtIqtbhfd5EZla\nDHq5CPFWhpm6jJdaI6Y656nGSLJMtApU1AHwYgBQdWnZgNwzn51KFki4+j7j\nHl1mSaK32qTnT51ZvIv1++HfCc+W7Xb8KEm1cMVKTWcOOJW6JRZU5nn/ihdT\n1mhZbeGrzS3WaU4M+z89OBQGUaW+CjI9bEclzSbG1FSV4KeJhDdTVOw1n11J\neAtEo/gdU+1ih08a+PFWQt1T9IRA84lllJDxVeskDqvTpQoiCXyll/tDj3vo\na2Ivxb8oi3Jto4TZ+sU0SaIP6XMZH3gLWz8+Zt2S2Vp8oswsslg8Tk+5WzpZ\niN+jKsDdS2nfEX+/TW1OeWELa1gXmcGxgpLzT0Op6o1p5BNlHjDYVcvDoBfU\nMwa7PPFLVeiu5LKVrkpNgLSG9ptZ6Tpwf4oNDfMfx/EWBHshIalAtpdxSyCA\nILKqkH/1EUs3OJtkUNs+ZL3bdB2dPcMPDhHhts5V6a8WwvNYXTXWhVF2AE2F\nlazB\r\n=ko54\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOD9kn9nPBw3sNYeESqVY32DaKvnjhWtLfCCT9cRtLggIgQ6MFgBVWPVn4QbKuEIu6giua1UX4sxy66jGr3k+ZqX4="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_1.0.0-alpha.1_1570100178724_0.08794827680775841"},"_hasShrinkwrap":false},"1.0.0-alpha.2":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"1.0.0-alpha.2","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage --runInBand --forceExit","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.3.0","invariant":"^2.2.4","lodash":"^4.17.15","pascal-case":"^2.0.1","random-item":"^3.0.0","warning":"^4.0.3"},"peerDependencies":{"bottender":">= 0.15.17"},"devDependencies":{"@babel/cli":"^7.6.0","@babel/core":"^7.6.0","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","babel-core":"^7.0.0-0","babel-jest":"^24.9.0","eslint":"^6.3.0","eslint-config-prettier":"^6.2.0","eslint-config-yoctol-base":"^0.21.2","eslint-plugin-import":"^2.18.2","eslint-plugin-prettier":"^3.1.0","eslint-plugin-sort-imports-es6-autofix":"^0.5.0","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","prettier":"^1.18.2","prettier-package-json":"^2.1.0","rimraf":"^3.0.0"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix","git add"],"package.json":["prettier-package-json --write","git add"]},"gitHead":"c61f01524eac4a46fee63b1d7078127336bffab4","readme":"# bottender-compose\n\n[![npm](https://img.shields.io/npm/v/bottender-compose.svg?style=flat-square)](https://www.npmjs.com/package/bottender-compose)\n[![CircleCI](https://circleci.com/gh/Yoctol/bottender-compose.svg?style=shield&circle-token=baa90bb904477834fedf0788e3ff6cbc9708ff43)](https://circleci.com/gh/Yoctol/bottender-compose)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n> An utility library for [Bottender](https://github.com/Yoctol/bottender) and higher-order handlers\n\n![](https://user-images.githubusercontent.com/3382565/45618583-d116bb00-baa8-11e8-9661-b36d8eb834c2.png)\n\n## Installation\n\n```sh\nnpm install bottender-compose\n```\n\n## API Reference\n\n### TOC\n\n- [Actions](#actions)\n  - [`series()`](#series)\n  - [`parallel()`](#parallel)\n  - [`random()`](#random)\n  - [`branch()`](#branch)\n  - [`condition()`](#condition)\n  - [`match()`](#match)\n  - [`platform()`](#platform)\n  - [`weight()`](#weight)\n  - [`doNothing()`](#donothing)\n  - [`repeat()`](#repeat)\n  - [`delay()`](#delay)\n  - [`setDisplayName()`](#setdisplayName)\n  - [`attachOptions()`](#attachoptions)\n  - [Logger Methods](#logger-methods)\n  - [Context Methods](#context-methods)\n- [Predicates](#predicates)\n  - [`isTextMatch()`](#istextmatch)\n  - [`isPayloadMatch()`](#ispayloadmatch)\n  - [`hasStateEqual()`](#hasstateequal)\n  - [`not()`](#not)\n  - [`and()`](#and)\n  - [`or()`](#or)\n  - [`alwaysTrue()`](#alwaystrue)\n  - [`alwaysFalse()`](#alwaysfalse)\n  - [Event Predicates](#event-predicates)\n\n### Actions\n\n### `series()`\n\nCreates a function that executes methods in series.\n\n```js\nconst { series, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  series([\n    sendText('1. First Item'),\n    sendText('2. Second Item'),\n    sendText('3. Third Item'),\n  ])\n);\n```\n\n### `parallel()`\n\nCreates a function that executes methods in parallel.\n\n```js\nconst { parallel, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  parallel([\n    sendText('- You got one of Items'),\n    sendText('- You got one of Items'),\n    sendText('- You got one of Items'),\n  ])\n);\n```\n\n### `random()`\n\nCreates a function that executes one of method randomly.\n\n```js\nconst { random, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  random([\n    sendText('You got a random item: A'),\n    sendText('You got a random item: B'),\n    sendText('You got a random item: C'),\n  ])\n);\n```\n\n### `branch()`\n\nCreates a function that will process either the `onTrue` or the `onFalse` function depending upon the result of the condition predicate.  \nFurthermore, `branch` can be sued as curry function.\n\n```js\nconst { branch, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  branch(\n    context => true,\n    sendText('You are the lucky one.'),\n    sendText('Too bad.')\n  )\n);\n\n// curry function\nconst trueConditionBranch = branch(context => true);\n\nbot.onEvent(\n  trueConditionBranch(sendText('You are the lucky one.'), sendText('Too bad.'))\n);\n```\n\nOr you can executes function on `true` and do nothing when received `false`.\n\n```js\nbranch(context => true, sendText('You are the lucky one.'));\n```\n\n`branch` works well with [predicates](#predicates).\n\n### `condition()`\n\nCreates a function that encapsulates `if/else`, `if/else`, ... logic.\n\n```js\nconst { condition, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  condition([\n    [context => false, sendText('a')],\n    [context => false, sendText('b')],\n    [context => true, sendText('c')],\n  ])\n);\n```\n\n`condition` works well with [predicates](#predicates).\n\n### `match()`\n\nCreates a function that encapsulates value matching logic.\n\n```js\nconst { match, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  match('a', [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ])\n);\n```\n\nIt accepts function with `context` argument:\n\n```js\nbot.onEvent(\n  match(context => context.state.answer, [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ])\n);\n\n// curry function\nconst matchAnswer = match(context => context.state.answer);\n\nbot.onEvent(\n  matchAnswer([\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ])\n);\n```\n\nTo assign default action, use `_` as pattern:\n\n```js\nconst { _, match, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  match('a', [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n    [_, sendText('You got something')],\n  ])\n);\n```\n\n### `platform()`\n\nCreates a function that will process function depending upon the platform context.\n\n```js\nconst {\n  platform,\n  sendGenericTemplate,\n  sendImagemap,\n} = require('bottender-compose');\n\nbot.onEvent(platform({\n  messenger: sendGenericTemplate(...),\n  line: sendImagemap(...),\n}));\n```\n\nOr you can use `others` key to match other platforms:\n\n```js\nplatform({\n  messenger: sendGenericTemplate(...),\n  line: sendImagemap(...),\n  others: sendText('Unsupported.'),\n});\n```\n\n### `weight()`\n\nCreates a function that randomly executes one of method by its weight.\n\n```js\nconst { weight, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  weight([\n    [0.2, sendText('20%')],\n    [0.4, sendText('40%')],\n    [0.4, sendText('40%')],\n  ])\n);\n```\n\n### `doNothing()`\n\nCreates a no-op function.\n\n```js\nconst { branch, sendText, doNothing } = require('bottender-compose');\n\nbot.onEvent(\n  branch(\n    context => false,\n    sendText('You are the lucky one.'),\n    doNothing() // do exactly nothing...\n  )\n);\n```\n\n### `repeat()`\n\nCreates a function that executes the method repeatedly.  \nFurthermore, `repeat` can be sued as curry function.\n\n```js\nconst { repeat, sendText } = require('bottender-compose');\n\nbot.onEvent(repeat(3, sendText('This will be sent 3 times.')));\n\n// curry function\nconst repeatFiveTimes = repeat(5);\n\nbot.onEvent(repeatFiveTimes(sendText('This will be sent 5 times.')));\n```\n\n### `delay()`\n\nCreates a function that executes methods after a number of milliseconds.\n\n```js\nconst { series, delay, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  series([\n    sendText('1. First Item'),\n    delay(1000),\n    sendText('2. Second Item'),\n    delay(1000),\n    sendText('3. Third Item'),\n  ])\n);\n```\n\n### `setDisplayName()`\n\nAssigns to the `displayName` property on the action.\n\n```js\nconst { setDisplayName, sendText } = require('bottender-compose');\n\nsetDisplayName('sayHello', sendText('hello'));\n\n// curry function\nsetDisplayName('sayHello')(sendText('hello'));\n```\n\n### `attachOptions()`\n\nAttaches additional options to the action.\n\n```js\nconst { attachOptions, sendText } = require('bottender-compose');\n\nbot.onEvent(\n  attachOptions({ tag: 'ISSUE_RESOLUTION' }, sendText('Issue Resolved'))\n);\n\n// curry function\nconst attachIssueResolutionTag = attachOptions({ tag: 'ISSUE_RESOLUTION' });\n\nbot.onEvent(attachIssueResolutionTag(sendText('Issue Resolved')));\n```\n\n### Logger Methods\n\n```js\nB.series([\n  B.log('sending hello'),\n  B.info('sending hello'),\n  B.warn('sending hello'),\n  B.error('sending hello'),\n\n  B.sendText('hello'),\n]);\n```\n\nIt supports template too.\n\n```js\nB.series([\n  B.log('user: {{ session.user.id }} x: {{ state.x }}'),\n  B.sendText('hello'),\n]);\n```\n\nYou can use your owner adapter for the logger:\n\n```js\nconst { log, info, warn, error } = B.createLogger({\n  log: debug('log'),\n  info: debug('info'),\n  warn: debug('warn'),\n  error: debug('error'),\n});\n\nB.series([log('sending hello'), B.sendText('hello')]);\n```\n\n### Context Methods\n\n#### Common\n\n- `setState()`\n- `resetState()`\n- `typing()`\n\n#### Messenger\n\n- `sendMessage()`\n- `sendText()`\n- `sendAttachment()`\n- `sendAudio()`\n- `sendImage()`\n- `sendVideo()`\n- `sendFile()`\n- `sendTemplate()`\n- `sendButtonTemplate()`\n- `sendGenericTemplate()`\n- `sendListTemplate()`\n- `sendOpenGraphTemplate()`\n- `sendMediaTemplate()`\n- `sendReceiptTemplate()`\n- `sendAirlineBoardingPassTemplate()`\n- `sendAirlineCheckinTemplate()`\n- `sendAirlineItineraryTemplate()`\n- `sendAirlineFlightUpdateTemplate()`\n- `sendSenderAction()`\n- `markSeen()`\n- `typingOn()`\n- `typingOff()`\n- `passThreadControl()`\n- `passThreadControlToPageInbox()`\n- `takeThreadControl()`\n- `requestThreadControl()`\n- `associateLabel()`\n- `dissociateLabel()`\n\n#### LINE\n\n- `sendText()`\n- `sendImage()`\n- `sendVideo()`\n- `sendAudio()`\n- `sendLocation()`\n- `sendSticker()`\n- `sendImagemap()`\n- `sendButtonTemplate()`\n- `sendConfirmTemplate()`\n- `sendCarouselTemplate()`\n- `sendImageCarouselTemplate()`\n- `reply()`\n- `replyText()`\n- `replyImage()`\n- `replyVideo()`\n- `replyAudio()`\n- `replyLocation()`\n- `replySticker()`\n- `replyImagemap()`\n- `replyButtonTemplate()`\n- `replyConfirmTemplate()`\n- `replyCarouselTemplate()`\n- `replyImageCarouselTemplate()`\n- `push()`\n- `pushText()`\n- `pushImage()`\n- `pushVideo()`\n- `pushAudio()`\n- `pushLocation()`\n- `pushSticker()`\n- `pushImagemap()`\n- `pushButtonTemplate()`\n- `pushConfirmTemplate()`\n- `pushCarouselTemplate()`\n- `pushImageCarouselTemplate()`\n- `linkRichMenu()`\n- `unlinkRichMenu()`\n\n#### Slack\n\n- `sendText()`\n- `postMessage()`\n- `postEphemeral()`\n\n#### Telegram\n\n- `sendText()`\n- `sendMessage()`\n- `sendPhoto()`\n- `sendAudio()`\n- `sendDocument()`\n- `sendSticker()`\n- `sendVideo()`\n- `sendVoice()`\n- `sendVideoNote()`\n- `sendMediaGroup()`\n- `sendLocation()`\n- `sendVenue()`\n- `sendContact()`\n- `sendChatAction()`\n- `editMessageText()`\n- `editMessageCaption()`\n- `editMessageReplyMarkup()`\n- `deleteMessage()`\n- `editMessageLiveLocation()`\n- `stopMessageLiveLocation()`\n- `forwardMessageFrom()`\n- `forwardMessageTo()`\n- `kickChatMember()`\n- `unbanChatMember()`\n- `restrictChatMember()`\n- `promoteChatMember()`\n- `exportChatInviteLink()`\n- `setChatPhoto()`\n- `deleteChatPhoto()`\n- `setChatTitle()`\n- `setChatDescription()`\n- `setChatStickerSet()`\n- `deleteChatStickerSet()`\n- `pinChatMessage()`\n- `unpinChatMessage()`\n- `leaveChat()`\n- `sendInvoice()`\n- `answerShippingQuery()`\n- `answerPreCheckoutQuery()`\n- `answerInlineQuery()`\n- `sendGame()`\n- `setGameScore()`\n\n#### Viber\n\n- `sendMessage()`\n- `sendText()`\n- `sendPicture()`\n- `sendVideo()`\n- `sendFile()`\n- `sendContact()`\n- `sendLocation()`\n- `sendURL()`\n- `sendSticker()`\n- `sendCarouselContent()`\n\n#### Facebook\n\n- `sendComment()`\n- `sendPrivateReply()`\n- `sendLike()`\n\n### Passing Function as Argument to Context Method\n\nYou can pass function as argument to handle time-specified or context-specified case, for example:\n\n```js\n// Lazy execution\nB.sendText(() => `Now: ${new Date()}`);\n\n// Use user information on context\nB.sendText(\n  context =>\n    `${context.session.user.first_name} ${\n      context.session.user.last_name\n    }, You are the lucky one.`\n);\n\n// Use event information\nB.sendText(context => `Received: ${context.event.text}`);\n```\n\n### Use Template in String\n\nYou can use `context`, `session`, `event`, `state`, `user` to access values in your template string:\n\n```js\nB.sendText('Hi, {{session.user.first_name}} {{session.user.last_name}}');\nB.sendText('Received: {{event.text}}');\nB.sendText('State: {{state.xxx}}');\nB.sendText('User: {{user.first_name}} {{user.last_name}}');\n```\n\nOr use `props` to access object values that provided as props when calling action:\n\n```js\nB.sendText('User: {{props.name}}')(context, { name: 'Super User' });\n```\n\n### Predicates\n\n### `isTextMatch()`\n\nCreates a predicate function to return true when text matches.\n\n```js\nconst { isTextMatch } = require('bottender-compose');\n\nisTextMatch('abc')(context); // boolean\nisTextMatch(/abc/)(context); // boolean\n```\n\n### `isPayloadMatch()`\n\nCreates a predicate function to return true when payload matches.\n\n```js\nconst { isPayloadMatch } = require('bottender-compose');\n\nisPayloadMatch('abc')(context); // boolean\nisPayloadMatch(/abc/)(context); // boolean\n```\n\n### `hasStateEqual()`\n\nCreates a predicate function to return true when state matches.\n\n```js\nconst { hasStateEqual } = require('bottender-compose');\n\nhasStateEqual('x', 1)(context); // boolean\nhasStateEqual('x.y.z', 1)(context); // boolean\nhasStateEqual('x', { y: { z: 1 } })(context); // boolean\n```\n\n### `not()`\n\nCreates a predicate function with **not** condition.\n\n```js\nconst { not, hasStateEqual } = require('bottender-compose');\n\nconst predicate = not(hasStateEqual('x', 1));\n\npredicate(context); // boolean\n```\n\n### `and()`\n\nCreates a predicate function with **and** condition.\n\n```js\nconst { and, hasStateEqual } = require('bottender-compose');\n\nconst predicate = and([\n  isTextMatch('abc'),\n  hasStateEqual('x', 1))\n]);\n\npredicate(context) // boolean\n```\n\n### `or()`\n\nCreates a predicate function with **or** condition.\n\n```js\nconst { or, hasStateEqual } = require('bottender-compose');\n\nconst predicate = or([\n  isTextMatch('abc'),\n  hasStateEqual('x', 1))\n]);\n\npredicate(context) // boolean\n```\n\n### `alwaysTrue`\n\nCreates a predicate function that always return `true`.\n\n```js\nconst { alwaysTrue } = require('bottender-compose');\n\nconst predicate = alwaysTrue();\n\npredicate(context); // true\n```\n\n### `alwaysFalse`\n\nCreates a predicate function that always return `false`.\n\n```js\nconst { alwaysFalse } = require('bottender-compose');\n\nconst predicate = alwaysFalse();\n\npredicate(context); // false\n```\n\n### Event Predicates\n\n#### Messenger\n\n- `isMessage()`\n- `isText()`\n- `hasAttachment()`\n- `isImage()`\n- `isAudio()`\n- `isVideo()`\n- `isLocation()`\n- `isFile()`\n- `isFallback()`\n- `isSticker()`\n- `isLikeSticker()`\n- `isQuickReply()`\n- `isEcho()`\n- `isPostback()`\n- `isGamePlay()`\n- `isOptin()`\n- `isPayment()`\n- `isCheckoutUpdate()`\n- `isPreCheckout()`\n- `isRead()`\n- `isDelivery()`\n- `isPayload()`\n- `isPolicyEnforcement()`\n- `isAppRoles()`\n- `isStandby()`\n- `isPassThreadControl()`\n- `isTakeThreadControl()`\n- `isRequestThreadControl()`\n- `isRequestThreadControlFromPageInbox()`\n- `isFromCustomerChatPlugin()`\n- `isReferral()`\n- `isBrandedCamera()`\n\n#### LINE\n\n- `isMessage()`\n- `isText()`\n- `isImage()`\n- `isVideo()`\n- `isAudio()`\n- `isLocation()`\n- `isSticker()`\n- `isFollow()`\n- `isUnfollow()`\n- `isJoin()`\n- `isLeave()`\n- `isPostback()`\n- `isPayload()`\n- `isBeacon()`\n- `isAccountLink()`\n\n#### Slack\n\n- `isMessage()`\n- `isChannelsMessage()`\n- `isGroupsMessage()`\n- `isImMessage()`\n- `isMpimMessage()`\n- `isText()`\n- `isInteractiveMessage()`\n- `isAppUninstalled()`\n- `isChannelArchive()`\n- `isChannelCreated()`\n- `isChannelDeleted()`\n- `isChannelHistoryChanged()`\n- `isChannelRename()`\n- `isChannelUnarchive()`\n- `isDndUpdated()`\n- `isDndUpdated_user()`\n- `isEmailDomainChanged()`\n- `isEmojiChanged()`\n- `isFileChange()`\n- `isFileCommentAdded()`\n- `isFileCommentDeleted()`\n- `isFileCommentEdited()`\n- `isFileCreated()`\n- `isFileDeleted()`\n- `isFilePublic()`\n- `isFileShared()`\n- `isFileUnshared()`\n- `isGridMigrationFinished()`\n- `isGridMigrationStarted()`\n- `isGroupArchive()`\n- `isGroupClose()`\n- `isGroupHistoryChanged()`\n- `isGroupOpen()`\n- `isGroupRename()`\n- `isGroupUnarchive()`\n- `isImClose()`\n- `isImCreated()`\n- `isImHistoryChanged()`\n- `isImOpen()`\n- `isLinkShared()`\n- `isMemberJoinedChannel()`\n- `isMemberLeftChannel()`\n- `isPinAdded()`\n- `isPinRemoved()`\n- `isReactionAdded()`\n- `isReactionRemoved()`\n- `isStarAdded()`\n- `isStarRemoved()`\n- `isSubteamCreated()`\n- `isSubteamMembersChanged()`\n- `isSubteamSelfAdded()`\n- `isSubteamSelfRemoved()`\n- `isSubteamUpdated()`\n- `isTeamDomainChange()`\n- `isTeamJoin()`\n- `isTeamRename()`\n- `isTokensRevoked()`\n- `isUrlVerification()`\n- `isUserChange()`\n\n#### Telegram\n\n- `isMessage()`\n- `isText()`\n- `isAudio()`\n- `isDocument()`\n- `isGame()`\n- `isPhoto()`\n- `isSticker()`\n- `isVideo()`\n- `isVoice()`\n- `isVideoNote()`\n- `isContact()`\n- `isLocation()`\n- `isVenue()`\n- `isEditedMessage()`\n- `isChannelPost()`\n- `isEditedChannelPost()`\n- `isInlineQuery()`\n- `isChosenInlineResult()`\n- `isCallbackQuery()`\n- `isPayload()`\n- `isShippingQuery()`\n- `isPreCheckoutQuery()`\n\n#### Viber\n\n- `isMessage()`\n- `isText()`\n- `isPicture()`\n- `isVideo()`\n- `isFile()`\n- `isSticker()`\n- `isContact()`\n- `isURL()`\n- `isLocation()`\n- `isSubscribed()`\n- `isUnsubscribed()`\n- `isConversationStarted()`\n- `isDelivered()`\n- `isSeen()`\n- `isFailed()`\n\n#### Facebook\n\n- `isFeed()`\n- `isStatus()`\n- `isStatusAdd()`\n- `isStatusEdited()`\n- `isPost()`\n- `isPostRemove()`\n- `isComment()`\n- `isCommentAdd()`\n- `isCommentEdited()`\n- `isCommentRemove()`\n- `isLike()`\n- `isLikeAdd()`\n- `isLikeRemove()`\n- `isReaction()`\n- `isReactionAdd()`\n- `isReactionEdit()`\n- `isReactionRemove()`\n\n## License\n\nMIT © [Yoctol](https://github.com/Yoctol/bottender-compose)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@1.0.0-alpha.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-A15Qha+QEw+gF9wDTzhfNSVOGVMzO2hClMK00m2VLI2VIQh+kOpD5Gk5ckAwESVp9Kdq5ZXrxqHXvMSzw7nWzw==","shasum":"d4fdb83114408de4847afe4fd10dde7855b8fc5a","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-1.0.0-alpha.2.tgz","fileCount":43,"unpackedSize":109079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdltnMCRA9TVsSAnZWagAA2xcP/1jzF6bGfJ4ou+civY09\nmKt/0zkcCLz4a0Ta6xrXmKaoYU5h4ZjqXOONMYGcAMqLcpEZo93svAXqWq1E\nrLXfZ/hG6ECVyI2POLukzaCCu6jSKeSvj4bVZNvpqRG/qavqMuZzqrL7hhTU\n6lMnPJadiz3meyCJrsZosXl4F6B2p9VZWjnAyKyeW13/XjZNHxOMU4uIMbph\nRD7gmdySNFh2scMljQmTwzBDdXuRa/fhAwDUVg1t5+Z7qSlaxF7jsSTp5Bxf\nSGuwxoV2F0XvAtaP8CSmek0rQOgsWefqczQBCF+PFlenYukIgi2WOByU1FZO\nyaNMujHd3F2XcDjBbzbbE3bSHvxkbkFros+bdrFBsItCUOoYBrBxyiP+Nl0c\na8+r57wbfhVybr18SUcoeCIjxHupUVKF94QZ9CS4081TaxXKzfkY6gwfyNWk\nSoSCB6yxrNyVFgb9pppGGXbFRoGkLuswu92olGyGlqB7ITooROVlEderpD/y\n1AR4DTibgntAMUL1DpMEgstXtbvewCUQ9kC+T75rP3vOkH3I/UdY7jqUOT/L\nL9axvxAPmwU9U0XylSX9SgBz0cZ39FLIcrDkqnKRxyoTq7RYyfSLpwo+0n60\n4ZPVq/zi43M/QGfmAGB7QWrQ/5S9rmF9+YDH5uXoi4J2Vtqc3C5l5j7e2L+Y\n2HDu\r\n=EnMx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEN/xR3mf1a5SF0kMmcIARLciotWsom8eA2tkclQs2+vAiEAh/G06MIA+I5hfqwSBp6EEVMcWsqXCibhUW1cBup24nQ="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_1.0.0-alpha.2_1570167243888_0.9448465372993264"},"_hasShrinkwrap":false},"1.0.0-beta.0":{"name":"bottender-compose","description":"An utility library for bottender and higher-order handlers","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"version":"1.0.0-beta.0","main":"lib/index","scripts":{"build":"npm run clean && babel src -d lib --ignore __tests__","clean":"rimraf lib","lint":"eslint src","lint:fix":"yarn run lint --fix","lint:staged":"lint-staged","prepublish":"npm run build","test":"yarn run lint && yarn run testonly","testonly":"jest","testonly:cov":"jest --coverage","testonly:watch":"jest --watch","preversion":"npm test"},"dependencies":{"delay":"^4.3.0","invariant":"^2.2.4","lodash":"^4.17.15","pascal-case":"^3.1.1","random-item":"^3.0.0","warning":"^4.0.3"},"peerDependencies":{"bottender":">= 1"},"devDependencies":{"@babel/cli":"^7.10.1","@babel/core":"^7.10.2","@babel/plugin-proposal-class-properties":"^7.10.1","@babel/plugin-proposal-object-rest-spread":"^7.10.1","@babel/preset-env":"^7.10.2","babel-core":"^7.0.0-0","babel-jest":"^26.0.1","bottender":"^1.4.6","eslint":"^6.3.0","eslint-config-prettier":"^6.11.0","eslint-config-yoctol-base":"^0.23.0","eslint-plugin-import":"^2.21.1","eslint-plugin-prettier":"^3.1.3","eslint-plugin-sort-imports-es6-autofix":"^0.5.0","husky":"^4.2.5","jest":"^26.0.1","lint-staged":"^10.2.9","prettier":"^2.0.5","prettier-package-json":"^2.1.3","rimraf":"^3.0.2"},"keywords":["bot","bottender","compose"],"engines":{"node":">=7.6"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"jest":{"coverageDirectory":"./coverage/","transformIgnorePatterns":["/node_modules/","lib"],"testPathIgnorePatterns":["/node_modules/","lib"],"setupFiles":["./test/setupTest.js"],"testEnvironment":"node","timers":"fake","resetModules":true,"resetMocks":true},"lint-staged":{"*.js":["eslint --fix"],"package.json":["prettier-package-json --write"]},"gitHead":"6da9739765e454eb4f96e6cca56dd74fb61e4794","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"},"homepage":"https://github.com/Yoctol/bottender-compose#readme","_id":"bottender-compose@1.0.0-beta.0","_nodeVersion":"13.8.0","_npmVersion":"6.13.4","dist":{"integrity":"sha512-tCXzA9kbWuPYx6nhmEereD7d9oNnswOokZhyxpnLoRtW232cDk8Iwrc1jsJKTlyTGidrq+hRIGHkP/nIF/ejdA==","shasum":"4b5db7d96dda27a5b194f4889429c7cdda8b0b20","tarball":"https://registry.npmjs.org/bottender-compose/-/bottender-compose-1.0.0-beta.0.tgz","fileCount":43,"unpackedSize":117328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2lBRCRA9TVsSAnZWagAALRUP/1tmW2vjKqZXPv8YR7iK\nfWi1dB70Mo2D1EOOtVQVM0W4UqpPFyudovDRgvLMWfYnIepdMvRkVSEJ2eh+\n0zO/OOxAB7RDwwTRRntF8l3U6uiwRgIZZ5CHi3a9tYkd1RTm+meAuXks1NGF\nJCduBg3954caDN4cPsxBqHN7Se7ZYMZuvS1foR8/ob+BfbX4jhi54G0DUoTv\n+sO0eJN/aywjOH4Vd6rV7zKMelFnXd0eNqcCt8jeodDwksJIWJ1tMfuAKIcF\n5Fdue3+rE3aTlLKzBJizfaF5vRGgCkdgqtDv1y9a/ZOQ5XPoiSTvUiWwlfav\n9bz+IFfTiRGjzfK69NrqsGaRsVpr5YF4qonulqM3fpJ2wSYwBSd0yjysfyn4\nNEfiLoDpYFTQ2Mep23/mjbicHg1UqpVCwVSfXDXyh8ArfUwIkr31GfGT8wnM\nA2frH0Wxv0jLouRlWhmxVa3XSf6YjMSFX0vLrOu9D4HpHWPOnWABRzG8r92r\nG6v9YhGw/ShLMY6nucKAOycMM3xc2NiHUhj4f9WDx4lElNgje7L/mfp0r/3/\noNeDL/SbBPfYi0Ach/5HtCTITCDNwKtkC7xm8O5OcwIiQO5Uxv/NYLNerDE5\n/ohweXrEr3W8n8DMRe35N8U9y6w3UKYU+ujBAF8GIUdEEfnPpXUKaOG6Dxsq\n5NSH\r\n=zYQd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzMAv3jS4rPA1GwUFurg9GwqvPpj/qUG3Uv40tp1xCdAiAvbSI9qx1RtjJNet/DEYfdrR2m8nlEls7J7LJdo78I5Q=="}]},"maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"s92f002@gmail.com","name":"kpman"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"}],"_npmUser":{"name":"chentsulin","email":"chentsulin@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/bottender-compose_1.0.0-beta.0_1591753600044_0.2842481458590602"},"_hasShrinkwrap":false}},"readme":"# bottender-compose\n\n[![npm](https://img.shields.io/npm/v/bottender-compose.svg?style=flat-square)](https://www.npmjs.com/package/bottender-compose)\n[![Build Status](https://github.com/Yoctol/bottender-compose/workflows/Node.js%20CI/badge.svg)](https://github.com/Yoctol/bottender-compose/actions?query=workflow%3ANode.js%20CI+branch%3Amaster)\n[![coverage](https://codecov.io/gh/Yoctol/bottender-compose/branch/master/graph/badge.svg)](https://codecov.io/gh/Yoctol/bottender-compose)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n> An utility library for [Bottender](https://github.com/Yoctol/bottender) and higher-order handlers\n\n![](https://user-images.githubusercontent.com/3382565/45618583-d116bb00-baa8-11e8-9661-b36d8eb834c2.png)\n\n## Installation\n\n```sh\nnpm install bottender-compose\n```\n\n## API Reference\n\n### TOC\n\n- [Actions](#actions)\n  - [`series()`](#series)\n  - [`parallel()`](#parallel)\n  - [`random()`](#random)\n  - [`branch()`](#branch)\n  - [`condition()`](#condition)\n  - [`match()`](#match)\n  - [`platform()`](#platform)\n  - [`weight()`](#weight)\n  - [`noop()`](#noop)\n  - [`repeat()`](#repeat)\n  - [`delay()`](#delay)\n  - [`setDisplayName()`](#setdisplayName)\n  - [`attachOptions()`](#attachoptions)\n  - [Logger Methods](#logger-methods)\n  - [Context Methods](#context-methods)\n- [Predicates](#predicates)\n  - [`isTextMatch()`](#istextmatch)\n  - [`isPayloadMatch()`](#ispayloadmatch)\n  - [`hasStateEqual()`](#hasstateequal)\n  - [`not()`](#not)\n  - [`and()`](#and)\n  - [`or()`](#or)\n  - [`alwaysTrue()`](#alwaystrue)\n  - [`alwaysFalse()`](#alwaysfalse)\n  - [Event Predicates](#event-predicates)\n\n### Actions\n\n### `series()`\n\nCreates a function that executes methods in series.\n\n```js\nconst { series, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return series([\n    sendText('1. First Item'),\n    sendText('2. Second Item'),\n    sendText('3. Third Item'),\n  ]);\n};\n```\n\n### `parallel()`\n\nCreates a function that executes methods in parallel.\n\n```js\nconst { parallel, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return parallel([\n    sendText('- You got one of Items'),\n    sendText('- You got one of Items'),\n    sendText('- You got one of Items'),\n  ]);\n};\n```\n\n### `random()`\n\nCreates a function that executes one of method randomly.\n\n```js\nconst { random, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return random([\n    sendText('You got a random item: A'),\n    sendText('You got a random item: B'),\n    sendText('You got a random item: C'),\n  ]);\n};\n```\n\n### `branch()`\n\nCreates a function that will process either the `onTrue` or the `onFalse` function depending upon the result of the condition predicate.  \nFurthermore, `branch` can be sued as curry function.\n\n```js\nconst { branch, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return branch(\n    context => true,\n    sendText('You are the lucky one.'),\n    sendText('Too bad.')\n  );\n};\n\n// curry function\nconst trueConditionBranch = branch(context => true);\n\nmodule.exports = function App() {\n  return trueConditionBranch(\n    sendText('You are the lucky one.'), \n    sendText('Too bad.')\n  );\n};\n```\n\nOr you can executes function on `true` and do nothing when received `false`.\n\n```js\nbranch(context => true, sendText('You are the lucky one.'));\n```\n\n`branch` works well with [predicates](#predicates).\n\n### `condition()`\n\nCreates a function that encapsulates `if/else`, `if/else`, ... logic.\n\n```js\nconst { condition, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return condition([\n    [context => false, sendText('a')],\n    [context => false, sendText('b')],\n    [context => true, sendText('c')],\n  ]);\n};\n```\n\n`condition` works well with [predicates](#predicates).\n\n### `match()`\n\nCreates a function that encapsulates value matching logic.\n\n```js\nconst { match, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return match('a', [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ]);\n};\n```\n\nIt accepts function with `context` argument:\n\n```js\nmodule.exports = function App() {\n  return match(context => context.state.answer, [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ]);\n};\n\n// curry function\nconst matchAnswer = match(context => context.state.answer);\n\nmodule.exports = function App() {\n  return matchAnswer([\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n  ]);\n};\n```\n\nTo assign default action, use `_` as pattern:\n\n```js\nconst { _, match, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return match('a', [\n    ['a', sendText('You got a A')],\n    ['b', sendText('You got a B')],\n    ['c', sendText('You got a C')],\n    [_, sendText('You got something')],\n  ])\n};\n```\n\n### `platform()`\n\nCreates a function that will process function depending upon the platform context.\n\n```js\nconst {\n  platform,\n  sendGenericTemplate,\n  sendImagemap,\n} = require('bottender-compose');\n\nmodule.exports = function App() {\n  return platform({\n    messenger: sendGenericTemplate(...),\n    line: sendImagemap(...),\n  });\n};\n```\n\nOr you can use `others` key to match other platforms:\n\n```js\nplatform({\n  messenger: sendGenericTemplate(...),\n  line: sendImagemap(...),\n  others: sendText('Unsupported.'),\n});\n```\n\n### `weight()`\n\nCreates a function that randomly executes one of method by its weight.\n\n```js\nconst { weight, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return weight([\n    [0.2, sendText('20%')],\n    [0.4, sendText('40%')],\n    [0.4, sendText('40%')],\n  ]);\n};\n```\n\n### `noop()`\n\nCreates a no-op function.\n\n```js\nconst { branch, sendText, noop } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return branch(\n    context => false,\n    sendText('You are the lucky one.'),\n    noop() // do exactly nothing...\n  );\n};\n```\n\n### `repeat()`\n\nCreates a function that executes the method repeatedly.  \nFurthermore, `repeat` can be sued as curry function.\n\n```js\nconst { repeat, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return repeat(3, sendText('This will be sent 3 times.'));\n};\n\n// curry function\nconst repeatFiveTimes = repeat(5);\n\nmodule.exports = function App() {\n  return repeatFiveTimes(sendText('This will be sent 5 times.'))\n};\n```\n\n### `delay()`\n\nCreates a function that executes methods after a number of milliseconds.\n\n```js\nconst { series, delay, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return series([\n    sendText('1. First Item'),\n    delay(1000),\n    sendText('2. Second Item'),\n    delay(1000),\n    sendText('3. Third Item'),\n  ]);\n};\n```\n\n### `setDisplayName()`\n\nAssigns to the `displayName` property on the action.\n\n```js\nconst { setDisplayName, sendText } = require('bottender-compose');\n\nsetDisplayName('sayHello', sendText('hello'));\n\n// curry function\nsetDisplayName('sayHello')(sendText('hello'));\n```\n\n### `attachOptions()`\n\nAttaches additional options to the action.\n\n```js\nconst { attachOptions, sendText } = require('bottender-compose');\n\nmodule.exports = function App() {\n  return attachOptions(\n    { tag: 'ISSUE_RESOLUTION' }, \n    sendText('Issue Resolved')\n  );\n};\n\n// curry function\nconst attachIssueResolutionTag = attachOptions({ \n  tag: 'ISSUE_RESOLUTION',\n});\n\nmodule.exports = function App() {\n  reutnr attachIssueResolutionTag(sendText('Issue Resolved'));\n};\n```\n\n### Logger Methods\n\n```js\nB.series([\n  B.log('sending hello'),\n  B.info('sending hello'),\n  B.warn('sending hello'),\n  B.error('sending hello'),\n\n  B.sendText('hello'),\n]);\n```\n\nIt supports template too.\n\n```js\nB.series([\n  B.log('user: {{ session.user.id }} x: {{ state.x }}'),\n  B.sendText('hello'),\n]);\n```\n\nYou can use your owner adapter for the logger:\n\n```js\nconst { log, info, warn, error } = B.createLogger({\n  log: debug('log'),\n  info: debug('info'),\n  warn: debug('warn'),\n  error: debug('error'),\n});\n\nB.series([log('sending hello'), B.sendText('hello')]);\n```\n\n### Context Methods\n\n#### Common\n\n- `setState()`\n- `resetState()`\n- `typing()`\n\n#### Messenger\n\n- `sendMessage()`\n- `sendText()`\n- `sendAttachment()`\n- `sendAudio()`\n- `sendImage()`\n- `sendVideo()`\n- `sendFile()`\n- `sendTemplate()`\n- `sendButtonTemplate()`\n- `sendGenericTemplate()`\n- `sendListTemplate()`\n- `sendOpenGraphTemplate()`\n- `sendMediaTemplate()`\n- `sendReceiptTemplate()`\n- `sendAirlineBoardingPassTemplate()`\n- `sendAirlineCheckinTemplate()`\n- `sendAirlineItineraryTemplate()`\n- `sendAirlineUpdateTemplate()`\n- `sendSenderAction()`\n- `markSeen()`\n- `typingOn()`\n- `typingOff()`\n- `passThreadControl()`\n- `passThreadControlToPageInbox()`\n- `takeThreadControl()`\n- `requestThreadControl()`\n- `associateLabel()`\n- `dissociateLabel()`\n\n#### LINE\n\n- `sendText()`\n- `sendImage()`\n- `sendVideo()`\n- `sendAudio()`\n- `sendLocation()`\n- `sendSticker()`\n- `sendImagemap()`\n- `sendButtonTemplate()`\n- `sendConfirmTemplate()`\n- `sendCarouselTemplate()`\n- `sendImageCarouselTemplate()`\n- `reply()`\n- `replyText()`\n- `replyImage()`\n- `replyVideo()`\n- `replyAudio()`\n- `replyLocation()`\n- `replySticker()`\n- `replyImagemap()`\n- `replyButtonTemplate()`\n- `replyConfirmTemplate()`\n- `replyCarouselTemplate()`\n- `replyImageCarouselTemplate()`\n- `push()`\n- `pushText()`\n- `pushImage()`\n- `pushVideo()`\n- `pushAudio()`\n- `pushLocation()`\n- `pushSticker()`\n- `pushImagemap()`\n- `pushButtonTemplate()`\n- `pushConfirmTemplate()`\n- `pushCarouselTemplate()`\n- `pushImageCarouselTemplate()`\n- `linkRichMenu()`\n- `unlinkRichMenu()`\n\n#### Slack\n\n- `sendText()`\n- `postMessage()`\n- `postEphemeral()`\n\n#### Telegram\n\n- `sendText()`\n- `sendMessage()`\n- `sendPhoto()`\n- `sendAudio()`\n- `sendDocument()`\n- `sendSticker()`\n- `sendVideo()`\n- `sendVoice()`\n- `sendVideoNote()`\n- `sendMediaGroup()`\n- `sendLocation()`\n- `sendVenue()`\n- `sendContact()`\n- `sendChatAction()`\n- `editMessageText()`\n- `editMessageCaption()`\n- `editMessageReplyMarkup()`\n- `deleteMessage()`\n- `editMessageLiveLocation()`\n- `stopMessageLiveLocation()`\n- `forwardMessageFrom()`\n- `forwardMessageTo()`\n- `kickChatMember()`\n- `unbanChatMember()`\n- `restrictChatMember()`\n- `promoteChatMember()`\n- `exportChatInviteLink()`\n- `setChatPhoto()`\n- `deleteChatPhoto()`\n- `setChatTitle()`\n- `setChatDescription()`\n- `setChatStickerSet()`\n- `deleteChatStickerSet()`\n- `pinChatMessage()`\n- `unpinChatMessage()`\n- `leaveChat()`\n- `sendInvoice()`\n- `answerShippingQuery()`\n- `answerPreCheckoutQuery()`\n- `answerInlineQuery()`\n- `sendGame()`\n- `setGameScore()`\n\n#### Viber\n\n- `sendMessage()`\n- `sendText()`\n- `sendPicture()`\n- `sendVideo()`\n- `sendFile()`\n- `sendContact()`\n- `sendLocation()`\n- `sendURL()`\n- `sendSticker()`\n- `sendCarouselContent()`\n\n#### Facebook\n\n- `sendComment()`\n- `sendPrivateReply()`\n- `sendLike()`\n\n### Passing Function as Argument to Context Method\n\nYou can pass function as argument to handle time-specified or context-specified case, for example:\n\n```js\n// Lazy execution\nB.sendText(() => `Now: ${new Date()}`);\n\n// Use event information\nB.sendText(context => `Received: ${context.event.text}`);\n```\n\n### Use Template in String\n\nYou can use `context`, `session`, `event`, `state` to access values in your template string:\n\n```js\nB.sendText('Received: {{event.text}}');\nB.sendText('State: {{state.xxx}}');\n```\n\nOr use `props` to access object values that provided as props when calling action:\n\n```js\nB.sendText('User: {{props.name}}')(context, { name: 'Super User' });\n```\n\n### Predicates\n\n### `isTextMatch()`\n\nCreates a predicate function to return true when text matches.\n\n```js\nconst { isTextMatch } = require('bottender-compose');\n\nisTextMatch('abc')(context); // boolean\nisTextMatch(/abc/)(context); // boolean\n```\n\n### `isPayloadMatch()`\n\nCreates a predicate function to return true when payload matches.\n\n```js\nconst { isPayloadMatch } = require('bottender-compose');\n\nisPayloadMatch('abc')(context); // boolean\nisPayloadMatch(/abc/)(context); // boolean\n```\n\n### `hasStateEqual()`\n\nCreates a predicate function to return true when state matches.\n\n```js\nconst { hasStateEqual } = require('bottender-compose');\n\nhasStateEqual('x', 1)(context); // boolean\nhasStateEqual('x.y.z', 1)(context); // boolean\nhasStateEqual('x', { y: { z: 1 } })(context); // boolean\n```\n\n### `not()`\n\nCreates a predicate function with **not** condition.\n\n```js\nconst { not, hasStateEqual } = require('bottender-compose');\n\nconst predicate = not(hasStateEqual('x', 1));\n\npredicate(context); // boolean\n```\n\n### `and()`\n\nCreates a predicate function with **and** condition.\n\n```js\nconst { and, hasStateEqual } = require('bottender-compose');\n\nconst predicate = and([\n  isTextMatch('abc'),\n  hasStateEqual('x', 1))\n]);\n\npredicate(context) // boolean\n```\n\n### `or()`\n\nCreates a predicate function with **or** condition.\n\n```js\nconst { or, hasStateEqual } = require('bottender-compose');\n\nconst predicate = or([\n  isTextMatch('abc'),\n  hasStateEqual('x', 1))\n]);\n\npredicate(context) // boolean\n```\n\n### `alwaysTrue`\n\nCreates a predicate function that always return `true`.\n\n```js\nconst { alwaysTrue } = require('bottender-compose');\n\nconst predicate = alwaysTrue();\n\npredicate(context); // true\n```\n\n### `alwaysFalse`\n\nCreates a predicate function that always return `false`.\n\n```js\nconst { alwaysFalse } = require('bottender-compose');\n\nconst predicate = alwaysFalse();\n\npredicate(context); // false\n```\n\n### Event Predicates\n\n#### Messenger\n\n- `isMessage()`\n- `isText()`\n- `hasAttachment()`\n- `isImage()`\n- `isAudio()`\n- `isVideo()`\n- `isLocation()`\n- `isFile()`\n- `isFallback()`\n- `isSticker()`\n- `isLikeSticker()`\n- `isQuickReply()`\n- `isEcho()`\n- `isPostback()`\n- `isGamePlay()`\n- `isOptin()`\n- `isPayment()`\n- `isCheckoutUpdate()`\n- `isPreCheckout()`\n- `isRead()`\n- `isDelivery()`\n- `isPayload()`\n- `isPolicyEnforcement()`\n- `isAppRoles()`\n- `isStandby()`\n- `isPassThreadControl()`\n- `isTakeThreadControl()`\n- `isRequestThreadControl()`\n- `isRequestThreadControlFromPageInbox()`\n- `isFromCustomerChatPlugin()`\n- `isReferral()`\n- `isBrandedCamera()`\n\n#### LINE\n\n- `isMessage()`\n- `isText()`\n- `isImage()`\n- `isVideo()`\n- `isAudio()`\n- `isLocation()`\n- `isSticker()`\n- `isFollow()`\n- `isUnfollow()`\n- `isJoin()`\n- `isLeave()`\n- `isPostback()`\n- `isPayload()`\n- `isBeacon()`\n- `isAccountLink()`\n\n#### Slack\n\n- `isMessage()`\n- `isChannelsMessage()`\n- `isGroupsMessage()`\n- `isImMessage()`\n- `isMpimMessage()`\n- `isText()`\n- `isInteractiveMessage()`\n- `isAppUninstalled()`\n- `isChannelArchive()`\n- `isChannelCreated()`\n- `isChannelDeleted()`\n- `isChannelHistoryChanged()`\n- `isChannelRename()`\n- `isChannelUnarchive()`\n- `isDndUpdated()`\n- `isDndUpdated_user()`\n- `isEmailDomainChanged()`\n- `isEmojiChanged()`\n- `isFileChange()`\n- `isFileCommentAdded()`\n- `isFileCommentDeleted()`\n- `isFileCommentEdited()`\n- `isFileCreated()`\n- `isFileDeleted()`\n- `isFilePublic()`\n- `isFileShared()`\n- `isFileUnshared()`\n- `isGridMigrationFinished()`\n- `isGridMigrationStarted()`\n- `isGroupArchive()`\n- `isGroupClose()`\n- `isGroupHistoryChanged()`\n- `isGroupOpen()`\n- `isGroupRename()`\n- `isGroupUnarchive()`\n- `isImClose()`\n- `isImCreated()`\n- `isImHistoryChanged()`\n- `isImOpen()`\n- `isLinkShared()`\n- `isMemberJoinedChannel()`\n- `isMemberLeftChannel()`\n- `isPinAdded()`\n- `isPinRemoved()`\n- `isReactionAdded()`\n- `isReactionRemoved()`\n- `isStarAdded()`\n- `isStarRemoved()`\n- `isSubteamCreated()`\n- `isSubteamMembersChanged()`\n- `isSubteamSelfAdded()`\n- `isSubteamSelfRemoved()`\n- `isSubteamUpdated()`\n- `isTeamDomainChange()`\n- `isTeamJoin()`\n- `isTeamRename()`\n- `isTokensRevoked()`\n- `isUrlVerification()`\n- `isUserChange()`\n\n#### Telegram\n\n- `isMessage()`\n- `isText()`\n- `isAudio()`\n- `isDocument()`\n- `isGame()`\n- `isPhoto()`\n- `isSticker()`\n- `isVideo()`\n- `isVoice()`\n- `isVideoNote()`\n- `isContact()`\n- `isLocation()`\n- `isVenue()`\n- `isEditedMessage()`\n- `isChannelPost()`\n- `isEditedChannelPost()`\n- `isInlineQuery()`\n- `isChosenInlineResult()`\n- `isCallbackQuery()`\n- `isPayload()`\n- `isShippingQuery()`\n- `isPreCheckoutQuery()`\n\n#### Viber\n\n- `isMessage()`\n- `isText()`\n- `isPicture()`\n- `isVideo()`\n- `isFile()`\n- `isSticker()`\n- `isContact()`\n- `isURL()`\n- `isLocation()`\n- `isSubscribed()`\n- `isUnsubscribed()`\n- `isConversationStarted()`\n- `isDelivered()`\n- `isSeen()`\n- `isFailed()`\n\n#### Facebook\n\n- `isFeed()`\n- `isStatus()`\n- `isStatusAdd()`\n- `isStatusEdited()`\n- `isPost()`\n- `isPostRemove()`\n- `isComment()`\n- `isCommentAdd()`\n- `isCommentEdited()`\n- `isCommentRemove()`\n- `isLike()`\n- `isLikeAdd()`\n- `isLikeRemove()`\n- `isReaction()`\n- `isReactionAdd()`\n- `isReactionEdit()`\n- `isReactionRemove()`\n\n## License\n\nMIT © [Yoctol](https://github.com/Yoctol/bottender-compose)\n","maintainers":[{"email":"chentsulin@gmail.com","name":"chentsulin"},{"email":"et284vu065k3@gmail.com","name":"etrexkuo"},{"email":"tw0517tw@gmail.com","name":"tw0517tw"},{"email":"wtflink515@gmail.com","name":"link515"},{"email":"s92f002@gmail.com","name":"kpman"}],"time":{"modified":"2022-06-13T05:00:09.283Z","created":"2017-10-24T02:11:44.247Z","0.0.3":"2017-10-24T02:11:44.247Z","0.1.0":"2017-11-30T05:43:52.989Z","0.1.1":"2017-11-30T07:21:53.213Z","0.2.0":"2017-12-07T10:42:31.100Z","0.3.0":"2017-12-11T05:01:25.794Z","0.3.1":"2017-12-13T04:57:51.857Z","0.4.0":"2017-12-14T03:11:46.857Z","0.5.0":"2017-12-20T06:58:18.327Z","0.5.1":"2017-12-20T09:39:59.704Z","0.6.0":"2018-03-21T06:13:49.807Z","0.6.1":"2018-03-21T08:55:43.267Z","0.6.2":"2018-03-22T09:35:31.767Z","0.7.0":"2018-03-31T08:49:22.070Z","0.8.0":"2018-04-02T09:51:48.200Z","0.8.1":"2018-04-02T10:48:11.471Z","0.8.2":"2018-04-08T16:41:34.573Z","0.8.3":"2018-04-12T10:32:24.166Z","0.8.4":"2018-04-26T07:38:10.900Z","0.9.0":"2018-05-06T13:23:13.402Z","0.9.1":"2018-05-07T03:22:36.800Z","0.10.0":"2018-05-16T02:31:03.900Z","0.10.1":"2018-05-16T04:23:20.513Z","0.10.2":"2018-07-25T10:33:46.375Z","0.10.3":"2018-08-07T16:09:08.234Z","0.11.0":"2018-08-27T09:37:29.286Z","0.12.0":"2018-09-05T04:59:03.985Z","0.12.1":"2018-09-05T05:24:11.992Z","0.12.2":"2018-09-05T09:58:49.958Z","0.12.3":"2018-09-06T03:58:57.676Z","0.12.4":"2018-09-06T08:23:40.224Z","0.12.5":"2018-09-18T11:15:23.025Z","0.12.6":"2018-12-11T11:06:18.102Z","0.12.7":"2019-02-01T10:39:45.954Z","0.13.0":"2019-02-19T06:37:01.187Z","0.14.0":"2019-09-20T09:38:38.234Z","1.0.0-alpha.1":"2019-10-03T10:56:18.927Z","1.0.0-alpha.2":"2019-10-04T05:34:04.121Z","1.0.0-beta.0":"2020-06-10T01:46:40.213Z"},"repository":{"type":"git","url":"git+https://github.com/Yoctol/bottender-compose.git"},"license":"MIT","readmeFilename":"README.md","keywords":["bot","bottender","compose"],"homepage":"https://github.com/Yoctol/bottender-compose#readme","bugs":{"url":"https://github.com/Yoctol/bottender-compose/issues"}}